feat: kernel stack tracing
[lunaix-os.git] / lunaix-os / includes / hal / intc.h
1 #ifndef __LUNAIX_INTC_H
2 #define __LUNAIX_INTC_H
3
4 #include <lunaix/types.h>
5
6 #define IRQ_TRIG_EDGE 0b0
7 #define IRQ_TRIG_LEVEL 0b1
8
9 #define IRQ_TYPE_FIXED (0b01 << 1)
10 #define IRQ_TYPE_NMI (0b11 << 1)
11 #define IRQ_TYPE (0b11 << 1)
12
13 #define IRQ_VE_HI (0b1 << 3)
14 #define IRQ_VE_LO (0b0 << 3)
15
16 #define IRQ_DEFAULT (IRQ_TRIG_EDGE | IRQ_TYPE_FIXED | IRQ_VE_HI)
17
18 struct intc_context
19 {
20     char* name;
21     void* data;
22
23     void (*irq_attach)(struct intc_context*,
24                        int irq,
25                        int iv,
26                        cpu_t dest,
27                        u32_t flags);
28     void (*notify_eoi)(struct intc_context*, cpu_t id, int iv);
29 };
30
31 void
32 intc_init();
33
34 void
35 intc_irq_attach(int irq, int iv, cpu_t dest, u32_t flags);
36
37 /**
38  * @brief Notify end of interrupt event
39  *
40  * @param id
41  */
42 void
43 intc_notify_eoi(cpu_t id, int iv);
44
45 /**
46  * @brief Notify end of scheduling event
47  *
48  * @param id
49  */
50 void
51 intc_notify_eos(cpu_t id);
52
53 #endif /* __LUNAIX_INTC_H */