xref: /kvm-unit-tests/lib/arm/asm/gic-v2.h (revision 0cc3a351b925928827baa4b69cf0e46ff5837083)
100cc96f0SAndrew Jones /*
200cc96f0SAndrew Jones  * All GIC* defines are lifted from include/linux/irqchip/arm-gic.h
300cc96f0SAndrew Jones  *
400cc96f0SAndrew Jones  * Copyright (C) 2016, Red Hat Inc, Andrew Jones <drjones@redhat.com>
500cc96f0SAndrew Jones  *
600cc96f0SAndrew Jones  * This work is licensed under the terms of the GNU LGPL, version 2.
700cc96f0SAndrew Jones  */
800cc96f0SAndrew Jones #ifndef _ASMARM_GIC_V2_H_
900cc96f0SAndrew Jones #define _ASMARM_GIC_V2_H_
1000cc96f0SAndrew Jones 
1100cc96f0SAndrew Jones #ifndef _ASMARM_GIC_H_
1200cc96f0SAndrew Jones #error Do not directly include <asm/gic-v2.h>. Include <asm/gic.h>
1300cc96f0SAndrew Jones #endif
1400cc96f0SAndrew Jones 
1500cc96f0SAndrew Jones #define GICD_ENABLE			0x1
16ac4a67b6SAndrew Jones 
1700cc96f0SAndrew Jones #define GICC_ENABLE			0x1
18ac4a67b6SAndrew Jones #define GICC_IAR_INT_ID_MASK		0x3ff
1900cc96f0SAndrew Jones 
20*0cc3a351SSean Christopherson #ifndef __ASSEMBLER__
21dfc1fec2SAndrew Jones #include <cpumask.h>
2200cc96f0SAndrew Jones 
2300cc96f0SAndrew Jones struct gicv2_data {
2400cc96f0SAndrew Jones 	void *dist_base;
2500cc96f0SAndrew Jones 	void *cpu_base;
2600cc96f0SAndrew Jones 	unsigned int irq_nr;
2700cc96f0SAndrew Jones };
2800cc96f0SAndrew Jones extern struct gicv2_data gicv2_data;
2900cc96f0SAndrew Jones 
3000cc96f0SAndrew Jones #define gicv2_dist_base()		(gicv2_data.dist_base)
3100cc96f0SAndrew Jones #define gicv2_cpu_base()		(gicv2_data.cpu_base)
3200cc96f0SAndrew Jones 
3300cc96f0SAndrew Jones extern int gicv2_init(void);
3400cc96f0SAndrew Jones extern void gicv2_enable_defaults(void);
352e2d471dSAndrew Jones extern u32 gicv2_read_iar(void);
362e2d471dSAndrew Jones extern u32 gicv2_iar_irqnr(u32 iar);
372e2d471dSAndrew Jones extern void gicv2_write_eoir(u32 irqstat);
382e2d471dSAndrew Jones extern void gicv2_ipi_send_single(int irq, int cpu);
392e2d471dSAndrew Jones extern void gicv2_ipi_send_mask(int irq, const cpumask_t *dest);
4000cc96f0SAndrew Jones 
41*0cc3a351SSean Christopherson #endif /* !__ASSEMBLER__ */
4200cc96f0SAndrew Jones #endif /* _ASMARM_GIC_V2_H_ */
43