Loading include/linux/dma-mapping.h +5 −0 Original line number Diff line number Diff line Loading @@ -463,6 +463,7 @@ int dma_get_sgtable_attrs(struct device *dev, struct sg_table *sgt, int dma_mmap_attrs(struct device *dev, struct vm_area_struct *vma, void *cpu_addr, dma_addr_t dma_addr, size_t size, unsigned long attrs); bool dma_can_mmap(struct device *dev); int dma_supported(struct device *dev, u64 mask); int dma_set_mask(struct device *dev, u64 mask); int dma_set_coherent_mask(struct device *dev, u64 mask); Loading Loading @@ -554,6 +555,10 @@ static inline int dma_mmap_attrs(struct device *dev, struct vm_area_struct *vma, { return -ENXIO; } static inline bool dma_can_mmap(struct device *dev) { return false; } static inline int dma_supported(struct device *dev, u64 mask) { return 0; Loading kernel/dma/mapping.c +23 −0 Original line number Diff line number Diff line Loading @@ -222,6 +222,29 @@ int dma_common_mmap(struct device *dev, struct vm_area_struct *vma, #endif /* !CONFIG_ARCH_NO_COHERENT_DMA_MMAP */ } /** * dma_can_mmap - check if a given device supports dma_mmap_* * @dev: device to check * * Returns %true if @dev supports dma_mmap_coherent() and dma_mmap_attrs() to * map DMA allocations to userspace. */ bool dma_can_mmap(struct device *dev) { const struct dma_map_ops *ops = get_dma_ops(dev); if (IS_ENABLED(CONFIG_ARCH_NO_COHERENT_DMA_MMAP)) return false; if (dma_is_direct(ops)) { return dev_is_dma_coherent(dev) || IS_ENABLED(CONFIG_ARCH_HAS_DMA_COHERENT_TO_PFN); } return ops->mmap != NULL; } EXPORT_SYMBOL_GPL(dma_can_mmap); /** * dma_mmap_attrs - map a coherent DMA allocation into user space * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices Loading Loading
include/linux/dma-mapping.h +5 −0 Original line number Diff line number Diff line Loading @@ -463,6 +463,7 @@ int dma_get_sgtable_attrs(struct device *dev, struct sg_table *sgt, int dma_mmap_attrs(struct device *dev, struct vm_area_struct *vma, void *cpu_addr, dma_addr_t dma_addr, size_t size, unsigned long attrs); bool dma_can_mmap(struct device *dev); int dma_supported(struct device *dev, u64 mask); int dma_set_mask(struct device *dev, u64 mask); int dma_set_coherent_mask(struct device *dev, u64 mask); Loading Loading @@ -554,6 +555,10 @@ static inline int dma_mmap_attrs(struct device *dev, struct vm_area_struct *vma, { return -ENXIO; } static inline bool dma_can_mmap(struct device *dev) { return false; } static inline int dma_supported(struct device *dev, u64 mask) { return 0; Loading
kernel/dma/mapping.c +23 −0 Original line number Diff line number Diff line Loading @@ -222,6 +222,29 @@ int dma_common_mmap(struct device *dev, struct vm_area_struct *vma, #endif /* !CONFIG_ARCH_NO_COHERENT_DMA_MMAP */ } /** * dma_can_mmap - check if a given device supports dma_mmap_* * @dev: device to check * * Returns %true if @dev supports dma_mmap_coherent() and dma_mmap_attrs() to * map DMA allocations to userspace. */ bool dma_can_mmap(struct device *dev) { const struct dma_map_ops *ops = get_dma_ops(dev); if (IS_ENABLED(CONFIG_ARCH_NO_COHERENT_DMA_MMAP)) return false; if (dma_is_direct(ops)) { return dev_is_dma_coherent(dev) || IS_ENABLED(CONFIG_ARCH_HAS_DMA_COHERENT_TO_PFN); } return ops->mmap != NULL; } EXPORT_SYMBOL_GPL(dma_can_mmap); /** * dma_mmap_attrs - map a coherent DMA allocation into user space * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices Loading