refactor: script to generate code for interrupt installation
[lunaix-os.git] / lunaix-os / includes / arch / x86 / interrupts.h
1 #ifndef __LUNAIX_INTERRUPTS_H
2 #define __LUNAIX_INTERRUPTS_H
3
4 #include "vectors.h"
5
6 #ifndef __ASM__
7 #include <hal/cpu.h>
8 typedef struct
9 {
10     struct
11     {
12         reg32 eax;
13         reg32 ebx;
14         reg32 ecx;
15         reg32 edx;
16         reg32 edi;
17         reg32 ebp;
18         reg32 esi;
19         reg32 ds;
20         reg32 es;
21         reg32 fs;
22         reg32 gs;
23         reg32 esp;
24     } registers;
25
26     unsigned int vector;
27     unsigned int err_code;
28     unsigned int eip;
29     unsigned int cs;
30     unsigned int eflags;
31     unsigned int esp;
32     unsigned int ss;
33 } __attribute__((packed)) isr_param;
34
35 typedef void (*int_subscriber)(const isr_param*);
36
37 void
38 intr_subscribe(const uint8_t vector, int_subscriber);
39
40 void
41 intr_unsubscribe(const uint8_t vector, int_subscriber);
42
43 void intr_set_fallback_handler(int_subscriber);
44
45 void
46 intr_handler(isr_param* param);
47
48 void
49 intr_routine_init();
50
51 #endif
52
53 #endif /* __LUNAIX_INTERRUPTS_H */