dump.c 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381
  1. /*
  2. ** Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/common/dump.c#1
  3. */
  4. /*! \file "dump.c"
  5. \brief Provide memory dump function for debugging.
  6. Provide memory dump function for debugging.
  7. */
  8. /*
  9. ** Log: dump.c
  10. **
  11. ** 09 17 2012 cm.chang
  12. ** [BORA00002149] [MT6630 Wi-Fi] Initial software development
  13. ** Duplicate source from MT6620 v2.3 driver branch
  14. ** (Davinci label: MT6620_WIFI_Driver_V2_3_120913_1942_As_MT6630_Base)
  15. *
  16. * 11 24 2011 wh.su
  17. * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG
  18. * Adjust code for DBG and CONFIG_XLOG.
  19. *
  20. * 11 10 2011 wh.su
  21. * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG
  22. * Using the new XLOG define for dum Memory.
  23. *
  24. * 11 03 2011 wh.su
  25. * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG
  26. * Add dumpMemory8 at XLOG support.
  27. *
  28. * 07 08 2010 cp.wu
  29. *
  30. * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository.
  31. *
  32. * 06 06 2010 kevin.huang
  33. * [WPD00003832][MT6620 5931] Create driver base
  34. * [MT6620 5931] Create driver base
  35. ** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 19:58:51 GMT mtk01426
  36. ** Init develop
  37. **
  38. */
  39. /*******************************************************************************
  40. * C O M P I L E R F L A G S
  41. ********************************************************************************
  42. */
  43. /*******************************************************************************
  44. * E X T E R N A L R E F E R E N C E S
  45. ********************************************************************************
  46. */
  47. #include "precomp.h"
  48. /*******************************************************************************
  49. * C O N S T A N T S
  50. ********************************************************************************
  51. */
  52. /*******************************************************************************
  53. * D A T A T Y P E S
  54. ********************************************************************************
  55. */
  56. /*******************************************************************************
  57. * P U B L I C D A T A
  58. ********************************************************************************
  59. */
  60. /*******************************************************************************
  61. * P R I V A T E D A T A
  62. ********************************************************************************
  63. */
  64. /*******************************************************************************
  65. * M A C R O S
  66. ********************************************************************************
  67. */
  68. /*******************************************************************************
  69. * F U N C T I O N D E C L A R A T I O N S
  70. ********************************************************************************
  71. */
  72. /*******************************************************************************
  73. * F U N C T I O N S
  74. ********************************************************************************
  75. */
  76. /*----------------------------------------------------------------------------*/
  77. /*!
  78. * \brief This routine is called to dump a segment of memory in bytes.
  79. *
  80. * \param[in] pucStartAddr Pointer to the starting address of the memory to be dumped.
  81. * \param[in] u4Length Length of the memory to be dumped.
  82. *
  83. * \return (none)
  84. */
  85. /*----------------------------------------------------------------------------*/
  86. VOID dumpMemory8(IN UINT_32 u4DbgIndex, IN UINT_8 ucDbgClass, IN PUINT_8 pucStartAddr, IN UINT_32 u4Length)
  87. {
  88. ASSERT(pucStartAddr);
  89. DBGFUNC(u4DbgIndex, ucDbgClass, "DUMP8 ADDRESS: %x, Length: %d\n", (ULONG) pucStartAddr, u4Length);
  90. while (u4Length > 0) {
  91. if (u4Length >= 16) {
  92. DBGFUNC(u4DbgIndex, ucDbgClass,
  93. "(%08x) %02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x %02x %02x %02x %02x\n",
  94. (ULONG) pucStartAddr, pucStartAddr[0], pucStartAddr[1],
  95. pucStartAddr[2], pucStartAddr[3], pucStartAddr[4], pucStartAddr[5],
  96. pucStartAddr[6], pucStartAddr[7], pucStartAddr[8], pucStartAddr[9],
  97. pucStartAddr[10], pucStartAddr[11], pucStartAddr[12],
  98. pucStartAddr[13], pucStartAddr[14], pucStartAddr[15]);
  99. u4Length -= 16;
  100. pucStartAddr += 16;
  101. } else {
  102. switch (u4Length) {
  103. case 1:
  104. DBGFUNC(u4DbgIndex, ucDbgClass, "(%08x) %02x\n",
  105. (ULONG) pucStartAddr, pucStartAddr[0]);
  106. break;
  107. case 2:
  108. DBGFUNC(u4DbgIndex, ucDbgClass, "(%08x) %02x %02x\n",
  109. (ULONG) pucStartAddr,
  110. pucStartAddr[0], pucStartAddr[1]);
  111. break;
  112. case 3:
  113. DBGFUNC(u4DbgIndex, ucDbgClass, "(%08x) %02x %02x %02x\n",
  114. (ULONG) pucStartAddr,
  115. pucStartAddr[0], pucStartAddr[1], pucStartAddr[2]);
  116. break;
  117. case 4:
  118. DBGFUNC(u4DbgIndex, ucDbgClass, "(%08x) %02x %02x %02x %02x\n",
  119. (ULONG) pucStartAddr,
  120. pucStartAddr[0], pucStartAddr[1],
  121. pucStartAddr[2], pucStartAddr[3]);
  122. break;
  123. case 5:
  124. DBGFUNC(u4DbgIndex, ucDbgClass,
  125. "(%08x) %02x %02x %02x %02x %02x\n",
  126. (ULONG) pucStartAddr, pucStartAddr[0], pucStartAddr[1],
  127. pucStartAddr[2], pucStartAddr[3], pucStartAddr[4]);
  128. break;
  129. case 6:
  130. DBGFUNC(u4DbgIndex, ucDbgClass,
  131. "(%08x) %02x %02x %02x %02x %02x %02x\n",
  132. (ULONG) pucStartAddr, pucStartAddr[0], pucStartAddr[1],
  133. pucStartAddr[2], pucStartAddr[3], pucStartAddr[4], pucStartAddr[5]);
  134. break;
  135. case 7:
  136. DBGFUNC(u4DbgIndex, ucDbgClass,
  137. "(%08x) %02x %02x %02x %02x %02x %02x %02x\n",
  138. (ULONG) pucStartAddr, pucStartAddr[0], pucStartAddr[1],
  139. pucStartAddr[2], pucStartAddr[3], pucStartAddr[4],
  140. pucStartAddr[5], pucStartAddr[6]);
  141. break;
  142. case 8:
  143. DBGFUNC(u4DbgIndex, ucDbgClass,
  144. "(%08x) %02x %02x %02x %02x %02x %02x %02x %02x\n",
  145. (ULONG) pucStartAddr, pucStartAddr[0], pucStartAddr[1],
  146. pucStartAddr[2], pucStartAddr[3], pucStartAddr[4],
  147. pucStartAddr[5], pucStartAddr[6], pucStartAddr[7]);
  148. break;
  149. case 9:
  150. DBGFUNC(u4DbgIndex, ucDbgClass,
  151. "(%08x) %02x %02x %02x %02x %02x %02x %02x %02x - %02x\n",
  152. (ULONG) pucStartAddr, pucStartAddr[0], pucStartAddr[1],
  153. pucStartAddr[2], pucStartAddr[3], pucStartAddr[4],
  154. pucStartAddr[5], pucStartAddr[6], pucStartAddr[7], pucStartAddr[8]);
  155. break;
  156. case 10:
  157. DBGFUNC(u4DbgIndex, ucDbgClass,
  158. "(%08x) %02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x\n",
  159. (ULONG) pucStartAddr, pucStartAddr[0], pucStartAddr[1],
  160. pucStartAddr[2], pucStartAddr[3], pucStartAddr[4],
  161. pucStartAddr[5], pucStartAddr[6], pucStartAddr[7],
  162. pucStartAddr[8], pucStartAddr[9]);
  163. break;
  164. case 11:
  165. DBGFUNC(u4DbgIndex, ucDbgClass,
  166. "(%08x) %02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x\n",
  167. (ULONG) pucStartAddr, pucStartAddr[0], pucStartAddr[1],
  168. pucStartAddr[2], pucStartAddr[3], pucStartAddr[4],
  169. pucStartAddr[5], pucStartAddr[6], pucStartAddr[7],
  170. pucStartAddr[8], pucStartAddr[9], pucStartAddr[10]);
  171. break;
  172. case 12:
  173. DBGFUNC(u4DbgIndex, ucDbgClass,
  174. "(%08x) %02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x\n",
  175. (ULONG) pucStartAddr, pucStartAddr[0], pucStartAddr[1],
  176. pucStartAddr[2], pucStartAddr[3], pucStartAddr[4],
  177. pucStartAddr[5], pucStartAddr[6], pucStartAddr[7],
  178. pucStartAddr[8], pucStartAddr[9], pucStartAddr[10], pucStartAddr[11]);
  179. break;
  180. case 13:
  181. DBGFUNC(u4DbgIndex, ucDbgClass,
  182. "(%08x) %02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x %02x\n",
  183. (ULONG) pucStartAddr, pucStartAddr[0], pucStartAddr[1],
  184. pucStartAddr[2], pucStartAddr[3], pucStartAddr[4],
  185. pucStartAddr[5], pucStartAddr[6], pucStartAddr[7],
  186. pucStartAddr[8], pucStartAddr[9], pucStartAddr[10],
  187. pucStartAddr[11], pucStartAddr[12]);
  188. break;
  189. case 14:
  190. DBGFUNC(u4DbgIndex, ucDbgClass,
  191. "(%08x) %02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x %02x %02x\n",
  192. (ULONG) pucStartAddr, pucStartAddr[0], pucStartAddr[1],
  193. pucStartAddr[2], pucStartAddr[3], pucStartAddr[4],
  194. pucStartAddr[5], pucStartAddr[6], pucStartAddr[7],
  195. pucStartAddr[8], pucStartAddr[9], pucStartAddr[10],
  196. pucStartAddr[11], pucStartAddr[12], pucStartAddr[13]);
  197. break;
  198. case 15:
  199. DBGFUNC(u4DbgIndex, ucDbgClass,
  200. "(%08x) %02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x %02x %02x %02x\n",
  201. (ULONG) pucStartAddr, pucStartAddr[0], pucStartAddr[1],
  202. pucStartAddr[2], pucStartAddr[3], pucStartAddr[4],
  203. pucStartAddr[5], pucStartAddr[6], pucStartAddr[7],
  204. pucStartAddr[8], pucStartAddr[9], pucStartAddr[10],
  205. pucStartAddr[11], pucStartAddr[12], pucStartAddr[13], pucStartAddr[14]);
  206. break;
  207. default:
  208. break;
  209. }
  210. u4Length = 0;
  211. }
  212. }
  213. DBGFUNC(u4DbgIndex, ucDbgClass, "\n");
  214. } /* end of dumpMemory8() */
  215. /*----------------------------------------------------------------------------*/
  216. /*!
  217. * \brief This routine is called to dump a segment of memory in double words.
  218. *
  219. * \param[in] pucStartAddr Pointer to the starting address of the memory to be dumped.
  220. * \param[in] u4Length Length of the memory to be dumped.
  221. *
  222. * \return (none)
  223. */
  224. /*----------------------------------------------------------------------------*/
  225. VOID dumpMemory32(IN UINT_32 u4DbgIndex, IN UINT_8 ucDbgClass, IN PUINT_32 pu4StartAddr, IN UINT_32 u4Length)
  226. {
  227. PUINT_8 pucAddr;
  228. ASSERT(pu4StartAddr);
  229. DBGFUNC(u4DbgIndex, ucDbgClass, "DUMP32 ADDRESS: %08x, Length: %d\n", (ULONG) pu4StartAddr, u4Length);
  230. if (IS_NOT_ALIGN_4((ULONG) pu4StartAddr)) {
  231. UINT_32 u4ProtrudeLen = sizeof(UINT_32) - ((ULONG) pu4StartAddr % 4);
  232. u4ProtrudeLen = ((u4Length < u4ProtrudeLen) ? u4Length : u4ProtrudeLen);
  233. DBGFUNC(u4DbgIndex, ucDbgClass, "pu4StartAddr is not at DW boundary.\n");
  234. pucAddr = (PUINT_8) &pu4StartAddr[0];
  235. switch (u4ProtrudeLen) {
  236. case 1:
  237. DBGFUNC(u4DbgIndex, ucDbgClass, "(%08x) %02x------\n", (ULONG) pu4StartAddr, pucAddr[0]);
  238. break;
  239. case 2:
  240. DBGFUNC(u4DbgIndex, ucDbgClass, "(%08x) %02x%02x----\n",
  241. (ULONG) pu4StartAddr, pucAddr[1], pucAddr[0]);
  242. break;
  243. case 3:
  244. DBGFUNC(u4DbgIndex, ucDbgClass, "(%08x) %02x%02x%02x--\n",
  245. (ULONG) pu4StartAddr, pucAddr[2], pucAddr[1], pucAddr[0]);
  246. break;
  247. default:
  248. break;
  249. }
  250. u4Length -= u4ProtrudeLen;
  251. pu4StartAddr = (PUINT_32) ((ULONG) pu4StartAddr + u4ProtrudeLen);
  252. }
  253. while (u4Length > 0) {
  254. if (u4Length >= 16) {
  255. DBGFUNC(u4DbgIndex, ucDbgClass, "(%08x) %08x %08x %08x %08x\n",
  256. (ULONG) pu4StartAddr,
  257. pu4StartAddr[0], pu4StartAddr[1],
  258. pu4StartAddr[2], pu4StartAddr[3]);
  259. pu4StartAddr += 4;
  260. u4Length -= 16;
  261. } else {
  262. switch (u4Length) {
  263. case 1:
  264. pucAddr = (PUINT_8) &pu4StartAddr[0];
  265. DBGFUNC(u4DbgIndex, ucDbgClass, "(%08x) ------%02x\n",
  266. (ULONG) pu4StartAddr, pucAddr[0]);
  267. break;
  268. case 2:
  269. pucAddr = (PUINT_8) &pu4StartAddr[0];
  270. DBGFUNC(u4DbgIndex, ucDbgClass, "(%08x) ----%02x%02x\n",
  271. (ULONG) pu4StartAddr, pucAddr[1], pucAddr[0]);
  272. break;
  273. case 3:
  274. pucAddr = (PUINT_8) &pu4StartAddr[0];
  275. DBGFUNC(u4DbgIndex, ucDbgClass, "(%08x) --%02x%02x%02x\n",
  276. (ULONG) pu4StartAddr,
  277. pucAddr[2], pucAddr[1], pucAddr[0]);
  278. break;
  279. case 4:
  280. DBGFUNC(u4DbgIndex, ucDbgClass, "(%08x) %08x\n",
  281. (ULONG) pu4StartAddr, pu4StartAddr[0]);
  282. break;
  283. case 5:
  284. pucAddr = (PUINT_8) &pu4StartAddr[1];
  285. DBGFUNC(u4DbgIndex, ucDbgClass, "(%08x) %08x ------%02x\n",
  286. (ULONG) pu4StartAddr, pu4StartAddr[0], pucAddr[0]);
  287. break;
  288. case 6:
  289. pucAddr = (PUINT_8) &pu4StartAddr[1];
  290. DBGFUNC(u4DbgIndex, ucDbgClass, "(%08x) %08x ----%02x%02x\n",
  291. (ULONG) pu4StartAddr,
  292. pu4StartAddr[0], pucAddr[1], pucAddr[0]);
  293. break;
  294. case 7:
  295. pucAddr = (PUINT_8) &pu4StartAddr[1];
  296. DBGFUNC(u4DbgIndex, ucDbgClass, "(%08x) %08x --%02x%02x%02x\n",
  297. (ULONG) pu4StartAddr,
  298. pu4StartAddr[0], pucAddr[2], pucAddr[1], pucAddr[0]);
  299. break;
  300. case 8:
  301. DBGFUNC(u4DbgIndex, ucDbgClass, "(%08x) %08x %08x\n",
  302. (ULONG) pu4StartAddr,
  303. pu4StartAddr[0], pu4StartAddr[1]);
  304. break;
  305. case 9:
  306. pucAddr = (PUINT_8) &pu4StartAddr[2];
  307. DBGFUNC(u4DbgIndex, ucDbgClass, "(%08x) %08x %08x ------%02x\n",
  308. (ULONG) pu4StartAddr,
  309. pu4StartAddr[0], pu4StartAddr[1], pucAddr[0]);
  310. break;
  311. case 10:
  312. pucAddr = (PUINT_8) &pu4StartAddr[2];
  313. DBGFUNC(u4DbgIndex, ucDbgClass,
  314. "(%08x) %08x %08x ----%02x%02x\n",
  315. (ULONG) pu4StartAddr, pu4StartAddr[0], pu4StartAddr[1],
  316. pucAddr[1], pucAddr[0]);
  317. break;
  318. case 11:
  319. pucAddr = (PUINT_8) &pu4StartAddr[2];
  320. DBGFUNC(u4DbgIndex, ucDbgClass,
  321. "(%08x) %08x %08x --%02x%02x%02x\n",
  322. (ULONG) pu4StartAddr, pu4StartAddr[0], pu4StartAddr[1],
  323. pucAddr[2], pucAddr[1], pucAddr[0]);
  324. break;
  325. case 12:
  326. DBGFUNC(u4DbgIndex, ucDbgClass, "(%08x) %08x %08x %08x\n",
  327. (ULONG) pu4StartAddr,
  328. pu4StartAddr[0], pu4StartAddr[1], pu4StartAddr[2]);
  329. break;
  330. case 13:
  331. pucAddr = (PUINT_8) &pu4StartAddr[3];
  332. DBGFUNC(u4DbgIndex, ucDbgClass,
  333. "(%08x) %08x %08x %08x ------%02x\n",
  334. (ULONG) pu4StartAddr, pu4StartAddr[0], pu4StartAddr[1],
  335. pu4StartAddr[2], pucAddr[0]);
  336. break;
  337. case 14:
  338. pucAddr = (PUINT_8) &pu4StartAddr[3];
  339. DBGFUNC(u4DbgIndex, ucDbgClass,
  340. "(%08x) %08x %08x %08x ----%02x%02x\n",
  341. (ULONG) pu4StartAddr, pu4StartAddr[0], pu4StartAddr[1],
  342. pu4StartAddr[2], pucAddr[1], pucAddr[0]);
  343. break;
  344. case 15:
  345. pucAddr = (PUINT_8) &pu4StartAddr[3];
  346. DBGFUNC(u4DbgIndex, ucDbgClass,
  347. "(%08x) %08x %08x %08x --%02x%02x%02x\n",
  348. (ULONG) pu4StartAddr, pu4StartAddr[0], pu4StartAddr[1],
  349. pu4StartAddr[2], pucAddr[2], pucAddr[1], pucAddr[0]);
  350. break;
  351. default:
  352. break;
  353. }
  354. u4Length = 0;
  355. }
  356. }
  357. } /* end of dumpMemory32() */