.irqchips = {
/* GIC */ {
.address = 0x2f000000,
- .pin_bitmap = 0xffffffffffffffff,
+ .pin_base = 32,
+ .pin_bitmap = {
+ 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff
+ },
},
},
{
.address = 0xfec00000,
.id = 0x0,
- .pin_bitmap = 0xffffff,
+ .pin_bitmap = {
+ 0xffffff
+ },
},
/* IOAPIC 1, GSI base 24 */
{
.address = 0xfec01000,
.id = 0x0,
- .pin_bitmap = 0xffffff,
+ .pin_bitmap = {
+ 0xffffff
+ },
},
},
/* IOAPIC */ {
.address = 0xfec00000,
.id = 0x1f0f8,
- .pin_bitmap = 0xffffff,
+ .pin_bitmap = {
+ 0xffffff
+ },
},
},
/* IOAPIC */ {
.address = 0xfec00000,
.id = 0x0,
- .pin_bitmap = 0xffffff,
+ .pin_bitmap = {
+ 0xffffff
+ },
},
},
/* IOAPIC */ {
.address = 0xfec00000,
.id = 0xff01,
- .pin_bitmap = 0x000200, /* ACPI IRQ */
+ .pin_bitmap = {
+ 0x000200 /* ACPI IRQ */
+ },
},
},
.irqchips = {
/* GIC */ {
.address = 0x50041000,
- .pin_bitmap = 0xffffffffffffffff,
+ .pin_base = 32,
+ .pin_bitmap = {
+ 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff
+ },
},
},
};
/* IOAPIC */ {
.address = 0xfec00000,
.id = 0xff00,
- .pin_bitmap = 0xffffff,
+ .pin_bitmap = {
+ 0xffffff
+ },
},
},
.irqchips = {
/* GIC */ {
.address = 0x2f000000,
- .pin_bitmap = 0x0000000000000100,
+ .pin_base = 32,
+ .pin_bitmap = {
+ 0x00000100,
+ },
},
}
};
.irqchips = {
/* GIC */ {
.address = 0x2f000000,
- .pin_bitmap = 0xffffffffffffffff,
+ .pin_base = 32,
+ .pin_bitmap = {
+ 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff
+ },
},
},
{
const struct jailhouse_irqchip *pins = irqchip_find_config(cell->config);
- cell->arch.spis = (pins ? pins->pin_bitmap : 0);
+ cell->arch.spis = (pins ? *(u64 *)pins->pin_bitmap : 0);
return irqchip.cell_init(cell);
}
return;
if (root_pins)
- root_cell.arch.spis |= cell->arch.spis & root_pins->pin_bitmap;
+ root_cell.arch.spis |=
+ cell->arch.spis & *(u64 *)root_pins->pin_bitmap;
irqchip.cell_exit(cell);
}
ioapic->info = irqchip;
ioapic->cell = cell;
ioapic->phys_ioapic = phys_ioapic;
- ioapic->pin_bitmap = (u32)irqchip->pin_bitmap;
+ ioapic->pin_bitmap = irqchip->pin_bitmap[0];
cell->arch.num_ioapics++;
mmio_region_register(cell, irqchip->address, PAGE_SIZE,
if (root_ioapic)
root_ioapic->pin_bitmap |=
ioapic->pin_bitmap &
- root_ioapic->info->pin_bitmap;
+ root_ioapic->info->pin_bitmap[0];
}
page_free(&mem_pool, cell->arch.ioapics, 1);
struct jailhouse_irqchip {
__u64 address;
- __u64 id;
- __u64 pin_bitmap;
+ __u32 id;
+ __u32 pin_base;
+ __u32 pin_bitmap[4];
} __attribute__((packed));
#define JAILHOUSE_PCI_TYPE_DEVICE 0x01
{
.address = ${hex(i.address)},
.id = ${hex(i.irqchip_id())},
- .pin_bitmap = 0xffffff,
+ .pin_bitmap = {
+ 0xffffff
+ },
},
% endfor
},