dma-mapping.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. /*
  2. * Copyright (C) 2006 Atmel Corporation
  3. *
  4. * SPDX-License-Identifier: GPL-2.0+
  5. */
  6. #ifndef __ASM_AVR32_DMA_MAPPING_H
  7. #define __ASM_AVR32_DMA_MAPPING_H
  8. #include <asm/io.h>
  9. #include <asm/arch/cacheflush.h>
  10. enum dma_data_direction {
  11. DMA_BIDIRECTIONAL = 0,
  12. DMA_TO_DEVICE = 1,
  13. DMA_FROM_DEVICE = 2,
  14. };
  15. static inline void *dma_alloc_coherent(size_t len, unsigned long *handle)
  16. {
  17. *handle = (unsigned long)memalign(ARCH_DMA_MINALIGN, len);
  18. return (void *)*handle;
  19. }
  20. static inline unsigned long dma_map_single(volatile void *vaddr, size_t len,
  21. enum dma_data_direction dir)
  22. {
  23. extern void __bad_dma_data_direction(void);
  24. switch (dir) {
  25. case DMA_BIDIRECTIONAL:
  26. flush_dcache_range((unsigned long)vaddr,
  27. (unsigned long)vaddr + len);
  28. break;
  29. case DMA_TO_DEVICE:
  30. dcache_clean_range(vaddr, len);
  31. break;
  32. case DMA_FROM_DEVICE:
  33. invalidate_dcache_range((unsigned long)vaddr,
  34. (unsigned long)vaddr + len);
  35. break;
  36. default:
  37. /* This will cause a linker error */
  38. __bad_dma_data_direction();
  39. }
  40. return virt_to_phys(vaddr);
  41. }
  42. static inline void dma_unmap_single(volatile void *vaddr, size_t len,
  43. unsigned long paddr)
  44. {
  45. }
  46. #endif /* __ASM_AVR32_DMA_MAPPING_H */