For now, focus on qdev'ification and leave PIC IRQs unchanged.
Signed-off-by: Andreas Färber<address@hidden>
Cc: Hervé Poussineau<address@hidden>
Cc: Michael S. Tsirkin<address@hidden>
Cc: Anthony Liguori<address@hidden>
---
hw/prep_pci.c | 41 +++++++++++++++++++++++++++++++----------
1 files changed, 31 insertions(+), 10 deletions(-)
diff --git a/hw/prep_pci.c b/hw/prep_pci.c
index 741b273..2ff6b8c 100644
--- a/hw/prep_pci.c
+++ b/hw/prep_pci.c
@@ -114,31 +114,43 @@ PCIBus *pci_prep_init(qemu_irq *pic,
MemoryRegion *address_space_mem,
MemoryRegion *address_space_io)
{
+ DeviceState *dev;
PREPPCIState *s;
- s = g_malloc0(sizeof(PREPPCIState));
- s->bus = pci_register_bus(NULL, "pci",
+ dev = qdev_create(NULL, "raven-pcihost");
+ s = FROM_SYSBUS(PREPPCIState, sysbus_from_qdev(dev));
+ s->address_space = address_space_mem;
+ s->bus = pci_register_bus(&s->busdev.qdev, "pci",
prep_set_irq, prep_map_irq, pic,
address_space_mem,
address_space_io,
0, 4);
+ qdev_init_nofail(dev);
+ qdev_property_add_child(qdev_get_root(), "raven", dev, NULL);
+
+ memory_region_init_io(&s->mmcfg,&PPC_PCIIO_ops, s, "pciio", 0x00400000);
+ memory_region_add_subregion(address_space_mem, 0x80800000,&s->mmcfg);
+
+ pci_create_simple(s->bus, 0, "raven");
+
+ return s->bus;
+}
+
+static int raven_pcihost_init(SysBusDevice *dev)
+{
+ PREPPCIState *s = FROM_SYSBUS(PREPPCIState, dev);
memory_region_init_io(&s->conf_mem,&pci_host_conf_be_ops, s,
"pci-conf-idx", 1);
- memory_region_add_subregion(address_space_io, 0xcf8,&s->conf_mem);
+ sysbus_add_io(dev, 0xcf8,&s->conf_mem);
sysbus_init_ioports(&s->busdev, 0xcf8, 1);
memory_region_init_io(&s->data_mem,&pci_host_data_be_ops, s,
"pci-conf-data", 1);
- memory_region_add_subregion(address_space_io, 0xcfc,&s->data_mem);
+ sysbus_add_io(dev, 0xcfc,&s->data_mem);
sysbus_init_ioports(&s->busdev, 0xcfc, 1);
- memory_region_init_io(&s->mmcfg,&PPC_PCIIO_ops, s, "pciio", 0x00400000);
- memory_region_add_subregion(address_space_mem, 0x80800000,&s->mmcfg);
-
- pci_create_simple(s->bus, 0, "raven");
-
- return s->bus;
+ return 0;
}
static int raven_init(PCIDevice *d)
@@ -177,8 +189,17 @@ static PCIDeviceInfo raven_info = {
},
};
+static SysBusDeviceInfo raven_pcihost_info = {
+ .qdev.name = "raven-pcihost",
+ .qdev.fw_name = "pci",
+ .qdev.size = sizeof(PREPPCIState),
+ .qdev.no_user = 1,
+ .init = raven_pcihost_init,
+};
+
static void raven_register_devices(void)
{
+ sysbus_register_withprop(&raven_pcihost_info);
pci_qdev_register(&raven_info);