Message ID | 1375863692-12207-2-git-send-email-aik@ozlabs.ru |
---|---|
State | New |
Headers | show |
On Wed, Aug 07, 2013 at 06:21:25PM +1000, Alexey Kardashevskiy wrote: > From: David Gibson <david@gibson.dropbear.id.au> > > 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 <david@gibson.dropbear.id.au> > --- > 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 4bce3e7..3cea25f 100644 > --- a/hw/pci/pci.c > +++ b/hw/pci/pci.c > @@ -813,7 +813,7 @@ static PCIDevice *do_pci_register_device(PCIDevice *pci_dev, PCIBus *bus, > > pci_dev->bus = bus; > if (bus->iommu_fn) { > - dma_as = bus->iommu_fn(bus, bus->iommu_opaque, devfn); > + dma_as = pci_iommu_as(pci_dev); > } else { > /* FIXME: inherit memory region from bus creator */ > dma_as = &address_space_memory; > @@ -2248,6 +2248,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 b6ad9e4..614f809 100644 > --- a/include/hw/pci/pci.h > +++ b/include/hw/pci/pci.h > @@ -407,6 +407,7 @@ void pci_device_deassert_intx(PCIDevice *dev); > > typedef AddressSpace *(*PCIIOMMUFunc)(PCIBus *, void *, int); > > +AddressSpace *pci_iommu_as(PCIDevice *dev); I prefer full names, and it needs to mention "device". How about: AddressSpace *pci_device_iommu_address_space(PCIDevice *dev); > void pci_setup_iommu(PCIBus *bus, PCIIOMMUFunc fn, void *opaque); > > static inline void > -- > 1.8.3.2
diff --git a/hw/pci/pci.c b/hw/pci/pci.c index 4bce3e7..3cea25f 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -813,7 +813,7 @@ static PCIDevice *do_pci_register_device(PCIDevice *pci_dev, PCIBus *bus, pci_dev->bus = bus; if (bus->iommu_fn) { - dma_as = bus->iommu_fn(bus, bus->iommu_opaque, devfn); + dma_as = pci_iommu_as(pci_dev); } else { /* FIXME: inherit memory region from bus creator */ dma_as = &address_space_memory; @@ -2248,6 +2248,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 b6ad9e4..614f809 100644 --- a/include/hw/pci/pci.h +++ b/include/hw/pci/pci.h @@ -407,6 +407,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