2006-10-24 12:21:16 +00:00
|
|
|
/*
|
|
|
|
* Copyright (C) 2006 Atmel Corporation
|
|
|
|
*
|
2013-07-08 07:37:19 +00:00
|
|
|
* SPDX-License-Identifier: GPL-2.0+
|
2006-10-24 12:21:16 +00:00
|
|
|
*/
|
|
|
|
#ifndef __ASM_AVR32_DMA_MAPPING_H
|
|
|
|
#define __ASM_AVR32_DMA_MAPPING_H
|
|
|
|
|
|
|
|
#include <asm/io.h>
|
2009-01-23 11:56:27 +00:00
|
|
|
#include <asm/arch/cacheflush.h>
|
2006-10-24 12:21:16 +00:00
|
|
|
|
|
|
|
enum dma_data_direction {
|
|
|
|
DMA_BIDIRECTIONAL = 0,
|
|
|
|
DMA_TO_DEVICE = 1,
|
|
|
|
DMA_FROM_DEVICE = 2,
|
|
|
|
};
|
2015-02-06 22:06:39 +00:00
|
|
|
|
|
|
|
static inline void *dma_alloc_coherent(size_t len, unsigned long *handle)
|
|
|
|
{
|
|
|
|
*handle = (unsigned long)memalign(ARCH_DMA_MINALIGN, len);
|
|
|
|
return (void *)*handle;
|
|
|
|
}
|
2006-10-24 12:21:16 +00:00
|
|
|
|
|
|
|
static inline unsigned long dma_map_single(volatile void *vaddr, size_t len,
|
|
|
|
enum dma_data_direction dir)
|
|
|
|
{
|
|
|
|
extern void __bad_dma_data_direction(void);
|
|
|
|
|
|
|
|
switch (dir) {
|
|
|
|
case DMA_BIDIRECTIONAL:
|
2014-06-12 20:07:52 +00:00
|
|
|
flush_dcache_range((unsigned long)vaddr,
|
|
|
|
(unsigned long)vaddr + len);
|
2006-10-24 12:21:16 +00:00
|
|
|
break;
|
|
|
|
case DMA_TO_DEVICE:
|
|
|
|
dcache_clean_range(vaddr, len);
|
|
|
|
break;
|
|
|
|
case DMA_FROM_DEVICE:
|
2014-06-12 20:07:52 +00:00
|
|
|
invalidate_dcache_range((unsigned long)vaddr,
|
|
|
|
(unsigned long)vaddr + len);
|
2006-10-24 12:21:16 +00:00
|
|
|
break;
|
|
|
|
default:
|
|
|
|
/* This will cause a linker error */
|
|
|
|
__bad_dma_data_direction();
|
|
|
|
}
|
|
|
|
|
|
|
|
return virt_to_phys(vaddr);
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline void dma_unmap_single(volatile void *vaddr, size_t len,
|
|
|
|
unsigned long paddr)
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif /* __ASM_AVR32_DMA_MAPPING_H */
|