mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-18 03:23:53 -04:00
All the cache maintainance is already stubbed out when not enabled, but merging the two allows us to nicely handle the case where cache maintainance is required for some devices, but not others. Signed-off-by: Christoph Hellwig <hch@lst.de> Acked-by: Paul Burton <paul.burton@mips.com> # MIPS parts
67 lines
2.1 KiB
C
67 lines
2.1 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef _LINUX_DMA_NONCOHERENT_H
|
|
#define _LINUX_DMA_NONCOHERENT_H 1
|
|
|
|
#include <linux/dma-mapping.h>
|
|
|
|
#ifdef CONFIG_ARCH_HAS_DMA_COHERENCE_H
|
|
#include <asm/dma-coherence.h>
|
|
#elif defined(CONFIG_ARCH_HAS_SYNC_DMA_FOR_DEVICE) || \
|
|
defined(CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU) || \
|
|
defined(CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU_ALL)
|
|
static inline bool dev_is_dma_coherent(struct device *dev)
|
|
{
|
|
return dev->dma_coherent;
|
|
}
|
|
#else
|
|
static inline bool dev_is_dma_coherent(struct device *dev)
|
|
{
|
|
return true;
|
|
}
|
|
#endif /* CONFIG_ARCH_HAS_DMA_COHERENCE_H */
|
|
|
|
void *arch_dma_alloc(struct device *dev, size_t size, dma_addr_t *dma_handle,
|
|
gfp_t gfp, unsigned long attrs);
|
|
void arch_dma_free(struct device *dev, size_t size, void *cpu_addr,
|
|
dma_addr_t dma_addr, unsigned long attrs);
|
|
int arch_dma_mmap(struct device *dev, struct vm_area_struct *vma,
|
|
void *cpu_addr, dma_addr_t dma_addr, size_t size,
|
|
unsigned long attrs);
|
|
|
|
#ifdef CONFIG_DMA_NONCOHERENT_CACHE_SYNC
|
|
void arch_dma_cache_sync(struct device *dev, void *vaddr, size_t size,
|
|
enum dma_data_direction direction);
|
|
#else
|
|
#define arch_dma_cache_sync NULL
|
|
#endif /* CONFIG_DMA_NONCOHERENT_CACHE_SYNC */
|
|
|
|
#ifdef CONFIG_ARCH_HAS_SYNC_DMA_FOR_DEVICE
|
|
void arch_sync_dma_for_device(struct device *dev, phys_addr_t paddr,
|
|
size_t size, enum dma_data_direction dir);
|
|
#else
|
|
static inline void arch_sync_dma_for_device(struct device *dev,
|
|
phys_addr_t paddr, size_t size, enum dma_data_direction dir)
|
|
{
|
|
}
|
|
#endif /* ARCH_HAS_SYNC_DMA_FOR_DEVICE */
|
|
|
|
#ifdef CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU
|
|
void arch_sync_dma_for_cpu(struct device *dev, phys_addr_t paddr,
|
|
size_t size, enum dma_data_direction dir);
|
|
#else
|
|
static inline void arch_sync_dma_for_cpu(struct device *dev,
|
|
phys_addr_t paddr, size_t size, enum dma_data_direction dir)
|
|
{
|
|
}
|
|
#endif /* ARCH_HAS_SYNC_DMA_FOR_CPU */
|
|
|
|
#ifdef CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU_ALL
|
|
void arch_sync_dma_for_cpu_all(struct device *dev);
|
|
#else
|
|
static inline void arch_sync_dma_for_cpu_all(struct device *dev)
|
|
{
|
|
}
|
|
#endif /* CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU_ALL */
|
|
|
|
#endif /* _LINUX_DMA_NONCOHERENT_H */
|