For now, focus on qdev'ification and leave PIC IRQs unchanged. Signed-off-by: Andreas Färber <andreas.faer...@web.de> Cc: Hervé Poussineau <hpous...@reactos.org> Cc: Michael S. Tsirkin <m...@redhat.com> Cc: Anthony Liguori <aligu...@us.ibm.com> --- 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); } -- 1.7.7