[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 03/10] xen: add hooks for mapping phys<->bus addresses in swiotlb
From: Ian Campbell <ian.campbell@xxxxxxxxxx> Add hooks to allow Xen to do translation between pfn and mfns for the swiotlb layer, so that dma actually ends up going to the proper machine pages. [ Impact: Xen support for DMA ] Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx> Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@xxxxxxxxxx> Reviewed-by: "H. Peter Anvin" <hpa@xxxxxxxxx> Acked-by: FUJITA Tomonori <fujita.tomonori@xxxxxxxxxxxxx> Acked-by: Joerg Roedel <joerg.roedel@xxxxxxx> --- arch/x86/kernel/pci-swiotlb.c | 10 ---------- arch/x86/xen/pci-swiotlb.c | 16 ++++++++++++++++ drivers/pci/xen-iommu.c | 10 ++++++++++ include/xen/swiotlb.h | 2 ++ 4 files changed, 28 insertions(+), 10 deletions(-) diff --git a/arch/x86/kernel/pci-swiotlb.c b/arch/x86/kernel/pci-swiotlb.c index 880b7bc..3e2ffd6 100644 --- a/arch/x86/kernel/pci-swiotlb.c +++ b/arch/x86/kernel/pci-swiotlb.c @@ -13,16 +13,6 @@ int swiotlb __read_mostly; -dma_addr_t swiotlb_phys_to_bus(struct device *hwdev, phys_addr_t paddr) -{ - return paddr; -} - -phys_addr_t swiotlb_bus_to_phys(dma_addr_t baddr) -{ - return baddr; -} - int __weak swiotlb_arch_range_needs_mapping(phys_addr_t paddr, size_t size) { return 0; diff --git a/arch/x86/xen/pci-swiotlb.c b/arch/x86/xen/pci-swiotlb.c index 7665d3b..646f2bf 100644 --- a/arch/x86/xen/pci-swiotlb.c +++ b/arch/x86/xen/pci-swiotlb.c @@ -25,3 +25,19 @@ void *swiotlb_alloc(unsigned order, unsigned long nslabs) WARN_ON(1); return NULL; } + +dma_addr_t swiotlb_phys_to_bus(struct device *hwdev, phys_addr_t paddr) +{ + if (xen_pv_domain()) + return xen_phys_to_bus(paddr); + + return paddr; +} + +phys_addr_t swiotlb_bus_to_phys(dma_addr_t baddr) +{ + if (xen_pv_domain()) + return xen_bus_to_phys(baddr); + + return baddr; +} diff --git a/drivers/pci/xen-iommu.c b/drivers/pci/xen-iommu.c index ee7b9fb..a5a3b32 100644 --- a/drivers/pci/xen-iommu.c +++ b/drivers/pci/xen-iommu.c @@ -60,6 +60,16 @@ void xen_swiotlb_fixup(void *buf, size_t size, unsigned long nslabs) } } +dma_addr_t xen_phys_to_bus(phys_addr_t paddr) +{ + return phys_to_machine(XPADDR(paddr)).maddr; +} + +phys_addr_t xen_bus_to_phys(dma_addr_t daddr) +{ + return machine_to_phys(XMADDR(daddr)).paddr; +} + static inline int address_needs_mapping(struct device *hwdev, dma_addr_t addr) { diff --git a/include/xen/swiotlb.h b/include/xen/swiotlb.h index 67b7b42..4229f27 100644 --- a/include/xen/swiotlb.h +++ b/include/xen/swiotlb.h @@ -2,5 +2,7 @@ #define _XEN_SWIOTLB_H extern void xen_swiotlb_fixup(void *buf, size_t size, unsigned long nslabs); +extern phys_addr_t xen_bus_to_phys(dma_addr_t daddr); +extern dma_addr_t xen_phys_to_bus(phys_addr_t paddr); #endif /* _XEN_SWIOTLB_H */ -- 1.6.0.6 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |