diff options
| author | Christoph Hellwig <hch@lst.de> | 2016-01-20 18:01:32 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-01-20 20:09:18 -0500 |
| commit | 6f62097583e799040d6d18909b670b1e4dbb614d (patch) | |
| tree | 8af751b0083030217216c7f667fef84bdc7e8335 /arch/blackfin/kernel | |
| parent | a34a517ac96c6910a3a0aab9513035bfbed0020c (diff) | |
blackfin: convert to dma_map_ops
Signed-off-by: Christoph Hellwig <hch@lst.de>
Cc: Steven Miao <realmz6@gmail.com>
Cc: Christian Borntraeger <borntraeger@de.ibm.com>
Cc: Joerg Roedel <jroedel@suse.de>
Cc: Sebastian Ott <sebott@linux.vnet.ibm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch/blackfin/kernel')
| -rw-r--r-- | arch/blackfin/kernel/dma-mapping.c | 52 |
1 files changed, 38 insertions, 14 deletions
diff --git a/arch/blackfin/kernel/dma-mapping.c b/arch/blackfin/kernel/dma-mapping.c index df437e52d9df..771afe6e4264 100644 --- a/arch/blackfin/kernel/dma-mapping.c +++ b/arch/blackfin/kernel/dma-mapping.c | |||
| @@ -78,8 +78,8 @@ static void __free_dma_pages(unsigned long addr, unsigned int pages) | |||
| 78 | spin_unlock_irqrestore(&dma_page_lock, flags); | 78 | spin_unlock_irqrestore(&dma_page_lock, flags); |
| 79 | } | 79 | } |
| 80 | 80 | ||
| 81 | void *dma_alloc_coherent(struct device *dev, size_t size, | 81 | static void *bfin_dma_alloc(struct device *dev, size_t size, |
| 82 | dma_addr_t *dma_handle, gfp_t gfp) | 82 | dma_addr_t *dma_handle, gfp_t gfp, struct dma_attrs *attrs) |
| 83 | { | 83 | { |
| 84 | void *ret; | 84 | void *ret; |
| 85 | 85 | ||
| @@ -92,15 +92,12 @@ void *dma_alloc_coherent(struct device *dev, size_t size, | |||
| 92 | 92 | ||
| 93 | return ret; | 93 | return ret; |
| 94 | } | 94 | } |
| 95 | EXPORT_SYMBOL(dma_alloc_coherent); | ||
| 96 | 95 | ||
| 97 | void | 96 | static void bfin_dma_free(struct device *dev, size_t size, void *vaddr, |
| 98 | dma_free_coherent(struct device *dev, size_t size, void *vaddr, | 97 | dma_addr_t dma_handle, struct dma_attrs *attrs) |
| 99 | dma_addr_t dma_handle) | ||
| 100 | { | 98 | { |
| 101 | __free_dma_pages((unsigned long)vaddr, get_pages(size)); | 99 | __free_dma_pages((unsigned long)vaddr, get_pages(size)); |
| 102 | } | 100 | } |
| 103 | EXPORT_SYMBOL(dma_free_coherent); | ||
| 104 | 101 | ||
| 105 | /* | 102 | /* |
| 106 | * Streaming DMA mappings | 103 | * Streaming DMA mappings |
| @@ -112,9 +109,9 @@ void __dma_sync(dma_addr_t addr, size_t size, | |||
| 112 | } | 109 | } |
| 113 | EXPORT_SYMBOL(__dma_sync); | 110 | EXPORT_SYMBOL(__dma_sync); |
| 114 | 111 | ||
| 115 | int | 112 | static int bfin_dma_map_sg(struct device *dev, struct scatterlist *sg_list, |
| 116 | dma_map_sg(struct device *dev, struct scatterlist *sg_list, int nents, | 113 | int nents, enum dma_data_direction direction, |
| 117 | enum dma_data_direction direction) | 114 | struct dma_attrs *attrs) |
| 118 | { | 115 | { |
| 119 | struct scatterlist *sg; | 116 | struct scatterlist *sg; |
| 120 | int i; | 117 | int i; |
| @@ -126,10 +123,10 @@ dma_map_sg(struct device *dev, struct scatterlist *sg_list, int nents, | |||
| 126 | 123 | ||
| 127 | return nents; | 124 | return nents; |
| 128 | } | 125 | } |
| 129 | EXPORT_SYMBOL(dma_map_sg); | ||
| 130 | 126 | ||
| 131 | void dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg_list, | 127 | static void bfin_dma_sync_sg_for_device(struct device *dev, |
| 132 | int nelems, enum dma_data_direction direction) | 128 | struct scatterlist *sg_list, int nelems, |
| 129 | enum dma_data_direction direction) | ||
| 133 | { | 130 | { |
| 134 | struct scatterlist *sg; | 131 | struct scatterlist *sg; |
| 135 | int i; | 132 | int i; |
| @@ -139,4 +136,31 @@ void dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg_list, | |||
| 139 | __dma_sync(sg_dma_address(sg), sg_dma_len(sg), direction); | 136 | __dma_sync(sg_dma_address(sg), sg_dma_len(sg), direction); |
| 140 | } | 137 | } |
| 141 | } | 138 | } |
| 142 | EXPORT_SYMBOL(dma_sync_sg_for_device); | 139 | |
| 140 | static dma_addr_t bfin_dma_map_page(struct device *dev, struct page *page, | ||
| 141 | unsigned long offset, size_t size, enum dma_data_direction dir, | ||
| 142 | struct dma_attrs *attrs) | ||
| 143 | { | ||
| 144 | dma_addr_t handle = (dma_addr_t)(page_address(page) + offset); | ||
| 145 | |||
| 146 | _dma_sync(handle, size, dir); | ||
| 147 | return handle; | ||
| 148 | } | ||
| 149 | |||
| 150 | static inline void bfin_dma_sync_single_for_device(struct device *dev, | ||
| 151 | dma_addr_t handle, size_t size, enum dma_data_direction dir) | ||
| 152 | { | ||
| 153 | _dma_sync(handle, size, dir); | ||
| 154 | } | ||
| 155 | |||
| 156 | struct dma_map_ops bfin_dma_ops = { | ||
| 157 | .alloc = bfin_dma_alloc, | ||
| 158 | .free = bfin_dma_free, | ||
| 159 | |||
| 160 | .map_page = bfin_dma_map_page, | ||
| 161 | .map_sg = bfin_dma_map_sg, | ||
| 162 | |||
| 163 | .sync_single_for_device = bfin_dma_sync_single_for_device, | ||
| 164 | .sync_sg_for_device = bfin_dma_sync_sg_for_device, | ||
| 165 | }; | ||
| 166 | EXPORT_SYMBOL(bfin_dma_ops); | ||
