#ifndef IDT_H #define IDT_H #include #include "gdt.h" #include "isr.h" #define IDT_RESERVED_ENTRIES 32 #define IDT_NB_ENTRIES 34 #define IDT_SIZE (IDT_NB_ENTRIES * sizeof(struct idt_entry)) #define INTERRUPT_TYPE 0x6 #define TRAP_TYPE 0x7 struct idt_entry { uint16_t offset_1 : 16; struct segment_selector selector; uint8_t zero_1 : 8; // unused, set to 0 uint8_t type : 3; // gate type uint8_t size : 1; uint8_t zero_2 : 1; // set to 0 for interrupt and trap gates uint8_t desc_priv : 2; // Descriptor privilege uint8_t present : 1; uint16_t offset_2 : 16; } __attribute__ ((packed)); struct idt { struct idt_entry entries[IDT_NB_ENTRIES]; }; struct idt_r { uint16_t limit; uint32_t addr; } __attribute__ ((packed)); struct idt_entry_descriptor { uint32_t offset; struct segment_selector selector; char type; }; void init_idt(void); void interrupt_handler(struct isr_param *isr_param); #endif /* !IDT_H */