prep_pci: convert to memory API
authorAvi Kivity <avi@redhat.com>
Mon, 21 Nov 2011 15:16:57 +0000 (17:16 +0200)
committerAvi Kivity <avi@redhat.com>
Thu, 24 Nov 2011 16:32:03 +0000 (18:32 +0200)
Signed-off-by: Avi Kivity <avi@redhat.com>
hw/pci_host.h
hw/prep_pci.c

index 0211086..359e38f 100644 (file)
@@ -34,6 +34,7 @@ struct PCIHostState {
     SysBusDevice busdev;
     MemoryRegion conf_mem;
     MemoryRegion data_mem;
+    MemoryRegion mmcfg;
     MemoryRegion *address_space;
     uint32_t config_reg;
     PCIBus *bus;
index 149807a..ea9fb69 100644 (file)
@@ -86,16 +86,12 @@ static uint32_t PPC_PCIIO_readl (void *opaque, target_phys_addr_t addr)
     return val;
 }
 
-static CPUWriteMemoryFunc * const PPC_PCIIO_write[] = {
-    &PPC_PCIIO_writeb,
-    &PPC_PCIIO_writew,
-    &PPC_PCIIO_writel,
-};
-
-static CPUReadMemoryFunc * const PPC_PCIIO_read[] = {
-    &PPC_PCIIO_readb,
-    &PPC_PCIIO_readw,
-    &PPC_PCIIO_readl,
+static const MemoryRegionOps PPC_PCIIO_ops = {
+    .old_mmio = {
+        .read = { PPC_PCIIO_readb, PPC_PCIIO_readw, PPC_PCIIO_readl, },
+        .write = { PPC_PCIIO_writeb, PPC_PCIIO_writew, PPC_PCIIO_writel, },
+    },
+    .endianness = DEVICE_NATIVE_ENDIAN,
 };
 
 static int prep_map_irq(PCIDevice *pci_dev, int irq_num)
@@ -116,7 +112,6 @@ PCIBus *pci_prep_init(qemu_irq *pic,
 {
     PREPPCIState *s;
     PCIDevice *d;
-    int PPC_io_memory;
 
     s = g_malloc0(sizeof(PREPPCIState));
     s->bus = pci_register_bus(NULL, "pci",
@@ -135,10 +130,8 @@ PCIBus *pci_prep_init(qemu_irq *pic,
     memory_region_add_subregion(address_space_io, 0xcfc, &s->data_mem);
     sysbus_init_ioports(&s->busdev, 0xcfc, 1);
 
-    PPC_io_memory = cpu_register_io_memory(PPC_PCIIO_read,
-                                           PPC_PCIIO_write, s,
-                                           DEVICE_NATIVE_ENDIAN);
-    cpu_register_physical_memory(0x80800000, 0x00400000, PPC_io_memory);
+    memory_region_init_io(&s->mmcfg, &PPC_PCIIO_ops, s, "pciio", 0x00400000);
+    memory_region_add_subregion(address_space_mem, 0x80800000, &s->mmcfg);
 
     /* PCI host bridge */
     d = pci_register_device(s->bus, "PREP Host Bridge - Motorola Raven",