1 #include <arch/x86/idt.h>
2 #include <arch/x86/interrupts.h>
7 uint64_t _idt[IDT_ENTRY];
8 uint16_t _idt_limit = sizeof(_idt) - 1;
10 void _set_idt_entry(uint32_t vector, uint16_t seg_selector, void (*isr)(), uint8_t dpl) {
11 uintptr_t offset = (uintptr_t)isr;
12 _idt[vector] = (offset & 0xffff0000) | IDT_ATTR(dpl);
14 _idt[vector] |= (seg_selector << 16) | (offset & 0x0000ffff);
20 // CPU defined interrupts
21 _set_idt_entry(FAULT_DIVISION_ERROR, 0x08, _asm_isr0, 0);
22 _set_idt_entry(FAULT_GENERAL_PROTECTION, 0x08, _asm_isr13, 0);
23 _set_idt_entry(FAULT_PAGE_FAULT, 0x08, _asm_isr14, 0);
25 // system defined interrupts
26 _set_idt_entry(LUNAIX_SYS_PANIC, 0x08, _asm_isr32, 0);