2c93c3901be393c9aa97437a6fe727feb82bdb10
[lunaix-os.git] / lunaix-os / includes / arch / x86 / interrupts.h
1 #ifndef __LUNAIX_INTERRUPTS_H
2 #define __LUNAIX_INTERRUPTS_H
3
4
5 #define FAULT_DIVISION_ERROR            0
6 #define FAULT_TRAP_DEBUG_EXCEPTION      1
7 #define INT_NMI                         2
8 #define TRAP_BREAKPOINT                 3
9 #define TRAP_OVERFLOW                   4
10 #define FAULT_BOUND_EXCEED              5
11 #define FAULT_INVALID_OPCODE            6
12 #define FAULT_NO_MATH_PROCESSOR         7
13 #define ABORT_DOUBLE_FAULT              8
14 #define FAULT_RESERVED_0                9
15 #define FAULT_INVALID_TSS               10
16 #define FAULT_SEG_NOT_PRESENT           11
17 #define FAULT_STACK_SEG_FAULT           12
18 #define FAULT_GENERAL_PROTECTION        13
19 #define FAULT_PAGE_FAULT                14
20 #define FAULT_RESERVED_1                15
21 #define FAULT_X87_FAULT                 16
22 #define FAULT_ALIGNMENT_CHECK           17
23 #define ABORT_MACHINE_CHECK             18
24 #define FAULT_SIMD_FP_EXCEPTION         19
25 #define FAULT_VIRTUALIZATION_EXCEPTION  20
26 #define FAULT_CONTROL_PROTECTION        21
27
28 // LunaixOS related
29 #define LUNAIX_SYS_PANIC                32
30
31 #define EX_INTERRUPT_BEGIN              200
32 // APIC related
33 #define APIC_ERROR_IV                   200
34 #define APIC_LINT0_IV                   201
35 #define APIC_TIMER_IV                   202
36 #define APIC_SPIV_IV                    203
37
38 // Keyboard
39 #define PC_KBD_IV                       204
40
41 #define RTC_TIMER_IV                    210
42
43
44 #define PC_AT_IRQ_RTC                   8
45 #define PC_AT_IRQ_KBD                   1
46
47 #ifndef __ASM__
48 #include <hal/cpu.h>
49 typedef struct {
50     gp_regs registers;
51     unsigned int vector;
52     unsigned int err_code;
53     unsigned int eip;
54     unsigned int cs;
55     unsigned int eflags;
56     unsigned int esp;
57     unsigned int ss;
58 } __attribute__((packed)) isr_param;
59
60 typedef void (*int_subscriber)(isr_param*);
61
62 #pragma region ISR_DECLARATION
63 void
64 _asm_isr0();
65
66 void
67 _asm_isr1();
68
69 void
70 _asm_isr2();
71
72 void
73 _asm_isr3();
74
75 void
76 _asm_isr4();
77
78 void
79 _asm_isr5();
80
81 void
82 _asm_isr6();
83
84 void
85 _asm_isr7();
86
87 void
88 _asm_isr8();
89
90 void
91 _asm_isr9();
92
93 void
94 _asm_isr10();
95
96 void
97 _asm_isr11();
98
99 void
100 _asm_isr12();
101
102 void
103 _asm_isr13();
104
105 void
106 _asm_isr14();
107
108 void
109 _asm_isr15();
110
111 void
112 _asm_isr16();
113
114 void
115 _asm_isr17();
116
117 void
118 _asm_isr18();
119
120 void
121 _asm_isr19();
122
123 void
124 _asm_isr20();
125
126 void
127 _asm_isr21();
128
129 void
130 _asm_isr32();
131
132 void
133 _asm_isr200();
134
135 void
136 _asm_isr201();
137
138 void
139 _asm_isr202();
140
141 void
142 _asm_isr203();
143
144 void
145 _asm_isr204();
146
147 void
148 _asm_isr210();
149
150 #pragma endregion
151
152 void
153 intr_subscribe(const uint8_t vector, int_subscriber);
154
155 void
156 intr_unsubscribe(const uint8_t vector, int_subscriber);
157
158 void
159 intr_set_fallback_handler(int_subscriber);
160
161 void
162 intr_handler(isr_param* param);
163
164 void
165 intr_routine_init();
166
167 #endif
168
169 #endif /* __LUNAIX_INTERRUPTS_H */