idt.h
1 #ifndef IDT_H 2 #define IDT_H 3 4 #include "types.h" 5 6 // IDT entry structure 7 struct idt_entry { 8 uint16_t base_low; 9 uint16_t selector; 10 uint8_t zero; 11 uint8_t flags; 12 uint16_t base_high; 13 } __attribute__((packed)); 14 15 // IDT pointer structure 16 struct idt_ptr { 17 uint16_t limit; 18 uint32_t base; 19 } __attribute__((packed)); 20 21 // Interrupt handler type 22 typedef void (*interrupt_handler_t)(void); 23 24 // Initialize IDT 25 void idt_init(void); 26 27 // Set IDT gate 28 void idt_set_gate(uint8_t num, uint32_t base, uint16_t selector, uint8_t flags); 29 30 // Register interrupt handler 31 void register_interrupt_handler(uint8_t num, interrupt_handler_t handler); 32 33 // ISR declarations 34 extern void isr0(void); 35 extern void isr1(void); 36 extern void isr2(void); 37 extern void isr3(void); 38 extern void isr4(void); 39 extern void isr5(void); 40 extern void isr6(void); 41 extern void isr7(void); 42 extern void isr8(void); 43 extern void isr9(void); 44 extern void isr10(void); 45 extern void isr11(void); 46 extern void isr12(void); 47 extern void isr13(void); 48 extern void isr14(void); 49 extern void isr15(void); 50 extern void isr16(void); 51 extern void isr17(void); 52 extern void isr18(void); 53 extern void isr19(void); 54 extern void isr20(void); 55 extern void isr21(void); 56 extern void isr22(void); 57 extern void isr23(void); 58 extern void isr24(void); 59 extern void isr25(void); 60 extern void isr26(void); 61 extern void isr27(void); 62 extern void isr28(void); 63 extern void isr29(void); 64 extern void isr30(void); 65 extern void isr31(void); 66 67 // IRQ ISR declarations 68 extern void isr32(void); // IRQ0 - Timer 69 extern void isr33(void); // IRQ1 - Keyboard 70 extern void isr34(void); // IRQ2 - Cascade 71 extern void isr35(void); // IRQ3 - Serial 2 72 extern void isr36(void); // IRQ4 - Serial 1 73 extern void isr37(void); // IRQ5 - Parallel 2 74 extern void isr38(void); // IRQ6 - Floppy 75 extern void isr39(void); // IRQ7 - Parallel 1 76 extern void isr40(void); // IRQ8 - Real-time clock 77 extern void isr41(void); // IRQ9 - Network 78 extern void isr42(void); // IRQ10 - Network 79 extern void isr43(void); // IRQ11 - Network 80 extern void isr44(void); // IRQ12 - PS/2 Mouse 81 extern void isr45(void); // IRQ13 - FPU 82 extern void isr46(void); // IRQ14 - Primary ATA 83 extern void isr47(void); // IRQ15 - Secondary ATA 84 85 extern void isr128(void); // System call interrupt 86 87 // Registers structure 88 struct registers { 89 uint32_t ds; 90 uint32_t edi, esi, ebp, esp, ebx, edx, ecx, eax; 91 uint32_t int_no, err_code; 92 uint32_t eip, cs, eflags, useresp, ss; 93 }; 94 95 // Interrupt handler 96 void isr_handler(struct registers *regs); 97 98 #endif // IDT_H