xref: /kvmtool/arm/include/arm-common/gic.h (revision e59679d2a19c5f25a973086ccd356328070e6009)
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 
249a006940SAndre Przywara #define KVM_VGIC_V2M_SIZE		0x1000
259a006940SAndre Przywara 
2602017c1dSAndre Przywara enum irqchip_type {
2702017c1dSAndre Przywara 	IRQCHIP_GICV2,
28f6108d72SJean-Philippe Brucker 	IRQCHIP_GICV2M,
29bfb2c703SAndre Przywara 	IRQCHIP_GICV3,
3012ca1401SAndre Przywara 	IRQCHIP_GICV3_ITS,
3102017c1dSAndre Przywara };
3202017c1dSAndre Przywara 
337c0e8b0cSWill Deacon struct kvm;
347c0e8b0cSWill Deacon 
357c0e8b0cSWill Deacon int gic__alloc_irqnum(void);
3602017c1dSAndre Przywara int gic__create(struct kvm *kvm, enum irqchip_type type);
37f6108d72SJean-Philippe Brucker int gic__create_gicv2m_frame(struct kvm *kvm, u64 msi_frame_addr);
380063d50cSAndre Przywara void gic__generate_fdt_nodes(void *fdt, enum irqchip_type type);
397c0e8b0cSWill Deacon 
40*e59679d2SJean-Philippe Brucker int gic__add_irqfd(struct kvm *kvm, unsigned int gsi, int trigger_fd,
41*e59679d2SJean-Philippe Brucker 		   int resample_fd);
42*e59679d2SJean-Philippe Brucker void gic__del_irqfd(struct kvm *kvm, unsigned int gsi, int trigger_fd);
43*e59679d2SJean-Philippe Brucker #define irq__add_irqfd gic__add_irqfd
44*e59679d2SJean-Philippe Brucker #define irq__del_irqfd gic__del_irqfd
45*e59679d2SJean-Philippe Brucker 
467c0e8b0cSWill Deacon #endif /* ARM_COMMON__GIC_H */
47