mirror of
https://github.com/torvalds/linux.git
synced 2024-11-25 13:41:51 +00:00
dma-mapping: merge <linux/dma-noncoherent.h> into <linux/dma-map-ops.h>
Move more nitty gritty DMA implementation details into the common internal header. Signed-off-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
19c65c3d30
commit
9f4df96b87
@ -5203,7 +5203,6 @@ F: include/asm-generic/dma-mapping.h
|
||||
F: include/linux/dma-direct.h
|
||||
F: include/linux/dma-mapping.h
|
||||
F: include/linux/dma-map-ops.h
|
||||
F: include/linux/dma-noncoherent.h
|
||||
F: kernel/dma/
|
||||
|
||||
DMA-BUF HEAPS FRAMEWORK
|
||||
|
@ -4,7 +4,6 @@
|
||||
*/
|
||||
|
||||
#include <linux/dma-map-ops.h>
|
||||
#include <linux/dma-noncoherent.h>
|
||||
#include <asm/cache.h>
|
||||
#include <asm/cacheflush.h>
|
||||
|
||||
|
@ -16,7 +16,6 @@
|
||||
#include <linux/device.h>
|
||||
#include <linux/dma-direct.h>
|
||||
#include <linux/dma-map-ops.h>
|
||||
#include <linux/dma-noncoherent.h>
|
||||
#include <linux/highmem.h>
|
||||
#include <linux/memblock.h>
|
||||
#include <linux/slab.h>
|
||||
|
@ -1,7 +1,7 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
#include <linux/cpu.h>
|
||||
#include <linux/dma-direct.h>
|
||||
#include <linux/dma-noncoherent.h>
|
||||
#include <linux/dma-map-ops.h>
|
||||
#include <linux/gfp.h>
|
||||
#include <linux/highmem.h>
|
||||
#include <linux/export.h>
|
||||
|
@ -7,7 +7,6 @@
|
||||
#include <linux/gfp.h>
|
||||
#include <linux/cache.h>
|
||||
#include <linux/dma-map-ops.h>
|
||||
#include <linux/dma-noncoherent.h>
|
||||
#include <linux/dma-iommu.h>
|
||||
#include <xen/xen.h>
|
||||
#include <xen/swiotlb-xen.h>
|
||||
|
@ -15,7 +15,7 @@
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/dma-noncoherent.h>
|
||||
#include <linux/dma-map-ops.h>
|
||||
#include <linux/memblock.h>
|
||||
|
||||
#include <asm/cacheflush.h>
|
||||
|
@ -3,7 +3,6 @@
|
||||
|
||||
#include <linux/cache.h>
|
||||
#include <linux/dma-map-ops.h>
|
||||
#include <linux/dma-noncoherent.h>
|
||||
#include <linux/genalloc.h>
|
||||
#include <linux/highmem.h>
|
||||
#include <linux/io.h>
|
||||
|
@ -5,7 +5,7 @@
|
||||
* Copyright (c) 2010-2012, The Linux Foundation. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <linux/dma-noncoherent.h>
|
||||
#include <linux/dma-map-ops.h>
|
||||
#include <linux/memblock.h>
|
||||
#include <linux/genalloc.h>
|
||||
#include <linux/module.h>
|
||||
|
@ -8,7 +8,7 @@
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
#include <linux/dma-noncoherent.h>
|
||||
#include <linux/dma-map-ops.h>
|
||||
#include <linux/dmar.h>
|
||||
#include <linux/efi.h>
|
||||
#include <linux/elf.h>
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
#undef DEBUG
|
||||
|
||||
#include <linux/dma-noncoherent.h>
|
||||
#include <linux/dma-map-ops.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
@ -8,7 +8,7 @@
|
||||
*/
|
||||
|
||||
#include <linux/device.h>
|
||||
#include <linux/dma-noncoherent.h>
|
||||
#include <linux/dma-map-ops.h>
|
||||
#include <linux/gfp.h>
|
||||
#include <linux/export.h>
|
||||
#include <linux/bug.h>
|
||||
|
@ -11,7 +11,7 @@
|
||||
#include <linux/types.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/dma-noncoherent.h>
|
||||
#include <linux/dma-map-ops.h>
|
||||
#include <asm/cpuinfo.h>
|
||||
#include <asm/cacheflush.h>
|
||||
|
||||
|
@ -17,7 +17,6 @@
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/gfp.h>
|
||||
#include <linux/dma-map-ops.h>
|
||||
#include <linux/dma-noncoherent.h>
|
||||
#include <asm/mipsregs.h>
|
||||
#include <asm/jazz.h>
|
||||
#include <asm/io.h>
|
||||
|
@ -6,7 +6,6 @@
|
||||
*/
|
||||
#include <linux/dma-direct.h>
|
||||
#include <linux/dma-map-ops.h>
|
||||
#include <linux/dma-noncoherent.h>
|
||||
#include <linux/highmem.h>
|
||||
|
||||
#include <asm/cache.h>
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/dma-noncoherent.h>
|
||||
#include <linux/dma-map-ops.h>
|
||||
#include <linux/cache.h>
|
||||
#include <linux/highmem.h>
|
||||
#include <asm/cacheflush.h>
|
||||
|
@ -13,7 +13,7 @@
|
||||
* DMA mapping callbacks...
|
||||
*/
|
||||
|
||||
#include <linux/dma-noncoherent.h>
|
||||
#include <linux/dma-map-ops.h>
|
||||
#include <linux/pagewalk.h>
|
||||
|
||||
#include <asm/cpuinfo.h>
|
||||
|
@ -26,7 +26,7 @@
|
||||
#include <linux/string.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/dma-direct.h>
|
||||
#include <linux/dma-noncoherent.h>
|
||||
#include <linux/dma-map-ops.h>
|
||||
|
||||
#include <asm/cacheflush.h>
|
||||
#include <asm/dma.h> /* for DMA_CHUNK_SIZE */
|
||||
|
@ -11,7 +11,7 @@
|
||||
#include <linux/types.h>
|
||||
#include <linux/highmem.h>
|
||||
#include <linux/dma-direct.h>
|
||||
#include <linux/dma-noncoherent.h>
|
||||
#include <linux/dma-map-ops.h>
|
||||
|
||||
#include <asm/tlbflush.h>
|
||||
#include <asm/dma.h>
|
||||
|
@ -3,7 +3,7 @@
|
||||
* Copyright (C) 2004 - 2007 Paul Mundt
|
||||
*/
|
||||
#include <linux/mm.h>
|
||||
#include <linux/dma-noncoherent.h>
|
||||
#include <linux/dma-map-ops.h>
|
||||
#include <asm/cacheflush.h>
|
||||
#include <asm/addrspace.h>
|
||||
|
||||
|
@ -38,7 +38,7 @@
|
||||
#include <linux/proc_fs.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/scatterlist.h>
|
||||
#include <linux/dma-noncoherent.h>
|
||||
#include <linux/dma-map-ops.h>
|
||||
#include <linux/of_device.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
|
@ -12,7 +12,6 @@
|
||||
*/
|
||||
|
||||
#include <linux/dma-map-ops.h>
|
||||
#include <linux/dma-noncoherent.h>
|
||||
#include <linux/dma-direct.h>
|
||||
#include <linux/gfp.h>
|
||||
#include <linux/highmem.h>
|
||||
|
@ -12,7 +12,6 @@
|
||||
#include <linux/device.h>
|
||||
#include <linux/dma-map-ops.h>
|
||||
#include <linux/dma-iommu.h>
|
||||
#include <linux/dma-noncoherent.h>
|
||||
#include <linux/gfp.h>
|
||||
#include <linux/huge_mm.h>
|
||||
#include <linux/iommu.h>
|
||||
|
@ -27,9 +27,8 @@
|
||||
#define pr_fmt(fmt) "xen:" KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/memblock.h>
|
||||
#include <linux/dma-map-ops.h>
|
||||
#include <linux/dma-direct.h>
|
||||
#include <linux/dma-noncoherent.h>
|
||||
#include <linux/dma-map-ops.h>
|
||||
#include <linux/export.h>
|
||||
#include <xen/swiotlb-xen.h>
|
||||
#include <xen/page.h>
|
||||
|
@ -7,7 +7,7 @@
|
||||
#define _LINUX_DMA_DIRECT_H 1
|
||||
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/dma-noncoherent.h>
|
||||
#include <linux/dma-map-ops.h>
|
||||
#include <linux/memblock.h> /* for min_low_pfn */
|
||||
#include <linux/mem_encrypt.h>
|
||||
#include <linux/swiotlb.h>
|
||||
|
@ -7,6 +7,7 @@
|
||||
#define _LINUX_DMA_MAP_OPS_H
|
||||
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/pgtable.h>
|
||||
|
||||
struct cma;
|
||||
|
||||
@ -202,6 +203,107 @@ static inline int dma_mmap_from_global_coherent(struct vm_area_struct *vma,
|
||||
}
|
||||
#endif /* CONFIG_DMA_DECLARE_COHERENT */
|
||||
|
||||
#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 */
|
||||
|
||||
/*
|
||||
* Check if an allocation needs to be marked uncached to be coherent.
|
||||
*/
|
||||
static __always_inline bool dma_alloc_need_uncached(struct device *dev,
|
||||
unsigned long attrs)
|
||||
{
|
||||
if (dev_is_dma_coherent(dev))
|
||||
return false;
|
||||
if (attrs & DMA_ATTR_NO_KERNEL_MAPPING)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
#ifdef CONFIG_MMU
|
||||
/*
|
||||
* Page protection so that devices that can't snoop CPU caches can use the
|
||||
* memory coherently. We default to pgprot_noncached which is usually used
|
||||
* for ioremap as a safe bet, but architectures can override this with less
|
||||
* strict semantics if possible.
|
||||
*/
|
||||
#ifndef pgprot_dmacoherent
|
||||
#define pgprot_dmacoherent(prot) pgprot_noncached(prot)
|
||||
#endif
|
||||
|
||||
pgprot_t dma_pgprot(struct device *dev, pgprot_t prot, unsigned long attrs);
|
||||
#else
|
||||
static inline pgprot_t dma_pgprot(struct device *dev, pgprot_t prot,
|
||||
unsigned long attrs)
|
||||
{
|
||||
return prot; /* no protection bits supported without page tables */
|
||||
}
|
||||
#endif /* CONFIG_MMU */
|
||||
|
||||
#ifdef CONFIG_ARCH_HAS_SYNC_DMA_FOR_DEVICE
|
||||
void arch_sync_dma_for_device(phys_addr_t paddr, size_t size,
|
||||
enum dma_data_direction dir);
|
||||
#else
|
||||
static inline void arch_sync_dma_for_device(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(phys_addr_t paddr, size_t size,
|
||||
enum dma_data_direction dir);
|
||||
#else
|
||||
static inline void arch_sync_dma_for_cpu(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(void);
|
||||
#else
|
||||
static inline void arch_sync_dma_for_cpu_all(void)
|
||||
{
|
||||
}
|
||||
#endif /* CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU_ALL */
|
||||
|
||||
#ifdef CONFIG_ARCH_HAS_DMA_PREP_COHERENT
|
||||
void arch_dma_prep_coherent(struct page *page, size_t size);
|
||||
#else
|
||||
static inline void arch_dma_prep_coherent(struct page *page, size_t size)
|
||||
{
|
||||
}
|
||||
#endif /* CONFIG_ARCH_HAS_DMA_PREP_COHERENT */
|
||||
|
||||
#ifdef CONFIG_ARCH_HAS_DMA_MARK_CLEAN
|
||||
void arch_dma_mark_clean(phys_addr_t paddr, size_t size);
|
||||
#else
|
||||
static inline void arch_dma_mark_clean(phys_addr_t paddr, size_t size)
|
||||
{
|
||||
}
|
||||
#endif /* ARCH_HAS_DMA_MARK_CLEAN */
|
||||
|
||||
void *arch_dma_set_uncached(void *addr, size_t size);
|
||||
void arch_dma_clear_uncached(void *addr, size_t size);
|
||||
|
||||
#ifdef CONFIG_ARCH_HAS_SETUP_DMA_OPS
|
||||
void arch_setup_dma_ops(struct device *dev, u64 dma_base, u64 size,
|
||||
const struct iommu_ops *iommu, bool coherent);
|
||||
|
@ -1,109 +0,0 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#ifndef _LINUX_DMA_NONCOHERENT_H
|
||||
#define _LINUX_DMA_NONCOHERENT_H 1
|
||||
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/pgtable.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 */
|
||||
|
||||
/*
|
||||
* Check if an allocation needs to be marked uncached to be coherent.
|
||||
*/
|
||||
static __always_inline bool dma_alloc_need_uncached(struct device *dev,
|
||||
unsigned long attrs)
|
||||
{
|
||||
if (dev_is_dma_coherent(dev))
|
||||
return false;
|
||||
if (attrs & DMA_ATTR_NO_KERNEL_MAPPING)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
#ifdef CONFIG_MMU
|
||||
/*
|
||||
* Page protection so that devices that can't snoop CPU caches can use the
|
||||
* memory coherently. We default to pgprot_noncached which is usually used
|
||||
* for ioremap as a safe bet, but architectures can override this with less
|
||||
* strict semantics if possible.
|
||||
*/
|
||||
#ifndef pgprot_dmacoherent
|
||||
#define pgprot_dmacoherent(prot) pgprot_noncached(prot)
|
||||
#endif
|
||||
|
||||
pgprot_t dma_pgprot(struct device *dev, pgprot_t prot, unsigned long attrs);
|
||||
#else
|
||||
static inline pgprot_t dma_pgprot(struct device *dev, pgprot_t prot,
|
||||
unsigned long attrs)
|
||||
{
|
||||
return prot; /* no protection bits supported without page tables */
|
||||
}
|
||||
#endif /* CONFIG_MMU */
|
||||
|
||||
#ifdef CONFIG_ARCH_HAS_SYNC_DMA_FOR_DEVICE
|
||||
void arch_sync_dma_for_device(phys_addr_t paddr, size_t size,
|
||||
enum dma_data_direction dir);
|
||||
#else
|
||||
static inline void arch_sync_dma_for_device(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(phys_addr_t paddr, size_t size,
|
||||
enum dma_data_direction dir);
|
||||
#else
|
||||
static inline void arch_sync_dma_for_cpu(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(void);
|
||||
#else
|
||||
static inline void arch_sync_dma_for_cpu_all(void)
|
||||
{
|
||||
}
|
||||
#endif /* CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU_ALL */
|
||||
|
||||
#ifdef CONFIG_ARCH_HAS_DMA_PREP_COHERENT
|
||||
void arch_dma_prep_coherent(struct page *page, size_t size);
|
||||
#else
|
||||
static inline void arch_dma_prep_coherent(struct page *page, size_t size)
|
||||
{
|
||||
}
|
||||
#endif /* CONFIG_ARCH_HAS_DMA_PREP_COHERENT */
|
||||
|
||||
#ifdef CONFIG_ARCH_HAS_DMA_MARK_CLEAN
|
||||
void arch_dma_mark_clean(phys_addr_t paddr, size_t size);
|
||||
#else
|
||||
static inline void arch_dma_mark_clean(phys_addr_t paddr, size_t size)
|
||||
{
|
||||
}
|
||||
#endif /* ARCH_HAS_DMA_MARK_CLEAN */
|
||||
|
||||
void *arch_dma_set_uncached(void *addr, size_t size);
|
||||
void arch_dma_clear_uncached(void *addr, size_t size);
|
||||
|
||||
#endif /* _LINUX_DMA_NONCOHERENT_H */
|
@ -4,7 +4,6 @@
|
||||
* the allocated memory contains normal pages in the direct kernel mapping.
|
||||
*/
|
||||
#include <linux/dma-map-ops.h>
|
||||
#include <linux/dma-noncoherent.h>
|
||||
|
||||
/*
|
||||
* Create scatter-list for the already allocated DMA buffer.
|
||||
|
@ -7,7 +7,6 @@
|
||||
#include <linux/debugfs.h>
|
||||
#include <linux/dma-map-ops.h>
|
||||
#include <linux/dma-direct.h>
|
||||
#include <linux/dma-noncoherent.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/genalloc.h>
|
||||
#include <linux/set_memory.h>
|
||||
|
@ -22,7 +22,7 @@
|
||||
|
||||
#include <linux/cache.h>
|
||||
#include <linux/dma-direct.h>
|
||||
#include <linux/dma-noncoherent.h>
|
||||
#include <linux/dma-map-ops.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/export.h>
|
||||
#include <linux/spinlock.h>
|
||||
|
Loading…
Reference in New Issue
Block a user