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 2e248d8924dc..9073aeb3bb1a 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, | |||
176 | #define dma_map_sg(d, s, n, r) dma_map_sg_attrs(d, s, n, r, NULL) | 176 | #define dma_map_sg(d, s, n, r) dma_map_sg_attrs(d, s, n, r, NULL) |
177 | #define dma_unmap_sg(d, s, n, r) dma_unmap_sg_attrs(d, s, n, r, NULL) | 177 | #define dma_unmap_sg(d, s, n, r) dma_unmap_sg_attrs(d, s, n, r, NULL) |
178 | 178 | ||
179 | extern int dma_common_mmap(struct device *dev, struct vm_area_struct *vma, | ||
180 | void *cpu_addr, dma_addr_t dma_addr, size_t size); | ||
181 | |||
182 | /** | ||
183 | * dma_mmap_attrs - map a coherent DMA allocation into user space | ||
184 | * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices | ||
185 | * @vma: vm_area_struct describing requested user mapping | ||
186 | * @cpu_addr: kernel CPU-view address returned from dma_alloc_attrs | ||
187 | * @handle: device-view address returned from dma_alloc_attrs | ||
188 | * @size: size of memory originally requested in dma_alloc_attrs | ||
189 | * @attrs: attributes of mapping properties requested in dma_alloc_attrs | ||
190 | * | ||
191 | * Map a coherent DMA buffer previously allocated by dma_alloc_attrs | ||
192 | * into user space. The coherent DMA buffer must not be freed by the | ||
193 | * driver until the user space mapping has been released. | ||
194 | */ | ||
195 | static inline int | ||
196 | dma_mmap_attrs(struct device *dev, struct vm_area_struct *vma, void *cpu_addr, | ||
197 | dma_addr_t dma_addr, size_t size, struct dma_attrs *attrs) | ||
198 | { | ||
199 | struct dma_map_ops *ops = get_dma_ops(dev); | ||
200 | BUG_ON(!ops); | ||
201 | if (ops->mmap) | ||
202 | return ops->mmap(dev, vma, cpu_addr, dma_addr, size, attrs); | ||
203 | return dma_common_mmap(dev, vma, cpu_addr, dma_addr, size); | ||
204 | } | ||
205 | |||
206 | #define dma_mmap_coherent(d, v, c, h, s) dma_mmap_attrs(d, v, c, h, s, NULL) | ||
207 | |||
208 | static inline int dma_mmap_writecombine(struct device *dev, struct vm_area_struct *vma, | ||
209 | void *cpu_addr, dma_addr_t dma_addr, size_t size) | ||
210 | { | ||
211 | DEFINE_DMA_ATTRS(attrs); | ||
212 | dma_set_attr(DMA_ATTR_WRITE_COMBINE, &attrs); | ||
213 | return dma_mmap_attrs(dev, vma, cpu_addr, dma_addr, size, &attrs); | ||
214 | } | ||
215 | |||
179 | #endif | 216 | #endif |