diff --git a/k/idt.h b/k/idt.h new file mode 100644 index 0000000..4bc9362 --- /dev/null +++ b/k/idt.h @@ -0,0 +1,35 @@ +#ifndef IDT_H +#define IDT_H + +#include + +#define IDT_NB_ENTRIES 32 +#define IDT_SIZE (IDT_NB_ENTRIES * sizeof(struct idt_entry)) + +struct idt_entry +{ + uint16_t offset_1 : 16; + uint16_t selector : 16; + + uint8_t zero : 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)); + +#endif /* !IDT_H */