• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 /*@************************************************************
27  * include files
28  * ************************************************************
29  */
30 
31 #include "mp_precomp.h"
32 #include "phydm_precomp.h"
33 
halrf_basic_profile(void * dm_void,u32 * _used,char * output,u32 * _out_len)34 void halrf_basic_profile(void *dm_void, u32 *_used, char *output, u32 *_out_len)
35 {
36 #ifdef CONFIG_PHYDM_DEBUG_FUNCTION
37 	struct dm_struct *dm = (struct dm_struct *)dm_void;
38 	u32 used = *_used;
39 	u32 out_len = *_out_len;
40 	u32 rf_release_ver = 0;
41 
42 	switch (dm->support_ic_type) {
43 #if (RTL8814A_SUPPORT)
44 	case ODM_RTL8814A:
45 		rf_release_ver = RF_RELEASE_VERSION_8814A;
46 		break;
47 #endif
48 
49 #if (RTL8821C_SUPPORT)
50 	case ODM_RTL8821C:
51 		rf_release_ver = RF_RELEASE_VERSION_8821C;
52 		break;
53 #endif
54 
55 #if (RTL8822B_SUPPORT)
56 	case ODM_RTL8822B:
57 		rf_release_ver = RF_RELEASE_VERSION_8822B;
58 		break;
59 #endif
60 
61 #if (RTL8822C_SUPPORT)
62 	case ODM_RTL8822C:
63 		rf_release_ver = RF_RELEASE_VERSION_8822C;
64 		break;
65 #endif
66 
67 #if (RTL8814B_SUPPORT)
68 	case ODM_RTL8814B:
69 		rf_release_ver = RF_RELEASE_VERSION_8814B;
70 		break;
71 #endif
72 
73 #if (RTL8812F_SUPPORT)
74 	case ODM_RTL8812F:
75 		rf_release_ver = RF_RELEASE_VERSION_8812F;
76 		break;
77 #endif
78 
79 #if (RTL8198F_SUPPORT)
80 	case ODM_RTL8198F:
81 		rf_release_ver = RF_RELEASE_VERSION_8198F;
82 		break;
83 #endif
84 
85 #if (RTL8197F_SUPPORT)
86 	case ODM_RTL8197F:
87 		rf_release_ver = RF_RELEASE_VERSION_8197F;
88 		break;
89 #endif
90 
91 #if (RTL8192F_SUPPORT)
92 	case ODM_RTL8192F:
93 		rf_release_ver = RF_RELEASE_VERSION_8192F;
94 		break;
95 #endif
96 
97 #if (RTL8710B_SUPPORT)
98 	case ODM_RTL8710B:
99 		rf_release_ver = RF_RELEASE_VERSION_8710B;
100 		break;
101 #endif
102 
103 #if (RTL8195B_SUPPORT)
104 	case ODM_RTL8195B:
105 		rf_release_ver = RF_RELEASE_VERSION_8195B;
106 		break;
107 #endif
108 	}
109 
110 	PDM_SNPF(out_len, used, output + used, out_len - used, "  %-35s: %d\n",
111 		 "RF Para Release Ver", rf_release_ver);
112 
113 	/* HAL RF version List */
114 	PDM_SNPF(out_len, used, output + used, out_len - used, "%-35s\n",
115 		 "% HAL RF version %");
116 	PDM_SNPF(out_len, used, output + used, out_len - used, "  %-35s: %s\n",
117 		 "Power Tracking", HALRF_POWRTRACKING_VER);
118 	PDM_SNPF(out_len, used, output + used, out_len - used,
119 		 "  %-35s: %s %s\n", "IQK",
120 		 (dm->fw_offload_ability & PHYDM_RF_IQK_OFFLOAD) ? "FW" :
121 		 HALRF_IQK_VER,
122 		 (halrf_match_iqk_version(dm_void)) ? "(match)" : "(mismatch)");
123 
124 	PDM_SNPF(out_len, used, output + used, out_len - used, "  %-35s: %s\n",
125 		 "LCK", HALRF_LCK_VER);
126 	PDM_SNPF(out_len, used, output + used, out_len - used, "  %-35s: %s\n",
127 		 "DPK", HALRF_DPK_VER);
128 	PDM_SNPF(out_len, used, output + used, out_len - used, "  %-35s: %s\n",
129 		 "TSSI", HALRF_TSSI_VER);
130 	PDM_SNPF(out_len, used, output + used, out_len - used, "  %-35s: %s\n",
131 		 "KFREE", HALRF_KFREE_VER);
132 	PDM_SNPF(out_len, used, output + used, out_len - used, "  %-35s: %s\n",
133 		 "TX 2G Current Calibration", HALRF_PABIASK_VER);
134 	PDM_SNPF(out_len, used, output + used, out_len - used, "  %-35s: %s\n",
135 		 "RFK Init. Parameter", HALRF_RFK_INIT_VER);
136 
137 	*_used = used;
138 	*_out_len = out_len;
139 #endif
140 }
141 
halrf_debug_trace(void * dm_void,char input[][16],u32 * _used,char * output,u32 * _out_len)142 void halrf_debug_trace(void *dm_void, char input[][16], u32 *_used,
143 		       char *output, u32 *_out_len)
144 {
145 	struct dm_struct *dm = (struct dm_struct *)dm_void;
146 	struct _hal_rf_ *rf = &dm->rf_table;
147 	u32 one = 1;
148 	u32 used = *_used;
149 	u32 out_len = *_out_len;
150 	u32 rf_var[10] = {0};
151 	u8 i;
152 
153 	for (i = 0; i < 5; i++)
154 		if (input[i + 1])
155 			PHYDM_SSCANF(input[i + 2], DCMD_DECIMAL, &rf_var[i]);
156 
157 	if (rf_var[0] == 100) {
158 		PDM_SNPF(out_len, used, output + used, out_len - used,
159 			 "\n[DBG MSG] RF Selection\n");
160 		PDM_SNPF(out_len, used, output + used, out_len - used,
161 			 "00. (( %s ))TX_PWR_TRACK\n",
162 			 ((rf->rf_dbg_comp & DBG_RF_TX_PWR_TRACK) ? ("V") :
163 			 (".")));
164 		PDM_SNPF(out_len, used, output + used, out_len - used,
165 			 "01. (( %s ))IQK\n",
166 			 ((rf->rf_dbg_comp & DBG_RF_IQK) ? ("V") : (".")));
167 		PDM_SNPF(out_len, used, output + used, out_len - used,
168 			 "02. (( %s ))LCK\n",
169 			 ((rf->rf_dbg_comp & DBG_RF_LCK) ? ("V") : (".")));
170 		PDM_SNPF(out_len, used, output + used, out_len - used,
171 			 "03. (( %s ))DPK\n",
172 			 ((rf->rf_dbg_comp & DBG_RF_DPK) ? ("V") : (".")));
173 		PDM_SNPF(out_len, used, output + used, out_len - used,
174 			 "04. (( %s ))TXGAPK\n",
175 			 ((rf->rf_dbg_comp & DBG_RF_TXGAPK) ? ("V") : (".")));
176 		PDM_SNPF(out_len, used, output + used, out_len - used,
177 			 "06. (( %s ))DPK_TRACK\n",
178 			 ((rf->rf_dbg_comp & DBG_RF_DPK_TRACK) ? ("V") : (".")));
179 		PDM_SNPF(out_len, used, output + used, out_len - used,
180 			 "29. (( %s ))MP\n",
181 			 ((rf->rf_dbg_comp & DBG_RF_MP) ? ("V") : (".")));
182 		PDM_SNPF(out_len, used, output + used, out_len - used,
183 			 "30. (( %s ))TMP\n",
184 			 ((rf->rf_dbg_comp & DBG_RF_TMP) ? ("V") : (".")));
185 		PDM_SNPF(out_len, used, output + used, out_len - used,
186 			 "31. (( %s ))INIT\n",
187 			 ((rf->rf_dbg_comp & DBG_RF_INIT) ? ("V") : (".")));
188 
189 	} else if (rf_var[0] == 101) {
190 		rf->rf_dbg_comp = 0;
191 		PDM_SNPF(out_len, used, output + used, out_len - used,
192 			 "Disable all DBG COMP\n");
193 	} else {
194 		if (rf_var[1] == 1) /*enable*/
195 			rf->rf_dbg_comp |= (one << rf_var[0]);
196 		else if (rf_var[1] == 2) /*disable*/
197 			rf->rf_dbg_comp &= ~(one << rf_var[0]);
198 	}
199 	PDM_SNPF(out_len, used, output + used, out_len - used,
200 		 "\nCurr-RF_Dbg_Comp = 0x%x\n", rf->rf_dbg_comp);
201 
202 	*_used = used;
203 	*_out_len = out_len;
204 }
205 
halrf_dack_debug_cmd(void * dm_void,char input[][16])206 void halrf_dack_debug_cmd(void *dm_void, char input[][16])
207 {
208 	struct dm_struct *dm = (struct dm_struct *)dm_void;
209 	struct _hal_rf_ *rf = &dm->rf_table;
210 	u32 dm_value[10] = {0};
211 	u8 i;
212 
213 	for (i = 0; i < 7; i++)
214 		if (input[i + 1])
215 			PHYDM_SSCANF(input[i + 2], DCMD_DECIMAL, &dm_value[i]);
216 
217 	if (dm_value[0] == 1)
218 		halrf_dack_trigger(dm, true);
219 	else
220 		halrf_dack_trigger(dm, false);
221 }
222 
223 struct halrf_command {
224 	char name[16];
225 	u8 id;
226 };
227 
228 enum halrf_CMD_ID {
229 	HALRF_HELP,
230 	HALRF_SUPPORTABILITY,
231 	HALRF_DBG_COMP,
232 	HALRF_PROFILE,
233 	HALRF_IQK_INFO,
234 	HALRF_IQK,
235 	HALRF_IQK_DEBUG,
236 	HALRF_DPK,
237 	HALRF_DACK,
238 	HALRF_DACK_DEBUG,
239 	HALRF_DUMP_RFK_REG,
240 #ifdef CONFIG_2G_BAND_SHIFT
241 	HAL_BAND_SHIFT,
242 #endif
243 };
244 
245 struct halrf_command halrf_cmd_ary[] = {
246 	{"-h", HALRF_HELP},
247 	{"ability", HALRF_SUPPORTABILITY},
248 	{"dbg", HALRF_DBG_COMP},
249 	{"profile", HALRF_PROFILE},
250 	{"iqk_info", HALRF_IQK_INFO},
251 	{"iqk", HALRF_IQK},
252 	{"iqk_dbg", HALRF_IQK_DEBUG},
253 	{"dpk", HALRF_DPK},
254 	{"dack", HALRF_DACK},
255 	{"dack_dbg", HALRF_DACK_DEBUG},
256 	{"dump_rfk_reg", HALRF_DUMP_RFK_REG},
257 #ifdef CONFIG_2G_BAND_SHIFT
258 	{"band_shift", HAL_BAND_SHIFT},
259 #endif
260 };
261 
halrf_cmd_parser(void * dm_void,char input[][16],u32 * _used,char * output,u32 * _out_len,u32 input_num)262 void halrf_cmd_parser(void *dm_void, char input[][16], u32 *_used, char *output,
263 		      u32 *_out_len, u32 input_num)
264 {
265 	struct dm_struct *dm = (struct dm_struct *)dm_void;
266 #ifdef CONFIG_PHYDM_DEBUG_FUNCTION
267 	u8 id = 0;
268 	u32 rf_var[10] = {0};
269 	u32 i, input_idx = 0;
270 	u32 halrf_ary_size =
271 			sizeof(halrf_cmd_ary) / sizeof(struct halrf_command);
272 	u32 used = *_used;
273 	u32 out_len = *_out_len;
274 
275 	/* Parsing Cmd ID */
276 	for (i = 0; i < halrf_ary_size; i++) {
277 		if (strcmp(halrf_cmd_ary[i].name, input[1]) == 0) {
278 			id = halrf_cmd_ary[i].id;
279 			break;
280 		}
281 	}
282 
283 	if (i == halrf_ary_size) {
284 		PDM_SNPF(out_len, used, output + used, out_len - used,
285 			 "RF Cmd not found\n");
286 		return;
287 	}
288 
289 	switch (id) {
290 	case HALRF_HELP:
291 		PDM_SNPF(out_len, used, output + used, out_len - used,
292 			 "RF cmd ==>\n");
293 
294 		for (i = 0; i < halrf_ary_size - 1; i++) {
295 			PDM_SNPF(out_len, used, output + used, out_len - used,
296 				 "  %-5d: %s\n", i, halrf_cmd_ary[i + 1].name);
297 		}
298 		break;
299 	case HALRF_SUPPORTABILITY:
300 		halrf_support_ability_debug(dm, &input[0], &used, output,
301 					    &out_len);
302 		break;
303 #ifdef CONFIG_2G_BAND_SHIFT
304 	case HAL_BAND_SHIFT:
305 		halrf_support_band_shift_debug(dm, &input[0], &used, output,
306 					       &out_len);
307 		break;
308 #endif
309 	case HALRF_DBG_COMP:
310 		halrf_debug_trace(dm, &input[0], &used, output, &out_len);
311 		break;
312 	case HALRF_PROFILE:
313 		halrf_basic_profile(dm, &used, output, &out_len);
314 		break;
315 	case HALRF_IQK_INFO:
316 #if (RTL8822B_SUPPORT == 1 || RTL8821C_SUPPORT == 1)
317 		halrf_iqk_info_dump(dm, &used, output, &out_len);
318 #endif
319 		break;
320 	case HALRF_IQK:
321 		PDM_SNPF(out_len, used, output + used, out_len - used,
322 			 "TRX IQK Trigger\n");
323 		halrf_iqk_trigger(dm, false);
324 #if (RTL8822B_SUPPORT == 1 || RTL8821C_SUPPORT == 1)
325 		halrf_iqk_info_dump(dm, &used, output, &out_len);
326 #endif
327 		break;
328 	case HALRF_IQK_DEBUG:
329 		PDM_SNPF(out_len, used, output + used, out_len - used,
330 			 "IQK DEBUG!!!!!\n");
331 		for (i = 0; i < 5; i++) {
332 			if (input[i + 1]) {
333 				PHYDM_SSCANF(input[i + 2], DCMD_HEX,
334 					     &rf_var[i]);
335 				input_idx++;
336 			}
337 		}
338 
339 		if (input_idx >= 1) {
340 #if (RTL8822B_SUPPORT == 1 || RTL8821C_SUPPORT == 1 || RTL8822C_SUPPORT == 1 || RTL8814B_SUPPORT == 1)
341 			if (dm->support_ic_type & (ODM_RTL8822B | ODM_RTL8821C | ODM_RTL8822C | ODM_RTL8814B))
342 				halrf_iqk_debug(dm, (u32 *)rf_var, &used,
343 						output, &out_len);
344 #endif
345 		}
346 		break;
347 	case HALRF_DPK:
348 		halrf_dpk_debug_cmd(dm, input, &used, output, &out_len);
349 		break;
350 	case HALRF_DACK:
351 		PDM_SNPF(out_len, used, output + used, out_len - used,
352 			 "DACK Trigger\n");
353 		halrf_dack_debug_cmd(dm, &input[0]);
354 		break;
355 	case HALRF_DACK_DEBUG:
356 		PDM_SNPF(out_len, used, output + used, out_len - used,
357 			 "DACK DEBUG\n");
358 		halrf_dack_dbg(dm);
359 		break;
360 	case HALRF_DUMP_RFK_REG:
361 		halrf_dump_rfk_reg(dm, input, &used, output, &out_len);
362 		break;
363 	default:
364 		break;
365 	}
366 
367 	*_used = used;
368 	*_out_len = out_len;
369 #endif
370 }
371 
halrf_init_debug_setting(void * dm_void)372 void halrf_init_debug_setting(void *dm_void)
373 {
374 	struct dm_struct *dm = (struct dm_struct *)dm_void;
375 	struct _hal_rf_ *rf = &dm->rf_table;
376 
377 	rf->rf_dbg_comp =
378 
379 	DBG_RF_RFK		|
380 #if DBG
381 #if 1
382 	/*DBG_RF_TX_PWR_TRACK	| */
383 	/*DBG_RF_IQK		| */
384 	/*DBG_RF_LCK		| */
385 	/*DBG_RF_DPK		| */
386 	/*DBG_RF_TXGAPK		| */
387 	/*DBG_RF_DACK		| */
388 	/*DBG_RF_DPK_TRACK	| */
389 	/*DBG_RF_MP		| */
390 	/*DBG_RF_TMP		| */
391 	/*DBG_RF_INIT		| */
392 #endif
393 #endif
394 	0;
395 }
396