feat: spec-compliant AHCI HBA initialization
[lunaix-os.git] / lunaix-os / includes / hal / ioapic.h
1 #ifndef __LUNAIX_IOAPIC_H
2 #define __LUNAIX_IOAPIC_H
3
4 #include <stdint.h>
5
6 #define IOAPIC_IOREGSEL             0x00
7 #define IOAPIC_IOWIN                0x10
8 #define IOAPIC_IOREDTBL_BASE        0x10
9
10 #define IOAPIC_REG_ID               0x00
11 #define IOAPIC_REG_VER              0x01
12 #define IOAPIC_REG_ARB              0x02
13
14 #define IOAPIC_DELMOD_FIXED         0b000
15 #define IOAPIC_DELMOD_LPRIO         0b001
16 #define IOAPIC_DELMOD_NMI           0b100
17
18 #define IOAPIC_MASKED               (1 << 16)
19 #define IOAPIC_TRIG_LEVEL           (1 << 15)
20 #define IOAPIC_INTPOL_L             (1 << 13)
21 #define IOAPIC_DESTMOD_LOGIC        (1 << 11)
22
23 #define IOAPIC_BASE_VADDR   0x2000
24
25 void
26 ioapic_init();
27
28 void
29 ioapic_write(uint8_t sel, uint32_t val);
30
31 uint32_t
32 ioapic_read(uint8_t sel);
33
34 void
35 ioapic_redirect(uint8_t irq, uint8_t vector, uint8_t dest, uint32_t flags);
36
37 #endif /* __LUNAIX_IOAPIC_H */