dma.h 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #ifndef _DMA_H
  2. #define _DMA_H
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6. #define DMA_INT_TC (1 << 0)
  7. #define DMA_INT_ERR (1 << 1)
  8. enum DMA_HW_HS_MAP{
  9. SPI0_RX = 0,
  10. SPI0_TX,
  11. SPI1_RX,
  12. SPI1_TX,
  13. I2C0_RX,
  14. I2C0_TX,
  15. I2C1_RX,
  16. I2C1_TX,
  17. UART0_RX,
  18. UART0_TX,
  19. UART1_RX,
  20. UART1_TX,
  21. UART2_RX,
  22. UART2_TX,
  23. UART3_RX,
  24. UART3_TX,
  25. I2S_RX,
  26. I2S_TX,
  27. I2S1_RX,
  28. I2S1_TX,
  29. SPI2_RX,
  30. SPI2_TX,
  31. };
  32. enum dma_transfer_direction {
  33. DMA_MEM_TO_MEM,
  34. DMA_MEM_TO_DEV,
  35. DMA_DEV_TO_MEM,
  36. DMA_DEV_TO_DEV,
  37. DMA_TRANS_NONE,
  38. };
  39. enum dma_buswidth {
  40. DMA_BUSWIDTH_1_BYTE = 0,
  41. DMA_BUSWIDTH_2_BYTES = 1,
  42. DMA_BUSWIDTH_4_BYTES = 2,
  43. };
  44. struct dma_config {
  45. enum dma_transfer_direction direction;
  46. int src_id;
  47. int dst_id;
  48. unsigned int src_addr;
  49. unsigned int dst_addr;
  50. enum dma_buswidth src_addr_width;
  51. enum dma_buswidth dst_addr_width;
  52. u32 src_maxburst;
  53. u32 dst_maxburst;
  54. u32 transfer_size;
  55. int blkint_en;
  56. int dst_master_id;
  57. int src_master_id;
  58. };
  59. struct dma_lli {
  60. unsigned int src_addr;
  61. unsigned int dst_addr;
  62. unsigned int next_lli;
  63. unsigned int control;
  64. };
  65. struct dma_chan {
  66. int chan_id;
  67. int in_use;
  68. void (*irq_callback)(void *param, unsigned int mask);
  69. void *callback_param;
  70. struct dma_lli *lli;
  71. };
  72. struct dma_chan *dma_request_channel(int favorite_ch);
  73. void dma_release_channel(struct dma_chan *chan);
  74. int dma_config_channel(struct dma_chan *chan, struct dma_config *config);
  75. int dma_config_cylic_channel(struct dma_chan *chan, struct dma_config *config, int num);
  76. int dma_register_complete_callback(struct dma_chan *chan,
  77. void (*callback)(void *param, unsigned int mask),
  78. void *callback_param);
  79. int dma_start_channel(struct dma_chan *chan);
  80. int dma_stop_channel(struct dma_chan *chan);
  81. int dma_init(void);
  82. int dma_m2mcpy(unsigned int dst_addr, unsigned int src_addr, int size);
  83. #ifdef __cplusplus
  84. }
  85. #endif
  86. #endif