7e514db3b6094aa2346038aa662944658fe8e527
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8723bs / hal / OUTSRC / 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 \r
58 //MAC Functions\r
59 //                                                                      ODM_COMP_EDCA_TURBO                     |\r
60 //                                                                      ODM_COMP_EARLY_MODE                     |\r
61 //RF Functions\r
62 //                                                                      ODM_COMP_TX_PWR_TRACK           |\r
63 //                                                                      ODM_COMP_RX_GAIN_TRACK          |\r
64 //                                                                      ODM_COMP_CALIBRATION                    |\r
65 //Common\r
66 //                                                                      ODM_COMP_COMMON                         |\r
67 //                                                                      ODM_COMP_INIT                                   |\r
68 //                                                                      ODM_COMP_PSD                                    |\r
69 #endif\r
70                                                                         0;\r
71 }\r
72 \r
73 #if(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
74 \r
75 static u1Byte   BbDbgBuf[BB_TMP_BUF_SIZE];\r
76 VOID\r
77 phydm_BB_Debug_Info(IN PDM_ODM_T pDM_Odm)\r
78 {\r
79 \r
80         u1Byte  RX_HT_BW, RX_VHT_BW, RXSC, RX_HT, RX_BW;\r
81         static u1Byte vRX_BW ;\r
82         u4Byte  value32, value32_1, value32_2, value32_3;\r
83         s4Byte  SFO_A, SFO_B, SFO_C, SFO_D;\r
84         s4Byte  LFO_A, LFO_B, LFO_C, LFO_D;\r
85         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
86         static u2Byte   HLength,htcrc8,Length;\r
87         static u2Byte vpaid;\r
88         static u2Byte   vLength,vhtcrc8,vMCSS,vTail,vbTail;\r
89         static u1Byte   HMCSS,HRX_BW;\r
90 \r
91         \r
92         u1Byte    pwDB;\r
93         s1Byte    RXEVM_0, RXEVM_1, RXEVM_2 ;\r
94         u1Byte    RF_gain_pathA, RF_gain_pathB, RF_gain_pathC, RF_gain_pathD;\r
95         u1Byte    RX_SNR_pathA, RX_SNR_pathB, RX_SNR_pathC, RX_SNR_pathD;\r
96        s4Byte    sig_power;\r
97        const char *RXHT_table[] = {"legacy", "HT", "VHT"};\r
98         const char *BW_table[] = {"20M", "40M", "80M"};\r
99         const char *RXSC_table[] = {"duplicate/full bw", "usc20-1", "lsc20-1", "usc20-2", "lsc20-2",  "usc40", "lsc40"};\r
100 \r
101         const char *L_rate[]={"6M","9M","12M","18M","24M","36M","48M","54M"}; \r
102 \r
103         \r
104         /*\r
105         const double evm_comp_20M = 0.579919469776867; //10*log10(64.0/56.0)\r
106         const double evm_comp_40M = 0.503051183113957; //10*log10(128.0/114.0)\r
107         const double evm_comp_80M = 0.244245993314183; //10*log10(256.0/242.0)\r
108         const double evm_comp_160M = 0.244245993314183; //10*log10(512.0/484.0)\r
109        */\r
110 \r
111         if(pDM_Odm->SupportICType & ODM_IC_11N_SERIES)\r
112                 return;\r
113 \r
114         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s \n", "BB Report Info");\r
115         DCMD_Printf(BbDbgBuf);\r
116 \r
117        //BW & Mode Detection\r
118         ///////////////////////////////////////////////////////                 \r
119         value32 = ODM_GetBBReg(pDM_Odm, 0xf80 ,bMaskDWord);\r
120         value32_2 =value32; \r
121         RX_HT_BW = (u1Byte)(value32&0x1)        ;\r
122         RX_VHT_BW = (u1Byte)((value32>>1)&0x3);\r
123         RXSC = (u1Byte)(value32&0x78);\r
124         value32_1= (value32&0x180)>>7;\r
125         RX_HT = (u1Byte)(value32_1);\r
126         /*              \r
127         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "F80", value32_2);\r
128         DCMD_Printf(BbDbgBuf);\r
129 \r
130         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "RX_HT_BW", RX_HT_BW);\r
131         DCMD_Printf(BbDbgBuf);\r
132 \r
133         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "RX_VHT_BW", RX_VHT_BW);\r
134         DCMD_Printf(BbDbgBuf);\r
135 \r
136         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "RX_SC", RXSC);\r
137         DCMD_Printf(BbDbgBuf);\r
138 \r
139         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "RX_HT", RX_HT);\r
140         DCMD_Printf(BbDbgBuf);\r
141         */\r
142         \r
143         //rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  RX_HT:%s ", RXHT_table[RX_HT]);\r
144         //DCMD_Printf(BbDbgBuf);\r
145         RX_BW = 0;\r
146 \r
147         if(RX_HT == 2)\r
148         {\r
149                 rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  Mode: VHT Mode");\r
150                 DCMD_Printf(BbDbgBuf);\r
151                 if(RX_VHT_BW==0)\r
152                 {\r
153                         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "     BW=20M");\r
154                         DCMD_Printf(BbDbgBuf);\r
155                 }       \r
156                 else if(RX_VHT_BW==1)\r
157                 {\r
158                         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "     BW=40M");\r
159                         DCMD_Printf(BbDbgBuf);\r
160                 }\r
161                 else\r
162                 {\r
163                         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "     BW=80M");\r
164                         DCMD_Printf(BbDbgBuf);\r
165                 }\r
166                 RX_BW = RX_VHT_BW;\r
167         }\r
168         else if(RX_HT == 1)\r
169         {\r
170                 rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  Mode: HT Mode");\r
171                 DCMD_Printf(BbDbgBuf);\r
172                 if(RX_HT_BW==0)\r
173                 {\r
174                         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "     BW=20M");\r
175                         DCMD_Printf(BbDbgBuf);\r
176                 }       \r
177                 else if(RX_HT_BW==1)\r
178                 {\r
179                         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "     BW=40M");\r
180                         DCMD_Printf(BbDbgBuf);\r
181                 }\r
182                 RX_BW = RX_HT_BW;\r
183         }\r
184         else\r
185         {\r
186                 rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  Mode: Legeacy Mode");\r
187                 DCMD_Printf(BbDbgBuf);\r
188         }\r
189 \r
190         if(RX_HT !=0)\r
191         {\r
192                 if(RXSC==0)\r
193                         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  duplicate/full bw");\r
194                 else if(RXSC==1)\r
195                         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  usc20-1");\r
196                 else if(RXSC==2)\r
197                         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  lsc20-1");\r
198                 else if(RXSC==3)\r
199                         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  usc20-2");\r
200                 else if(RXSC==4)\r
201                         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  lsc20-2");\r
202                 else if(RXSC==9)\r
203                         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  usc40");\r
204                 else if(RXSC==10)\r
205                         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  lsc40");\r
206                 DCMD_Printf(BbDbgBuf);\r
207         }\r
208         /*\r
209         if(RX_HT == 2){\r
210                 rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "  BW:%s", BW_table[RX_VHT_BW]);\r
211                 RX_BW = RX_VHT_BW;\r
212                 }\r
213         else if(RX_HT == 1){            \r
214                 rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "  BW:%s", BW_table[RX_HT_BW]);\r
215                 RX_BW = RX_HT_BW;\r
216                 }\r
217         else\r
218                 rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE,  "");\r
219         \r
220         DCMD_Printf(BbDbgBuf);  \r
221         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "  RXSC:%s", RXSC_table[RXSC]);             \r
222         DCMD_Printf(BbDbgBuf);\r
223         */\r
224         /////////////////////////////////////////////////////// \r
225         \r
226 //      rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "dB Conversion: 10log(65)", ODM_PWdB_Conversion(65,10,0));\r
227 //      DCMD_Printf(BbDbgBuf);\r
228 \r
229         // RX signal power and AGC related info\r
230         ///////////////////////////////////////////////////////\r
231        value32 = ODM_GetBBReg(pDM_Odm, 0xF90 ,bMaskDWord);\r
232         pwDB = (u1Byte) ((value32 & bMaskByte1) >> 8);\r
233         pwDB=pwDB>>1;\r
234         sig_power = -110+pwDB;\r
235         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "OFDM RX Signal Power(dB)", sig_power);\r
236         DCMD_Printf(BbDbgBuf);\r
237 \r
238 \r
239         value32 = ODM_GetBBReg(pDM_Odm, 0xd14 ,bMaskDWord);\r
240         RX_SNR_pathA = (u1Byte)(value32&0xFF)>>1;\r
241         RF_gain_pathA = (s1Byte) ((value32 & bMaskByte1) >> 8);\r
242         RF_gain_pathA *=2;\r
243         value32 = ODM_GetBBReg(pDM_Odm, 0xd54 ,bMaskDWord);\r
244         RX_SNR_pathB = (u1Byte)(value32&0xFF)>>1;\r
245         RF_gain_pathB = (s1Byte) ((value32 & bMaskByte1) >> 8);\r
246         RF_gain_pathB *=2;\r
247         value32 = ODM_GetBBReg(pDM_Odm, 0xd94 ,bMaskDWord);\r
248         RX_SNR_pathC = (u1Byte)(value32&0xFF)>>1;\r
249         RF_gain_pathC = (s1Byte) ((value32 & bMaskByte1) >> 8);\r
250         RF_gain_pathC *=2;\r
251         value32 = ODM_GetBBReg(pDM_Odm, 0xdd4 ,bMaskDWord);\r
252         RX_SNR_pathD = (u1Byte)(value32&0xFF)>>1;\r
253         RF_gain_pathD = (s1Byte) ((value32 & bMaskByte1) >> 8);\r
254         RF_gain_pathD *=2;\r
255         rsprintf(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
256         DCMD_Printf(BbDbgBuf);  \r
257         ///////////////////////////////////////////////////////\r
258 \r
259         // RX Counter related info\r
260         /////////////////////////////////////////////////////// \r
261         value32 = ODM_GetBBReg(pDM_Odm, 0xF08 ,bMaskDWord);\r
262         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "OFDM CCA Counter", ((value32&0xFFFF0000)>>16));\r
263         DCMD_Printf(BbDbgBuf);\r
264         \r
265         value32 = ODM_GetBBReg(pDM_Odm, 0xFD0 ,bMaskDWord);\r
266        rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "OFDM SBD Fail Counter", value32&0xFFFF);\r
267         DCMD_Printf(BbDbgBuf);\r
268         \r
269         value32 = ODM_GetBBReg(pDM_Odm, 0xFC4 ,bMaskDWord);\r
270         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d", "VHT SIGA/SIGB CRC8 Fail Counter", value32&0xFFFF, ((value32&0xFFFF0000)>>16));\r
271         DCMD_Printf(BbDbgBuf);\r
272 \r
273         value32 = ODM_GetBBReg(pDM_Odm, 0xFCC ,bMaskDWord);\r
274         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "CCK CCA Counter", value32&0xFFFF);\r
275         DCMD_Printf(BbDbgBuf);\r
276         \r
277         value32 = ODM_GetBBReg(pDM_Odm, 0xFBC ,bMaskDWord);\r
278         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d", "LSIG (\"Parity Fail\"/\"Rate Illegal\") Counter", value32&0xFFFF, ((value32&0xFFFF0000)>>16));\r
279         DCMD_Printf(BbDbgBuf);\r
280 \r
281         value32_1 = ODM_GetBBReg(pDM_Odm, 0xFC8 ,bMaskDWord);\r
282         value32_2 = ODM_GetBBReg(pDM_Odm, 0xFC0 ,bMaskDWord);\r
283         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d", "HT/VHT MCS NOT SUPPORT counter", ((value32_2&0xFFFF0000)>>16), value32_1&0xFFFF);\r
284         DCMD_Printf(BbDbgBuf);\r
285         ///////////////////////////////////////////////////////\r
286         \r
287         // PostFFT related info\r
288         ///////////////////////////////////////////////////////\r
289 \r
290         value32 = ODM_GetBBReg(pDM_Odm, 0xF8c ,bMaskDWord);\r
291         RXEVM_0 = (s1Byte) ((value32 & bMaskByte2) >> 16);\r
292         RXEVM_0 /=2;\r
293         if(RXEVM_0 < -63)\r
294                 RXEVM_0=0;\r
295         \r
296         DCMD_Printf(BbDbgBuf);\r
297         RXEVM_1 = (s1Byte) ((value32 & bMaskByte3) >> 24);\r
298         RXEVM_1 /=2;\r
299         value32 = ODM_GetBBReg(pDM_Odm, 0xF88 ,bMaskDWord);\r
300         RXEVM_2 = (s1Byte) ((value32 & bMaskByte2) >> 16);\r
301         RXEVM_2 /=2;\r
302 \r
303         if(RXEVM_1 < -63)\r
304                 RXEVM_1=0;\r
305         if(RXEVM_2 < -63)\r
306                 RXEVM_2=0;\r
307         \r
308         /*\r
309         if(RX_BW == 0){\r
310                 RXEVM_0 -= evm_comp_20M;\r
311                 RXEVM_1 -= evm_comp_20M;\r
312                 RXEVM_2 -= evm_comp_20M;                \r
313                 }\r
314         else if(RX_BW == 1){\r
315                 RXEVM_0 -= evm_comp_40M;\r
316                 RXEVM_1 -= evm_comp_40M;\r
317                 RXEVM_2 -= evm_comp_40M;                \r
318                 }\r
319         else if (RX_BW == 2){\r
320                 RXEVM_0 -= evm_comp_80M;\r
321                 RXEVM_1 -= evm_comp_80M;\r
322                 RXEVM_2 -= evm_comp_80M;                \r
323                 }\r
324                 */\r
325         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d / %d", "RXEVM (1ss/2ss/3ss)", RXEVM_0, RXEVM_1, RXEVM_2);\r
326         DCMD_Printf(BbDbgBuf);\r
327 \r
328 //      value32 = ODM_GetBBReg(pDM_Odm, 0xD14 ,bMaskDWord);\r
329         rsprintf(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
330         DCMD_Printf(BbDbgBuf);\r
331 //      rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "B_RXSNR", (value32&0xFF00)>>9);\r
332 //      DCMD_Printf(BbDbgBuf);\r
333 \r
334         value32 = ODM_GetBBReg(pDM_Odm, 0xF8C ,bMaskDWord);\r
335         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d", "CSI_1st /CSI_2nd", value32&0xFFFF, ((value32&0xFFFF0000)>>16));\r
336         DCMD_Printf(BbDbgBuf);\r
337         ///////////////////////////////////////////////////////                 \r
338         \r
339         //BW & Mode Detection\r
340 \r
341         //Reset Page F Counter\r
342         ODM_SetBBReg(pDM_Odm, 0xB58 ,BIT0, 1);\r
343         ODM_SetBBReg(pDM_Odm, 0xB58 ,BIT0, 0);\r
344         \r
345         //CFO Report Info\r
346         //Short CFO\r
347         value32 = ODM_GetBBReg(pDM_Odm, 0xd0c ,bMaskDWord);\r
348         value32_1 = ODM_GetBBReg(pDM_Odm, 0xd4c ,bMaskDWord);\r
349         value32_2 = ODM_GetBBReg(pDM_Odm, 0xd8c ,bMaskDWord);\r
350         value32_3 = ODM_GetBBReg(pDM_Odm, 0xdcc ,bMaskDWord);\r
351 \r
352         SFO_A=(s4Byte)(value32&bMask12Bits);\r
353         SFO_B=(s4Byte)(value32_1&bMask12Bits);\r
354         SFO_C=(s4Byte)(value32_2&bMask12Bits);\r
355         SFO_D=(s4Byte)(value32_3&bMask12Bits);\r
356 \r
357         LFO_A=(s4Byte)(value32>>16);\r
358         LFO_B=(s4Byte)(value32_1>>16);\r
359         LFO_C=(s4Byte)(value32_2>>16);\r
360         LFO_D=(s4Byte)(value32_3>>16);\r
361 \r
362         //SFO 2's to dec\r
363         if(SFO_A >2047)\r
364         {\r
365                 SFO_A=SFO_A-4096;\r
366         }\r
367         SFO_A=(SFO_A*312500)/2048;\r
368         \r
369         if(SFO_B >2047)\r
370         {\r
371                 SFO_B=SFO_B-4096;\r
372         }\r
373         SFO_B=(SFO_B*312500)/2048;\r
374         if(SFO_C >2047)\r
375         {\r
376                 SFO_C=SFO_C-4096;\r
377         }\r
378         SFO_C=(SFO_C*312500)/2048;\r
379         if(SFO_D >2047)\r
380         {\r
381                 SFO_D=SFO_D-4096;\r
382         }\r
383         SFO_D=(SFO_D*312500)/2048;\r
384 \r
385         //LFO 2's to dec\r
386         \r
387         if(LFO_A >4095)\r
388         {\r
389                 LFO_A=LFO_A-8192;\r
390         }\r
391         \r
392         if(LFO_B >4095)\r
393         {\r
394                 LFO_B=LFO_B-8192;\r
395         }\r
396 \r
397         if(LFO_C>4095)\r
398         {\r
399                 LFO_C=LFO_C-8192;\r
400         }\r
401 \r
402         if(LFO_D >4095)\r
403         {\r
404                 LFO_D=LFO_D-8192;\r
405         }\r
406         LFO_A=LFO_A*312500/4096;\r
407         LFO_B=LFO_B*312500/4096;\r
408         LFO_C=LFO_C*312500/4096;\r
409         LFO_D=LFO_D*312500/4096;\r
410         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "CFO Report Info");\r
411         DCMD_Printf(BbDbgBuf);\r
412         \r
413         rsprintf(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
414         DCMD_Printf(BbDbgBuf);\r
415 \r
416         rsprintf(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
417         DCMD_Printf(BbDbgBuf);\r
418 \r
419         //SCFO\r
420         value32 = ODM_GetBBReg(pDM_Odm, 0xd10 ,bMaskDWord);\r
421         value32_1 = ODM_GetBBReg(pDM_Odm, 0xd50 ,bMaskDWord);\r
422         value32_2 = ODM_GetBBReg(pDM_Odm, 0xd90 ,bMaskDWord);\r
423         value32_3 = ODM_GetBBReg(pDM_Odm, 0xdd0 ,bMaskDWord);\r
424 \r
425         SFO_A=(s4Byte)(value32&0x7ff);\r
426         SFO_B=(s4Byte)(value32_1&0x7ff);\r
427         SFO_C=(s4Byte)(value32_2&0x7ff);\r
428         SFO_D=(s4Byte)(value32_3&0x7ff);\r
429 \r
430         if(SFO_A >1023)\r
431         {\r
432                 SFO_A=SFO_A-2048;\r
433         }\r
434         \r
435         if(SFO_B >2047)\r
436         {\r
437                 SFO_B=SFO_B-4096;\r
438 }\r
439 \r
440         if(SFO_C >2047)\r
441         {\r
442                 SFO_C=SFO_C-4096;\r
443         }\r
444 \r
445         if(SFO_D >2047)\r
446         {\r
447                 SFO_D=SFO_D-4096;\r
448         }\r
449         \r
450         SFO_A=SFO_A*312500/1024;\r
451         SFO_B=SFO_B*312500/1024;\r
452         SFO_C=SFO_C*312500/1024;\r
453         SFO_D=SFO_D*312500/1024;\r
454 \r
455         LFO_A=(s4Byte)(value32>>16);\r
456         LFO_B=(s4Byte)(value32_1>>16);\r
457         LFO_C=(s4Byte)(value32_2>>16);\r
458         LFO_D=(s4Byte)(value32_3>>16);\r
459 \r
460         if(LFO_A >4095)\r
461         {\r
462                 LFO_A=LFO_A-8192;\r
463         }\r
464         \r
465         if(LFO_B >4095)\r
466         {\r
467                 LFO_B=LFO_B-8192;\r
468         }\r
469 \r
470         if(LFO_C>4095)\r
471         {\r
472                 LFO_C=LFO_C-8192;\r
473         }\r
474 \r
475         if(LFO_D >4095)\r
476         {\r
477                 LFO_D=LFO_D-8192;\r
478         }\r
479         LFO_A=LFO_A*312500/4096;\r
480         LFO_B=LFO_B*312500/4096;\r
481         LFO_C=LFO_C*312500/4096;\r
482         LFO_D=LFO_D*312500/4096;\r
483         \r
484         rsprintf(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
485         DCMD_Printf(BbDbgBuf);\r
486 \r
487         rsprintf(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
488         DCMD_Printf(BbDbgBuf);\r
489 \r
490         value32 = ODM_GetBBReg(pDM_Odm, 0xd14 ,bMaskDWord);\r
491         value32_1 = ODM_GetBBReg(pDM_Odm, 0xd54 ,bMaskDWord);\r
492         value32_2 = ODM_GetBBReg(pDM_Odm, 0xd94 ,bMaskDWord);\r
493         value32_3 = ODM_GetBBReg(pDM_Odm, 0xdd4 ,bMaskDWord);\r
494 \r
495         LFO_A=(s4Byte)(value32>>16);\r
496         LFO_B=(s4Byte)(value32_1>>16);\r
497         LFO_C=(s4Byte)(value32_2>>16);\r
498         LFO_D=(s4Byte)(value32_3>>16);\r
499 \r
500         if(LFO_A >4095)\r
501         {\r
502                 LFO_A=LFO_A-8192;\r
503         }\r
504         \r
505         if(LFO_B >4095)\r
506         {\r
507                 LFO_B=LFO_B-8192;\r
508         }\r
509 \r
510         if(LFO_C>4095)\r
511         {\r
512                 LFO_C=LFO_C-8192;\r
513         }\r
514 \r
515         if(LFO_D >4095)\r
516         {\r
517                 LFO_D=LFO_D-8192;\r
518         }\r
519         LFO_A=LFO_A*312500/4096;\r
520         LFO_B=LFO_B*312500/4096;\r
521         LFO_C=LFO_C*312500/4096;\r
522         LFO_D=LFO_D*312500/4096;\r
523         \r
524         rsprintf(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
525         DCMD_Printf(BbDbgBuf);\r
526 \r
527         value32 = ODM_GetBBReg(pDM_Odm, 0xf20 ,bMaskDWord);   //L SIG\r
528         \r
529         Tail=(u1Byte)((value32&0xfc0000)>>16);\r
530         Parity = (u1Byte)((value32&0x20000)>>16);\r
531         Length =(u2Byte)((value32&0x1ffe00)>>8);\r
532         rsv = (u1Byte)(value32&0x10);\r
533         MCSS=(u1Byte)(value32&0x0f);\r
534 \r
535         switch(MCSS)\r
536         {\r
537                 case 0x0b:\r
538                         idx=0;\r
539                 break;\r
540                 case 0x0f:\r
541                         idx=1;\r
542                 break;\r
543                 case 0x0a:\r
544                         idx=2;\r
545                 break;\r
546                 case 0x0e:\r
547                         idx=3;\r
548                 break;\r
549                 case 0x09:\r
550                         idx=4;\r
551                 break;\r
552                 case 0x08:\r
553                         idx=5;\r
554                 break;\r
555                 case 0x0c:\r
556                         idx=6;\r
557                 break;\r
558                 default:\r
559                         idx=6;\r
560                 break;\r
561                         \r
562         }\r
563 \r
564         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "L-SIG");\r
565         DCMD_Printf(BbDbgBuf);\r
566 \r
567         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n   Rate:%s", L_rate[idx]);             \r
568         DCMD_Printf(BbDbgBuf);  \r
569 \r
570         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %x/ %x /%x", "  Rsv/Length/Parity",rsv,RX_BW,Length);\r
571         DCMD_Printf(BbDbgBuf);\r
572 \r
573         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "HT-SIG1");\r
574         DCMD_Printf(BbDbgBuf);\r
575 \r
576         value32 = ODM_GetBBReg(pDM_Odm, 0xf2c ,bMaskDWord);   //HT SIG\r
577         if(RX_HT == 1)\r
578         {\r
579         \r
580                 HMCSS=(u1Byte)(value32&0x7F);\r
581                 HRX_BW = (u1Byte)(value32&0x80);\r
582                 HLength =(u2Byte)((value32>>8)&0xffff);\r
583         }\r
584         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %x / %x/ %x", "  MCS/BW/Length",HMCSS,HRX_BW,HLength);\r
585         DCMD_Printf(BbDbgBuf);\r
586 \r
587         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "HT-SIG2");\r
588         DCMD_Printf(BbDbgBuf);\r
589 \r
590         value32 = ODM_GetBBReg(pDM_Odm, 0xf30 ,bMaskDWord);   //HT SIG\r
591 \r
592         if(RX_HT == 1)\r
593         {\r
594                 smooth = (u1Byte)(value32&0x01);\r
595                 htsound =  (u1Byte)(value32&0x02);\r
596                 rsv=(u1Byte)(value32&0x04);\r
597                 agg =(u1Byte)(value32&0x08);\r
598                 stbc =(u1Byte)(value32&0x30);\r
599                 fec=(u1Byte)(value32&0x40);\r
600                 sgi=(u1Byte)(value32&0x80);\r
601                 htltf=(u1Byte)((value32&0x300)>>8);\r
602                 htcrc8=(u2Byte)((value32&0x3fc00)>>8);\r
603                 Tail=(u1Byte)((value32&0xfc0000)>>16);\r
604 \r
605         \r
606         }\r
607         rsprintf(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
608         DCMD_Printf(BbDbgBuf);\r
609         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %x / %x/ %x/ %x", "  SGI/E-HT-LTFs/CRC/Tail",sgi,htltf,htcrc8,Tail);\r
610         DCMD_Printf(BbDbgBuf);\r
611 \r
612         \r
613         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "VHT-SIG-A1");\r
614         DCMD_Printf(BbDbgBuf);\r
615         value32 = ODM_GetBBReg(pDM_Odm, 0xf2c ,bMaskDWord);   //VHT SIG A1\r
616         if(RX_HT == 2)\r
617         {\r
618                 //value32 = ODM_GetBBReg(pDM_Odm, 0xf2c ,bMaskDWord);   //VHT SIG A1\r
619                 vRX_BW=(u1Byte)(value32&0x03);\r
620                 vrsv=(u1Byte)(value32&0x04);\r
621                 vstbc =(u1Byte)(value32&0x08);\r
622                 vgid = (u1Byte)((value32&0x3f0)>>4);\r
623                 vNsts = (u1Byte)(((value32&0x1c00)>>8)+1);\r
624                 vpaid = (u2Byte)(value32&0x3fe);\r
625                 vtxops =(u1Byte)((value32&0x400000)>>20);\r
626                 vrsv2 = (u1Byte)((value32&0x800000)>>20);\r
627         }\r
628 \r
629         //rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %x", "F2C", value32);\r
630         //DCMD_Printf(BbDbgBuf);\r
631 \r
632         \r
633         rsprintf(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
634         DCMD_Printf(BbDbgBuf);\r
635         \r
636         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "VHT-SIG-A2");\r
637         DCMD_Printf(BbDbgBuf);\r
638         value32 = ODM_GetBBReg(pDM_Odm, 0xf30 ,bMaskDWord);   //VHT SIG\r
639 \r
640 \r
641         if(RX_HT == 2)\r
642         {\r
643                 //value32 = ODM_GetBBReg(pDM_Odm, 0xf30 ,bMaskDWord);   //VHT SIG\r
644 \r
645                 //sgi=(u1Byte)(value32&0x01);\r
646                 sgiext =(u1Byte)(value32&0x03);\r
647                 //fec = (u1Byte)(value32&0x04);\r
648                 fecext = (u1Byte)(value32&0x0C);\r
649 \r
650                 vMCSS =(u1Byte)(value32&0xf0); \r
651                 bf = (u1Byte)((value32&0x100)>>8); \r
652                 vrsv =(u1Byte)((value32&0x200)>>8);  \r
653                 vhtcrc8=(u2Byte)((value32&0x3fc00)>>8);\r
654                 vTail=(u1Byte)((value32&0xfc0000)>>16);\r
655         }\r
656         //rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %x", "F30", value32);\r
657         //DCMD_Printf(BbDbgBuf);\r
658         \r
659         rsprintf(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
660         DCMD_Printf(BbDbgBuf);\r
661 \r
662         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "VHT-SIG-B");\r
663         DCMD_Printf(BbDbgBuf);\r
664         value32 = ODM_GetBBReg(pDM_Odm, 0xf34 ,bMaskDWord);   //VHT SIG\r
665         {\r
666                 vLength=(u2Byte)(value32&0x1fffff);\r
667                 vbrsv = (u1Byte)((value32&0x600000)>>20);\r
668                 vbTail =(u2Byte)((value32&0x1f800000)>>20);\r
669                 vbcrc = (u1Byte)((value32&0x80000000)>>28);\r
670         \r
671         }\r
672         //rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %x", "F34", value32);\r
673         //DCMD_Printf(BbDbgBuf);\r
674         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %x / %x/ %x/ %x/", "  Length/Rsv/Tail/CRC",vLength,vbrsv,vbTail,vbcrc);\r
675         DCMD_Printf(BbDbgBuf);\r
676         \r
677                 \r
678 }\r
679 \r
680 \r
681 VOID phydm_BasicProfile(\r
682         IN              PVOID                   pDM_VOID\r
683         )\r
684 {\r
685         PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
686         PADAPTER                       Adapter = pDM_Odm->Adapter;\r
687         char* Cut = NULL;\r
688         char* ICType = NULL;\r
689 \r
690         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n%-35s", "% Basic Profile %");\r
691         DCMD_Printf(BbDbgBuf);\r
692 \r
693         if(pDM_Odm->SupportICType == ODM_RTL8192C)\r
694                 ICType = "RTL8192C";\r
695         else if(pDM_Odm->SupportICType == ODM_RTL8192D)\r
696                 ICType = "RTL8192D";\r
697         else if(pDM_Odm->SupportICType == ODM_RTL8723A)\r
698                 ICType = "RTL8723A";\r
699         else if(pDM_Odm->SupportICType == ODM_RTL8188E)\r
700                 ICType = "RTL8188E";\r
701         else if(pDM_Odm->SupportICType == ODM_RTL8812)\r
702                 ICType = "RTL8812A";\r
703         else if(pDM_Odm->SupportICType == ODM_RTL8821)\r
704                 ICType = "RTL8821A";\r
705         else if(pDM_Odm->SupportICType == ODM_RTL8192E)\r
706                 ICType = "RTL8192E";\r
707         else if(pDM_Odm->SupportICType == ODM_RTL8723B)\r
708                 ICType = "RTL8723B";\r
709         else if(pDM_Odm->SupportICType == ODM_RTL8814A)\r
710                 ICType = "RTL8814A";\r
711         else if(pDM_Odm->SupportICType == ODM_RTL8881A)\r
712                 ICType = "RTL8881A";\r
713         else if(pDM_Odm->SupportICType == ODM_RTL8821B)\r
714                 ICType = "RTL8821B";\r
715         else if(pDM_Odm->SupportICType == ODM_RTL8822B)\r
716                 ICType = "RTL8822B";\r
717         else if(pDM_Odm->SupportICType == ODM_RTL8703B)\r
718                 ICType = "RTL8703B";\r
719         else if(pDM_Odm->SupportICType == ODM_RTL8195A)\r
720                 ICType = "RTL8195A";\r
721         else if(pDM_Odm->SupportICType == ODM_RTL8188F)\r
722                 ICType = "RTL8188F";\r
723         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  %-35s: %s (MP Chip: %s)","IC Type", ICType, pDM_Odm->bIsMPChip?"Yes":"No");          \r
724         DCMD_Printf(BbDbgBuf);\r
725 \r
726         if(pDM_Odm->CutVersion==ODM_CUT_A)\r
727             Cut = "A";\r
728         else if(pDM_Odm->CutVersion==ODM_CUT_B)\r
729             Cut = "B";\r
730         else if(pDM_Odm->CutVersion==ODM_CUT_C)\r
731             Cut = "C";\r
732         else if(pDM_Odm->CutVersion==ODM_CUT_D)\r
733             Cut = "D";\r
734         else if(pDM_Odm->CutVersion==ODM_CUT_E)\r
735             Cut = "E";\r
736         else if(pDM_Odm->CutVersion==ODM_CUT_F)\r
737             Cut = "F";\r
738         else if(pDM_Odm->CutVersion==ODM_CUT_I)\r
739             Cut = "I";\r
740         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  %-35s: %s","Cut Version", Cut);              \r
741         DCMD_Printf(BbDbgBuf);\r
742         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  %-35s: %d","PHY Parameter Version", ODM_GetHWImgVersion(pDM_Odm));           \r
743         DCMD_Printf(BbDbgBuf);\r
744         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  %-35s: %d (Subversion: %d)","FW Version", Adapter->MgntInfo.FirmwareVersion, Adapter->MgntInfo.FirmwareSubVersion);          \r
745         DCMD_Printf(BbDbgBuf);\r
746 \r
747         //1 PHY DM Version List\r
748         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n%-35s","% PHYDM Version %");\r
749         DCMD_Printf(BbDbgBuf);\r
750         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  %-35s: %s","Adaptivity", ADAPTIVITY_VERSION);\r
751         DCMD_Printf(BbDbgBuf);\r
752         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  %-35s: %s","DIG", DIG_VERSION);\r
753         DCMD_Printf(BbDbgBuf);\r
754         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  %-35s: %s","Dynamic BB PowerSaving", DYNAMIC_BBPWRSAV_VERSION);\r
755         DCMD_Printf(BbDbgBuf);\r
756         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  %-35s: %s","CFO Tracking", CFO_TRACKING_VERSION);\r
757         DCMD_Printf(BbDbgBuf);\r
758         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  %-35s: %s","Antenna Diversity", ANTDIV_VERSION);\r
759         DCMD_Printf(BbDbgBuf);\r
760         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  %-35s: %s","Power Tracking", POWRTRACKING_VERSION);\r
761         DCMD_Printf(BbDbgBuf);\r
762         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  %-35s: %s","Dynamic TxPower", DYNAMIC_TXPWR_VERSION);\r
763         DCMD_Printf(BbDbgBuf);\r
764         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  %-35s: %s","RA Info", RAINFO_VERSION);\r
765         DCMD_Printf(BbDbgBuf);\r
766         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  %-35s: %s","Antenna Detection", ANTDECT_VERSION);\r
767         DCMD_Printf(BbDbgBuf);\r
768         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  %-35s: %s","Auto Channel Selection", ACS_VERSION);\r
769         DCMD_Printf(BbDbgBuf);\r
770         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  %-35s: %s","EDCA Turbo", EDCATURBO_VERSION);\r
771         DCMD_Printf(BbDbgBuf);\r
772         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  %-35s: %s","Path Diversity", PATHDIV_VERSION);\r
773         DCMD_Printf(BbDbgBuf);\r
774         rsprintf(BbDbgBuf, BT_TMP_BUF_SIZE, "\r\n  %-35s: %s","RxHP", RXHP_VERSION);\r
775         DCMD_Printf(BbDbgBuf);\r
776 \r
777 }\r
778 #endif\r
779 VOID\r
780 phydm_BasicDbgMessage\r
781 (\r
782         IN              PVOID                   pDM_VOID\r
783         )\r
784 {\r
785 #if( DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
786         PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
787         PFALSE_ALARM_STATISTICS FalseAlmCnt = (PFALSE_ALARM_STATISTICS)PhyDM_Get_Structure( pDM_Odm , PHYDM_FALSEALMCNT);\r
788         pDIG_T  pDM_DigTable = &pDM_Odm->DM_DigTable;\r
789         \r
790         ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("odm_BasicDbgMsg==>\n"));\r
791         ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("bLinked = %d, RSSI_Min = %d, CurrentIGI = 0x%x \n",\r
792                 pDM_Odm->bLinked, pDM_Odm->RSSI_Min, pDM_DigTable->CurIGValue) );\r
793         ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("Cnt_Cck_fail = %d, Cnt_Ofdm_fail = %d, Total False Alarm = %d\n", \r
794                 FalseAlmCnt->Cnt_Cck_fail, FalseAlmCnt->Cnt_Ofdm_fail, FalseAlmCnt->Cnt_all));\r
795         ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("RxRate = 0x%x, RSSI_A = %d, RSSI_B = %d\n", \r
796                 pDM_Odm->RxRate, pDM_Odm->RSSI_A, pDM_Odm->RSSI_B));\r
797         ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("RSSI_C = %d, RSSI_D = %d\n", pDM_Odm->RSSI_C, pDM_Odm->RSSI_D));\r
798 #endif\r
799 }\r
800 \r
801 #if( DM_ODM_SUPPORT_TYPE & ODM_CE)\r
802 struct _PHYDM_COMMAND {
803         char name[16];
804         u1Byte id;
805 };
806
807 enum PHYDM_CMD_ID {
808         PHYDM_ANTDIV,
809 };
810
811 struct _PHYDM_COMMAND phy_dm_ary[] = {
812         {"antdiv", PHYDM_ANTDIV},
813 };
814
815 s4Byte
816 PhyDM_Cmd(
817         IN PDM_ODM_T    pDM_Odm,
818         IN char         *input,
819         IN u4Byte       in_len,
820         IN u1Byte       flag,
821         OUT char        *output,
822         IN u4Byte       out_len
823         )
824 {
825         u4Byte used = 0;
826
827         if (flag == 0) {
828                 if (out_len > used)
829                         used += snprintf(output+used, out_len-used, "GET, nothing to print\n");
830         } else {
831                 char *token;
832                 u1Byte id = 0;
833                 int var = 0;
834
835                 token = strsep(&input, ", ");
836                 if (token) {
837                         int n, i;
838                         n = sizeof(phy_dm_ary)/sizeof(struct _PHYDM_COMMAND);
839                         for (i = 0; i < n; i++) {
840                                 if (strcmp(phy_dm_ary[i].name, token) == 0) {
841                                         id = phy_dm_ary[i].id;
842                                         break;
843                                 }
844                         }
845                         if (i == n) {
846                                 if (out_len > used)
847                                         used += snprintf(output+used, out_len-used, "SET, command not found!\n");
848                                 goto exit;
849                         }
850                 }
851
852                 switch (id) {
853                 case PHYDM_ANTDIV:
854                         token = strsep(&input, ", ");
855                         sscanf(token, "%d", &var);
856                         if (out_len > used)
857                                 used += snprintf(output+used, out_len-used, "SET, old antdiv_select=%d\n", pDM_Odm->antdiv_select);
858                         pDM_Odm->antdiv_select = var;
859                         if (out_len > used)
860                                 used += snprintf(output+used, out_len-used, "SET, new antdiv_select=%d\n", pDM_Odm->antdiv_select);
861                         break;
862
863                 default:
864                         if (out_len > used)
865                                 used += snprintf(output+used, out_len-used, "SET, unknown command!\n");
866                         break;
867                 }
868         }
869
870 exit:
871         return 0;
872 }\r
873 #endif\r