Kernel: IDT now allocates descriptors with kmalloc_eternal
This commit is contained in:
		
							parent
							
								
									026fdc251c
								
							
						
					
					
						commit
						62469c529f
					
				|  | @ -1,8 +1,7 @@ | ||||||
| #include <kernel/APIC.h> | #include <kernel/APIC.h> | ||||||
| #include <kernel/IDT.h> | #include <kernel/IDT.h> | ||||||
|  | #include <kernel/kmalloc.h> | ||||||
| #include <kernel/Panic.h> | #include <kernel/Panic.h> | ||||||
| #include <kernel/kprint.h> |  | ||||||
| #include <kernel/Serial.h> |  | ||||||
| 
 | 
 | ||||||
| #define INTERRUPT_HANDLER____(i, msg)													\ | #define INTERRUPT_HANDLER____(i, msg)													\ | ||||||
| 	static void interrupt ## i ()														\ | 	static void interrupt ## i ()														\ | ||||||
|  | @ -71,9 +70,9 @@ namespace IDT | ||||||
| 	} __attribute((packed)); | 	} __attribute((packed)); | ||||||
| 
 | 
 | ||||||
| 	static IDTR				s_idtr; | 	static IDTR				s_idtr; | ||||||
| 	static GateDescriptor	s_idt[0x100]; | 	static GateDescriptor*	s_idt; | ||||||
| 
 | 
 | ||||||
| 	static void (*s_irq_handlers[0x100])() { nullptr }; | 	static void (**s_irq_handlers)(); | ||||||
| 
 | 
 | ||||||
| 	INTERRUPT_HANDLER____(0x00, "Division Error") | 	INTERRUPT_HANDLER____(0x00, "Division Error") | ||||||
| 	INTERRUPT_HANDLER____(0x01, "Debug") | 	INTERRUPT_HANDLER____(0x01, "Debug") | ||||||
|  | @ -184,8 +183,14 @@ namespace IDT | ||||||
| 
 | 
 | ||||||
| 	void initialize() | 	void initialize() | ||||||
| 	{ | 	{ | ||||||
|  | 		s_idt = (GateDescriptor*)kmalloc_eternal(0x100 * sizeof(GateDescriptor)); | ||||||
|  | 		s_irq_handlers = (void(**)())kmalloc_eternal(0x100 * sizeof(void(*)())); | ||||||
|  | 
 | ||||||
|  | 		for (uint32_t i = 0; i < 0x100; i++) | ||||||
|  | 			s_irq_handlers[i] = nullptr; | ||||||
|  | 
 | ||||||
| 		s_idtr.offset = s_idt; | 		s_idtr.offset = s_idt; | ||||||
| 		s_idtr.size = sizeof(s_idt) - 1; | 		s_idtr.size = 0x100 * sizeof(GateDescriptor) - 1; | ||||||
| 
 | 
 | ||||||
| 		for (uint8_t i = 0xFF; i > IRQ_VECTOR_BASE; i--) | 		for (uint8_t i = 0xFF; i > IRQ_VECTOR_BASE; i--) | ||||||
| 			register_irq_handler(i, nullptr); | 			register_irq_handler(i, nullptr); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue