blob: a0aa00cc909d84397439613025bb8fcfee6cad49 [file] [log] [blame]
Christoph Hellwig782e6762018-04-16 15:24:51 +02001/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef _LINUX_DMA_NONCOHERENT_H
3#define _LINUX_DMA_NONCOHERENT_H 1
4
5#include <linux/dma-mapping.h>
6
7void *arch_dma_alloc(struct device *dev, size_t size, dma_addr_t *dma_handle,
8 gfp_t gfp, unsigned long attrs);
9void arch_dma_free(struct device *dev, size_t size, void *cpu_addr,
10 dma_addr_t dma_addr, unsigned long attrs);
11
12#ifdef CONFIG_DMA_NONCOHERENT_MMAP
13int arch_dma_mmap(struct device *dev, struct vm_area_struct *vma,
14 void *cpu_addr, dma_addr_t dma_addr, size_t size,
15 unsigned long attrs);
16#else
17#define arch_dma_mmap NULL
18#endif /* CONFIG_DMA_NONCOHERENT_MMAP */
19
20#ifdef CONFIG_DMA_NONCOHERENT_CACHE_SYNC
21void arch_dma_cache_sync(struct device *dev, void *vaddr, size_t size,
22 enum dma_data_direction direction);
23#else
24#define arch_dma_cache_sync NULL
25#endif /* CONFIG_DMA_NONCOHERENT_CACHE_SYNC */
26
27#ifdef CONFIG_ARCH_HAS_SYNC_DMA_FOR_DEVICE
28void arch_sync_dma_for_device(struct device *dev, phys_addr_t paddr,
29 size_t size, enum dma_data_direction dir);
30#else
31static inline void arch_sync_dma_for_device(struct device *dev,
32 phys_addr_t paddr, size_t size, enum dma_data_direction dir)
33{
34}
35#endif /* ARCH_HAS_SYNC_DMA_FOR_DEVICE */
36
37#ifdef CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU
38void arch_sync_dma_for_cpu(struct device *dev, phys_addr_t paddr,
39 size_t size, enum dma_data_direction dir);
40#else
41static inline void arch_sync_dma_for_cpu(struct device *dev,
42 phys_addr_t paddr, size_t size, enum dma_data_direction dir)
43{
44}
45#endif /* ARCH_HAS_SYNC_DMA_FOR_CPU */
46
Christoph Hellwigfaef8772018-06-15 13:08:51 +020047#ifdef CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU_ALL
48void arch_sync_dma_for_cpu_all(struct device *dev);
49#else
50static inline void arch_sync_dma_for_cpu_all(struct device *dev)
51{
52}
53#endif /* CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU_ALL */
54
Christoph Hellwig782e6762018-04-16 15:24:51 +020055#endif /* _LINUX_DMA_NONCOHERENT_H */