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 ¶llel_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