dma.h 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. /*
  2. * linux/include/asm-arm/arch-omap/dma.h
  3. *
  4. * Copyright (C) 2003 Nokia Corporation
  5. * Author: Juha Yrjölä <juha.yrjola@nokia.com>
  6. *
  7. * This program is free software; you can redistribute it and/or modify
  8. * it under the terms of the GNU General Public License as published by
  9. * the Free Software Foundation; either version 2 of the License, or
  10. * (at your option) any later version.
  11. *
  12. * This program is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. * GNU General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU General Public License
  18. * along with this program; if not, write to the Free Software
  19. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  20. */
  21. #ifndef __ASM_ARCH_DMA_H
  22. #define __ASM_ARCH_DMA_H
  23. #define MAX_DMA_ADDRESS 0xffffffff
  24. #define OMAP_LOGICAL_DMA_CH_COUNT 17
  25. #define OMAP_DMA_NO_DEVICE 0
  26. #define OMAP_DMA_MCSI1_TX 1
  27. #define OMAP_DMA_MCSI1_RX 2
  28. #define OMAP_DMA_I2C_RX 3
  29. #define OMAP_DMA_I2C_TX 4
  30. #define OMAP_DMA_EXT_NDMA_REQ 5
  31. #define OMAP_DMA_EXT_NDMA_REQ2 6
  32. #define OMAP_DMA_UWIRE_TX 7
  33. #define OMAP_DMA_MCBSP1_TX 8
  34. #define OMAP_DMA_MCBSP1_RX 9
  35. #define OMAP_DMA_MCBSP3_TX 10
  36. #define OMAP_DMA_MCBSP3_RX 11
  37. #define OMAP_DMA_UART1_TX 12
  38. #define OMAP_DMA_UART1_RX 13
  39. #define OMAP_DMA_UART2_TX 14
  40. #define OMAP_DMA_UART2_RX 15
  41. #define OMAP_DMA_MCBSP2_TX 16
  42. #define OMAP_DMA_MCBSP2_RX 17
  43. #define OMAP_DMA_UART3_TX 18
  44. #define OMAP_DMA_UART3_RX 19
  45. #define OMAP_DMA_CAMERA_IF_RX 20
  46. #define OMAP_DMA_MMC_TX 21
  47. #define OMAP_DMA_MMC_RX 22
  48. #define OMAP_DMA_NAND 23
  49. #define OMAP_DMA_IRQ_LCD_LINE 24
  50. #define OMAP_DMA_MEMORY_STICK 25
  51. #define OMAP_DMA_USB_W2FC_RX0 26
  52. #define OMAP_DMA_USB_W2FC_RX1 27
  53. #define OMAP_DMA_USB_W2FC_RX2 28
  54. #define OMAP_DMA_USB_W2FC_TX0 29
  55. #define OMAP_DMA_USB_W2FC_TX1 30
  56. #define OMAP_DMA_USB_W2FC_TX2 31
  57. /* These are only for 1610 */
  58. #define OMAP_DMA_CRYPTO_DES_IN 32
  59. #define OMAP_DMA_SPI_TX 33
  60. #define OMAP_DMA_SPI_RX 34
  61. #define OMAP_DMA_CRYPTO_HASH 35
  62. #define OMAP_DMA_CCP_ATTN 36
  63. #define OMAP_DMA_CCP_FIFO_NOT_EMPTY 37
  64. #define OMAP_DMA_CMT_APE_TX_CHAN_0 38
  65. #define OMAP_DMA_CMT_APE_RV_CHAN_0 39
  66. #define OMAP_DMA_CMT_APE_TX_CHAN_1 40
  67. #define OMAP_DMA_CMT_APE_RV_CHAN_1 41
  68. #define OMAP_DMA_CMT_APE_TX_CHAN_2 42
  69. #define OMAP_DMA_CMT_APE_RV_CHAN_2 43
  70. #define OMAP_DMA_CMT_APE_TX_CHAN_3 44
  71. #define OMAP_DMA_CMT_APE_RV_CHAN_3 45
  72. #define OMAP_DMA_CMT_APE_TX_CHAN_4 46
  73. #define OMAP_DMA_CMT_APE_RV_CHAN_4 47
  74. #define OMAP_DMA_CMT_APE_TX_CHAN_5 48
  75. #define OMAP_DMA_CMT_APE_RV_CHAN_5 49
  76. #define OMAP_DMA_CMT_APE_TX_CHAN_6 50
  77. #define OMAP_DMA_CMT_APE_RV_CHAN_6 51
  78. #define OMAP_DMA_CMT_APE_TX_CHAN_7 52
  79. #define OMAP_DMA_CMT_APE_RV_CHAN_7 53
  80. #define OMAP_DMA_MMC2_TX 54
  81. #define OMAP_DMA_MMC2_RX 55
  82. #define OMAP_DMA_CRYPTO_DES_OUT 56
  83. #define OMAP_DMA_BASE (0xfffed800)
  84. #define OMAP_DMA_GCR (OMAP_DMA_BASE + 0x400)
  85. #define OMAP_DMA_GSCR (OMAP_DMA_BASE + 0x404)
  86. #define OMAP_DMA_GRST (OMAP_DMA_BASE + 0x408)
  87. #define OMAP_DMA_HW_ID (OMAP_DMA_BASE + 0x442)
  88. #define OMAP_DMA_PCH2_ID (OMAP_DMA_BASE + 0x444)
  89. #define OMAP_DMA_PCH0_ID (OMAP_DMA_BASE + 0x446)
  90. #define OMAP_DMA_PCH1_ID (OMAP_DMA_BASE + 0x448)
  91. #define OMAP_DMA_PCHG_ID (OMAP_DMA_BASE + 0x44a)
  92. #define OMAP_DMA_PCHD_ID (OMAP_DMA_BASE + 0x44c)
  93. #define OMAP_DMA_CAPS_0_U (OMAP_DMA_BASE + 0x44e)
  94. #define OMAP_DMA_CAPS_0_L (OMAP_DMA_BASE + 0x450)
  95. #define OMAP_DMA_CAPS_1_U (OMAP_DMA_BASE + 0x452)
  96. #define OMAP_DMA_CAPS_1_L (OMAP_DMA_BASE + 0x454)
  97. #define OMAP_DMA_CAPS_2 (OMAP_DMA_BASE + 0x456)
  98. #define OMAP_DMA_CAPS_3 (OMAP_DMA_BASE + 0x458)
  99. #define OMAP_DMA_CAPS_4 (OMAP_DMA_BASE + 0x45a)
  100. #define OMAP_DMA_PCH2_SR (OMAP_DMA_BASE + 0x460)
  101. #define OMAP_DMA_PCH0_SR (OMAP_DMA_BASE + 0x480)
  102. #define OMAP_DMA_PCH1_SR (OMAP_DMA_BASE + 0x482)
  103. #define OMAP_DMA_PCHD_SR (OMAP_DMA_BASE + 0x4c0)
  104. #define OMAP1510_DMA_LCD_BASE (0xfffedb00)
  105. #define OMAP1510_DMA_LCD_CTRL (OMAP1510_DMA_LCD_BASE + 0x00)
  106. #define OMAP1510_DMA_LCD_TOP_F1_L (OMAP1510_DMA_LCD_BASE + 0x02)
  107. #define OMAP1510_DMA_LCD_TOP_F1_U (OMAP1510_DMA_LCD_BASE + 0x04)
  108. #define OMAP1510_DMA_LCD_BOT_F1_L (OMAP1510_DMA_LCD_BASE + 0x06)
  109. #define OMAP1510_DMA_LCD_BOT_F1_U (OMAP1510_DMA_LCD_BASE + 0x08)
  110. #define OMAP1610_DMA_LCD_BASE (0xfffee300)
  111. #define OMAP1610_DMA_LCD_CSDP (OMAP1610_DMA_LCD_BASE + 0xc0)
  112. #define OMAP1610_DMA_LCD_CCR (OMAP1610_DMA_LCD_BASE + 0xc2)
  113. #define OMAP1610_DMA_LCD_CTRL (OMAP1610_DMA_LCD_BASE + 0xc4)
  114. #define OMAP1610_DMA_LCD_TOP_B1_L (OMAP1610_DMA_LCD_BASE + 0xc8)
  115. #define OMAP1610_DMA_LCD_TOP_B1_U (OMAP1610_DMA_LCD_BASE + 0xca)
  116. #define OMAP1610_DMA_LCD_BOT_B1_L (OMAP1610_DMA_LCD_BASE + 0xcc)
  117. #define OMAP1610_DMA_LCD_BOT_B1_U (OMAP1610_DMA_LCD_BASE + 0xce)
  118. #define OMAP1610_DMA_LCD_TOP_B2_L (OMAP1610_DMA_LCD_BASE + 0xd0)
  119. #define OMAP1610_DMA_LCD_TOP_B2_U (OMAP1610_DMA_LCD_BASE + 0xd2)
  120. #define OMAP1610_DMA_LCD_BOT_B2_L (OMAP1610_DMA_LCD_BASE + 0xd4)
  121. #define OMAP1610_DMA_LCD_BOT_B2_U (OMAP1610_DMA_LCD_BASE + 0xd6)
  122. #define OMAP1610_DMA_LCD_SRC_EI_B1 (OMAP1610_DMA_LCD_BASE + 0xd8)
  123. #define OMAP1610_DMA_LCD_SRC_FI_B1_L (OMAP1610_DMA_LCD_BASE + 0xda)
  124. #define OMAP1610_DMA_LCD_SRC_EN_B1 (OMAP1610_DMA_LCD_BASE + 0xe0)
  125. #define OMAP1610_DMA_LCD_SRC_FN_B1 (OMAP1610_DMA_LCD_BASE + 0xe4)
  126. #define OMAP1610_DMA_LCD_LCH_CTRL (OMAP1610_DMA_LCD_BASE + 0xea)
  127. #define OMAP1610_DMA_LCD_SRC_FI_B1_U (OMAP1610_DMA_LCD_BASE + 0xf4)
  128. /* Every LCh has its own set of the registers below */
  129. #define OMAP_DMA_CSDP(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x00)
  130. #define OMAP_DMA_CCR(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x02)
  131. #define OMAP_DMA_CICR(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x04)
  132. #define OMAP_DMA_CSR(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x06)
  133. #define OMAP_DMA_CSSA_L(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x08)
  134. #define OMAP_DMA_CSSA_U(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x0a)
  135. #define OMAP_DMA_CDSA_L(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x0c)
  136. #define OMAP_DMA_CDSA_U(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x0e)
  137. #define OMAP_DMA_CEN(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x10)
  138. #define OMAP_DMA_CFN(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x12)
  139. #define OMAP_DMA_CSFI(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x14)
  140. #define OMAP_DMA_CSEI(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x16)
  141. #define OMAP_DMA_CSAC(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x18)
  142. #define OMAP_DMA_CDAC(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x1a)
  143. #define OMAP_DMA_CDEI(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x1c)
  144. #define OMAP_DMA_CDFI(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x1e)
  145. #define OMAP_DMA_COLOR_L(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x20)
  146. #define OMAP_DMA_COLOR_U(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x22)
  147. #define OMAP_DMA_CCR2(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x24)
  148. #define OMAP_DMA_CLNK_CTRL(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x28)
  149. #define OMAP_DMA_LCH_CTRL(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x2a)
  150. #define OMAP_DMA_TOUT_IRQ (1 << 0)
  151. #define OMAP_DMA_DROP_IRQ (1 << 1)
  152. #define OMAP_DMA_HALF_IRQ (1 << 2)
  153. #define OMAP_DMA_FRAME_IRQ (1 << 3)
  154. #define OMAP_DMA_LAST_IRQ (1 << 4)
  155. #define OMAP_DMA_BLOCK_IRQ (1 << 5)
  156. #define OMAP_DMA_SYNC_IRQ (1 << 6)
  157. #define OMAP_DMA_DATA_TYPE_S8 0x00
  158. #define OMAP_DMA_DATA_TYPE_S16 0x01
  159. #define OMAP_DMA_DATA_TYPE_S32 0x02
  160. #define OMAP_DMA_SYNC_ELEMENT 0x00
  161. #define OMAP_DMA_SYNC_FRAME 0x01
  162. #define OMAP_DMA_SYNC_BLOCK 0x02
  163. #define OMAP_DMA_PORT_EMIFF 0x00
  164. #define OMAP_DMA_PORT_EMIFS 0x01
  165. #define OMAP_DMA_PORT_OCP_T1 0x02
  166. #define OMAP_DMA_PORT_TIPB 0x03
  167. #define OMAP_DMA_PORT_OCP_T2 0x04
  168. #define OMAP_DMA_PORT_MPUI 0x05
  169. #define OMAP_DMA_AMODE_CONSTANT 0x00
  170. #define OMAP_DMA_AMODE_POST_INC 0x01
  171. #define OMAP_DMA_AMODE_SINGLE_IDX 0x02
  172. #define OMAP_DMA_AMODE_DOUBLE_IDX 0x03
  173. /* LCD DMA block numbers */
  174. enum {
  175. OMAP_LCD_DMA_B1_TOP,
  176. OMAP_LCD_DMA_B1_BOTTOM,
  177. OMAP_LCD_DMA_B2_TOP,
  178. OMAP_LCD_DMA_B2_BOTTOM
  179. };
  180. enum omap_dma_burst_mode {
  181. OMAP_DMA_DATA_BURST_DIS = 0,
  182. OMAP_DMA_DATA_BURST_4,
  183. OMAP_DMA_DATA_BURST_8
  184. };
  185. enum omap_dma_color_mode {
  186. OMAP_DMA_COLOR_DIS = 0,
  187. OMAP_DMA_CONSTANT_FILL,
  188. OMAP_DMA_TRANSPARENT_COPY
  189. };
  190. extern void omap_set_dma_priority(int dst_port, int priority);
  191. extern int omap_request_dma(int dev_id, const char *dev_name,
  192. void (* callback)(int lch, u16 ch_status, void *data),
  193. void *data, int *dma_ch);
  194. extern void omap_enable_dma_irq(int ch, u16 irq_bits);
  195. extern void omap_disable_dma_irq(int ch, u16 irq_bits);
  196. extern void omap_free_dma(int ch);
  197. extern void omap_start_dma(int lch);
  198. extern void omap_stop_dma(int lch);
  199. extern void omap_set_dma_transfer_params(int lch, int data_type,
  200. int elem_count, int frame_count,
  201. int sync_mode);
  202. extern void omap_set_dma_color_mode(int lch, enum omap_dma_color_mode mode,
  203. u32 color);
  204. extern void omap_set_dma_src_params(int lch, int src_port, int src_amode,
  205. unsigned long src_start);
  206. extern void omap_set_dma_src_index(int lch, int eidx, int fidx);
  207. extern void omap_set_dma_src_data_pack(int lch, int enable);
  208. extern void omap_set_dma_src_burst_mode(int lch,
  209. enum omap_dma_burst_mode burst_mode);
  210. extern void omap_set_dma_dest_params(int lch, int dest_port, int dest_amode,
  211. unsigned long dest_start);
  212. extern void omap_set_dma_dest_index(int lch, int eidx, int fidx);
  213. extern void omap_set_dma_dest_data_pack(int lch, int enable);
  214. extern void omap_set_dma_dest_burst_mode(int lch,
  215. enum omap_dma_burst_mode burst_mode);
  216. extern void omap_dma_link_lch (int lch_head, int lch_queue);
  217. extern void omap_dma_unlink_lch (int lch_head, int lch_queue);
  218. extern dma_addr_t omap_get_dma_src_pos(int lch);
  219. extern dma_addr_t omap_get_dma_dst_pos(int lch);
  220. extern void omap_clear_dma(int lch);
  221. /* Returns 1 if the DMA module is in OMAP1510-compatible mode, 0 otherwise */
  222. extern int omap_dma_in_1510_mode(void);
  223. /* LCD DMA functions */
  224. extern int omap_request_lcd_dma(void (* callback)(u16 status, void *data),
  225. void *data);
  226. extern void omap_free_lcd_dma(void);
  227. extern void omap_setup_lcd_dma(void);
  228. extern void omap_enable_lcd_dma(void);
  229. extern void omap_stop_lcd_dma(void);
  230. extern void omap_set_lcd_dma_ext_controller(int external);
  231. extern void omap_set_lcd_dma_single_transfer(int single);
  232. extern void omap_set_lcd_dma_b1(unsigned long addr, u16 fb_xres, u16 fb_yres,
  233. int data_type);
  234. extern void omap_set_lcd_dma_b1_rotation(int rotate);
  235. extern void omap_set_lcd_dma_b1_vxres(unsigned long vxres);
  236. extern void omap_set_lcd_dma_b1_mirror(int mirror);
  237. extern void omap_set_lcd_dma_b1_scale(unsigned int xscale, unsigned int yscale);
  238. #endif /* __ASM_ARCH_DMA_H */