This allows the device to work properly with an emulated IOMMU. Signed-off-by: Eduard - Gabriel Munteanu <eduard.munte...@linux360.ro> --- hw/pcnet-pci.c | 17 +++++++++-------- 1 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/hw/pcnet-pci.c b/hw/pcnet-pci.c index 9415a1e..9e962a3 100644 --- a/hw/pcnet-pci.c +++ b/hw/pcnet-pci.c @@ -214,16 +214,16 @@ static CPUReadMemoryFunc * const pcnet_mmio_read[] = { &pcnet_mmio_readl }; -static void pci_physical_memory_write(void *dma_opaque, target_phys_addr_t addr, - uint8_t *buf, int len, int do_bswap) +static void pci_dma_write(void *dma_opaque, target_phys_addr_t addr, + uint8_t *buf, int len, int do_bswap) { - cpu_physical_memory_write(addr, buf, len); + dma_memory_write(dma_opaque, addr, buf, len); } -static void pci_physical_memory_read(void *dma_opaque, target_phys_addr_t addr, - uint8_t *buf, int len, int do_bswap) +static void pci_dma_read(void *dma_opaque, target_phys_addr_t addr, + uint8_t *buf, int len, int do_bswap) { - cpu_physical_memory_read(addr, buf, len); + dma_memory_read(dma_opaque, addr, buf, len); } static void pci_pcnet_cleanup(VLANClientState *nc) @@ -290,8 +290,9 @@ static int pci_pcnet_init(PCIDevice *pci_dev) pci_register_bar_simple(pci_dev, 1, PCNET_PNPMMIO_SIZE, 0, s->mmio_index); s->irq = pci_dev->irq[0]; - s->phys_mem_read = pci_physical_memory_read; - s->phys_mem_write = pci_physical_memory_write; + s->phys_mem_read = pci_dma_read; + s->phys_mem_write = pci_dma_write; + s->dma_opaque = &pci_dev->qdev; if (!pci_dev->qdev.hotplugged) { static int loaded = 0; -- 1.7.4.4