diff options
Diffstat (limited to 'arch/i386/include/kernel/idt.h')
-rw-r--r-- | arch/i386/include/kernel/idt.h | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/arch/i386/include/kernel/idt.h b/arch/i386/include/kernel/idt.h new file mode 100644 index 0000000..7ccad30 --- /dev/null +++ b/arch/i386/include/kernel/idt.h @@ -0,0 +1,35 @@ +#ifndef I386_IDT_H +#define I386_IDT_H + +#include <stdint.h> + +// IDT Flags +#define SEGMENT_PRESENT 0x8 +#define SEGMENT_RING0 0x0 +#define SEGMENT_STORAGE 0x0 +#define SEGMENT_GATE 0xE +#define SEGMENT_DPL 0x8 + +#define SEGMENT_FLAG SEGMENT_PRESENT | SEGMENT_RING0 | SEGMENT_STORAGE |\ + SEGMENT_GATE | SEGMENT_DPL; + +struct idt_entry { + uint16_t isr_low; + uint16_t kernel_cs; + uint8_t reserved; + uint8_t flags; + uint16_t isr_high; +} __attribute__((packed)); + +struct idt_ptr { + uint16_t limit; + uint32_t base; +} __attribute__((packed)); + +extern struct idt_entry idt[256]; +extern struct idt_ptr idtr; + +extern void idt_set_gate(uint8_t num, void(*handler)(void), uint16_t cs, uint8_t flags); +extern void exception_handler(int num); + +#endif
\ No newline at end of file |