xref: /kvmtool/arm/include/arm-common/gic.h (revision 02017c1d16d0a129e37472fc03788e48583f3a67)
17c0e8b0cSWill Deacon #ifndef ARM_COMMON__GIC_H
27c0e8b0cSWill Deacon #define ARM_COMMON__GIC_H
37c0e8b0cSWill Deacon 
47c0e8b0cSWill Deacon #define GIC_SGI_IRQ_BASE		0
57c0e8b0cSWill Deacon #define GIC_PPI_IRQ_BASE		16
67c0e8b0cSWill Deacon #define GIC_SPI_IRQ_BASE		32
77c0e8b0cSWill Deacon 
87c0e8b0cSWill Deacon #define GIC_FDT_IRQ_NUM_CELLS		3
97c0e8b0cSWill Deacon 
107c0e8b0cSWill Deacon #define GIC_FDT_IRQ_TYPE_SPI		0
117c0e8b0cSWill Deacon #define GIC_FDT_IRQ_TYPE_PPI		1
127c0e8b0cSWill Deacon 
137c0e8b0cSWill Deacon #define GIC_FDT_IRQ_PPI_CPU_SHIFT	8
147c0e8b0cSWill Deacon #define GIC_FDT_IRQ_PPI_CPU_MASK	(0xff << GIC_FDT_IRQ_PPI_CPU_SHIFT)
157c0e8b0cSWill Deacon 
167c0e8b0cSWill Deacon #define GIC_CPUI_CTLR_EN		(1 << 0)
17f5ec570aSMarc Zyngier #define GIC_CPUI_PMR_MIN_PRIO		0xff
18f5ec570aSMarc Zyngier 
19f5ec570aSMarc Zyngier #define GIC_CPUI_OFF_PMR		4
207c0e8b0cSWill Deacon 
217c0e8b0cSWill Deacon #define GIC_MAX_CPUS			8
227c0e8b0cSWill Deacon #define GIC_MAX_IRQ			255
237c0e8b0cSWill Deacon 
24*02017c1dSAndre Przywara enum irqchip_type {
25*02017c1dSAndre Przywara 	IRQCHIP_GICV2,
26*02017c1dSAndre Przywara };
27*02017c1dSAndre Przywara 
287c0e8b0cSWill Deacon struct kvm;
297c0e8b0cSWill Deacon 
307c0e8b0cSWill Deacon int gic__alloc_irqnum(void);
31*02017c1dSAndre Przywara int gic__create(struct kvm *kvm, enum irqchip_type type);
32*02017c1dSAndre Przywara void gic__generate_fdt_nodes(void *fdt, u32 phandle, enum irqchip_type type);
337c0e8b0cSWill Deacon 
347c0e8b0cSWill Deacon #endif /* ARM_COMMON__GIC_H */
35