diff options
Diffstat (limited to 'include/linux/dma-mapping.h')
-rw-r--r-- | include/linux/dma-mapping.h | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h index 08528afdf58b..10c5a17b1f51 100644 --- a/include/linux/dma-mapping.h +++ b/include/linux/dma-mapping.h | |||
@@ -243,29 +243,33 @@ static inline void dma_unmap_sg_attrs(struct device *dev, struct scatterlist *sg | |||
243 | ops->unmap_sg(dev, sg, nents, dir, attrs); | 243 | ops->unmap_sg(dev, sg, nents, dir, attrs); |
244 | } | 244 | } |
245 | 245 | ||
246 | static inline dma_addr_t dma_map_page(struct device *dev, struct page *page, | 246 | static inline dma_addr_t dma_map_page_attrs(struct device *dev, |
247 | size_t offset, size_t size, | 247 | struct page *page, |
248 | enum dma_data_direction dir) | 248 | size_t offset, size_t size, |
249 | enum dma_data_direction dir, | ||
250 | unsigned long attrs) | ||
249 | { | 251 | { |
250 | struct dma_map_ops *ops = get_dma_ops(dev); | 252 | struct dma_map_ops *ops = get_dma_ops(dev); |
251 | dma_addr_t addr; | 253 | dma_addr_t addr; |
252 | 254 | ||
253 | kmemcheck_mark_initialized(page_address(page) + offset, size); | 255 | kmemcheck_mark_initialized(page_address(page) + offset, size); |
254 | BUG_ON(!valid_dma_direction(dir)); | 256 | BUG_ON(!valid_dma_direction(dir)); |
255 | addr = ops->map_page(dev, page, offset, size, dir, 0); | 257 | addr = ops->map_page(dev, page, offset, size, dir, attrs); |
256 | debug_dma_map_page(dev, page, offset, size, dir, addr, false); | 258 | debug_dma_map_page(dev, page, offset, size, dir, addr, false); |
257 | 259 | ||
258 | return addr; | 260 | return addr; |
259 | } | 261 | } |
260 | 262 | ||
261 | static inline void dma_unmap_page(struct device *dev, dma_addr_t addr, | 263 | static inline void dma_unmap_page_attrs(struct device *dev, |
262 | size_t size, enum dma_data_direction dir) | 264 | dma_addr_t addr, size_t size, |
265 | enum dma_data_direction dir, | ||
266 | unsigned long attrs) | ||
263 | { | 267 | { |
264 | struct dma_map_ops *ops = get_dma_ops(dev); | 268 | struct dma_map_ops *ops = get_dma_ops(dev); |
265 | 269 | ||
266 | BUG_ON(!valid_dma_direction(dir)); | 270 | BUG_ON(!valid_dma_direction(dir)); |
267 | if (ops->unmap_page) | 271 | if (ops->unmap_page) |
268 | ops->unmap_page(dev, addr, size, dir, 0); | 272 | ops->unmap_page(dev, addr, size, dir, attrs); |
269 | debug_dma_unmap_page(dev, addr, size, dir, false); | 273 | debug_dma_unmap_page(dev, addr, size, dir, false); |
270 | } | 274 | } |
271 | 275 | ||
@@ -385,6 +389,8 @@ dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg, | |||
385 | #define dma_unmap_single(d, a, s, r) dma_unmap_single_attrs(d, a, s, r, 0) | 389 | #define dma_unmap_single(d, a, s, r) dma_unmap_single_attrs(d, a, s, r, 0) |
386 | #define dma_map_sg(d, s, n, r) dma_map_sg_attrs(d, s, n, r, 0) | 390 | #define dma_map_sg(d, s, n, r) dma_map_sg_attrs(d, s, n, r, 0) |
387 | #define dma_unmap_sg(d, s, n, r) dma_unmap_sg_attrs(d, s, n, r, 0) | 391 | #define dma_unmap_sg(d, s, n, r) dma_unmap_sg_attrs(d, s, n, r, 0) |
392 | #define dma_map_page(d, p, o, s, r) dma_map_page_attrs(d, p, o, s, r, 0) | ||
393 | #define dma_unmap_page(d, a, s, r) dma_unmap_page_attrs(d, a, s, r, 0) | ||
388 | 394 | ||
389 | extern int dma_common_mmap(struct device *dev, struct vm_area_struct *vma, | 395 | extern int dma_common_mmap(struct device *dev, struct vm_area_struct *vma, |
390 | void *cpu_addr, dma_addr_t dma_addr, size_t size); | 396 | void *cpu_addr, dma_addr_t dma_addr, size_t size); |