Implement APIC, RTC, basic ACPI parser and timer support
[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 #define RTC_TIMER_IV                    210
39
40
41 #define PC_AT_IRQ_RTC                   8
42 #define PC_AT_IRQ_KBD_BUF_FULL          1
43
44 #ifndef __ASM__
45 #include <hal/cpu.h>
46 typedef struct {
47     gp_regs registers;
48     unsigned int vector;
49     unsigned int err_code;
50     unsigned int eip;
51     unsigned int cs;
52     unsigned int eflags;
53     unsigned int esp;
54     unsigned int ss;
55 } __attribute__((packed)) isr_param;
56
57 typedef void (*int_subscriber)(isr_param*);
58
59 #pragma region ISR_DECLARATION
60 void
61 _asm_isr0();
62
63 void
64 _asm_isr1();
65
66 void
67 _asm_isr2();
68
69 void
70 _asm_isr3();
71
72 void
73 _asm_isr4();
74
75 void
76 _asm_isr5();
77
78 void
79 _asm_isr6();
80
81 void
82 _asm_isr7();
83
84 void
85 _asm_isr8();
86
87 void
88 _asm_isr9();
89
90 void
91 _asm_isr10();
92
93 void
94 _asm_isr11();
95
96 void
97 _asm_isr12();
98
99 void
100 _asm_isr13();
101
102 void
103 _asm_isr14();
104
105 void
106 _asm_isr15();
107
108 void
109 _asm_isr16();
110
111 void
112 _asm_isr17();
113
114 void
115 _asm_isr18();
116
117 void
118 _asm_isr19();
119
120 void
121 _asm_isr20();
122
123 void
124 _asm_isr21();
125
126 void
127 _asm_isr32();
128
129 void
130 _asm_isr200();
131
132 void
133 _asm_isr201();
134
135 void
136 _asm_isr202();
137
138 void
139 _asm_isr203();
140
141 void
142 _asm_isr210();
143
144 #pragma endregion
145
146 void
147 intr_subscribe(const uint8_t vector, int_subscriber);
148
149 void
150 intr_unsubscribe(const uint8_t vector, int_subscriber);
151
152 void
153 intr_set_fallback_handler(int_subscriber);
154
155 void
156 intr_handler(isr_param* param);
157
158 void
159 intr_routine_init();
160
161 #endif
162
163 #endif /* __LUNAIX_INTERRUPTS_H */