4 #include <lunaix/types.h>
5 #include <lunaix/ds/bitmap.h>
6 #include <lunaix/ds/hashtable.h>
8 #include <hal/devtree.h>
10 #include <asm/aa64_gic.h>
11 #include <asm-generic/isrm.h>
14 #define gic_bmp PREP_BITMAP(gicreg_t, gic_intr, BMP_ORIENT_LSB)
16 #define INITID_SGI_BASE 0
17 #define INITID_SGI_END 15
19 #define INITID_PPI_BASE 16
20 #define INITID_PPI_END 31
22 #define INITID_SPI_BASE 32
23 #define INITID_SPI_END 1019
25 #define INITID_SPEC_BASE 1020
26 #define INITID_SPEC_END 1023
28 #define INITID_ePPI_BASE 1056
29 #define INITID_ePPI_END 1119
31 #define INITID_eSPI_BASE 4096
32 #define INITID_eSPI_END 5119
34 #define INITID_LPI_BASE 8192
36 #define INITID_SPI_NR (INITID_SPEC_BASE - INITID_SPI_BASE)
61 DECLARE_BITMAP(gic_bmp);
65 enum gic_int_type class;
66 enum gic_tri_type trigger;
67 enum gic_grp_type group;
68 unsigned int priority;
75 enum gic_int_type class;
76 enum gic_tri_type trigger;
77 enum gic_grp_type group;
83 DECLARE_HASHTABLE(recs, 32);
84 BITMAP(gic_bmp) ivmap;
91 struct hlist_node node;
93 struct gic_idomain* domain;
96 struct gic_intcfg config;
102 struct gic_distributor
104 BITMAP(gic_bmp) group;
105 BITMAP(gic_bmp) grpmod;
106 BITMAP(gic_bmp) enable;
107 BITMAP(gic_bmp) disable;
108 BITMAP(gic_bmp) icfg;
114 gicreg_t base[FRAME_LEN];
115 gicreg_t sgi_base[FRAME_LEN];
120 gicreg_t base[FRAME_LEN];
123 #define gic_reg64(base, index) (*(gicreg64_t*)(&base[index]))
124 #define gic_regptr(base, index) (__ptr(&base[index]))
128 struct gic_interrupt* active;
130 unsigned int priority;
133 struct gic_cpuif* _if;
135 struct gic_distributor rdist;
138 struct gic_idomain* local_ints;
139 struct gic_idomain* eppi;
143 unsigned int affinity;
151 gicreg_t base[FRAME_LEN]; // control regs
152 gicreg_t trn_space[FRAME_LEN]; // translation space
157 gicreg_t base[FRAME_LEN]; // control regs
158 gicreg_t trn_space[FRAME_LEN]; // translation space
159 gicreg_t vsgi_space[FRAME_LEN]; // vSGI space (v4.1+)
162 typedef unsigned char lpi_entry_t;
166 unsigned int max_intid;
167 struct gic_pe pes[NR_CPU];
172 unsigned int espi_nr;
183 struct gic_its_v41* its_v41;
189 lpi_entry_t* prop_table;
192 BITMAP(gic_bmp) pendings;
195 struct gic_distributor dist;
196 struct gic_distributor dist_e;
199 struct gic_idomain* lpi;
200 struct gic_idomain* spi;
201 struct gic_idomain* espi;
204 struct dt_node* gic_node;
207 #endif /* __LUNAIX_GIC_H */