1 #ifndef __LUNAIX_AA64_GIC_H
2 #define __LUNAIX_AA64_GIC_H
4 #include <lunaix/bits.h>
8 #define FRAME_SIZE 0x10000
10 typedef unsigned int gicreg_t;
11 typedef unsigned long gicreg64_t;
12 #define FRAME_LEN (FRAME_SIZE / sizeof(gicreg_t))
13 #define REG_INDEX(addr) ((addr) / sizeof(gicreg_t))
15 #define ICC_CTLR_EL1 __sr_encode(3, 0, 12, 12, 4)
16 #define ICC_BPR0_EL1 __sr_encode(3, 0, 12, 8, 3)
17 #define ICC_PMR_EL1 __sr_encode(3, 0, 4, 6, 0)
19 #define ICC_SRE_EL1 __sr_encode(3, 0, 12, 12, 5)
20 #define ICC_SRE_EL2 __sr_encode(3, 4, 12, 9, 5)
21 #define ICC_SRE_EL3 __sr_encode(3, 6, 12, 12, 5)
23 #define ICC_IGRPEN0_EL1 __sr_encode(3, 0, 12, 12, 6)
24 #define ICC_IGRPEN1_EL1 __sr_encode(3, 0, 12, 12, 7)
26 #define ICC_IAR1_EL1 __sr_encode(3, 0, 12, 12, 0)
27 #define ICC_NMIAR1_EL1 __sr_encode(3, 0, 12, 9, 5)
28 #define ICC_EOIR1_EL1 __sr_encode(3, 0, 12, 12, 1)
29 #define ICC_DIR_EL1 __sr_encode(3, 0, 12, 11, 1)
31 #define INTID_ACKED_S 1020
32 #define INTID_ACKED_NS 1021
33 #define INTID_IAR1_NMI 1022
34 #define INTID_NOTHING 1023
35 #define check_special_intid(intid) \
36 ((intid) >= INTID_ACKED_S && (intid) <= INTID_NOTHING)
38 #define LPI_PRIORITY BITFIELD(7, 2)
41 #define ICC_SRE_SRE BITFLAG(0)
42 #define ICC_SRE_DFB BITFLAG(1)
43 #define ICC_SRE_DIB BITFLAG(2)
45 #define ICC_CTRL_EXTRAN BITFLAG(19)
46 #define ICC_CTRL_IDbits BITFIELD(13, 11)
47 #define ICC_CTRL_PRIbits BITFIELD(10, 8)
48 #define ICC_CTRL_PMHE BITFLAG(6)
49 #define ICC_CTRL_EOImode BITFLAG(1)
50 #define ICC_CTRL_CBPR BITFLAG(0)
52 #define ICC_IGRPEN_ENABLE BITFLAG(0)
54 #define GICD_CTLR REG_INDEX(0x0000)
55 #define GICD_TYPER REG_INDEX(0x0004)
56 #define GICD_IIDR REG_INDEX(0x0008)
57 #define GICD_SETSPI_NSR REG_INDEX(0x0040)
59 #define GICD_IGROUPRn REG_INDEX(0x0080)
60 #define GICD_ISENABLER REG_INDEX(0x0100)
61 #define GICD_ICENABLER REG_INDEX(0x0180)
62 #define GICD_IPRIORITYR REG_INDEX(0x0400)
63 #define GICD_ICFGR REG_INDEX(0x0C00)
64 #define GICD_IGRPMODRn REG_INDEX(0x0D00)
65 #define GICD_INMIR REG_INDEX(0x0F80)
67 #define GICR_CTLR REG_INDEX(0x0000)
68 #define GICR_TYPER REG_INDEX(0x0008)
69 #define GICR_PROPBASER REG_INDEX(0x0070)
70 #define GICR_PENDBASER REG_INDEX(0x0078)
71 #define GICR_SETLPIR REG_INDEX(0x0040)
73 #define GITS_CTLR REG_INDEX(0x0000)
74 #define GITS_TYPER REG_INDEX(0x0004)
75 #define GITS_CBASER REG_INDEX(0x0080)
76 #define GITS_BASER REG_INDEX(0x0100)
78 #define GICD_CTLR_DS BITFLAG(6)
79 #define GICD_CTLR_ARE_NS BITFLAG(5)
80 #define GICD_CTLR_ARE_S BITFLAG(4)
81 #define GICD_CTLR_G1SEN BITFLAG(2)
82 #define GICD_CTLR_G1NSEN BITFLAG(1)
83 #define GICD_CTLR_G0EN BITFLAG(0)
85 #define GICD_TYPER_nESPI BITFIELD(31, 27)
86 #define GICD_TYPER_No1N BITFLAG(25)
87 #define GICD_TYPER_LPIS BITFLAG(17)
88 #define GICD_TYPER_MBIS BITFLAG(16)
89 #define GICD_TYPER_nLPI BITFIELD(15, 11)
90 #define GICD_TYPER_NMI BITFLAG(9)
91 #define GICD_TYPER_ESPI BITFLAG(8)
92 #define GICD_TYPER_nSPI BITFIELD(4, 0)
93 #define GICD_TYPER_IDbits BITFIELD(23, 19)
95 #define GICR_TYPER_AffVal BITFIELD(63, 32)
96 #define GICR_TYPER_PPInum BITFIELD(31, 27)
98 #define GICR_TYPER_DirectLPI BITFLAG(3)
100 #define GICR_BASER_PAddr BITFIELD(51, 12)
101 #define GICR_BASER_Share BITFIELD(11, 10)
102 #define GICR_PENDBASER_PTZ BITFLAG(62)
103 #define GICR_PROPBASER_IDbits\
106 #define GICR_CTLR_RWP BITFLAG(31)
107 #define GICR_CTLR_EnLPI BITFLAG(0)
109 #define GITS_CTLR_QS BITFLAG(31)
110 #define GITS_CTLR_EN BITFLAG(0)
112 #define GITS_TYPER_CIL BITFLAG(36)
113 #define GITS_TYPER_CIDbits BITFIELD(35, 32)
114 #define GITS_TYPER_HCC BITFIELD(31, 24)
115 #define GITS_TYPER_PTA BITFLAG(19)
116 #define GITS_TYPER_Devbits BITFIELD(17, 13)
117 #define GITS_TYPER_ID_bits BITFIELD(12, 8)
118 #define GITS_TYPER_ITTe_sz BITFIELD(7, 4)
120 #define GITS_BASER_VALID BITFLAG(63)
121 #define GITS_BASER_Ind BITFLAG(62)
122 #define GITS_BASER_ICACHE BITFIELD(61, 59)
123 #define GITS_BASER_OCACHE BITFIELD(55, 53)
124 #define GITS_BASER_PA BITFIELD(47, 12)
125 #define GITS_BASER_SHARE BITFIELD(11, 10)
126 #define GITS_BASER_SIZE BITFIELD(7, 0)
128 #define GITS_BASERn_TYPE BITFIELD(58, 56)
129 #define GITS_BASERn_EntSz BITFIELD(52, 48)
130 #define GITS_BASERn_PGSZ BITFIELD(9, 8)
132 #define GITS_CWRRD_OFF BITFIELD(19, 5)
135 gic_handle_irq(struct hart_state* hs);
137 #endif /* __LUNAIX_AA64_GIC_H */