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