halrf_debug.c 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. /******************************************************************************
  2. *
  3. * Copyright(c) 2007 - 2017 Realtek Corporation.
  4. *
  5. * This program is free software; you can redistribute it and/or modify it
  6. * under the terms of version 2 of the GNU General Public License as
  7. * published by the Free Software Foundation.
  8. *
  9. * This program is distributed in the hope that it will be useful, but WITHOUT
  10. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11. * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
  12. * more details.
  13. *
  14. * The full GNU General Public License is included in this distribution in the
  15. * file called LICENSE.
  16. *
  17. * Contact Information:
  18. * wlanfae <wlanfae@realtek.com>
  19. * Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park,
  20. * Hsinchu 300, Taiwan.
  21. *
  22. * Larry Finger <Larry.Finger@lwfinger.net>
  23. *
  24. *****************************************************************************/
  25. /* ************************************************************
  26. * include files
  27. * ************************************************************
  28. */
  29. #include "mp_precomp.h"
  30. #include "phydm_precomp.h"
  31. void halrf_basic_profile(void *dm_void, u32 *_used, char *output, u32 *_out_len)
  32. {
  33. #ifdef CONFIG_PHYDM_DEBUG_FUNCTION
  34. struct dm_struct *dm = (struct dm_struct *)dm_void;
  35. u32 used = *_used;
  36. u32 out_len = *_out_len;
  37. /* HAL RF version List */
  38. PDM_SNPF(out_len, used, output + used, out_len - used, "%-35s\n",
  39. "% HAL RF version %");
  40. PDM_SNPF(out_len, used, output + used, out_len - used, " %-35s: %s\n",
  41. "Power Tracking", HALRF_POWRTRACKING_VER);
  42. PDM_SNPF(out_len, used, output + used, out_len - used,
  43. " %-35s: %s %s\n", "IQK",
  44. (dm->fw_offload_ability & PHYDM_RF_IQK_OFFLOAD) ? "FW" :
  45. HALRF_IQK_VER,
  46. (halrf_match_iqk_version(dm_void)) ? "(match)" : "(mismatch)");
  47. PDM_SNPF(out_len, used, output + used, out_len - used, " %-35s: %s\n",
  48. "LCK", HALRF_LCK_VER);
  49. PDM_SNPF(out_len, used, output + used, out_len - used, " %-35s: %s\n",
  50. "DPK", HALRF_DPK_VER);
  51. PDM_SNPF(out_len, used, output + used, out_len - used, " %-35s: %s\n",
  52. "KFREE", HALRF_KFREE_VER);
  53. PDM_SNPF(out_len, used, output + used, out_len - used, " %-35s: %s\n",
  54. "TX 2G Current Calibration", HALRF_PABIASK_VER);
  55. PDM_SNPF(out_len, used, output + used, out_len - used, " %-35s: %s\n",
  56. "RFK Init. Parameter", HALRF_RFK_INIT_VER);
  57. *_used = used;
  58. *_out_len = out_len;
  59. #endif
  60. }
  61. void halrf_debug_trace(void *dm_void, char input[][16], u32 *_used,
  62. char *output, u32 *_out_len)
  63. {
  64. struct dm_struct *dm = (struct dm_struct *)dm_void;
  65. struct _hal_rf_ *rf = &dm->rf_table;
  66. u32 one = 1;
  67. u32 used = *_used;
  68. u32 out_len = *_out_len;
  69. u32 rf_var[10] = {0};
  70. u8 i;
  71. for (i = 0; i < 5; i++)
  72. if (input[i + 1])
  73. PHYDM_SSCANF(input[i + 2], DCMD_DECIMAL, &rf_var[i]);
  74. if (rf_var[0] == 100) {
  75. PDM_SNPF(out_len, used, output + used, out_len - used,
  76. "\n[DBG MSG] RF Selection\n");
  77. PDM_SNPF(out_len, used, output + used, out_len - used,
  78. "00. (( %s ))TX_PWR_TRACK\n",
  79. ((rf->rf_dbg_comp & DBG_RF_TX_PWR_TRACK) ? ("V") :
  80. (".")));
  81. PDM_SNPF(out_len, used, output + used, out_len - used,
  82. "01. (( %s ))IQK\n",
  83. ((rf->rf_dbg_comp & DBG_RF_IQK) ? ("V") : (".")));
  84. PDM_SNPF(out_len, used, output + used, out_len - used,
  85. "02. (( %s ))LCK\n",
  86. ((rf->rf_dbg_comp & DBG_RF_LCK) ? ("V") : (".")));
  87. PDM_SNPF(out_len, used, output + used, out_len - used,
  88. "03. (( %s ))DPK\n",
  89. ((rf->rf_dbg_comp & DBG_RF_DPK) ? ("V") : (".")));
  90. PDM_SNPF(out_len, used, output + used, out_len - used,
  91. "04. (( %s ))TXGAPK\n",
  92. ((rf->rf_dbg_comp & DBG_RF_TXGAPK) ? ("V") : (".")));
  93. PDM_SNPF(out_len, used, output + used, out_len - used,
  94. "29. (( %s ))MP\n",
  95. ((rf->rf_dbg_comp & DBG_RF_MP) ? ("V") : (".")));
  96. PDM_SNPF(out_len, used, output + used, out_len - used,
  97. "30. (( %s ))TMP\n",
  98. ((rf->rf_dbg_comp & DBG_RF_TMP) ? ("V") : (".")));
  99. PDM_SNPF(out_len, used, output + used, out_len - used,
  100. "31. (( %s ))INIT\n",
  101. ((rf->rf_dbg_comp & DBG_RF_INIT) ? ("V") : (".")));
  102. } else if (rf_var[0] == 101) {
  103. rf->rf_dbg_comp = 0;
  104. PDM_SNPF(out_len, used, output + used, out_len - used,
  105. "Disable all DBG COMP\n");
  106. } else {
  107. if (rf_var[1] == 1) /*enable*/
  108. rf->rf_dbg_comp |= (one << rf_var[0]);
  109. else if (rf_var[1] == 2) /*disable*/
  110. rf->rf_dbg_comp &= ~(one << rf_var[0]);
  111. }
  112. PDM_SNPF(out_len, used, output + used, out_len - used,
  113. "\nCurr-RF_Dbg_Comp = 0x%x\n", rf->rf_dbg_comp);
  114. *_used = used;
  115. *_out_len = out_len;
  116. }
  117. struct halrf_command {
  118. char name[16];
  119. u8 id;
  120. };
  121. enum halrf_CMD_ID {
  122. HALRF_HELP,
  123. HALRF_SUPPORTABILITY,
  124. HALRF_DBG_COMP,
  125. HALRF_PROFILE,
  126. HALRF_IQK_INFO,
  127. HALRF_IQK,
  128. HALRF_IQK_DEBUG,
  129. };
  130. struct halrf_command halrf_cmd_ary[] = {
  131. {"-h", HALRF_HELP},
  132. {"ability", HALRF_SUPPORTABILITY},
  133. {"dbg", HALRF_DBG_COMP},
  134. {"profile", HALRF_PROFILE},
  135. {"iqk_info", HALRF_IQK_INFO},
  136. {"iqk", HALRF_IQK},
  137. {"iqk_dbg", HALRF_IQK_DEBUG},
  138. };
  139. void halrf_cmd_parser(void *dm_void, char input[][16], u32 *_used, char *output,
  140. u32 *_out_len, u32 input_num)
  141. {
  142. struct dm_struct *dm = (struct dm_struct *)dm_void;
  143. #ifdef CONFIG_PHYDM_DEBUG_FUNCTION
  144. u8 id = 0;
  145. u32 rf_var[10] = {0};
  146. u32 i, input_idx = 0;
  147. u32 halrf_ary_size =
  148. sizeof(halrf_cmd_ary) / sizeof(struct halrf_command);
  149. u32 used = *_used;
  150. u32 out_len = *_out_len;
  151. /* Parsing Cmd ID */
  152. for (i = 0; i < halrf_ary_size; i++) {
  153. if (strcmp(halrf_cmd_ary[i].name, input[1]) == 0) {
  154. id = halrf_cmd_ary[i].id;
  155. break;
  156. }
  157. }
  158. if (i == halrf_ary_size) {
  159. PDM_SNPF(out_len, used, output + used, out_len - used,
  160. "RF Cmd not found\n");
  161. return;
  162. }
  163. switch (id) {
  164. case HALRF_HELP:
  165. PDM_SNPF(out_len, used, output + used, out_len - used,
  166. "RF cmd ==>\n");
  167. for (i = 0; i < halrf_ary_size - 1; i++) {
  168. PDM_SNPF(out_len, used, output + used, out_len - used,
  169. " %-5d: %s\n", i, halrf_cmd_ary[i + 1].name);
  170. }
  171. break;
  172. case HALRF_SUPPORTABILITY:
  173. halrf_support_ability_debug(dm, &input[0], &used, output,
  174. &out_len);
  175. break;
  176. case HALRF_DBG_COMP:
  177. halrf_debug_trace(dm, &input[0], &used, output, &out_len);
  178. break;
  179. case HALRF_PROFILE:
  180. halrf_basic_profile(dm, &used, output, &out_len);
  181. break;
  182. case HALRF_IQK_INFO:
  183. #if (RTL8822B_SUPPORT == 1 || RTL8821C_SUPPORT == 1)
  184. halrf_iqk_info_dump(dm, &used, output, &out_len);
  185. #endif
  186. break;
  187. case HALRF_IQK:
  188. PDM_SNPF(out_len, used, output + used, out_len - used,
  189. "TRX IQK Trigger\n");
  190. halrf_iqk_trigger(dm, false);
  191. #if (RTL8822B_SUPPORT == 1 || RTL8821C_SUPPORT == 1)
  192. halrf_iqk_info_dump(dm, &used, output, &out_len);
  193. #endif
  194. break;
  195. case HALRF_IQK_DEBUG:
  196. for (i = 0; i < 5; i++) {
  197. if (input[i + 1]) {
  198. PHYDM_SSCANF(input[i + 2], DCMD_HEX,
  199. &rf_var[i]);
  200. input_idx++;
  201. }
  202. }
  203. if (input_idx >= 1) {
  204. #if (RTL8822B_SUPPORT == 1 || RTL8821C_SUPPORT == 1)
  205. if (dm->support_ic_type & (ODM_RTL8822B | ODM_RTL8821C))
  206. halrf_iqk_debug(dm, (u32 *)rf_var, &used,
  207. output, &out_len);
  208. #endif
  209. }
  210. break;
  211. default:
  212. break;
  213. }
  214. *_used = used;
  215. *_out_len = out_len;
  216. #endif
  217. }
  218. void halrf_init_debug_setting(void *dm_void)
  219. {
  220. struct dm_struct *dm = (struct dm_struct *)dm_void;
  221. struct _hal_rf_ *rf = &dm->rf_table;
  222. rf->rf_dbg_comp =
  223. #if DBG
  224. #if 0
  225. /*DBG_RF_TX_PWR_TRACK |*/
  226. /*DBG_RF_IQK | */
  227. /*DBG_RF_LCK | */
  228. /*DBG_RF_DPK | */
  229. /*DBG_RF_TXGAPK | */
  230. /*DBG_RF_TMP | */
  231. /*DBG_RF_INIT | */
  232. #endif
  233. #endif
  234. 0;
  235. }