4 #include <lunaix/types.h>
5 #include <lunaix/ds/bitmap.h>
6 #include <lunaix/ds/hashtable.h>
7 #include <asm/aa64_gic.h>
8 #include <asm-generic/isrm.h>
11 #define gic_bmp PREP_BITMAP(gicreg_t, gic_intr, BMP_ORIENT_LSB)
13 #define INITID_SGI_BASE 0
14 #define INITID_SGI_END 15
16 #define INITID_PPI_BASE 16
17 #define INITID_PPI_END 31
19 #define INITID_SPI_BASE 32
20 #define INITID_SPI_END 1019
22 #define INITID_SPEC_BASE 1020
23 #define INITID_SPEC_END 1023
25 #define INITID_ePPI_BASE 1056
26 #define INITID_ePPI_END 1119
28 #define INITID_eSPI_BASE 4096
29 #define INITID_eSPI_END 5119
31 #define INITID_LPI_BASE 8192
33 #define INITID_SPI_NR (INITID_SPEC_BASE - INITID_SPI_BASE)
58 DECLARE_BITMAP(gic_bmp);
62 enum gic_int_type class;
63 enum gic_tri_type trigger;
64 enum gic_grp_type group;
65 unsigned int priority;
72 enum gic_int_type class;
73 enum gic_tri_type trigger;
74 enum gic_grp_type group;
80 DECLARE_HASHTABLE(recs, 32);
81 BITMAP(gic_bmp) ivmap;
88 struct hlist_node node;
90 struct gic_idomain* domain;
93 struct gic_intcfg config;
99 struct gic_distributor
101 BITMAP(gic_bmp) group;
102 BITMAP(gic_bmp) grpmod;
103 BITMAP(gic_bmp) enable;
104 BITMAP(gic_bmp) disable;
105 BITMAP(gic_bmp) icfg;
111 gicreg_t base[FRAME_LEN];
112 gicreg_t sgi_base[FRAME_LEN];
117 gicreg_t base[FRAME_LEN];
120 #define gic_reg64(base, index) (*(gicreg64_t*)(&base[index]))
121 #define gic_regptr(base, index) (__ptr(&base[index]))
125 struct gic_interrupt* active;
127 unsigned int priority;
130 struct gic_cpuif* _if;
132 struct gic_distributor rdist;
135 struct gic_idomain* local_ints;
136 struct gic_idomain* eppi;
140 unsigned int affinity;
148 gicreg_t base[FRAME_LEN]; // control regs
149 gicreg_t trn_space[FRAME_LEN]; // translation space
154 gicreg_t base[FRAME_LEN]; // control regs
155 gicreg_t trn_space[FRAME_LEN]; // translation space
156 gicreg_t vsgi_space[FRAME_LEN]; // vSGI space (v4.1+)
159 typedef unsigned char lpi_entry_t;
163 unsigned int max_intid;
164 struct gic_pe pes[NR_CPU];
169 unsigned int espi_nr;
180 struct gic_its_v41* its_v41;
187 lpi_entry_t* property;
191 BITMAP(gic_bmp) pendings;
194 struct gic_distributor dist;
195 struct gic_distributor dist_e;
198 struct gic_idomain* lpi;
199 struct gic_idomain* spi;
200 struct gic_idomain* espi;
204 #endif /* __LUNAIX_GIC_H */