dma.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:3k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. #ifndef __ASM_SH_DMA_H
  2. #define __ASM_SH_DMA_H
  3. #include <linux/config.h>
  4. #include <asm/io.h> /* need byte IO */
  5. #define MAX_DMA_CHANNELS 8
  6. #define SH_MAX_DMA_CHANNELS 4
  7. /* The maximum address that we can perform a DMA transfer to on this platform */
  8. /* Don't define MAX_DMA_ADDRESS; it's useless on the SuperH and any
  9.    occurrence should be flagged as an error.  */
  10. /* But... */
  11. /* XXX: This is not applicable to SuperH, just needed for alloc_bootmem */
  12. #define MAX_DMA_ADDRESS      (PAGE_OFFSET+0x10000000)
  13. #if defined(__sh3__)
  14. #define SAR ((unsigned long[]){0xa4000020,0xa4000030,0xa4000040,0xa4000050})
  15. #define DAR ((unsigned long[]){0xa4000024,0xa4000034,0xa4000044,0xa4000054})
  16. #define DMATCR ((unsigned long[]){0xa4000028,0xa4000038,0xa4000048,0xa4000058})
  17. #define CHCR ((unsigned long[]){0xa400002c,0xa400003c,0xa400004c,0xa400005c})
  18. #define DMAOR 0xa4000060UL
  19. #elif defined(__SH4__)
  20. #define SAR ((unsigned long[]){0xbfa00000,0xbfa00010,0xbfa00020,0xbfa00030})
  21. #define DAR ((unsigned long[]){0xbfa00004,0xbfa00014,0xbfa00024,0xbfa00034})
  22. #define DMATCR ((unsigned long[]){0xbfa00008,0xbfa00018,0xbfa00028,0xbfa00038})
  23. #define CHCR ((unsigned long[]){0xbfa0000c,0xbfa0001c,0xbfa0002c,0xbfa0003c})
  24. #define DMAOR 0xbfa00040UL
  25. #endif
  26. #define DMTE_IRQ ((int[]){DMTE0_IRQ,DMTE1_IRQ,DMTE2_IRQ,DMTE3_IRQ})
  27. #define DMA_MODE_READ 0x00 /* I/O to memory, no autoinit, increment, single mode */
  28. #define DMA_MODE_WRITE 0x01 /* memory to I/O, no autoinit, increment, single mode */
  29. #define DMA_AUTOINIT 0x10
  30. #define REQ_L 0x00000000
  31. #define REQ_E 0x00080000
  32. #define RACK_H 0x00000000
  33. #define RACK_L 0x00040000
  34. #define ACK_R 0x00000000
  35. #define ACK_W 0x00020000
  36. #define ACK_H 0x00000000
  37. #define ACK_L 0x00010000
  38. #define DM_INC 0x00004000
  39. #define DM_DEC 0x00008000
  40. #define SM_INC 0x00001000
  41. #define SM_DEC 0x00002000
  42. #define RS_DUAL 0x00000000
  43. #define RS_IN 0x00000200
  44. #define RS_OUT 0x00000300
  45. #define TM_BURST 0x0000080
  46. #define TS_8 0x00000010
  47. #define TS_16 0x00000020
  48. #define TS_32 0x00000030
  49. #define TS_64 0x00000000
  50. #define TS_BLK 0x00000040
  51. #define CHCR_DE 0x00000001
  52. #define CHCR_TE 0x00000002
  53. #define CHCR_IE 0x00000004
  54. #define DMAOR_COD 0x00000008
  55. #define DMAOR_AE 0x00000004
  56. #define DMAOR_NMIF 0x00000002
  57. #define DMAOR_DME 0x00000001
  58. struct dma_info_t {
  59. unsigned int chan;
  60. unsigned int mode_read;
  61. unsigned int mode_write;
  62. unsigned long dev_addr;
  63. unsigned int mode;
  64. unsigned long mem_addr;
  65. unsigned int count;
  66. };
  67. static __inline__ void clear_dma_ff(unsigned int dmanr){}
  68. /* These are in arch/sh/kernel/dma.c: */
  69. extern unsigned long claim_dma_lock(void);
  70. extern void release_dma_lock(unsigned long flags);
  71. extern void setup_dma(unsigned int dmanr, struct dma_info_t *info);
  72. extern void enable_dma(unsigned int dmanr);
  73. extern void disable_dma(unsigned int dmanr);
  74. extern void set_dma_mode(unsigned int dmanr, char mode);
  75. extern void set_dma_addr(unsigned int dmanr, unsigned int a);
  76. extern void set_dma_count(unsigned int dmanr, unsigned int count);
  77. extern int get_dma_residue(unsigned int dmanr);
  78. #ifdef CONFIG_PCI
  79. extern int isa_dma_bridge_buggy;
  80. #else
  81. #define isa_dma_bridge_buggy  (0)
  82. #endif
  83. #endif /* __ASM_SH_DMA_H */