diff options
Diffstat (limited to 'include/asm-generic/dma-mapping-common.h')
| -rw-r--r-- | include/asm-generic/dma-mapping-common.h | 37 | 
1 files changed, 37 insertions, 0 deletions
diff --git a/include/asm-generic/dma-mapping-common.h b/include/asm-generic/dma-mapping-common.h index 2e248d8924d..9073aeb3bb1 100644 --- a/include/asm-generic/dma-mapping-common.h +++ b/include/asm-generic/dma-mapping-common.h @@ -176,4 +176,41 @@ dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg,  #define dma_map_sg(d, s, n, r) dma_map_sg_attrs(d, s, n, r, NULL)  #define dma_unmap_sg(d, s, n, r) dma_unmap_sg_attrs(d, s, n, r, NULL) +extern int dma_common_mmap(struct device *dev, struct vm_area_struct *vma, +			   void *cpu_addr, dma_addr_t dma_addr, size_t size); + +/** + * dma_mmap_attrs - map a coherent DMA allocation into user space + * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices + * @vma: vm_area_struct describing requested user mapping + * @cpu_addr: kernel CPU-view address returned from dma_alloc_attrs + * @handle: device-view address returned from dma_alloc_attrs + * @size: size of memory originally requested in dma_alloc_attrs + * @attrs: attributes of mapping properties requested in dma_alloc_attrs + * + * Map a coherent DMA buffer previously allocated by dma_alloc_attrs + * into user space.  The coherent DMA buffer must not be freed by the + * driver until the user space mapping has been released. + */ +static inline int +dma_mmap_attrs(struct device *dev, struct vm_area_struct *vma, void *cpu_addr, +	       dma_addr_t dma_addr, size_t size, struct dma_attrs *attrs) +{ +	struct dma_map_ops *ops = get_dma_ops(dev); +	BUG_ON(!ops); +	if (ops->mmap) +		return ops->mmap(dev, vma, cpu_addr, dma_addr, size, attrs); +	return dma_common_mmap(dev, vma, cpu_addr, dma_addr, size); +} + +#define dma_mmap_coherent(d, v, c, h, s) dma_mmap_attrs(d, v, c, h, s, NULL) + +static inline int dma_mmap_writecombine(struct device *dev, struct vm_area_struct *vma, +		      void *cpu_addr, dma_addr_t dma_addr, size_t size) +{ +	DEFINE_DMA_ATTRS(attrs); +	dma_set_attr(DMA_ATTR_WRITE_COMBINE, &attrs); +	return dma_mmap_attrs(dev, vma, cpu_addr, dma_addr, size, &attrs); +} +  #endif  |