blob: 95ea81ff5e624f7b2d11edf9293afe8b164b0518 [file] [log] [blame]
Wolfgang Denk7b64fef2006-10-24 14:21:16 +02001/*
2 * Copyright (C) 2006 Atmel Corporation
3 *
Wolfgang Denk1a459662013-07-08 09:37:19 +02004 * SPDX-License-Identifier: GPL-2.0+
Wolfgang Denk7b64fef2006-10-24 14:21:16 +02005 */
6#ifndef __ASM_AVR32_DMA_MAPPING_H
7#define __ASM_AVR32_DMA_MAPPING_H
8
9#include <asm/io.h>
Olav Morkend8f2aa32009-01-23 12:56:27 +010010#include <asm/arch/cacheflush.h>
Wolfgang Denk7b64fef2006-10-24 14:21:16 +020011
12enum dma_data_direction {
13 DMA_BIDIRECTIONAL = 0,
14 DMA_TO_DEVICE = 1,
15 DMA_FROM_DEVICE = 2,
16};
17extern void *dma_alloc_coherent(size_t len, unsigned long *handle);
18
19static inline unsigned long dma_map_single(volatile void *vaddr, size_t len,
20 enum dma_data_direction dir)
21{
22 extern void __bad_dma_data_direction(void);
23
24 switch (dir) {
25 case DMA_BIDIRECTIONAL:
26 dcache_flush_range(vaddr, len);
27 break;
28 case DMA_TO_DEVICE:
29 dcache_clean_range(vaddr, len);
30 break;
31 case DMA_FROM_DEVICE:
32 dcache_invalidate_range(vaddr, len);
33 break;
34 default:
35 /* This will cause a linker error */
36 __bad_dma_data_direction();
37 }
38
39 return virt_to_phys(vaddr);
40}
41
42static inline void dma_unmap_single(volatile void *vaddr, size_t len,
43 unsigned long paddr)
44{
45
46}
47
48#endif /* __ASM_AVR32_DMA_MAPPING_H */