dma-mapping.h 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  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. extern void *dma_alloc_coherent(size_t len, unsigned long *handle);
  16. static inline unsigned long dma_map_single(volatile void *vaddr, size_t len,
  17. enum dma_data_direction dir)
  18. {
  19. extern void __bad_dma_data_direction(void);
  20. switch (dir) {
  21. case DMA_BIDIRECTIONAL:
  22. flush_dcache_range((unsigned long)vaddr,
  23. (unsigned long)vaddr + len);
  24. break;
  25. case DMA_TO_DEVICE:
  26. dcache_clean_range(vaddr, len);
  27. break;
  28. case DMA_FROM_DEVICE:
  29. invalidate_dcache_range((unsigned long)vaddr,
  30. (unsigned long)vaddr + len);
  31. break;
  32. default:
  33. /* This will cause a linker error */
  34. __bad_dma_data_direction();
  35. }
  36. return virt_to_phys(vaddr);
  37. }
  38. static inline void dma_unmap_single(volatile void *vaddr, size_t len,
  39. unsigned long paddr)
  40. {
  41. }
  42. #endif /* __ASM_AVR32_DMA_MAPPING_H */