Restructure the interrupt vector distribution for better matching of their inherit...
[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
33 // Keyboard
34 #define PC_KBD_IV                       201
35
36 #define RTC_TIMER_IV                    210
37
38 // 来自APIC的中断有着最高的优先级。
39 // APIC related
40 #define APIC_ERROR_IV                   250
41 #define APIC_LINT0_IV                   251
42 #define APIC_SPIV_IV                    252
43 #define APIC_TIMER_IV                   253
44
45 #define PC_AT_IRQ_RTC                   8
46 #define PC_AT_IRQ_KBD                   1
47
48 #ifndef __ASM__
49 #include <hal/cpu.h>
50 typedef struct {
51     gp_regs registers;
52     unsigned int vector;
53     unsigned int err_code;
54     unsigned int eip;
55     unsigned int cs;
56     unsigned int eflags;
57     unsigned int esp;
58     unsigned int ss;
59 } __attribute__((packed)) isr_param;
60
61 typedef void (*int_subscriber)(isr_param*);
62
63 #pragma region ISR_DECLARATION
64
65 #define ISR(iv) void _asm_isr##iv();
66
67 ISR(0)
68 ISR(1)
69 ISR(2)
70 ISR(3)
71 ISR(4)
72 ISR(5)
73 ISR(6)
74 ISR(7)
75 ISR(8)
76 ISR(9)
77 ISR(10)
78 ISR(11)
79 ISR(12)
80 ISR(13)
81 ISR(14)
82 ISR(15)
83 ISR(16)
84 ISR(17)
85 ISR(18)
86 ISR(19)
87 ISR(20)
88 ISR(21)
89
90 ISR(32)
91
92 ISR(201)
93
94 ISR(210)
95
96 ISR(250)
97 ISR(251)
98 ISR(252)
99 ISR(253)
100 ISR(254)
101
102 #pragma endregion
103
104 void
105 intr_subscribe(const uint8_t vector, int_subscriber);
106
107 void
108 intr_unsubscribe(const uint8_t vector, int_subscriber);
109
110 void
111 intr_set_fallback_handler(int_subscriber);
112
113 void
114 intr_handler(isr_param* param);
115
116 void
117 intr_routine_init();
118
119 #endif
120
121 #endif /* __LUNAIX_INTERRUPTS_H */