diff options
author | Avi Kivity <avi@redhat.com> | 2009-08-30 16:30:32 +0300 |
---|---|---|
committer | Avi Kivity <avi@redhat.com> | 2009-08-30 16:30:32 +0300 |
commit | fb9bb68a1abeef5a1c3eccd4a1e5599266d57108 (patch) | |
tree | f1033e54bf123e5b70d185a34cf83b6aa1a24bd3 /hw | |
parent | Merge commit 'a4a2f59cda3c88eb647d651e0e0c5f1933b646b3' into upstream-merge (diff) | |
parent | Relax pthreads check to avoid win32 (diff) | |
download | qemu-kvm-fb9bb68a1abeef5a1c3eccd4a1e5599266d57108.tar.gz qemu-kvm-fb9bb68a1abeef5a1c3eccd4a1e5599266d57108.tar.bz2 qemu-kvm-fb9bb68a1abeef5a1c3eccd4a1e5599266d57108.zip |
Merge commit '4617e59389b3b389ec853e98b91e2402cab84818' into upstream-merge
* commit '4617e59389b3b389ec853e98b91e2402cab84818':
Relax pthreads check to avoid win32
e1000 cleanup
pcnet: Add pci_pcnet_{save/load} functions, then remove PCNetState pci_dev field
pcnet: remove useless casts This are casts to the very type of the function
pcnet: Change casts to DO_UPCAST() for PCIPCNetState
Add pci_cirrus_vga_{save/load} functions, then remove vga.pci_dev use
cirrus_vga: Change casts to DO_UPCAST() for PCICirrusVGAState
cirrus_vga: remove pointless cast from void *
Add pci_ne2000_{save/load} functions, then remove pci_dev NE2000State field
We need PCINE2000State for save/load functions
ne2000: Change casts to DO_UPCAST() for PCINE2000State
ne2000: pci_dev has this very value with the right type
ne2000: remove casts from void *
usb-ohci: Change casts to DO_UPCAST() for OHCIPCIState
Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'hw')
-rw-r--r-- | hw/cirrus_vga.c | 57 | ||||
-rw-r--r-- | hw/e1000.c | 10 | ||||
-rw-r--r-- | hw/ne2000.c | 61 | ||||
-rw-r--r-- | hw/pci.c | 4 | ||||
-rw-r--r-- | hw/pcnet.c | 59 | ||||
-rw-r--r-- | hw/usb-ohci.c | 7 |
6 files changed, 120 insertions, 78 deletions
diff --git a/hw/cirrus_vga.c b/hw/cirrus_vga.c index 6b84e3950..d0f0f61a4 100644 --- a/hw/cirrus_vga.c +++ b/hw/cirrus_vga.c @@ -2347,7 +2347,7 @@ static void cirrus_cursor_draw_line(VGACommonState *s1, uint8_t *d1, int scr_y) static uint32_t cirrus_linear_readb(void *opaque, target_phys_addr_t addr) { - CirrusVGAState *s = (CirrusVGAState *) opaque; + CirrusVGAState *s = opaque; uint32_t ret; addr &= s->cirrus_addr_mask; @@ -2406,7 +2406,7 @@ static uint32_t cirrus_linear_readl(void *opaque, target_phys_addr_t addr) static void cirrus_linear_writeb(void *opaque, target_phys_addr_t addr, uint32_t val) { - CirrusVGAState *s = (CirrusVGAState *) opaque; + CirrusVGAState *s = opaque; unsigned mode; addr &= s->cirrus_addr_mask; @@ -2534,7 +2534,7 @@ static uint32_t cirrus_linear_bitblt_readl(void *opaque, target_phys_addr_t addr static void cirrus_linear_bitblt_writeb(void *opaque, target_phys_addr_t addr, uint32_t val) { - CirrusVGAState *s = (CirrusVGAState *) opaque; + CirrusVGAState *s = opaque; if (s->cirrus_srcptr != s->cirrus_srcptr_end) { /* bitblt */ @@ -2931,7 +2931,7 @@ static void vga_ioport_write(void *opaque, uint32_t addr, uint32_t val) static uint32_t cirrus_mmio_readb(void *opaque, target_phys_addr_t addr) { - CirrusVGAState *s = (CirrusVGAState *) opaque; + CirrusVGAState *s = opaque; addr &= CIRRUS_PNPMMIO_SIZE - 1; @@ -2975,7 +2975,7 @@ static uint32_t cirrus_mmio_readl(void *opaque, target_phys_addr_t addr) static void cirrus_mmio_writeb(void *opaque, target_phys_addr_t addr, uint32_t val) { - CirrusVGAState *s = (CirrusVGAState *) opaque; + CirrusVGAState *s = opaque; addr &= CIRRUS_PNPMMIO_SIZE - 1; @@ -3033,9 +3033,6 @@ static void cirrus_vga_save(QEMUFile *f, void *opaque) { CirrusVGAState *s = opaque; - if (s->vga.pci_dev) - pci_device_save(s->vga.pci_dev, f); - qemu_put_be32s(f, &s->vga.latch); qemu_put_8s(f, &s->vga.sr_index); qemu_put_buffer(f, s->vga.sr, 256); @@ -3074,17 +3071,10 @@ static void cirrus_vga_save(QEMUFile *f, void *opaque) static int cirrus_vga_load(QEMUFile *f, void *opaque, int version_id) { CirrusVGAState *s = opaque; - int ret; if (version_id > 2) return -EINVAL; - if (s->vga.pci_dev && version_id >= 2) { - ret = pci_device_load(s->vga.pci_dev, f); - if (ret < 0) - return ret; - } - qemu_get_be32s(f, &s->vga.latch); qemu_get_8s(f, &s->vga.sr_index); qemu_get_buffer(f, s->vga.sr, 256); @@ -3127,6 +3117,31 @@ static int cirrus_vga_load(QEMUFile *f, void *opaque, int version_id) return 0; } +static void pci_cirrus_vga_save(QEMUFile *f, void *opaque) +{ + PCICirrusVGAState *s = opaque; + + pci_device_save(&s->dev, f); + cirrus_vga_save(f, &s->cirrus_vga); +} + +static int pci_cirrus_vga_load(QEMUFile *f, void *opaque, int version_id) +{ + PCICirrusVGAState *s = opaque; + int ret; + + if (version_id > 2) + return -EINVAL; + + if (version_id >= 2) { + ret = pci_device_load(&s->dev, f); + if (ret < 0) + return ret; + } + + return cirrus_vga_load(f, &s->cirrus_vga, version_id); +} + /*************************************** * * initialize @@ -3243,7 +3258,6 @@ static void cirrus_init_common(CirrusVGAState * s, int device_id, int is_pci) qemu_register_reset(cirrus_reset, s); cirrus_reset(s); - register_savevm("cirrus_vga", 0, 2, cirrus_vga_save, cirrus_vga_load, s); } /*************************************** @@ -3263,6 +3277,7 @@ void isa_cirrus_vga_init(void) s->vga.ds = graphic_console_init(s->vga.update, s->vga.invalidate, s->vga.screen_dump, s->vga.text_update, &s->vga); + register_savevm("cirrus_vga", 0, 2, cirrus_vga_save, cirrus_vga_load, s); /* XXX ISA-LFB support */ } @@ -3275,7 +3290,7 @@ void isa_cirrus_vga_init(void) static void cirrus_pci_lfb_map(PCIDevice *d, int region_num, uint32_t addr, uint32_t size, int type) { - CirrusVGAState *s = &((PCICirrusVGAState *)d)->cirrus_vga; + CirrusVGAState *s = &DO_UPCAST(PCICirrusVGAState, dev, d)->cirrus_vga; vga_dirty_log_stop(&s->vga); @@ -3298,7 +3313,7 @@ static void cirrus_pci_lfb_map(PCIDevice *d, int region_num, static void cirrus_pci_mmio_map(PCIDevice *d, int region_num, uint32_t addr, uint32_t size, int type) { - CirrusVGAState *s = &((PCICirrusVGAState *)d)->cirrus_vga; + CirrusVGAState *s = &DO_UPCAST(PCICirrusVGAState, dev, d)->cirrus_vga; cpu_register_physical_memory(addr, CIRRUS_PNPMMIO_SIZE, s->cirrus_mmio_io_addr); @@ -3307,13 +3322,13 @@ static void cirrus_pci_mmio_map(PCIDevice *d, int region_num, static void pci_cirrus_write_config(PCIDevice *d, uint32_t address, uint32_t val, int len) { - PCICirrusVGAState *pvs = container_of(d, PCICirrusVGAState, dev); + PCICirrusVGAState *pvs = DO_UPCAST(PCICirrusVGAState, dev, d); CirrusVGAState *s = &pvs->cirrus_vga; vga_dirty_log_stop(&s->vga); pci_default_write_config(d, address, val, len); - if (s->vga.map_addr && pvs->dev.io_regions[0].addr == -1) + if (s->vga.map_addr && d->io_regions[0].addr == -1) s->vga.map_addr = 0; cirrus_update_memory_access(s); @@ -3330,7 +3345,6 @@ static int pci_cirrus_vga_initfn(PCIDevice *dev) /* setup VGA */ vga_common_init(&s->vga, VGA_RAM_SIZE); cirrus_init_common(s, device_id, 1); - s->vga.pci_dev = (PCIDevice *)d; s->vga.ds = graphic_console_init(s->vga.update, s->vga.invalidate, s->vga.screen_dump, s->vga.text_update, &s->vga); @@ -3352,6 +3366,7 @@ static int pci_cirrus_vga_initfn(PCIDevice *dev) pci_register_bar((PCIDevice *)d, 1, CIRRUS_PNPMMIO_SIZE, PCI_ADDRESS_SPACE_MEM, cirrus_pci_mmio_map); } + register_savevm("cirrus_vga", 0, 2, pci_cirrus_vga_save, pci_cirrus_vga_load, d); /* XXX: ROM BIOS */ return 0; } diff --git a/hw/e1000.c b/hw/e1000.c index 0253d3b35..95c471c62 100644 --- a/hw/e1000.c +++ b/hw/e1000.c @@ -897,7 +897,7 @@ enum { MAC_NARRAYS = ARRAY_SIZE(mac_regarraystosave) }; static void nic_save(QEMUFile *f, void *opaque) { - E1000State *s = (E1000State *)opaque; + E1000State *s = opaque; int i, j; pci_device_save(&s->dev, f); @@ -940,7 +940,7 @@ nic_save(QEMUFile *f, void *opaque) static int nic_load(QEMUFile *f, void *opaque, int version_id) { - E1000State *s = (E1000State *)opaque; + E1000State *s = opaque; int i, j, ret; if ((ret = pci_device_load(&s->dev, f)) < 0) @@ -1032,7 +1032,7 @@ static void e1000_mmio_map(PCIDevice *pci_dev, int region_num, uint32_t addr, uint32_t size, int type) { - E1000State *d = (E1000State *)pci_dev; + E1000State *d = DO_UPCAST(E1000State, dev, pci_dev); int i; const uint32_t excluded_regs[] = { E1000_MDIC, E1000_ICR, E1000_ICS, E1000_IMS, @@ -1062,7 +1062,7 @@ e1000_cleanup(VLANClientState *vc) static int pci_e1000_uninit(PCIDevice *dev) { - E1000State *d = (E1000State *) dev; + E1000State *d = DO_UPCAST(E1000State, dev, dev); cpu_unregister_io_memory(d->mmio_index); @@ -1083,7 +1083,7 @@ static void e1000_reset(void *opaque) static int pci_e1000_init(PCIDevice *pci_dev) { - E1000State *d = (E1000State *)pci_dev; + E1000State *d = DO_UPCAST(E1000State, dev, pci_dev); uint8_t *pci_conf; uint16_t checksum = 0; static const char info_str[] = "e1000"; diff --git a/hw/ne2000.c b/hw/ne2000.c index 9f685b4e9..bdfc9ed26 100644 --- a/hw/ne2000.c +++ b/hw/ne2000.c @@ -141,12 +141,16 @@ typedef struct NE2000State { uint8_t mult[8]; /* multicast mask array */ qemu_irq irq; int isa_io_base; - PCIDevice *pci_dev; VLANClientState *vc; uint8_t macaddr[6]; uint8_t mem[NE2000_MEM_SIZE]; } NE2000State; +typedef struct PCINE2000State { + PCIDevice dev; + NE2000State ne2000; +} PCINE2000State; + static void ne2000_reset(NE2000State *s) { int i; @@ -648,14 +652,11 @@ static uint32_t ne2000_reset_ioport_read(void *opaque, uint32_t addr) return 0; } -static void ne2000_save(QEMUFile* f,void* opaque) +static void ne2000_save(QEMUFile* f, void* opaque) { - NE2000State* s=(NE2000State*)opaque; + NE2000State* s = opaque; uint32_t tmp; - if (s->pci_dev) - pci_device_save(s->pci_dev, f); - qemu_put_8s(f, &s->rxcr); qemu_put_8s(f, &s->cmd); @@ -679,21 +680,14 @@ static void ne2000_save(QEMUFile* f,void* opaque) qemu_put_buffer(f, s->mem, NE2000_MEM_SIZE); } -static int ne2000_load(QEMUFile* f,void* opaque,int version_id) +static int ne2000_load(QEMUFile* f, void* opaque, int version_id) { - NE2000State* s=(NE2000State*)opaque; - int ret; + NE2000State* s = opaque; uint32_t tmp; if (version_id > 3) return -EINVAL; - if (s->pci_dev && version_id >= 3) { - ret = pci_device_load(s->pci_dev, f); - if (ret < 0) - return ret; - } - if (version_id >= 2) { qemu_get_8s(f, &s->rxcr); } else { @@ -722,6 +716,31 @@ static int ne2000_load(QEMUFile* f,void* opaque,int version_id) return 0; } +static void pci_ne2000_save(QEMUFile* f, void* opaque) +{ + PCINE2000State* s = opaque; + + pci_device_save(&s->dev, f); + ne2000_save(f, &s->ne2000); +} + +static int pci_ne2000_load(QEMUFile* f, void* opaque, int version_id) +{ + PCINE2000State* s = opaque; + int ret; + + if (version_id > 3) + return -EINVAL; + + if (version_id >= 3) { + ret = pci_device_load(&s->dev, f); + if (ret < 0) + return ret; + } + + return ne2000_load(f, &s->ne2000, version_id); +} + static void isa_ne2000_cleanup(VLANClientState *vc) { NE2000State *s = vc->opaque; @@ -771,15 +790,10 @@ void isa_ne2000_init(int base, qemu_irq irq, NICInfo *nd) /***********************************************************/ /* PCI NE2000 definitions */ -typedef struct PCINE2000State { - PCIDevice dev; - NE2000State ne2000; -} PCINE2000State; - static void ne2000_map(PCIDevice *pci_dev, int region_num, uint32_t addr, uint32_t size, int type) { - PCINE2000State *d = (PCINE2000State *)pci_dev; + PCINE2000State *d = DO_UPCAST(PCINE2000State, dev, pci_dev); NE2000State *s = &d->ne2000; register_ioport_write(addr, 16, 1, ne2000_ioport_write, s); @@ -805,7 +819,7 @@ static void ne2000_cleanup(VLANClientState *vc) static int pci_ne2000_init(PCIDevice *pci_dev) { - PCINE2000State *d = (PCINE2000State *)pci_dev; + PCINE2000State *d = DO_UPCAST(PCINE2000State, dev, pci_dev); NE2000State *s; uint8_t *pci_conf; @@ -820,7 +834,6 @@ static int pci_ne2000_init(PCIDevice *pci_dev) PCI_ADDRESS_SPACE_IO, ne2000_map); s = &d->ne2000; s->irq = d->dev.irq[0]; - s->pci_dev = (PCIDevice *)d; qdev_get_macaddr(&d->dev.qdev, s->macaddr); ne2000_reset(s); s->vc = qdev_get_vlan_client(&d->dev.qdev, @@ -829,7 +842,7 @@ static int pci_ne2000_init(PCIDevice *pci_dev) qemu_format_nic_info_str(s->vc, s->macaddr); - register_savevm("ne2000", -1, 3, ne2000_save, ne2000_load, s); + register_savevm("ne2000", -1, 3, pci_ne2000_save, pci_ne2000_load, d); return 0; } @@ -90,7 +90,7 @@ static const VMStateDescription vmstate_pcibus = { static void pci_bus_reset(void *opaque) { - PCIBus *bus = (PCIBus *)opaque; + PCIBus *bus = opaque; int i; for (i = 0; i < bus->nirq; i++) { @@ -737,7 +737,7 @@ uint32_t pci_data_read(void *opaque, uint32_t addr, int len) /* 0 <= irq_num <= 3. level must be 0 or 1 */ static void pci_set_irq(void *opaque, int irq_num, int level) { - PCIDevice *pci_dev = (PCIDevice *)opaque; + PCIDevice *pci_dev = opaque; PCIBus *bus; int change; diff --git a/hw/pcnet.c b/hw/pcnet.c index 107b5b64c..8c352d213 100644 --- a/hw/pcnet.c +++ b/hw/pcnet.c @@ -60,7 +60,6 @@ typedef struct PCNetState_st PCNetState; struct PCNetState_st { - PCIDevice *pci_dev; VLANClientState *vc; uint8_t macaddr[6]; QEMUTimer *poll_timer; @@ -1764,7 +1763,7 @@ static uint32_t pcnet_ioport_readl(void *opaque, uint32_t addr) static void pcnet_ioport_map(PCIDevice *pci_dev, int region_num, uint32_t addr, uint32_t size, int type) { - PCNetState *d = &((PCIPCNetState *)pci_dev)->state; + PCNetState *d = &DO_UPCAST(PCIPCNetState, pci_dev, pci_dev)->state; #ifdef PCNET_DEBUG_IO printf("pcnet_ioport_map addr=0x%04x size=0x%04x\n", addr, size); @@ -1885,9 +1884,6 @@ static void pcnet_save(QEMUFile *f, void *opaque) PCNetState *s = opaque; unsigned int i; - if (s->pci_dev) - pci_device_save(s->pci_dev, f); - qemu_put_sbe32(f, s->rap); qemu_put_sbe32(f, s->isr); qemu_put_sbe32(f, s->lnkst); @@ -1909,17 +1905,11 @@ static void pcnet_save(QEMUFile *f, void *opaque) static int pcnet_load(QEMUFile *f, void *opaque, int version_id) { PCNetState *s = opaque; - int i, ret; + int i; if (version_id != 2) return -EINVAL; - if (s->pci_dev) { - ret = pci_device_load(s->pci_dev, f); - if (ret < 0) - return ret; - } - qemu_get_sbe32s(f, &s->rap); qemu_get_sbe32s(f, &s->isr); qemu_get_sbe32s(f, &s->lnkst); @@ -1940,6 +1930,29 @@ static int pcnet_load(QEMUFile *f, void *opaque, int version_id) return 0; } +static void pci_pcnet_save(QEMUFile *f, void *opaque) +{ + PCIPCNetState *s = opaque; + + pci_device_save(&s->pci_dev, f); + pcnet_save(f, &s->state); +} + +static int pci_pcnet_load(QEMUFile *f, void *opaque, int version_id) +{ + PCIPCNetState *s = opaque; + int ret; + + if (version_id != 2) + return -EINVAL; + + ret = pci_device_load(&s->pci_dev, f); + if (ret < 0) + return ret; + + return pcnet_load(f, &s->state, version_id); +} + static void pcnet_common_cleanup(PCNetState *d) { unregister_savevm("pcnet", d); @@ -1958,28 +1971,27 @@ static int pcnet_common_init(DeviceState *dev, PCNetState *s, pcnet_can_receive, pcnet_receive, NULL, cleanup, s); pcnet_h_reset(s); - register_savevm("pcnet", -1, 2, pcnet_save, pcnet_load, s); return 0; } /* PCI interface */ static CPUWriteMemoryFunc * const pcnet_mmio_write[] = { - (CPUWriteMemoryFunc * const )&pcnet_mmio_writeb, - (CPUWriteMemoryFunc * const )&pcnet_mmio_writew, - (CPUWriteMemoryFunc * const )&pcnet_mmio_writel + &pcnet_mmio_writeb, + &pcnet_mmio_writew, + &pcnet_mmio_writel }; static CPUReadMemoryFunc * const pcnet_mmio_read[] = { - (CPUReadMemoryFunc * const )&pcnet_mmio_readb, - (CPUReadMemoryFunc * const )&pcnet_mmio_readw, - (CPUReadMemoryFunc * const )&pcnet_mmio_readl + &pcnet_mmio_readb, + &pcnet_mmio_readw, + &pcnet_mmio_readl }; static void pcnet_mmio_map(PCIDevice *pci_dev, int region_num, uint32_t addr, uint32_t size, int type) { - PCIPCNetState *d = (PCIPCNetState *)pci_dev; + PCIPCNetState *d = DO_UPCAST(PCIPCNetState, pci_dev, pci_dev); #ifdef PCNET_DEBUG_IO printf("pcnet_mmio_map addr=0x%08x 0x%08x\n", addr, size); @@ -2009,7 +2021,7 @@ static void pci_pcnet_cleanup(VLANClientState *vc) static int pci_pcnet_uninit(PCIDevice *dev) { - PCIPCNetState *d = (PCIPCNetState *)dev; + PCIPCNetState *d = DO_UPCAST(PCIPCNetState, pci_dev, dev); cpu_unregister_io_memory(d->state.mmio_index); @@ -2018,7 +2030,7 @@ static int pci_pcnet_uninit(PCIDevice *dev) static int pci_pcnet_init(PCIDevice *pci_dev) { - PCIPCNetState *d = (PCIPCNetState *)pci_dev; + PCIPCNetState *d = DO_UPCAST(PCIPCNetState, pci_dev, pci_dev); PCNetState *s = &d->state; uint8_t *pci_conf; @@ -2060,8 +2072,8 @@ static int pci_pcnet_init(PCIDevice *pci_dev) s->irq = pci_dev->irq[0]; s->phys_mem_read = pci_physical_memory_read; s->phys_mem_write = pci_physical_memory_write; - s->pci_dev = pci_dev; + register_savevm("pcnet", -1, 2, pci_pcnet_save, pci_pcnet_load, d); return pcnet_common_init(&pci_dev->qdev, s, pci_pcnet_cleanup); } @@ -2138,6 +2150,7 @@ static int lance_init(SysBusDevice *dev) s->phys_mem_read = ledma_memory_read; s->phys_mem_write = ledma_memory_write; + register_savevm("pcnet", -1, 2, pcnet_save, pcnet_load, s); return pcnet_common_init(&dev->qdev, s, lance_cleanup); } diff --git a/hw/usb-ohci.c b/hw/usb-ohci.c index 093623fc4..0c08e9fff 100644 --- a/hw/usb-ohci.c +++ b/hw/usb-ohci.c @@ -1706,7 +1706,7 @@ typedef struct { static void ohci_mapfunc(PCIDevice *pci_dev, int i, uint32_t addr, uint32_t size, int type) { - OHCIPCIState *ohci = (OHCIPCIState *)pci_dev; + OHCIPCIState *ohci = DO_UPCAST(OHCIPCIState, pci_dev, pci_dev); cpu_register_physical_memory(addr, size, ohci->state.mem); } @@ -1714,8 +1714,9 @@ void usb_ohci_init_pci(struct PCIBus *bus, int num_ports, int devfn) { OHCIPCIState *ohci; - ohci = (OHCIPCIState *)pci_register_device(bus, "OHCI USB", sizeof(*ohci), - devfn, NULL, NULL); + ohci = DO_UPCAST(OHCIPCIState, pci_dev, + pci_register_device(bus, "OHCI USB", sizeof(*ohci), + devfn, NULL, NULL)); if (ohci == NULL) { fprintf(stderr, "usb-ohci: Failed to register PCI device\n"); return; |