static bool irqchip_is_init;
static struct irqchip_ops irqchip;
+bool spi_in_cell(struct cell *cell, unsigned int spi)
+{
+ /* FIXME: Change the configuration to a bitmask range */
+ u32 spi_mask;
+
+ if (spi >= 64)
+ return false;
+ else if (spi >= 32)
+ spi_mask = cell->arch.spis >> 32;
+ else
+ spi_mask = cell->arch.spis;
+
+ return spi_mask & (1 << (spi & 31));
+}
+
static int irqchip_init_pending(struct per_cpu *cpu_data)
{
struct pending_irq *pend_array;
struct pending_irq pending;
pending.virt_id = irq_id;
- /* Priority must be less than ICC_PMR */
- pending.priority = 0;
-
- if (is_sgi(irq_id)) {
- pending.hw = 0;
- pending.type.sgi.maintenance = 0;
- pending.type.sgi.cpuid = 0;
- } else {
- pending.hw = 1;
- pending.type.irq = irq_id;
- }
if (try_inject && irqchip.inject_irq(cpu_data, &pending) == 0)
return 0;
return 0;
}
-int irqchip_inject_pending(struct per_cpu *cpu_data)
+void irqchip_inject_pending(struct per_cpu *cpu_data)
{
int err;
struct pending_irq *pending = cpu_data->first_pending;
pending = pending->next;
}
-
- return 0;
}
void irqchip_handle_irq(struct per_cpu *cpu_data)
irqchip.cpu_reset(cpu_data, true);
}
-int irqchip_mmio_access(struct per_cpu *cpu_data, struct mmio_access *access)
-{
- if (irqchip.mmio_access)
- return irqchip.mmio_access(cpu_data, access);
-
- return TRAP_UNHANDLED;
-}
-
static const struct jailhouse_irqchip *
irqchip_find_config(struct jailhouse_cell_desc *config)
{