dma.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:2k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  * Definitions shared between dma-sa1100.c and dma-sa1111.c
  3.  * (C) 2000 Nicolas Pitre <nico@cam.org>
  4.  *
  5.  * This program is free software; you can redistribute it and/or modify
  6.  * it under the terms of the GNU General Public License version 2 as
  7.  * published by the Free Software Foundation.
  8.  */
  9. #include <linux/config.h>
  10. /*
  11.  * DMA buffer structure
  12.  */
  13. typedef struct dma_buf_s {
  14. int size; /* buffer size */
  15. dma_addr_t dma_start; /* starting DMA address */
  16. dma_addr_t dma_ptr; /* next DMA pointer to use */
  17. int ref; /* number of DMA references */
  18. void *id; /* to identify buffer from outside */
  19. struct dma_buf_s *next; /* next buffer to process */
  20. } dma_buf_t;
  21. /*
  22.  * DMA channel structure.
  23.  */
  24. typedef struct {
  25. unsigned int in_use; /* Device is allocated */
  26. const char *device_id; /* Device name */
  27. dma_device_t device; /* ... to which this channel is attached */
  28. dma_buf_t *head; /* where to insert buffers */
  29. dma_buf_t *tail; /* where to remove buffers */
  30. dma_buf_t *curr; /* buffer currently DMA'ed */
  31. int stopped; /* 1 if DMA is stalled */
  32. dma_regs_t *regs; /* points to appropriate DMA registers */
  33. int irq; /* IRQ used by the channel */
  34. dma_callback_t callback; /* ... to call when buffers are done */
  35. int spin_size; /* > 0 when DMA should spin when no more buffer */
  36. dma_addr_t spin_addr; /* DMA address to spin onto */
  37. int spin_ref; /* number of spinning references */
  38. #ifdef CONFIG_SA1111
  39. int dma_a, dma_b, last_dma; /* SA-1111 specific */
  40. #endif
  41. } sa1100_dma_t;
  42. extern sa1100_dma_t dma_chan[MAX_SA1100_DMA_CHANNELS];
  43. int start_sa1111_sac_dma(sa1100_dma_t *dma, dma_addr_t dma_ptr, size_t size);
  44. int sa1111_dma_get_current(dmach_t channel, void **buf_id, dma_addr_t *addr);
  45. int sa1111_dma_stop(dmach_t channel);
  46. int sa1111_dma_resume(dmach_t channel);
  47. void sa1111_reset_sac_dma(dmach_t channel);
  48. void sa1111_cleanup_sac_dma(dmach_t channel);
  49. void sa1100_dma_done (sa1100_dma_t *dma);
  50. #ifdef CONFIG_SA1111
  51. #define channel_is_sa1111_sac(ch) 
  52. ((ch) >= SA1111_SAC_DMA_BASE && 
  53.  (ch) <  SA1111_SAC_DMA_BASE + SA1111_SAC_DMA_CHANNELS)
  54. #else
  55. #define channel_is_sa1111_sac(ch) (0)
  56. #endif