Loading arch/arm/common/dmabounce.c +20 −18 Original line number Diff line number Diff line Loading @@ -321,8 +321,7 @@ unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size, } } static inline void sync_single(struct device *dev, dma_addr_t dma_addr, size_t size, static int sync_single(struct device *dev, dma_addr_t dma_addr, size_t size, enum dma_data_direction dir) { struct dmabounce_device_info *device_info = dev->archdata.dmabounce; Loading Loading @@ -383,8 +382,9 @@ sync_single(struct device *dev, dma_addr_t dma_addr, size_t size, * No need to sync the safe buffer - it was allocated * via the coherent allocators. */ return 0; } else { dma_cache_maint(dma_to_virt(dev, dma_addr), size, dir); return 1; } } Loading Loading @@ -474,25 +474,29 @@ dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nents, } } void dma_sync_single_for_cpu(struct device *dev, dma_addr_t dma_addr, size_t size, void dma_sync_single_range_for_cpu(struct device *dev, dma_addr_t dma_addr, unsigned long offset, size_t size, enum dma_data_direction dir) { dev_dbg(dev, "%s(ptr=%p,size=%d,dir=%x)\n", __func__, (void *) dma_addr, size, dir); dev_dbg(dev, "%s(dma=%#x,off=%#lx,size=%zx,dir=%x)\n", __func__, dma_addr, offset, size, dir); sync_single(dev, dma_addr, size, dir); if (sync_single(dev, dma_addr, offset + size, dir)) dma_cache_maint(dma_to_virt(dev, dma_addr) + offset, size, dir); } EXPORT_SYMBOL(dma_sync_single_range_for_cpu); void dma_sync_single_for_device(struct device *dev, dma_addr_t dma_addr, size_t size, void dma_sync_single_range_for_device(struct device *dev, dma_addr_t dma_addr, unsigned long offset, size_t size, enum dma_data_direction dir) { dev_dbg(dev, "%s(ptr=%p,size=%d,dir=%x)\n", __func__, (void *) dma_addr, size, dir); dev_dbg(dev, "%s(dma=%#x,off=%#lx,size=%zx,dir=%x)\n", __func__, dma_addr, offset, size, dir); sync_single(dev, dma_addr, size, dir); if (sync_single(dev, dma_addr, offset + size, dir)) dma_cache_maint(dma_to_virt(dev, dma_addr) + offset, size, dir); } EXPORT_SYMBOL(dma_sync_single_range_for_device); void dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, int nents, Loading Loading @@ -644,8 +648,6 @@ EXPORT_SYMBOL(dma_map_single); EXPORT_SYMBOL(dma_unmap_single); EXPORT_SYMBOL(dma_map_sg); EXPORT_SYMBOL(dma_unmap_sg); EXPORT_SYMBOL(dma_sync_single_for_cpu); EXPORT_SYMBOL(dma_sync_single_for_device); EXPORT_SYMBOL(dma_sync_sg_for_cpu); EXPORT_SYMBOL(dma_sync_sg_for_device); EXPORT_SYMBOL(dmabounce_register_dev); Loading arch/arm/include/asm/dma-mapping.h +28 −11 Original line number Diff line number Diff line Loading @@ -351,11 +351,12 @@ extern void dma_unmap_sg(struct device *, struct scatterlist *, int, enum dma_da /** * dma_sync_single_for_cpu * dma_sync_single_range_for_cpu * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices * @handle: DMA address of buffer * @size: size of buffer to map * @dir: DMA transfer direction * @offset: offset of region to start sync * @size: size of region to sync * @dir: DMA transfer direction (same as passed to dma_map_single) * * Make physical memory consistent for a single streaming mode DMA * translation after a transfer. Loading @@ -369,25 +370,41 @@ extern void dma_unmap_sg(struct device *, struct scatterlist *, int, enum dma_da */ #ifndef CONFIG_DMABOUNCE static inline void dma_sync_single_for_cpu(struct device *dev, dma_addr_t handle, size_t size, dma_sync_single_range_for_cpu(struct device *dev, dma_addr_t handle, unsigned long offset, size_t size, enum dma_data_direction dir) { if (!arch_is_coherent()) dma_cache_maint(dma_to_virt(dev, handle), size, dir); dma_cache_maint(dma_to_virt(dev, handle) + offset, size, dir); } static inline void dma_sync_single_for_device(struct device *dev, dma_addr_t handle, size_t size, dma_sync_single_range_for_device(struct device *dev, dma_addr_t handle, unsigned long offset, size_t size, enum dma_data_direction dir) { if (!arch_is_coherent()) dma_cache_maint(dma_to_virt(dev, handle), size, dir); dma_cache_maint(dma_to_virt(dev, handle) + offset, size, dir); } #else extern void dma_sync_single_for_cpu(struct device*, dma_addr_t, size_t, enum dma_data_direction); extern void dma_sync_single_for_device(struct device*, dma_addr_t, size_t, enum dma_data_direction); extern void dma_sync_single_range_for_cpu(struct device *, dma_addr_t, unsigned long, size_t, enum dma_data_direction); extern void dma_sync_single_range_for_device(struct device *, dma_addr_t, unsigned long, size_t, enum dma_data_direction); #endif static inline void dma_sync_single_for_cpu(struct device *dev, dma_addr_t handle, size_t size, enum dma_data_direction dir) { dma_sync_single_range_for_cpu(dev, handle, 0, size, dir); } static inline void dma_sync_single_for_device(struct device *dev, dma_addr_t handle, size_t size, enum dma_data_direction dir) { dma_sync_single_range_for_device(dev, handle, 0, size, dir); } /** * dma_sync_sg_for_cpu Loading Loading
arch/arm/common/dmabounce.c +20 −18 Original line number Diff line number Diff line Loading @@ -321,8 +321,7 @@ unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size, } } static inline void sync_single(struct device *dev, dma_addr_t dma_addr, size_t size, static int sync_single(struct device *dev, dma_addr_t dma_addr, size_t size, enum dma_data_direction dir) { struct dmabounce_device_info *device_info = dev->archdata.dmabounce; Loading Loading @@ -383,8 +382,9 @@ sync_single(struct device *dev, dma_addr_t dma_addr, size_t size, * No need to sync the safe buffer - it was allocated * via the coherent allocators. */ return 0; } else { dma_cache_maint(dma_to_virt(dev, dma_addr), size, dir); return 1; } } Loading Loading @@ -474,25 +474,29 @@ dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nents, } } void dma_sync_single_for_cpu(struct device *dev, dma_addr_t dma_addr, size_t size, void dma_sync_single_range_for_cpu(struct device *dev, dma_addr_t dma_addr, unsigned long offset, size_t size, enum dma_data_direction dir) { dev_dbg(dev, "%s(ptr=%p,size=%d,dir=%x)\n", __func__, (void *) dma_addr, size, dir); dev_dbg(dev, "%s(dma=%#x,off=%#lx,size=%zx,dir=%x)\n", __func__, dma_addr, offset, size, dir); sync_single(dev, dma_addr, size, dir); if (sync_single(dev, dma_addr, offset + size, dir)) dma_cache_maint(dma_to_virt(dev, dma_addr) + offset, size, dir); } EXPORT_SYMBOL(dma_sync_single_range_for_cpu); void dma_sync_single_for_device(struct device *dev, dma_addr_t dma_addr, size_t size, void dma_sync_single_range_for_device(struct device *dev, dma_addr_t dma_addr, unsigned long offset, size_t size, enum dma_data_direction dir) { dev_dbg(dev, "%s(ptr=%p,size=%d,dir=%x)\n", __func__, (void *) dma_addr, size, dir); dev_dbg(dev, "%s(dma=%#x,off=%#lx,size=%zx,dir=%x)\n", __func__, dma_addr, offset, size, dir); sync_single(dev, dma_addr, size, dir); if (sync_single(dev, dma_addr, offset + size, dir)) dma_cache_maint(dma_to_virt(dev, dma_addr) + offset, size, dir); } EXPORT_SYMBOL(dma_sync_single_range_for_device); void dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, int nents, Loading Loading @@ -644,8 +648,6 @@ EXPORT_SYMBOL(dma_map_single); EXPORT_SYMBOL(dma_unmap_single); EXPORT_SYMBOL(dma_map_sg); EXPORT_SYMBOL(dma_unmap_sg); EXPORT_SYMBOL(dma_sync_single_for_cpu); EXPORT_SYMBOL(dma_sync_single_for_device); EXPORT_SYMBOL(dma_sync_sg_for_cpu); EXPORT_SYMBOL(dma_sync_sg_for_device); EXPORT_SYMBOL(dmabounce_register_dev); Loading
arch/arm/include/asm/dma-mapping.h +28 −11 Original line number Diff line number Diff line Loading @@ -351,11 +351,12 @@ extern void dma_unmap_sg(struct device *, struct scatterlist *, int, enum dma_da /** * dma_sync_single_for_cpu * dma_sync_single_range_for_cpu * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices * @handle: DMA address of buffer * @size: size of buffer to map * @dir: DMA transfer direction * @offset: offset of region to start sync * @size: size of region to sync * @dir: DMA transfer direction (same as passed to dma_map_single) * * Make physical memory consistent for a single streaming mode DMA * translation after a transfer. Loading @@ -369,25 +370,41 @@ extern void dma_unmap_sg(struct device *, struct scatterlist *, int, enum dma_da */ #ifndef CONFIG_DMABOUNCE static inline void dma_sync_single_for_cpu(struct device *dev, dma_addr_t handle, size_t size, dma_sync_single_range_for_cpu(struct device *dev, dma_addr_t handle, unsigned long offset, size_t size, enum dma_data_direction dir) { if (!arch_is_coherent()) dma_cache_maint(dma_to_virt(dev, handle), size, dir); dma_cache_maint(dma_to_virt(dev, handle) + offset, size, dir); } static inline void dma_sync_single_for_device(struct device *dev, dma_addr_t handle, size_t size, dma_sync_single_range_for_device(struct device *dev, dma_addr_t handle, unsigned long offset, size_t size, enum dma_data_direction dir) { if (!arch_is_coherent()) dma_cache_maint(dma_to_virt(dev, handle), size, dir); dma_cache_maint(dma_to_virt(dev, handle) + offset, size, dir); } #else extern void dma_sync_single_for_cpu(struct device*, dma_addr_t, size_t, enum dma_data_direction); extern void dma_sync_single_for_device(struct device*, dma_addr_t, size_t, enum dma_data_direction); extern void dma_sync_single_range_for_cpu(struct device *, dma_addr_t, unsigned long, size_t, enum dma_data_direction); extern void dma_sync_single_range_for_device(struct device *, dma_addr_t, unsigned long, size_t, enum dma_data_direction); #endif static inline void dma_sync_single_for_cpu(struct device *dev, dma_addr_t handle, size_t size, enum dma_data_direction dir) { dma_sync_single_range_for_cpu(dev, handle, 0, size, dir); } static inline void dma_sync_single_for_device(struct device *dev, dma_addr_t handle, size_t size, enum dma_data_direction dir) { dma_sync_single_range_for_device(dev, handle, 0, size, dir); } /** * dma_sync_sg_for_cpu Loading