
Currently there are three valid implementations of dma_mapping_error: (1) call ->mapping_error (2) check for a hardcoded error code (3) always return 0 This patch provides a common implementation that calls ->mapping_error if present, then checks for DMA_ERROR_CODE if defined or otherwise returns 0. [jcmvbkbc@gmail.com: fix xtensa] Signed-off-by: Christoph Hellwig <hch@lst.de> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Russell King <linux@arm.linux.org.uk> Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Will Deacon <will.deacon@arm.com> Cc: Yoshinori Sato <ysato@users.sourceforge.jp> Cc: Michal Simek <monstr@monstr.eu> Cc: Jonas Bonn <jonas@southpole.se> Cc: Chris Metcalf <cmetcalf@ezchip.com> Cc: Guan Xuetao <gxt@mprc.pku.edu.cn> Cc: Ralf Baechle <ralf@linux-mips.org> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Ingo Molnar <mingo@elte.hu> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: Andy Shevchenko <andy.shevchenko@gmail.com> Signed-off-by: Max Filippov <jcmvbkbc@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
55 lines
1.2 KiB
C
55 lines
1.2 KiB
C
#ifndef ___ASM_SPARC_DMA_MAPPING_H
|
|
#define ___ASM_SPARC_DMA_MAPPING_H
|
|
|
|
#include <linux/scatterlist.h>
|
|
#include <linux/mm.h>
|
|
#include <linux/dma-debug.h>
|
|
|
|
#define DMA_ERROR_CODE (~(dma_addr_t)0x0)
|
|
|
|
int dma_supported(struct device *dev, u64 mask);
|
|
|
|
static inline void dma_cache_sync(struct device *dev, void *vaddr, size_t size,
|
|
enum dma_data_direction dir)
|
|
{
|
|
/* Since dma_{alloc,free}_noncoherent() allocated coherent memory, this
|
|
* routine can be a nop.
|
|
*/
|
|
}
|
|
|
|
extern struct dma_map_ops *dma_ops;
|
|
extern struct dma_map_ops *leon_dma_ops;
|
|
extern struct dma_map_ops pci32_dma_ops;
|
|
|
|
extern struct bus_type pci_bus_type;
|
|
|
|
static inline struct dma_map_ops *get_dma_ops(struct device *dev)
|
|
{
|
|
#ifdef CONFIG_SPARC_LEON
|
|
if (sparc_cpu_model == sparc_leon)
|
|
return leon_dma_ops;
|
|
#endif
|
|
#if defined(CONFIG_SPARC32) && defined(CONFIG_PCI)
|
|
if (dev->bus == &pci_bus_type)
|
|
return &pci32_dma_ops;
|
|
#endif
|
|
return dma_ops;
|
|
}
|
|
|
|
#include <asm-generic/dma-mapping-common.h>
|
|
|
|
static inline int dma_set_mask(struct device *dev, u64 mask)
|
|
{
|
|
#ifdef CONFIG_PCI
|
|
if (dev->bus == &pci_bus_type) {
|
|
if (!dev->dma_mask || !dma_supported(dev, mask))
|
|
return -EINVAL;
|
|
*dev->dma_mask = mask;
|
|
return 0;
|
|
}
|
|
#endif
|
|
return -EINVAL;
|
|
}
|
|
|
|
#endif
|