MCD_tasksInit.c 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. /*
  2. * Copyright (C) 2004-2007 Freescale Semiconductor, Inc.
  3. *
  4. * See file CREDITS for list of people who contributed to this
  5. * project.
  6. *
  7. * This program is free software; you can redistribute it and/or
  8. * modify it under the terms of the GNU General Public License as
  9. * published by the Free Software Foundation; either version 2 of
  10. * the License, or (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,
  20. * MA 02111-1307 USA
  21. */
  22. #include <common.h>
  23. /* Functions for initializing variable tables of different types of tasks. */
  24. /*
  25. * Do not edit!
  26. */
  27. #include <MCD_dma.h>
  28. extern dmaRegs *MCD_dmaBar;
  29. /* Task 0 */
  30. void MCD_startDmaChainNoEu(int *currBD, short srcIncr, short destIncr,
  31. int xferSize, short xferSizeIncr, int *cSave,
  32. volatile TaskTableEntry * taskTable, int channel)
  33. {
  34. volatile TaskTableEntry *taskChan = taskTable + channel;
  35. MCD_SET_VAR(taskChan, 2, (u32) currBD); /* var[2] */
  36. MCD_SET_VAR(taskChan, 25, (u32) (0xe000 << 16) | (0xffff & srcIncr)); /* inc[1] */
  37. MCD_SET_VAR(taskChan, 24, (u32) (0xe000 << 16) | (0xffff & destIncr)); /* inc[0] */
  38. MCD_SET_VAR(taskChan, 11, (u32) xferSize); /* var[11] */
  39. MCD_SET_VAR(taskChan, 26, (u32) (0x2000 << 16) | (0xffff & xferSizeIncr)); /* inc[2] */
  40. MCD_SET_VAR(taskChan, 0, (u32) cSave); /* var[0] */
  41. MCD_SET_VAR(taskChan, 1, (u32) 0x00000000); /* var[1] */
  42. MCD_SET_VAR(taskChan, 3, (u32) 0x00000000); /* var[3] */
  43. MCD_SET_VAR(taskChan, 4, (u32) 0x00000000); /* var[4] */
  44. MCD_SET_VAR(taskChan, 5, (u32) 0x00000000); /* var[5] */
  45. MCD_SET_VAR(taskChan, 6, (u32) 0x00000000); /* var[6] */
  46. MCD_SET_VAR(taskChan, 7, (u32) 0x00000000); /* var[7] */
  47. MCD_SET_VAR(taskChan, 8, (u32) 0x00000000); /* var[8] */
  48. MCD_SET_VAR(taskChan, 9, (u32) 0x00000000); /* var[9] */
  49. MCD_SET_VAR(taskChan, 10, (u32) 0x00000000); /* var[10] */
  50. MCD_SET_VAR(taskChan, 12, (u32) 0x00000000); /* var[12] */
  51. MCD_SET_VAR(taskChan, 13, (u32) 0x80000000); /* var[13] */
  52. MCD_SET_VAR(taskChan, 14, (u32) 0x00000010); /* var[14] */
  53. MCD_SET_VAR(taskChan, 15, (u32) 0x00000004); /* var[15] */
  54. MCD_SET_VAR(taskChan, 16, (u32) 0x08000000); /* var[16] */
  55. MCD_SET_VAR(taskChan, 27, (u32) 0x00000000); /* inc[3] */
  56. MCD_SET_VAR(taskChan, 28, (u32) 0x80000000); /* inc[4] */
  57. MCD_SET_VAR(taskChan, 29, (u32) 0x80000001); /* inc[5] */
  58. MCD_SET_VAR(taskChan, 30, (u32) 0x40000000); /* inc[6] */
  59. /* Set the task's Enable bit in its Task Control Register */
  60. MCD_dmaBar->taskControl[channel] |= (u16) 0x8000;
  61. }
  62. /* Task 1 */
  63. void MCD_startDmaSingleNoEu(char *srcAddr, short srcIncr, char *destAddr,
  64. short destIncr, int dmaSize, short xferSizeIncr,
  65. int flags, int *currBD, int *cSave,
  66. volatile TaskTableEntry * taskTable, int channel)
  67. {
  68. volatile TaskTableEntry *taskChan = taskTable + channel;
  69. MCD_SET_VAR(taskChan, 7, (u32) srcAddr); /* var[7] */
  70. MCD_SET_VAR(taskChan, 25, (u32) (0xe000 << 16) | (0xffff & srcIncr)); /* inc[1] */
  71. MCD_SET_VAR(taskChan, 2, (u32) destAddr); /* var[2] */
  72. MCD_SET_VAR(taskChan, 24, (u32) (0xe000 << 16) | (0xffff & destIncr)); /* inc[0] */
  73. MCD_SET_VAR(taskChan, 3, (u32) dmaSize); /* var[3] */
  74. MCD_SET_VAR(taskChan, 26, (u32) (0x2000 << 16) | (0xffff & xferSizeIncr)); /* inc[2] */
  75. MCD_SET_VAR(taskChan, 5, (u32) flags); /* var[5] */
  76. MCD_SET_VAR(taskChan, 1, (u32) currBD); /* var[1] */
  77. MCD_SET_VAR(taskChan, 0, (u32) cSave); /* var[0] */
  78. MCD_SET_VAR(taskChan, 4, (u32) 0x00000000); /* var[4] */
  79. MCD_SET_VAR(taskChan, 6, (u32) 0x00000000); /* var[6] */
  80. MCD_SET_VAR(taskChan, 8, (u32) 0x00000000); /* var[8] */
  81. MCD_SET_VAR(taskChan, 9, (u32) 0x00000004); /* var[9] */
  82. MCD_SET_VAR(taskChan, 10, (u32) 0x08000000); /* var[10] */
  83. MCD_SET_VAR(taskChan, 27, (u32) 0x00000000); /* inc[3] */
  84. MCD_SET_VAR(taskChan, 28, (u32) 0x80000001); /* inc[4] */
  85. MCD_SET_VAR(taskChan, 29, (u32) 0x40000000); /* inc[5] */
  86. /* Set the task's Enable bit in its Task Control Register */
  87. MCD_dmaBar->taskControl[channel] |= (u16) 0x8000;
  88. }
  89. /* Task 2 */
  90. void MCD_startDmaChainEu(int *currBD, short srcIncr, short destIncr,
  91. int xferSize, short xferSizeIncr, int *cSave,
  92. volatile TaskTableEntry * taskTable, int channel)
  93. {
  94. volatile TaskTableEntry *taskChan = taskTable + channel;
  95. MCD_SET_VAR(taskChan, 3, (u32) currBD); /* var[3] */
  96. MCD_SET_VAR(taskChan, 25, (u32) (0xe000 << 16) | (0xffff & srcIncr)); /* inc[1] */
  97. MCD_SET_VAR(taskChan, 24, (u32) (0xe000 << 16) | (0xffff & destIncr)); /* inc[0] */
  98. MCD_SET_VAR(taskChan, 12, (u32) xferSize); /* var[12] */
  99. MCD_SET_VAR(taskChan, 26, (u32) (0x2000 << 16) | (0xffff & xferSizeIncr)); /* inc[2] */
  100. MCD_SET_VAR(taskChan, 0, (u32) cSave); /* var[0] */
  101. MCD_SET_VAR(taskChan, 1, (u32) 0x00000000); /* var[1] */
  102. MCD_SET_VAR(taskChan, 2, (u32) 0x00000000); /* var[2] */
  103. MCD_SET_VAR(taskChan, 4, (u32) 0x00000000); /* var[4] */
  104. MCD_SET_VAR(taskChan, 5, (u32) 0x00000000); /* var[5] */
  105. MCD_SET_VAR(taskChan, 6, (u32) 0x00000000); /* var[6] */
  106. MCD_SET_VAR(taskChan, 7, (u32) 0x00000000); /* var[7] */
  107. MCD_SET_VAR(taskChan, 8, (u32) 0x00000000); /* var[8] */
  108. MCD_SET_VAR(taskChan, 9, (u32) 0x00000000); /* var[9] */
  109. MCD_SET_VAR(taskChan, 10, (u32) 0x00000000); /* var[10] */
  110. MCD_SET_VAR(taskChan, 11, (u32) 0x00000000); /* var[11] */
  111. MCD_SET_VAR(taskChan, 13, (u32) 0x00000000); /* var[13] */
  112. MCD_SET_VAR(taskChan, 14, (u32) 0x80000000); /* var[14] */
  113. MCD_SET_VAR(taskChan, 15, (u32) 0x00000010); /* var[15] */
  114. MCD_SET_VAR(taskChan, 16, (u32) 0x00000001); /* var[16] */
  115. MCD_SET_VAR(taskChan, 17, (u32) 0x00000004); /* var[17] */
  116. MCD_SET_VAR(taskChan, 18, (u32) 0x08000000); /* var[18] */
  117. MCD_SET_VAR(taskChan, 27, (u32) 0x00000000); /* inc[3] */
  118. MCD_SET_VAR(taskChan, 28, (u32) 0x80000000); /* inc[4] */
  119. MCD_SET_VAR(taskChan, 29, (u32) 0xc0000000); /* inc[5] */
  120. MCD_SET_VAR(taskChan, 30, (u32) 0x80000001); /* inc[6] */
  121. MCD_SET_VAR(taskChan, 31, (u32) 0x40000000); /* inc[7] */
  122. /* Set the task's Enable bit in its Task Control Register */
  123. MCD_dmaBar->taskControl[channel] |= (u16) 0x8000;
  124. }
  125. /* Task 3 */
  126. void MCD_startDmaSingleEu(char *srcAddr, short srcIncr, char *destAddr,
  127. short destIncr, int dmaSize, short xferSizeIncr,
  128. int flags, int *currBD, int *cSave,
  129. volatile TaskTableEntry * taskTable, int channel)
  130. {
  131. volatile TaskTableEntry *taskChan = taskTable + channel;
  132. MCD_SET_VAR(taskChan, 8, (u32) srcAddr); /* var[8] */
  133. MCD_SET_VAR(taskChan, 25, (u32) (0xe000 << 16) | (0xffff & srcIncr)); /* inc[1] */
  134. MCD_SET_VAR(taskChan, 3, (u32) destAddr); /* var[3] */
  135. MCD_SET_VAR(taskChan, 24, (u32) (0xe000 << 16) | (0xffff & destIncr)); /* inc[0] */
  136. MCD_SET_VAR(taskChan, 4, (u32) dmaSize); /* var[4] */
  137. MCD_SET_VAR(taskChan, 26, (u32) (0x2000 << 16) | (0xffff & xferSizeIncr)); /* inc[2] */
  138. MCD_SET_VAR(taskChan, 6, (u32) flags); /* var[6] */
  139. MCD_SET_VAR(taskChan, 2, (u32) currBD); /* var[2] */
  140. MCD_SET_VAR(taskChan, 0, (u32) cSave); /* var[0] */
  141. MCD_SET_VAR(taskChan, 1, (u32) 0x00000000); /* var[1] */
  142. MCD_SET_VAR(taskChan, 5, (u32) 0x00000000); /* var[5] */
  143. MCD_SET_VAR(taskChan, 7, (u32) 0x00000000); /* var[7] */
  144. MCD_SET_VAR(taskChan, 9, (u32) 0x00000000); /* var[9] */
  145. MCD_SET_VAR(taskChan, 10, (u32) 0x00000001); /* var[10] */
  146. MCD_SET_VAR(taskChan, 11, (u32) 0x00000004); /* var[11] */
  147. MCD_SET_VAR(taskChan, 12, (u32) 0x08000000); /* var[12] */
  148. MCD_SET_VAR(taskChan, 27, (u32) 0x00000000); /* inc[3] */
  149. MCD_SET_VAR(taskChan, 28, (u32) 0xc0000000); /* inc[4] */
  150. MCD_SET_VAR(taskChan, 29, (u32) 0x80000000); /* inc[5] */
  151. MCD_SET_VAR(taskChan, 30, (u32) 0x80000001); /* inc[6] */
  152. MCD_SET_VAR(taskChan, 31, (u32) 0x40000000); /* inc[7] */
  153. /* Set the task's Enable bit in its Task Control Register */
  154. MCD_dmaBar->taskControl[channel] |= (u16) 0x8000;
  155. }
  156. /* Task 4 */
  157. void MCD_startDmaENetRcv(char *bDBase, char *currBD, char *rcvFifoPtr,
  158. volatile TaskTableEntry * taskTable, int channel)
  159. {
  160. volatile TaskTableEntry *taskChan = taskTable + channel;
  161. MCD_SET_VAR(taskChan, 0, (u32) bDBase); /* var[0] */
  162. MCD_SET_VAR(taskChan, 3, (u32) currBD); /* var[3] */
  163. MCD_SET_VAR(taskChan, 6, (u32) rcvFifoPtr); /* var[6] */
  164. MCD_SET_VAR(taskChan, 1, (u32) 0x00000000); /* var[1] */
  165. MCD_SET_VAR(taskChan, 2, (u32) 0x00000000); /* var[2] */
  166. MCD_SET_VAR(taskChan, 4, (u32) 0x00000000); /* var[4] */
  167. MCD_SET_VAR(taskChan, 5, (u32) 0x00000000); /* var[5] */
  168. MCD_SET_VAR(taskChan, 7, (u32) 0x00000000); /* var[7] */
  169. MCD_SET_VAR(taskChan, 8, (u32) 0x00000000); /* var[8] */
  170. MCD_SET_VAR(taskChan, 9, (u32) 0x0000ffff); /* var[9] */
  171. MCD_SET_VAR(taskChan, 10, (u32) 0x30000000); /* var[10] */
  172. MCD_SET_VAR(taskChan, 11, (u32) 0x0fffffff); /* var[11] */
  173. MCD_SET_VAR(taskChan, 12, (u32) 0x00000008); /* var[12] */
  174. MCD_SET_VAR(taskChan, 24, (u32) 0x00000000); /* inc[0] */
  175. MCD_SET_VAR(taskChan, 25, (u32) 0x60000000); /* inc[1] */
  176. MCD_SET_VAR(taskChan, 26, (u32) 0x20000004); /* inc[2] */
  177. MCD_SET_VAR(taskChan, 27, (u32) 0x40000000); /* inc[3] */
  178. /* Set the task's Enable bit in its Task Control Register */
  179. MCD_dmaBar->taskControl[channel] |= (u16) 0x8000;
  180. }
  181. /* Task 5 */
  182. void MCD_startDmaENetXmit(char *bDBase, char *currBD, char *xmitFifoPtr,
  183. volatile TaskTableEntry * taskTable, int channel)
  184. {
  185. volatile TaskTableEntry *taskChan = taskTable + channel;
  186. MCD_SET_VAR(taskChan, 0, (u32) bDBase); /* var[0] */
  187. MCD_SET_VAR(taskChan, 3, (u32) currBD); /* var[3] */
  188. MCD_SET_VAR(taskChan, 11, (u32) xmitFifoPtr); /* var[11] */
  189. MCD_SET_VAR(taskChan, 1, (u32) 0x00000000); /* var[1] */
  190. MCD_SET_VAR(taskChan, 2, (u32) 0x00000000); /* var[2] */
  191. MCD_SET_VAR(taskChan, 4, (u32) 0x00000000); /* var[4] */
  192. MCD_SET_VAR(taskChan, 5, (u32) 0x00000000); /* var[5] */
  193. MCD_SET_VAR(taskChan, 6, (u32) 0x00000000); /* var[6] */
  194. MCD_SET_VAR(taskChan, 7, (u32) 0x00000000); /* var[7] */
  195. MCD_SET_VAR(taskChan, 8, (u32) 0x00000000); /* var[8] */
  196. MCD_SET_VAR(taskChan, 9, (u32) 0x00000000); /* var[9] */
  197. MCD_SET_VAR(taskChan, 10, (u32) 0x00000000); /* var[10] */
  198. MCD_SET_VAR(taskChan, 12, (u32) 0x00000000); /* var[12] */
  199. MCD_SET_VAR(taskChan, 13, (u32) 0x0000ffff); /* var[13] */
  200. MCD_SET_VAR(taskChan, 14, (u32) 0xffffffff); /* var[14] */
  201. MCD_SET_VAR(taskChan, 15, (u32) 0x00000004); /* var[15] */
  202. MCD_SET_VAR(taskChan, 16, (u32) 0x00000008); /* var[16] */
  203. MCD_SET_VAR(taskChan, 24, (u32) 0x00000000); /* inc[0] */
  204. MCD_SET_VAR(taskChan, 25, (u32) 0x60000000); /* inc[1] */
  205. MCD_SET_VAR(taskChan, 26, (u32) 0x40000000); /* inc[2] */
  206. MCD_SET_VAR(taskChan, 27, (u32) 0xc000fffc); /* inc[3] */
  207. MCD_SET_VAR(taskChan, 28, (u32) 0xe0000004); /* inc[4] */
  208. MCD_SET_VAR(taskChan, 29, (u32) 0x80000000); /* inc[5] */
  209. MCD_SET_VAR(taskChan, 30, (u32) 0x4000ffff); /* inc[6] */
  210. MCD_SET_VAR(taskChan, 31, (u32) 0xe0000001); /* inc[7] */
  211. /* Set the task's Enable bit in its Task Control Register */
  212. MCD_dmaBar->taskControl[channel] |= (u16) 0x8000;
  213. }