From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:39548) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UcBJJ-0004e7-OT for qemu-devel@nongnu.org; Tue, 14 May 2013 05:14:37 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UcBJ5-0001Mf-Bo for qemu-devel@nongnu.org; Tue, 14 May 2013 05:14:17 -0400 From: David Gibson Date: Tue, 14 May 2013 19:13:51 +1000 Message-Id: <1368522837-20747-6-git-send-email-david@gibson.dropbear.id.au> In-Reply-To: <1368522837-20747-1-git-send-email-david@gibson.dropbear.id.au> References: <1368522837-20747-1-git-send-email-david@gibson.dropbear.id.au> Subject: [Qemu-devel] [PATCH 05/11] pci: Introduce helper to retrieve a PCI device's DMA address space List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: alex.williamson@redhat.com, pbonzini@redhat.com Cc: aik@ozlabs.ru, David Gibson , qemu-ppc@nongnu.org, qemu-devel@nongnu.org, mst@redhat.com A PCI device's DMA address space (possibly an IOMMU) is returned by a method on the PCIBus. At the moment that only has one caller, so the method is simply open coded. We'll need another caller for VFIO, so this patch introduces a helper/wrapper function. Signed-off-by: David Gibson --- hw/pci/pci.c | 9 ++++++++- include/hw/pci/pci.h | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/hw/pci/pci.c b/hw/pci/pci.c index 39085d8..e7a9735 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -811,7 +811,7 @@ static PCIDevice *do_pci_register_device(PCIDevice *pci_dev, PCIBus *bus, } pci_dev->bus = bus; - dma_as = bus->iommu_fn(bus, bus->iommu_opaque, devfn); + dma_as = pci_iommu_as(pci_dev); memory_region_init_alias(&pci_dev->bus_master_enable_region, "bus master", dma_as->root, 0, memory_region_size(dma_as->root)); memory_region_set_enabled(&pci_dev->bus_master_enable_region, false); @@ -2233,6 +2233,13 @@ static void pci_device_class_init(ObjectClass *klass, void *data) k->props = pci_props; } +AddressSpace *pci_iommu_as(PCIDevice *dev) +{ + PCIBus *bus = PCI_BUS(dev->bus); + + return bus->iommu_fn(bus, bus->iommu_opaque, dev->devfn); +} + void pci_setup_iommu(PCIBus *bus, PCIIOMMUFunc fn, void *opaque) { bus->iommu_fn = fn; diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h index 6ef1f97..21e2132 100644 --- a/include/hw/pci/pci.h +++ b/include/hw/pci/pci.h @@ -402,6 +402,7 @@ void pci_device_deassert_intx(PCIDevice *dev); typedef AddressSpace *(*PCIIOMMUFunc)(PCIBus *, void *, int); +AddressSpace *pci_iommu_as(PCIDevice *dev); void pci_setup_iommu(PCIBus *bus, PCIIOMMUFunc fn, void *opaque); static inline void -- 1.7.10.4