/ kernel / include / idt.h
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