7db8807e0f531197d0e35527c6b931b200b57498
[lunaix-os.git] / lunaix-os / arch / i386 / includes / sys / x86_isa.h
1 #ifndef __LUNAIX_I386_ASM_H
2 #define __LUNAIX_I386_ASM_H
3
4 #define KCODE_SEG 0x08
5 #define KDATA_SEG 0x10
6 #define UCODE_SEG 0x1B
7 #define UDATA_SEG 0x23
8 #define TSS_SEG 0x28
9
10 #define tss_esp0_off 4
11
12 #ifndef __ASM__
13 #include <lunaix/types.h>
14
15 #define IRQ_TRIG_EDGE 0b0
16 #define IRQ_TRIG_LEVEL 0b1
17
18 #define IRQ_TYPE_FIXED (0b01 << 1)
19 #define IRQ_TYPE_NMI (0b11 << 1)
20 #define IRQ_TYPE (0b11 << 1)
21
22 #define IRQ_VE_HI (0b1 << 3)
23 #define IRQ_VE_LO (0b0 << 3)
24
25 #define IRQ_DEFAULT (IRQ_TRIG_EDGE | IRQ_TYPE_FIXED | IRQ_VE_HI)
26
27
28 struct x86_tss
29 {
30   u32_t link;
31   u32_t esp0;
32   u16_t ss0;
33   u8_t __padding[94];
34 } __attribute__((packed));
35
36 void tss_update_esp(u32_t esp0);
37
38 struct x86_intc
39 {
40     char* name;
41     void* data;
42
43     void (*irq_attach)(struct x86_intc*,
44                        int irq,
45                        int iv,
46                        cpu_t dest,
47                        u32_t flags);
48     void (*notify_eoi)(struct x86_intc*, cpu_t id, int iv);
49 };
50
51
52 #endif
53
54 #endif /* __LUNAIX_I386_ASM_H */