qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH v2 2/3] prep: Add Raven PCI host SysBus device


From: Andreas Färber
Subject: [Qemu-devel] [PATCH v2 2/3] prep: Add Raven PCI host SysBus device
Date: Sat, 7 Jan 2012 01:06:48 +0100

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);
 }
 
-- 
1.7.7




reply via email to

[Prev in Thread] Current Thread [Next in Thread]