/*
 * All GIC* defines are lifted from include/linux/irqchip/arm-gic.h
 *
 * Copyright (C) 2016, Red Hat Inc, Andrew Jones <drjones@redhat.com>
 *
 * This work is licensed under the terms of the GNU LGPL, version 2.
 */
#ifndef _ASMARM_GIC_V2_H_
#define _ASMARM_GIC_V2_H_

#ifndef _ASMARM_GIC_H_
#error Do not directly include <asm/gic-v2.h>. Include <asm/gic.h>
#endif

#define GICD_ENABLE			0x1

#define GICC_ENABLE			0x1
#define GICC_IAR_INT_ID_MASK		0x3ff

#ifndef __ASSEMBLY__
#include <cpumask.h>

struct gicv2_data {
	void *dist_base;
	void *cpu_base;
	unsigned int irq_nr;
};
extern struct gicv2_data gicv2_data;

#define gicv2_dist_base()		(gicv2_data.dist_base)
#define gicv2_cpu_base()		(gicv2_data.cpu_base)

extern int gicv2_init(void);
extern void gicv2_enable_defaults(void);
extern u32 gicv2_read_iar(void);
extern u32 gicv2_iar_irqnr(u32 iar);
extern void gicv2_write_eoir(u32 irqstat);
extern void gicv2_ipi_send_single(int irq, int cpu);
extern void gicv2_ipi_send_mask(int irq, const cpumask_t *dest);

#endif /* !__ASSEMBLY__ */
#endif /* _ASMARM_GIC_V2_H_ */
