Same as before, but make the iomem->device relationship visible.

Index: kvm-userspace.io/qemu/cpu-all.h
===================================================================
--- kvm-userspace.io.orig/qemu/cpu-all.h
+++ kvm-userspace.io/qemu/cpu-all.h
@@ -840,7 +840,7 @@ void cpu_register_physical_memory(target
 uint32_t cpu_get_physical_page_desc(target_phys_addr_t addr);
 ram_addr_t qemu_ram_alloc(unsigned long size);
 void qemu_ram_free(ram_addr_t addr);
-int cpu_register_io_memory(int io_index,
+int cpu_register_io_memory(QEMUDevice *dev, int io_index,
                            CPUReadMemoryFunc **mem_read,
                            CPUWriteMemoryFunc **mem_write,
                            void *opaque);
Index: kvm-userspace.io/qemu/exec.c
===================================================================
--- kvm-userspace.io.orig/qemu/exec.c
+++ kvm-userspace.io/qemu/exec.c
@@ -33,6 +33,7 @@
 #include <unistd.h>
 #include <inttypes.h>
 
+#include "qemu-device.h"
 #include "cpu.h"
 #include "exec-all.h"
 
@@ -2505,7 +2506,7 @@ static void *subpage_init (target_phys_a
     mmio = qemu_mallocz(sizeof(subpage_t));
     if (mmio != NULL) {
         mmio->base = base;
-        subpage_memory = cpu_register_io_memory(0, subpage_read, 
subpage_write, mmio);
+        subpage_memory = cpu_register_io_memory(NULL, 0, subpage_read, 
subpage_write, mmio);
 #if defined(DEBUG_SUBPAGE)
         printf("%s: %p base " TARGET_FMT_plx " len %08x %d\n", __func__,
                mmio, base, TARGET_PAGE_SIZE, subpage_memory);
@@ -2534,14 +2535,14 @@ static void io_mem_init(void)
 {
     int i;
 
-    cpu_register_io_memory(IO_MEM_ROM >> IO_MEM_SHIFT, error_mem_read, 
unassigned_mem_write, NULL);
-    cpu_register_io_memory(IO_MEM_UNASSIGNED >> IO_MEM_SHIFT, 
unassigned_mem_read, unassigned_mem_write, NULL);
-    cpu_register_io_memory(IO_MEM_NOTDIRTY >> IO_MEM_SHIFT, error_mem_read, 
notdirty_mem_write, NULL);
+    cpu_register_io_memory(NULL, IO_MEM_ROM >> IO_MEM_SHIFT, error_mem_read, 
unassigned_mem_write, NULL);
+    cpu_register_io_memory(NULL, IO_MEM_UNASSIGNED >> IO_MEM_SHIFT, 
unassigned_mem_read, unassigned_mem_write, NULL);
+    cpu_register_io_memory(NULL, IO_MEM_NOTDIRTY >> IO_MEM_SHIFT, 
error_mem_read, notdirty_mem_write, NULL);
     for (i=0; i<5; i++)
         io_mem_used[i] = 1;
 
 #if defined(CONFIG_SOFTMMU)
-    io_mem_watch = cpu_register_io_memory(-1, watch_mem_read,
+    io_mem_watch = cpu_register_io_memory(NULL, -1, watch_mem_read,
                                           watch_mem_write, NULL);
 #endif
     /* alloc dirty bits array */
@@ -2557,7 +2558,8 @@ static void io_mem_init(void)
    modified. If it is zero, a new io zone is allocated. The return
    value can be used with cpu_register_physical_memory(). (-1) is
    returned if error. */
-int cpu_register_io_memory(int io_index,
+int cpu_register_io_memory(QEMUDevice *dev,
+                           int io_index,
                            CPUReadMemoryFunc **mem_read,
                            CPUWriteMemoryFunc **mem_write,
                            void *opaque)
Index: kvm-userspace.io/qemu/hw/apic.c
===================================================================
--- kvm-userspace.io.orig/qemu/hw/apic.c
+++ kvm-userspace.io/qemu/hw/apic.c
@@ -70,6 +70,7 @@
 #define MAX_APIC_WORDS 8
 
 typedef struct APICState {
+    QEMUDevice qemu_dev;
     CPUState *cpu_env;
     uint32_t apicbase;
     uint8_t id;
@@ -93,6 +94,7 @@ typedef struct APICState {
 } APICState;
 
 struct IOAPICState {
+    QEMUDevice qemu_dev;
     uint8_t id;
     uint8_t ioregsel;
     uint64_t base_address;
@@ -958,6 +960,7 @@ int apic_init(CPUState *env)
     s = qemu_mallocz(sizeof(APICState));
     if (!s)
         return -1;
+    qemu_register_device(&s->qemu_dev);
     env->apic_state = s;
     apic_init_ipi(s);
     s->id = last_apic_id++;
@@ -977,7 +980,7 @@ int apic_init(CPUState *env)
     if (apic_io_memory == 0) {
         /* NOTE: the APIC is directly connected to the CPU - it is not
            on the global memory bus. */
-        apic_io_memory = cpu_register_io_memory(0, apic_mem_read,
+        apic_io_memory = cpu_register_io_memory(&s->qemu_dev, 0, apic_mem_read,
                                                 apic_mem_write, NULL);
         cpu_register_physical_memory(s->apicbase & ~0xfff, 0x1000,
                                      apic_io_memory);
@@ -1255,10 +1258,11 @@ IOAPICState *ioapic_init(void)
     s = qemu_mallocz(sizeof(IOAPICState));
     if (!s)
         return NULL;
+    qemu_register_device(&s->qemu_dev);
     ioapic_reset(s);
     s->id = last_apic_id++;
 
-    io_memory = cpu_register_io_memory(0, ioapic_mem_read,
+    io_memory = cpu_register_io_memory(&s->qemu_dev, 0, ioapic_mem_read,
                                        ioapic_mem_write, s);
     cpu_register_physical_memory(0xfec00000, 0x1000, io_memory);
 
Index: kvm-userspace.io/qemu/hw/cirrus_vga.c
===================================================================
--- kvm-userspace.io.orig/qemu/hw/cirrus_vga.c
+++ kvm-userspace.io/qemu/hw/cirrus_vga.c
@@ -3258,7 +3258,7 @@ static void cirrus_init_common(CirrusVGA
     register_ioport_read(dev, 0x3ba, 1, 1, vga_ioport_read, s);
     register_ioport_read(dev, 0x3da, 1, 1, vga_ioport_read, s);
 
-    vga_io_memory = cpu_register_io_memory(0, cirrus_vga_mem_read,
+    vga_io_memory = cpu_register_io_memory(dev, 0, cirrus_vga_mem_read,
                                            cirrus_vga_mem_write, s);
     cpu_register_physical_memory(isa_mem_base + 0x000a0000, 0x20000,
                                  vga_io_memory);
@@ -3300,18 +3300,18 @@ static void cirrus_init_common(CirrusVGA
 
     /* I/O handler for LFB */
     s->cirrus_linear_io_addr =
-       cpu_register_io_memory(0, cirrus_linear_read, cirrus_linear_write,
+       cpu_register_io_memory(dev, 0, cirrus_linear_read, cirrus_linear_write,
                               s);
     s->cirrus_linear_write = cpu_get_io_memory_write(s->cirrus_linear_io_addr);
 
     /* I/O handler for LFB */
     s->cirrus_linear_bitblt_io_addr =
-       cpu_register_io_memory(0, cirrus_linear_bitblt_read, 
cirrus_linear_bitblt_write,
+       cpu_register_io_memory(dev, 0, cirrus_linear_bitblt_read, 
cirrus_linear_bitblt_write,
                               s);
 
     /* I/O handler for memory-mapped I/O */
     s->cirrus_mmio_io_addr =
-       cpu_register_io_memory(0, cirrus_mmio_read, cirrus_mmio_write, s);
+       cpu_register_io_memory(dev, 0, cirrus_mmio_read, cirrus_mmio_write, s);
 
     /* XXX: s->vram_size must be a power of two */
     s->cirrus_addr_mask = s->real_vram_size - 1;
Index: kvm-userspace.io/qemu/hw/e1000.c
===================================================================
--- kvm-userspace.io.orig/qemu/hw/e1000.c
+++ kvm-userspace.io/qemu/hw/e1000.c
@@ -936,7 +936,8 @@ e1000_mmio_map(PCIDevice *pci_dev, int r
     DBGOUT(MMIO, "e1000_mmio_map addr=0x%08x 0x%08x\n", addr, size);
 
     d->mmio_base = addr;
-    cpu_register_physical_memory(addr, PNPMMIO_SIZE, d->mmio_index);
+    cpu_register_physical_memory(addr, PNPMMIO_SIZE,
+                                 d->mmio_index);
 }
 
 static int
@@ -976,7 +977,8 @@ pci_e1000_init(PCIBus *bus, NICInfo *nd,
 
     pci_conf[0x3d] = 1; // interrupt pin 0
 
-    d->mmio_index = cpu_register_io_memory(0, e1000_mmio_read,
+    d->mmio_index = cpu_register_io_memory(&d->dev.qemu_dev, 0,
+            e1000_mmio_read,
             e1000_mmio_write, d);
 
     pci_register_io_region((PCIDevice *)d, 0, PNPMMIO_SIZE,
Index: kvm-userspace.io/qemu/hw/eepro100.c
===================================================================
--- kvm-userspace.io.orig/qemu/hw/eepro100.c
+++ kvm-userspace.io/qemu/hw/eepro100.c
@@ -1767,7 +1767,8 @@ static PCIDevice *nic_init(PCIBus * bus,
 
     /* Handler for memory-mapped I/O */
     d->eepro100.mmio_index =
-        cpu_register_io_memory(0, pci_mmio_read, pci_mmio_write, s);
+        cpu_register_io_memory(&d->dev.qemu_dev, 0, pci_mmio_read,
+                               pci_mmio_write, s);
 
     pci_register_io_region(&d->dev, 0, PCI_MEM_SIZE,
                            PCI_ADDRESS_SPACE_MEM |
Index: kvm-userspace.io/qemu/hw/fdc.c
===================================================================
--- kvm-userspace.io.orig/qemu/hw/fdc.c
+++ kvm-userspace.io/qemu/hw/fdc.c
@@ -755,8 +755,8 @@ fdctrl_t *fdctrl_init (qemu_irq irq, int
 
     fdctrl->sun4m = 0;
     if (mem_mapped) {
-        io_mem = cpu_register_io_memory(0, fdctrl_mem_read, fdctrl_mem_write,
-                                        fdctrl);
+        io_mem = cpu_register_io_memory(dev, 0, fdctrl_mem_read,
+                                        fdctrl_mem_write, fdctrl);
         cpu_register_physical_memory(io_base, 0x08, io_mem);
     } else {
         register_ioport_read(dev, (uint32_t)io_base + 0x01, 5, 1, &fdctrl_read,
@@ -777,10 +777,12 @@ fdctrl_t *sun4m_fdctrl_init (qemu_irq ir
 {
     fdctrl_t *fdctrl;
     int io_mem;
+    QEMUDevice *dev;
 
     fdctrl = fdctrl_init_common(irq, 0, io_base, fds);
+    dev = &fdctrl->qemu_dev;
     fdctrl->sun4m = 1;
-    io_mem = cpu_register_io_memory(0, fdctrl_mem_read_strict,
+    io_mem = cpu_register_io_memory(dev, 0, fdctrl_mem_read_strict,
                                     fdctrl_mem_write_strict,
                                     fdctrl);
     cpu_register_physical_memory(io_base, 0x08, io_mem);
Index: kvm-userspace.io/qemu/hw/isa_mmio.c
===================================================================
--- kvm-userspace.io.orig/qemu/hw/isa_mmio.c
+++ kvm-userspace.io/qemu/hw/isa_mmio.c
@@ -93,6 +93,11 @@ static CPUReadMemoryFunc *isa_mmio_read[
 
 static int isa_mmio_iomemtype = 0;
 
+
+/*
+ * FIXME to use QEMUDevice
+ */
+#if 0
 void isa_mmio_init(target_phys_addr_t base, target_phys_addr_t size)
 {
     if (!isa_mmio_iomemtype) {
@@ -101,3 +106,4 @@ void isa_mmio_init(target_phys_addr_t ba
     }
     cpu_register_physical_memory(base, size, isa_mmio_iomemtype);
 }
+#endif
Index: kvm-userspace.io/qemu/hw/lsi53c895a.c
===================================================================
--- kvm-userspace.io.orig/qemu/hw/lsi53c895a.c
+++ kvm-userspace.io/qemu/hw/lsi53c895a.c
@@ -1813,7 +1813,8 @@ static void lsi_ram_mapfunc(PCIDevice *p
 
     DPRINTF("Mapping ram at %08x\n", addr);
     s->script_ram_base = addr;
-    cpu_register_physical_memory(addr + 0, 0x2000, s->ram_io_addr);
+    cpu_register_physical_memory(addr + 0, 0x2000,
+                                 s->ram_io_addr);
 }
 
 static void lsi_mmio_mapfunc(PCIDevice *pci_dev, int region_num,
@@ -1822,7 +1823,8 @@ static void lsi_mmio_mapfunc(PCIDevice *
     LSIState *s = (LSIState *)pci_dev;
 
     DPRINTF("Mapping registers at %08x\n", addr);
-    cpu_register_physical_memory(addr + 0, 0x400, s->mmio_io_addr);
+    cpu_register_physical_memory(addr + 0, 0x400,
+                                 s->mmio_io_addr);
 }
 
 void lsi_scsi_attach(void *opaque, BlockDriverState *bd, int id)
@@ -1865,6 +1867,7 @@ int lsi_scsi_uninit(PCIDevice *d)
 void *lsi_scsi_init(PCIBus *bus, int devfn)
 {
     LSIState *s;
+    QEMUDevice *dev;
 
     s = (LSIState *)pci_register_device(bus, "LSI53C895A SCSI HBA",
                                         sizeof(*s), devfn, NULL, NULL);
@@ -1872,6 +1875,7 @@ void *lsi_scsi_init(PCIBus *bus, int dev
         fprintf(stderr, "lsi-scsi: Failed to register PCI device\n");
         return NULL;
     }
+    dev = &s->pci_dev.qemu_dev;
 
     s->pci_dev.config[0x00] = 0x00;
     s->pci_dev.config[0x01] = 0x10;
@@ -1880,9 +1884,9 @@ void *lsi_scsi_init(PCIBus *bus, int dev
     s->pci_dev.config[0x0b] = 0x01;
     s->pci_dev.config[0x3d] = 0x01; /* interrupt pin 1 */
 
-    s->mmio_io_addr = cpu_register_io_memory(0, lsi_mmio_readfn,
+    s->mmio_io_addr = cpu_register_io_memory(dev, 0, lsi_mmio_readfn,
                                              lsi_mmio_writefn, s);
-    s->ram_io_addr = cpu_register_io_memory(0, lsi_ram_readfn,
+    s->ram_io_addr = cpu_register_io_memory(dev, 0, lsi_ram_readfn,
                                             lsi_ram_writefn, s);
 
     pci_register_io_region((struct PCIDevice *)s, 0, 256,
Index: kvm-userspace.io/qemu/hw/mc146818rtc.c
===================================================================
--- kvm-userspace.io.orig/qemu/hw/mc146818rtc.c
+++ kvm-userspace.io/qemu/hw/mc146818rtc.c
@@ -564,6 +564,7 @@ static CPUWriteMemoryFunc *rtc_mm_write[
     &cmos_mm_writel,
 };
 
+#ifdef TARGET_MIPS
 RTCState *rtc_mm_init(target_phys_addr_t base, int it_shift, qemu_irq irq)
 {
     RTCState *s;
@@ -598,3 +599,4 @@ RTCState *rtc_mm_init(target_phys_addr_t
     register_savevm("mc146818rtc", base, 1, rtc_save, rtc_load, s);
     return s;
 }
+#endif
Index: kvm-userspace.io/qemu/hw/parallel.c
===================================================================
--- kvm-userspace.io.orig/qemu/hw/parallel.c
+++ kvm-userspace.io/qemu/hw/parallel.c
@@ -523,6 +523,7 @@ static CPUWriteMemoryFunc *parallel_mm_w
     &parallel_mm_writel,
 };
 
+#ifdef TARGET_MIPS
 /* If fd is zero, it means that the parallel device uses the console */
 ParallelState *parallel_mm_init(target_phys_addr_t base, int it_shift, 
qemu_irq irq, CharDriverState *chr)
 {
@@ -540,3 +541,4 @@ ParallelState *parallel_mm_init(target_p
     cpu_register_physical_memory(base, 8 << it_shift, io_sw);
     return s;
 }
+#endif
Index: kvm-userspace.io/qemu/hw/pckbd.c
===================================================================
--- kvm-userspace.io.orig/qemu/hw/pckbd.c
+++ kvm-userspace.io/qemu/hw/pckbd.c
@@ -432,6 +432,7 @@ static CPUWriteMemoryFunc *kbd_mm_write[
     &kbd_mm_writeb,
 };
 
+#ifdef TARGET_MIPS
 void i8042_mm_init(qemu_irq kbd_irq, qemu_irq mouse_irq,
                    target_phys_addr_t base, int it_shift)
 {
@@ -450,8 +451,7 @@ void i8042_mm_init(qemu_irq kbd_irq, qem
 
     s->kbd = ps2_kbd_init(kbd_update_kbd_irq, s);
     s->mouse = ps2_mouse_init(kbd_update_aux_irq, s);
-#ifdef TARGET_I386
     vmmouse_init(s->mouse);
-#endif
     qemu_register_reset(kbd_reset, s);
 }
+#endif
Index: kvm-userspace.io/qemu/hw/pcnet.c
===================================================================
--- kvm-userspace.io.orig/qemu/hw/pcnet.c
+++ kvm-userspace.io/qemu/hw/pcnet.c
@@ -1944,7 +1944,8 @@ static void pcnet_mmio_map(PCIDevice *pc
     printf("pcnet_ioport_map addr=0x%08x 0x%08x\n", addr, size);
 #endif
 
-    cpu_register_physical_memory(addr, PCNET_PNPMMIO_SIZE, d->mmio_index);
+    cpu_register_physical_memory(addr, PCNET_PNPMMIO_SIZE,
+                                 d->mmio_index);
 }
 
 static void pci_physical_memory_write(void *dma_opaque, target_phys_addr_t 
addr,
@@ -1962,6 +1963,7 @@ static void pci_physical_memory_read(voi
 PCIDevice *pci_pcnet_init(PCIBus *bus, NICInfo *nd, int devfn)
 {
     PCNetState *d;
+    QEMUDevice *dev;
     uint8_t *pci_conf;
 
 #if 0
@@ -1972,6 +1974,8 @@ PCIDevice *pci_pcnet_init(PCIBus *bus, N
     d = (PCNetState *)pci_register_device(bus, "PCNet", sizeof(PCNetState),
                                           devfn, NULL, NULL);
 
+    dev = &d->dev.qemu_dev;
+
     pci_conf = d->dev.config;
 
     *(uint16_t *)&pci_conf[0x00] = cpu_to_le16(0x1022);
@@ -1993,7 +1997,7 @@ PCIDevice *pci_pcnet_init(PCIBus *bus, N
 
     /* Handler for memory-mapped I/O */
     d->mmio_index =
-      cpu_register_io_memory(0, pcnet_mmio_read, pcnet_mmio_write, d);
+      cpu_register_io_memory(dev, 0, pcnet_mmio_read, pcnet_mmio_write, d);
 
     pci_register_io_region((PCIDevice *)d, 0, PCNET_IOPORT_SIZE,
                            PCI_ADDRESS_SPACE_IO, pcnet_ioport_map);
Index: kvm-userspace.io/qemu/hw/piix_pci.c
===================================================================
--- kvm-userspace.io.orig/qemu/hw/piix_pci.c
+++ kvm-userspace.io/qemu/hw/piix_pci.c
@@ -62,6 +62,7 @@ static int pci_irq_levels[4];
 static void update_pam(PCIDevice *d, uint32_t start, uint32_t end, int r)
 {
     uint32_t addr;
+    QEMUDevice *dev = &d->qemu_dev;
 
     //    printf("ISA mapping %08x-0x%08x: %d\n", start, end, r);
     switch(r) {
@@ -90,6 +91,7 @@ static void i440fx_update_memory_mapping
 {
     int i, r;
     uint32_t smram, addr;
+    QEMUDevice *dev = &d->qemu_dev;
 
     update_pam(d, 0xf0000, 0x100000, (d->config[0x59] >> 4) & 3);
     for(i = 0; i < 12; i++) {
Index: kvm-userspace.io/qemu/hw/rtl8139.c
===================================================================
--- kvm-userspace.io.orig/qemu/hw/rtl8139.c
+++ kvm-userspace.io/qemu/hw/rtl8139.c
@@ -3316,7 +3316,8 @@ static void rtl8139_mmio_map(PCIDevice *
     PCIRTL8139State *d = (PCIRTL8139State *)pci_dev;
     RTL8139State *s = &d->rtl8139;
 
-    cpu_register_physical_memory(addr + 0, 0x100, s->rtl8139_mmio_io_addr);
+    cpu_register_physical_memory(addr + 0, 0x100,
+                                 s->rtl8139_mmio_io_addr);
 }
 
 static void rtl8139_ioport_map(PCIDevice *pci_dev, int region_num,
@@ -3407,11 +3408,13 @@ PCIDevice *pci_rtl8139_init(PCIBus *bus,
     RTL8139State *s;
     uint8_t *pci_conf;
     static int rtl8139_id;
+    QEMUDevice *dev;
 
     d = (PCIRTL8139State *)pci_register_device(bus,
                                               "RTL8139", 
sizeof(PCIRTL8139State),
                                               devfn,
                                               NULL, NULL);
+    dev = &d->dev.qemu_dev;
     pci_conf = d->dev.config;
     pci_conf[0x00] = 0xec; /* Realtek 8139 */
     pci_conf[0x01] = 0x10;
@@ -3429,7 +3432,7 @@ PCIDevice *pci_rtl8139_init(PCIBus *bus,
 
     /* I/O handler for memory-mapped I/O */
     s->rtl8139_mmio_io_addr =
-    cpu_register_io_memory(0, rtl8139_mmio_read, rtl8139_mmio_write, s);
+    cpu_register_io_memory(dev, 0, rtl8139_mmio_read, rtl8139_mmio_write, s);
 
     pci_register_io_region(&d->dev, 0, 0x100,
                            PCI_ADDRESS_SPACE_IO,  rtl8139_ioport_map);
Index: kvm-userspace.io/qemu/hw/serial.c
===================================================================
--- kvm-userspace.io.orig/qemu/hw/serial.c
+++ kvm-userspace.io/qemu/hw/serial.c
@@ -477,6 +477,7 @@ static CPUWriteMemoryFunc *serial_mm_wri
     &serial_mm_writel,
 };
 
+#ifndef TARGET_I386
 SerialState *serial_mm_init (target_phys_addr_t base, int it_shift,
                              qemu_irq irq, CharDriverState *chr,
                              int ioregister)
@@ -506,3 +507,4 @@ SerialState *serial_mm_init (target_phys
                           serial_event, s);
     return s;
 }
+#endif
Index: kvm-userspace.io/qemu/hw/usb-ohci.c
===================================================================
--- kvm-userspace.io.orig/qemu/hw/usb-ohci.c
+++ kvm-userspace.io/qemu/hw/usb-ohci.c
@@ -1592,8 +1592,8 @@ static CPUWriteMemoryFunc *ohci_writefn[
     ohci_mem_write
 };
 
-static void usb_ohci_init(OHCIState *ohci, int num_ports, int devfn,
-            qemu_irq irq, enum ohci_type type, const char *name)
+static void usb_ohci_init(QEMUDevice *dev, OHCIState *ohci, int num_ports,
+            int devfn, qemu_irq irq, enum ohci_type type, const char *name)
 {
     int i;
 
@@ -1613,7 +1613,7 @@ static void usb_ohci_init(OHCIState *ohc
                 usb_frame_time, usb_bit_time);
     }
 
-    ohci->mem = cpu_register_io_memory(0, ohci_readfn, ohci_writefn, ohci);
+    ohci->mem = cpu_register_io_memory(dev, 0, ohci_readfn, ohci_writefn, 
ohci);
     ohci->name = name;
 
     ohci->irq = irq;
@@ -1639,7 +1639,8 @@ static void ohci_mapfunc(PCIDevice *pci_
 {
     OHCIPCIState *ohci = (OHCIPCIState *)pci_dev;
     ohci->state.mem_base = addr;
-    cpu_register_physical_memory(addr, size, ohci->state.mem);
+    cpu_register_physical_memory(addr, size,
+                                 ohci->state.mem);
 }
 
 void usb_ohci_init_pci(struct PCIBus *bus, int num_ports, int devfn)
@@ -1664,13 +1665,16 @@ void usb_ohci_init_pci(struct PCIBus *bu
     ohci->pci_dev.config[0x0b] = 0xc;
     ohci->pci_dev.config[0x3d] = 0x01; /* interrupt pin 1 */
 
-    usb_ohci_init(&ohci->state, num_ports, devfn, ohci->pci_dev.irq[0],
-                  OHCI_TYPE_PCI, ohci->pci_dev.name);
+    usb_ohci_init(&ohci->pci_dev.qemu_dev, &ohci->state, num_ports, devfn,
+                  ohci->pci_dev.irq[0], OHCI_TYPE_PCI, ohci->pci_dev.name);
 
     pci_register_io_region((struct PCIDevice *)ohci, 0, 256,
                            PCI_ADDRESS_SPACE_MEM, ohci_mapfunc);
 }
 
+
+#if 0
+FIXME: use QEMUDevice
 void usb_ohci_init_pxa(target_phys_addr_t base, int num_ports, int devfn,
                        qemu_irq irq)
 {
@@ -1682,3 +1686,4 @@ void usb_ohci_init_pxa(target_phys_addr_
 
     cpu_register_physical_memory(ohci->mem_base, 0x1000, ohci->mem);
 }
+#endif
Index: kvm-userspace.io/qemu/hw/vga.c
===================================================================
--- kvm-userspace.io.orig/qemu/hw/vga.c
+++ kvm-userspace.io/qemu/hw/vga.c
@@ -2008,6 +2008,8 @@ static void vga_map(PCIDevice *pci_dev, 
 {
     PCIVGAState *d = (PCIVGAState *)pci_dev;
     VGAState *s = &d->vga_state;
+    QEMUDevice *dev = &pci_dev->qemu_dev;
+
     if (region_num == PCI_ROM_SLOT) {
         cpu_register_physical_memory(addr, s->bios_size, s->bios_offset);
     } else {
@@ -2246,7 +2248,8 @@ void vga_init(VGAState *s, QEMUDevice *d
 #endif
 #endif /* CONFIG_BOCHS_VBE */
 
-    vga_io_memory = cpu_register_io_memory(0, vga_mem_read, vga_mem_write, s);
+    vga_io_memory = cpu_register_io_memory(dev, 0, vga_mem_read, vga_mem_write,
+                                           s);
     cpu_register_physical_memory(isa_mem_base + 0x000a0000, 0x20000,
                                  vga_io_memory);
 }
@@ -2313,11 +2316,12 @@ static void vga_mm_init(VGAState *s, tar
                         target_phys_addr_t ctrl_base, int it_shift)
 {
     int s_ioport_ctrl, vga_io_memory;
+    QEMUDevice *dev = &s->qemu_dev;
 
     s->base_ctrl = ctrl_base;
     s->it_shift = it_shift;
-    s_ioport_ctrl = cpu_register_io_memory(0, vga_mm_read_ctrl, 
vga_mm_write_ctrl, s);
-    vga_io_memory = cpu_register_io_memory(0, vga_mem_read, vga_mem_write, s);
+    s_ioport_ctrl = cpu_register_io_memory(dev, 0, vga_mm_read_ctrl, 
vga_mm_write_ctrl, s);
+    vga_io_memory = cpu_register_io_memory(dev, 0, vga_mem_read, 
vga_mem_write, s);
 
     register_savevm("vga", 0, 2, vga_save, vga_load, s);
 
@@ -2357,6 +2361,7 @@ int isa_vga_mm_init(DisplayState *ds, ui
                     int it_shift)
 {
     VGAState *s;
+    QEMUDevice *dev;
 
     s = qemu_mallocz(sizeof(VGAState));
     if (!s)
@@ -2365,6 +2370,7 @@ int isa_vga_mm_init(DisplayState *ds, ui
     vga_common_init(s, ds, vga_ram_base, vga_ram_offset, vga_ram_size);
     vga_mm_init(s, vram_base, ctrl_base, it_shift);
 
+    dev = &s->qemu_dev;
     graphic_console_init(s->ds, s->update, s->invalidate, s->screen_dump,
                          s->text_update, s);
 
Index: kvm-userspace.io/qemu/hw/vmware_vga.c
===================================================================
--- kvm-userspace.io.orig/qemu/hw/vmware_vga.c
+++ kvm-userspace.io/qemu/hw/vmware_vga.c
@@ -1181,11 +1181,12 @@ static void pci_vmsvga_map_mem(PCIDevice
 {
     struct pci_vmsvga_state_s *d = (struct pci_vmsvga_state_s *) pci_dev;
     struct vmsvga_state_s *s = &d->chip;
+    QEMUDevice *dev = &pci_dev->qemu_dev;
     int iomemtype;
 
     s->vram_base = addr;
 #ifdef DIRECT_VRAM
-    iomemtype = cpu_register_io_memory(0, vmsvga_vram_read,
+    iomemtype = cpu_register_io_memory(dev, 0, vmsvga_vram_read,
                     vmsvga_vram_write, s);
 #else
     iomemtype = 0 | IO_MEM_RAM;
Index: kvm-userspace.io/qemu/kqemu.c
===================================================================
--- kvm-userspace.io.orig/qemu/kqemu.c
+++ kvm-userspace.io/qemu/kqemu.c
@@ -38,6 +38,7 @@
 #include <unistd.h>
 #include <inttypes.h>
 
+#include "qemu-common.h"
 #include "cpu.h"
 #include "exec-all.h"
 
Index: kvm-userspace.io/qemu/qemu-common.h
===================================================================
--- kvm-userspace.io.orig/qemu/qemu-common.h
+++ kvm-userspace.io/qemu/qemu-common.h
@@ -29,6 +29,8 @@
 
 #include "qemu-device.h"
 
+#include "qemu-device.h"
+
 #ifdef _WIN32
 #define WIN32_LEAN_AND_MEAN
 #include <windows.h>
Index: kvm-userspace.io/qemu/hw/ide.c
===================================================================
--- kvm-userspace.io.orig/qemu/hw/ide.c
+++ kvm-userspace.io/qemu/hw/ide.c
@@ -3027,6 +3027,8 @@ void pci_piix4_ide_init(PCIBus *bus, Blo
     register_savevm("ide", 0, 1, pci_ide_save, pci_ide_load, d);
 }
 
+#ifdef TARGET_PPC
+
 /***********************************************************/
 /* MacIO based PowerPC IDE */
 
@@ -3151,6 +3153,7 @@ int pmac_ide_init (BlockDriverState **hd
                                              pmac_ide_write, &ide_if[0]);
     return pmac_ide_memory;
 }
+#endif
 
 /***********************************************************/
 /* CF-ATA Microdrive */

-- 


-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference 
Don't miss this year's exciting event. There's still time to save $100. 
Use priority code J8TL2D2. 
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
_______________________________________________
kvm-devel mailing list
kvm-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kvm-devel

Reply via email to