1 /******************************************************************************
\r
3 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
\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
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
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
19 ******************************************************************************/
\r
21 //============================================================
\r
23 //============================================================
\r
25 #include "Mp_Precomp.h"
\r
26 #include "phydm_precomp.h"
\r
28 //#if( DM_ODM_SUPPORT_TYPE & (ODM_WIN |ODM_CE))
\r
29 #if(defined(CONFIG_ANT_DETECTION))
\r
31 //IS_ANT_DETECT_SUPPORT_SINGLE_TONE(Adapter)
\r
32 //IS_ANT_DETECT_SUPPORT_RSSI(Adapter)
\r
33 //IS_ANT_DETECT_SUPPORT_PSD(Adapter)
\r
35 //1 [1. Single Tone Method] ===================================================
\r
39 odm_PHY_SaveAFERegisters(
\r
42 IN pu4Byte AFEBackup,
\r
43 IN u4Byte RegisterNum
\r
46 PDM_ODM_T pDM_Odm = (PDM_ODM_T)pDM_VOID;
\r
49 //RT_DISP(FINIT, INIT_IQK, ("Save ADDA parameters.\n"));
\r
50 for( i = 0 ; i < RegisterNum ; i++){
\r
51 AFEBackup[i] = ODM_GetBBReg(pDM_Odm, AFEReg[i], bMaskDWord);
\r
56 odm_PHY_ReloadAFERegisters(
\r
59 IN pu4Byte AFEBackup,
\r
60 IN u4Byte RegiesterNum
\r
63 PDM_ODM_T pDM_Odm = (PDM_ODM_T)pDM_VOID;
\r
66 //RT_DISP(FINIT, INIT_IQK, ("Reload ADDA power saving parameters !\n"));
\r
67 for(i = 0 ; i < RegiesterNum; i++)
\r
70 ODM_SetBBReg(pDM_Odm, AFEReg[i], bMaskDWord, AFEBackup[i]);
\r
76 // Set Single/Dual Antenna default setting for products that do not do detection in advance.
\r
78 // Added by Joseph, 2012.03.22
\r
81 ODM_SingleDualAntennaDefaultSetting(
\r
85 PDM_ODM_T pDM_Odm = (PDM_ODM_T)pDM_VOID;
\r
86 pSWAT_T pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
\r
87 PADAPTER pAdapter = pDM_Odm->Adapter;
\r
89 u1Byte btAntNum=BT_GetPgAntNum(pAdapter);
\r
90 // Set default antenna A and B status
\r
93 pDM_SWAT_Table->ANTA_ON=TRUE;
\r
94 pDM_SWAT_Table->ANTB_ON=TRUE;
\r
97 else if(btAntNum == 1)
\r
98 {// Set antenna A as default
\r
99 pDM_SWAT_Table->ANTA_ON=TRUE;
\r
100 pDM_SWAT_Table->ANTB_ON=FALSE;
\r
105 RT_ASSERT(FALSE, ("Incorrect antenna number!!\n"));
\r
110 //2 8723A ANT DETECT
\r
113 // Implement IQK single tone for RF DPK loopback and BB PSD scanning.
\r
114 // This function is cooperated with BB team Neil.
\r
116 // Added by Roger, 2011.12.15
\r
119 ODM_SingleDualAntennaDetection(
\r
124 PDM_ODM_T pDM_Odm = (PDM_ODM_T)pDM_VOID;
\r
125 PADAPTER pAdapter = pDM_Odm->Adapter;
\r
126 pSWAT_T pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
\r
127 u4Byte CurrentChannel,RfLoopReg;
\r
129 u4Byte Reg88c, Regc08, Reg874, Regc50, Reg948, Regb2c, Reg92c, Reg930, Reg064, AFE_rRx_Wait_CCA;
\r
130 u1Byte initial_gain = 0x5a;
\r
131 u4Byte PSD_report_tmp;
\r
132 u4Byte AntA_report = 0x0, AntB_report = 0x0,AntO_report=0x0,temp;
\r
133 BOOLEAN bResult = TRUE;
\r
134 u4Byte AFE_Backup[16];
\r
135 u4Byte AFE_REG_8723A[16] = {
\r
136 rRx_Wait_CCA, rTx_CCK_RFON,
\r
137 rTx_CCK_BBON, rTx_OFDM_RFON,
\r
138 rTx_OFDM_BBON, rTx_To_Rx,
\r
139 rTx_To_Tx, rRx_CCK,
\r
140 rRx_OFDM, rRx_Wait_RIFS,
\r
141 rRx_TO_Rx, rStandby,
\r
142 rSleep, rPMPD_ANAEN,
\r
143 rFPGA0_XCD_SwitchControl, rBlue_Tooth};
\r
145 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection()============> \n"));
\r
148 if(!(pDM_Odm->SupportICType & (ODM_RTL8723A|ODM_RTL8192C|ODM_RTL8723B)))
\r
151 // Retrieve antenna detection registry info, added by Roger, 2012.11.27.
\r
152 if(!IS_ANT_DETECT_SUPPORT_SINGLE_TONE(pAdapter))
\r
155 if(pDM_Odm->SupportICType == ODM_RTL8192C)
\r
157 //Which path in ADC/DAC is turnned on for PSD: both I/Q
\r
158 ODM_SetBBReg(pDM_Odm, 0x808, BIT10|BIT11, 0x3);
\r
159 //Ageraged number: 8
\r
160 ODM_SetBBReg(pDM_Odm, 0x808, BIT12|BIT13, 0x1);
\r
162 ODM_SetBBReg(pDM_Odm, 0x808, BIT14|BIT15, 0x0);
\r
165 //1 Backup Current RF/BB Settings
\r
167 CurrentChannel = ODM_GetRFReg(pDM_Odm, ODM_RF_PATH_A, ODM_CHANNEL, bRFRegOffsetMask);
\r
168 RfLoopReg = ODM_GetRFReg(pDM_Odm, ODM_RF_PATH_A, 0x00, bRFRegOffsetMask);
\r
169 if(pDM_Odm->SupportICType & (ODM_RTL8723A|ODM_RTL8192C))
\r
170 ODM_SetBBReg(pDM_Odm, rFPGA0_XA_RFInterfaceOE, ODM_DPDT, Antenna_A); // change to Antenna A
\r
171 else if(pDM_Odm->SupportICType == ODM_RTL8723B)
\r
173 Reg92c = ODM_GetBBReg(pDM_Odm, rDPDT_control, bMaskDWord);
\r
174 Reg930 = ODM_GetBBReg(pDM_Odm, rfe_ctrl_anta_src, bMaskDWord);
\r
175 Reg948 = ODM_GetBBReg(pDM_Odm, rS0S1_PathSwitch, bMaskDWord);
\r
176 Regb2c = ODM_GetBBReg(pDM_Odm, rAGC_table_select, bMaskDWord);
\r
177 Reg064 = ODM_GetMACReg(pDM_Odm, rSYM_WLBT_PAPE_SEL, BIT29);
\r
178 ODM_SetBBReg(pDM_Odm, rDPDT_control, 0x3, 0x1);
\r
179 ODM_SetBBReg(pDM_Odm, rfe_ctrl_anta_src, 0xff, 0x77);
\r
180 ODM_SetMACReg(pDM_Odm, rSYM_WLBT_PAPE_SEL, BIT29, 0x1); //dbg 7
\r
181 ODM_SetBBReg(pDM_Odm, rS0S1_PathSwitch, 0x3c0, 0x0);//dbg 8
\r
182 ODM_SetBBReg(pDM_Odm, rAGC_table_select, BIT31, 0x0);
\r
185 ODM_StallExecution(10);
\r
187 //Store A Path Register 88c, c08, 874, c50
\r
188 Reg88c = ODM_GetBBReg(pDM_Odm, rFPGA0_AnalogParameter4, bMaskDWord);
\r
189 Regc08 = ODM_GetBBReg(pDM_Odm, rOFDM0_TRMuxPar, bMaskDWord);
\r
190 Reg874 = ODM_GetBBReg(pDM_Odm, rFPGA0_XCD_RFInterfaceSW, bMaskDWord);
\r
191 Regc50 = ODM_GetBBReg(pDM_Odm, rOFDM0_XAAGCCore1, bMaskDWord);
\r
193 // Store AFE Registers
\r
194 if(pDM_Odm->SupportICType & (ODM_RTL8723A|ODM_RTL8192C))
\r
195 odm_PHY_SaveAFERegisters(pDM_Odm, AFE_REG_8723A, AFE_Backup, 16);
\r
196 else if(pDM_Odm->SupportICType == ODM_RTL8723B)
\r
197 AFE_rRx_Wait_CCA = ODM_GetBBReg(pDM_Odm, rRx_Wait_CCA,bMaskDWord);
\r
200 ODM_SetBBReg(pDM_Odm, rFPGA0_PSDFunction, BIT14|BIT15, 0x0); //128 pts
\r
202 // To SET CH1 to do
\r
203 ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, ODM_CHANNEL, bRFRegOffsetMask, 0x7401); //Channel 1
\r
206 if(pDM_Odm->SupportICType & (ODM_RTL8723A|ODM_RTL8192C))
\r
208 ODM_SetBBReg(pDM_Odm, rRx_Wait_CCA, bMaskDWord, 0x6FDB25A4);
\r
209 ODM_SetBBReg(pDM_Odm, rTx_CCK_RFON, bMaskDWord, 0x6FDB25A4);
\r
210 ODM_SetBBReg(pDM_Odm, rTx_CCK_BBON, bMaskDWord, 0x6FDB25A4);
\r
211 ODM_SetBBReg(pDM_Odm, rTx_OFDM_RFON, bMaskDWord, 0x6FDB25A4);
\r
212 ODM_SetBBReg(pDM_Odm, rTx_OFDM_BBON, bMaskDWord, 0x6FDB25A4);
\r
213 ODM_SetBBReg(pDM_Odm, rTx_To_Rx, bMaskDWord, 0x6FDB25A4);
\r
214 ODM_SetBBReg(pDM_Odm, rTx_To_Tx, bMaskDWord, 0x6FDB25A4);
\r
215 ODM_SetBBReg(pDM_Odm, rRx_CCK, bMaskDWord, 0x6FDB25A4);
\r
216 ODM_SetBBReg(pDM_Odm, rRx_OFDM, bMaskDWord, 0x6FDB25A4);
\r
217 ODM_SetBBReg(pDM_Odm, rRx_Wait_RIFS, bMaskDWord, 0x6FDB25A4);
\r
218 ODM_SetBBReg(pDM_Odm, rRx_TO_Rx, bMaskDWord, 0x6FDB25A4);
\r
219 ODM_SetBBReg(pDM_Odm, rStandby, bMaskDWord, 0x6FDB25A4);
\r
220 ODM_SetBBReg(pDM_Odm, rSleep, bMaskDWord, 0x6FDB25A4);
\r
221 ODM_SetBBReg(pDM_Odm, rPMPD_ANAEN, bMaskDWord, 0x6FDB25A4);
\r
222 ODM_SetBBReg(pDM_Odm, rFPGA0_XCD_SwitchControl, bMaskDWord, 0x6FDB25A4);
\r
223 ODM_SetBBReg(pDM_Odm, rBlue_Tooth, bMaskDWord, 0x6FDB25A4);
\r
225 else if(pDM_Odm->SupportICType == ODM_RTL8723B)
\r
227 ODM_SetBBReg(pDM_Odm, rRx_Wait_CCA, bMaskDWord, 0x01c00016);
\r
231 ODM_SetBBReg(pDM_Odm, rFPGA0_AnalogParameter4, bMaskDWord, 0xCCF000C0);
\r
234 ODM_SetBBReg(pDM_Odm, rOFDM0_TRMuxPar, bMaskDWord, 0x000800E4);
\r
235 ODM_SetBBReg(pDM_Odm, rFPGA0_XCD_RFInterfaceSW, bMaskDWord, 0x22208000);
\r
237 //IQK setting tone@ 4.34Mhz
\r
238 ODM_SetBBReg(pDM_Odm, rTx_IQK_Tone_A, bMaskDWord, 0x10008C1C);
\r
239 ODM_SetBBReg(pDM_Odm, rTx_IQK, bMaskDWord, 0x01007c00);
\r
242 ODM_SetBBReg(pDM_Odm, rConfig_AntA, bMaskDWord, 0x00080000);
\r
243 ODM_SetBBReg(pDM_Odm, rConfig_AntA, bMaskDWord, 0x0f600000);
\r
244 ODM_SetBBReg(pDM_Odm, rRx_IQK, bMaskDWord, 0x01004800);
\r
245 ODM_SetBBReg(pDM_Odm, rRx_IQK_Tone_A, bMaskDWord, 0x10008c1f);
\r
246 if(pDM_Odm->SupportICType & (ODM_RTL8723A|ODM_RTL8192C))
\r
248 ODM_SetBBReg(pDM_Odm, rTx_IQK_PI_A, bMaskDWord, 0x82150008);
\r
249 ODM_SetBBReg(pDM_Odm, rRx_IQK_PI_A, bMaskDWord, 0x28150008);
\r
251 else if(pDM_Odm->SupportICType == ODM_RTL8723B)
\r
253 ODM_SetBBReg(pDM_Odm, rTx_IQK_PI_A, bMaskDWord, 0x82150016);
\r
254 ODM_SetBBReg(pDM_Odm, rRx_IQK_PI_A, bMaskDWord, 0x28150016);
\r
256 ODM_SetBBReg(pDM_Odm, rIQK_AGC_Rsp, bMaskDWord, 0x001028d0);
\r
257 ODM_SetBBReg(pDM_Odm, rOFDM0_XAAGCCore1, 0x7f, initial_gain);
\r
260 if(pDM_Odm->SupportICType & (ODM_RTL8723A|ODM_RTL8192C))
\r
261 ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, 0x0, 0xFFFFF, 0x50008);
\r
263 //IQK Single tone start
\r
264 ODM_SetBBReg(pDM_Odm, rFPGA0_IQK, 0xffffff00, 0x808000);
\r
265 ODM_SetBBReg(pDM_Odm, rIQK_AGC_Pts, bMaskDWord, 0xf9000000);
\r
266 ODM_SetBBReg(pDM_Odm, rIQK_AGC_Pts, bMaskDWord, 0xf8000000);
\r
268 ODM_StallExecution(10000);
\r
270 // PSD report of antenna A
\r
271 PSD_report_tmp=0x0;
\r
274 PSD_report_tmp = GetPSDData(pDM_Odm, 14, initial_gain);
\r
275 if(PSD_report_tmp >AntA_report)
\r
276 AntA_report=PSD_report_tmp;
\r
279 // change to Antenna B
\r
280 if(pDM_Odm->SupportICType & (ODM_RTL8723A|ODM_RTL8192C))
\r
281 ODM_SetBBReg(pDM_Odm, rFPGA0_XA_RFInterfaceOE, ODM_DPDT, Antenna_B);
\r
282 else if(pDM_Odm->SupportICType == ODM_RTL8723B)
\r
284 //ODM_SetBBReg(pDM_Odm, rDPDT_control, 0x3, 0x2);
\r
285 ODM_SetBBReg(pDM_Odm, rS0S1_PathSwitch, 0xfff, 0x280);
\r
286 ODM_SetBBReg(pDM_Odm, rAGC_table_select, BIT31, 0x1);
\r
289 ODM_StallExecution(10);
\r
291 // PSD report of antenna B
\r
292 PSD_report_tmp=0x0;
\r
295 PSD_report_tmp = GetPSDData(pDM_Odm, 14, initial_gain);
\r
296 if(PSD_report_tmp > AntB_report)
\r
297 AntB_report=PSD_report_tmp;
\r
300 // change to open case
\r
301 if(pDM_Odm->SupportICType & (ODM_RTL8723A|ODM_RTL8192C))
\r
303 ODM_SetBBReg(pDM_Odm, rFPGA0_XA_RFInterfaceOE, ODM_DPDT, 0); // change to Antenna A
\r
305 ODM_StallExecution(10);
\r
307 // PSD report of open case
\r
308 PSD_report_tmp=0x0;
\r
311 PSD_report_tmp = GetPSDData(pDM_Odm, 14, initial_gain);
\r
312 if(PSD_report_tmp > AntO_report)
\r
313 AntO_report=PSD_report_tmp;
\r
316 //Close IQK Single Tone function
\r
317 ODM_SetBBReg(pDM_Odm, rFPGA0_IQK, 0xffffff00, 0x000000);
\r
319 //1 Return to antanna A
\r
320 if(pDM_Odm->SupportICType & (ODM_RTL8723A|ODM_RTL8192C))
\r
321 ODM_SetBBReg(pDM_Odm, rFPGA0_XA_RFInterfaceOE, ODM_DPDT, Antenna_A); // change to Antenna A
\r
322 else if(pDM_Odm->SupportICType == ODM_RTL8723B)
\r
325 ODM_SetBBReg(pDM_Odm, rDPDT_control, bMaskDWord, Reg92c);
\r
328 ODM_SetBBReg(pDM_Odm, rS0S1_PathSwitch, bMaskDWord, Reg948);
\r
329 ODM_SetBBReg(pDM_Odm, rAGC_table_select, bMaskDWord, Regb2c);
\r
330 ODM_SetBBReg(pDM_Odm, rfe_ctrl_anta_src, bMaskDWord, Reg930);
\r
331 ODM_SetMACReg(pDM_Odm, rSYM_WLBT_PAPE_SEL, BIT29, Reg064);
\r
334 ODM_SetBBReg(pDM_Odm, rFPGA0_AnalogParameter4, bMaskDWord, Reg88c);
\r
335 ODM_SetBBReg(pDM_Odm, rOFDM0_TRMuxPar, bMaskDWord, Regc08);
\r
336 ODM_SetBBReg(pDM_Odm, rFPGA0_XCD_RFInterfaceSW, bMaskDWord, Reg874);
\r
337 ODM_SetBBReg(pDM_Odm, rOFDM0_XAAGCCore1, 0x7F, 0x40);
\r
338 ODM_SetBBReg(pDM_Odm, rOFDM0_XAAGCCore1, bMaskDWord, Regc50);
\r
339 ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_CHNLBW, bRFRegOffsetMask,CurrentChannel);
\r
340 ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, 0x00, bRFRegOffsetMask,RfLoopReg);
\r
342 //Reload AFE Registers
\r
343 if(pDM_Odm->SupportICType & (ODM_RTL8723A|ODM_RTL8192C))
\r
344 odm_PHY_ReloadAFERegisters(pDM_Odm, AFE_REG_8723A, AFE_Backup, 16);
\r
345 else if(pDM_Odm->SupportICType == ODM_RTL8723B)
\r
346 ODM_SetBBReg(pDM_Odm, rRx_Wait_CCA, bMaskDWord, AFE_rRx_Wait_CCA);
\r
348 if(pDM_Odm->SupportICType == ODM_RTL8723A)
\r
350 //2 Test Ant B based on Ant A is ON
\r
353 if(AntA_report >= 100)
\r
355 if(AntB_report > (AntA_report+1))
\r
357 pDM_SWAT_Table->ANTB_ON=FALSE;
\r
358 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Single Antenna A\n"));
\r
362 pDM_SWAT_Table->ANTB_ON=TRUE;
\r
363 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Dual Antenna is A and B\n"));
\r
368 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Need to check again\n"));
\r
369 pDM_SWAT_Table->ANTB_ON=FALSE; // Set Antenna B off as default
\r
373 //2 Test Ant A and B based on DPDT Open
\r
374 else if(mode==ANTTESTALL)
\r
376 if((AntO_report >=100) && (AntO_report <=118))
\r
378 if(AntA_report > (AntO_report+1))
\r
380 pDM_SWAT_Table->ANTA_ON=FALSE;
\r
381 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("Ant A is OFF\n"));
\r
385 pDM_SWAT_Table->ANTA_ON=TRUE;
\r
386 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("Ant A is ON\n"));
\r
389 if(AntB_report > (AntO_report+2))
\r
391 pDM_SWAT_Table->ANTB_ON=FALSE;
\r
392 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("Ant B is OFF\n"));
\r
396 pDM_SWAT_Table->ANTB_ON=TRUE;
\r
397 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("Ant B is ON\n"));
\r
400 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("psd_report_A[%d]= %d \n", 2416, AntA_report));
\r
401 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("psd_report_B[%d]= %d \n", 2416, AntB_report));
\r
402 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("psd_report_O[%d]= %d \n", 2416, AntO_report));
\r
404 pDM_Odm->AntDetectedInfo.bAntDetected= TRUE;
\r
405 pDM_Odm->AntDetectedInfo.dBForAntA = AntA_report;
\r
406 pDM_Odm->AntDetectedInfo.dBForAntB = AntB_report;
\r
407 pDM_Odm->AntDetectedInfo.dBForAntO = AntO_report;
\r
412 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("return FALSE!!\n"));
\r
417 else if(pDM_Odm->SupportICType == ODM_RTL8192C)
\r
419 if(AntA_report >= 100)
\r
421 if(AntB_report > (AntA_report+2))
\r
423 pDM_SWAT_Table->ANTA_ON=FALSE;
\r
424 pDM_SWAT_Table->ANTB_ON=TRUE;
\r
425 ODM_SetBBReg(pDM_Odm, rFPGA0_XA_RFInterfaceOE, 0x300, Antenna_B);
\r
426 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Single Antenna B\n"));
\r
428 else if(AntA_report > (AntB_report+2))
\r
430 pDM_SWAT_Table->ANTA_ON=TRUE;
\r
431 pDM_SWAT_Table->ANTB_ON=FALSE;
\r
432 ODM_SetBBReg(pDM_Odm, rFPGA0_XA_RFInterfaceOE, 0x300, Antenna_A);
\r
433 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Single Antenna A\n"));
\r
437 pDM_SWAT_Table->ANTA_ON=TRUE;
\r
438 pDM_SWAT_Table->ANTB_ON=TRUE;
\r
443 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Need to check again\n"));
\r
444 pDM_SWAT_Table->ANTA_ON=TRUE; // Set Antenna A on as default
\r
445 pDM_SWAT_Table->ANTB_ON=FALSE; // Set Antenna B off as default
\r
449 else if(pDM_Odm->SupportICType == ODM_RTL8723B)
\r
451 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("psd_report_A[%d]= %d \n", 2416, AntA_report));
\r
452 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("psd_report_B[%d]= %d \n", 2416, AntB_report));
\r
454 //2 Test Ant B based on Ant A is ON
\r
455 if((AntA_report >= 100) && (AntB_report >= 100) && (AntA_report <= 135) && (AntB_report <= 135))
\r
457 u1Byte TH1=2, TH2=6;
\r
459 if((AntA_report - AntB_report < TH1) || (AntB_report - AntA_report < TH1))
\r
461 pDM_SWAT_Table->ANTA_ON=TRUE;
\r
462 pDM_SWAT_Table->ANTB_ON=TRUE;
\r
463 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("ODM_SingleDualAntennaDetection(): Dual Antenna\n"));
\r
465 else if(((AntA_report - AntB_report >= TH1) && (AntA_report - AntB_report <= TH2)) ||
\r
466 ((AntB_report - AntA_report >= TH1) && (AntB_report - AntA_report <= TH2)))
\r
468 pDM_SWAT_Table->ANTA_ON=FALSE;
\r
469 pDM_SWAT_Table->ANTB_ON=FALSE;
\r
471 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Need to check again\n"));
\r
475 pDM_SWAT_Table->ANTA_ON = TRUE;
\r
476 pDM_SWAT_Table->ANTB_ON=FALSE;
\r
477 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("ODM_SingleDualAntennaDetection(): Single Antenna\n"));
\r
479 pDM_Odm->AntDetectedInfo.bAntDetected= TRUE;
\r
480 pDM_Odm->AntDetectedInfo.dBForAntA = AntA_report;
\r
481 pDM_Odm->AntDetectedInfo.dBForAntB = AntB_report;
\r
482 pDM_Odm->AntDetectedInfo.dBForAntO = AntO_report;
\r
487 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("return FALSE!!\n"));
\r
497 //1 [2. Scan AP RSSI Method] ==================================================
\r
503 ODM_SwAntDivCheckBeforeLink(
\r
508 #if (RT_MEM_SIZE_LEVEL != RT_MEM_SIZE_MINIMUM)
\r
510 PDM_ODM_T pDM_Odm = (PDM_ODM_T)pDM_VOID;
\r
511 PADAPTER Adapter = pDM_Odm->Adapter;
\r
512 HAL_DATA_TYPE* pHalData = GET_HAL_DATA(Adapter);
\r
513 PMGNT_INFO pMgntInfo = &Adapter->MgntInfo;
\r
514 pSWAT_T pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
\r
515 pFAT_T pDM_FatTable = &pDM_Odm->DM_FatTable;
\r
517 PRT_WLAN_BSS pTmpBssDesc, pTestBssDesc;
\r
518 u1Byte power_target = 10, power_target_L = 9, power_target_H = 16;
\r
519 u1Byte tmp_power_diff = 0,power_diff = 0,avg_power_diff = 0,max_power_diff = 0,min_power_diff = 0xff;
\r
520 u2Byte index, counter = 0;
\r
521 static u1Byte ScanChannel;
\r
522 u8Byte tStamp_diff = 0;
\r
523 u4Byte tmp_SWAS_NoLink_BK_Reg948;
\r
525 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ANTA_ON = (( %d )) , ANTB_ON = (( %d )) \n",pDM_Odm->DM_SWAT_Table.ANTA_ON ,pDM_Odm->DM_SWAT_Table.ANTB_ON ));
\r
529 if(pDM_Odm->DM_SWAT_Table.RSSI_AntDect_bResult==TRUE && pDM_Odm->SupportICType == ODM_RTL8723B)
\r
531 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("8723B RSSI-based Antenna Detection is done\n"));
\r
535 if(pDM_Odm->SupportICType == ODM_RTL8723B)
\r
537 if(pDM_SWAT_Table->SWAS_NoLink_BK_Reg948 == 0xff)
\r
538 pDM_SWAT_Table->SWAS_NoLink_BK_Reg948 = ODM_Read4Byte(pDM_Odm, rS0S1_PathSwitch );
\r
542 if (pDM_Odm->Adapter == NULL) //For BSOD when plug/unplug fast. //By YJ,120413
\r
543 { // The ODM structure is not initialized.
\r
547 // Retrieve antenna detection registry info, added by Roger, 2012.11.27.
\r
548 if(!IS_ANT_DETECT_SUPPORT_RSSI(Adapter))
\r
554 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Antenna Detection: RSSI Method\n"));
\r
557 // Since driver is going to set BB register, it shall check if there is another thread controlling BB/RF.
\r
558 PlatformAcquireSpinLock(Adapter, RT_RF_STATE_SPINLOCK);
\r
559 if(pHalData->eRFPowerState!=eRfOn || pMgntInfo->RFChangeInProgress || pMgntInfo->bMediaConnect)
\r
561 PlatformReleaseSpinLock(Adapter, RT_RF_STATE_SPINLOCK);
\r
563 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,
\r
564 ("ODM_SwAntDivCheckBeforeLink(): RFChangeInProgress(%x), eRFPowerState(%x)\n",
\r
565 pMgntInfo->RFChangeInProgress, pHalData->eRFPowerState));
\r
567 pDM_SWAT_Table->SWAS_NoLink_State = 0;
\r
573 PlatformReleaseSpinLock(Adapter, RT_RF_STATE_SPINLOCK);
\r
575 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("pDM_SWAT_Table->SWAS_NoLink_State = %d\n", pDM_SWAT_Table->SWAS_NoLink_State));
\r
576 //1 Run AntDiv mechanism "Before Link" part.
\r
577 if(pDM_SWAT_Table->SWAS_NoLink_State == 0)
\r
579 //1 Prepare to do Scan again to check current antenna state.
\r
581 // Set check state to next step.
\r
582 pDM_SWAT_Table->SWAS_NoLink_State = 1;
\r
584 // Copy Current Scan list.
\r
585 pMgntInfo->tmpNumBssDesc = pMgntInfo->NumBssDesc;
\r
586 PlatformMoveMemory((PVOID)Adapter->MgntInfo.tmpbssDesc, (PVOID)pMgntInfo->bssDesc, sizeof(RT_WLAN_BSS)*MAX_BSS_DESC);
\r
588 // Go back to scan function again.
\r
589 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SwAntDivCheckBeforeLink: Scan one more time\n"));
\r
590 pMgntInfo->ScanStep=0;
\r
591 pMgntInfo->bScanAntDetect = TRUE;
\r
592 ScanChannel = odm_SwAntDivSelectScanChnl(Adapter);
\r
595 if(pDM_Odm->SupportICType & (ODM_RTL8188E|ODM_RTL8821))
\r
597 if(pDM_FatTable->RxIdleAnt == MAIN_ANT)
\r
598 ODM_UpdateRxIdleAnt(pDM_Odm, AUX_ANT);
\r
600 ODM_UpdateRxIdleAnt(pDM_Odm, MAIN_ANT);
\r
601 if(ScanChannel == 0)
\r
603 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,
\r
604 ("ODM_SwAntDivCheckBeforeLink(): No AP List Avaiable, Using Ant(%s)\n", (pDM_FatTable->RxIdleAnt==MAIN_ANT)?"AUX_ANT":"MAIN_ANT"));
\r
606 if(IS_5G_WIRELESS_MODE(pMgntInfo->dot11CurrentWirelessMode))
\r
608 pDM_SWAT_Table->Ant5G = pDM_FatTable->RxIdleAnt;
\r
609 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("pDM_SWAT_Table->Ant5G=%s\n", (pDM_FatTable->RxIdleAnt==MAIN_ANT)?"MAIN_ANT":"AUX_ANT"));
\r
613 pDM_SWAT_Table->Ant2G = pDM_FatTable->RxIdleAnt;
\r
614 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("pDM_SWAT_Table->Ant2G=%s\n", (pDM_FatTable->RxIdleAnt==MAIN_ANT)?"MAIN_ANT":"AUX_ANT"));
\r
619 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,
\r
620 ("ODM_SwAntDivCheckBeforeLink: Change to %s for testing.\n", ((pDM_FatTable->RxIdleAnt == MAIN_ANT)?"MAIN_ANT":"AUX_ANT")));
\r
622 else if(pDM_Odm->SupportICType & (ODM_RTL8192C|ODM_RTL8723B))
\r
624 if(pDM_Odm->SupportICType == ODM_RTL8192C)
\r
626 // Switch Antenna to another one.
\r
627 pDM_SWAT_Table->PreAntenna = pDM_SWAT_Table->CurAntenna;
\r
628 pDM_SWAT_Table->CurAntenna = (pDM_SWAT_Table->CurAntenna==MAIN_ANT)?AUX_ANT:MAIN_ANT;
\r
630 pDM_SWAT_Table->SWAS_NoLink_BK_Reg860 = ((pDM_SWAT_Table->SWAS_NoLink_BK_Reg860 & 0xfffffcff) | (pDM_SWAT_Table->CurAntenna<<8));
\r
631 ODM_SetBBReg(pDM_Odm, rFPGA0_XA_RFInterfaceOE, bMaskDWord, pDM_SWAT_Table->SWAS_NoLink_BK_Reg860);
\r
633 else if(pDM_Odm->SupportICType == ODM_RTL8723B)
\r
635 // Switch Antenna to another one.
\r
637 tmp_SWAS_NoLink_BK_Reg948 = ODM_Read4Byte(pDM_Odm, rS0S1_PathSwitch );
\r
639 if( (pDM_SWAT_Table->CurAntenna = MAIN_ANT) && (tmp_SWAS_NoLink_BK_Reg948==0x200))
\r
641 ODM_SetBBReg(pDM_Odm, rS0S1_PathSwitch, 0xfff, 0x280);
\r
642 ODM_SetBBReg(pDM_Odm, rAGC_table_select, BIT31, 0x1);
\r
643 pDM_SWAT_Table->CurAntenna = AUX_ANT;
\r
647 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("Reg[948]= (( %x )) was in wrong state\n", tmp_SWAS_NoLink_BK_Reg948 ));
\r
650 ODM_StallExecution(10);
\r
653 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SwAntDivCheckBeforeLink: Change to (( %s-ant)) for testing.\n", (pDM_SWAT_Table->CurAntenna==MAIN_ANT)?"MAIN":"AUX"));
\r
656 odm_SwAntDivConstructScanChnl(Adapter, ScanChannel);
\r
657 PlatformSetTimer(Adapter, &pMgntInfo->ScanTimer, 5);
\r
661 else //pDM_SWAT_Table->SWAS_NoLink_State == 1
\r
663 //1 ScanComple() is called after antenna swiched.
\r
664 //1 Check scan result and determine which antenna is going
\r
667 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,(" tmpNumBssDesc= (( %d )) \n",pMgntInfo->tmpNumBssDesc));// debug for Dino
\r
669 for(index = 0; index < pMgntInfo->tmpNumBssDesc; index++)
\r
671 pTmpBssDesc = &(pMgntInfo->tmpbssDesc[index]); // Antenna 1
\r
672 pTestBssDesc = &(pMgntInfo->bssDesc[index]); // Antenna 2
\r
674 if(PlatformCompareMemory(pTestBssDesc->bdBssIdBuf, pTmpBssDesc->bdBssIdBuf, 6)!=0)
\r
676 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SwAntDivCheckBeforeLink(): ERROR!! This shall not happen.\n"));
\r
680 if(pDM_Odm->SupportICType != ODM_RTL8723B)
\r
682 if(pTmpBssDesc->ChannelNumber == ScanChannel)
\r
684 if(pTmpBssDesc->RecvSignalPower > pTestBssDesc->RecvSignalPower)
\r
686 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SwAntDivCheckBeforeLink: Compare scan entry: Score++\n"));
\r
687 RT_PRINT_STR(COMP_SCAN, DBG_WARNING, "GetScanInfo(): new Bss SSID:", pTmpBssDesc->bdSsIdBuf, pTmpBssDesc->bdSsIdLen);
\r
688 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("at ch %d, Original: %d, Test: %d\n\n", pTmpBssDesc->ChannelNumber, pTmpBssDesc->RecvSignalPower, pTestBssDesc->RecvSignalPower));
\r
691 PlatformMoveMemory(pTestBssDesc, pTmpBssDesc, sizeof(RT_WLAN_BSS));
\r
693 else if(pTmpBssDesc->RecvSignalPower < pTestBssDesc->RecvSignalPower)
\r
695 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SwAntDivCheckBeforeLink: Compare scan entry: Score--\n"));
\r
696 RT_PRINT_STR(COMP_SCAN, DBG_WARNING, "GetScanInfo(): new Bss SSID:", pTmpBssDesc->bdSsIdBuf, pTmpBssDesc->bdSsIdLen);
\r
697 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("at ch %d, Original: %d, Test: %d\n\n", pTmpBssDesc->ChannelNumber, pTmpBssDesc->RecvSignalPower, pTestBssDesc->RecvSignalPower));
\r
702 if(pTestBssDesc->bdTstamp - pTmpBssDesc->bdTstamp < 5000)
\r
704 RT_PRINT_STR(COMP_SCAN, DBG_WARNING, "GetScanInfo(): new Bss SSID:", pTmpBssDesc->bdSsIdBuf, pTmpBssDesc->bdSsIdLen);
\r
705 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("at ch %d, Original: %d, Test: %d\n", pTmpBssDesc->ChannelNumber, pTmpBssDesc->RecvSignalPower, pTestBssDesc->RecvSignalPower));
\r
706 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("The 2nd Antenna didn't get this AP\n\n"));
\r
713 if(pTmpBssDesc->ChannelNumber == ScanChannel)
\r
715 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("ChannelNumber == ScanChannel -> (( %d )) \n", pTmpBssDesc->ChannelNumber ));
\r
717 if(pTmpBssDesc->RecvSignalPower > pTestBssDesc->RecvSignalPower) // Pow(Ant1) > Pow(Ant2)
\r
720 tmp_power_diff=(u1Byte)(pTmpBssDesc->RecvSignalPower - pTestBssDesc->RecvSignalPower);
\r
721 power_diff = power_diff + tmp_power_diff;
\r
723 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Original: %d, Test: %d\n", pTmpBssDesc->RecvSignalPower, pTestBssDesc->RecvSignalPower));
\r
724 ODM_PRINT_ADDR(pDM_Odm,ODM_COMP_ANT_DIV, DBG_LOUD, ("SSID:"), pTmpBssDesc->bdSsIdBuf);
\r
725 ODM_PRINT_ADDR(pDM_Odm,ODM_COMP_ANT_DIV, DBG_LOUD, ("BSSID:"), pTmpBssDesc->bdBssIdBuf);
\r
727 //ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("tmp_power_diff: (( %d)),max_power_diff: (( %d)),min_power_diff: (( %d)) \n", tmp_power_diff,max_power_diff,min_power_diff));
\r
728 if(tmp_power_diff > max_power_diff)
\r
729 max_power_diff=tmp_power_diff;
\r
730 if(tmp_power_diff < min_power_diff)
\r
731 min_power_diff=tmp_power_diff;
\r
732 //ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("max_power_diff: (( %d)),min_power_diff: (( %d)) \n",max_power_diff,min_power_diff));
\r
734 PlatformMoveMemory(pTestBssDesc, pTmpBssDesc, sizeof(RT_WLAN_BSS));
\r
736 else if(pTestBssDesc->RecvSignalPower > pTmpBssDesc->RecvSignalPower) // Pow(Ant1) < Pow(Ant2)
\r
739 tmp_power_diff=(u1Byte)(pTestBssDesc->RecvSignalPower - pTmpBssDesc->RecvSignalPower);
\r
740 power_diff = power_diff + tmp_power_diff;
\r
741 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Original: %d, Test: %d\n", pTmpBssDesc->RecvSignalPower, pTestBssDesc->RecvSignalPower));
\r
742 ODM_PRINT_ADDR(pDM_Odm,ODM_COMP_ANT_DIV, DBG_LOUD, ("SSID:"), pTmpBssDesc->bdSsIdBuf);
\r
743 ODM_PRINT_ADDR(pDM_Odm,ODM_COMP_ANT_DIV, DBG_LOUD, ("BSSID:"), pTmpBssDesc->bdBssIdBuf);
\r
744 if(tmp_power_diff > max_power_diff)
\r
745 max_power_diff=tmp_power_diff;
\r
746 if(tmp_power_diff < min_power_diff)
\r
747 min_power_diff=tmp_power_diff;
\r
749 else // Pow(Ant1) = Pow(Ant2)
\r
751 if(pTestBssDesc->bdTstamp > pTmpBssDesc->bdTstamp) // Stamp(Ant1) < Stamp(Ant2)
\r
753 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("time_diff: %lld\n", (pTestBssDesc->bdTstamp-pTmpBssDesc->bdTstamp)/1000));
\r
754 if(pTestBssDesc->bdTstamp - pTmpBssDesc->bdTstamp > 5000)
\r
757 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Original: %d, Test: %d\n", pTmpBssDesc->RecvSignalPower, pTestBssDesc->RecvSignalPower));
\r
758 ODM_PRINT_ADDR(pDM_Odm,ODM_COMP_ANT_DIV, DBG_LOUD, ("SSID:"), pTmpBssDesc->bdSsIdBuf);
\r
759 ODM_PRINT_ADDR(pDM_Odm,ODM_COMP_ANT_DIV, DBG_LOUD, ("BSSID:"), pTmpBssDesc->bdBssIdBuf);
\r
760 min_power_diff = 0;
\r
765 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[Error !!!]: Time_diff: %lld\n", (pTestBssDesc->bdTstamp-pTmpBssDesc->bdTstamp)/1000));
\r
772 if(pDM_Odm->SupportICType & (ODM_RTL8188E|ODM_RTL8821))
\r
774 if(pMgntInfo->NumBssDesc!=0 && Score<0)
\r
776 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,
\r
777 ("ODM_SwAntDivCheckBeforeLink(): Using Ant(%s)\n", (pDM_FatTable->RxIdleAnt==MAIN_ANT)?"MAIN_ANT":"AUX_ANT"));
\r
781 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,
\r
782 ("ODM_SwAntDivCheckBeforeLink(): Remain Ant(%s)\n", (pDM_FatTable->RxIdleAnt==MAIN_ANT)?"AUX_ANT":"MAIN_ANT"));
\r
784 if(pDM_FatTable->RxIdleAnt == MAIN_ANT)
\r
785 ODM_UpdateRxIdleAnt(pDM_Odm, AUX_ANT);
\r
787 ODM_UpdateRxIdleAnt(pDM_Odm, MAIN_ANT);
\r
790 if(IS_5G_WIRELESS_MODE(pMgntInfo->dot11CurrentWirelessMode))
\r
792 pDM_SWAT_Table->Ant5G = pDM_FatTable->RxIdleAnt;
\r
793 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("pDM_SWAT_Table->Ant5G=%s\n", (pDM_FatTable->RxIdleAnt==MAIN_ANT)?"MAIN_ANT":"AUX_ANT"));
\r
797 pDM_SWAT_Table->Ant2G = pDM_FatTable->RxIdleAnt;
\r
798 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("pDM_SWAT_Table->Ant2G=%s\n", (pDM_FatTable->RxIdleAnt==MAIN_ANT)?"MAIN_ANT":"AUX_ANT"));
\r
801 else if(pDM_Odm->SupportICType == ODM_RTL8723B)
\r
805 if(pDM_Odm->DM_SWAT_Table.Pre_Aux_FailDetec == FALSE)
\r
807 pDM_Odm->DM_SWAT_Table.Pre_Aux_FailDetec = TRUE;
\r
808 pDM_Odm->DM_SWAT_Table.RSSI_AntDect_bResult=FALSE;
\r
809 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Counter=(( 0 )) , [[ Cannot find any AP with Aux-ant ]] -> Scan Target-channel again \n"));
\r
812 odm_SwAntDivConstructScanChnl(Adapter, ScanChannel);
\r
813 PlatformSetTimer(Adapter, &pMgntInfo->ScanTimer, 5);
\r
816 else// Pre_Aux_FailDetec == TRUE
\r
818 //2 [ Single Antenna ]
\r
819 pDM_Odm->DM_SWAT_Table.Pre_Aux_FailDetec = FALSE;
\r
820 pDM_Odm->DM_SWAT_Table.RSSI_AntDect_bResult=TRUE;
\r
821 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Counter=(( 0 )) , [[ Still cannot find any AP ]] \n"));
\r
822 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SwAntDivCheckBeforeLink(): Single antenna\n"));
\r
824 pDM_Odm->DM_SWAT_Table.Aux_FailDetec_Counter++;
\r
828 pDM_Odm->DM_SWAT_Table.Pre_Aux_FailDetec = FALSE;
\r
832 avg_power_diff = ((power_diff-max_power_diff - min_power_diff)>>1)+ ((max_power_diff + min_power_diff)>>2);
\r
833 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("counter: (( %d )) , power_diff: (( %d )) \n", counter, power_diff));
\r
834 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ counter==3 ] Modified avg_power_diff: (( %d )) , max_power_diff: (( %d )) , min_power_diff: (( %d )) \n", avg_power_diff,max_power_diff, min_power_diff));
\r
836 else if(counter>=4)
\r
838 avg_power_diff=(power_diff-max_power_diff - min_power_diff) / (counter - 2);
\r
839 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("counter: (( %d )) , power_diff: (( %d )) \n", counter, power_diff));
\r
840 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ counter>=4 ] Modified avg_power_diff: (( %d )) , max_power_diff: (( %d )) , min_power_diff: (( %d )) \n", avg_power_diff,max_power_diff, min_power_diff));
\r
845 avg_power_diff=power_diff/counter;
\r
846 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("avg_power_diff: (( %d )) , counter: (( %d )) , power_diff: (( %d )) \n", avg_power_diff,counter, power_diff));
\r
850 if( (avg_power_diff >=power_target_L) && (avg_power_diff <=power_target_H) )
\r
852 pDM_Odm->DM_SWAT_Table.Retry_Counter++;
\r
854 if(pDM_Odm->DM_SWAT_Table.Retry_Counter<=3)
\r
856 pDM_Odm->DM_SWAT_Table.RSSI_AntDect_bResult=FALSE;
\r
857 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[[ Low confidence result ]] avg_power_diff= (( %d )) -> Scan Target-channel again ]] \n", avg_power_diff));
\r
860 odm_SwAntDivConstructScanChnl(Adapter, ScanChannel);
\r
861 PlatformSetTimer(Adapter, &pMgntInfo->ScanTimer, 5);
\r
866 pDM_Odm->DM_SWAT_Table.RSSI_AntDect_bResult=TRUE;
\r
867 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[[ Still Low confidence result ]] (( Retry_Counter > 3 )) \n"));
\r
868 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SwAntDivCheckBeforeLink(): Single antenna\n"));
\r
872 //2 [ Dual Antenna ]
\r
873 else if( (pMgntInfo->NumBssDesc != 0) && (avg_power_diff < power_target_L) )
\r
875 pDM_Odm->DM_SWAT_Table.RSSI_AntDect_bResult=TRUE;
\r
876 if(pDM_Odm->DM_SWAT_Table.ANTB_ON == FALSE)
\r
878 pDM_Odm->DM_SWAT_Table.ANTA_ON = TRUE;
\r
879 pDM_Odm->DM_SWAT_Table.ANTB_ON = TRUE;
\r
881 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("ODM_SwAntDivCheckBeforeLink(): Dual antenna\n"));
\r
882 pDM_Odm->DM_SWAT_Table.Dual_Ant_Counter++;
\r
884 // set bt coexDM from 1ant coexDM to 2ant coexDM
\r
885 BT_SetBtCoexAntNum(Adapter, BT_COEX_ANT_TYPE_DETECTED, 2);
\r
887 //3 [ Init antenna diversity ]
\r
888 pDM_Odm->SupportAbility |= ODM_BB_ANT_DIV;
\r
889 ODM_AntDivInit(pDM_Odm);
\r
891 //2 [ Single Antenna ]
\r
892 else if(avg_power_diff > power_target_H)
\r
894 pDM_Odm->DM_SWAT_Table.RSSI_AntDect_bResult=TRUE;
\r
895 if(pDM_Odm->DM_SWAT_Table.ANTB_ON == TRUE)
\r
897 pDM_Odm->DM_SWAT_Table.ANTA_ON = TRUE;
\r
898 pDM_Odm->DM_SWAT_Table.ANTB_ON = FALSE;
\r
899 //BT_SetBtCoexAntNum(Adapter, BT_COEX_ANT_TYPE_DETECTED, 1);
\r
901 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SwAntDivCheckBeforeLink(): Single antenna\n"));
\r
902 pDM_Odm->DM_SWAT_Table.Single_Ant_Counter++;
\r
905 //ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("bResult=(( %d ))\n",pDM_Odm->DM_SWAT_Table.RSSI_AntDect_bResult));
\r
906 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("Dual_Ant_Counter = (( %d )), Single_Ant_Counter = (( %d )) , Retry_Counter = (( %d )) , Aux_FailDetec_Counter = (( %d ))\n\n\n",
\r
907 pDM_Odm->DM_SWAT_Table.Dual_Ant_Counter,pDM_Odm->DM_SWAT_Table.Single_Ant_Counter,pDM_Odm->DM_SWAT_Table.Retry_Counter,pDM_Odm->DM_SWAT_Table.Aux_FailDetec_Counter));
\r
909 //2 recover the antenna setting
\r
911 if(pDM_Odm->DM_SWAT_Table.ANTB_ON == FALSE)
\r
912 ODM_SetBBReg(pDM_Odm, rS0S1_PathSwitch, 0xfff, (pDM_SWAT_Table->SWAS_NoLink_BK_Reg948));
\r
914 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("bResult=(( %d )), Recover Reg[948]= (( %x )) \n\n",pDM_Odm->DM_SWAT_Table.RSSI_AntDect_bResult, pDM_SWAT_Table->SWAS_NoLink_BK_Reg948 ));
\r
918 else if(pDM_Odm->SupportICType == ODM_RTL8192C)
\r
920 if(pMgntInfo->NumBssDesc!=0 && Score<=0)
\r
922 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,
\r
923 ("ODM_SwAntDivCheckBeforeLink(): Using Ant(%s)\n", (pDM_SWAT_Table->CurAntenna==MAIN_ANT)?"MAIN":"AUX"));
\r
925 pDM_SWAT_Table->PreAntenna = pDM_SWAT_Table->CurAntenna;
\r
929 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,
\r
930 ("ODM_SwAntDivCheckBeforeLink(): Remain Ant(%s)\n", (pDM_SWAT_Table->CurAntenna==MAIN_ANT)?"AUX":"MAIN"));
\r
932 pDM_SWAT_Table->CurAntenna = pDM_SWAT_Table->PreAntenna;
\r
934 //PHY_SetBBReg(Adapter, rFPGA0_XA_RFInterfaceOE, 0x300, DM_SWAT_Table.CurAntenna);
\r
935 pDM_SWAT_Table->SWAS_NoLink_BK_Reg860 = ((pDM_SWAT_Table->SWAS_NoLink_BK_Reg860 & 0xfffffcff) | (pDM_SWAT_Table->CurAntenna<<8));
\r
936 PHY_SetBBReg(Adapter, rFPGA0_XA_RFInterfaceOE, bMaskDWord, pDM_SWAT_Table->SWAS_NoLink_BK_Reg860);
\r
940 // Check state reset to default and wait for next time.
\r
941 pDM_SWAT_Table->SWAS_NoLink_State = 0;
\r
942 pMgntInfo->bScanAntDetect = FALSE;
\r
959 //1 [3. PSD Method] ==========================================================
\r
968 IN u1Byte initial_gain)
\r
970 PDM_ODM_T pDM_Odm = (PDM_ODM_T)pDM_VOID;
\r
973 ODM_SetBBReg(pDM_Odm, 0x808, 0x3FF, point);
\r
974 ODM_SetBBReg(pDM_Odm, 0x808, BIT22, 1); //Start PSD calculation, Reg808[22]=0->1
\r
975 ODM_StallExecution(150);//Wait for HW PSD report
\r
976 ODM_SetBBReg(pDM_Odm, 0x808, BIT22, 0);//Stop PSD calculation, Reg808[22]=1->0
\r
977 psd_report = ODM_GetBBReg(pDM_Odm,0x8B4, bMaskDWord) & 0x0000FFFF;//Read PSD report, Reg8B4[15:0]
\r
979 psd_report = (u4Byte) (odm_ConvertTo_dB(psd_report));//+(u4Byte)(initial_gain);
\r
986 ODM_SingleDualAntennaDetection_PSD(
\r
990 PDM_ODM_T pDM_Odm = (PDM_ODM_T)pDM_VOID;
\r
991 PADAPTER pAdapter = pDM_Odm->Adapter;
\r
992 pSWAT_T pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
\r
993 u4Byte Channel_ori;
\r
994 u1Byte initial_gain = 0x36;
\r
996 u1Byte Tone_lenth_1=7, Tone_lenth_2=4;
\r
997 u2Byte Tone_idx_1[7]={88, 104, 120, 8, 24, 40, 56};
\r
998 u2Byte Tone_idx_2[4]={8, 24, 40, 56};
\r
999 u4Byte PSD_report_Main[11]={0}, PSD_report_Aux[11]={0};
\r
1000 //u1Byte Tone_lenth_1=4, Tone_lenth_2=2;
\r
1001 //u2Byte Tone_idx_1[4]={88, 120, 24, 56};
\r
1002 //u2Byte Tone_idx_2[2]={ 24, 56};
\r
1003 //u4Byte PSD_report_Main[6]={0}, PSD_report_Aux[6]={0};
\r
1005 u4Byte PSD_report_temp,MAX_PSD_report_Main=0,MAX_PSD_report_Aux=0;
\r
1006 u4Byte PSD_power_threshold;
\r
1007 u4Byte Main_psd_result=0, Aux_psd_result=0;
\r
1008 u4Byte Regc50, Reg948, Regb2c,Regc14,Reg908;
\r
1009 u4Byte i=0,test_num=8;
\r
1012 if(pDM_Odm->SupportICType != ODM_RTL8723B)
\r
1015 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection_PSD()============> \n"));
\r
1017 //2 [ Backup Current RF/BB Settings ]
\r
1019 Channel_ori = ODM_GetRFReg(pDM_Odm, ODM_RF_PATH_A, ODM_CHANNEL, bRFRegOffsetMask);
\r
1020 Reg948 = ODM_GetBBReg(pDM_Odm, rS0S1_PathSwitch, bMaskDWord);
\r
1021 Regb2c = ODM_GetBBReg(pDM_Odm, rAGC_table_select, bMaskDWord);
\r
1022 Regc50 = ODM_GetBBReg(pDM_Odm, rOFDM0_XAAGCCore1, bMaskDWord);
\r
1023 Regc14 = ODM_GetBBReg(pDM_Odm, 0xc14, bMaskDWord);
\r
1024 Reg908 = ODM_GetBBReg(pDM_Odm, 0x908, bMaskDWord);
\r
1026 //2 [ Setting for doing PSD function (CH4)]
\r
1027 ODM_SetBBReg(pDM_Odm, rFPGA0_RFMOD, BIT24, 0); //disable whole CCK block
\r
1028 ODM_Write1Byte(pDM_Odm, REG_TXPAUSE, 0xFF); // Turn off TX -> Pause TX Queue
\r
1029 ODM_SetBBReg(pDM_Odm, 0xC14, bMaskDWord, 0x0); // [ Set IQK Matrix = 0 ] equivalent to [ Turn off CCA]
\r
1031 // PHYTXON while loop
\r
1032 ODM_SetBBReg(pDM_Odm, 0x908, bMaskDWord, 0x803);
\r
1033 while (ODM_GetBBReg(pDM_Odm, 0xdf4, BIT6))
\r
1038 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Wait in %s() more than %d times!\n", __FUNCTION__, i));
\r
1043 ODM_SetBBReg(pDM_Odm, 0xc50, 0x7f, initial_gain);
\r
1044 ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, ODM_CHANNEL, 0x7ff, 0x04); // Set RF to CH4 & 40M
\r
1045 ODM_SetBBReg(pDM_Odm, rFPGA0_AnalogParameter4, 0xf00000, 0xf); // 3 wire Disable 88c[23:20]=0xf
\r
1046 ODM_SetBBReg(pDM_Odm, rFPGA0_PSDFunction, BIT14|BIT15, 0x0); //128 pt //Set PSD 128 ptss
\r
1047 ODM_StallExecution(3000);
\r
1050 //2 [ Doing PSD Function in (CH4)]
\r
1053 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Switch to Main-ant (CH4)\n"));
\r
1054 ODM_SetBBReg(pDM_Odm, 0x948, 0xfff, 0x200);
\r
1055 ODM_StallExecution(10);
\r
1056 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("dbg\n"));
\r
1057 for (i=0;i<test_num;i++)
\r
1059 for (tone_idx=0;tone_idx<Tone_lenth_1;tone_idx++)
\r
1061 PSD_report_temp = odm_GetPSDData(pDM_Odm, Tone_idx_1[tone_idx], initial_gain);
\r
1062 //if( PSD_report_temp>PSD_report_Main[tone_idx] )
\r
1063 PSD_report_Main[tone_idx]+=PSD_report_temp;
\r
1067 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Switch to Aux-ant (CH4)\n"));
\r
1068 ODM_SetBBReg(pDM_Odm, 0x948, 0xfff, 0x280);
\r
1069 ODM_StallExecution(10);
\r
1070 for (i=0;i<test_num;i++)
\r
1072 for (tone_idx=0;tone_idx<Tone_lenth_1;tone_idx++)
\r
1074 PSD_report_temp = odm_GetPSDData(pDM_Odm, Tone_idx_1[tone_idx], initial_gain);
\r
1075 //if( PSD_report_temp>PSD_report_Aux[tone_idx] )
\r
1076 PSD_report_Aux[tone_idx]+=PSD_report_temp;
\r
1079 //2 [ Doing PSD Function in (CH8)]
\r
1081 ODM_SetBBReg(pDM_Odm, rFPGA0_AnalogParameter4, 0xf00000, 0x0); // 3 wire enable 88c[23:20]=0x0
\r
1082 ODM_StallExecution(3000);
\r
1084 ODM_SetBBReg(pDM_Odm, 0xc50, 0x7f, initial_gain);
\r
1085 ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, ODM_CHANNEL, 0x7ff, 0x04); // Set RF to CH8 & 40M
\r
1087 ODM_SetBBReg(pDM_Odm, rFPGA0_AnalogParameter4, 0xf00000, 0xf); // 3 wire Disable 88c[23:20]=0xf
\r
1088 ODM_StallExecution(3000);
\r
1091 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Switch to Main-ant (CH8)\n"));
\r
1092 ODM_SetBBReg(pDM_Odm, 0x948, 0xfff, 0x200);
\r
1093 ODM_StallExecution(10);
\r
1095 for (i=0;i<test_num;i++)
\r
1097 for (tone_idx=0;tone_idx<Tone_lenth_2;tone_idx++)
\r
1099 PSD_report_temp = odm_GetPSDData(pDM_Odm, Tone_idx_2[tone_idx], initial_gain);
\r
1100 //if( PSD_report_temp>PSD_report_Main[tone_idx] )
\r
1101 PSD_report_Main[Tone_lenth_1+tone_idx]+=PSD_report_temp;
\r
1106 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Switch to Aux-ant (CH8)\n"));
\r
1107 ODM_SetBBReg(pDM_Odm, 0x948, 0xfff, 0x280);
\r
1108 ODM_StallExecution(10);
\r
1110 for (i=0;i<test_num;i++)
\r
1112 for (tone_idx=0;tone_idx<Tone_lenth_2;tone_idx++)
\r
1114 PSD_report_temp = odm_GetPSDData(pDM_Odm, Tone_idx_2[tone_idx], initial_gain);
\r
1115 //if( PSD_report_temp>PSD_report_Aux[tone_idx] )
\r
1116 PSD_report_Aux[Tone_lenth_1+tone_idx]+=PSD_report_temp;
\r
1120 //2 [ Calculate Result ]
\r
1122 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("\nMain PSD Result: (ALL) \n"));
\r
1123 for (tone_idx=0;tone_idx<(Tone_lenth_1+Tone_lenth_2);tone_idx++)
\r
1125 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[Tone-%d]: %d, \n",(tone_idx+1), PSD_report_Main[tone_idx] ));
\r
1126 Main_psd_result+= PSD_report_Main[tone_idx];
\r
1127 if(PSD_report_Main[tone_idx]>MAX_PSD_report_Main)
\r
1128 MAX_PSD_report_Main=PSD_report_Main[tone_idx];
\r
1130 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("--------------------------- \nTotal_Main= (( %d ))\n", Main_psd_result));
\r
1131 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("MAX_Main = (( %d ))\n", MAX_PSD_report_Main));
\r
1134 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("\nAux PSD Result: (ALL) \n"));
\r
1135 for (tone_idx=0;tone_idx<(Tone_lenth_1+Tone_lenth_2);tone_idx++)
\r
1137 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[Tone-%d]: %d, \n",(tone_idx+1), PSD_report_Aux[tone_idx] ));
\r
1138 Aux_psd_result+= PSD_report_Aux[tone_idx];
\r
1139 if(PSD_report_Aux[tone_idx]>MAX_PSD_report_Aux)
\r
1140 MAX_PSD_report_Aux=PSD_report_Aux[tone_idx];
\r
1142 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("--------------------------- \nTotal_Aux= (( %d ))\n", Aux_psd_result));
\r
1143 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("MAX_Aux = (( %d ))\n\n", MAX_PSD_report_Aux));
\r
1145 //Main_psd_result=Main_psd_result-MAX_PSD_report_Main;
\r
1146 //Aux_psd_result=Aux_psd_result-MAX_PSD_report_Aux;
\r
1147 PSD_power_threshold=(Main_psd_result*7)>>3;
\r
1149 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[ Main_result , Aux_result ] = [ %d , %d ], PSD_power_threshold=(( %d ))\n", Main_psd_result, Aux_psd_result,PSD_power_threshold));
\r
1151 //3 [ Dual Antenna ]
\r
1152 if(Aux_psd_result >= PSD_power_threshold )
\r
1154 if(pDM_Odm->DM_SWAT_Table.ANTB_ON == FALSE)
\r
1156 pDM_Odm->DM_SWAT_Table.ANTA_ON = TRUE;
\r
1157 pDM_Odm->DM_SWAT_Table.ANTB_ON = TRUE;
\r
1159 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("ODM_SwAntDivCheckBeforeLink(): Dual antenna\n"));
\r
1161 // set bt coexDM from 1ant coexDM to 2ant coexDM
\r
1162 //BT_SetBtCoexAntNum(pAdapter, BT_COEX_ANT_TYPE_DETECTED, 2);
\r
1164 // Init antenna diversity
\r
1165 pDM_Odm->SupportAbility |= ODM_BB_ANT_DIV;
\r
1166 ODM_AntDivInit(pDM_Odm);
\r
1168 //3 [ Single Antenna ]
\r
1171 if(pDM_Odm->DM_SWAT_Table.ANTB_ON == TRUE)
\r
1173 pDM_Odm->DM_SWAT_Table.ANTA_ON = TRUE;
\r
1174 pDM_Odm->DM_SWAT_Table.ANTB_ON = FALSE;
\r
1176 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SwAntDivCheckBeforeLink(): Single antenna\n"));
\r
1179 //2 [ Recover all parameters ]
\r
1181 ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_CHNLBW, bRFRegOffsetMask,Channel_ori);
\r
1182 ODM_SetBBReg(pDM_Odm, rFPGA0_AnalogParameter4, 0xf00000, 0x0); // 3 wire enable 88c[23:20]=0x0
\r
1183 ODM_SetBBReg(pDM_Odm, 0xc50, 0x7f, Regc50);
\r
1185 ODM_SetBBReg(pDM_Odm, rS0S1_PathSwitch, bMaskDWord, Reg948);
\r
1186 ODM_SetBBReg(pDM_Odm, rAGC_table_select, bMaskDWord, Regb2c);
\r
1188 ODM_SetBBReg(pDM_Odm, rFPGA0_RFMOD, BIT24, 1); //enable whole CCK block
\r
1189 ODM_Write1Byte(pDM_Odm, REG_TXPAUSE, 0x0); //Turn on TX // Resume TX Queue
\r
1190 ODM_SetBBReg(pDM_Odm, 0xC14, bMaskDWord, Regc14); // [ Set IQK Matrix = 0 ] equivalent to [ Turn on CCA]
\r
1191 ODM_SetBBReg(pDM_Odm, 0x908, bMaskDWord, Reg908);
\r
1199 odm_SwAntDetectInit(
\r
1203 #if(defined(CONFIG_ANT_DETECTION))
\r
1204 PDM_ODM_T pDM_Odm = (PDM_ODM_T)pDM_VOID;
\r
1205 pSWAT_T pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
\r
1207 //pDM_SWAT_Table->SWAS_NoLink_BK_Reg92c = ODM_Read4Byte(pDM_Odm, rDPDT_control);
\r
1208 //pDM_SWAT_Table->PreAntenna = MAIN_ANT;
\r
1209 //pDM_SWAT_Table->CurAntenna = MAIN_ANT;
\r
1210 pDM_SWAT_Table->SWAS_NoLink_State = 0;
\r
1211 pDM_SWAT_Table->Pre_Aux_FailDetec = FALSE;
\r
1212 pDM_SWAT_Table->SWAS_NoLink_BK_Reg948 = 0xff;
\r