]> rtime.felk.cvut.cz Git - jailhouse.git/blobdiff - hypervisor/arch/arm/include/asm/irqchip.h
arm: Rework interrupt affinity management on cell creation
[jailhouse.git] / hypervisor / arch / arm / include / asm / irqchip.h
index 0ef5fe026382fbc5f9c6ecfd1aed53681e85c713..eb4c25eb0ce8bdead699f0106b265c84a74903fe 100644 (file)
 #ifndef _JAILHOUSE_ASM_IRQCHIP_H
 #define _JAILHOUSE_ASM_IRQCHIP_H
 
-#include <asm/percpu.h>
+#define MAX_PENDING_IRQS       256
+
+#include <jailhouse/cell.h>
+#include <jailhouse/mmio.h>
 
 #ifndef __ASSEMBLY__
 
+struct per_cpu;
+
 struct sgi {
        /*
         * Routing mode values:
@@ -37,16 +42,38 @@ struct sgi {
 struct irqchip_ops {
        int     (*init)(void);
        int     (*cpu_init)(struct per_cpu *cpu_data);
+       int     (*cell_init)(struct cell *cell);
+       void    (*cell_exit)(struct cell *cell);
+       int     (*cpu_reset)(struct per_cpu *cpu_data, bool is_shutdown);
+       void    (*adjust_irq_target)(struct cell *cell, u16 irq_id);
 
        int     (*send_sgi)(struct sgi *sgi);
        void    (*handle_irq)(struct per_cpu *cpu_data);
+       void    (*eoi_irq)(u32 irqn, bool deactivate);
+       int     (*inject_irq)(struct per_cpu *cpu_data, u16 irq_id);
+       void    (*enable_maint_irq)(bool enable);
+
+       int     (*mmio_access)(struct mmio_access *access);
 };
 
+unsigned int irqchip_mmio_count_regions(struct cell *cell);
+
 int irqchip_init(void);
 int irqchip_cpu_init(struct per_cpu *cpu_data);
+int irqchip_cpu_reset(struct per_cpu *cpu_data);
+void irqchip_cpu_shutdown(struct per_cpu *cpu_data);
+
+int irqchip_cell_init(struct cell *cell);
+void irqchip_cell_exit(struct cell *cell);
 
 int irqchip_send_sgi(struct sgi *sgi);
 void irqchip_handle_irq(struct per_cpu *cpu_data);
+void irqchip_eoi_irq(u32 irqn, bool deactivate);
+
+void irqchip_inject_pending(struct per_cpu *cpu_data);
+void irqchip_set_pending(struct per_cpu *cpu_data, u16 irq_id);
+
+bool irqchip_irq_in_cell(struct cell *cell, unsigned int irq_id);
 
 #endif /* __ASSEMBLY__ */
 #endif /* _JAILHOUSE_ASM_IRQCHIP_H */