diff options
author | Christoph Hellwig <hch@lst.de> | 2018-04-16 09:24:51 -0400 |
---|---|---|
committer | Christoph Hellwig <hch@lst.de> | 2018-05-19 02:46:12 -0400 |
commit | 782e6769c0df744e773dc2acff71c974b3bba4e9 (patch) | |
tree | 4b7f513da50a3bce1cca7a28949258642e9c8ab7 /lib/dma-direct.c | |
parent | 35ddb69cd223eea5b1c68af753ed014208b6144e (diff) |
dma-mapping: provide a generic dma-noncoherent implementation
Add a new dma_map_ops implementation that uses dma-direct for the
address mapping of streaming mappings, and which requires arch-specific
implemenations of coherent allocate/free.
Architectures have to provide flushing helpers to ownership trasnfers
to the device and/or CPU, and can provide optional implementations of
the coherent mmap functionality, and the cache_flush routines for
non-coherent long term allocations.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Tested-by: Alexey Brodkin <abrodkin@synopsys.com>
Acked-by: Vineet Gupta <vgupta@synopsys.com>
Diffstat (limited to 'lib/dma-direct.c')
-rw-r--r-- | lib/dma-direct.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/lib/dma-direct.c b/lib/dma-direct.c index df9e726e0712..b824eb218782 100644 --- a/lib/dma-direct.c +++ b/lib/dma-direct.c | |||
@@ -128,7 +128,7 @@ void dma_direct_free(struct device *dev, size_t size, void *cpu_addr, | |||
128 | free_pages((unsigned long)cpu_addr, page_order); | 128 | free_pages((unsigned long)cpu_addr, page_order); |
129 | } | 129 | } |
130 | 130 | ||
131 | static dma_addr_t dma_direct_map_page(struct device *dev, struct page *page, | 131 | dma_addr_t dma_direct_map_page(struct device *dev, struct page *page, |
132 | unsigned long offset, size_t size, enum dma_data_direction dir, | 132 | unsigned long offset, size_t size, enum dma_data_direction dir, |
133 | unsigned long attrs) | 133 | unsigned long attrs) |
134 | { | 134 | { |
@@ -139,8 +139,8 @@ static dma_addr_t dma_direct_map_page(struct device *dev, struct page *page, | |||
139 | return dma_addr; | 139 | return dma_addr; |
140 | } | 140 | } |
141 | 141 | ||
142 | static int dma_direct_map_sg(struct device *dev, struct scatterlist *sgl, | 142 | int dma_direct_map_sg(struct device *dev, struct scatterlist *sgl, int nents, |
143 | int nents, enum dma_data_direction dir, unsigned long attrs) | 143 | enum dma_data_direction dir, unsigned long attrs) |
144 | { | 144 | { |
145 | int i; | 145 | int i; |
146 | struct scatterlist *sg; | 146 | struct scatterlist *sg; |
@@ -175,7 +175,7 @@ int dma_direct_supported(struct device *dev, u64 mask) | |||
175 | return 1; | 175 | return 1; |
176 | } | 176 | } |
177 | 177 | ||
178 | static int dma_direct_mapping_error(struct device *dev, dma_addr_t dma_addr) | 178 | int dma_direct_mapping_error(struct device *dev, dma_addr_t dma_addr) |
179 | { | 179 | { |
180 | return dma_addr == DIRECT_MAPPING_ERROR; | 180 | return dma_addr == DIRECT_MAPPING_ERROR; |
181 | } | 181 | } |