net: wireless: rockchip_wlan: add rtl8723bs support
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8723bs / hal / phydm / phydm_debug.c
1 /******************************************************************************\r
2  *\r
3  * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
4  *\r
5  * This program is free software; you can redistribute it and/or modify it\r
6  * under the terms of version 2 of the GNU General Public License as\r
7  * published by the Free Software Foundation.\r
8  *\r
9  * This program is distributed in the hope that it will be useful, but WITHOUT\r
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
11  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
12  * more details.\r
13  *\r
14  * You should have received a copy of the GNU General Public License along with\r
15  * this program; if not, write to the Free Software Foundation, Inc.,\r
16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
17  *\r
18  *\r
19  ******************************************************************************/\r
20 \r
21 //============================================================\r
22 // include files\r
23 //============================================================\r
24 \r
25 #include "mp_precomp.h"\r
26 #include "phydm_precomp.h"\r
27 \r
28 \r
29 VOID\r
30 PHYDM_InitDebugSetting(\r
31         IN              PDM_ODM_T               pDM_Odm\r
32 )\r
33 {\r
34         pDM_Odm->DebugLevel = ODM_DBG_TRACE;\r
35 \r
36         pDM_Odm->DebugComponents                        =\r
37                 \\r
38 #if DBG\r
39 //BB Functions\r
40 //                                                                      ODM_COMP_DIG                                    |\r
41 //                                                                      ODM_COMP_RA_MASK                                |\r
42 //                                                                      ODM_COMP_DYNAMIC_TXPWR          |\r
43 //                                                                      ODM_COMP_FA_CNT                         |\r
44 //                                                                      ODM_COMP_RSSI_MONITOR                   |\r
45 //                                                                      ODM_COMP_CCK_PD                         |\r
46 /*                                                                      ODM_COMP_ANT_DIV                                |*/\r
47 //                                                                      ODM_COMP_PWR_SAVE                               |\r
48 //                                                                      ODM_COMP_PWR_TRAIN                      |\r
49 //                                                                      ODM_COMP_RATE_ADAPTIVE          |\r
50 //                                                                      ODM_COMP_PATH_DIV                               |\r
51 //                                                                      ODM_COMP_DYNAMIC_PRICCA         |\r
52 //                                                                      ODM_COMP_RXHP                                   |\r
53 //                                                                      ODM_COMP_MP                                     |\r
54 //                                                                      ODM_COMP_CFO_TRACKING           |\r
55 //                                                                      ODM_COMP_ACS                                    |\r
56 //                                                                      PHYDM_COMP_ADAPTIVITY                   |\r
57 //                                                                      PHYDM_COMP_RA_DBG                               |\r
58 /*                                                                      PHYDM_COMP_TXBF                                 |*/\r
59 //MAC Functions\r
60 //                                                                      ODM_COMP_EDCA_TURBO                     |\r
61 //                                                                      ODM_COMP_EARLY_MODE                     |\r
62 /*                                                                      ODM_FW_DEBUG_TRACE                              |*/\r
63 //RF Functions\r
64 //                                                                      ODM_COMP_TX_PWR_TRACK           |\r
65 //                                                                      ODM_COMP_RX_GAIN_TRACK          |\r
66 //                                                                      ODM_COMP_CALIBRATION                    |\r
67 //Common\r
68 /*                                                                      ODM_PHY_CONFIG                                  |*/\r
69 //                                                                      ODM_COMP_COMMON                         |\r
70 //                                                                      ODM_COMP_INIT                                   |\r
71 //                                                                      ODM_COMP_PSD                                    |\r
72 /*                                                                      ODM_COMP_NOISY_DETECT                   |*/\r
73 #endif\r
74                 0;\r
75 \r
76         pDM_Odm->fw_buff_is_enpty = TRUE;\r
77         pDM_Odm->pre_c2h_seq = 0;\r
78 }\r
79 \r
80 #if(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
81 static u1Byte   BbDbgBuf[BB_TMP_BUF_SIZE];\r
82 \r
83 VOID\r
84 phydm_BB_RxHang_Info(IN PDM_ODM_T pDM_Odm)\r
85 {\r
86         u4Byte  value32 = 0;\r
87 \r
88 \r
89         if (pDM_Odm->SupportICType & ODM_IC_11N_SERIES)\r
90                 return;\r
91 \r
92         value32 = ODM_GetBBReg(pDM_Odm, 0xF80 , bMaskDWord);\r
93         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "rptreg of sc/bw/ht/...", value32);\r
94         DCMD_Printf(BbDbgBuf);\r
95 \r
96         /* dbg_port = state machine */\r
97         {\r
98                 ODM_SetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord, 0x007);\r
99                 value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord);\r
100                 rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "0x8fc", value32);\r
101                 DCMD_Printf(BbDbgBuf);\r
102 \r
103                 value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_RPT_11AC , bMaskDWord);\r
104                 rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "state machine", (value32));\r
105                 DCMD_Printf(BbDbgBuf);\r
106         }\r
107 \r
108         /* dbg_port = CCA-related*/\r
109         {\r
110                 ODM_SetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord, 0x204);\r
111                 value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord);\r
112                 rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "0x8fc", value32);\r
113                 DCMD_Printf(BbDbgBuf);\r
114 \r
115                 value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_RPT_11AC , bMaskDWord);\r
116                 rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "CCA-related", (value32));\r
117                 DCMD_Printf(BbDbgBuf);\r
118         }\r
119 \r
120 \r
121         /* dbg_port = edcca/rxd*/\r
122         {\r
123                 ODM_SetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord, 0x278);\r
124                 value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord);\r
125                 rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "0x8fc", value32);\r
126                 DCMD_Printf(BbDbgBuf);\r
127 \r
128                 value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_RPT_11AC , bMaskDWord);\r
129                 rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "edcca/rxd", (value32));\r
130                 DCMD_Printf(BbDbgBuf);\r
131         }\r
132 \r
133         /* dbg_port = rx_state/mux_state/ADC_MASK_OFDM*/\r
134         {\r
135                 ODM_SetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord, 0x290);\r
136                 value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord);\r
137                 rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "0x8fc", value32);\r
138                 DCMD_Printf(BbDbgBuf);\r
139 \r
140                 value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_RPT_11AC , bMaskDWord);\r
141                 rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "rx_state/mux_state/ADC_MASK_OFDM", (value32));\r
142                 DCMD_Printf(BbDbgBuf);\r
143         }\r
144 \r
145         /* dbg_port = bf-related*/\r
146         {\r
147                 ODM_SetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord, 0x2B2);\r
148                 value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord);\r
149                 rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "0x8fc", value32);\r
150                 DCMD_Printf(BbDbgBuf);\r
151 \r
152                 value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_RPT_11AC , bMaskDWord);\r
153                 rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "bf-related", (value32));\r
154                 DCMD_Printf(BbDbgBuf);\r
155         }\r
156 \r
157         /* dbg_port = bf-related*/\r
158         {\r
159                 ODM_SetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord, 0x2B8);\r
160                 value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord);\r
161                 rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "0x8fc", value32);\r
162                 DCMD_Printf(BbDbgBuf);\r
163 \r
164                 value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_RPT_11AC , bMaskDWord);\r
165                 rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "bf-related", (value32));\r
166                 DCMD_Printf(BbDbgBuf);\r
167         }\r
168 \r
169         /* dbg_port = txon/rxd*/\r
170         {\r
171                 ODM_SetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord, 0xA03);\r
172                 value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord);\r
173                 rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "0x8fc", value32);\r
174                 DCMD_Printf(BbDbgBuf);\r
175 \r
176                 value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_RPT_11AC , bMaskDWord);\r
177                 rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "txon/rxd", (value32));\r
178                 DCMD_Printf(BbDbgBuf);\r
179         }\r
180 \r
181         /* dbg_port = l_rate/l_length*/\r
182         {\r
183                 ODM_SetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord, 0xA0B);\r
184                 value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord);\r
185                 rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "0x8fc", value32);\r
186                 DCMD_Printf(BbDbgBuf);\r
187 \r
188                 value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_RPT_11AC , bMaskDWord);\r
189                 rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "l_rate/l_length", (value32));\r
190                 DCMD_Printf(BbDbgBuf);\r
191         }\r
192 \r
193         /* dbg_port = rxd/rxd_hit*/\r
194         {\r
195                 ODM_SetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord, 0xA0D);\r
196                 value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord);\r
197                 rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "0x8fc", value32);\r
198                 DCMD_Printf(BbDbgBuf);\r
199 \r
200                 value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_RPT_11AC , bMaskDWord);\r
201                 rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "rxd/rxd_hit", (value32));\r
202                 DCMD_Printf(BbDbgBuf);\r
203         }\r
204 \r
205         /* dbg_port = dis_cca*/\r
206         {\r
207                 ODM_SetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord, 0xAA0);\r
208                 value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord);\r
209                 rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "0x8fc", value32);\r
210                 DCMD_Printf(BbDbgBuf);\r
211 \r
212                 value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_RPT_11AC , bMaskDWord);\r
213                 rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "dis_cca", (value32));\r
214                 DCMD_Printf(BbDbgBuf);\r
215         }\r
216 \r
217 \r
218         /* dbg_port = tx*/\r
219         {\r
220                 ODM_SetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord, 0xAB0);\r
221                 value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord);\r
222                 rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "0x8fc", value32);\r
223                 DCMD_Printf(BbDbgBuf);\r
224 \r
225                 value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_RPT_11AC , bMaskDWord);\r
226                 rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "tx", (value32));\r
227                 DCMD_Printf(BbDbgBuf);\r
228         }\r
229 \r
230         /* dbg_port = rx plcp*/\r
231         {\r
232                 ODM_SetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord, 0xAD0);\r
233                 value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord);\r
234                 rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "0x8fc", value32);\r
235                 DCMD_Printf(BbDbgBuf);\r
236 \r
237                 value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_RPT_11AC , bMaskDWord);\r
238                 rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "rx plcp", (value32));\r
239                 DCMD_Printf(BbDbgBuf);\r
240 \r
241                 ODM_SetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord, 0xAD1);\r
242                 value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord);\r
243                 rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "0x8fc", value32);\r
244                 DCMD_Printf(BbDbgBuf);\r
245 \r
246                 value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_RPT_11AC , bMaskDWord);\r
247                 rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "rx plcp", (value32));\r
248                 DCMD_Printf(BbDbgBuf);\r
249 \r
250                 ODM_SetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord, 0xAD2);\r
251                 value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord);\r
252                 rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "0x8fc", value32);\r
253                 DCMD_Printf(BbDbgBuf);\r
254 \r
255                 value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_RPT_11AC , bMaskDWord);\r
256                 rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "rx plcp", (value32));\r
257                 DCMD_Printf(BbDbgBuf);\r
258 \r
259                 ODM_SetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord, 0xAD3);\r
260                 value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_DBG_RPT_11AC , bMaskDWord);\r
261                 rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "0x8fc", value32);\r
262                 DCMD_Printf(BbDbgBuf);\r
263 \r
264                 value32 = ODM_GetBBReg(pDM_Odm, ODM_REG_RPT_11AC , bMaskDWord);\r
265                 rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "rx plcp", (value32));\r
266                 DCMD_Printf(BbDbgBuf);\r
267         }\r
268 \r
269 }\r
270 \r
271 VOID\r
272 phydm_BB_Debug_Info(IN PDM_ODM_T pDM_Odm)\r
273 {\r
274 \r
275         u1Byte  RX_HT_BW, RX_VHT_BW, RXSC, RX_HT, RX_BW;\r
276         static u1Byte vRX_BW ;\r
277         u4Byte  value32, value32_1, value32_2, value32_3;\r
278         s4Byte  SFO_A, SFO_B, SFO_C, SFO_D;\r
279         s4Byte  LFO_A, LFO_B, LFO_C, LFO_D;\r
280         static u1Byte   MCSS, Tail, Parity, rsv, vrsv, idx, smooth, htsound, agg, stbc, vstbc, fec, fecext, sgi, sgiext, htltf, vgid, vNsts, vtxops, vrsv2, vbrsv, bf, vbcrc;\r
281         static u2Byte   HLength, htcrc8, Length;\r
282         static u2Byte vpaid;\r
283         static u2Byte   vLength, vhtcrc8, vMCSS, vTail, vbTail;\r
284         static u1Byte   HMCSS, HRX_BW;\r
285 \r
286 \r
287         u1Byte    pwDB;\r
288         s1Byte    RXEVM_0, RXEVM_1, RXEVM_2 ;\r
289         u1Byte    RF_gain_pathA, RF_gain_pathB, RF_gain_pathC, RF_gain_pathD;\r
290         u1Byte    RX_SNR_pathA, RX_SNR_pathB, RX_SNR_pathC, RX_SNR_pathD;\r
291         s4Byte    sig_power;\r
292         const char *RXHT_table[3] = {"legacy", "HT", "VHT"};\r
293         const char *BW_table[3] = {"20M", "40M", "80M"};\r
294         const char *RXSC_table[7] = {"duplicate/full bw", "usc20-1", "lsc20-1", "usc20-2", "lsc20-2",  "usc40", "lsc40"};\r
295 \r
296         const char *L_rate[8] = {"6M", "9M", "12M", "18M", "24M", "36M", "48M", "54M"};\r
297 \r
298 \r
299         /*\r
300         const double evm_comp_20M = 0.579919469776867; //10*log10(64.0/56.0)\r
301         const double evm_comp_40M = 0.503051183113957; //10*log10(128.0/114.0)\r
302         const double evm_comp_80M = 0.244245993314183; //10*log10(256.0/242.0)\r
303         const double evm_comp_160M = 0.244245993314183; //10*log10(512.0/484.0)\r
304            */\r
305 \r
306         if (pDM_Odm->SupportICType & ODM_IC_11N_SERIES)\r
307                 return;\r
308 \r
309         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s\n", "BB Report Info");\r
310         DCMD_Printf(BbDbgBuf);\r
311 \r
312         /*BW & Mode Detection*/\r
313         \r
314         value32 = ODM_GetBBReg(pDM_Odm, 0xf80 , bMaskDWord);\r
315         value32_2 = value32;\r
316         RX_HT_BW = (u1Byte)(value32 & 0x1);\r
317         RX_VHT_BW = (u1Byte)((value32 >> 1) & 0x3);\r
318         RXSC = (u1Byte)(value32 & 0x78);\r
319         value32_1 = (value32 & 0x180) >> 7;\r
320         RX_HT = (u1Byte)(value32_1);\r
321         /*\r
322         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "F80", value32_2);\r
323         DCMD_Printf(BbDbgBuf);\r
324 \r
325         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "RX_HT_BW", RX_HT_BW);\r
326         DCMD_Printf(BbDbgBuf);\r
327 \r
328         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "RX_VHT_BW", RX_VHT_BW);\r
329         DCMD_Printf(BbDbgBuf);\r
330 \r
331         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "RX_SC", RXSC);\r
332         DCMD_Printf(BbDbgBuf);\r
333 \r
334         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "RX_HT", RX_HT);\r
335         DCMD_Printf(BbDbgBuf);\r
336         */\r
337 \r
338         /*rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  RX_HT:%s ", RXHT_table[RX_HT]);*/\r
339         /*DCMD_Printf(BbDbgBuf);*/\r
340         RX_BW = 0;\r
341 \r
342         if (RX_HT == 2) {\r
343                 rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  Mode: VHT Mode");\r
344                 DCMD_Printf(BbDbgBuf);\r
345                 if (RX_VHT_BW == 0) {\r
346                         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "     BW=20M");\r
347                         DCMD_Printf(BbDbgBuf);\r
348                 } else if (RX_VHT_BW == 1) {\r
349                         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "     BW=40M");\r
350                         DCMD_Printf(BbDbgBuf);\r
351                 } else {\r
352                         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "     BW=80M");\r
353                         DCMD_Printf(BbDbgBuf);\r
354                 }\r
355                 RX_BW = RX_VHT_BW;\r
356         } else if (RX_HT == 1) {\r
357                 rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  Mode: HT Mode");\r
358                 DCMD_Printf(BbDbgBuf);\r
359                 if (RX_HT_BW == 0) {\r
360                         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "     BW=20M");\r
361                         DCMD_Printf(BbDbgBuf);\r
362                 } else if (RX_HT_BW == 1) {\r
363                         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "     BW=40M");\r
364                         DCMD_Printf(BbDbgBuf);\r
365                 }\r
366                 RX_BW = RX_HT_BW;\r
367         } else {\r
368                 rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  Mode: Legeacy Mode");\r
369                 DCMD_Printf(BbDbgBuf);\r
370         }\r
371 \r
372         if (RX_HT != 0) {\r
373                 if (RXSC == 0)\r
374                         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  duplicate/full bw");\r
375                 else if (RXSC == 1)\r
376                         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  usc20-1");\r
377                 else if (RXSC == 2)\r
378                         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  lsc20-1");\r
379                 else if (RXSC == 3)\r
380                         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  usc20-2");\r
381                 else if (RXSC == 4)\r
382                         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  lsc20-2");\r
383                 else if (RXSC == 9)\r
384                         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  usc40");\r
385                 else if (RXSC == 10)\r
386                         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  lsc40");\r
387                 DCMD_Printf(BbDbgBuf);\r
388         }\r
389         /*\r
390         if(RX_HT == 2){\r
391                 rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "  BW:%s", BW_table[RX_VHT_BW]);\r
392                 RX_BW = RX_VHT_BW;\r
393                 }\r
394         else if(RX_HT == 1){\r
395                 rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "  BW:%s", BW_table[RX_HT_BW]);\r
396                 RX_BW = RX_HT_BW;\r
397                 }\r
398         else\r
399                 rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE,  "");\r
400         \r
401         DCMD_Printf(BbDbgBuf);  \r
402         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "  RXSC:%s", RXSC_table[RXSC]);\r
403         DCMD_Printf(BbDbgBuf);\r
404         */\r
405 \r
406 \r
407 /*      rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "dB Conversion: 10log(65)", ODM_PWdB_Conversion(65,10,0));*/\r
408 /*      DCMD_Printf(BbDbgBuf);*/\r
409 \r
410         /* RX signal power and AGC related info*/\r
411 \r
412         value32 = ODM_GetBBReg(pDM_Odm, 0xF90 , bMaskDWord);\r
413         pwDB = (u1Byte)((value32 & bMaskByte1) >> 8);\r
414         pwDB = pwDB >> 1;\r
415         sig_power = -110 + pwDB;\r
416         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "OFDM RX Signal Power(dB)", sig_power);\r
417         DCMD_Printf(BbDbgBuf);\r
418 \r
419 \r
420         value32 = ODM_GetBBReg(pDM_Odm, 0xd14 , bMaskDWord);\r
421         RX_SNR_pathA = (u1Byte)(value32 & 0xFF) >> 1;\r
422         RF_gain_pathA = (s1Byte)((value32 & bMaskByte1) >> 8);\r
423         RF_gain_pathA *= 2;\r
424         value32 = ODM_GetBBReg(pDM_Odm, 0xd54 , bMaskDWord);\r
425         RX_SNR_pathB = (u1Byte)(value32 & 0xFF) >> 1;\r
426         RF_gain_pathB = (s1Byte)((value32 & bMaskByte1) >> 8);\r
427         RF_gain_pathB *= 2;\r
428         value32 = ODM_GetBBReg(pDM_Odm, 0xd94 , bMaskDWord);\r
429         RX_SNR_pathC = (u1Byte)(value32 & 0xFF) >> 1;\r
430         RF_gain_pathC = (s1Byte)((value32 & bMaskByte1) >> 8);\r
431         RF_gain_pathC *= 2;\r
432         value32 = ODM_GetBBReg(pDM_Odm, 0xdd4 , bMaskDWord);\r
433         RX_SNR_pathD = (u1Byte)(value32 & 0xFF) >> 1;\r
434         RF_gain_pathD = (s1Byte)((value32 & bMaskByte1) >> 8);\r
435         RF_gain_pathD *= 2;\r
436         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d / %d / %d", "OFDM RX RF Gain(A/B/C/D)", RF_gain_pathA, RF_gain_pathA, RF_gain_pathC, RF_gain_pathD);\r
437         DCMD_Printf(BbDbgBuf);\r
438 \r
439 \r
440         /* RX Counter related info*/\r
441 \r
442         value32 = ODM_GetBBReg(pDM_Odm, 0xF08, bMaskDWord);\r
443         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "OFDM CCA Counter", ((value32&0xFFFF0000)>>16));\r
444         DCMD_Printf(BbDbgBuf);\r
445         \r
446         value32 = ODM_GetBBReg(pDM_Odm, 0xFD0, bMaskDWord);\r
447         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "OFDM SBD Fail Counter", value32&0xFFFF);\r
448         DCMD_Printf(BbDbgBuf);\r
449 \r
450         value32 = ODM_GetBBReg(pDM_Odm, 0xFC4, bMaskDWord);\r
451         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d", "VHT SIGA/SIGB CRC8 Fail Counter", value32&0xFFFF, ((value32&0xFFFF0000)>>16));\r
452         DCMD_Printf(BbDbgBuf);\r
453 \r
454         value32 = ODM_GetBBReg(pDM_Odm, 0xFCC, bMaskDWord);\r
455         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "CCK CCA Counter", value32&0xFFFF);\r
456         DCMD_Printf(BbDbgBuf);\r
457 \r
458         value32 = ODM_GetBBReg(pDM_Odm, 0xFBC, bMaskDWord);\r
459         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d", "LSIG (\"Parity Fail\"/\"Rate Illegal\") Counter", value32&0xFFFF, ((value32&0xFFFF0000)>>16));\r
460         DCMD_Printf(BbDbgBuf);\r
461 \r
462         value32_1 = ODM_GetBBReg(pDM_Odm, 0xFC8, bMaskDWord);\r
463         value32_2 = ODM_GetBBReg(pDM_Odm, 0xFC0, bMaskDWord);\r
464         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d", "HT/VHT MCS NOT SUPPORT counter", ((value32_2&0xFFFF0000)>>16), value32_1&0xFFFF);\r
465         DCMD_Printf(BbDbgBuf);\r
466 \r
467 \r
468         /* PostFFT related info*/\r
469 \r
470 \r
471         value32 = ODM_GetBBReg(pDM_Odm, 0xF8c , bMaskDWord);\r
472         RXEVM_0 = (s1Byte)((value32 & bMaskByte2) >> 16);\r
473         RXEVM_0 /= 2;\r
474         if (RXEVM_0 < -63)\r
475                 RXEVM_0 = 0;\r
476 \r
477         DCMD_Printf(BbDbgBuf);\r
478         RXEVM_1 = (s1Byte)((value32 & bMaskByte3) >> 24);\r
479         RXEVM_1 /= 2;\r
480         value32 = ODM_GetBBReg(pDM_Odm, 0xF88 , bMaskDWord);\r
481         RXEVM_2 = (s1Byte)((value32 & bMaskByte2) >> 16);\r
482         RXEVM_2 /= 2;\r
483 \r
484         if (RXEVM_1 < -63)\r
485                 RXEVM_1 = 0;\r
486         if (RXEVM_2 < -63)\r
487                 RXEVM_2 = 0;\r
488 \r
489         /*\r
490         if(RX_BW == 0){\r
491                 RXEVM_0 -= evm_comp_20M;\r
492                 RXEVM_1 -= evm_comp_20M;\r
493                 RXEVM_2 -= evm_comp_20M;\r
494                 }\r
495         else if(RX_BW == 1){\r
496                 RXEVM_0 -= evm_comp_40M;\r
497                 RXEVM_1 -= evm_comp_40M;\r
498                 RXEVM_2 -= evm_comp_40M;\r
499                 }\r
500         else if (RX_BW == 2){\r
501                 RXEVM_0 -= evm_comp_80M;\r
502                 RXEVM_1 -= evm_comp_80M;\r
503                 RXEVM_2 -= evm_comp_80M;\r
504                 }\r
505                 */\r
506         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d / %d", "RXEVM (1ss/2ss/3ss)", RXEVM_0, RXEVM_1, RXEVM_2);\r
507         DCMD_Printf(BbDbgBuf);\r
508 \r
509 /*      value32 = ODM_GetBBReg(pDM_Odm, 0xD14 ,bMaskDWord);*/\r
510         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d / %d / %d", "RXSNR(A/B/C/D, dB)", RX_SNR_pathA, RX_SNR_pathB, RX_SNR_pathC, RX_SNR_pathD);\r
511         DCMD_Printf(BbDbgBuf);\r
512 /*      rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "B_RXSNR", (value32&0xFF00)>>9);*/\r
513 /*      DCMD_Printf(BbDbgBuf);*/\r
514 \r
515         value32 = ODM_GetBBReg(pDM_Odm, 0xF8C , bMaskDWord);\r
516         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d", "CSI_1st /CSI_2nd", value32&0xFFFF, ((value32&0xFFFF0000)>>16));\r
517         DCMD_Printf(BbDbgBuf);\r
518 \r
519 \r
520         //BW & Mode Detection\r
521 \r
522         //Reset Page F Counter\r
523         ODM_SetBBReg(pDM_Odm, 0xB58 , BIT0, 1);\r
524         ODM_SetBBReg(pDM_Odm, 0xB58 , BIT0, 0);\r
525 \r
526         //CFO Report Info\r
527         //Short CFO\r
528         value32 = ODM_GetBBReg(pDM_Odm, 0xd0c , bMaskDWord);\r
529         value32_1 = ODM_GetBBReg(pDM_Odm, 0xd4c , bMaskDWord);\r
530         value32_2 = ODM_GetBBReg(pDM_Odm, 0xd8c , bMaskDWord);\r
531         value32_3 = ODM_GetBBReg(pDM_Odm, 0xdcc , bMaskDWord);\r
532 \r
533         SFO_A = (s4Byte)(value32 & bMask12Bits);\r
534         SFO_B = (s4Byte)(value32_1 & bMask12Bits);\r
535         SFO_C = (s4Byte)(value32_2 & bMask12Bits);\r
536         SFO_D = (s4Byte)(value32_3 & bMask12Bits);\r
537 \r
538         LFO_A = (s4Byte)(value32 >> 16);\r
539         LFO_B = (s4Byte)(value32_1 >> 16);\r
540         LFO_C = (s4Byte)(value32_2 >> 16);\r
541         LFO_D = (s4Byte)(value32_3 >> 16);\r
542 \r
543         //SFO 2's to dec\r
544         if (SFO_A > 2047)\r
545                 SFO_A = SFO_A - 4096;\r
546         SFO_A = (SFO_A * 312500) / 2048;\r
547 \r
548         if (SFO_B > 2047)\r
549                 SFO_B = SFO_B - 4096;\r
550         SFO_B = (SFO_B * 312500) / 2048;\r
551         if (SFO_C > 2047)\r
552                 SFO_C = SFO_C - 4096;\r
553         SFO_C = (SFO_C * 312500) / 2048;\r
554         if (SFO_D > 2047)\r
555                 SFO_D = SFO_D - 4096;\r
556         SFO_D = (SFO_D * 312500) / 2048;\r
557 \r
558         //LFO 2's to dec\r
559 \r
560         if (LFO_A > 4095)\r
561                 LFO_A = LFO_A - 8192;\r
562 \r
563         if (LFO_B > 4095)\r
564                 LFO_B = LFO_B - 8192;\r
565 \r
566         if (LFO_C > 4095)\r
567                 LFO_C = LFO_C - 8192;\r
568 \r
569         if (LFO_D > 4095)\r
570                 LFO_D = LFO_D - 8192;\r
571         LFO_A = LFO_A * 312500 / 4096;\r
572         LFO_B = LFO_B * 312500 / 4096;\r
573         LFO_C = LFO_C * 312500 / 4096;\r
574         LFO_D = LFO_D * 312500 / 4096;\r
575         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "CFO Report Info");\r
576         DCMD_Printf(BbDbgBuf);\r
577 \r
578         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d/ %d/ %d", "  Short CFO(Hz) <A/B/C/D>", SFO_A, SFO_B, SFO_C, SFO_D);\r
579         DCMD_Printf(BbDbgBuf);\r
580 \r
581         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d/ %d/ %d", "  Long CFO(Hz) <A/B/C/D>", LFO_A, LFO_B, LFO_C, LFO_D);\r
582         DCMD_Printf(BbDbgBuf);\r
583 \r
584         //SCFO\r
585         value32 = ODM_GetBBReg(pDM_Odm, 0xd10 , bMaskDWord);\r
586         value32_1 = ODM_GetBBReg(pDM_Odm, 0xd50 , bMaskDWord);\r
587         value32_2 = ODM_GetBBReg(pDM_Odm, 0xd90 , bMaskDWord);\r
588         value32_3 = ODM_GetBBReg(pDM_Odm, 0xdd0 , bMaskDWord);\r
589 \r
590         SFO_A = (s4Byte)(value32 & 0x7ff);\r
591         SFO_B = (s4Byte)(value32_1 & 0x7ff);\r
592         SFO_C = (s4Byte)(value32_2 & 0x7ff);\r
593         SFO_D = (s4Byte)(value32_3 & 0x7ff);\r
594 \r
595         if (SFO_A > 1023)\r
596                 SFO_A = SFO_A - 2048;\r
597 \r
598         if (SFO_B > 2047)\r
599                 SFO_B = SFO_B - 4096;\r
600 \r
601         if (SFO_C > 2047)\r
602                 SFO_C = SFO_C - 4096;\r
603 \r
604         if (SFO_D > 2047)\r
605                 SFO_D = SFO_D - 4096;\r
606 \r
607         SFO_A = SFO_A * 312500 / 1024;\r
608         SFO_B = SFO_B * 312500 / 1024;\r
609         SFO_C = SFO_C * 312500 / 1024;\r
610         SFO_D = SFO_D * 312500 / 1024;\r
611 \r
612         LFO_A = (s4Byte)(value32 >> 16);\r
613         LFO_B = (s4Byte)(value32_1 >> 16);\r
614         LFO_C = (s4Byte)(value32_2 >> 16);\r
615         LFO_D = (s4Byte)(value32_3 >> 16);\r
616 \r
617         if (LFO_A > 4095)\r
618                 LFO_A = LFO_A - 8192;\r
619 \r
620         if (LFO_B > 4095)\r
621                 LFO_B = LFO_B - 8192;\r
622 \r
623         if (LFO_C > 4095)\r
624                 LFO_C = LFO_C - 8192;\r
625 \r
626         if (LFO_D > 4095)\r
627                 LFO_D = LFO_D - 8192;\r
628         LFO_A = LFO_A * 312500 / 4096;\r
629         LFO_B = LFO_B * 312500 / 4096;\r
630         LFO_C = LFO_C * 312500 / 4096;\r
631         LFO_D = LFO_D * 312500 / 4096;\r
632         \r
633         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d/ %d/ %d", "  Value SCFO(Hz) <A/B/C/D>", SFO_A, SFO_B, SFO_C, SFO_D);\r
634         DCMD_Printf(BbDbgBuf);\r
635 \r
636         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d/ %d/ %d", "  ACQ CFO(Hz) <A/B/C/D>", LFO_A, LFO_B, LFO_C, LFO_D);\r
637         DCMD_Printf(BbDbgBuf);\r
638 \r
639         value32 = ODM_GetBBReg(pDM_Odm, 0xd14 , bMaskDWord);\r
640         value32_1 = ODM_GetBBReg(pDM_Odm, 0xd54 , bMaskDWord);\r
641         value32_2 = ODM_GetBBReg(pDM_Odm, 0xd94 , bMaskDWord);\r
642         value32_3 = ODM_GetBBReg(pDM_Odm, 0xdd4 , bMaskDWord);\r
643 \r
644         LFO_A = (s4Byte)(value32 >> 16);\r
645         LFO_B = (s4Byte)(value32_1 >> 16);\r
646         LFO_C = (s4Byte)(value32_2 >> 16);\r
647         LFO_D = (s4Byte)(value32_3 >> 16);\r
648 \r
649         if (LFO_A > 4095)\r
650                 LFO_A = LFO_A - 8192;\r
651 \r
652         if (LFO_B > 4095)\r
653                 LFO_B = LFO_B - 8192;\r
654 \r
655         if (LFO_C > 4095)\r
656                 LFO_C = LFO_C - 8192;\r
657 \r
658         if (LFO_D > 4095)\r
659                 LFO_D = LFO_D - 8192;\r
660 \r
661         LFO_A = LFO_A * 312500 / 4096;\r
662         LFO_B = LFO_B * 312500 / 4096;\r
663         LFO_C = LFO_C * 312500 / 4096;\r
664         LFO_D = LFO_D * 312500 / 4096;\r
665 \r
666         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d/ %d/ %d", "  End CFO(Hz) <A/B/C/D>", LFO_A, LFO_B, LFO_C, LFO_D);\r
667         DCMD_Printf(BbDbgBuf);\r
668 \r
669         value32 = ODM_GetBBReg(pDM_Odm, 0xf20 , bMaskDWord);  /*L SIG*/\r
670 \r
671         Tail = (u1Byte)((value32 & 0xfc0000) >> 16);\r
672         Parity = (u1Byte)((value32 & 0x20000) >> 16);\r
673         Length = (u2Byte)((value32 & 0x1ffe00) >> 8);\r
674         rsv = (u1Byte)(value32 & 0x10);\r
675         MCSS = (u1Byte)(value32 & 0x0f);\r
676 \r
677         switch (MCSS) {\r
678         case 0x0b:\r
679                 idx = 0;\r
680                 break;\r
681         case 0x0f:\r
682                 idx = 1;\r
683                 break;\r
684         case 0x0a:\r
685                 idx = 2;\r
686                 break;\r
687         case 0x0e:\r
688                 idx = 3;\r
689                 break;\r
690         case 0x09:\r
691                 idx = 4;\r
692                 break;\r
693         case 0x08:\r
694                 idx = 5;\r
695                 break;\r
696         case 0x0c:\r
697                 idx = 6;\r
698                 break;\r
699         default:\r
700                 idx = 6;\r
701                 break;\r
702 \r
703         }\r
704 \r
705         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "L-SIG");\r
706         DCMD_Printf(BbDbgBuf);\r
707 \r
708         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n   Rate:%s", L_rate[idx]);             \r
709         DCMD_Printf(BbDbgBuf);  \r
710 \r
711         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %x/ %x /%x", "  Rsv/Length/Parity", rsv, RX_BW, Length);\r
712         DCMD_Printf(BbDbgBuf);\r
713 \r
714         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "HT-SIG1");\r
715         DCMD_Printf(BbDbgBuf);\r
716 \r
717         value32 = ODM_GetBBReg(pDM_Odm, 0xf2c , bMaskDWord);  /*HT SIG*/\r
718         if (RX_HT == 1) {\r
719 \r
720                 HMCSS = (u1Byte)(value32 & 0x7F);\r
721                 HRX_BW = (u1Byte)(value32 & 0x80);\r
722                 HLength = (u2Byte)((value32 >> 8) & 0xffff);\r
723         }\r
724         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %x / %x/ %x", "  MCS/BW/Length", HMCSS, HRX_BW, HLength);\r
725         DCMD_Printf(BbDbgBuf);\r
726 \r
727         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "HT-SIG2");\r
728         DCMD_Printf(BbDbgBuf);\r
729 \r
730         value32 = ODM_GetBBReg(pDM_Odm, 0xf30 , bMaskDWord);  /*HT SIG*/\r
731 \r
732         if (RX_HT == 1) {\r
733                 smooth = (u1Byte)(value32 & 0x01);\r
734                 htsound = (u1Byte)(value32 & 0x02);\r
735                 rsv = (u1Byte)(value32 & 0x04);\r
736                 agg = (u1Byte)(value32 & 0x08);\r
737                 stbc = (u1Byte)(value32 & 0x30);\r
738                 fec = (u1Byte)(value32 & 0x40);\r
739                 sgi = (u1Byte)(value32 & 0x80);\r
740                 htltf = (u1Byte)((value32 & 0x300) >> 8);\r
741                 htcrc8 = (u2Byte)((value32 & 0x3fc00) >> 8);\r
742                 Tail = (u1Byte)((value32 & 0xfc0000) >> 16);\r
743 \r
744 \r
745         }\r
746         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %x / %x/ %x/ %x/ %x/ %x", "  Smooth/NoSound/Rsv/Aggregate/STBC/LDPC", smooth, htsound, rsv, agg, stbc, fec);\r
747         DCMD_Printf(BbDbgBuf);\r
748         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %x / %x/ %x/ %x", "  SGI/E-HT-LTFs/CRC/Tail", sgi, htltf, htcrc8, Tail);\r
749         DCMD_Printf(BbDbgBuf);\r
750 \r
751 \r
752         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "VHT-SIG-A1");\r
753         DCMD_Printf(BbDbgBuf);\r
754         value32 = ODM_GetBBReg(pDM_Odm, 0xf2c , bMaskDWord);  /*VHT SIG A1*/\r
755         if (RX_HT == 2) {\r
756                 /* value32 = ODM_GetBBReg(pDM_Odm, 0xf2c ,bMaskDWord);*/\r
757                 vRX_BW = (u1Byte)(value32 & 0x03);\r
758                 vrsv = (u1Byte)(value32 & 0x04);\r
759                 vstbc = (u1Byte)(value32 & 0x08);\r
760                 vgid = (u1Byte)((value32 & 0x3f0) >> 4);\r
761                 vNsts = (u1Byte)(((value32 & 0x1c00) >> 8) + 1);\r
762                 vpaid = (u2Byte)(value32 & 0x3fe);\r
763                 vtxops = (u1Byte)((value32 & 0x400000) >> 20);\r
764                 vrsv2 = (u1Byte)((value32 & 0x800000) >> 20);\r
765         }\r
766 \r
767         /*rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %x", "F2C", value32);*/\r
768         /*DCMD_Printf(BbDbgBuf);*/\r
769 \r
770         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %x / %x/ %x/ %x/ %x/ %x /%x /%x", "  BW/Rsv1/STBC/GID/Nsts/PAID/TXOPPS/Rsv2", vRX_BW, vrsv, vstbc, vgid, vNsts, vpaid, vtxops, vrsv2);\r
771         DCMD_Printf(BbDbgBuf);\r
772 \r
773         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "VHT-SIG-A2");\r
774         DCMD_Printf(BbDbgBuf);\r
775         value32 = ODM_GetBBReg(pDM_Odm, 0xf30 , bMaskDWord);  /*VHT SIG*/\r
776 \r
777 \r
778         if (RX_HT == 2) {\r
779                 /*value32 = ODM_GetBBReg(pDM_Odm, 0xf30 ,bMaskDWord); */  /*VHT SIG*/\r
780 \r
781                 //sgi=(u1Byte)(value32&0x01);\r
782                 sgiext = (u1Byte)(value32 & 0x03);\r
783                 //fec = (u1Byte)(value32&0x04);\r
784                 fecext = (u1Byte)(value32 & 0x0C);\r
785 \r
786                 vMCSS = (u1Byte)(value32 & 0xf0);\r
787                 bf = (u1Byte)((value32 & 0x100) >> 8);\r
788                 vrsv = (u1Byte)((value32 & 0x200) >> 8);\r
789                 vhtcrc8 = (u2Byte)((value32 & 0x3fc00) >> 8);\r
790                 vTail = (u1Byte)((value32 & 0xfc0000) >> 16);\r
791         }\r
792         /*rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %x", "F30", value32);*/\r
793         /*DCMD_Printf(BbDbgBuf);*/\r
794         \r
795         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %x / %x/ %x/ %x/ %x/ %x/ %x", "  SGI/FEC/MCS/BF/Rsv/CRC/Tail", sgiext, fecext, vMCSS, bf, vrsv, vhtcrc8, vTail);\r
796         DCMD_Printf(BbDbgBuf);\r
797 \r
798         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "VHT-SIG-B");\r
799         DCMD_Printf(BbDbgBuf);\r
800         value32 = ODM_GetBBReg(pDM_Odm, 0xf34 , bMaskDWord);  /*VHT SIG*/\r
801         {\r
802                 vLength = (u2Byte)(value32 & 0x1fffff);\r
803                 vbrsv = (u1Byte)((value32 & 0x600000) >> 20);\r
804                 vbTail = (u2Byte)((value32 & 0x1f800000) >> 20);\r
805                 vbcrc = (u1Byte)((value32 & 0x80000000) >> 28);\r
806 \r
807         }\r
808         /*rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %x", "F34", value32);*/\r
809         /*DCMD_Printf(BbDbgBuf);*/\r
810         rsprintf((char *)BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %x / %x/ %x/ %x/", "  Length/Rsv/Tail/CRC", vLength, vbrsv, vbTail, vbcrc);\r
811         DCMD_Printf(BbDbgBuf);\r
812 \r
813 \r
814 }\r
815 \r
816 void phydm_sbd_check(\r
817         IN      PDM_ODM_T                                       pDM_Odm\r
818 )\r
819 {\r
820         static u4Byte   pkt_cnt = 0;\r
821         static BOOLEAN sbd_state = 0;\r
822         u4Byte  sym_count, count, value32;\r
823 \r
824         if (sbd_state == 0) {\r
825                 pkt_cnt++;\r
826                 if (pkt_cnt % 5 == 0) { /*read SBD conter once every 5 packets*/\r
827                         ODM_SetTimer(pDM_Odm, &pDM_Odm->sbdcnt_timer, 0); /*ms*/\r
828                         sbd_state = 1;\r
829                 }\r
830         } else { /*read counter*/\r
831                 value32 = ODM_GetBBReg(pDM_Odm, 0xF98, bMaskDWord);\r
832                 sym_count = (value32 & 0x7C000000) >> 26;\r
833                 count = (value32 & 0x3F00000) >> 20;\r
834                 DbgPrint("#SBD#    sym_count   %d   count   %d\n", sym_count, count);\r
835                 sbd_state = 0;\r
836         }\r
837 }\r
838 \r
839 void phydm_sbd_callback(\r
840         PRT_TIMER               pTimer\r
841 )\r
842 {\r
843         PADAPTER                Adapter = (PADAPTER)pTimer->Adapter;\r
844         HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(Adapter);\r
845         PDM_ODM_T               pDM_Odm = &pHalData->DM_OutSrc;\r
846 \r
847 #if USE_WORKITEM\r
848         ODM_ScheduleWorkItem(&pDM_Odm->sbdcnt_workitem);\r
849 #else\r
850         phydm_sbd_check(pDM_Odm);\r
851 #endif\r
852 }\r
853 \r
854 void phydm_sbd_workitem_callback(\r
855         IN PVOID            pContext\r
856 )\r
857 {\r
858         PADAPTER        pAdapter = (PADAPTER)pContext;\r
859         HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(pAdapter);\r
860         PDM_ODM_T               pDM_Odm = &pHalData->DM_OutSrc;\r
861 \r
862         phydm_sbd_check(pDM_Odm);\r
863 }\r
864 #endif\r
865 VOID\r
866 phydm_BasicDbgMessage\r
867 (\r
868         IN              PVOID                   pDM_VOID\r
869 )\r
870 {\r
871 #if( DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
872         PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
873         PFALSE_ALARM_STATISTICS FalseAlmCnt = (PFALSE_ALARM_STATISTICS)PhyDM_Get_Structure(pDM_Odm , PHYDM_FALSEALMCNT);\r
874         pDIG_T  pDM_DigTable = &pDM_Odm->DM_DigTable;\r
875         u1Byte  legacy_table[12] = {1, 2, 5, 11, 6, 9, 12, 18, 24, 36, 48, 54};\r
876         u1Byte  vht_en = ((pDM_Odm->RxRate) >= ODM_RATEVHTSS1MCS0) ? 1 : 0;\r
877 \r
878         if (pDM_Odm->RxRate <= ODM_RATE11M) {\r
879                 ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("[CCK AGC Report] LNA_idx = 0x%x, VGA_idx = 0x%x\n",\r
880                         pDM_Odm->cck_lna_idx, pDM_Odm->cck_vga_idx));           \r
881         } else {\r
882                 ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("[OFDM AGC Report] { 0x%x, 0x%x, 0x%x, 0x%x }\n",\r
883                         pDM_Odm->ofdm_agc_idx[0], pDM_Odm->ofdm_agc_idx[1], pDM_Odm->ofdm_agc_idx[2], pDM_Odm->ofdm_agc_idx[3]));       \r
884         }\r
885 \r
886         ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("RSSI: { %d,  %d,  %d,  %d },    RxRate: { %s%s%s%s%d%s}\n",\r
887                 (pDM_Odm->RSSI_A == 0xff) ? 0 : pDM_Odm->RSSI_A , \r
888                 (pDM_Odm->RSSI_B == 0xff) ? 0 : pDM_Odm->RSSI_B , \r
889                 (pDM_Odm->RSSI_C == 0xff) ? 0 : pDM_Odm->RSSI_C, \r
890                 (pDM_Odm->RSSI_D == 0xff) ? 0 : pDM_Odm->RSSI_D,\r
891                 ((pDM_Odm->RxRate >= ODM_RATEVHTSS1MCS0) && (pDM_Odm->RxRate <= ODM_RATEVHTSS1MCS9)) ? "VHT 1ss  " : "",\r
892                 ((pDM_Odm->RxRate >= ODM_RATEVHTSS2MCS0) && (pDM_Odm->RxRate <= ODM_RATEVHTSS2MCS9)) ? "VHT 2ss " : "",\r
893                 ((pDM_Odm->RxRate >= ODM_RATEVHTSS3MCS0) && (pDM_Odm->RxRate <= ODM_RATEVHTSS3MCS9)) ? "VHT 3ss " : "",\r
894                 (pDM_Odm->RxRate >= ODM_RATEMCS0) ? "MCS " : "",\r
895                 (vht_en) ? ((pDM_Odm->RxRate - ODM_RATEVHTSS1MCS0)%10) : ((pDM_Odm->RxRate >= ODM_RATEMCS0) ? (pDM_Odm->RxRate - ODM_RATEMCS0) : ((pDM_Odm->RxRate <= ODM_RATE54M)?legacy_table[pDM_Odm->RxRate]:0)),\r
896                 (pDM_Odm->RxRate >= ODM_RATEMCS0) ? "" : "M"));\r
897 \r
898         ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("[CCA Cnt] {CCK, OFDM, Total} = {%d, %d, %d}\n",  \r
899                 FalseAlmCnt->Cnt_CCK_CCA, FalseAlmCnt->Cnt_OFDM_CCA, FalseAlmCnt->Cnt_CCA_all));\r
900 \r
901         ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("[FA Cnt] {CCK, OFDM, Total} = {%d, %d, %d}\n",   \r
902                 FalseAlmCnt->Cnt_Cck_fail, FalseAlmCnt->Cnt_Ofdm_fail, FalseAlmCnt->Cnt_all));\r
903         \r
904         ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("[OFDM FA Detail] Parity_Fail = (( %d )), Rate_Illegal = (( %d )), CRC8_fail = (( %d )), Mcs_fail = (( %d )), Fast_Fsync = (( %d )), SB_Search_fail = (( %d ))\n",        \r
905                 FalseAlmCnt->Cnt_Parity_Fail, FalseAlmCnt->Cnt_Rate_Illegal, FalseAlmCnt->Cnt_Crc8_fail, FalseAlmCnt->Cnt_Mcs_fail, FalseAlmCnt->Cnt_Fast_Fsync, FalseAlmCnt->Cnt_SB_Search_fail));\r
906         \r
907         ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("bLinked = %d, RSSI_Min = %d, CurrentIGI = 0x%x, bNoisy=%d\n\n",\r
908                 pDM_Odm->bLinked, pDM_Odm->RSSI_Min, pDM_DigTable->CurIGValue, pDM_Odm->NoisyDecision));    \r
909 /*\r
910         temp_reg = ODM_GetBBReg(pDM_Odm, 0xDD0, bMaskByte0);\r
911         ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("0xDD0 = 0x%x\n",temp_reg));\r
912                 \r
913         temp_reg = ODM_GetBBReg(pDM_Odm, 0xDDc, bMaskByte1);\r
914         ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("0xDDD = 0x%x\n",temp_reg));\r
915         \r
916         temp_reg = ODM_GetBBReg(pDM_Odm, 0xc50, bMaskByte0);\r
917         ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("0xC50 = 0x%x\n",temp_reg));\r
918 \r
919         temp_reg = ODM_GetRFReg(pDM_Odm, ODM_RF_PATH_A, 0x0, 0x3fe0);\r
920         ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("RF 0x0[13:5] = 0x%x\n\n",temp_reg));\r
921 */      \r
922 \r
923 #endif\r
924 }\r
925 \r
926 \r
927 VOID phydm_BasicProfile(\r
928         IN              PVOID                   pDM_VOID,\r
929         IN              u4Byte                  *_used,\r
930         OUT             char                            *output,\r
931         IN              u4Byte                  *_out_len\r
932 )\r
933 {\r
934         PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
935         char  *Cut = NULL;\r
936         char *ICType = NULL;\r
937         u4Byte used = *_used;\r
938         u4Byte out_len = *_out_len;\r
939         u4Byte  commit_ver = 0;\r
940         u4Byte  date = 0;\r
941         char    *commit_by = NULL;\r
942         u4Byte  release_ver = 0;\r
943 \r
944         PHYDM_SNPRINTF((output + used, out_len - used, "%-35s\n", "% Basic Profile %"));\r
945 \r
946         if (pDM_Odm->SupportICType == ODM_RTL8192C)                     \r
947                 ICType = "RTL8192C";\r
948         else if (pDM_Odm->SupportICType == ODM_RTL8192D)\r
949                 ICType = "RTL8192D";\r
950         else if (pDM_Odm->SupportICType == ODM_RTL8723A)\r
951                 ICType = "RTL8723A";\r
952         else if (pDM_Odm->SupportICType == ODM_RTL8188E)\r
953                 ICType = "RTL8188E";\r
954         else if (pDM_Odm->SupportICType == ODM_RTL8812)\r
955                 ICType = "RTL8812A";\r
956         else if (pDM_Odm->SupportICType == ODM_RTL8821)\r
957                 ICType = "RTL8821A";\r
958         else if (pDM_Odm->SupportICType == ODM_RTL8192E)\r
959                 ICType = "RTL8192E";\r
960         else if (pDM_Odm->SupportICType == ODM_RTL8723B)\r
961                 ICType = "RTL8723B";\r
962         else if (pDM_Odm->SupportICType == ODM_RTL8814A)\r
963                 ICType = "RTL8814A";\r
964         else if (pDM_Odm->SupportICType == ODM_RTL8881A)\r
965                 ICType = "RTL8881A";\r
966         else if (pDM_Odm->SupportICType == ODM_RTL8821B)\r
967                 ICType = "RTL8821B";\r
968         else if (pDM_Odm->SupportICType == ODM_RTL8822B)\r
969                 ICType = "RTL8822B";\r
970 #if (RTL8703B_SUPPORT == 1)\r
971         else if (pDM_Odm->SupportICType == ODM_RTL8703B) {\r
972                 ICType = "RTL8703B";\r
973                 date = RELEASE_DATE_8703B;\r
974                 commit_by = COMMIT_BY_8703B;\r
975                 release_ver = RELEASE_VERSION_8703B;\r
976         } \r
977 #endif\r
978         else if (pDM_Odm->SupportICType == ODM_RTL8195A)\r
979                 ICType = "RTL8195A";\r
980         else if (pDM_Odm->SupportICType == ODM_RTL8188F)\r
981                 ICType = "RTL8188F";\r
982         PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %s (MP Chip: %s)\n", "IC Type", ICType, pDM_Odm->bIsMPChip ? "Yes" : "No"));\r
983 \r
984         if (pDM_Odm->CutVersion == ODM_CUT_A)                   \r
985                 Cut = "A";\r
986         else if (pDM_Odm->CutVersion == ODM_CUT_B)            \r
987                 Cut = "B";\r
988         else if (pDM_Odm->CutVersion == ODM_CUT_C)            \r
989                 Cut = "C";\r
990         else if (pDM_Odm->CutVersion == ODM_CUT_D)            \r
991                 Cut = "D";\r
992         else if (pDM_Odm->CutVersion == ODM_CUT_E)            \r
993                 Cut = "E";\r
994         else if (pDM_Odm->CutVersion == ODM_CUT_F)            \r
995                 Cut = "F";\r
996         else if (pDM_Odm->CutVersion == ODM_CUT_I)            \r
997                 Cut = "I";\r
998         PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %s\n", "Cut Version", Cut));\r
999         PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %d\n", "PHY Parameter Version", ODM_GetHWImgVersion(pDM_Odm)));\r
1000         PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %d\n", "PHY Parameter Commit date", date));\r
1001         PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %s\n", "PHY Parameter Commit by", commit_by));\r
1002         PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %d\n", "PHY Parameter Release Version", release_ver));\r
1003         \r
1004 #if(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
1005         {\r
1006                 PADAPTER                       Adapter = pDM_Odm->Adapter;\r
1007                 PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %d (Subversion: %d)\n", "FW Version", Adapter->MgntInfo.FirmwareVersion, Adapter->MgntInfo.FirmwareSubVersion));\r
1008         }\r
1009 #elif (DM_ODM_SUPPORT_TYPE & ODM_AP)\r
1010         {\r
1011                 struct rtl8192cd_priv *priv = pDM_Odm->priv;\r
1012                 PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %d (Subversion: %d)\n", "FW Version", priv->pshare->fw_version, priv->pshare->fw_sub_version));\r
1013         }\r
1014 #else\r
1015         {\r
1016                 PADAPTER                       Adapter = pDM_Odm->Adapter;\r
1017                 HAL_DATA_TYPE           *pHalData = GET_HAL_DATA(Adapter);\r
1018                 PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %d (Subversion: %d)\n", "FW Version", pHalData->FirmwareVersion, pHalData->FirmwareSubVersion));\r
1019         }\r
1020 #endif\r
1021         //1 PHY DM Version List\r
1022         PHYDM_SNPRINTF((output + used, out_len - used, "%-35s\n", "% PHYDM Version %"));\r
1023         PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %s\n", "Adaptivity", ADAPTIVITY_VERSION));\r
1024         PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %s\n", "DIG", DIG_VERSION));\r
1025         PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %s\n", "Dynamic BB PowerSaving", DYNAMIC_BBPWRSAV_VERSION));\r
1026         PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %s\n", "CFO Tracking", CFO_TRACKING_VERSION));\r
1027         PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %s\n", "Antenna Diversity", ANTDIV_VERSION));\r
1028         PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %s\n", "Power Tracking", POWRTRACKING_VERSION));\r
1029         PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %s\n", "Dynamic TxPower", DYNAMIC_TXPWR_VERSION));\r
1030         PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %s\n", "RA Info", RAINFO_VERSION));\r
1031 #if(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
1032         PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %s\n", "Antenna Detection", ANTDECT_VERSION));\r
1033 #endif\r
1034         PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %s\n", "Auto Channel Selection", ACS_VERSION));\r
1035         PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %s\n", "EDCA Turbo", EDCATURBO_VERSION));\r
1036         PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %s\n", "Path Diversity", PATHDIV_VERSION));\r
1037 #if(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
1038         PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %s\n", "RxHP", RXHP_VERSION));\r
1039 #endif\r
1040 #if (RTL8822B_SUPPORT == 1)  \r
1041         if (pDM_Odm->SupportICType & ODM_RTL8822B)\r
1042                 PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s: %s\n", "PHY config 8822B", PHY_CONFIG_VERSION_8822B));\r
1043         \r
1044 #endif\r
1045         *_used = used;\r
1046         *_out_len = out_len;\r
1047 \r
1048 }\r
1049 \r
1050 VOID\r
1051 phydm_fw_trace_en_h2c(\r
1052         IN      PVOID   pDM_VOID,\r
1053         IN      BOOLEAN         enable,\r
1054         IN      u4Byte          monitor_mode,\r
1055         IN      u4Byte          macid\r
1056 )\r
1057 {\r
1058         PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
1059         pRA_T                   pRA_Table = &pDM_Odm->DM_RA_Table;\r
1060         u1Byte                  H2C_Parameter[3] = {0};\r
1061 \r
1062         H2C_Parameter[0] = enable;\r
1063         H2C_Parameter[1] = (u1Byte)monitor_mode;\r
1064         H2C_Parameter[2] = (u1Byte)macid;\r
1065         ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("---->\n"));\r
1066         if (monitor_mode == 0){\r
1067                 ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("[H2C] FW_debug_en: (( %d ))\n", enable));\r
1068         } else {\r
1069                 ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("[H2C] FW_debug_en: (( %d )), mode: (( %d )), macid: (( %d ))\n", enable, monitor_mode, macid));\r
1070         }\r
1071         ODM_FillH2CCmd(pDM_Odm, PHYDM_H2C_FW_TRACE_EN, 3, H2C_Parameter);\r
1072 }\r
1073 \r
1074 VOID\r
1075 phydm_get_per_path_txagc(\r
1076         IN              PVOID                   pDM_VOID,\r
1077         IN              u1Byte                  path,\r
1078         IN              u4Byte                  *_used,\r
1079         OUT             char                            *output,\r
1080         IN              u4Byte                  *_out_len\r
1081 )\r
1082 {\r
1083         PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
1084         u1Byte                  rate_idx;\r
1085         u1Byte                  txagc;\r
1086         u4Byte                  used = *_used;\r
1087         u4Byte                  out_len = *_out_len;\r
1088 \r
1089 #if (RTL8822B_SUPPORT == 1)\r
1090         if ((pDM_Odm->SupportICType & ODM_RTL8822B) && (path <= ODM_RF_PATH_B)) {\r
1091                 for (rate_idx = 0; rate_idx <= 0x53; rate_idx++) {\r
1092                         if (rate_idx == ODM_RATE1M)\r
1093                                 PHYDM_SNPRINTF((output + used, out_len - used, "  %-35s\n", "CCK====>"));\r
1094                         else if (rate_idx == ODM_RATE6M)\r
1095                                 PHYDM_SNPRINTF((output + used, out_len - used, "\n  %-35s\n", "OFDM====>"));\r
1096                         else if (rate_idx == ODM_RATEMCS0)\r
1097                                 PHYDM_SNPRINTF((output + used, out_len - used, "\n  %-35s\n", "HT 1ss====>"));\r
1098                         else if (rate_idx == ODM_RATEMCS8)\r
1099                                 PHYDM_SNPRINTF((output + used, out_len - used, "\n  %-35s\n", "HT 2ss====>"));\r
1100                         else if (rate_idx == ODM_RATEMCS16)\r
1101                                 PHYDM_SNPRINTF((output + used, out_len - used, "\n  %-35s\n", "HT 3ss====>"));\r
1102                         else if (rate_idx == ODM_RATEMCS24)\r
1103                                 PHYDM_SNPRINTF((output + used, out_len - used, "\n  %-35s\n", "HT 4ss====>"));\r
1104                         else if (rate_idx == ODM_RATEVHTSS1MCS0)\r
1105                                 PHYDM_SNPRINTF((output + used, out_len - used, "\n  %-35s\n", "VHT 1ss====>"));\r
1106                         else if (rate_idx == ODM_RATEVHTSS2MCS0)\r
1107                                 PHYDM_SNPRINTF((output + used, out_len - used, "\n  %-35s\n", "VHT 2ss====>"));\r
1108                         else if (rate_idx == ODM_RATEVHTSS3MCS0)\r
1109                                 PHYDM_SNPRINTF((output + used, out_len - used, "\n  %-35s\n", "VHT 3ss====>"));\r
1110                         else if (rate_idx == ODM_RATEVHTSS4MCS0)\r
1111                                 PHYDM_SNPRINTF((output + used, out_len - used, "\n  %-35s\n", "VHT 4ss====>"));\r
1112                         \r
1113                         txagc = config_phydm_read_txagc_8822b(pDM_Odm, path, rate_idx);\r
1114                         if (config_phydm_read_txagc_check_8822b(txagc))\r
1115                                 PHYDM_SNPRINTF((output + used, out_len - used, "  0x%02x    ", txagc));\r
1116                         else\r
1117                                 PHYDM_SNPRINTF((output + used, out_len - used, "  0x%s    ", "xx"));\r
1118                 }\r
1119         }\r
1120 #endif\r
1121 }\r
1122 \r
1123 \r
1124 VOID\r
1125 phydm_get_txagc(\r
1126         IN              PVOID                   pDM_VOID,\r
1127         IN              u4Byte                  *_used,\r
1128         OUT             char                            *output,\r
1129         IN              u4Byte                  *_out_len\r
1130 )\r
1131 {\r
1132         PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
1133         u4Byte                  used = *_used;\r
1134         u4Byte                  out_len = *_out_len;\r
1135         \r
1136         /* Path-A */\r
1137         PHYDM_SNPRINTF((output + used, out_len - used, "%-35s\n", "Path-A===================="));\r
1138         phydm_get_per_path_txagc(pDM_Odm, ODM_RF_PATH_A, _used, output, _out_len);\r
1139         \r
1140         /* Path-B */\r
1141         PHYDM_SNPRINTF((output + used, out_len - used, "\n%-35s\n", "Path-B===================="));\r
1142         phydm_get_per_path_txagc(pDM_Odm, ODM_RF_PATH_B, _used, output, _out_len);\r
1143 \r
1144         /* Path-C */\r
1145         PHYDM_SNPRINTF((output + used, out_len - used, "\n%-35s\n", "Path-C===================="));\r
1146         phydm_get_per_path_txagc(pDM_Odm, ODM_RF_PATH_C, _used, output, _out_len);\r
1147 \r
1148         /* Path-D */\r
1149         PHYDM_SNPRINTF((output + used, out_len - used, "\n%-35s\n", "Path-D===================="));\r
1150         phydm_get_per_path_txagc(pDM_Odm, ODM_RF_PATH_D, _used, output, _out_len);\r
1151 \r
1152 }\r
1153 \r
1154 VOID\r
1155 phydm_set_txagc(\r
1156         IN              PVOID                   pDM_VOID,\r
1157         IN              u4Byte                  *const dm_value,\r
1158         IN              u4Byte                  *_used,\r
1159         OUT             char                            *output,\r
1160         IN              u4Byte                  *_out_len\r
1161 )\r
1162 {\r
1163         PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
1164         u4Byte                  used = *_used;\r
1165         u4Byte                  out_len = *_out_len;\r
1166 \r
1167 #if (RTL8822B_SUPPORT == 1)\r
1168         if (pDM_Odm->SupportICType & ODM_RTL8822B) {\r
1169                 if (dm_value[0] <= 1) {\r
1170                         if (phydm_write_txagc_1byte_8822b(pDM_Odm, dm_value[2], dm_value[0], (u1Byte)dm_value[1]))\r
1171                                 PHYDM_SNPRINTF((output + used, out_len - used, "  %s%d   %s%x%s%x\n", "Write path-", dm_value[0], "rate index-0x", dm_value[1], " = 0x", dm_value[2]));\r
1172                         else\r
1173                                 PHYDM_SNPRINTF((output + used, out_len - used, "  %s%d   %s%x%s\n", "Write path-", (dm_value[0] & 0x1), "rate index-0x", (dm_value[1] & 0x7f), " fail"));\r
1174                 } else {\r
1175                         PHYDM_SNPRINTF((output + used, out_len - used, "  %s%d   %s%x%s\n", "Write path-", (dm_value[0] & 0x1), "rate index-0x", (dm_value[1] & 0x7f), " fail"));\r
1176                 }\r
1177         }\r
1178 #endif\r
1179 }\r
1180 \r
1181 VOID\r
1182 odm_debug_trace(\r
1183         IN              PVOID           pDM_VOID,\r
1184         IN              u4Byte          *const dm_value,\r
1185         IN              u4Byte          *_used,\r
1186         OUT             char            *output,\r
1187         IN              u4Byte          *_out_len\r
1188 )\r
1189 {\r
1190         PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
1191         u8Byte                  pre_debug_components, one = 1;\r
1192         u4Byte used = *_used;\r
1193         u4Byte out_len = *_out_len;\r
1194 \r
1195         pre_debug_components = pDM_Odm->DebugComponents;\r
1196 \r
1197         PHYDM_SNPRINTF((output + used, out_len - used, "\n%s\n", "================================"));\r
1198         if (dm_value[0] == 100) {\r
1199                 PHYDM_SNPRINTF((output + used, out_len - used, "%s\n", "[Debug Message] PhyDM Selection"));\r
1200                 PHYDM_SNPRINTF((output + used, out_len - used, "%s\n", "================================"));\r
1201                 PHYDM_SNPRINTF((output + used, out_len - used, "00. (( %s ))DIG\n", ((pDM_Odm->DebugComponents & ODM_COMP_DIG) ? ("V") : ("."))));\r
1202                 PHYDM_SNPRINTF((output + used, out_len - used, "01. (( %s ))RA_MASK\n", ((pDM_Odm->DebugComponents & ODM_COMP_RA_MASK) ? ("V") : ("."))));\r
1203                 PHYDM_SNPRINTF((output + used, out_len - used, "02. (( %s ))DYNAMIC_TXPWR\n", ((pDM_Odm->DebugComponents & ODM_COMP_DYNAMIC_TXPWR) ? ("V") : ("."))));\r
1204                 PHYDM_SNPRINTF((output + used, out_len - used, "03. (( %s ))FA_CNT\n", ((pDM_Odm->DebugComponents & ODM_COMP_FA_CNT) ? ("V") : ("."))));\r
1205                 PHYDM_SNPRINTF((output + used, out_len - used, "04. (( %s ))RSSI_MONITOR\n", ((pDM_Odm->DebugComponents & ODM_COMP_RSSI_MONITOR) ? ("V") : ("."))));\r
1206                 PHYDM_SNPRINTF((output + used, out_len - used, "05. (( %s ))CCK_PD\n", ((pDM_Odm->DebugComponents & ODM_COMP_CCK_PD) ? ("V") : ("."))));\r
1207                 PHYDM_SNPRINTF((output + used, out_len - used, "06. (( %s ))ANT_DIV\n", ((pDM_Odm->DebugComponents & ODM_COMP_ANT_DIV) ? ("V") : ("."))));\r
1208                 PHYDM_SNPRINTF((output + used, out_len - used, "07. (( %s ))PWR_SAVE\n", ((pDM_Odm->DebugComponents & ODM_COMP_PWR_SAVE) ? ("V") : ("."))));\r
1209                 PHYDM_SNPRINTF((output + used, out_len - used, "08. (( %s ))PWR_TRAIN\n", ((pDM_Odm->DebugComponents & ODM_COMP_PWR_TRAIN) ? ("V") : ("."))));\r
1210                 PHYDM_SNPRINTF((output + used, out_len - used, "09. (( %s ))RATE_ADAPTIVE\n", ((pDM_Odm->DebugComponents & ODM_COMP_RATE_ADAPTIVE) ? ("V") : ("."))));\r
1211                 PHYDM_SNPRINTF((output + used, out_len - used, "10. (( %s ))PATH_DIV\n", ((pDM_Odm->DebugComponents & ODM_COMP_PATH_DIV) ? ("V") : ("."))));\r
1212                 PHYDM_SNPRINTF((output + used, out_len - used, "11. (( %s ))PSD\n", ((pDM_Odm->DebugComponents & ODM_COMP_PSD) ? ("V") : ("."))));\r
1213                 PHYDM_SNPRINTF((output + used, out_len - used, "12. (( %s ))DYNAMIC_PRICCA\n", ((pDM_Odm->DebugComponents & ODM_COMP_DYNAMIC_PRICCA) ? ("V") : ("."))));\r
1214                 PHYDM_SNPRINTF((output + used, out_len - used, "13. (( %s ))RXHP\n", ((pDM_Odm->DebugComponents & ODM_COMP_RXHP) ? ("V") : ("."))));\r
1215                 PHYDM_SNPRINTF((output + used, out_len - used, "14. (( %s ))MP\n", ((pDM_Odm->DebugComponents & ODM_COMP_MP) ? ("V") : ("."))));\r
1216                 PHYDM_SNPRINTF((output + used, out_len - used, "15. (( %s ))CFO_TRACKING\n", ((pDM_Odm->DebugComponents & ODM_COMP_CFO_TRACKING) ? ("V") : ("."))));\r
1217                 PHYDM_SNPRINTF((output + used, out_len - used, "16. (( %s ))ACS\n", ((pDM_Odm->DebugComponents & ODM_COMP_ACS) ? ("V") : ("."))));\r
1218                 PHYDM_SNPRINTF((output + used, out_len - used, "17. (( %s ))ADAPTIVITY\n", ((pDM_Odm->DebugComponents & PHYDM_COMP_ADAPTIVITY) ? ("V") : ("."))));\r
1219                 PHYDM_SNPRINTF((output + used, out_len - used, "18. (( %s ))RA_DBG\n", ((pDM_Odm->DebugComponents & PHYDM_COMP_RA_DBG) ? ("V") : ("."))));\r
1220                 PHYDM_SNPRINTF((output + used, out_len - used, "20. (( %s ))EDCA_TURBO\n", ((pDM_Odm->DebugComponents & ODM_COMP_EDCA_TURBO) ? ("V") : ("."))));\r
1221                 PHYDM_SNPRINTF((output + used, out_len - used, "21. (( %s ))EARLY_MODE\n", ((pDM_Odm->DebugComponents & ODM_COMP_EARLY_MODE) ? ("V") : ("."))));\r
1222                 PHYDM_SNPRINTF((output + used, out_len - used, "22. (( %s ))FW_DEBUG_TRACE\n", ((pDM_Odm->DebugComponents & ODM_FW_DEBUG_TRACE) ? ("V") : ("."))));\r
1223                 PHYDM_SNPRINTF((output + used, out_len - used, "24. (( %s ))TX_PWR_TRACK\n", ((pDM_Odm->DebugComponents & ODM_COMP_TX_PWR_TRACK) ? ("V") : ("."))));\r
1224                 PHYDM_SNPRINTF((output + used, out_len - used, "25. (( %s ))RX_GAIN_TRACK\n", ((pDM_Odm->DebugComponents & ODM_COMP_RX_GAIN_TRACK) ? ("V") : ("."))));\r
1225                 PHYDM_SNPRINTF((output + used, out_len - used, "26. (( %s ))CALIBRATION\n", ((pDM_Odm->DebugComponents & ODM_COMP_CALIBRATION) ? ("V") : ("."))));\r
1226                 PHYDM_SNPRINTF((output + used, out_len - used, "28. (( %s ))PHY_CONFIG\n", ((pDM_Odm->DebugComponents & ODM_PHY_CONFIG) ? ("V") : ("."))));\r
1227                 PHYDM_SNPRINTF((output + used, out_len - used, "29. (( %s ))BEAMFORMING_DEBUG\n", ((pDM_Odm->DebugComponents & BEAMFORMING_DEBUG) ? ("V") : ("."))));\r
1228                 PHYDM_SNPRINTF((output + used, out_len - used, "30. (( %s ))COMMON\n", ((pDM_Odm->DebugComponents & ODM_COMP_COMMON) ? ("V") : ("."))));\r
1229                 PHYDM_SNPRINTF((output + used, out_len - used, "31. (( %s ))INIT\n", ((pDM_Odm->DebugComponents & ODM_COMP_INIT) ? ("V") : ("."))));\r
1230                 PHYDM_SNPRINTF((output + used, out_len - used, "%s\n", "================================"));\r
1231 \r
1232         } else if (dm_value[0] == 101) {\r
1233                 pDM_Odm->DebugComponents = 0;\r
1234                 PHYDM_SNPRINTF((output + used, out_len - used, "%s\n", "Disable all debug components"));\r
1235         } else {\r
1236                 if (dm_value[1] == 1) { /*enable*/\r
1237                         pDM_Odm->DebugComponents |= (one << dm_value[0]);\r
1238 \r
1239                         if (dm_value[0] == 22) { /*FW trace function*/\r
1240                                 phydm_fw_trace_en_h2c(pDM_Odm, 1, dm_value[2], dm_value[3]); /*H2C to enable C2H Msg*/\r
1241                         }\r
1242                 } else if (dm_value[1] == 2) { /*disable*/\r
1243                         pDM_Odm->DebugComponents &= ~(one << dm_value[0]);\r
1244 \r
1245                         if (dm_value[0] == 22) { /*FW trace function*/\r
1246                                 phydm_fw_trace_en_h2c(pDM_Odm, 0, dm_value[2], dm_value[3]); /*H2C to disable C2H Msg*/\r
1247                         }\r
1248                 } else\r
1249                         PHYDM_SNPRINTF((output + used, out_len - used, "%s\n", "[Warning!!!]  1:enable,  2:disable"));\r
1250         }\r
1251         PHYDM_SNPRINTF((output + used, out_len - used, "pre-DbgComponents = 0x%x\n", (u4Byte)pre_debug_components));\r
1252         PHYDM_SNPRINTF((output + used, out_len - used, "Curr-DbgComponents = 0x%x\n", ((u4Byte)pDM_Odm->DebugComponents)));\r
1253         PHYDM_SNPRINTF((output + used, out_len - used, "%s\n", "================================"));\r
1254 }\r
1255 \r
1256 VOID\r
1257 phydm_DumpBbReg(\r
1258         IN              PVOID                   pDM_VOID\r
1259         )\r
1260 {\r
1261         PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
1262         u4Byte                  Addr = 0;\r
1263         \r
1264         /* BB Reg */\r
1265         for (Addr = 0x800; Addr < 0xfff; Addr += 4)\r
1266                 DbgPrint("%04x %08x\n", Addr, ODM_GetBBReg(pDM_Odm, Addr, bMaskDWord));\r
1267 \r
1268         if (pDM_Odm->SupportICType & (ODM_RTL8822B|ODM_RTL8814A)) {\r
1269 \r
1270                 if (pDM_Odm->RFType > ODM_2T2R) {\r
1271                         for (Addr = 0x1800; Addr < 0x18ff; Addr += 4)\r
1272                                 DbgPrint("%04x %08x\n", Addr, ODM_GetBBReg(pDM_Odm, Addr, bMaskDWord));\r
1273                 }\r
1274 \r
1275                 if (pDM_Odm->RFType > ODM_3T3R) {\r
1276                         for (Addr = 0x1a00; Addr < 0x1aff; Addr += 4)\r
1277                                 DbgPrint("%04x %08x\n", Addr, ODM_GetBBReg(pDM_Odm, Addr, bMaskDWord));\r
1278                 }\r
1279 \r
1280                 for (Addr = 0x1900; Addr < 0x19ff; Addr += 4)\r
1281                         DbgPrint("%04x %08x\n", Addr, ODM_GetBBReg(pDM_Odm, Addr, bMaskDWord));\r
1282 \r
1283                 for (Addr = 0x1c00; Addr < 0x1cff; Addr += 4)\r
1284                         DbgPrint("%04x %08x\n", Addr, ODM_GetBBReg(pDM_Odm, Addr, bMaskDWord));\r
1285 \r
1286                 for (Addr = 0x1f00; Addr < 0x1fff; Addr += 4)\r
1287                         DbgPrint("%04x %08x\n", Addr, ODM_GetBBReg(pDM_Odm, Addr, bMaskDWord));\r
1288         }\r
1289 }\r
1290 \r
1291 VOID\r
1292 phydm_DumpAllReg(\r
1293         IN              PVOID                   pDM_VOID\r
1294         )\r
1295 {\r
1296         PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
1297         u4Byte                  Addr = 0;\r
1298 \r
1299         /* dump MAC register */\r
1300         DbgPrint("MAC==========\n");\r
1301         for (Addr = 0; Addr < 0x7ff; Addr += 4)\r
1302                 DbgPrint("%04x %08x\n", Addr, ODM_GetBBReg(pDM_Odm, Addr, bMaskDWord));\r
1303 \r
1304         for (Addr = 1000; Addr < 0x17ff; Addr += 4)\r
1305                 DbgPrint("%04x %08x\n", Addr, ODM_GetBBReg(pDM_Odm, Addr, bMaskDWord));\r
1306 \r
1307         /* dump BB register */\r
1308         DbgPrint("BB==========\n");\r
1309         phydm_DumpBbReg(pDM_Odm);\r
1310 \r
1311         /* dump RF register */\r
1312         DbgPrint("RF-A==========\n");\r
1313         for (Addr = 0; Addr < 0xFF; Addr++)\r
1314                 DbgPrint("%02x %05x\n", Addr, ODM_GetRFReg(pDM_Odm, ODM_RF_PATH_A, Addr, bRFRegOffsetMask));\r
1315 \r
1316         if (pDM_Odm->RFType > ODM_1T1R) {\r
1317                 DbgPrint("RF-B==========\n");\r
1318                 for (Addr = 0; Addr < 0xFF; Addr++)\r
1319                         DbgPrint("%02x %05x\n", Addr, ODM_GetRFReg(pDM_Odm, ODM_RF_PATH_B, Addr, bRFRegOffsetMask));\r
1320         }\r
1321 \r
1322         if (pDM_Odm->RFType > ODM_2T2R) {\r
1323                 DbgPrint("RF-C==========\n");\r
1324                 for (Addr = 0; Addr < 0xFF; Addr++)\r
1325                         DbgPrint("%02x %05x\n", Addr, ODM_GetRFReg(pDM_Odm, ODM_RF_PATH_C, Addr, bRFRegOffsetMask));\r
1326         }\r
1327 \r
1328         if (pDM_Odm->RFType > ODM_3T3R) {\r
1329                 DbgPrint("RF-D==========\n");\r
1330                 for (Addr = 0; Addr < 0xFF; Addr++)\r
1331                         DbgPrint("%02x %05x\n", Addr, ODM_GetRFReg(pDM_Odm, ODM_RF_PATH_D, Addr, bRFRegOffsetMask));\r
1332         }\r
1333 }\r
1334 \r
1335 struct _PHYDM_COMMAND {\r
1336         char name[16];\r
1337         u1Byte id;\r
1338 };\r
1339 \r
1340 enum PHYDM_CMD_ID {\r
1341         PHYDM_DEMO,\r
1342         PHYDM_RA,\r
1343         PHYDM_PROFILE,\r
1344         PHYDM_ANTDIV,\r
1345         PHYDM_PATHDIV,\r
1346         PHYDM_DEBUG,\r
1347         PHYDM_SUPPORT_ABILITY,\r
1348         PHYDM_GET_TXAGC,\r
1349         PHYDM_SET_TXAGC,\r
1350         PHYDM_SMART_ANT,\r
1351         PHYDM_API,\r
1352         PHYDM_TRX_PATH,\r
1353         PHYDM_LA_MODE,\r
1354         PHYDM_DUMP_REG\r
1355 };\r
1356 \r
1357 struct _PHYDM_COMMAND phy_dm_ary[] = {\r
1358         {"demo", PHYDM_DEMO},\r
1359         {"ra", PHYDM_RA},\r
1360         {"profile", PHYDM_PROFILE},\r
1361         {"anthdiv", PHYDM_ANTDIV},\r
1362         {"pathdiv", PHYDM_PATHDIV},\r
1363         {"dbg", PHYDM_DEBUG},\r
1364         {"ability", PHYDM_SUPPORT_ABILITY},\r
1365         {"get_txagc", PHYDM_GET_TXAGC},\r
1366         {"set_txagc", PHYDM_SET_TXAGC},\r
1367         {"smtant", PHYDM_SMART_ANT},\r
1368         {"api", PHYDM_API},\r
1369         {"trxpath", PHYDM_TRX_PATH},\r
1370         {"lamode", PHYDM_LA_MODE},\r
1371         {"dumpreg", PHYDM_DUMP_REG}\r
1372 };\r
1373 \r
1374 VOID\r
1375 phydm_cmd_parser(\r
1376         IN PDM_ODM_T    pDM_Odm,\r
1377         IN char         input[][MAX_ARGV],\r
1378         IN u4Byte       input_num,\r
1379         IN u1Byte       flag,\r
1380         OUT char        *output,\r
1381         IN u4Byte       out_len\r
1382 )\r
1383 {\r
1384         u4Byte used = 0;\r
1385         u1Byte id = 0;\r
1386         int var1[5] = {0};\r
1387         int i, input_idx = 0;\r
1388 \r
1389         if (flag == 0) {\r
1390                 PHYDM_SNPRINTF((output + used, out_len - used, "GET, nothing to print\n"));\r
1391                 return;\r
1392         }\r
1393 \r
1394         PHYDM_SNPRINTF((output + used, out_len - used, "\n"));\r
1395 \r
1396         //Parsing Cmd ID\r
1397         if (input_num) {\r
1398                 int n, i;\r
1399 \r
1400                 n = sizeof(phy_dm_ary) / sizeof(struct _PHYDM_COMMAND);\r
1401                 for (i = 0; i < n; i++) {\r
1402                         if (strcmp(phy_dm_ary[i].name, input[0]) == 0) {\r
1403                                 id = phy_dm_ary[i].id;\r
1404                                 break;\r
1405                         }\r
1406                 }\r
1407                 if (i == n) {\r
1408                         PHYDM_SNPRINTF((output + used, out_len - used, "SET, command not found!\n"));\r
1409                         return;\r
1410                 }\r
1411         }\r
1412 \r
1413         switch (id) {\r
1414         case PHYDM_DEMO: /*echo demo 10 0x3a z abcde >cmd*/\r
1415                         {\r
1416                                 u4Byte   directory = 0;\r
1417 #if (DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_AP))                             \r
1418                                 char   char_temp;\r
1419 #else\r
1420                                 u4Byte char_temp = ' ';\r
1421 #endif\r
1422                 PHYDM_SSCANF(input[1], DCMD_DECIMAL, &directory);\r
1423                 PHYDM_SNPRINTF((output + used, out_len - used, "Decimal Value = %d\n", directory));\r
1424                 PHYDM_SSCANF(input[2], DCMD_HEX, &directory);\r
1425                 PHYDM_SNPRINTF((output + used, out_len - used, "Hex Value = 0x%x\n", directory));\r
1426                 PHYDM_SSCANF(input[3], DCMD_CHAR, &char_temp);\r
1427                 PHYDM_SNPRINTF((output + used, out_len - used, "Char = %c\n", char_temp));\r
1428                 PHYDM_SNPRINTF((output + used, out_len - used, "String = %s\n", input[4]));\r
1429         }\r
1430         break;\r
1431 \r
1432         case PHYDM_RA:\r
1433 \r
1434                 for (i = 0; i < 5; i++) {\r
1435                         if (input[i + 1]) {\r
1436                                 PHYDM_SSCANF(input[i + 1], DCMD_DECIMAL, &var1[i]);\r
1437 \r
1438                                 PHYDM_SNPRINTF((output + used, out_len - used, "new SET, RA_var[%d]= (( %d ))\n", i , var1[i]));\r
1439                                 input_idx++;\r
1440                         }\r
1441                 }\r
1442 \r
1443                 if (input_idx >= 1) {\r
1444                         /*PHYDM_SNPRINTF((output+used, out_len-used, "odm_RA_debug\n"));*/\r
1445 #if (defined(CONFIG_RA_DBG_CMD))\r
1446                         odm_RA_debug((PVOID)pDM_Odm, var1);\r
1447 #endif\r
1448                 }\r
1449 \r
1450 \r
1451                 break;\r
1452 \r
1453         case PHYDM_ANTDIV:\r
1454 \r
1455                 for (i = 0; i < 5; i++) {\r
1456                         if (input[i + 1]) {\r
1457                                 PHYDM_SSCANF(input[i + 1], DCMD_HEX, &var1[i]);\r
1458 \r
1459                                 /*PHYDM_SNPRINTF((output+used, out_len-used, "new SET, PATHDIV_var[%d]= (( %d ))\n", i , var1[i]));*/\r
1460                                 input_idx++;\r
1461                         }\r
1462                 }\r
1463 \r
1464                 if (input_idx >= 1) {\r
1465                         /*PHYDM_SNPRINTF((output+used, out_len-used, "odm_PATHDIV_debug\n"));*/\r
1466                 #if (defined(CONFIG_PHYDM_ANTENNA_DIVERSITY))\r
1467                         phydm_antdiv_debug(pDM_Odm, (u4Byte *)var1, &used, output, &out_len);\r
1468                 #endif\r
1469                 }\r
1470 \r
1471                 break;\r
1472 \r
1473         case PHYDM_PATHDIV:\r
1474 \r
1475                 for (i = 0; i < 5; i++) {\r
1476                         if (input[i + 1]) {\r
1477                                 PHYDM_SSCANF(input[i + 1], DCMD_HEX, &var1[i]);\r
1478 \r
1479                                 /*PHYDM_SNPRINTF((output+used, out_len-used, "new SET, PATHDIV_var[%d]= (( %d ))\n", i , var1[i]));*/\r
1480                                 input_idx++;\r
1481                         }\r
1482                 }\r
1483 \r
1484                 if (input_idx >= 1) {\r
1485                         /*PHYDM_SNPRINTF((output+used, out_len-used, "odm_PATHDIV_debug\n"));*/\r
1486 #if (defined(CONFIG_PATH_DIVERSITY))\r
1487                         odm_pathdiv_debug(pDM_Odm, (u4Byte *)var1, &used, output, &out_len);\r
1488 #endif\r
1489                 }\r
1490 \r
1491                 break;\r
1492 \r
1493         case PHYDM_DEBUG:\r
1494 \r
1495                 for (i = 0; i < 5; i++) {\r
1496                         if (input[i + 1]) {\r
1497                                 PHYDM_SSCANF(input[i + 1], DCMD_DECIMAL, &var1[i]);\r
1498 \r
1499                                 /*PHYDM_SNPRINTF((output+used, out_len-used, "new SET, Debug_var[%d]= (( %d ))\n", i , var1[i]));*/\r
1500                                 input_idx++;\r
1501                         }\r
1502                 }\r
1503 \r
1504                 if (input_idx >= 1) {\r
1505                         /*PHYDM_SNPRINTF((output+used, out_len-used, "odm_debug_comp\n"));*/\r
1506                         odm_debug_trace(pDM_Odm, (u4Byte *)var1, &used, output, &out_len);\r
1507                 }\r
1508 \r
1509 \r
1510                 break;\r
1511 \r
1512         case PHYDM_SUPPORT_ABILITY:\r
1513 \r
1514                 for (i = 0; i < 5; i++) {\r
1515                         if (input[i + 1]) {\r
1516                                 PHYDM_SSCANF(input[i + 1], DCMD_DECIMAL, &var1[i]);\r
1517 \r
1518                                 /*PHYDM_SNPRINTF((output+used, out_len-used, "new SET, support ablity_var[%d]= (( %d ))\n", i , var1[i]));*/\r
1519                                 input_idx++;\r
1520                         }\r
1521                 }\r
1522 \r
1523                 if (input_idx >= 1) {\r
1524                         /*PHYDM_SNPRINTF((output+used, out_len-used, "support ablity\n"));*/\r
1525                         phydm_support_ablity_debug(pDM_Odm, (u4Byte *)var1, &used, output, &out_len);\r
1526                 }\r
1527 \r
1528                 break;\r
1529                 \r
1530         case PHYDM_SMART_ANT:\r
1531 \r
1532                 for (i = 0; i < 5; i++) {\r
1533                         if (input[i + 1]) {\r
1534                                 PHYDM_SSCANF(input[i + 1], DCMD_HEX, &var1[i]);\r
1535                                 input_idx++;\r
1536                         }\r
1537                 }\r
1538 \r
1539                 if (input_idx >= 1) {\r
1540                         #if (defined(CONFIG_PHYDM_ANTENNA_DIVERSITY))\r
1541                         #ifdef CONFIG_HL_SMART_ANTENNA_TYPE1\r
1542                         phydm_hl_smart_ant_cmd(pDM_Odm, (u4Byte *)var1, &used, output, &out_len);\r
1543                         #endif\r
1544                         #endif\r
1545                 }\r
1546 \r
1547                 break;\r
1548 \r
1549         case PHYDM_API:\r
1550 #if (RTL8822B_SUPPORT == 1)\r
1551         {\r
1552                 if (pDM_Odm->SupportICType & ODM_RTL8822B) {\r
1553                         BOOLEAN bEnableDbgMode;\r
1554                         u1Byte central_ch, primary_ch_idx, bandwidth;\r
1555                         \r
1556                         for (i = 0; i < 4; i++) {\r
1557                                 if (input[i + 1])\r
1558                                         PHYDM_SSCANF(input[i + 1], DCMD_DECIMAL, &var1[i]);\r
1559                         }\r
1560                         \r
1561                         bEnableDbgMode = (BOOLEAN)var1[0];\r
1562                         central_ch = (u1Byte) var1[1];\r
1563                         primary_ch_idx = (u1Byte) var1[2];\r
1564                         bandwidth = (ODM_BW_E) var1[3];\r
1565 \r
1566                         if (bEnableDbgMode) {\r
1567                                 pDM_Odm->bDisablePhyApi = FALSE;\r
1568                         config_phydm_switch_channel_bw_8822b(pDM_Odm, central_ch, primary_ch_idx, bandwidth);\r
1569                                 pDM_Odm->bDisablePhyApi = TRUE;\r
1570                         PHYDM_SNPRINTF((output+used, out_len-used, "central_ch = %d, primary_ch_idx = %d, bandwidth = %d\n", central_ch, primary_ch_idx, bandwidth));\r
1571                         } else {\r
1572                                 pDM_Odm->bDisablePhyApi = FALSE;\r
1573                                 PHYDM_SNPRINTF((output+used, out_len-used, "Disable API debug mode\n"));\r
1574                         }\r
1575                 } else\r
1576                         PHYDM_SNPRINTF((output+used, out_len-used, "This IC doesn't support PHYDM API function\n"));\r
1577         }\r
1578 #else\r
1579                 PHYDM_SNPRINTF((output+used, out_len-used, "This IC doesn't support PHYDM API function\n"));\r
1580 #endif\r
1581                 break;  \r
1582                 \r
1583         case PHYDM_PROFILE: /*echo profile, >cmd*/\r
1584                 phydm_BasicProfile(pDM_Odm, &used, output, &out_len);\r
1585                 break;\r
1586 \r
1587         case PHYDM_GET_TXAGC:\r
1588                 phydm_get_txagc(pDM_Odm, &used, output, &out_len);\r
1589                 break;\r
1590                 \r
1591         case PHYDM_SET_TXAGC:\r
1592                 for (i = 0; i < 5; i++) {\r
1593                         if (input[i + 1]) {\r
1594                                 PHYDM_SSCANF(input[i + 1], DCMD_DECIMAL, &var1[i]);\r
1595 \r
1596                                 /*PHYDM_SNPRINTF((output+used, out_len-used, "new SET, support ablity_var[%d]= (( %d ))\n", i , var1[i]));*/\r
1597                                 input_idx++;\r
1598                         }\r
1599                 }\r
1600                 \r
1601                 phydm_set_txagc(pDM_Odm, (u4Byte *)var1, &used, output, &out_len);\r
1602                 break;\r
1603                 \r
1604         case PHYDM_TRX_PATH:\r
1605 #if (RTL8822B_SUPPORT == 1)\r
1606         {\r
1607                 if (pDM_Odm->SupportICType & ODM_RTL8822B) {\r
1608                         u1Byte          TxPath, RxPath;\r
1609                         BOOLEAN         bEnableDbgMode, bTx2Path;\r
1610                         \r
1611                         for (i = 0; i < 4; i++) {\r
1612                                 if (input[i + 1])\r
1613                                         PHYDM_SSCANF(input[i + 1], DCMD_DECIMAL, &var1[i]);\r
1614                         }\r
1615 \r
1616                         bEnableDbgMode = (BOOLEAN)var1[0];\r
1617                         TxPath = (u1Byte) var1[1];\r
1618                         RxPath = (u1Byte) var1[2];\r
1619                         bTx2Path = (BOOLEAN) var1[3];\r
1620 \r
1621                         if (bEnableDbgMode) {\r
1622                                 pDM_Odm->bDisablePhyApi = FALSE;\r
1623                                 config_phydm_trx_mode_8822b(pDM_Odm, TxPath, RxPath, bTx2Path);\r
1624                                 pDM_Odm->bDisablePhyApi = TRUE;\r
1625                                 PHYDM_SNPRINTF((output+used, out_len-used, "TxPath = 0x%x, RxPath = 0x%x, bTx2Path = %d\n", TxPath, RxPath, bTx2Path));\r
1626                         } else {\r
1627                                 pDM_Odm->bDisablePhyApi = FALSE;\r
1628                                 PHYDM_SNPRINTF((output+used, out_len-used, "Disable API debug mode\n"));\r
1629                         }\r
1630                 } else\r
1631                         PHYDM_SNPRINTF((output+used, out_len-used, "This IC doesn't support PHYDM API function\n"));\r
1632         }\r
1633 #else\r
1634                 PHYDM_SNPRINTF((output+used, out_len-used, "This IC doesn't support PHYDM API function\n"));\r
1635 #endif\r
1636                 break;\r
1637 \r
1638         case PHYDM_LA_MODE:\r
1639 #if (DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
1640 #if ((RTL8822B_SUPPORT == 1) || (RTL8814A_SUPPORT == 1))\r
1641         {\r
1642                 if (pDM_Odm->SupportICType & (ODM_RTL8814A | ODM_RTL8822B)) {\r
1643                         u2Byte          PollingTime;\r
1644                         u1Byte          TrigSel, TrigSigSel, DmaDataSigSel, TriggerTime;\r
1645                         BOOLEAN         bEnableLaMode;\r
1646 \r
1647                         for (i = 0; i < 6; i++) {\r
1648                                 if (input[i + 1])\r
1649                                         PHYDM_SSCANF(input[i + 1], DCMD_DECIMAL, &var1[i]);\r
1650                         }\r
1651 \r
1652                         bEnableLaMode = (BOOLEAN)var1[0];\r
1653                         if (bEnableLaMode) {\r
1654                                 TrigSel = (u1Byte)var1[1];\r
1655                                 TrigSigSel = (u1Byte)var1[2];\r
1656                                 DmaDataSigSel = (u1Byte)var1[3];\r
1657                                 TriggerTime = (u1Byte)var1[4];\r
1658                                 PollingTime = (((u1Byte)var1[5]) << 6);\r
1659 \r
1660                                 ADCSmp_Set(pDM_Odm->Adapter, TrigSel, TrigSigSel, DmaDataSigSel, TriggerTime, PollingTime);\r
1661                                 PHYDM_SNPRINTF((output+used, out_len-used, "TrigSel = %d, TrigSigSel = %d, DmaDataSigSel = %d\n", TrigSel, TrigSigSel, DmaDataSigSel));\r
1662                                 PHYDM_SNPRINTF((output+used, out_len-used, "TriggerTime = %d, PollingTime = %d\n", TriggerTime, PollingTime));\r
1663                         } else {\r
1664                                 ADCSmp_Stop(pDM_Odm->Adapter);\r
1665                                 PHYDM_SNPRINTF((output+used, out_len-used, "Disable LA mode\n"));\r
1666                         }\r
1667                 } else\r
1668                         PHYDM_SNPRINTF((output+used, out_len-used, "This IC doesn't support LA mode\n"));\r
1669         }\r
1670 #else\r
1671                 PHYDM_SNPRINTF((output+used, out_len-used, "This IC doesn't support LA mode\n"));\r
1672 #endif\r
1673 #else\r
1674                 PHYDM_SNPRINTF((output+used, out_len-used, "This IC doesn't support LA mode\n"));\r
1675 #endif\r
1676                 break;\r
1677 \r
1678         case PHYDM_DUMP_REG:\r
1679         {\r
1680                 u1Byte  type = 0;\r
1681                 \r
1682                 if (input[1]) {\r
1683                         PHYDM_SSCANF(input[1], DCMD_DECIMAL, &var1[0]);\r
1684                         type = (u1Byte)var1[0];\r
1685                 }\r
1686 \r
1687                 if (type == 0)\r
1688                         phydm_DumpBbReg(pDM_Odm);\r
1689                 else if (type == 1)\r
1690                         phydm_DumpAllReg(pDM_Odm);\r
1691         }\r
1692                 break;\r
1693         default:\r
1694                 PHYDM_SNPRINTF((output + used, out_len - used, "SET, unknown command!\n"));\r
1695                 break;\r
1696 \r
1697         }\r
1698 }\r
1699 \r
1700 #ifdef __ECOS\r
1701 char *strsep(char **s, const char *ct)\r
1702 {\r
1703         char *sbegin = *s;\r
1704         char *end;\r
1705 \r
1706         if (sbegin == NULL)\r
1707                 return NULL;\r
1708 \r
1709         end = strpbrk(sbegin, ct);\r
1710         if (end)\r
1711                 *end++ = '\0';\r
1712         *s = end;\r
1713         return sbegin;\r
1714 }\r
1715 #endif\r
1716 \r
1717 #if(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_AP))\r
1718 s4Byte\r
1719 phydm_cmd(\r
1720         IN PDM_ODM_T    pDM_Odm,\r
1721         IN char         *input,\r
1722         IN u4Byte       in_len,\r
1723         IN u1Byte       flag,\r
1724         OUT char        *output,\r
1725         IN u4Byte       out_len\r
1726 )\r
1727 {\r
1728         char *token;\r
1729         u4Byte  Argc = 0;\r
1730         char            Argv[MAX_ARGC][MAX_ARGV];\r
1731 \r
1732         do {\r
1733                 token = strsep(&input, ", ");\r
1734                 if (token) {\r
1735                         strcpy(Argv[Argc], token);\r
1736                         Argc++;\r
1737                 } else\r
1738                         break;\r
1739         } while (Argc < MAX_ARGC);\r
1740 \r
1741         if (Argc == 1)\r
1742                 Argv[0][strlen(Argv[0]) - 1] = '\0';\r
1743 \r
1744         phydm_cmd_parser(pDM_Odm, Argv, Argc, flag, output, out_len);\r
1745 \r
1746         return 0;\r
1747 }\r
1748 #endif\r
1749 \r
1750 \r
1751 VOID\r
1752 phydm_fw_trace_handler(\r
1753         IN      PVOID   pDM_VOID,\r
1754         IN      pu1Byte CmdBuf,\r
1755         IN      u1Byte  CmdLen\r
1756 )\r
1757 {\r
1758         PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
1759 \r
1760         /*u1Byte        debug_trace_11byte[60];*/\r
1761         u1Byte          freg_num, c2h_seq, buf_0 = 0;\r
1762 \r
1763         if (CmdLen > 12)\r
1764                 return;\r
1765 \r
1766         buf_0 = CmdBuf[0];\r
1767         freg_num = (buf_0 & 0xf);\r
1768         c2h_seq = (buf_0 & 0xf0) >> 4;\r
1769         /*ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE,ODM_DBG_LOUD,("[FW debug message] freg_num = (( %d )), c2h_seq = (( %d ))\n", freg_num,c2h_seq ));*/\r
1770 \r
1771         /*strncpy(debug_trace_11byte,&CmdBuf[1],(CmdLen-1));*/\r
1772         /*debug_trace_11byte[CmdLen-1] = '\0';*/\r
1773         /*ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE,ODM_DBG_LOUD,("[FW debug message] %s\n", debug_trace_11byte));*/\r
1774         /*ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE,ODM_DBG_LOUD,("[FW debug message] CmdLen = (( %d ))\n", CmdLen));*/\r
1775         /*ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE,ODM_DBG_LOUD,("[FW debug message] c2h_cmd_start  = (( %d ))\n", pDM_Odm->c2h_cmd_start));*/\r
1776 \r
1777 \r
1778 \r
1779         /*ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE,ODM_DBG_LOUD,("pre_seq = (( %d )), current_seq = (( %d ))\n", pDM_Odm->pre_c2h_seq, c2h_seq));*/\r
1780         /*ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE,ODM_DBG_LOUD,("fw_buff_is_enpty = (( %d ))\n", pDM_Odm->fw_buff_is_enpty));*/\r
1781 \r
1782         if ((c2h_seq != pDM_Odm->pre_c2h_seq)  &&  pDM_Odm->fw_buff_is_enpty == FALSE) {\r
1783                 pDM_Odm->fw_debug_trace[pDM_Odm->c2h_cmd_start] = '\0';\r
1784                 ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("[FW Dbg Queue Overflow] %s\n", pDM_Odm->fw_debug_trace));\r
1785                 pDM_Odm->c2h_cmd_start = 0;\r
1786         }\r
1787 \r
1788         if ((CmdLen - 1) > (60 - pDM_Odm->c2h_cmd_start)) {\r
1789                 pDM_Odm->fw_debug_trace[pDM_Odm->c2h_cmd_start] = '\0';\r
1790                 ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("[FW Dbg Queue error: wrong C2H length] %s\n", pDM_Odm->fw_debug_trace));\r
1791                 pDM_Odm->c2h_cmd_start = 0;\r
1792                 return;\r
1793         }\r
1794 \r
1795         strncpy((char *)&(pDM_Odm->fw_debug_trace[pDM_Odm->c2h_cmd_start]), (char *)&CmdBuf[1], (CmdLen-1));\r
1796         pDM_Odm->c2h_cmd_start += (CmdLen - 1);\r
1797         pDM_Odm->fw_buff_is_enpty = FALSE;      \r
1798         \r
1799         if (freg_num == 0 || pDM_Odm->c2h_cmd_start >= 60) {\r
1800                 if (pDM_Odm->c2h_cmd_start < 60)\r
1801                         pDM_Odm->fw_debug_trace[pDM_Odm->c2h_cmd_start] = '\0';\r
1802                 else\r
1803                         pDM_Odm->fw_debug_trace[59] = '\0';\r
1804 \r
1805                 ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("[FW DBG Msg] %s\n", pDM_Odm->fw_debug_trace));\r
1806                 /*DbgPrint("[FW DBG Msg] %s\n", pDM_Odm->fw_debug_trace);*/\r
1807                 pDM_Odm->c2h_cmd_start = 0;\r
1808                 pDM_Odm->fw_buff_is_enpty = TRUE;\r
1809         }\r
1810 \r
1811         pDM_Odm->pre_c2h_seq = c2h_seq;\r
1812 }\r
1813 \r
1814 VOID\r
1815 phydm_fw_trace_handler_code(\r
1816         IN      PVOID   pDM_VOID,\r
1817         IN      pu1Byte Buffer,\r
1818         IN      u1Byte  CmdLen\r
1819 )\r
1820 {\r
1821         PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
1822         u1Byte  function = Buffer[0];\r
1823         u1Byte  dbg_num = Buffer[1];\r
1824         u2Byte  content_0 = (((u2Byte)Buffer[3])<<8)|((u2Byte)Buffer[2]);\r
1825         u2Byte  content_1 = (((u2Byte)Buffer[5])<<8)|((u2Byte)Buffer[4]);               \r
1826         u2Byte  content_2 = (((u2Byte)Buffer[7])<<8)|((u2Byte)Buffer[6]);       \r
1827         u2Byte  content_3 = (((u2Byte)Buffer[9])<<8)|((u2Byte)Buffer[8]);\r
1828         u2Byte  content_4 = (((u2Byte)Buffer[11])<<8)|((u2Byte)Buffer[10]);\r
1829 \r
1830         if(CmdLen >12) {\r
1831                 ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE,ODM_DBG_LOUD,("[FW Msg] Invalid cmd length (( %d )) >12 \n", CmdLen));\r
1832         }\r
1833         \r
1834         //ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE,ODM_DBG_LOUD,("[FW Msg] Func=((%d)),  num=((%d)), ct_0=((%d)), ct_1=((%d)), ct_2=((%d)), ct_3=((%d)), ct_4=((%d))\n", \r
1835         //      function, dbg_num, content_0, content_1, content_2, content_3, content_4));\r
1836         \r
1837         /*--------------------------------------------*/\r
1838         if(function == RATE_DECISION) {\r
1839                 if(dbg_num == 0) {\r
1840                         if(content_0 == 1) {\r
1841                                 ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE,ODM_DBG_LOUD,("[FW][RateDecisoin] RA_CNT=((%d))  Max_device=((%d))--------------------------->\n", content_1, content_2));\r
1842                         } else if(content_0 == 2) {\r
1843                                  ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE,ODM_DBG_LOUD,("[FW][RateDecisoin] Check RA macid= ((%d)), MediaStatus=((%d)), Dis_RA=((%d)),  try_bit=((0x%x))\n", content_1, content_2, content_3, content_4));\r
1844                         } else if(content_0 == 3) {\r
1845                                  ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("[FW][RateDecisoin] Check RA  total=((%d)),  drop=((0x%x)), TXRPT_TRY_bit=((%x)), bNoisy=((%x))\n", content_1, content_2, content_3, content_4));\r
1846                         }\r
1847                 } else if(dbg_num == 1) {\r
1848                         if(content_0 == 1) {\r
1849                                 ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE,ODM_DBG_LOUD,("[FW][RateDecisoin] RTY[0,1,2,3]=[ %d,  %d,  %d,  %d ] \n", content_1, content_2, content_3, content_4));\r
1850                         } else if(content_0 == 2) {\r
1851                                 ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE,ODM_DBG_LOUD,("[FW][RateDecisoin] RTY[4]=[ %d ], drop=((%d)), total=((%d)),  current_rate=((0x%x))\n", content_1, content_2, content_3, content_4));\r
1852                         } else if(content_0 == 3) {\r
1853                                 ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE,ODM_DBG_LOUD,("[FW][RateDecisoin] penality_idx=((%d ))\n", content_1));\r
1854                         }\r
1855                 }\r
1856                 \r
1857                 else if(dbg_num == 3) {\r
1858                         if (content_0 == 1)\r
1859                                 ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("[FW][RateDecisoin] Fast_RA (( DOWN ))  total=((%d)),  total>>1=((%d)), R4+R3+R2 = ((%d)), RateDownHold = ((%d))\n", content_1, content_2, content_3, content_4));\r
1860                         else if (content_0 == 2)\r
1861                                 ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("[FW][RateDecisoin] Fast_RA (( UP ))  total_acc=((%d)),  total_acc>>1=((%d)), R4+R3+R2 = ((%d)), RateDownHold = ((%d))\n", content_1, content_2, content_3, content_4));\r
1862                         else if (content_0 == 3)\r
1863                                 ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("[FW][RateDecisoin] Fast_RA (( UP )) ((Rate Down Hold))  RA_CNT=((%d))\n", content_1));\r
1864                         else if (content_0 == 4)\r
1865                                 ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("[FW][RateDecisoin] Fast_RA (( UP )) ((tota_accl<5 skip))  RA_CNT=((%d))\n", content_1));\r
1866                         else if (content_0 == 8)\r
1867                                 ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("[FW][RateDecisoin] Fast_RA (( Reset Tx Rpt )) RA_CNT=((%d))\n", content_1));\r
1868                 }\r
1869                 \r
1870                 else if(dbg_num == 5) {\r
1871                         if(content_0 == 1) {\r
1872                                 ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE,ODM_DBG_LOUD,("[FW][RateDecisoin]  (( UP))  Nsc=((%d)), N_High=((%d))\n", content_1, content_2));\r
1873                         } else if(content_0 == 2) {\r
1874                                 ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE,ODM_DBG_LOUD,("[FW][RateDecisoin]  ((DOWN))  Nsc=((%d)), N_Low=((%d))\n", content_1, content_2));\r
1875                         } else if(content_0 == 3) {\r
1876                                 ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE,ODM_DBG_LOUD,("[FW][RateDecisoin]  ((HOLD))  Nsc=((%d)), N_High=((%d)), N_Low=((%d)), Reset_CNT=((%d))\n", content_1, content_2, content_3, content_4));\r
1877                         }\r
1878                 }\r
1879                 else if(dbg_num == 0x60) {\r
1880                         if(content_0 == 1) {\r
1881                                 ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE,ODM_DBG_LOUD,("[FW][RateDecisoin]  ((AP RPT))  macid=((%d)), BUPDATE[macid]=((%d))\n", content_1, content_2));\r
1882                         } else if(content_0 == 4) {\r
1883                                 ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE,ODM_DBG_LOUD,("[FW][RateDecisoin]  ((AP RPT))  pass=((%d)), rty_num=((%d)), drop=((%d)), total=((%d))\n", content_1, content_2, content_3, content_4));\r
1884                         } else if(content_0 == 5) {\r
1885                                 ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE,ODM_DBG_LOUD,("[FW][RateDecisoin]  ((AP RPT))  PASS=((%d)), RTY_NUM=((%d)), DROP=((%d)), TOTAL=((%d))\n", content_1, content_2, content_3, content_4));\r
1886                         }\r
1887                 }\r
1888                 else if(dbg_num == 0xff) {\r
1889                         if(content_0 == 1) {\r
1890                                 ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE,ODM_DBG_LOUD,("\n\n"));\r
1891                         } \r
1892                 }\r
1893                 \r
1894         } \r
1895         /*--------------------------------------------*/\r
1896         else if (function == INIT_RA_TABLE){\r
1897                 if(dbg_num == 3) {\r
1898                         ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("[FW][INIT_RA_INFO] Ra_init, RA_SKIP_CNT = (( %d ))\n", content_0));\r
1899                 }\r
1900                 \r
1901         } \r
1902         /*--------------------------------------------*/\r
1903         else if (function == RATE_UP) {\r
1904                 if(dbg_num == 2) {\r
1905                         if(content_0 == 1) {\r
1906                                 ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("[FW][RateUp]  ((Highest rate -> return)), macid=((%d))  Nsc=((%d))\n", content_1, content_2));\r
1907                         }\r
1908                 } else if(dbg_num == 5) {\r
1909                         if (content_0 == 0)\r
1910                                 ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("[FW][RateUp]  ((Rate UP)), up_rate_tmp=((0x%x)), rate_idx=((0x%x)), SGI_en=((%d)),  SGI=((%d))\n", content_1, content_2, content_3, content_4));\r
1911                         else if (content_0 == 1)\r
1912                                 ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("[FW][RateUp]  ((Rate UP)), rate_1=((0x%x)), rate_2=((0x%x)), BW=((%d)), Try_Bit=((%d))\n", content_1, content_2, content_3, content_4));\r
1913                 }\r
1914                 \r
1915         } \r
1916         /*--------------------------------------------*/\r
1917         else if (function == RATE_DOWN) {\r
1918                  if(dbg_num == 5) {\r
1919                         if(content_0 == 1) {\r
1920                                 ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("[FW][RateDownStep]  ((Rate Down)), macid=((%d)),  rate=((0x%x)),  BW=((%d))\n", content_1, content_2, content_3));\r
1921                         }\r
1922                 }\r
1923         } else if (function == TRY_DONE) {\r
1924                 if (dbg_num == 1) {\r
1925                         if (content_0 == 1) {\r
1926                                 ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("[FW][Try Done]  ((try succsess )) macid=((%d)), Try_Done_cnt=((%d))\n", content_1, content_2));\r
1927                                 /**/\r
1928                         }\r
1929                 } else if (dbg_num == 2) {\r
1930                         if (content_0 == 1)\r
1931                                 ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("[FW][Try Done]  ((try fail )) macid=((%d)), Try_Done_cnt=((%d)),  multi_try_rate=((%d))\n", content_1, content_2, content_3));\r
1932                 }\r
1933         }\r
1934         /*--------------------------------------------*/\r
1935         else if (function == F_RATE_AP_RPT) {\r
1936                  if(dbg_num == 1) {\r
1937                         if(content_0 == 1) {\r
1938                                 ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("[FW][AP RPT]  ((1)), SPE_STATIS=((0x%x))---------->\n", content_3));                          \r
1939                         } \r
1940                 } else if(dbg_num == 2) {\r
1941                         if(content_0 == 1) {\r
1942                                 ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("[FW][AP RPT]  RTY_all=((%d))\n", content_1));                         \r
1943                         } \r
1944                 } else if(dbg_num == 3) {\r
1945                         if(content_0 == 1) {\r
1946                                 ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("[FW][AP RPT]  MACID1[%d], TOTAL=((%d)),  RTY=((%d))\n", content_3, content_1, content_2));\r
1947                         } \r
1948                 } else if(dbg_num == 4) {\r
1949                         if(content_0 == 1) {\r
1950                                 ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("[FW][AP RPT]  MACID2[%d], TOTAL=((%d)),  RTY=((%d))\n", content_3, content_1, content_2));\r
1951                         } \r
1952                 } else if(dbg_num == 5) {\r
1953                         if(content_0 == 1) {\r
1954                                 ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("[FW][AP RPT]  MACID1[%d], PASS=((%d)),  DROP=((%d))\n", content_3, content_1, content_2));\r
1955                         } \r
1956                 } else if(dbg_num == 6) {\r
1957                         if(content_0 == 1) {\r
1958                                 ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("[FW][AP RPT]  MACID2[%d],, PASS=((%d)),  DROP=((%d))\n", content_3, content_1, content_2));\r
1959                         } \r
1960                 }\r
1961         }\r
1962         /*--------------------------------------------*/\r
1963                 \r
1964 \r
1965 }\r
1966 \r
1967 VOID\r
1968 phydm_fw_trace_handler_8051(\r
1969         IN      PVOID   pDM_VOID,\r
1970         IN      pu1Byte Buffer,\r
1971         IN      u1Byte  CmdLen\r
1972 )\r
1973 {\r
1974         PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
1975 #if 0\r
1976         if (CmdLen >= 3)\r
1977                 CmdBuf[CmdLen - 1] = '\0';\r
1978         ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("[FW DBG Msg] %s\n", &(CmdBuf[3])));\r
1979 #else\r
1980 \r
1981         int i = 0;\r
1982         u1Byte  Extend_c2hSubID = 0, Extend_c2hDbgLen = 0, Extend_c2hDbgSeq = 0;\r
1983         u1Byte  fw_debug_trace[128];\r
1984         pu1Byte Extend_c2hDbgContent = 0;\r
1985         \r
1986         if (CmdLen > 127)\r
1987                 return;\r
1988 \r
1989         Extend_c2hSubID = Buffer[0];\r
1990         Extend_c2hDbgLen = Buffer[1];\r
1991         Extend_c2hDbgContent = Buffer + 2; /*DbgSeq+DbgContent  for show HEX*/\r
1992 \r
1993         #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
1994         RT_DISP(FC2H, C2H_Summary, ("[Extend C2H packet], Extend_c2hSubId=0x%x, Extend_c2hDbgLen=%d\n", \r
1995                         Extend_c2hSubID, Extend_c2hDbgLen));\r
1996         \r
1997         RT_DISP_DATA(FC2H, C2H_Summary, "[Extend C2H packet], Content Hex:", Extend_c2hDbgContent, CmdLen-2);\r
1998         #endif\r
1999 \r
2000 GoBackforAggreDbgPkt:\r
2001         i = 0;\r
2002         Extend_c2hDbgSeq = Buffer[2];\r
2003         Extend_c2hDbgContent = Buffer + 3;\r
2004         \r
2005         #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)    \r
2006         RT_DISP(FC2H, C2H_Summary, ("[RTKFW, SEQ= %d] :", Extend_c2hDbgSeq));\r
2007         #endif  \r
2008 \r
2009         for (; ; i++) {\r
2010                 fw_debug_trace[i] = Extend_c2hDbgContent[i];\r
2011                 if (Extend_c2hDbgContent[i + 1] == '\0') {\r
2012                         fw_debug_trace[i + 1] = '\0';\r
2013                         ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("[FW DBG Msg] %s", &(fw_debug_trace[0])));\r
2014                         break;\r
2015                 } else if (Extend_c2hDbgContent[i] == '\n') {\r
2016                         fw_debug_trace[i + 1] = '\0';\r
2017                         ODM_RT_TRACE(pDM_Odm, ODM_FW_DEBUG_TRACE, ODM_DBG_LOUD, ("[FW DBG Msg] %s", &(fw_debug_trace[0])));\r
2018                         Buffer = Extend_c2hDbgContent + i + 3;\r
2019                         goto GoBackforAggreDbgPkt;\r
2020                 }\r
2021         }\r
2022 \r
2023 \r
2024 #endif\r
2025 }\r
2026 \r
2027 \r