diff options
Diffstat (limited to 'arch/x86_64/idt.c')
-rw-r--r-- | arch/x86_64/idt.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/arch/x86_64/idt.c b/arch/x86_64/idt.c index 1080f92..2eebf41 100644 --- a/arch/x86_64/idt.c +++ b/arch/x86_64/idt.c @@ -1,12 +1,20 @@ #include "arch/x86_64/tables.h" #include "arch/x86_64/idt.h" +#include "print.h" __attribute__((aligned(0x10))) -interrupt_gate_t s_idtd[256]; +static interrupt_gate_t s_idtd[256]; + +kernel_isr_handler_t kernel_isr_handles[256]; void isr_handle(ivt_state_t* state) { + kernel_isr_handler_t kernel_handle = kernel_isr_handles[state->num]; + if(kernel_handle) { + kernel_handle(state); + return; + } kpanic_state(state, "Unhandled interrupt %i", state->num); } @@ -34,6 +42,8 @@ idt_setup(processor_t *processor) processor->idtr.base = (uintptr_t)&s_idtd; processor->idtr.length = sizeof(s_idtd) - 1; - extern void idt_load(void* idtr); - idt_load(&processor->idtr); + klogf("%X\n", s_idtd[0].type_flags); + + __asm__ volatile("lidt %0":: "m"(processor->idtr)); + __asm__ volatile("cli"); } |