1 /******************************************************************************
3 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of version 2 of the GNU General Public License as
7 * published by the Free Software Foundation.
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14 * You should have received a copy of the GNU General Public License along with
15 * this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
19 ******************************************************************************/
21 //============================================================
23 //============================================================
24 #include "mp_precomp.h"
25 #include "phydm_precomp.h"
27 #if(defined(CONFIG_PATH_DIVERSITY))
31 phydm_dtp_fix_tx_path(
36 PDM_ODM_T pDM_Odm = (PDM_ODM_T)pDM_VOID;
37 pPATHDIV_T pDM_PathDiv = &pDM_Odm->DM_PathDiv;
38 u1Byte i,num_enable_path=0;
40 if(path==pDM_PathDiv->pre_tx_path)
46 pDM_PathDiv->pre_tx_path=path;
49 ODM_SetBBReg( pDM_Odm, 0x93c, BIT18|BIT19, 3);
56 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, (" Number of trun-on path : (( %d ))\n", num_enable_path));
58 if(num_enable_path == 1)
60 ODM_SetBBReg( pDM_Odm, 0x93c, 0xf00000, path);
62 if(path==PHYDM_A)//1-1
64 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, (" Trun on path (( A ))\n"));
65 ODM_SetBBReg( pDM_Odm, 0x93c, BIT25|BIT24, 0);
67 else if(path==PHYDM_B)//1-2
69 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, (" Trun on path (( B ))\n"));
70 ODM_SetBBReg( pDM_Odm, 0x93c, BIT27|BIT26, 0);
72 else if(path==PHYDM_C)//1-3
74 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, (" Trun on path (( C ))\n"));
75 ODM_SetBBReg( pDM_Odm, 0x93c, BIT29|BIT28, 0);
78 else if(path==PHYDM_D)//1-4
80 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, (" Trun on path (( D ))\n"));
81 ODM_SetBBReg( pDM_Odm, 0x93c, BIT31|BIT30, 0);
85 else if(num_enable_path == 2)
87 ODM_SetBBReg( pDM_Odm, 0x93c, 0xf00000, path);
88 ODM_SetBBReg( pDM_Odm, 0x940, 0xf0, path);
90 if(path==PHYDM_AB)//2-1
92 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, (" Trun on path (( A B ))\n"));
94 ODM_SetBBReg( pDM_Odm, 0x93c, BIT25|BIT24, 0);
95 ODM_SetBBReg( pDM_Odm, 0x93c, BIT27|BIT26, 1);
97 ODM_SetBBReg( pDM_Odm, 0x940, BIT9|BIT8, 0);
98 ODM_SetBBReg( pDM_Odm, 0x940, BIT11|BIT10, 1);
100 else if(path==PHYDM_AC)//2-2
102 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, (" Trun on path (( A C ))\n"));
104 ODM_SetBBReg( pDM_Odm, 0x93c, BIT25|BIT24, 0);
105 ODM_SetBBReg( pDM_Odm, 0x93c, BIT29|BIT28, 1);
107 ODM_SetBBReg( pDM_Odm, 0x940, BIT9|BIT8, 0);
108 ODM_SetBBReg( pDM_Odm, 0x940, BIT13|BIT12, 1);
110 else if(path==PHYDM_AD)//2-3
112 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, (" Trun on path (( A D ))\n"));
114 ODM_SetBBReg( pDM_Odm, 0x93c, BIT25|BIT24, 0);
115 ODM_SetBBReg( pDM_Odm, 0x93c, BIT31|BIT30, 1);
117 ODM_SetBBReg( pDM_Odm, 0x940, BIT9|BIT8, 0);
118 ODM_SetBBReg( pDM_Odm, 0x940, BIT15|BIT14, 1);
120 else if(path==PHYDM_BC)//2-4
122 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, (" Trun on path (( B C ))\n"));
124 ODM_SetBBReg( pDM_Odm, 0x93c, BIT27|BIT26, 0);
125 ODM_SetBBReg( pDM_Odm, 0x93c, BIT29|BIT28, 1);
127 ODM_SetBBReg( pDM_Odm, 0x940, BIT11|BIT10, 0);
128 ODM_SetBBReg( pDM_Odm, 0x940, BIT13|BIT12, 1);
130 else if(path==PHYDM_BD)//2-5
132 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, (" Trun on path (( B D ))\n"));
134 ODM_SetBBReg( pDM_Odm, 0x93c, BIT27|BIT26, 0);
135 ODM_SetBBReg( pDM_Odm, 0x93c, BIT31|BIT30, 1);
137 ODM_SetBBReg( pDM_Odm, 0x940, BIT11|BIT10, 0);
138 ODM_SetBBReg( pDM_Odm, 0x940, BIT15|BIT14, 1);
140 else if(path==PHYDM_CD)//2-6
142 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, (" Trun on path (( C D ))\n"));
144 ODM_SetBBReg( pDM_Odm, 0x93c, BIT29|BIT28, 0);
145 ODM_SetBBReg( pDM_Odm, 0x93c, BIT31|BIT30, 1);
147 ODM_SetBBReg( pDM_Odm, 0x940, BIT13|BIT12, 0);
148 ODM_SetBBReg( pDM_Odm, 0x940, BIT15|BIT14, 1);
152 else if(num_enable_path == 3)
154 ODM_SetBBReg( pDM_Odm, 0x93c, 0xf00000, path);
155 ODM_SetBBReg( pDM_Odm, 0x940, 0xf0, path);
156 ODM_SetBBReg( pDM_Odm, 0x940, 0xf0000, path);
158 if(path==PHYDM_ABC)//3-1
160 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, (" Trun on path (( A B C))\n"));
162 ODM_SetBBReg( pDM_Odm, 0x93c, BIT25|BIT24, 0);
163 ODM_SetBBReg( pDM_Odm, 0x93c, BIT27|BIT26, 1);
164 ODM_SetBBReg( pDM_Odm, 0x93c, BIT29|BIT28, 2);
166 ODM_SetBBReg( pDM_Odm, 0x940, BIT9|BIT8, 0);
167 ODM_SetBBReg( pDM_Odm, 0x940, BIT11|BIT10, 1);
168 ODM_SetBBReg( pDM_Odm, 0x940, BIT13|BIT12, 2);
170 ODM_SetBBReg( pDM_Odm, 0x940, BIT21|BIT20, 0);
171 ODM_SetBBReg( pDM_Odm, 0x940, BIT23|BIT22, 1);
172 ODM_SetBBReg( pDM_Odm, 0x940, BIT25|BIT24, 2);
174 else if(path==PHYDM_ABD)//3-2
176 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, (" Trun on path (( A B D ))\n"));
178 ODM_SetBBReg( pDM_Odm, 0x93c, BIT25|BIT24, 0);
179 ODM_SetBBReg( pDM_Odm, 0x93c, BIT27|BIT26, 1);
180 ODM_SetBBReg( pDM_Odm, 0x93c, BIT31|BIT30, 2);
182 ODM_SetBBReg( pDM_Odm, 0x940, BIT9|BIT8, 0);
183 ODM_SetBBReg( pDM_Odm, 0x940, BIT11|BIT10, 1);
184 ODM_SetBBReg( pDM_Odm, 0x940, BIT15|BIT14, 2);
186 ODM_SetBBReg( pDM_Odm, 0x940, BIT21|BIT20, 0);
187 ODM_SetBBReg( pDM_Odm, 0x940, BIT23|BIT22, 1);
188 ODM_SetBBReg( pDM_Odm, 0x940, BIT27|BIT26, 2);
191 else if(path==PHYDM_ACD)//3-3
193 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, (" Trun on path (( A C D ))\n"));
195 ODM_SetBBReg( pDM_Odm, 0x93c, BIT25|BIT24, 0);
196 ODM_SetBBReg( pDM_Odm, 0x93c, BIT29|BIT28, 1);
197 ODM_SetBBReg( pDM_Odm, 0x93c, BIT31|BIT30, 2);
199 ODM_SetBBReg( pDM_Odm, 0x940, BIT9|BIT8, 0);
200 ODM_SetBBReg( pDM_Odm, 0x940, BIT13|BIT12, 1);
201 ODM_SetBBReg( pDM_Odm, 0x940, BIT15|BIT14, 2);
203 ODM_SetBBReg( pDM_Odm, 0x940, BIT21|BIT20, 0);
204 ODM_SetBBReg( pDM_Odm, 0x940, BIT25|BIT24, 1);
205 ODM_SetBBReg( pDM_Odm, 0x940, BIT27|BIT26, 2);
207 else if(path==PHYDM_BCD)//3-4
209 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, (" Trun on path (( B C D))\n"));
211 ODM_SetBBReg( pDM_Odm, 0x93c, BIT27|BIT26, 0);
212 ODM_SetBBReg( pDM_Odm, 0x93c, BIT29|BIT28, 1);
213 ODM_SetBBReg( pDM_Odm, 0x93c, BIT31|BIT30, 2);
215 ODM_SetBBReg( pDM_Odm, 0x940, BIT11|BIT10, 0);
216 ODM_SetBBReg( pDM_Odm, 0x940, BIT13|BIT12, 1);
217 ODM_SetBBReg( pDM_Odm, 0x940, BIT15|BIT14, 2);
219 ODM_SetBBReg( pDM_Odm, 0x940, BIT23|BIT22, 0);
220 ODM_SetBBReg( pDM_Odm, 0x940, BIT25|BIT24, 1);
221 ODM_SetBBReg( pDM_Odm, 0x940, BIT27|BIT26, 2);
224 else if(num_enable_path == 4)
226 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, (" Trun on path ((A B C D))\n"));
232 phydm_find_default_path(
236 PDM_ODM_T pDM_Odm = (PDM_ODM_T)pDM_VOID;
237 pPATHDIV_T pDM_PathDiv = &pDM_Odm->DM_PathDiv;
238 u4Byte rssi_avg_a=0, rssi_avg_b=0, rssi_avg_c=0, rssi_avg_d=0, rssi_avg_bcd=0;
239 u4Byte rssi_total_a=0, rssi_total_b=0, rssi_total_c=0, rssi_total_d=0;
241 //2 Default Path Selection By RSSI
243 rssi_avg_a = (pDM_PathDiv->path_a_cnt_all > 0)? (pDM_PathDiv->path_a_sum_all / pDM_PathDiv->path_a_cnt_all) :0 ;
244 rssi_avg_b = (pDM_PathDiv->path_b_cnt_all > 0)? (pDM_PathDiv->path_b_sum_all / pDM_PathDiv->path_b_cnt_all) :0 ;
245 rssi_avg_c = (pDM_PathDiv->path_c_cnt_all > 0)? (pDM_PathDiv->path_c_sum_all / pDM_PathDiv->path_c_cnt_all) :0 ;
246 rssi_avg_d = (pDM_PathDiv->path_d_cnt_all > 0)? (pDM_PathDiv->path_d_sum_all / pDM_PathDiv->path_d_cnt_all) :0 ;
249 pDM_PathDiv->path_a_sum_all = 0;
250 pDM_PathDiv->path_a_cnt_all = 0;
251 pDM_PathDiv->path_b_sum_all = 0;
252 pDM_PathDiv->path_b_cnt_all = 0;
253 pDM_PathDiv->path_c_sum_all = 0;
254 pDM_PathDiv->path_c_cnt_all = 0;
255 pDM_PathDiv->path_d_sum_all = 0;
256 pDM_PathDiv->path_d_cnt_all = 0;
258 if(pDM_PathDiv->use_path_a_as_default_ant == 1)
260 rssi_avg_bcd=(rssi_avg_b+rssi_avg_c+rssi_avg_d)/3;
262 if( (rssi_avg_a + ANT_DECT_RSSI_TH) > rssi_avg_bcd )
264 pDM_PathDiv->is_pathA_exist=TRUE;
265 pDM_PathDiv->default_path=PATH_A;
269 pDM_PathDiv->is_pathA_exist=FALSE;
274 if( (rssi_avg_a >=rssi_avg_b) && (rssi_avg_a >=rssi_avg_c)&&(rssi_avg_a >=rssi_avg_d))
275 pDM_PathDiv->default_path=PATH_A;
276 else if( (rssi_avg_b >=rssi_avg_c)&&(rssi_avg_b >=rssi_avg_d))
277 pDM_PathDiv->default_path=PATH_B;
278 else if( rssi_avg_c >=rssi_avg_d)
279 pDM_PathDiv->default_path=PATH_C;
281 pDM_PathDiv->default_path=PATH_D;
289 phydm_candidate_dtp_update(
293 PDM_ODM_T pDM_Odm = (PDM_ODM_T)pDM_VOID;
294 pPATHDIV_T pDM_PathDiv = &pDM_Odm->DM_PathDiv;
296 pDM_PathDiv->num_candidate=3;
298 if(pDM_PathDiv->use_path_a_as_default_ant == 1)
300 if(pDM_PathDiv->num_tx_path==3)
302 if(pDM_PathDiv->is_pathA_exist)
304 pDM_PathDiv->ant_candidate_1 = PHYDM_ABC;
305 pDM_PathDiv->ant_candidate_2 = PHYDM_ABD;
306 pDM_PathDiv->ant_candidate_3 = PHYDM_ACD;
310 pDM_PathDiv->num_candidate=1;
311 phydm_dtp_fix_tx_path(pDM_Odm, PHYDM_BCD);
315 else if(pDM_PathDiv->num_tx_path==2)
317 if(pDM_PathDiv->is_pathA_exist)
319 pDM_PathDiv->ant_candidate_1 = PHYDM_AB;
320 pDM_PathDiv->ant_candidate_2 = PHYDM_AC;
321 pDM_PathDiv->ant_candidate_3 = PHYDM_AD;
325 pDM_PathDiv->ant_candidate_1 = PHYDM_BC;
326 pDM_PathDiv->ant_candidate_2 = PHYDM_BD;
327 pDM_PathDiv->ant_candidate_3 = PHYDM_CD;
334 if(pDM_PathDiv->num_tx_path==3)//choose 3 ant form 4
336 if(pDM_PathDiv->default_path == PATH_A) //choose 2 ant form 3
338 pDM_PathDiv->ant_candidate_1 = PHYDM_ABC;
339 pDM_PathDiv->ant_candidate_2 = PHYDM_ABD;
340 pDM_PathDiv->ant_candidate_3 = PHYDM_ACD;
342 else if(pDM_PathDiv->default_path==PATH_B)
344 pDM_PathDiv->ant_candidate_1 = PHYDM_ABC;
345 pDM_PathDiv->ant_candidate_2 = PHYDM_ABD;
346 pDM_PathDiv->ant_candidate_3 = PHYDM_BCD;
348 else if(pDM_PathDiv->default_path == PATH_C)
350 pDM_PathDiv->ant_candidate_1 = PHYDM_ABC;
351 pDM_PathDiv->ant_candidate_2 = PHYDM_ACD;
352 pDM_PathDiv->ant_candidate_3 = PHYDM_BCD;
354 else if(pDM_PathDiv->default_path == PATH_D)
356 pDM_PathDiv->ant_candidate_1 = PHYDM_ABD;
357 pDM_PathDiv->ant_candidate_2 = PHYDM_ACD;
358 pDM_PathDiv->ant_candidate_3 = PHYDM_BCD;
363 else if(pDM_PathDiv->num_tx_path==2)//choose 2 ant form 4
365 if(pDM_PathDiv->default_path == PATH_A) //choose 2 ant form 3
367 pDM_PathDiv->ant_candidate_1 = PHYDM_AB;
368 pDM_PathDiv->ant_candidate_2 = PHYDM_AC;
369 pDM_PathDiv->ant_candidate_3 = PHYDM_AD;
371 else if(pDM_PathDiv->default_path==PATH_B)
373 pDM_PathDiv->ant_candidate_1 = PHYDM_AB;
374 pDM_PathDiv->ant_candidate_2 = PHYDM_BC;
375 pDM_PathDiv->ant_candidate_3 = PHYDM_BD;
377 else if(pDM_PathDiv->default_path == PATH_C)
379 pDM_PathDiv->ant_candidate_1 = PHYDM_AC;
380 pDM_PathDiv->ant_candidate_2 = PHYDM_BC;
381 pDM_PathDiv->ant_candidate_3 = PHYDM_CD;
383 else if(pDM_PathDiv->default_path == PATH_D)
385 pDM_PathDiv->ant_candidate_1= PHYDM_AD;
386 pDM_PathDiv->ant_candidate_2 = PHYDM_BD;
387 pDM_PathDiv->ant_candidate_3= PHYDM_CD;
395 phydm_dynamic_tx_path(
399 PDM_ODM_T pDM_Odm = (PDM_ODM_T)pDM_VOID;
400 pPATHDIV_T pDM_PathDiv = &pDM_Odm->DM_PathDiv;
405 u1Byte H2C_Parameter[6] ={0};
408 if(!pDM_Odm->bLinked) //bLinked==False
410 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("DTP_8814 [No Link!!!]\n"));
412 if(pDM_PathDiv->bBecomeLinked == TRUE)
414 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, (" [Be disconnected]----->\n"));
415 pDM_PathDiv->bBecomeLinked = pDM_Odm->bLinked;
421 if(pDM_PathDiv->bBecomeLinked ==FALSE)
423 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, (" [Be Linked !!!]----->\n"));
424 pDM_PathDiv->bBecomeLinked = pDM_Odm->bLinked;
429 if(pDM_PathDiv->dtp_period >=2)
431 pDM_PathDiv->dtp_period=0;
435 //ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("Phydm_Dynamic_Tx_Path_8814A() Stay = (( %d ))\n",pDM_PathDiv->dtp_period));
436 pDM_PathDiv->dtp_period++;
442 if (pDM_Odm->path_select != PHYDM_AUTO_PATH)
448 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
451 if(pDM_PathDiv->use_path_a_as_default_ant ==1)
453 phydm_find_default_path(pDM_Odm);
454 phydm_candidate_dtp_update(pDM_Odm);
458 if( pDM_PathDiv->dtp_state == PHYDM_DTP_INIT)
460 phydm_find_default_path(pDM_Odm);
461 phydm_candidate_dtp_update(pDM_Odm);
462 pDM_PathDiv->dtp_state = PHYDM_DTP_RUNNING_1;
465 else if( pDM_PathDiv->dtp_state == PHYDM_DTP_RUNNING_1)
467 pDM_PathDiv->dtp_check_patha_counter++;
469 if(pDM_PathDiv->dtp_check_patha_counter>=NUM_RESET_DTP_PERIOD)
471 pDM_PathDiv->dtp_check_patha_counter=0;
472 pDM_PathDiv->dtp_state = PHYDM_DTP_INIT;
474 //2 Search space update
477 // 1. find the worst candidate
480 // 2. repalce the worst candidate
485 //2 Dynamic Path Selection H2C
487 if(pDM_PathDiv->num_candidate == 1)
493 H2C_Parameter[0] = pDM_PathDiv->num_candidate;
494 H2C_Parameter[1] = pDM_PathDiv->num_tx_path;
495 H2C_Parameter[2] = pDM_PathDiv->ant_candidate_1;
496 H2C_Parameter[3] = pDM_PathDiv->ant_candidate_2;
497 H2C_Parameter[4] = pDM_PathDiv->ant_candidate_3;
499 ODM_FillH2CCmd(pDM_Odm, PHYDM_H2C_DYNAMIC_TX_PATH, 6, H2C_Parameter);
507 phydm_dynamic_tx_path_init(
511 PDM_ODM_T pDM_Odm = (PDM_ODM_T)pDM_VOID;
512 pPATHDIV_T pDM_PathDiv = &(pDM_Odm->DM_PathDiv);
513 PADAPTER pAdapter = pDM_Odm->Adapter;
514 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
515 USB_MODE_MECH *pUsbModeMech = &pAdapter->UsbModeMechanism;
517 u1Byte search_space_2[NUM_CHOOSE2_FROM4]= {PHYDM_AB, PHYDM_AC, PHYDM_AD, PHYDM_BC, PHYDM_BD, PHYDM_CD };
518 u1Byte search_space_3[NUM_CHOOSE3_FROM4]= {PHYDM_BCD, PHYDM_ACD, PHYDM_ABD, PHYDM_ABC};
520 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
521 pDM_PathDiv->is_u3_mode = (pUsbModeMech->CurUsbMode==USB_MODE_U3)? 1 : 0 ;
523 pDM_PathDiv->is_u3_mode = 1;
525 ODM_RT_TRACE(pDM_Odm, ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("Dynamic TX Path Init 8814\n"));
526 ODM_RT_TRACE(pDM_Odm, ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("is_u3_mode = (( %d ))\n", pDM_PathDiv->is_u3_mode));
528 memcpy(&(pDM_PathDiv->search_space_2[0]), &(search_space_2[0]), NUM_CHOOSE2_FROM4);
529 memcpy(&(pDM_PathDiv->search_space_3[0]), &(search_space_3[0]), NUM_CHOOSE3_FROM4);
531 pDM_PathDiv->use_path_a_as_default_ant= 1;
532 pDM_PathDiv->dtp_state = PHYDM_DTP_INIT;
533 pDM_Odm->path_select = PHYDM_AUTO_PATH;
534 pDM_PathDiv->path_div_type = PHYDM_4R_PATH_DIV;
537 if(pDM_PathDiv->is_u3_mode )
539 pDM_PathDiv->num_tx_path=3;
540 phydm_dtp_fix_tx_path(pDM_Odm, PHYDM_BCD);/* 3TX Set Init TX Path*/
545 pDM_PathDiv->num_tx_path=2;
546 phydm_dtp_fix_tx_path(pDM_Odm, PHYDM_BC);/* 2TX // Set Init TX Path*/
553 phydm_process_rssi_for_path_div(
554 IN OUT PVOID pDM_VOID,
555 IN PVOID p_phy_info_void,
556 IN PVOID p_pkt_info_void
559 PDM_ODM_T pDM_Odm = (PDM_ODM_T)pDM_VOID;
560 PODM_PHY_INFO_T pPhyInfo=(PODM_PHY_INFO_T)p_phy_info_void;
561 PODM_PACKET_INFO_T pPktinfo=(PODM_PACKET_INFO_T)p_pkt_info_void;
562 pPATHDIV_T pDM_PathDiv = &(pDM_Odm->DM_PathDiv);
564 if(pPktinfo->bPacketToSelf || pPktinfo->bPacketMatchBSSID)
566 if(pPktinfo->DataRate > ODM_RATE11M)
568 if(pDM_PathDiv->path_div_type == PHYDM_4R_PATH_DIV)
571 if(pDM_Odm->SupportICType & ODM_RTL8814A)
573 pDM_PathDiv->path_a_sum_all+=pPhyInfo->RxMIMOSignalStrength[0];
574 pDM_PathDiv->path_a_cnt_all++;
576 pDM_PathDiv->path_b_sum_all+=pPhyInfo->RxMIMOSignalStrength[1];
577 pDM_PathDiv->path_b_cnt_all++;
579 pDM_PathDiv->path_c_sum_all+=pPhyInfo->RxMIMOSignalStrength[2];
580 pDM_PathDiv->path_c_cnt_all++;
582 pDM_PathDiv->path_d_sum_all+=pPhyInfo->RxMIMOSignalStrength[3];
583 pDM_PathDiv->path_d_cnt_all++;
589 pDM_PathDiv->PathA_Sum[pPktinfo->StationID]+=pPhyInfo->RxMIMOSignalStrength[0];
590 pDM_PathDiv->PathA_Cnt[pPktinfo->StationID]++;
592 pDM_PathDiv->PathB_Sum[pPktinfo->StationID]+=pPhyInfo->RxMIMOSignalStrength[1];
593 pDM_PathDiv->PathB_Cnt[pPktinfo->StationID]++;
601 #endif //#if RTL8814A_SUPPORT
606 IN u4Byte *const dm_value,
612 PDM_ODM_T pDM_Odm = (PDM_ODM_T)pDM_VOID;
613 pPATHDIV_T pDM_PathDiv = &(pDM_Odm->DM_PathDiv);
614 u4Byte used = *_used;
615 u4Byte out_len = *_out_len;
617 pDM_Odm->path_select = (dm_value[0] & 0xf);
618 PHYDM_SNPRINTF((output+used, out_len-used,"Path_select = (( 0x%x ))\n",pDM_Odm->path_select ));
621 if (pDM_Odm->path_select != PHYDM_AUTO_PATH)
623 PHYDM_SNPRINTF((output+used, out_len-used,"Trun on path [%s%s%s%s]\n",
624 ((pDM_Odm->path_select) & 0x1)?"A":"",
625 ((pDM_Odm->path_select) & 0x2)?"B":"",
626 ((pDM_Odm->path_select) & 0x4)?"C":"",
627 ((pDM_Odm->path_select) & 0x8)?"D":"" ));
629 phydm_dtp_fix_tx_path( pDM_Odm, pDM_Odm->path_select );
633 PHYDM_SNPRINTF((output+used, out_len-used,"%s\n","Auto Path"));
637 #endif // #if(defined(CONFIG_PATH_DIVERSITY))
640 phydm_c2h_dtp_handler(
646 #if(defined(CONFIG_PATH_DIVERSITY))
647 PDM_ODM_T pDM_Odm = (PDM_ODM_T)pDM_VOID;
648 pPATHDIV_T pDM_PathDiv = &(pDM_Odm->DM_PathDiv);
650 u1Byte macid = CmdBuf[0];
651 u1Byte target = CmdBuf[1];
652 u1Byte nsc_1 = CmdBuf[2];
653 u1Byte nsc_2 = CmdBuf[3];
654 u1Byte nsc_3 = CmdBuf[4];
656 ODM_RT_TRACE(pDM_Odm, ODM_COMP_PATH_DIV,ODM_DBG_LOUD,("Target_candidate = (( %d ))\n", target));
658 if( (nsc_1 >= nsc_2) && (nsc_1 >= nsc_3))
660 phydm_dtp_fix_tx_path(pDM_Odm, pDM_PathDiv->ant_candidate_1);
662 else if( nsc_2 >= nsc_3)
664 phydm_dtp_fix_tx_path(pDM_Odm, pDM_PathDiv->ant_candidate_2);
668 phydm_dtp_fix_tx_path(pDM_Odm, pDM_PathDiv->ant_candidate_3);
679 #if(defined(CONFIG_PATH_DIVERSITY))
680 PDM_ODM_T pDM_Odm = (PDM_ODM_T)pDM_VOID;
681 if(!(pDM_Odm->SupportAbility & ODM_BB_PATH_DIV))
683 ODM_RT_TRACE(pDM_Odm, ODM_COMP_PATH_DIV,ODM_DBG_LOUD,("Return: Not Support PathDiv\n"));
689 if(pDM_Odm->SupportICType & ODM_RTL8812)
690 ODM_PathDiversity_8812A(pDM_Odm);
695 if(pDM_Odm->SupportICType & ODM_RTL8814A)
696 phydm_dynamic_tx_path(pDM_Odm);
704 odm_PathDiversityInit(
708 #if(defined(CONFIG_PATH_DIVERSITY))
709 PDM_ODM_T pDM_Odm = (PDM_ODM_T)pDM_VOID;
711 /*pDM_Odm->SupportAbility |= ODM_BB_PATH_DIV;*/
713 if(pDM_Odm->mp_mode == TRUE)
716 if(!(pDM_Odm->SupportAbility & ODM_BB_PATH_DIV))
718 ODM_RT_TRACE(pDM_Odm, ODM_COMP_PATH_DIV,ODM_DBG_LOUD,("Return: Not Support PathDiv\n"));
723 if(pDM_Odm->SupportICType & ODM_RTL8812)
724 ODM_PathDiversityInit_8812A(pDM_Odm);
729 if(pDM_Odm->SupportICType & ODM_RTL8814A)
730 phydm_dynamic_tx_path_init(pDM_Odm);
739 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
741 // 2011/12/02 MH Copy from MP oursrc for temporarily test.
750 PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo);
752 BOOLEAN bConnected=FALSE;
754 if(pMgntInfo->mAssoc)
760 for(i = 0; i < ODM_ASSOCIATE_ENTRY_NUM; i++)
762 if(IsAPModeExist(Adapter) && GetFirstExtAdapter(Adapter) != NULL)
763 pEntry = AsocEntry_EnumStation(GetFirstExtAdapter(Adapter), i);
765 pEntry = AsocEntry_EnumStation(GetDefaultAdapter(Adapter), i);
769 if(pEntry->bAssociated)
785 ODM_PathDiversityBeforeLink92C(
786 //IN PADAPTER Adapter
790 #if (RT_MEM_SIZE_LEVEL != RT_MEM_SIZE_MINIMUM)
791 PADAPTER Adapter = pDM_Odm->Adapter;
792 HAL_DATA_TYPE* pHalData = NULL;
793 PMGNT_INFO pMgntInfo = NULL;
794 //pSWAT_T pDM_SWAT_Table = &Adapter->DM_SWAT_Table;
795 pPD_T pDM_PDTable = NULL;
798 PRT_WLAN_BSS pTmpBssDesc;
799 PRT_WLAN_BSS pTestBssDesc;
801 u1Byte target_chnl = 0;
804 if (pDM_Odm->Adapter == NULL) //For BSOD when plug/unplug fast. //By YJ,120413
805 { // The ODM structure is not initialized.
808 pHalData = GET_HAL_DATA(Adapter);
809 pMgntInfo = &Adapter->MgntInfo;
810 pDM_PDTable = &Adapter->DM_PDTable;
812 // Condition that does not need to use path diversity.
813 if((!(pHalData->CVID_Version==VERSION_1_BEFORE_8703B && IS_92C_SERIAL(pHalData->VersionID))) || (pHalData->PathDivCfg!=1) || pMgntInfo->AntennaTest )
815 RT_TRACE(COMP_INIT, DBG_LOUD,
816 ("ODM_PathDiversityBeforeLink92C(): No PathDiv Mechanism before link.\n"));
820 // Since driver is going to set BB register, it shall check if there is another thread controlling BB/RF.
821 PlatformAcquireSpinLock(Adapter, RT_RF_STATE_SPINLOCK);
822 if(pHalData->eRFPowerState!=eRfOn || pMgntInfo->RFChangeInProgress || pMgntInfo->bMediaConnect)
824 PlatformReleaseSpinLock(Adapter, RT_RF_STATE_SPINLOCK);
826 RT_TRACE(COMP_INIT, DBG_LOUD,
827 ("ODM_PathDiversityBeforeLink92C(): RFChangeInProgress(%x), eRFPowerState(%x)\n",
828 pMgntInfo->RFChangeInProgress,
829 pHalData->eRFPowerState));
831 //pDM_SWAT_Table->SWAS_NoLink_State = 0;
832 pDM_PDTable->PathDiv_NoLink_State = 0;
838 PlatformReleaseSpinLock(Adapter, RT_RF_STATE_SPINLOCK);
841 //1 Run AntDiv mechanism "Before Link" part.
842 //if(pDM_SWAT_Table->SWAS_NoLink_State == 0)
843 if(pDM_PDTable->PathDiv_NoLink_State == 0)
845 //1 Prepare to do Scan again to check current antenna state.
847 // Set check state to next step.
848 //pDM_SWAT_Table->SWAS_NoLink_State = 1;
849 pDM_PDTable->PathDiv_NoLink_State = 1;
851 // Copy Current Scan list.
852 Adapter->MgntInfo.tmpNumBssDesc = pMgntInfo->NumBssDesc;
853 PlatformMoveMemory((PVOID)Adapter->MgntInfo.tmpbssDesc, (PVOID)pMgntInfo->bssDesc, sizeof(RT_WLAN_BSS)*MAX_BSS_DESC);
855 // Switch Antenna to another one.
856 if(pDM_PDTable->DefaultRespPath == 0)
858 PHY_SetBBReg(Adapter, rCCK0_AFESetting , 0x0F000000, 0x05); // TRX path = PathB
859 odm_SetRespPath_92C(Adapter, 1);
860 pDM_PDTable->OFDMTXPath = 0xFFFFFFFF;
861 pDM_PDTable->CCKTXPath = 0xFFFFFFFF;
865 PHY_SetBBReg(Adapter, rCCK0_AFESetting , 0x0F000000, 0x00); // TRX path = PathA
866 odm_SetRespPath_92C(Adapter, 0);
867 pDM_PDTable->OFDMTXPath = 0x0;
868 pDM_PDTable->CCKTXPath = 0x0;
872 pDM_SWAT_Table->PreAntenna = pDM_SWAT_Table->CurAntenna;
873 pDM_SWAT_Table->CurAntenna = (pDM_SWAT_Table->CurAntenna==Antenna_A)?Antenna_B:Antenna_A;
875 RT_TRACE(COMP_INIT, DBG_LOUD,
876 ("ODM_SwAntDivCheckBeforeLink: Change to Ant(%s) for testing.\n", (pDM_SWAT_Table->CurAntenna==Antenna_A)?"A":"B"));
877 //PHY_SetBBReg(Adapter, rFPGA0_XA_RFInterfaceOE, 0x300, DM_SWAT_Table.CurAntenna);
878 pDM_SWAT_Table->SWAS_NoLink_BK_Reg860 = ((pDM_SWAT_Table->SWAS_NoLink_BK_Reg860 & 0xfffffcff) | (pDM_SWAT_Table->CurAntenna<<8));
879 PHY_SetBBReg(Adapter, rFPGA0_XA_RFInterfaceOE, bMaskDWord, pDM_SWAT_Table->SWAS_NoLink_BK_Reg860);
882 // Go back to scan function again.
883 RT_TRACE(COMP_INIT, DBG_LOUD, ("ODM_PathDiversityBeforeLink92C: Scan one more time\n"));
884 pMgntInfo->ScanStep=0;
885 target_chnl = odm_SwAntDivSelectScanChnl(Adapter);
886 odm_SwAntDivConstructScanChnl(Adapter, target_chnl);
887 PlatformSetTimer(Adapter, &pMgntInfo->ScanTimer, 5);
893 //1 ScanComple() is called after antenna swiched.
894 //1 Check scan result and determine which antenna is going
897 for(index=0; index<Adapter->MgntInfo.tmpNumBssDesc; index++)
899 pTmpBssDesc = &(Adapter->MgntInfo.tmpbssDesc[index]);
900 pTestBssDesc = &(pMgntInfo->bssDesc[index]);
902 if(PlatformCompareMemory(pTestBssDesc->bdBssIdBuf, pTmpBssDesc->bdBssIdBuf, 6)!=0)
904 RT_TRACE(COMP_INIT, DBG_LOUD, ("ODM_PathDiversityBeforeLink92C(): ERROR!! This shall not happen.\n"));
908 if(pTmpBssDesc->RecvSignalPower > pTestBssDesc->RecvSignalPower)
910 RT_TRACE(COMP_INIT, DBG_LOUD, ("ODM_PathDiversityBeforeLink92C: Compare scan entry: Score++\n"));
911 RT_PRINT_STR(COMP_INIT, DBG_LOUD, "SSID: ", pTestBssDesc->bdSsIdBuf, pTestBssDesc->bdSsIdLen);
912 RT_TRACE(COMP_INIT, DBG_LOUD, ("Original: %d, Test: %d\n", pTmpBssDesc->RecvSignalPower, pTestBssDesc->RecvSignalPower));
915 PlatformMoveMemory(pTestBssDesc, pTmpBssDesc, sizeof(RT_WLAN_BSS));
917 else if(pTmpBssDesc->RecvSignalPower < pTestBssDesc->RecvSignalPower)
919 RT_TRACE(COMP_INIT, DBG_LOUD, ("ODM_PathDiversityBeforeLink92C: Compare scan entry: Score--\n"));
920 RT_PRINT_STR(COMP_INIT, DBG_LOUD, "SSID: ", pTestBssDesc->bdSsIdBuf, pTestBssDesc->bdSsIdLen);
921 RT_TRACE(COMP_INIT, DBG_LOUD, ("Original: %d, Test: %d\n", pTmpBssDesc->RecvSignalPower, pTestBssDesc->RecvSignalPower));
927 if(pMgntInfo->NumBssDesc!=0 && Score<=0)
929 RT_TRACE(COMP_INIT, DBG_LOUD,
930 ("ODM_PathDiversityBeforeLink92C(): DefaultRespPath=%d\n", pDM_PDTable->DefaultRespPath));
932 //pDM_SWAT_Table->PreAntenna = pDM_SWAT_Table->CurAntenna;
936 RT_TRACE(COMP_INIT, DBG_LOUD,
937 ("ODM_PathDiversityBeforeLink92C(): DefaultRespPath=%d\n", pDM_PDTable->DefaultRespPath));
939 if(pDM_PDTable->DefaultRespPath == 0)
941 pDM_PDTable->OFDMTXPath = 0xFFFFFFFF;
942 pDM_PDTable->CCKTXPath = 0xFFFFFFFF;
943 odm_SetRespPath_92C(Adapter, 1);
947 pDM_PDTable->OFDMTXPath = 0x0;
948 pDM_PDTable->CCKTXPath = 0x0;
949 odm_SetRespPath_92C(Adapter, 0);
951 PHY_SetBBReg(Adapter, rCCK0_AFESetting , 0x0F000000, 0x01); // RX path = PathAB
953 //pDM_SWAT_Table->CurAntenna = pDM_SWAT_Table->PreAntenna;
955 //PHY_SetBBReg(Adapter, rFPGA0_XA_RFInterfaceOE, 0x300, DM_SWAT_Table.CurAntenna);
956 //pDM_SWAT_Table->SWAS_NoLink_BK_Reg860 = ((pDM_SWAT_Table->SWAS_NoLink_BK_Reg860 & 0xfffffcff) | (pDM_SWAT_Table->CurAntenna<<8));
957 //PHY_SetBBReg(Adapter, rFPGA0_XA_RFInterfaceOE, bMaskDWord, pDM_SWAT_Table->SWAS_NoLink_BK_Reg860);
960 // Check state reset to default and wait for next time.
961 //pDM_SWAT_Table->SWAS_NoLink_State = 0;
962 pDM_PDTable->PathDiv_NoLink_State = 0;
975 odm_PathDiversityAfterLink_92C(
979 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
980 PDM_ODM_T pDM_Odm = &pHalData->DM_OutSrc;
981 pPD_T pDM_PDTable = &Adapter->DM_PDTable;
982 u1Byte DefaultRespPath=0;
984 if((!(pHalData->CVID_Version==VERSION_1_BEFORE_8703B && IS_92C_SERIAL(pHalData->VersionID))) || (pHalData->PathDivCfg != 1) || (pHalData->eRFPowerState == eRfOff))
986 if(pHalData->PathDivCfg == 0)
988 RT_TRACE( COMP_INIT, DBG_LOUD, ("No ODM_TXPathDiversity()\n"));
992 RT_TRACE( COMP_INIT, DBG_LOUD, ("2T ODM_TXPathDiversity()\n"));
996 if(!odm_IsConnected_92C(Adapter))
998 RT_TRACE( COMP_INIT, DBG_LOUD, ("ODM_TXPathDiversity(): No Connections\n"));
1003 if(pDM_PDTable->TrainingState == 0)
1005 RT_TRACE( COMP_INIT, DBG_LOUD, ("ODM_TXPathDiversity() ==>\n"));
1006 odm_OFDMTXPathDiversity_92C(Adapter);
1008 if((pDM_PDTable->CCKPathDivEnable == TRUE) && (pDM_PDTable->OFDM_Pkt_Cnt < 100))
1010 //RT_TRACE( COMP_INIT, DBG_LOUD, ("odm_CCKTXPathDiversity_92C: TrainingState=0\n"));
1012 if(pDM_PDTable->CCK_Pkt_Cnt > 300)
1013 pDM_PDTable->Timer = 20;
1014 else if(pDM_PDTable->CCK_Pkt_Cnt > 100)
1015 pDM_PDTable->Timer = 60;
1017 pDM_PDTable->Timer = 250;
1018 RT_TRACE( COMP_INIT, DBG_LOUD, ("odm_CCKTXPathDiversity_92C: timer=%d\n",pDM_PDTable->Timer));
1020 PHY_SetBBReg(Adapter, rCCK0_AFESetting , 0x0F000000, 0x00); // RX path = PathA
1021 pDM_PDTable->TrainingState = 1;
1022 ODM_SetTimer( pDM_Odm, &pDM_Odm->CCKPathDiversityTimer, pDM_PDTable->Timer); //ms
1026 pDM_PDTable->CCKTXPath = pDM_PDTable->OFDMTXPath;
1027 DefaultRespPath = pDM_PDTable->OFDMDefaultRespPath;
1028 RT_TRACE( COMP_INIT, DBG_LOUD, ("odm_SetRespPath_92C: Skip odm_CCKTXPathDiversity_92C, DefaultRespPath is OFDM\n"));
1029 odm_SetRespPath_92C(Adapter, DefaultRespPath);
1030 odm_ResetPathDiversity_92C(Adapter);
1031 RT_TRACE( COMP_INIT, DBG_LOUD, ("ODM_TXPathDiversity() <==\n"));
1034 else if(pDM_PDTable->TrainingState == 1)
1036 //RT_TRACE( COMP_INIT, DBG_LOUD, ("odm_CCKTXPathDiversity_92C: TrainingState=1\n"));
1037 PHY_SetBBReg(Adapter, rCCK0_AFESetting , 0x0F000000, 0x05); // RX path = PathB
1038 pDM_PDTable->TrainingState = 2;
1039 ODM_SetTimer( pDM_Odm, &pDM_Odm->CCKPathDiversityTimer, pDM_PDTable->Timer); //ms
1043 //RT_TRACE( COMP_INIT, DBG_LOUD, ("odm_CCKTXPathDiversity_92C: TrainingState=2\n"));
1044 pDM_PDTable->TrainingState = 0;
1045 odm_CCKTXPathDiversity_92C(Adapter);
1046 if(pDM_PDTable->OFDM_Pkt_Cnt != 0)
1048 DefaultRespPath = pDM_PDTable->OFDMDefaultRespPath;
1049 RT_TRACE( COMP_INIT, DBG_LOUD, ("odm_SetRespPath_92C: DefaultRespPath is OFDM\n"));
1053 DefaultRespPath = pDM_PDTable->CCKDefaultRespPath;
1054 RT_TRACE( COMP_INIT, DBG_LOUD, ("odm_SetRespPath_92C: DefaultRespPath is CCK\n"));
1056 odm_SetRespPath_92C(Adapter, DefaultRespPath);
1057 odm_ResetPathDiversity_92C(Adapter);
1058 RT_TRACE( COMP_INIT, DBG_LOUD, ("ODM_TXPathDiversity() <==\n"));
1064 odm_SetRespPath_92C(
1065 IN PADAPTER Adapter,
1066 IN u1Byte DefaultRespPath
1069 pPD_T pDM_PDTable = &Adapter->DM_PDTable;
1071 RT_TRACE( COMP_INIT, DBG_LOUD, ("odm_SetRespPath_92C: Select Response Path=%d\n",DefaultRespPath));
1072 if(DefaultRespPath != pDM_PDTable->DefaultRespPath)
1074 if(DefaultRespPath == 0)
1076 PlatformEFIOWrite1Byte(Adapter, 0x6D8, (PlatformEFIORead1Byte(Adapter, 0x6D8)&0xc0)|0x15);
1080 PlatformEFIOWrite1Byte(Adapter, 0x6D8, (PlatformEFIORead1Byte(Adapter, 0x6D8)&0xc0)|0x2A);
1083 pDM_PDTable->DefaultRespPath = DefaultRespPath;
1087 odm_OFDMTXPathDiversity_92C(
1088 IN PADAPTER Adapter)
1090 // HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
1091 PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo);
1092 PRT_WLAN_STA pEntry;
1093 u1Byte i, DefaultRespPath = 0;
1094 s4Byte MinRSSI = 0xFF;
1095 pPD_T pDM_PDTable = &Adapter->DM_PDTable;
1096 pDM_PDTable->OFDMTXPath = 0;
1099 if(pMgntInfo->mAssoc)
1101 RT_TRACE( COMP_INIT, DBG_LOUD, ("odm_OFDMTXPathDiversity_92C: Default port RSSI[0]=%d, RSSI[1]=%d\n",
1102 Adapter->RxStats.RxRSSIPercentage[0], Adapter->RxStats.RxRSSIPercentage[1]));
1103 if(Adapter->RxStats.RxRSSIPercentage[0] > Adapter->RxStats.RxRSSIPercentage[1])
1105 pDM_PDTable->OFDMTXPath = pDM_PDTable->OFDMTXPath & (~BIT0);
1106 MinRSSI = Adapter->RxStats.RxRSSIPercentage[1];
1107 DefaultRespPath = 0;
1108 RT_TRACE( COMP_INIT, DBG_LOUD, ("odm_OFDMTXPathDiversity_92C: Default port Select Path-0\n"));
1112 pDM_PDTable->OFDMTXPath = pDM_PDTable->OFDMTXPath | BIT0;
1113 MinRSSI = Adapter->RxStats.RxRSSIPercentage[0];
1114 DefaultRespPath = 1;
1115 RT_TRACE( COMP_INIT, DBG_LOUD, ("odm_OFDMTXPathDiversity_92C: Default port Select Path-1\n"));
1117 //RT_TRACE( COMP_INIT, DBG_LOUD, ("pDM_PDTable->OFDMTXPath =0x%x\n",pDM_PDTable->OFDMTXPath));
1120 for(i = 0; i < ODM_ASSOCIATE_ENTRY_NUM; i++)
1122 if(IsAPModeExist(Adapter) && GetFirstExtAdapter(Adapter) != NULL)
1123 pEntry = AsocEntry_EnumStation(GetFirstExtAdapter(Adapter), i);
1125 pEntry = AsocEntry_EnumStation(GetDefaultAdapter(Adapter), i);
1129 if(pEntry->bAssociated)
1131 RT_TRACE( COMP_INIT, DBG_LOUD, ("odm_OFDMTXPathDiversity_92C: MACID=%d, RSSI_0=%d, RSSI_1=%d\n",
1132 pEntry->AssociatedMacId, pEntry->rssi_stat.RxRSSIPercentage[0], pEntry->rssi_stat.RxRSSIPercentage[1]));
1134 if(pEntry->rssi_stat.RxRSSIPercentage[0] > pEntry->rssi_stat.RxRSSIPercentage[1])
1136 pDM_PDTable->OFDMTXPath = pDM_PDTable->OFDMTXPath & ~(BIT(pEntry->AssociatedMacId));
1137 //pHalData->TXPath = pHalData->TXPath & ~(1<<(pEntry->AssociatedMacId));
1138 RT_TRACE( COMP_INIT, DBG_LOUD, ("odm_OFDMTXPathDiversity_92C: MACID=%d Select Path-0\n", pEntry->AssociatedMacId));
1139 if(pEntry->rssi_stat.RxRSSIPercentage[1] < MinRSSI)
1141 MinRSSI = pEntry->rssi_stat.RxRSSIPercentage[1];
1142 DefaultRespPath = 0;
1147 pDM_PDTable->OFDMTXPath = pDM_PDTable->OFDMTXPath | BIT(pEntry->AssociatedMacId);
1148 //pHalData->TXPath = pHalData->TXPath | (1 << (pEntry->AssociatedMacId));
1149 RT_TRACE( COMP_INIT, DBG_LOUD, ("odm_OFDMTXPathDiversity_92C: MACID=%d Select Path-1\n", pEntry->AssociatedMacId));
1150 if(pEntry->rssi_stat.RxRSSIPercentage[0] < MinRSSI)
1152 MinRSSI = pEntry->rssi_stat.RxRSSIPercentage[0];
1153 DefaultRespPath = 1;
1164 pDM_PDTable->OFDMDefaultRespPath = DefaultRespPath;
1169 odm_CCKTXPathDiversity_92C(
1173 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
1174 PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo);
1175 PRT_WLAN_STA pEntry;
1176 s4Byte MinRSSI = 0xFF;
1177 u1Byte i, DefaultRespPath = 0;
1178 // BOOLEAN bBModePathDiv = FALSE;
1179 pPD_T pDM_PDTable = &Adapter->DM_PDTable;
1182 if(pMgntInfo->mAssoc)
1184 if(pHalData->OFDM_Pkt_Cnt == 0)
1188 if(pDM_PDTable->RSSI_CCK_Path_cnt[i] > 1) //Because the first packet is discarded
1189 pDM_PDTable->RSSI_CCK_Path[i] = pDM_PDTable->RSSI_CCK_Path[i] / (pDM_PDTable->RSSI_CCK_Path_cnt[i]-1);
1191 pDM_PDTable->RSSI_CCK_Path[i] = 0;
1193 RT_TRACE( COMP_INIT, DBG_LOUD, ("odm_CCKTXPathDiversity_92C: pDM_PDTable->RSSI_CCK_Path[0]=%d, pDM_PDTable->RSSI_CCK_Path[1]=%d\n",
1194 pDM_PDTable->RSSI_CCK_Path[0], pDM_PDTable->RSSI_CCK_Path[1]));
1195 RT_TRACE( COMP_INIT, DBG_LOUD, ("odm_CCKTXPathDiversity_92C: pDM_PDTable->RSSI_CCK_Path_cnt[0]=%d, pDM_PDTable->RSSI_CCK_Path_cnt[1]=%d\n",
1196 pDM_PDTable->RSSI_CCK_Path_cnt[0], pDM_PDTable->RSSI_CCK_Path_cnt[1]));
1198 if(pDM_PDTable->RSSI_CCK_Path[0] > pDM_PDTable->RSSI_CCK_Path[1])
1200 pDM_PDTable->CCKTXPath = pDM_PDTable->CCKTXPath & (~BIT0);
1201 MinRSSI = pDM_PDTable->RSSI_CCK_Path[1];
1202 DefaultRespPath = 0;
1203 RT_TRACE( COMP_INIT, DBG_LOUD, ("odm_CCKTXPathDiversity_92C: Default port Select CCK Path-0\n"));
1205 else if(pDM_PDTable->RSSI_CCK_Path[0] < pDM_PDTable->RSSI_CCK_Path[1])
1207 pDM_PDTable->CCKTXPath = pDM_PDTable->CCKTXPath | BIT0;
1208 MinRSSI = pDM_PDTable->RSSI_CCK_Path[0];
1209 DefaultRespPath = 1;
1210 RT_TRACE( COMP_INIT, DBG_LOUD, ("odm_CCKTXPathDiversity_92C: Default port Select CCK Path-1\n"));
1214 if((pDM_PDTable->RSSI_CCK_Path[0] != 0) && (pDM_PDTable->RSSI_CCK_Path[0] < MinRSSI))
1216 pDM_PDTable->CCKTXPath = pDM_PDTable->CCKTXPath & (~BIT0);
1217 RT_TRACE( COMP_INIT, DBG_LOUD, ("odm_CCKTXPathDiversity_92C: Default port Select CCK Path-0\n"));
1218 MinRSSI = pDM_PDTable->RSSI_CCK_Path[1];
1219 DefaultRespPath = 0;
1223 RT_TRACE( COMP_INIT, DBG_LOUD, ("odm_CCKTXPathDiversity_92C: Default port unchange CCK Path\n"));
1227 else //Follow OFDM decision
1229 pDM_PDTable->CCKTXPath = (pDM_PDTable->CCKTXPath & (~BIT0)) | (pDM_PDTable->OFDMTXPath &BIT0);
1230 RT_TRACE( COMP_INIT, DBG_LOUD, ("odm_CCKTXPathDiversity_92C: Follow OFDM decision, Default port Select CCK Path-%d\n",
1231 pDM_PDTable->CCKTXPath &BIT0));
1235 for(i = 0; i < ODM_ASSOCIATE_ENTRY_NUM; i++)
1237 if(IsAPModeExist(Adapter) && GetFirstExtAdapter(Adapter) != NULL)
1238 pEntry = AsocEntry_EnumStation(GetFirstExtAdapter(Adapter), i);
1240 pEntry = AsocEntry_EnumStation(GetDefaultAdapter(Adapter), i);
1244 if(pEntry->bAssociated)
1246 if(pEntry->rssi_stat.OFDM_Pkt_Cnt == 0)
1251 if(pEntry->rssi_stat.RSSI_CCK_Path_cnt[j] > 1)
1252 pEntry->rssi_stat.RSSI_CCK_Path[j] = pEntry->rssi_stat.RSSI_CCK_Path[j] / (pEntry->rssi_stat.RSSI_CCK_Path_cnt[j]-1);
1254 pEntry->rssi_stat.RSSI_CCK_Path[j] = 0;
1256 RT_TRACE( COMP_INIT, DBG_LOUD, ("odm_CCKTXPathDiversity_92C: MACID=%d, RSSI_CCK0=%d, RSSI_CCK1=%d\n",
1257 pEntry->AssociatedMacId, pEntry->rssi_stat.RSSI_CCK_Path[0], pEntry->rssi_stat.RSSI_CCK_Path[1]));
1259 if(pEntry->rssi_stat.RSSI_CCK_Path[0] >pEntry->rssi_stat.RSSI_CCK_Path[1])
1261 pDM_PDTable->CCKTXPath = pDM_PDTable->CCKTXPath & ~(BIT(pEntry->AssociatedMacId));
1262 RT_TRACE( COMP_INIT, DBG_LOUD, ("odm_CCKTXPathDiversity_92C: MACID=%d Select CCK Path-0\n", pEntry->AssociatedMacId));
1263 if(pEntry->rssi_stat.RSSI_CCK_Path[1] < MinRSSI)
1265 MinRSSI = pEntry->rssi_stat.RSSI_CCK_Path[1];
1266 DefaultRespPath = 0;
1269 else if(pEntry->rssi_stat.RSSI_CCK_Path[0] <pEntry->rssi_stat.RSSI_CCK_Path[1])
1271 pDM_PDTable->CCKTXPath = pDM_PDTable->CCKTXPath | BIT(pEntry->AssociatedMacId);
1272 RT_TRACE( COMP_INIT, DBG_LOUD, ("odm_CCKTXPathDiversity_92C: MACID=%d Select CCK Path-1\n", pEntry->AssociatedMacId));
1273 if(pEntry->rssi_stat.RSSI_CCK_Path[0] < MinRSSI)
1275 MinRSSI = pEntry->rssi_stat.RSSI_CCK_Path[0];
1276 DefaultRespPath = 1;
1281 if((pEntry->rssi_stat.RSSI_CCK_Path[0] != 0) && (pEntry->rssi_stat.RSSI_CCK_Path[0] < MinRSSI))
1283 pDM_PDTable->CCKTXPath = pDM_PDTable->CCKTXPath & ~(BIT(pEntry->AssociatedMacId));
1284 MinRSSI = pEntry->rssi_stat.RSSI_CCK_Path[1];
1285 DefaultRespPath = 0;
1286 RT_TRACE( COMP_INIT, DBG_LOUD, ("odm_CCKTXPathDiversity_92C: MACID=%d Select CCK Path-0\n", pEntry->AssociatedMacId));
1290 RT_TRACE( COMP_INIT, DBG_LOUD, ("odm_CCKTXPathDiversity_92C: MACID=%d unchange CCK Path\n", pEntry->AssociatedMacId));
1294 else //Follow OFDM decision
1296 pDM_PDTable->CCKTXPath = (pDM_PDTable->CCKTXPath & (~(BIT(pEntry->AssociatedMacId)))) | (pDM_PDTable->OFDMTXPath & BIT(pEntry->AssociatedMacId));
1297 RT_TRACE( COMP_INIT, DBG_LOUD, ("odm_CCKTXPathDiversity_92C: Follow OFDM decision, MACID=%d Select CCK Path-%d\n",
1298 pEntry->AssociatedMacId, (pDM_PDTable->CCKTXPath & BIT(pEntry->AssociatedMacId))>>(pEntry->AssociatedMacId)));
1308 RT_TRACE( COMP_INIT, DBG_LOUD, ("odm_CCKTXPathDiversity_92C:MinRSSI=%d\n",MinRSSI));
1311 DefaultRespPath = pDM_PDTable->CCKDefaultRespPath;
1313 pDM_PDTable->CCKDefaultRespPath = DefaultRespPath;
1318 odm_ResetPathDiversity_92C(
1322 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
1323 pPD_T pDM_PDTable = &Adapter->DM_PDTable;
1324 PRT_WLAN_STA pEntry;
1327 pDM_PDTable->CCK_Pkt_Cnt = 0;
1328 pDM_PDTable->OFDM_Pkt_Cnt = 0;
1329 pHalData->CCK_Pkt_Cnt =0;
1330 pHalData->OFDM_Pkt_Cnt =0;
1332 if(pDM_PDTable->CCKPathDivEnable == TRUE)
1333 PHY_SetBBReg(Adapter, rCCK0_AFESetting , 0x0F000000, 0x01); //RX path = PathAB
1337 pDM_PDTable->RSSI_CCK_Path_cnt[i]=0;
1338 pDM_PDTable->RSSI_CCK_Path[i] = 0;
1340 for(i = 0; i < ODM_ASSOCIATE_ENTRY_NUM; i++)
1342 if(IsAPModeExist(Adapter) && GetFirstExtAdapter(Adapter) != NULL)
1343 pEntry = AsocEntry_EnumStation(GetFirstExtAdapter(Adapter), i);
1345 pEntry = AsocEntry_EnumStation(GetDefaultAdapter(Adapter), i);
1349 pEntry->rssi_stat.CCK_Pkt_Cnt = 0;
1350 pEntry->rssi_stat.OFDM_Pkt_Cnt = 0;
1353 pEntry->rssi_stat.RSSI_CCK_Path_cnt[j] = 0;
1354 pEntry->rssi_stat.RSSI_CCK_Path[j] = 0;
1367 odm_CCKTXPathDiversityCallback(
1372 PADAPTER Adapter = (PADAPTER)pTimer->Adapter;
1373 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
1374 PDM_ODM_T pDM_Odm = &pHalData->DM_OutSrc;
1376 PADAPTER Adapter = (PADAPTER)pTimer->Adapter;
1379 #if DEV_BUS_TYPE==RT_PCI_INTERFACE
1381 PlatformScheduleWorkItem(&pDM_Odm->CCKPathDiversityWorkitem);
1383 odm_PathDiversityAfterLink_92C(Adapter);
1386 PlatformScheduleWorkItem(&pDM_Odm->CCKPathDiversityWorkitem);
1393 odm_CCKTXPathDiversityWorkItemCallback(
1397 PADAPTER Adapter = (PADAPTER)pContext;
1399 odm_CCKTXPathDiversity_92C(Adapter);
1403 // 20100514 Luke/Joseph:
1404 // Callback function for 500ms antenna test trying.
1407 odm_PathDivChkAntSwitchCallback(
1411 PADAPTER Adapter = (PADAPTER)pTimer->Adapter;
1412 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
1413 PDM_ODM_T pDM_Odm = &pHalData->DM_OutSrc;
1415 #if DEV_BUS_TYPE==RT_PCI_INTERFACE
1418 PlatformScheduleWorkItem(&pDM_Odm->PathDivSwitchWorkitem);
1420 odm_PathDivChkAntSwitch(pDM_Odm);
1423 PlatformScheduleWorkItem(&pDM_Odm->PathDivSwitchWorkitem);
1426 //odm_SwAntDivChkAntSwitch(Adapter, SWAW_STEP_DETERMINE);
1432 odm_PathDivChkAntSwitchWorkitemCallback(
1436 PADAPTER pAdapter = (PADAPTER)pContext;
1437 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
1438 PDM_ODM_T pDM_Odm = &pHalData->DM_OutSrc;
1440 odm_PathDivChkAntSwitch(pDM_Odm);
1446 // 2011-06-22 Neil Chen & Gary Hsin
1447 // Refer to Jr.Luke's SW ANT DIV
1448 // 92D Path Diversity Main function
1449 // refer to 88C software antenna diversity
1452 odm_PathDivChkAntSwitch(
1458 PADAPTER Adapter = pDM_Odm->Adapter;
1459 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
1460 PMGNT_INFO pMgntInfo = &Adapter->MgntInfo;
1463 pSWAT_T pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
1464 s4Byte curRSSI=100, RSSI_A, RSSI_B;
1465 u1Byte nextAntenna=AUX_ANT;
1466 static u8Byte lastTxOkCnt=0, lastRxOkCnt=0;
1467 u8Byte curTxOkCnt, curRxOkCnt;
1468 static u8Byte TXByteCnt_A=0, TXByteCnt_B=0, RXByteCnt_A=0, RXByteCnt_B=0;
1469 u8Byte CurByteCnt=0, PreByteCnt=0;
1470 static u1Byte TrafficLoad = TRAFFIC_LOW;
1471 u1Byte Score_A=0, Score_B=0;
1474 static u1Byte pathdiv_para=0x0;
1475 static u1Byte switchfirsttime=0x00;
1476 // u1Byte regB33 = (u1Byte) PHY_QueryBBReg(Adapter, 0xB30,BIT27);
1477 u1Byte regB33 = (u1Byte)ODM_GetBBReg(pDM_Odm, PATHDIV_REG, BIT27);
1480 //u1Byte reg637 =0x0;
1481 static u1Byte fw_value=0x0;
1482 //u8Byte curTxOkCnt_tmp, curRxOkCnt_tmp;
1483 PADAPTER BuddyAdapter = Adapter->BuddyAdapter; // another adapter MAC
1484 // Path Diversity //Neil Chen--2011--06--22
1486 //u1Byte PathDiv_Trigger = (u1Byte) PHY_QueryBBReg(Adapter, 0xBA0,BIT31);
1487 u1Byte PathDiv_Trigger = (u1Byte) ODM_GetBBReg(pDM_Odm, PATHDIV_TRI,BIT31);
1488 u1Byte PathDiv_Enable = pHalData->bPathDiv_Enable;
1491 //DbgPrint("Path Div PG Value:%x \n",PathDiv_Enable);
1492 if((BuddyAdapter==NULL)||(!PathDiv_Enable)||(PathDiv_Trigger)||(pHalData->CurrentBandType == BAND_ON_2_4G))
1496 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD,("===================>odm_PathDivChkAntSwitch()\n"));
1498 // The first time to switch path excluding 2nd, 3rd, ....etc....
1499 if(switchfirsttime==0)
1503 pDM_SWAT_Table->CurAntenna = MAIN_ANT; // Default MAC0_5G-->Path A (current antenna)
1507 // Condition that does not need to use antenna diversity.
1508 if(pDM_Odm->SupportICType != ODM_RTL8192D)
1510 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("odm_PathDiversityMechanims(): No PathDiv Mechanism.\n"));
1514 // Radio off: Status reset to default and return.
1515 if(pHalData->eRFPowerState==eRfOff)
1517 //ODM_SwAntDivRestAfterLink(Adapter);
1522 // Handling step mismatch condition.
1523 // Peak step is not finished at last time. Recover the variable and check again.
1524 if( Step != pDM_SWAT_Table->try_flag )
1526 ODM_SwAntDivRestAfterLink(Adapter);
1529 if(pDM_SWAT_Table->try_flag == 0xff)
1531 // Select RSSI checking target
1532 if(pMgntInfo->mAssoc && !ACTING_AS_AP(Adapter))
1534 // Target: Infrastructure mode AP.
1535 pHalData->RSSI_target = NULL;
1536 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("odm_PathDivMechanism(): RSSI_target is DEF AP!\n"));
1541 PRT_WLAN_STA pEntry = NULL;
1542 PADAPTER pTargetAdapter = NULL;
1544 if( pMgntInfo->mIbss || ACTING_AS_AP(Adapter) )
1546 // Target: AP/IBSS peer.
1547 pTargetAdapter = Adapter;
1549 else if(IsAPModeExist(Adapter) && GetFirstExtAdapter(Adapter) != NULL)
1551 // Target: VWIFI peer.
1552 pTargetAdapter = GetFirstExtAdapter(Adapter);
1555 if(pTargetAdapter != NULL)
1557 for(index=0; index<ODM_ASSOCIATE_ENTRY_NUM; index++)
1559 pEntry = AsocEntry_EnumStation(pTargetAdapter, index);
1562 if(pEntry->bAssociated)
1570 ODM_PathDivRestAfterLink(pDM_Odm);
1571 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("odm_SwAntDivChkAntSwitch(): No Link.\n"));
1576 pHalData->RSSI_target = pEntry;
1577 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("odm_SwAntDivChkAntSwitch(): RSSI_target is PEER STA\n"));
1581 pHalData->RSSI_cnt_A = 0;
1582 pHalData->RSSI_cnt_B = 0;
1583 pDM_SWAT_Table->try_flag = 0;
1584 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("odm_SwAntDivChkAntSwitch(): Set try_flag to 0 prepare for peak!\n"));
1590 curTxOkCnt = Adapter->TxStats.NumTxBytesUnicast - lastTxOkCnt;
1591 curRxOkCnt = Adapter->RxStats.NumRxBytesUnicast - lastRxOkCnt;
1592 lastTxOkCnt = Adapter->TxStats.NumTxBytesUnicast;
1593 lastRxOkCnt = Adapter->RxStats.NumRxBytesUnicast;
1595 if(pDM_SWAT_Table->try_flag == 1) // Training State
1597 if(pDM_SWAT_Table->CurAntenna == MAIN_ANT)
1599 TXByteCnt_A += curTxOkCnt;
1600 RXByteCnt_A += curRxOkCnt;
1604 TXByteCnt_B += curTxOkCnt;
1605 RXByteCnt_B += curRxOkCnt;
1608 nextAntenna = (pDM_SWAT_Table->CurAntenna == MAIN_ANT)? AUX_ANT : MAIN_ANT;
1609 pDM_SWAT_Table->RSSI_Trying--;
1610 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH DIV=: RSSI_Trying = %d\n",pDM_SWAT_Table->RSSI_Trying));
1611 if(pDM_SWAT_Table->RSSI_Trying == 0)
1613 CurByteCnt = (pDM_SWAT_Table->CurAntenna == MAIN_ANT)? (TXByteCnt_A+RXByteCnt_A) : (TXByteCnt_B+RXByteCnt_B);
1614 PreByteCnt = (pDM_SWAT_Table->CurAntenna == MAIN_ANT)? (TXByteCnt_B+RXByteCnt_B) : (TXByteCnt_A+RXByteCnt_A);
1616 if(TrafficLoad == TRAFFIC_HIGH)
1618 //CurByteCnt = PlatformDivision64(CurByteCnt, 9);
1619 PreByteCnt =PreByteCnt*9;
1621 else if(TrafficLoad == TRAFFIC_LOW)
1623 //CurByteCnt = PlatformDivision64(CurByteCnt, 2);
1624 PreByteCnt =PreByteCnt*2;
1626 if(pHalData->RSSI_cnt_A > 0)
1627 RSSI_A = pHalData->RSSI_sum_A/pHalData->RSSI_cnt_A;
1630 if(pHalData->RSSI_cnt_B > 0)
1631 RSSI_B = pHalData->RSSI_sum_B/pHalData->RSSI_cnt_B;
1634 curRSSI = (pDM_SWAT_Table->CurAntenna == MAIN_ANT)? RSSI_A : RSSI_B;
1635 pDM_SWAT_Table->PreRSSI = (pDM_SWAT_Table->CurAntenna == MAIN_ANT)? RSSI_B : RSSI_A;
1636 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH DIV=: PreRSSI = %d, CurRSSI = %d\n",pDM_SWAT_Table->PreRSSI, curRSSI));
1637 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH DIV=: preAntenna= %s, curAntenna= %s \n",
1638 (pDM_SWAT_Table->PreAntenna == MAIN_ANT?"MAIN":"AUX"), (pDM_SWAT_Table->CurAntenna == MAIN_ANT?"MAIN":"AUX")));
1639 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH DIV=: RSSI_A= %d, RSSI_cnt_A = %d, RSSI_B= %d, RSSI_cnt_B = %d\n",
1640 RSSI_A, pHalData->RSSI_cnt_A, RSSI_B, pHalData->RSSI_cnt_B));
1647 if(pHalData->RSSI_cnt_A > 0)
1648 RSSI_A = pHalData->RSSI_sum_A/pHalData->RSSI_cnt_A;
1651 if(pHalData->RSSI_cnt_B > 0)
1652 RSSI_B = pHalData->RSSI_sum_B/pHalData->RSSI_cnt_B;
1655 curRSSI = (pDM_SWAT_Table->CurAntenna == MAIN_ANT)? RSSI_A : RSSI_B;
1656 pDM_SWAT_Table->PreRSSI = (pDM_SWAT_Table->PreAntenna == MAIN_ANT)? RSSI_A : RSSI_B;
1657 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH DIV=: PreRSSI = %d, CurRSSI = %d\n", pDM_SWAT_Table->PreRSSI, curRSSI));
1658 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH DIV=: preAntenna= %s, curAntenna= %s \n",
1659 (pDM_SWAT_Table->PreAntenna == MAIN_ANT?"MAIN":"AUX"), (pDM_SWAT_Table->CurAntenna == MAIN_ANT?"MAIN":"AUX")));
1661 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH DIV=: RSSI_A= %d, RSSI_cnt_A = %d, RSSI_B= %d, RSSI_cnt_B = %d\n",
1662 RSSI_A, pHalData->RSSI_cnt_A, RSSI_B, pHalData->RSSI_cnt_B));
1663 //RT_TRACE(COMP_INIT, DBG_LOUD, ("Ekul:curTxOkCnt = %d\n", curTxOkCnt));
1664 //RT_TRACE(COMP_INIT, DBG_LOUD, ("Ekul:curRxOkCnt = %d\n", curRxOkCnt));
1668 if((pDM_SWAT_Table->try_flag == 1)&&(pDM_SWAT_Table->RSSI_Trying == 0))
1671 if(pDM_SWAT_Table->TestMode == TP_MODE)
1673 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH=: TestMode = TP_MODE"));
1674 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH= TRY:CurByteCnt = %"i64fmt"d,", CurByteCnt));
1675 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH= TRY:PreByteCnt = %"i64fmt"d\n",PreByteCnt));
1676 if(CurByteCnt < PreByteCnt)
1678 if(pDM_SWAT_Table->CurAntenna == MAIN_ANT)
1679 pDM_SWAT_Table->SelectAntennaMap=pDM_SWAT_Table->SelectAntennaMap<<1;
1681 pDM_SWAT_Table->SelectAntennaMap=(pDM_SWAT_Table->SelectAntennaMap<<1)+1;
1685 if(pDM_SWAT_Table->CurAntenna == MAIN_ANT)
1686 pDM_SWAT_Table->SelectAntennaMap=(pDM_SWAT_Table->SelectAntennaMap<<1)+1;
1688 pDM_SWAT_Table->SelectAntennaMap=pDM_SWAT_Table->SelectAntennaMap<<1;
1690 for (i= 0; i<8; i++)
1692 if(((pDM_SWAT_Table->SelectAntennaMap>>i)&BIT0) == 1)
1697 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("SelectAntennaMap=%x\n ",pDM_SWAT_Table->SelectAntennaMap));
1698 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH=: Score_A=%d, Score_B=%d\n", Score_A, Score_B));
1700 if(pDM_SWAT_Table->CurAntenna == MAIN_ANT)
1702 nextAntenna = (Score_A >= Score_B)?MAIN_ANT:AUX_ANT;
1706 nextAntenna = (Score_B >= Score_A)?AUX_ANT:MAIN_ANT;
1708 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH=: nextAntenna=%s\n",(nextAntenna==MAIN_ANT)?"MAIN":"AUX"));
1709 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH=: preAntenna= %s, curAntenna= %s \n",
1710 (pDM_SWAT_Table->PreAntenna == MAIN_ANT?"MAIN":"AUX"), (pDM_SWAT_Table->CurAntenna == MAIN_ANT?"MAIN":"AUX")));
1712 if(nextAntenna != pDM_SWAT_Table->CurAntenna)
1714 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH=: Switch back to another antenna"));
1718 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH=: current anntena is good\n"));
1723 if(pDM_SWAT_Table->TestMode == RSSI_MODE)
1725 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH=: TestMode = RSSI_MODE"));
1726 pDM_SWAT_Table->SelectAntennaMap=0xAA;
1727 if(curRSSI < pDM_SWAT_Table->PreRSSI) //Current antenna is worse than previous antenna
1729 //RT_TRACE(COMP_INIT, DBG_LOUD, ("SWAS: Switch back to another antenna"));
1730 nextAntenna = (pDM_SWAT_Table->CurAntenna == MAIN_ANT)?AUX_ANT : MAIN_ANT;
1732 else // current anntena is good
1734 nextAntenna =pDM_SWAT_Table->CurAntenna;
1735 //RT_TRACE(COMP_INIT, DBG_LOUD, ("SWAS: current anntena is good\n"));
1739 pDM_SWAT_Table->try_flag = 0;
1740 pHalData->RSSI_sum_A = 0;
1741 pHalData->RSSI_cnt_A = 0;
1742 pHalData->RSSI_sum_B = 0;
1743 pHalData->RSSI_cnt_B = 0;
1752 else if(pDM_SWAT_Table->try_flag == 0)
1754 if(TrafficLoad == TRAFFIC_HIGH)
1756 if ((curTxOkCnt+curRxOkCnt) > 3750000)//if(PlatformDivision64(curTxOkCnt+curRxOkCnt, 2) > 1875000)
1757 TrafficLoad = TRAFFIC_HIGH;
1759 TrafficLoad = TRAFFIC_LOW;
1761 else if(TrafficLoad == TRAFFIC_LOW)
1763 if ((curTxOkCnt+curRxOkCnt) > 3750000)//if(PlatformDivision64(curTxOkCnt+curRxOkCnt, 2) > 1875000)
1764 TrafficLoad = TRAFFIC_HIGH;
1766 TrafficLoad = TRAFFIC_LOW;
1768 if(TrafficLoad == TRAFFIC_HIGH)
1769 pDM_SWAT_Table->bTriggerAntennaSwitch = 0;
1770 //RT_TRACE(COMP_INIT, DBG_LOUD, ("Normal:TrafficLoad = %llu\n", curTxOkCnt+curRxOkCnt));
1772 //Prepare To Try Antenna
1773 nextAntenna = (pDM_SWAT_Table->CurAntenna == MAIN_ANT)? AUX_ANT : MAIN_ANT;
1774 pDM_SWAT_Table->try_flag = 1;
1775 if((curRxOkCnt+curTxOkCnt) > 1000)
1777 #if DEV_BUS_TYPE==RT_PCI_INTERFACE
1778 pDM_SWAT_Table->RSSI_Trying = 4;
1780 pDM_SWAT_Table->RSSI_Trying = 2;
1782 pDM_SWAT_Table->TestMode = TP_MODE;
1786 pDM_SWAT_Table->RSSI_Trying = 2;
1787 pDM_SWAT_Table->TestMode = RSSI_MODE;
1791 //RT_TRACE(COMP_INIT, DBG_LOUD, ("SWAS: Normal State -> Begin Trying!\n"));
1792 pHalData->RSSI_sum_A = 0;
1793 pHalData->RSSI_cnt_A = 0;
1794 pHalData->RSSI_sum_B = 0;
1795 pHalData->RSSI_cnt_B = 0;
1796 } // end of try_flag=0
1799 //1 4.Change TRX antenna
1800 if(nextAntenna != pDM_SWAT_Table->CurAntenna)
1803 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH=: Change TX Antenna!\n "));
1804 //PHY_SetBBReg(Adapter, rFPGA0_XA_RFInterfaceOE, 0x300, nextAntenna); for 88C
1805 if(nextAntenna==MAIN_ANT)
1807 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH=: Next Antenna is RF PATH A\n "));
1808 pathdiv_para = 0x02; //02 to switchback to RF path A
1810 #if DEV_BUS_TYPE==RT_PCI_INTERFACE
1811 odm_PathDiversity_8192D(pDM_Odm, pathdiv_para);
1813 ODM_FillH2CCmd(pDM_Odm, ODM_H2C_PathDiv,1,(pu1Byte)(&fw_value));
1816 else if(nextAntenna==AUX_ANT)
1818 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH=: Next Antenna is RF PATH B\n "));
1819 if(switchfirsttime==0) // First Time To Enter Path Diversity
1821 switchfirsttime=0x01;
1822 pathdiv_para = 0x00;
1823 fw_value=0x00; // to backup RF Path A Releated Registers
1825 #if DEV_BUS_TYPE==RT_PCI_INTERFACE
1826 odm_PathDiversity_8192D(pDM_Odm, pathdiv_para);
1828 ODM_FillH2CCmd(pDM_Odm, ODM_H2C_PathDiv,1,(pu1Byte)(&fw_value));
1829 //for(u1Byte n=0; n<80,n++)
1833 odm_PathDiversity_8192D(pDM_Odm, pathdiv_para);
1835 fw_value=0x01; // to backup RF Path A Releated Registers
1836 ODM_FillH2CCmd(pDM_Odm, ODM_H2C_PathDiv,1,(pu1Byte)(&fw_value));
1838 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH=: FIRST TIME To DO PATH SWITCH!\n "));
1842 pathdiv_para = 0x01;
1844 #if DEV_BUS_TYPE==RT_PCI_INTERFACE
1845 odm_PathDiversity_8192D(pDM_Odm, pathdiv_para);
1847 ODM_FillH2CCmd(pDM_Odm, ODM_H2C_PathDiv,1,(pu1Byte)(&fw_value));
1851 // odm_PathDiversity_8192D(Adapter, pathdiv_para);
1854 //1 5.Reset Statistics
1855 pDM_SWAT_Table->PreAntenna = pDM_SWAT_Table->CurAntenna;
1856 pDM_SWAT_Table->CurAntenna = nextAntenna;
1857 pDM_SWAT_Table->PreRSSI = curRSSI;
1859 //1 6.Set next timer
1861 if(pDM_SWAT_Table->RSSI_Trying == 0)
1864 if(pDM_SWAT_Table->RSSI_Trying%2 == 0)
1866 if(pDM_SWAT_Table->TestMode == TP_MODE)
1868 if(TrafficLoad == TRAFFIC_HIGH)
1870 #if DEV_BUS_TYPE==RT_PCI_INTERFACE
1871 ODM_SetTimer( pDM_Odm, &pDM_Odm->PathDivSwitchTimer, 10 ); //ms
1872 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH=: Test another antenna for 10 ms\n"));
1874 ODM_SetTimer( pDM_Odm, &pDM_Odm->PathDivSwitchTimer, 20 ); //ms
1875 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH=: Test another antenna for 20 ms\n"));
1878 else if(TrafficLoad == TRAFFIC_LOW)
1880 ODM_SetTimer( pDM_Odm, &pDM_Odm->PathDivSwitchTimer, 50 ); //ms
1881 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH=: Test another antenna for 50 ms\n"));
1884 else // TestMode == RSSI_MODE
1886 ODM_SetTimer( pDM_Odm, &pDM_Odm->PathDivSwitchTimer, 500 ); //ms
1887 ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH=: Test another antenna for 500 ms\n"));
1892 if(pDM_SWAT_Table->TestMode == TP_MODE)
1894 if(TrafficLoad == TRAFFIC_HIGH)
1896 #if DEV_BUS_TYPE==RT_PCI_INTERFACE
1897 ODM_SetTimer( pDM_Odm, &pDM_Odm->PathDivSwitchTimer, 90 ); //ms
1898 //ODM_RT_TRACE(pDM_Odm,ODM_COMP_PATH_DIV, ODM_DBG_LOUD, ("=PATH=: Test another antenna for 90 ms\n"));
1900 ODM_SetTimer( pDM_Odm, &pDM_Odm->PathDivSwitchTimer, 180); //ms
1902 else if(TrafficLoad == TRAFFIC_LOW)
1903 ODM_SetTimer( pDM_Odm, &pDM_Odm->PathDivSwitchTimer, 100 ); //ms
1906 ODM_SetTimer( pDM_Odm, &pDM_Odm->PathDivSwitchTimer, 500 ); //ms
1913 ODM_CCKPathDiversityChkPerPktRssi(
1916 BOOLEAN bMatchBSSID,
1917 PRT_WLAN_STA pEntry,
1922 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
1923 BOOLEAN bCount = FALSE;
1924 pPD_T pDM_PDTable = &Adapter->DM_PDTable;
1925 //BOOLEAN isCCKrate = RX_HAL_IS_CCK_RATE_92C(pDesc);
1926 #if DEV_BUS_TYPE != RT_SDIO_INTERFACE
1927 BOOLEAN isCCKrate = RX_HAL_IS_CCK_RATE(Adapter, pDesc);
1928 #else //below code would be removed if we have verified SDIO
1929 BOOLEAN isCCKrate = IS_HARDWARE_TYPE_8188E(Adapter) ? RX_HAL_IS_CCK_RATE_88E(pDesc) : RX_HAL_IS_CCK_RATE_92C(pDesc);
1932 if ((pHalData->PathDivCfg != 1))
1935 if(pHalData->RSSI_target==NULL && bIsDefPort && bMatchBSSID)
1937 else if(pHalData->RSSI_target!=NULL && pEntry!=NULL && pHalData->RSSI_target==pEntry)
1940 if(bCount && isCCKrate)
1942 if(pDM_PDTable->TrainingState == 1 )
1946 if(pEntry->rssi_stat.RSSI_CCK_Path_cnt[0] != 0)
1947 pEntry->rssi_stat.RSSI_CCK_Path[0] += pRfd->Status.RxPWDBAll;
1948 pEntry->rssi_stat.RSSI_CCK_Path_cnt[0]++;
1952 if(pDM_PDTable->RSSI_CCK_Path_cnt[0] != 0)
1953 pDM_PDTable->RSSI_CCK_Path[0] += pRfd->Status.RxPWDBAll;
1954 pDM_PDTable->RSSI_CCK_Path_cnt[0]++;
1957 else if(pDM_PDTable->TrainingState == 2 )
1961 if(pEntry->rssi_stat.RSSI_CCK_Path_cnt[1] != 0)
1962 pEntry->rssi_stat.RSSI_CCK_Path[1] += pRfd->Status.RxPWDBAll;
1963 pEntry->rssi_stat.RSSI_CCK_Path_cnt[1]++;
1967 if(pDM_PDTable->RSSI_CCK_Path_cnt[1] != 0)
1968 pDM_PDTable->RSSI_CCK_Path[1] += pRfd->Status.RxPWDBAll;
1969 pDM_PDTable->RSSI_CCK_Path_cnt[1]++;
1978 //Neil Chen---2011--06--22
1979 //----92D Path Diversity----//
1981 //==================================
1983 //==================================
1985 // 20100514 Luke/Joseph:
1986 // Add new function for antenna diversity after link.
1987 // This is the main function of antenna diversity after link.
1988 // This function is called in HalDmWatchDog() and ODM_SwAntDivChkAntSwitchCallback().
1989 // HalDmWatchDog() calls this function with SWAW_STEP_PEAK to initialize the antenna test.
1990 // In SWAW_STEP_PEAK, another antenna and a 500ms timer will be set for testing.
1991 // After 500ms, ODM_SwAntDivChkAntSwitchCallback() calls this function to compare the signal just
1992 // listened on the air with the RSSI of original antenna.
1993 // It chooses the antenna with better RSSI.
1994 // There is also a aged policy for error trying. Each error trying will cost more 5 seconds waiting
1995 // penalty to get next try.
1999 // Add new function SwAntDivCheck8192C().
2000 // This is the main function of Antenna diversity function before link.
2001 // Mainly, it just retains last scan result and scan again.
2002 // After that, it compares the scan result to see which one gets better RSSI.
2003 // It selects antenna with better receiving power and returns better scan result.
2008 // 20100514 Luke/Joseph:
2009 // This function is used to gather the RSSI information for antenna testing.
2010 // It selects the RSSI of the peer STA that we want to know.
2013 ODM_PathDivChkPerPktRssi(
2016 BOOLEAN bMatchBSSID,
2017 PRT_WLAN_STA pEntry,
2021 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
2022 BOOLEAN bCount = FALSE;
2023 PDM_ODM_T pDM_Odm = &pHalData->DM_OutSrc;
2024 pSWAT_T pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
2026 if(pHalData->RSSI_target==NULL && bIsDefPort && bMatchBSSID)
2028 else if(pHalData->RSSI_target!=NULL && pEntry!=NULL && pHalData->RSSI_target==pEntry)
2033 //1 RSSI for SW Antenna Switch
2034 if(pDM_SWAT_Table->CurAntenna == MAIN_ANT)
2036 pHalData->RSSI_sum_A += pRfd->Status.RxPWDBAll;
2037 pHalData->RSSI_cnt_A++;
2041 pHalData->RSSI_sum_B += pRfd->Status.RxPWDBAll;
2042 pHalData->RSSI_cnt_B++;
2050 // 20100514 Luke/Joseph:
2051 // Add new function to reset antenna diversity state after link.
2054 ODM_PathDivRestAfterLink(
2055 IN PDM_ODM_T pDM_Odm
2058 PADAPTER Adapter=pDM_Odm->Adapter;
2059 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
2060 pSWAT_T pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
2062 pHalData->RSSI_cnt_A = 0;
2063 pHalData->RSSI_cnt_B = 0;
2064 pDM_SWAT_Table->try_flag = 0x0; // NOT 0xff
2065 pDM_SWAT_Table->RSSI_Trying = 0;
2066 pDM_SWAT_Table->SelectAntennaMap=0xAA;
2067 pDM_SWAT_Table->CurAntenna = MAIN_ANT;
2071 //==================================================
2073 //==================================================
2077 ODM_FillTXPathInTXDESC(
2078 IN PADAPTER Adapter,
2083 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
2085 pPD_T pDM_PDTable = &Adapter->DM_PDTable;
2087 //2011.09.05 Add by Luke Lee for path diversity
2088 if(pHalData->PathDivCfg == 1)
2090 TXPath = (pDM_PDTable->OFDMTXPath >> pTcb->macId) & BIT0;
2091 //RT_TRACE( COMP_INIT, DBG_LOUD, ("Fill TXDESC: macID=%d, TXPath=%d\n", pTcb->macId, TXPath));
2092 //SET_TX_DESC_TX_ANT_CCK(pDesc,TXPath);
2095 SET_TX_DESC_TX_ANTL_92C(pDesc,1);
2096 SET_TX_DESC_TX_ANT_HT_92C(pDesc,1);
2100 SET_TX_DESC_TX_ANTL_92C(pDesc,2);
2101 SET_TX_DESC_TX_ANT_HT_92C(pDesc,2);
2103 TXPath = (pDM_PDTable->CCKTXPath >> pTcb->macId) & BIT0;
2106 SET_TX_DESC_TX_ANT_CCK_92C(pDesc,1);
2110 SET_TX_DESC_TX_ANT_CCK_92C(pDesc,2);
2115 //Only for MP //Neil Chen--2012--0502--
2117 odm_PathDivInit_92D(
2118 IN PDM_ODM_T pDM_Odm)
2120 pPATHDIV_PARA pathIQK = &pDM_Odm->pathIQK;
2122 pathIQK->org_2g_RegC14=0x0;
2123 pathIQK->org_2g_RegC4C=0x0;
2124 pathIQK->org_2g_RegC80=0x0;
2125 pathIQK->org_2g_RegC94=0x0;
2126 pathIQK->org_2g_RegCA0=0x0;
2127 pathIQK->org_5g_RegC14=0x0;
2128 pathIQK->org_5g_RegCA0=0x0;
2129 pathIQK->org_5g_RegE30=0x0;
2130 pathIQK->swt_2g_RegC14=0x0;
2131 pathIQK->swt_2g_RegC4C=0x0;
2132 pathIQK->swt_2g_RegC80=0x0;
2133 pathIQK->swt_2g_RegC94=0x0;
2134 pathIQK->swt_2g_RegCA0=0x0;
2135 pathIQK->swt_5g_RegC14=0x0;
2136 pathIQK->swt_5g_RegCA0=0x0;
2137 pathIQK->swt_5g_RegE30=0x0;
2143 odm_SwAntDivSelectScanChnl(
2147 #if (RT_MEM_SIZE_LEVEL != RT_MEM_SIZE_MINIMUM)
2148 PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
2149 PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo);
2150 PDM_ODM_T pDM_Odm = &pHalData->DM_OutSrc;
2152 u1Byte j, ScanChannel = 0, ChannelNum = 0;
2153 PRT_CHANNEL_LIST pChannelList = GET_RT_CHANNEL_LIST(pMgntInfo);
2154 u1Byte EachChannelSTAs[MAX_SCAN_CHANNEL_NUM] = {0};
2156 if(pMgntInfo->tmpNumBssDesc == 0)
2159 for(i = 0; i < pMgntInfo->tmpNumBssDesc; i++)
2161 ChannelNum = pMgntInfo->tmpbssDesc[i].ChannelNumber;
2162 for(j = 0; j < pChannelList->ChannelLen; j++)
2164 if(pChannelList->ChnlListEntry[j].ChannelNum == ChannelNum)
2166 EachChannelSTAs[j]++;
2172 for(i = 0; i < MAX_SCAN_CHANNEL_NUM; i++)
2174 if(EachChannelSTAs[i] > EachChannelSTAs[ScanChannel])
2175 ScanChannel = (u1Byte)i;
2178 if(EachChannelSTAs[ScanChannel] == 0)
2180 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, DBG_LOUD, ("odm_SwAntDivSelectScanChnl(): Scan List is empty.\n"));
2184 ScanChannel = pChannelList->ChnlListEntry[ScanChannel].ChannelNum;
2188 ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, DBG_LOUD,
2189 ("odm_SwAntDivSelectScanChnl(): Channel (( %d )) is select as scan channel.\n", ScanChannel));
2199 odm_SwAntDivConstructScanChnl(
2200 IN PADAPTER Adapter,
2205 PMGNT_INFO pMgntInfo = &Adapter->MgntInfo;
2210 PRT_CHANNEL_LIST pChannelList = GET_RT_CHANNEL_LIST(pMgntInfo);
2212 // 20100519 Joseph: Original antenna scanned nothing.
2213 // Test antenna shall scan all channel with half period in this condition.
2215 RT_TRACE_F(COMP_SCAN, DBG_TRACE, (" RT_CHNL_LIST_ACTION_CONSTRUCT chnl %d \n", ScanChnl));
2217 RtActChannelList(Adapter, RT_CHNL_LIST_ACTION_CONSTRUCT_SCAN_LIST, NULL, NULL);
2218 for(i = 0; i < pChannelList->ChannelLen; i++)
2219 pChannelList->ChnlListEntry[i].ScanPeriod /= 2;
2223 // The using of this CustomizedScanRequest is a trick to rescan the two channels
2224 // under the NORMAL scanning process. It will not affect MGNT_INFO.CustomizedScanRequest.
2225 CUSTOMIZED_SCAN_REQUEST CustomScanReq;
2227 CustomScanReq.bEnabled = TRUE;
2228 CustomScanReq.Channels[0] = ScanChnl;
2229 CustomScanReq.Channels[1] = pMgntInfo->dot11CurrentChannelNumber;
2230 CustomScanReq.nChannels = 2;
2231 CustomScanReq.ScanType = SCAN_ACTIVE;
2232 CustomScanReq.Duration = DEFAULT_PASSIVE_SCAN_PERIOD;
2234 RT_TRACE_F(COMP_SCAN, DBG_TRACE, (" RT_CHNL_LIST_ACTION_CONSTRUCT chnl %d \n", ScanChnl));
2236 RtActChannelList(Adapter, RT_CHNL_LIST_ACTION_CONSTRUCT_SCAN_LIST, &CustomScanReq, NULL);
2243 odm_PathDivChkAntSwitchCallback(
2250 odm_PathDivChkAntSwitchWorkitemCallback(
2257 odm_CCKTXPathDiversityCallback(
2264 odm_CCKTXPathDiversityWorkItemCallback(
2270 odm_SwAntDivSelectScanChnl(
2277 odm_SwAntDivConstructScanChnl(
2278 IN PADAPTER Adapter,
2287 #endif // #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)