diff options
Diffstat (limited to 'arch/arm64/include/asm/dma-mapping.h')
| -rw-r--r-- | arch/arm64/include/asm/dma-mapping.h | 21 | 
1 files changed, 19 insertions, 2 deletions
diff --git a/arch/arm64/include/asm/dma-mapping.h b/arch/arm64/include/asm/dma-mapping.h index 8d1810001ae..dc82e52acdb 100644 --- a/arch/arm64/include/asm/dma-mapping.h +++ b/arch/arm64/include/asm/dma-mapping.h @@ -23,11 +23,15 @@  #include <asm-generic/dma-coherent.h> -#define ARCH_HAS_DMA_GET_REQUIRED_MASK +#include <xen/xen.h> +#include <asm/xen/hypervisor.h> +#define DMA_ERROR_CODE	(~(dma_addr_t)0)  extern struct dma_map_ops *dma_ops; +extern struct dma_map_ops coherent_swiotlb_dma_ops; +extern struct dma_map_ops noncoherent_swiotlb_dma_ops; -static inline struct dma_map_ops *get_dma_ops(struct device *dev) +static inline struct dma_map_ops *__generic_dma_ops(struct device *dev)  {  	if (unlikely(!dev) || !dev->archdata.dma_ops)  		return dma_ops; @@ -35,6 +39,19 @@ static inline struct dma_map_ops *get_dma_ops(struct device *dev)  		return dev->archdata.dma_ops;  } +static inline struct dma_map_ops *get_dma_ops(struct device *dev) +{ +	if (xen_initial_domain()) +		return xen_dma_ops; +	else +		return __generic_dma_ops(dev); +} + +static inline void set_dma_ops(struct device *dev, struct dma_map_ops *ops) +{ +	dev->archdata.dma_ops = ops; +} +  #include <asm-generic/dma-mapping-common.h>  static inline dma_addr_t phys_to_dma(struct device *dev, phys_addr_t paddr)  | 
