1 //============================================================
\r
4 // This file is for RTL8723B Co-exist mechanism
\r
7 // 2012/11/15 Cosa first check in.
\r
9 //============================================================
\r
11 //============================================================
\r
13 //============================================================
\r
14 #include "Mp_Precomp.h"
\r
15 #if(BT_30_SUPPORT == 1)
\r
16 //============================================================
\r
17 // Global variables, these are static variables
\r
18 //============================================================
\r
19 static COEX_DM_8723B_2ANT GLCoexDm8723b2Ant;
\r
20 static PCOEX_DM_8723B_2ANT pCoexDm=&GLCoexDm8723b2Ant;
\r
21 static COEX_STA_8723B_2ANT GLCoexSta8723b2Ant;
\r
22 static PCOEX_STA_8723B_2ANT pCoexSta=&GLCoexSta8723b2Ant;
\r
24 const char *const GLBtInfoSrc8723b2Ant[]={
\r
27 "BT Info[bt auto report]",
\r
30 u4Byte GLCoexVerDate8723b2Ant=20131113;
\r
31 u4Byte GLCoexVer8723b2Ant=0x3f;
\r
33 //============================================================
\r
34 // local function proto type if needed
\r
35 //============================================================
\r
36 //============================================================
\r
37 // local function start with halbtc8723b2ant_
\r
38 //============================================================
\r
40 halbtc8723b2ant_BtRssiState(
\r
47 u1Byte btRssiState=pCoexSta->preBtRssiState;
\r
49 btRssi = pCoexSta->btRssi;
\r
53 if( (pCoexSta->preBtRssiState == BTC_RSSI_STATE_LOW) ||
\r
54 (pCoexSta->preBtRssiState == BTC_RSSI_STATE_STAY_LOW))
\r
56 if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT))
\r
58 btRssiState = BTC_RSSI_STATE_HIGH;
\r
59 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to High\n"));
\r
63 btRssiState = BTC_RSSI_STATE_STAY_LOW;
\r
64 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at Low\n"));
\r
69 if(btRssi < rssiThresh)
\r
71 btRssiState = BTC_RSSI_STATE_LOW;
\r
72 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Low\n"));
\r
76 btRssiState = BTC_RSSI_STATE_STAY_HIGH;
\r
77 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at High\n"));
\r
81 else if(levelNum == 3)
\r
83 if(rssiThresh > rssiThresh1)
\r
85 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi thresh error!!\n"));
\r
86 return pCoexSta->preBtRssiState;
\r
89 if( (pCoexSta->preBtRssiState == BTC_RSSI_STATE_LOW) ||
\r
90 (pCoexSta->preBtRssiState == BTC_RSSI_STATE_STAY_LOW))
\r
92 if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT))
\r
94 btRssiState = BTC_RSSI_STATE_MEDIUM;
\r
95 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Medium\n"));
\r
99 btRssiState = BTC_RSSI_STATE_STAY_LOW;
\r
100 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at Low\n"));
\r
103 else if( (pCoexSta->preBtRssiState == BTC_RSSI_STATE_MEDIUM) ||
\r
104 (pCoexSta->preBtRssiState == BTC_RSSI_STATE_STAY_MEDIUM))
\r
106 if(btRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT))
\r
108 btRssiState = BTC_RSSI_STATE_HIGH;
\r
109 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to High\n"));
\r
111 else if(btRssi < rssiThresh)
\r
113 btRssiState = BTC_RSSI_STATE_LOW;
\r
114 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Low\n"));
\r
118 btRssiState = BTC_RSSI_STATE_STAY_MEDIUM;
\r
119 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at Medium\n"));
\r
124 if(btRssi < rssiThresh1)
\r
126 btRssiState = BTC_RSSI_STATE_MEDIUM;
\r
127 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Medium\n"));
\r
131 btRssiState = BTC_RSSI_STATE_STAY_HIGH;
\r
132 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at High\n"));
\r
137 pCoexSta->preBtRssiState = btRssiState;
\r
139 return btRssiState;
\r
143 halbtc8723b2ant_WifiRssiState(
\r
144 IN PBTC_COEXIST pBtCoexist,
\r
146 IN u1Byte levelNum,
\r
147 IN u1Byte rssiThresh,
\r
148 IN u1Byte rssiThresh1
\r
152 u1Byte wifiRssiState=pCoexSta->preWifiRssiState[index];
\r
154 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_S4_WIFI_RSSI, &wifiRssi);
\r
158 if( (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_LOW) ||
\r
159 (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_STAY_LOW))
\r
161 if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT))
\r
163 wifiRssiState = BTC_RSSI_STATE_HIGH;
\r
164 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to High\n"));
\r
168 wifiRssiState = BTC_RSSI_STATE_STAY_LOW;
\r
169 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Low\n"));
\r
174 if(wifiRssi < rssiThresh)
\r
176 wifiRssiState = BTC_RSSI_STATE_LOW;
\r
177 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Low\n"));
\r
181 wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;
\r
182 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at High\n"));
\r
186 else if(levelNum == 3)
\r
188 if(rssiThresh > rssiThresh1)
\r
190 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI thresh error!!\n"));
\r
191 return pCoexSta->preWifiRssiState[index];
\r
194 if( (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_LOW) ||
\r
195 (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_STAY_LOW))
\r
197 if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT))
\r
199 wifiRssiState = BTC_RSSI_STATE_MEDIUM;
\r
200 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Medium\n"));
\r
204 wifiRssiState = BTC_RSSI_STATE_STAY_LOW;
\r
205 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Low\n"));
\r
208 else if( (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_MEDIUM) ||
\r
209 (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_STAY_MEDIUM))
\r
211 if(wifiRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT))
\r
213 wifiRssiState = BTC_RSSI_STATE_HIGH;
\r
214 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to High\n"));
\r
216 else if(wifiRssi < rssiThresh)
\r
218 wifiRssiState = BTC_RSSI_STATE_LOW;
\r
219 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Low\n"));
\r
223 wifiRssiState = BTC_RSSI_STATE_STAY_MEDIUM;
\r
224 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Medium\n"));
\r
229 if(wifiRssi < rssiThresh1)
\r
231 wifiRssiState = BTC_RSSI_STATE_MEDIUM;
\r
232 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Medium\n"));
\r
236 wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;
\r
237 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at High\n"));
\r
242 pCoexSta->preWifiRssiState[index] = wifiRssiState;
\r
244 return wifiRssiState;
\r
248 halbtc8723b2ant_MonitorBtEnableDisable(
\r
249 IN PBTC_COEXIST pBtCoexist
\r
252 static BOOLEAN bPreBtDisabled=FALSE;
\r
253 static u4Byte btDisableCnt=0;
\r
254 BOOLEAN bBtActive=TRUE, bBtDisabled=FALSE;
\r
256 // This function check if bt is disabled
\r
258 if( pCoexSta->highPriorityTx == 0 &&
\r
259 pCoexSta->highPriorityRx == 0 &&
\r
260 pCoexSta->lowPriorityTx == 0 &&
\r
261 pCoexSta->lowPriorityRx == 0)
\r
265 if( pCoexSta->highPriorityTx == 0xffff &&
\r
266 pCoexSta->highPriorityRx == 0xffff &&
\r
267 pCoexSta->lowPriorityTx == 0xffff &&
\r
268 pCoexSta->lowPriorityRx == 0xffff)
\r
275 bBtDisabled = FALSE;
\r
276 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);
\r
277 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is enabled !!\n"));
\r
282 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], bt all counters=0, %d times!!\n",
\r
284 if(btDisableCnt >= 2)
\r
286 bBtDisabled = TRUE;
\r
287 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);
\r
288 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is disabled !!\n"));
\r
291 if(bPreBtDisabled != bBtDisabled)
\r
293 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is from %s to %s!!\n",
\r
294 (bPreBtDisabled ? "disabled":"enabled"),
\r
295 (bBtDisabled ? "disabled":"enabled")));
\r
296 bPreBtDisabled = bBtDisabled;
\r
307 halbtc8723b2ant_MonitorBtCtr(
\r
308 IN PBTC_COEXIST pBtCoexist
\r
311 u4Byte regHPTxRx, regLPTxRx, u4Tmp;
\r
312 u4Byte regHPTx=0, regHPRx=0, regLPTx=0, regLPRx=0;
\r
318 u4Tmp = pBtCoexist->fBtcRead4Byte(pBtCoexist, regHPTxRx);
\r
319 regHPTx = u4Tmp & bMaskLWord;
\r
320 regHPRx = (u4Tmp & bMaskHWord)>>16;
\r
322 u4Tmp = pBtCoexist->fBtcRead4Byte(pBtCoexist, regLPTxRx);
\r
323 regLPTx = u4Tmp & bMaskLWord;
\r
324 regLPRx = (u4Tmp & bMaskHWord)>>16;
\r
326 pCoexSta->highPriorityTx = regHPTx;
\r
327 pCoexSta->highPriorityRx = regHPRx;
\r
328 pCoexSta->lowPriorityTx = regLPTx;
\r
329 pCoexSta->lowPriorityRx = regLPRx;
\r
331 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], High Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n",
\r
332 regHPTxRx, regHPTx, regHPTx, regHPRx, regHPRx));
\r
333 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], Low Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n",
\r
334 regLPTxRx, regLPTx, regLPTx, regLPRx, regLPRx));
\r
337 pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x76e, 0xc);
\r
341 halbtc8723b2ant_QueryBtInfo(
\r
342 IN PBTC_COEXIST pBtCoexist
\r
345 u1Byte H2C_Parameter[1] ={0};
\r
347 pCoexSta->bC2hBtInfoReqSent = TRUE;
\r
349 H2C_Parameter[0] |= BIT0; // trigger
\r
351 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], Query Bt Info, FW write 0x61=0x%x\n",
\r
352 H2C_Parameter[0]));
\r
354 pBtCoexist->fBtcFillH2c(pBtCoexist, 0x61, 1, H2C_Parameter);
\r
358 halbtc8723b2ant_IsWifiStatusChanged(
\r
359 IN PBTC_COEXIST pBtCoexist
\r
362 static BOOLEAN bPreWifiBusy=FALSE, bPreUnder4way=FALSE, bPreBtHsOn=FALSE;
\r
363 BOOLEAN bWifiBusy=FALSE, bUnder4way=FALSE, bBtHsOn=FALSE;
\r
364 BOOLEAN bWifiConnected=FALSE;
\r
366 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);
\r
367 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);
\r
368 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);
\r
369 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_4_WAY_PROGRESS, &bUnder4way);
\r
373 if(bWifiBusy != bPreWifiBusy)
\r
375 bPreWifiBusy = bWifiBusy;
\r
378 if(bUnder4way != bPreUnder4way)
\r
380 bPreUnder4way = bUnder4way;
\r
383 if(bBtHsOn != bPreBtHsOn)
\r
385 bPreBtHsOn = bBtHsOn;
\r
394 halbtc8723b2ant_UpdateBtLinkInfo(
\r
395 IN PBTC_COEXIST pBtCoexist
\r
398 PBTC_STACK_INFO pStackInfo=&pBtCoexist->stackInfo;
\r
399 PBTC_BT_LINK_INFO pBtLinkInfo=&pBtCoexist->btLinkInfo;
\r
400 BOOLEAN bBtHsOn=FALSE;
\r
402 #if(BT_AUTO_REPORT_ONLY_8723B_2ANT == 1) // profile from bt patch
\r
403 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);
\r
405 pBtLinkInfo->bBtLinkExist = pCoexSta->bBtLinkExist;
\r
406 pBtLinkInfo->bScoExist = pCoexSta->bScoExist;
\r
407 pBtLinkInfo->bA2dpExist = pCoexSta->bA2dpExist;
\r
408 pBtLinkInfo->bPanExist = pCoexSta->bPanExist;
\r
409 pBtLinkInfo->bHidExist = pCoexSta->bHidExist;
\r
411 // work around for HS mode.
\r
414 pBtLinkInfo->bPanExist = TRUE;
\r
415 pBtLinkInfo->bBtLinkExist = TRUE;
\r
417 #else // profile from bt stack
\r
418 pBtLinkInfo->bBtLinkExist = pStackInfo->bBtLinkExist;
\r
419 pBtLinkInfo->bScoExist = pStackInfo->bScoExist;
\r
420 pBtLinkInfo->bA2dpExist = pStackInfo->bA2dpExist;
\r
421 pBtLinkInfo->bPanExist = pStackInfo->bPanExist;
\r
422 pBtLinkInfo->bHidExist = pStackInfo->bHidExist;
\r
424 //for win-8 stack HID report error
\r
425 if(!pStackInfo->bHidExist)
\r
426 pStackInfo->bHidExist = pCoexSta->bHidExist; //sync BTInfo with BT firmware and stack
\r
427 // when stack HID report error, here we use the info from bt fw.
\r
428 if(!pStackInfo->bBtLinkExist)
\r
429 pStackInfo->bBtLinkExist = pCoexSta->bBtLinkExist;
\r
431 // check if Sco only
\r
432 if( pBtLinkInfo->bScoExist &&
\r
433 !pBtLinkInfo->bA2dpExist &&
\r
434 !pBtLinkInfo->bPanExist &&
\r
435 !pBtLinkInfo->bHidExist )
\r
436 pBtLinkInfo->bScoOnly = TRUE;
\r
438 pBtLinkInfo->bScoOnly = FALSE;
\r
440 // check if A2dp only
\r
441 if( !pBtLinkInfo->bScoExist &&
\r
442 pBtLinkInfo->bA2dpExist &&
\r
443 !pBtLinkInfo->bPanExist &&
\r
444 !pBtLinkInfo->bHidExist )
\r
445 pBtLinkInfo->bA2dpOnly = TRUE;
\r
447 pBtLinkInfo->bA2dpOnly = FALSE;
\r
449 // check if Pan only
\r
450 if( !pBtLinkInfo->bScoExist &&
\r
451 !pBtLinkInfo->bA2dpExist &&
\r
452 pBtLinkInfo->bPanExist &&
\r
453 !pBtLinkInfo->bHidExist )
\r
454 pBtLinkInfo->bPanOnly = TRUE;
\r
456 pBtLinkInfo->bPanOnly = FALSE;
\r
458 // check if Hid only
\r
459 if( !pBtLinkInfo->bScoExist &&
\r
460 !pBtLinkInfo->bA2dpExist &&
\r
461 !pBtLinkInfo->bPanExist &&
\r
462 pBtLinkInfo->bHidExist )
\r
463 pBtLinkInfo->bHidOnly = TRUE;
\r
465 pBtLinkInfo->bHidOnly = FALSE;
\r
469 halbtc8723b2ant_ActionAlgorithm(
\r
470 IN PBTC_COEXIST pBtCoexist
\r
473 PBTC_BT_LINK_INFO pBtLinkInfo=&pBtCoexist->btLinkInfo;
\r
474 BOOLEAN bBtHsOn=FALSE;
\r
475 u1Byte algorithm=BT_8723B_2ANT_COEX_ALGO_UNDEFINED;
\r
476 u1Byte numOfDiffProfile=0;
\r
478 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);
\r
480 if(!pBtLinkInfo->bBtLinkExist)
\r
482 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], No BT link exists!!!\n"));
\r
486 if(pBtLinkInfo->bScoExist)
\r
487 numOfDiffProfile++;
\r
488 if(pBtLinkInfo->bHidExist)
\r
489 numOfDiffProfile++;
\r
490 if(pBtLinkInfo->bPanExist)
\r
491 numOfDiffProfile++;
\r
492 if(pBtLinkInfo->bA2dpExist)
\r
493 numOfDiffProfile++;
\r
495 if(numOfDiffProfile == 1)
\r
497 if(pBtLinkInfo->bScoExist)
\r
499 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO only\n"));
\r
500 algorithm = BT_8723B_2ANT_COEX_ALGO_SCO;
\r
504 if(pBtLinkInfo->bHidExist)
\r
506 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID only\n"));
\r
507 algorithm = BT_8723B_2ANT_COEX_ALGO_HID;
\r
509 else if(pBtLinkInfo->bA2dpExist)
\r
511 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP only\n"));
\r
512 algorithm = BT_8723B_2ANT_COEX_ALGO_A2DP;
\r
514 else if(pBtLinkInfo->bPanExist)
\r
518 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], PAN(HS) only\n"));
\r
519 algorithm = BT_8723B_2ANT_COEX_ALGO_PANHS;
\r
523 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], PAN(EDR) only\n"));
\r
524 algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR;
\r
529 else if(numOfDiffProfile == 2)
\r
531 if(pBtLinkInfo->bScoExist)
\r
533 if(pBtLinkInfo->bHidExist)
\r
535 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID\n"));
\r
536 algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
\r
538 else if(pBtLinkInfo->bA2dpExist)
\r
540 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + A2DP ==> SCO\n"));
\r
541 algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
\r
543 else if(pBtLinkInfo->bPanExist)
\r
547 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + PAN(HS)\n"));
\r
548 algorithm = BT_8723B_2ANT_COEX_ALGO_SCO;
\r
552 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + PAN(EDR)\n"));
\r
553 algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
\r
559 if( pBtLinkInfo->bHidExist &&
\r
560 pBtLinkInfo->bA2dpExist )
\r
563 if(pStackInfo->numOfHid >= 2)
\r
565 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID*2 + A2DP\n"));
\r
566 algorithm = BT_8723B_2ANT_COEX_ALGO_HID_A2DP_PANEDR;
\r
571 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP\n"));
\r
572 algorithm = BT_8723B_2ANT_COEX_ALGO_HID_A2DP;
\r
575 else if( pBtLinkInfo->bHidExist &&
\r
576 pBtLinkInfo->bPanExist )
\r
580 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + PAN(HS)\n"));
\r
581 algorithm = BT_8723B_2ANT_COEX_ALGO_HID;
\r
585 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + PAN(EDR)\n"));
\r
586 algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
\r
589 else if( pBtLinkInfo->bPanExist &&
\r
590 pBtLinkInfo->bA2dpExist )
\r
594 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP + PAN(HS)\n"));
\r
595 algorithm = BT_8723B_2ANT_COEX_ALGO_A2DP_PANHS;
\r
599 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP + PAN(EDR)\n"));
\r
600 algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_A2DP;
\r
605 else if(numOfDiffProfile == 3)
\r
607 if(pBtLinkInfo->bScoExist)
\r
609 if( pBtLinkInfo->bHidExist &&
\r
610 pBtLinkInfo->bA2dpExist )
\r
612 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + A2DP ==> HID\n"));
\r
613 algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
\r
615 else if( pBtLinkInfo->bHidExist &&
\r
616 pBtLinkInfo->bPanExist )
\r
620 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + PAN(HS)\n"));
\r
621 algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
\r
625 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + PAN(EDR)\n"));
\r
626 algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
\r
629 else if( pBtLinkInfo->bPanExist &&
\r
630 pBtLinkInfo->bA2dpExist )
\r
634 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + A2DP + PAN(HS)\n"));
\r
635 algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
\r
639 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + A2DP + PAN(EDR) ==> HID\n"));
\r
640 algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
\r
646 if( pBtLinkInfo->bHidExist &&
\r
647 pBtLinkInfo->bPanExist &&
\r
648 pBtLinkInfo->bA2dpExist )
\r
652 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP + PAN(HS)\n"));
\r
653 algorithm = BT_8723B_2ANT_COEX_ALGO_HID_A2DP;
\r
657 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP + PAN(EDR)\n"));
\r
658 algorithm = BT_8723B_2ANT_COEX_ALGO_HID_A2DP_PANEDR;
\r
663 else if(numOfDiffProfile >= 3)
\r
665 if(pBtLinkInfo->bScoExist)
\r
667 if( pBtLinkInfo->bHidExist &&
\r
668 pBtLinkInfo->bPanExist &&
\r
669 pBtLinkInfo->bA2dpExist )
\r
673 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Error!!! SCO + HID + A2DP + PAN(HS)\n"));
\r
678 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + A2DP + PAN(EDR)==>PAN(EDR)+HID\n"));
\r
679 algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
\r
689 halbtc8723b2ant_NeedToDecBtPwr(
\r
690 IN PBTC_COEXIST pBtCoexist
\r
693 BOOLEAN bRet=FALSE;
\r
694 BOOLEAN bBtHsOn=FALSE, bWifiConnected=FALSE;
\r
696 u1Byte btRssiState;
\r
698 if(!pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn))
\r
700 if(!pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected))
\r
702 if(!pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_S4_HS_RSSI, &btHsRssi))
\r
705 btRssiState = halbtc8723b2ant_BtRssiState(2, 29, 0);
\r
713 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], Need to decrease bt power for HS mode!!\n"));
\r
719 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||
\r
720 (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
723 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], Need to decrease bt power for Wifi is connected!!\n"));
\r
733 halbtc8723b2ant_SetFwDacSwingLevel(
\r
734 IN PBTC_COEXIST pBtCoexist,
\r
735 IN u1Byte dacSwingLvl
\r
738 u1Byte H2C_Parameter[1] ={0};
\r
740 // There are several type of dacswing
\r
741 // 0x18/ 0x10/ 0xc/ 0x8/ 0x4/ 0x6
\r
742 H2C_Parameter[0] = dacSwingLvl;
\r
744 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], Set Dac Swing Level=0x%x\n", dacSwingLvl));
\r
745 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], FW write 0x64=0x%x\n", H2C_Parameter[0]));
\r
747 pBtCoexist->fBtcFillH2c(pBtCoexist, 0x64, 1, H2C_Parameter);
\r
751 halbtc8723b2ant_SetFwDecBtPwr(
\r
752 IN PBTC_COEXIST pBtCoexist,
\r
753 IN BOOLEAN bDecBtPwr
\r
756 u1Byte H2C_Parameter[1] ={0};
\r
758 H2C_Parameter[0] = 0;
\r
762 H2C_Parameter[0] |= BIT1;
\r
765 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], decrease Bt Power : %s, FW write 0x62=0x%x\n",
\r
766 (bDecBtPwr? "Yes!!":"No!!"), H2C_Parameter[0]));
\r
768 pBtCoexist->fBtcFillH2c(pBtCoexist, 0x62, 1, H2C_Parameter);
\r
772 halbtc8723b2ant_DecBtPwr(
\r
773 IN PBTC_COEXIST pBtCoexist,
\r
774 IN BOOLEAN bForceExec,
\r
775 IN BOOLEAN bDecBtPwr
\r
778 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s Dec BT power = %s\n",
\r
779 (bForceExec? "force to":""), ((bDecBtPwr)? "ON":"OFF")));
\r
780 pCoexDm->bCurDecBtPwr = bDecBtPwr;
\r
784 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreDecBtPwr=%d, bCurDecBtPwr=%d\n",
\r
785 pCoexDm->bPreDecBtPwr, pCoexDm->bCurDecBtPwr));
\r
787 if(pCoexDm->bPreDecBtPwr == pCoexDm->bCurDecBtPwr)
\r
790 halbtc8723b2ant_SetFwDecBtPwr(pBtCoexist, pCoexDm->bCurDecBtPwr);
\r
792 pCoexDm->bPreDecBtPwr = pCoexDm->bCurDecBtPwr;
\r
796 halbtc8723b2ant_SetBtAutoReport(
\r
797 IN PBTC_COEXIST pBtCoexist,
\r
798 IN BOOLEAN bEnableAutoReport
\r
801 u1Byte H2C_Parameter[1] ={0};
\r
803 H2C_Parameter[0] = 0;
\r
805 if(bEnableAutoReport)
\r
807 H2C_Parameter[0] |= BIT0;
\r
810 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], BT FW auto report : %s, FW write 0x68=0x%x\n",
\r
811 (bEnableAutoReport? "Enabled!!":"Disabled!!"), H2C_Parameter[0]));
\r
813 pBtCoexist->fBtcFillH2c(pBtCoexist, 0x68, 1, H2C_Parameter);
\r
817 halbtc8723b2ant_BtAutoReport(
\r
818 IN PBTC_COEXIST pBtCoexist,
\r
819 IN BOOLEAN bForceExec,
\r
820 IN BOOLEAN bEnableAutoReport
\r
823 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s BT Auto report = %s\n",
\r
824 (bForceExec? "force to":""), ((bEnableAutoReport)? "Enabled":"Disabled")));
\r
825 pCoexDm->bCurBtAutoReport = bEnableAutoReport;
\r
829 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreBtAutoReport=%d, bCurBtAutoReport=%d\n",
\r
830 pCoexDm->bPreBtAutoReport, pCoexDm->bCurBtAutoReport));
\r
832 if(pCoexDm->bPreBtAutoReport == pCoexDm->bCurBtAutoReport)
\r
835 halbtc8723b2ant_SetBtAutoReport(pBtCoexist, pCoexDm->bCurBtAutoReport);
\r
837 pCoexDm->bPreBtAutoReport = pCoexDm->bCurBtAutoReport;
\r
841 halbtc8723b2ant_FwDacSwingLvl(
\r
842 IN PBTC_COEXIST pBtCoexist,
\r
843 IN BOOLEAN bForceExec,
\r
844 IN u1Byte fwDacSwingLvl
\r
847 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s set FW Dac Swing level = %d\n",
\r
848 (bForceExec? "force to":""), fwDacSwingLvl));
\r
849 pCoexDm->curFwDacSwingLvl = fwDacSwingLvl;
\r
853 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], preFwDacSwingLvl=%d, curFwDacSwingLvl=%d\n",
\r
854 pCoexDm->preFwDacSwingLvl, pCoexDm->curFwDacSwingLvl));
\r
856 if(pCoexDm->preFwDacSwingLvl == pCoexDm->curFwDacSwingLvl)
\r
860 halbtc8723b2ant_SetFwDacSwingLevel(pBtCoexist, pCoexDm->curFwDacSwingLvl);
\r
862 pCoexDm->preFwDacSwingLvl = pCoexDm->curFwDacSwingLvl;
\r
866 halbtc8723b2ant_SetSwRfRxLpfCorner(
\r
867 IN PBTC_COEXIST pBtCoexist,
\r
868 IN BOOLEAN bRxRfShrinkOn
\r
873 //Shrink RF Rx LPF corner
\r
874 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Shrink RF Rx LPF corner!!\n"));
\r
875 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, 0xffffc);
\r
879 //Resume RF Rx LPF corner
\r
880 // After initialized, we can use pCoexDm->btRf0x1eBackup
\r
881 if(pBtCoexist->bInitilized)
\r
883 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Resume RF Rx LPF corner!!\n"));
\r
884 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, pCoexDm->btRf0x1eBackup);
\r
890 halbtc8723b2ant_RfShrink(
\r
891 IN PBTC_COEXIST pBtCoexist,
\r
892 IN BOOLEAN bForceExec,
\r
893 IN BOOLEAN bRxRfShrinkOn
\r
896 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn Rx RF Shrink = %s\n",
\r
897 (bForceExec? "force to":""), ((bRxRfShrinkOn)? "ON":"OFF")));
\r
898 pCoexDm->bCurRfRxLpfShrink = bRxRfShrinkOn;
\r
902 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreRfRxLpfShrink=%d, bCurRfRxLpfShrink=%d\n",
\r
903 pCoexDm->bPreRfRxLpfShrink, pCoexDm->bCurRfRxLpfShrink));
\r
905 if(pCoexDm->bPreRfRxLpfShrink == pCoexDm->bCurRfRxLpfShrink)
\r
908 halbtc8723b2ant_SetSwRfRxLpfCorner(pBtCoexist, pCoexDm->bCurRfRxLpfShrink);
\r
910 pCoexDm->bPreRfRxLpfShrink = pCoexDm->bCurRfRxLpfShrink;
\r
914 halbtc8723b2ant_SetSwPenaltyTxRateAdaptive(
\r
915 IN PBTC_COEXIST pBtCoexist,
\r
916 IN BOOLEAN bLowPenaltyRa
\r
919 u1Byte H2C_Parameter[6] ={0};
\r
921 H2C_Parameter[0] = 0x6; // opCode, 0x6= Retry_Penalty
\r
925 H2C_Parameter[1] |= BIT0;
\r
926 H2C_Parameter[2] = 0x00; //normal rate except MCS7/6/5, OFDM54/48/36
\r
927 H2C_Parameter[3] = 0xf7; //MCS7 or OFDM54
\r
928 H2C_Parameter[4] = 0xf8; //MCS6 or OFDM48
\r
929 H2C_Parameter[5] = 0xf9; //MCS5 or OFDM36
\r
932 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], set WiFi Low-Penalty Retry: %s",
\r
933 (bLowPenaltyRa? "ON!!":"OFF!!")) );
\r
935 pBtCoexist->fBtcFillH2c(pBtCoexist, 0x69, 6, H2C_Parameter);
\r
939 halbtc8723b2ant_LowPenaltyRa(
\r
940 IN PBTC_COEXIST pBtCoexist,
\r
941 IN BOOLEAN bForceExec,
\r
942 IN BOOLEAN bLowPenaltyRa
\r
946 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn LowPenaltyRA = %s\n",
\r
947 (bForceExec? "force to":""), ((bLowPenaltyRa)? "ON":"OFF")));
\r
948 pCoexDm->bCurLowPenaltyRa = bLowPenaltyRa;
\r
952 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreLowPenaltyRa=%d, bCurLowPenaltyRa=%d\n",
\r
953 pCoexDm->bPreLowPenaltyRa, pCoexDm->bCurLowPenaltyRa));
\r
955 if(pCoexDm->bPreLowPenaltyRa == pCoexDm->bCurLowPenaltyRa)
\r
958 halbtc8723b2ant_SetSwPenaltyTxRateAdaptive(pBtCoexist, pCoexDm->bCurLowPenaltyRa);
\r
960 pCoexDm->bPreLowPenaltyRa = pCoexDm->bCurLowPenaltyRa;
\r
964 halbtc8723b2ant_SetDacSwingReg(
\r
965 IN PBTC_COEXIST pBtCoexist,
\r
969 u1Byte val=(u1Byte)level;
\r
971 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Write SwDacSwing = 0x%x\n", level));
\r
972 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x883, 0x3e, val);
\r
976 halbtc8723b2ant_SetSwFullTimeDacSwing(
\r
977 IN PBTC_COEXIST pBtCoexist,
\r
978 IN BOOLEAN bSwDacSwingOn,
\r
979 IN u4Byte swDacSwingLvl
\r
984 halbtc8723b2ant_SetDacSwingReg(pBtCoexist, swDacSwingLvl);
\r
988 halbtc8723b2ant_SetDacSwingReg(pBtCoexist, 0x18);
\r
994 halbtc8723b2ant_DacSwing(
\r
995 IN PBTC_COEXIST pBtCoexist,
\r
996 IN BOOLEAN bForceExec,
\r
997 IN BOOLEAN bDacSwingOn,
\r
998 IN u4Byte dacSwingLvl
\r
1001 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn DacSwing=%s, dacSwingLvl=0x%x\n",
\r
1002 (bForceExec? "force to":""), ((bDacSwingOn)? "ON":"OFF"), dacSwingLvl));
\r
1003 pCoexDm->bCurDacSwingOn = bDacSwingOn;
\r
1004 pCoexDm->curDacSwingLvl = dacSwingLvl;
\r
1008 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreDacSwingOn=%d, preDacSwingLvl=0x%x, bCurDacSwingOn=%d, curDacSwingLvl=0x%x\n",
\r
1009 pCoexDm->bPreDacSwingOn, pCoexDm->preDacSwingLvl,
\r
1010 pCoexDm->bCurDacSwingOn, pCoexDm->curDacSwingLvl));
\r
1012 if( (pCoexDm->bPreDacSwingOn == pCoexDm->bCurDacSwingOn) &&
\r
1013 (pCoexDm->preDacSwingLvl == pCoexDm->curDacSwingLvl) )
\r
1017 halbtc8723b2ant_SetSwFullTimeDacSwing(pBtCoexist, bDacSwingOn, dacSwingLvl);
\r
1019 pCoexDm->bPreDacSwingOn = pCoexDm->bCurDacSwingOn;
\r
1020 pCoexDm->preDacSwingLvl = pCoexDm->curDacSwingLvl;
\r
1024 halbtc8723b2ant_SetAdcBackOff(
\r
1025 IN PBTC_COEXIST pBtCoexist,
\r
1026 IN BOOLEAN bAdcBackOff
\r
1031 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], BB BackOff Level On!\n"));
\r
1032 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xc05, 0x30, 0x3);
\r
1036 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], BB BackOff Level Off!\n"));
\r
1037 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xc05, 0x30, 0x1);
\r
1042 halbtc8723b2ant_AdcBackOff(
\r
1043 IN PBTC_COEXIST pBtCoexist,
\r
1044 IN BOOLEAN bForceExec,
\r
1045 IN BOOLEAN bAdcBackOff
\r
1048 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn AdcBackOff = %s\n",
\r
1049 (bForceExec? "force to":""), ((bAdcBackOff)? "ON":"OFF")));
\r
1050 pCoexDm->bCurAdcBackOff = bAdcBackOff;
\r
1054 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreAdcBackOff=%d, bCurAdcBackOff=%d\n",
\r
1055 pCoexDm->bPreAdcBackOff, pCoexDm->bCurAdcBackOff));
\r
1057 if(pCoexDm->bPreAdcBackOff == pCoexDm->bCurAdcBackOff)
\r
1060 halbtc8723b2ant_SetAdcBackOff(pBtCoexist, pCoexDm->bCurAdcBackOff);
\r
1062 pCoexDm->bPreAdcBackOff = pCoexDm->bCurAdcBackOff;
\r
1066 halbtc8723b2ant_SetAgcTable(
\r
1067 IN PBTC_COEXIST pBtCoexist,
\r
1068 IN BOOLEAN bAgcTableEn
\r
1071 u1Byte rssiAdjustVal=0;
\r
1073 //=================BB AGC Gain Table
\r
1076 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], BB Agc Table On!\n"));
\r
1077 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x6e1A0001);
\r
1078 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x6d1B0001);
\r
1079 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x6c1C0001);
\r
1080 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x6b1D0001);
\r
1081 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x6a1E0001);
\r
1082 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x691F0001);
\r
1083 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x68200001);
\r
1087 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], BB Agc Table Off!\n"));
\r
1088 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xaa1A0001);
\r
1089 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xa91B0001);
\r
1090 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xa81C0001);
\r
1091 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xa71D0001);
\r
1092 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xa61E0001);
\r
1093 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xa51F0001);
\r
1094 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xa4200001);
\r
1098 //=================RF Gain
\r
1099 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xef, 0xfffff, 0x02000);
\r
1102 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Agc Table On!\n"));
\r
1103 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x38fff);
\r
1104 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x38ffe);
\r
1108 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Agc Table Off!\n"));
\r
1109 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x380c3);
\r
1110 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x28ce6);
\r
1112 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xef, 0xfffff, 0x0);
\r
1114 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xed, 0xfffff, 0x1);
\r
1117 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Agc Table On!\n"));
\r
1118 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x40, 0xfffff, 0x38fff);
\r
1119 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x40, 0xfffff, 0x38ffe);
\r
1123 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Agc Table Off!\n"));
\r
1124 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x40, 0xfffff, 0x380c3);
\r
1125 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x40, 0xfffff, 0x28ce6);
\r
1127 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xed, 0xfffff, 0x0);
\r
1129 // set rssiAdjustVal for wifi module.
\r
1132 rssiAdjustVal = 8;
\r
1134 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_U1_RSSI_ADJ_VAL_FOR_AGC_TABLE_ON, &rssiAdjustVal);
\r
1138 halbtc8723b2ant_AgcTable(
\r
1139 IN PBTC_COEXIST pBtCoexist,
\r
1140 IN BOOLEAN bForceExec,
\r
1141 IN BOOLEAN bAgcTableEn
\r
1144 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s %s Agc Table\n",
\r
1145 (bForceExec? "force to":""), ((bAgcTableEn)? "Enable":"Disable")));
\r
1146 pCoexDm->bCurAgcTableEn = bAgcTableEn;
\r
1150 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreAgcTableEn=%d, bCurAgcTableEn=%d\n",
\r
1151 pCoexDm->bPreAgcTableEn, pCoexDm->bCurAgcTableEn));
\r
1153 if(pCoexDm->bPreAgcTableEn == pCoexDm->bCurAgcTableEn)
\r
1156 halbtc8723b2ant_SetAgcTable(pBtCoexist, bAgcTableEn);
\r
1158 pCoexDm->bPreAgcTableEn = pCoexDm->bCurAgcTableEn;
\r
1162 halbtc8723b2ant_SetCoexTable(
\r
1163 IN PBTC_COEXIST pBtCoexist,
\r
1164 IN u4Byte val0x6c0,
\r
1165 IN u4Byte val0x6c4,
\r
1166 IN u4Byte val0x6c8,
\r
1167 IN u1Byte val0x6cc
\r
1170 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c0=0x%x\n", val0x6c0));
\r
1171 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c0, val0x6c0);
\r
1173 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c4=0x%x\n", val0x6c4));
\r
1174 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c4, val0x6c4);
\r
1176 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c8=0x%x\n", val0x6c8));
\r
1177 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c8, val0x6c8);
\r
1179 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6cc=0x%x\n", val0x6cc));
\r
1180 pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cc, val0x6cc);
\r
1184 halbtc8723b2ant_CoexTable(
\r
1185 IN PBTC_COEXIST pBtCoexist,
\r
1186 IN BOOLEAN bForceExec,
\r
1187 IN u4Byte val0x6c0,
\r
1188 IN u4Byte val0x6c4,
\r
1189 IN u4Byte val0x6c8,
\r
1190 IN u1Byte val0x6cc
\r
1193 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s write Coex Table 0x6c0=0x%x, 0x6c4=0x%x, 0x6c8=0x%x, 0x6cc=0x%x\n",
\r
1194 (bForceExec? "force to":""), val0x6c0, val0x6c4, val0x6c8, val0x6cc));
\r
1195 pCoexDm->curVal0x6c0 = val0x6c0;
\r
1196 pCoexDm->curVal0x6c4 = val0x6c4;
\r
1197 pCoexDm->curVal0x6c8 = val0x6c8;
\r
1198 pCoexDm->curVal0x6cc = val0x6cc;
\r
1202 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], preVal0x6c0=0x%x, preVal0x6c4=0x%x, preVal0x6c8=0x%x, preVal0x6cc=0x%x !!\n",
\r
1203 pCoexDm->preVal0x6c0, pCoexDm->preVal0x6c4, pCoexDm->preVal0x6c8, pCoexDm->preVal0x6cc));
\r
1204 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], curVal0x6c0=0x%x, curVal0x6c4=0x%x, curVal0x6c8=0x%x, curVal0x6cc=0x%x !!\n",
\r
1205 pCoexDm->curVal0x6c0, pCoexDm->curVal0x6c4, pCoexDm->curVal0x6c8, pCoexDm->curVal0x6cc));
\r
1207 if( (pCoexDm->preVal0x6c0 == pCoexDm->curVal0x6c0) &&
\r
1208 (pCoexDm->preVal0x6c4 == pCoexDm->curVal0x6c4) &&
\r
1209 (pCoexDm->preVal0x6c8 == pCoexDm->curVal0x6c8) &&
\r
1210 (pCoexDm->preVal0x6cc == pCoexDm->curVal0x6cc) )
\r
1213 halbtc8723b2ant_SetCoexTable(pBtCoexist, val0x6c0, val0x6c4, val0x6c8, val0x6cc);
\r
1215 pCoexDm->preVal0x6c0 = pCoexDm->curVal0x6c0;
\r
1216 pCoexDm->preVal0x6c4 = pCoexDm->curVal0x6c4;
\r
1217 pCoexDm->preVal0x6c8 = pCoexDm->curVal0x6c8;
\r
1218 pCoexDm->preVal0x6cc = pCoexDm->curVal0x6cc;
\r
1222 halbtc8723b2ant_CoexTableWithType(
\r
1223 IN PBTC_COEXIST pBtCoexist,
\r
1224 IN BOOLEAN bForceExec,
\r
1231 halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x55555555, 0x55555555, 0xffff, 0x3);
\r
1234 halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x55555555, 0x5afa5afa, 0xffff, 0x3);
\r
1237 halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x5a5a5a5a, 0x5a5a5a5a, 0xffff, 0x3);
\r
1240 halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0xaaaaaaaa, 0xaaaaaaaa, 0xffff, 0x3);
\r
1243 halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0xffffffff, 0xffffffff, 0xffff, 0x3);
\r
1246 halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x5fff5fff, 0x5fff5fff, 0xffff, 0x3);
\r
1249 halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x55ff55ff, 0x5a5a5a5a, 0xffff, 0x3);
\r
1252 halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x55ff55ff, 0x5afa5afa, 0xffff, 0x3);
\r
1255 halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x5aea5aea, 0x5aea5aea, 0xffff, 0x3);
\r
1258 halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x55ff55ff, 0x5aea5aea, 0xffff, 0x3);
\r
1261 halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x55ff55ff, 0x5aff5aff, 0xffff, 0x3);
\r
1264 halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x55ff55ff, 0x5a5f5a5f, 0xffff, 0x3);
\r
1267 halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x55ff55ff, 0x5f5f5f5f, 0xffff, 0x3);
\r
1275 halbtc8723b2ant_SetFwIgnoreWlanAct(
\r
1276 IN PBTC_COEXIST pBtCoexist,
\r
1277 IN BOOLEAN bEnable
\r
1280 u1Byte H2C_Parameter[1] ={0};
\r
1284 H2C_Parameter[0] |= BIT0; // function enable
\r
1287 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], set FW for BT Ignore Wlan_Act, FW write 0x63=0x%x\n",
\r
1288 H2C_Parameter[0]));
\r
1290 pBtCoexist->fBtcFillH2c(pBtCoexist, 0x63, 1, H2C_Parameter);
\r
1294 halbtc8723b2ant_IgnoreWlanAct(
\r
1295 IN PBTC_COEXIST pBtCoexist,
\r
1296 IN BOOLEAN bForceExec,
\r
1297 IN BOOLEAN bEnable
\r
1300 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s turn Ignore WlanAct %s\n",
\r
1301 (bForceExec? "force to":""), (bEnable? "ON":"OFF")));
\r
1302 pCoexDm->bCurIgnoreWlanAct = bEnable;
\r
1306 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreIgnoreWlanAct = %d, bCurIgnoreWlanAct = %d!!\n",
\r
1307 pCoexDm->bPreIgnoreWlanAct, pCoexDm->bCurIgnoreWlanAct));
\r
1309 if(pCoexDm->bPreIgnoreWlanAct == pCoexDm->bCurIgnoreWlanAct)
\r
1312 halbtc8723b2ant_SetFwIgnoreWlanAct(pBtCoexist, bEnable);
\r
1314 pCoexDm->bPreIgnoreWlanAct = pCoexDm->bCurIgnoreWlanAct;
\r
1318 halbtc8723b2ant_SetFwPstdma(
\r
1319 IN PBTC_COEXIST pBtCoexist,
\r
1327 u1Byte H2C_Parameter[5] ={0};
\r
1329 H2C_Parameter[0] = byte1;
\r
1330 H2C_Parameter[1] = byte2;
\r
1331 H2C_Parameter[2] = byte3;
\r
1332 H2C_Parameter[3] = byte4;
\r
1333 H2C_Parameter[4] = byte5;
\r
1335 pCoexDm->psTdmaPara[0] = byte1;
\r
1336 pCoexDm->psTdmaPara[1] = byte2;
\r
1337 pCoexDm->psTdmaPara[2] = byte3;
\r
1338 pCoexDm->psTdmaPara[3] = byte4;
\r
1339 pCoexDm->psTdmaPara[4] = byte5;
\r
1341 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], FW write 0x60(5bytes)=0x%x%08x\n",
\r
1342 H2C_Parameter[0],
\r
1343 H2C_Parameter[1]<<24|H2C_Parameter[2]<<16|H2C_Parameter[3]<<8|H2C_Parameter[4]));
\r
1345 pBtCoexist->fBtcFillH2c(pBtCoexist, 0x60, 5, H2C_Parameter);
\r
1349 halbtc8723b2ant_SwMechanism1(
\r
1350 IN PBTC_COEXIST pBtCoexist,
\r
1351 IN BOOLEAN bShrinkRxLPF,
\r
1352 IN BOOLEAN bLowPenaltyRA,
\r
1353 IN BOOLEAN bLimitedDIG,
\r
1354 IN BOOLEAN bBTLNAConstrain
\r
1360 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
\r
1362 if(BTC_WIFI_BW_HT40 != wifiBw) //only shrink RF Rx LPF for HT40
\r
1365 bShrinkRxLPF = FALSE;
\r
1369 halbtc8723b2ant_RfShrink(pBtCoexist, NORMAL_EXEC, bShrinkRxLPF);
\r
1370 halbtc8723b2ant_LowPenaltyRa(pBtCoexist, NORMAL_EXEC, bLowPenaltyRA);
\r
1374 halbtc8723b2ant_SwMechanism2(
\r
1375 IN PBTC_COEXIST pBtCoexist,
\r
1376 IN BOOLEAN bAGCTableShift,
\r
1377 IN BOOLEAN bADCBackOff,
\r
1378 IN BOOLEAN bSWDACSwing,
\r
1379 IN u4Byte dacSwingLvl
\r
1382 halbtc8723b2ant_AgcTable(pBtCoexist, NORMAL_EXEC, bAGCTableShift);
\r
1383 //halbtc8723b2ant_AdcBackOff(pBtCoexist, NORMAL_EXEC, bADCBackOff);
\r
1384 halbtc8723b2ant_DacSwing(pBtCoexist, NORMAL_EXEC, bSWDACSwing, dacSwingLvl);
\r
1388 halbtc8723b2ant_SetAntPath(
\r
1389 IN PBTC_COEXIST pBtCoexist,
\r
1390 IN u1Byte antPosType,
\r
1391 IN BOOLEAN bInitHwCfg,
\r
1392 IN BOOLEAN bWifiOff
\r
1395 PBTC_BOARD_INFO pBoardInfo=&pBtCoexist->boardInfo;
\r
1396 u4Byte fwVer=0, u4Tmp=0;
\r
1397 BOOLEAN bPgExtSwitch=FALSE;
\r
1398 BOOLEAN bUseExtSwitch=FALSE;
\r
1399 u1Byte H2C_Parameter[2] ={0};
\r
1401 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_EXT_SWITCH, &bPgExtSwitch);
\r
1402 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer); // [31:16]=fw ver, [15:0]=fw sub ver
\r
1404 if((fwVer<0xc0000) || bPgExtSwitch)
\r
1405 bUseExtSwitch = TRUE;
\r
1409 // 0x4c[23]=0, 0x4c[24]=1 Antenna control by WL/BT
\r
1410 u4Tmp = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x4c);
\r
1413 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x4c, u4Tmp);
\r
1415 pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x974, 0xff);
\r
1416 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x944, 0x3, 0x3);
\r
1417 pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x930, 0x77);
\r
1418 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x67, 0x20, 0x1);
\r
1420 //Force GNT_BT to low
\r
1421 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x765, 0x18, 0x0);
\r
1422 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x948, 0x0);
\r
1424 if(pBoardInfo->btdmAntPos == BTC_ANTENNA_AT_MAIN_PORT)
\r
1426 //tell firmware "no antenna inverse"
\r
1427 H2C_Parameter[0] = 0;
\r
1431 //tell firmware "antenna inverse"
\r
1432 H2C_Parameter[0] = 1;
\r
1435 if (bUseExtSwitch)
\r
1438 H2C_Parameter[1] = 1;
\r
1443 H2C_Parameter[1] = 0;
\r
1445 pBtCoexist->fBtcFillH2c(pBtCoexist, 0x65, 2, H2C_Parameter);
\r
1449 // ext switch setting
\r
1452 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x948, 0x0); // fixed internal switch S1->WiFi, S0->BT
\r
1453 switch(antPosType)
\r
1455 case BTC_ANT_WIFI_AT_MAIN:
\r
1456 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x92c, 0x3, 0x1); // ext switch main at wifi
\r
1458 case BTC_ANT_WIFI_AT_AUX:
\r
1459 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x92c, 0x3, 0x2); // ext switch aux at wifi
\r
1463 else // internal switch
\r
1465 // fixed ext switch
\r
1466 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x92c, 0x3, 0x1);
\r
1467 switch(antPosType)
\r
1469 case BTC_ANT_WIFI_AT_MAIN:
\r
1470 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x948, 0x0); // fixed internal switch S1->WiFi, S0->BT
\r
1472 case BTC_ANT_WIFI_AT_AUX:
\r
1473 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x948, 0x280); // fixed internal switch S0->WiFi, S1->BT
\r
1480 halbtc8723b2ant_PsTdma(
\r
1481 IN PBTC_COEXIST pBtCoexist,
\r
1482 IN BOOLEAN bForceExec,
\r
1483 IN BOOLEAN bTurnOn,
\r
1487 BOOLEAN bTurnOnByCnt=FALSE;
\r
1488 u1Byte psTdmaTypeByCnt=0;
\r
1490 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s turn %s PS TDMA, type=%d\n",
\r
1491 (bForceExec? "force to":""), (bTurnOn? "ON":"OFF"), type));
\r
1492 pCoexDm->bCurPsTdmaOn = bTurnOn;
\r
1493 pCoexDm->curPsTdma = type;
\r
1497 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPrePsTdmaOn = %d, bCurPsTdmaOn = %d!!\n",
\r
1498 pCoexDm->bPrePsTdmaOn, pCoexDm->bCurPsTdmaOn));
\r
1499 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], prePsTdma = %d, curPsTdma = %d!!\n",
\r
1500 pCoexDm->prePsTdma, pCoexDm->curPsTdma));
\r
1502 if( (pCoexDm->bPrePsTdmaOn == pCoexDm->bCurPsTdmaOn) &&
\r
1503 (pCoexDm->prePsTdma == pCoexDm->curPsTdma) )
\r
1512 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0xe1, 0x90);
\r
1515 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0xe1, 0x90);
\r
1518 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x3, 0xf1, 0x90);
\r
1521 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x10, 0x03, 0xf1, 0x90);
\r
1524 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0x60, 0x90);
\r
1527 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0x60, 0x90);
\r
1530 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x3, 0x70, 0x90);
\r
1533 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xa3, 0x10, 0x3, 0x70, 0x90);
\r
1536 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0xe1, 0x90);
\r
1539 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0xe1, 0x90);
\r
1542 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0xa, 0xa, 0xe1, 0x90);
\r
1545 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x5, 0x5, 0xe1, 0x90);
\r
1548 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0x60, 0x90);
\r
1551 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0x60, 0x90);
\r
1554 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0xa, 0xa, 0x60, 0x90);
\r
1557 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x5, 0x5, 0x60, 0x90);
\r
1560 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xa3, 0x2f, 0x2f, 0x60, 0x90);
\r
1563 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x5, 0x5, 0xe1, 0x90);
\r
1566 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x25, 0x25, 0xe1, 0x90);
\r
1569 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x25, 0x25, 0x60, 0x90);
\r
1572 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x15, 0x03, 0x70, 0x90);
\r
1575 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0xe1, 0x90);
\r
1581 // disable PS tdma
\r
1585 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0x0, 0x0, 0x0, 0x40, 0x0);
\r
1588 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0x0, 0x0, 0x0, 0x48, 0x0);
\r
1591 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0x0, 0x0, 0x0, 0x40, 0x0);
\r
1596 // update pre state
\r
1597 pCoexDm->bPrePsTdmaOn = pCoexDm->bCurPsTdmaOn;
\r
1598 pCoexDm->prePsTdma = pCoexDm->curPsTdma;
\r
1602 halbtc8723b2ant_CoexAllOff(
\r
1603 IN PBTC_COEXIST pBtCoexist
\r
1607 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);
\r
1608 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
1609 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);
\r
1612 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
1613 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
1616 //pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
\r
1617 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);
\r
1621 halbtc8723b2ant_InitCoexDm(
\r
1622 IN PBTC_COEXIST pBtCoexist
\r
1625 // force to reset coex mechanism
\r
1627 halbtc8723b2ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 1);
\r
1628 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, FORCE_EXEC, 6);
\r
1629 halbtc8723b2ant_DecBtPwr(pBtCoexist, FORCE_EXEC, FALSE);
\r
1631 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
1632 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
1636 halbtc8723b2ant_ActionBtInquiry(
\r
1637 IN PBTC_COEXIST pBtCoexist
\r
1640 BOOLEAN bWifiConnected=FALSE;
\r
1641 BOOLEAN bLowPwrDisable=TRUE;
\r
1643 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);
\r
1644 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);
\r
1646 if(bWifiConnected)
\r
1648 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);
\r
1649 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
1653 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);
\r
1654 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);
\r
1656 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, FORCE_EXEC, 6);
\r
1657 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);
\r
1659 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
1660 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
1662 pCoexDm->bNeedRecover0x948 = TRUE;
\r
1663 pCoexDm->backup0x948 = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x948);
\r
1665 halbtc8723b2ant_SetAntPath(pBtCoexist, BTC_ANT_WIFI_AT_AUX, FALSE, FALSE);
\r
1668 halbtc8723b2ant_IsCommonAction(
\r
1669 IN PBTC_COEXIST pBtCoexist
\r
1672 BOOLEAN bCommon=FALSE, bWifiConnected=FALSE, bWifiBusy=FALSE;
\r
1673 BOOLEAN bBtHsOn=FALSE, bLowPwrDisable=FALSE;
\r
1675 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);
\r
1676 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);
\r
1677 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);
\r
1679 if(!bWifiConnected)
\r
1681 bLowPwrDisable = FALSE;
\r
1682 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);
\r
1684 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi non-connected idle!!\n"));
\r
1686 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
\r
1687 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);
\r
1688 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);
\r
1689 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
1690 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);
\r
1692 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
1693 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
1699 if(BT_8723B_2ANT_BT_STATUS_NON_CONNECTED_IDLE == pCoexDm->btStatus)
\r
1701 bLowPwrDisable = FALSE;
\r
1702 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);
\r
1704 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi connected + BT non connected-idle!!\n"));
\r
1706 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
\r
1707 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);
\r
1708 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);
\r
1709 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 0xb);
\r
1710 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);
\r
1712 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
1713 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
1717 else if(BT_8723B_2ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus)
\r
1719 bLowPwrDisable = TRUE;
\r
1720 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);
\r
1724 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi connected + BT connected-idle!!\n"));
\r
1726 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
\r
1727 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);
\r
1728 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);
\r
1729 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 0xb);
\r
1730 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);
\r
1732 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);
\r
1733 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
1739 bLowPwrDisable = TRUE;
\r
1740 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);
\r
1744 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi Connected-Busy + BT Busy!!\n"));
\r
1752 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi Connected-Idle + BT Busy!!\n"));
\r
1754 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
\r
1755 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);
\r
1756 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 21);
\r
1757 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 0xb);
\r
1758 if(halbtc8723b2ant_NeedToDecBtPwr(pBtCoexist))
\r
1759 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);
\r
1761 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);
\r
1762 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
1763 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
1772 halbtc8723b2ant_TdmaDurationAdjust(
\r
1773 IN PBTC_COEXIST pBtCoexist,
\r
1774 IN BOOLEAN bScoHid,
\r
1775 IN BOOLEAN bTxPause,
\r
1776 IN u1Byte maxInterval
\r
1779 static s4Byte up,dn,m,n,WaitCount;
\r
1780 s4Byte result; //0: no change, +1: increase WiFi duration, -1: decrease WiFi duration
\r
1781 u1Byte retryCount=0;
\r
1783 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], TdmaDurationAdjust()\n"));
\r
1785 if(!pCoexDm->bAutoTdmaAdjust)
\r
1787 pCoexDm->bAutoTdmaAdjust = TRUE;
\r
1788 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], first run TdmaDurationAdjust()!!\n"));
\r
1794 if(maxInterval == 1)
\r
1796 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 13);
\r
1797 pCoexDm->psTdmaDuAdjType = 13;
\r
1799 else if(maxInterval == 2)
\r
1801 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);
\r
1802 pCoexDm->psTdmaDuAdjType = 14;
\r
1804 else if(maxInterval == 3)
\r
1806 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
1807 pCoexDm->psTdmaDuAdjType = 15;
\r
1811 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
1812 pCoexDm->psTdmaDuAdjType = 15;
\r
1817 if(maxInterval == 1)
\r
1819 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);
\r
1820 pCoexDm->psTdmaDuAdjType = 9;
\r
1822 else if(maxInterval == 2)
\r
1824 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);
\r
1825 pCoexDm->psTdmaDuAdjType = 10;
\r
1827 else if(maxInterval == 3)
\r
1829 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
1830 pCoexDm->psTdmaDuAdjType = 11;
\r
1834 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
1835 pCoexDm->psTdmaDuAdjType = 11;
\r
1843 if(maxInterval == 1)
\r
1845 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);
\r
1846 pCoexDm->psTdmaDuAdjType = 5;
\r
1848 else if(maxInterval == 2)
\r
1850 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);
\r
1851 pCoexDm->psTdmaDuAdjType = 6;
\r
1853 else if(maxInterval == 3)
\r
1855 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
1856 pCoexDm->psTdmaDuAdjType = 7;
\r
1860 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
1861 pCoexDm->psTdmaDuAdjType = 7;
\r
1866 if(maxInterval == 1)
\r
1868 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);
\r
1869 pCoexDm->psTdmaDuAdjType = 1;
\r
1871 else if(maxInterval == 2)
\r
1873 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);
\r
1874 pCoexDm->psTdmaDuAdjType = 2;
\r
1876 else if(maxInterval == 3)
\r
1878 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
1879 pCoexDm->psTdmaDuAdjType = 3;
\r
1883 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
1884 pCoexDm->psTdmaDuAdjType = 3;
\r
1899 //accquire the BT TRx retry count from BT_Info byte2
\r
1900 retryCount = pCoexSta->btRetryCnt;
\r
1901 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], retryCount = %d\n", retryCount));
\r
1902 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], up=%d, dn=%d, m=%d, n=%d, WaitCount=%d\n",
\r
1903 up, dn, m, n, WaitCount));
\r
1907 if(retryCount == 0) // no retry in the last 2-second duration
\r
1915 if(up >= n) // if ³sÄò n Ó2¬í retry count¬°0, «h½Õ¼eWiFi duration
\r
1922 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Increase wifi duration!!\n"));
\r
1925 else if (retryCount <= 3) // <=3 retry in the last 2-second duration
\r
1933 if (dn == 2) // if ³sÄò 2 Ó2¬í retry count< 3, «h½Õ¯¶WiFi duration
\r
1935 if (WaitCount <= 2)
\r
1936 m++; // ÁקK¤@ª½¦b¨âÓlevel¤¤¨Ó¦^
\r
1940 if ( m >= 20) //m ³Ì¤jÈ = 20 ' ³Ì¤j120¬í recheck¬O§_½Õ¾ã WiFi duration.
\r
1948 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Decrease wifi duration for retryCounter<3!!\n"));
\r
1951 else //retry count > 3, ¥un1¦¸ retry count > 3, «h½Õ¯¶WiFi duration
\r
1953 if (WaitCount == 1)
\r
1954 m++; // ÁקK¤@ª½¦b¨âÓlevel¤¤¨Ó¦^
\r
1958 if ( m >= 20) //m ³Ì¤jÈ = 20 ' ³Ì¤j120¬í recheck¬O§_½Õ¾ã WiFi duration.
\r
1966 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Decrease wifi duration for retryCounter>3!!\n"));
\r
1969 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], max Interval = %d\n", maxInterval));
\r
1970 if(maxInterval == 1)
\r
1974 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 1\n"));
\r
1976 if(pCoexDm->curPsTdma == 71)
\r
1978 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);
\r
1979 pCoexDm->psTdmaDuAdjType = 5;
\r
1981 else if(pCoexDm->curPsTdma == 1)
\r
1983 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);
\r
1984 pCoexDm->psTdmaDuAdjType = 5;
\r
1986 else if(pCoexDm->curPsTdma == 2)
\r
1988 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);
\r
1989 pCoexDm->psTdmaDuAdjType = 6;
\r
1991 else if(pCoexDm->curPsTdma == 3)
\r
1993 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
1994 pCoexDm->psTdmaDuAdjType = 7;
\r
1996 else if(pCoexDm->curPsTdma == 4)
\r
1998 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 8);
\r
1999 pCoexDm->psTdmaDuAdjType = 8;
\r
2001 if(pCoexDm->curPsTdma == 9)
\r
2003 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 13);
\r
2004 pCoexDm->psTdmaDuAdjType = 13;
\r
2006 else if(pCoexDm->curPsTdma == 10)
\r
2008 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);
\r
2009 pCoexDm->psTdmaDuAdjType = 14;
\r
2011 else if(pCoexDm->curPsTdma == 11)
\r
2013 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2014 pCoexDm->psTdmaDuAdjType = 15;
\r
2016 else if(pCoexDm->curPsTdma == 12)
\r
2018 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 16);
\r
2019 pCoexDm->psTdmaDuAdjType = 16;
\r
2024 if(pCoexDm->curPsTdma == 5)
\r
2026 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);
\r
2027 pCoexDm->psTdmaDuAdjType = 6;
\r
2029 else if(pCoexDm->curPsTdma == 6)
\r
2031 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2032 pCoexDm->psTdmaDuAdjType = 7;
\r
2034 else if(pCoexDm->curPsTdma == 7)
\r
2036 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 8);
\r
2037 pCoexDm->psTdmaDuAdjType = 8;
\r
2039 else if(pCoexDm->curPsTdma == 13)
\r
2041 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);
\r
2042 pCoexDm->psTdmaDuAdjType = 14;
\r
2044 else if(pCoexDm->curPsTdma == 14)
\r
2046 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2047 pCoexDm->psTdmaDuAdjType = 15;
\r
2049 else if(pCoexDm->curPsTdma == 15)
\r
2051 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 16);
\r
2052 pCoexDm->psTdmaDuAdjType = 16;
\r
2055 else if (result == 1)
\r
2057 if(pCoexDm->curPsTdma == 8)
\r
2059 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2060 pCoexDm->psTdmaDuAdjType = 7;
\r
2062 else if(pCoexDm->curPsTdma == 7)
\r
2064 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);
\r
2065 pCoexDm->psTdmaDuAdjType = 6;
\r
2067 else if(pCoexDm->curPsTdma == 6)
\r
2069 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);
\r
2070 pCoexDm->psTdmaDuAdjType = 5;
\r
2072 else if(pCoexDm->curPsTdma == 16)
\r
2074 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2075 pCoexDm->psTdmaDuAdjType = 15;
\r
2077 else if(pCoexDm->curPsTdma == 15)
\r
2079 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);
\r
2080 pCoexDm->psTdmaDuAdjType = 14;
\r
2082 else if(pCoexDm->curPsTdma == 14)
\r
2084 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 13);
\r
2085 pCoexDm->psTdmaDuAdjType = 13;
\r
2091 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 0\n"));
\r
2092 if(pCoexDm->curPsTdma == 5)
\r
2094 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 71);
\r
2095 pCoexDm->psTdmaDuAdjType = 71;
\r
2097 else if(pCoexDm->curPsTdma == 6)
\r
2099 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);
\r
2100 pCoexDm->psTdmaDuAdjType = 2;
\r
2102 else if(pCoexDm->curPsTdma == 7)
\r
2104 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2105 pCoexDm->psTdmaDuAdjType = 3;
\r
2107 else if(pCoexDm->curPsTdma == 8)
\r
2109 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 4);
\r
2110 pCoexDm->psTdmaDuAdjType = 4;
\r
2112 if(pCoexDm->curPsTdma == 13)
\r
2114 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);
\r
2115 pCoexDm->psTdmaDuAdjType = 9;
\r
2117 else if(pCoexDm->curPsTdma == 14)
\r
2119 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);
\r
2120 pCoexDm->psTdmaDuAdjType = 10;
\r
2122 else if(pCoexDm->curPsTdma == 15)
\r
2124 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2125 pCoexDm->psTdmaDuAdjType = 11;
\r
2127 else if(pCoexDm->curPsTdma == 16)
\r
2129 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 12);
\r
2130 pCoexDm->psTdmaDuAdjType = 12;
\r
2135 if(pCoexDm->curPsTdma == 71)
\r
2137 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);
\r
2138 pCoexDm->psTdmaDuAdjType = 1;
\r
2140 else if(pCoexDm->curPsTdma == 1)
\r
2142 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);
\r
2143 pCoexDm->psTdmaDuAdjType = 2;
\r
2145 else if(pCoexDm->curPsTdma == 2)
\r
2147 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2148 pCoexDm->psTdmaDuAdjType = 3;
\r
2150 else if(pCoexDm->curPsTdma == 3)
\r
2152 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 4);
\r
2153 pCoexDm->psTdmaDuAdjType = 4;
\r
2155 else if(pCoexDm->curPsTdma == 9)
\r
2157 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);
\r
2158 pCoexDm->psTdmaDuAdjType = 10;
\r
2160 else if(pCoexDm->curPsTdma == 10)
\r
2162 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2163 pCoexDm->psTdmaDuAdjType = 11;
\r
2165 else if(pCoexDm->curPsTdma == 11)
\r
2167 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 12);
\r
2168 pCoexDm->psTdmaDuAdjType = 12;
\r
2171 else if (result == 1)
\r
2173 if(pCoexDm->curPsTdma == 4)
\r
2175 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2176 pCoexDm->psTdmaDuAdjType = 3;
\r
2178 else if(pCoexDm->curPsTdma == 3)
\r
2180 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);
\r
2181 pCoexDm->psTdmaDuAdjType = 2;
\r
2183 else if(pCoexDm->curPsTdma == 2)
\r
2185 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);
\r
2186 pCoexDm->psTdmaDuAdjType = 1;
\r
2188 else if(pCoexDm->curPsTdma == 1)
\r
2190 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 71);
\r
2191 pCoexDm->psTdmaDuAdjType = 71;
\r
2193 else if(pCoexDm->curPsTdma == 12)
\r
2195 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2196 pCoexDm->psTdmaDuAdjType = 11;
\r
2198 else if(pCoexDm->curPsTdma == 11)
\r
2200 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);
\r
2201 pCoexDm->psTdmaDuAdjType = 10;
\r
2203 else if(pCoexDm->curPsTdma == 10)
\r
2205 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);
\r
2206 pCoexDm->psTdmaDuAdjType = 9;
\r
2211 else if(maxInterval == 2)
\r
2215 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 1\n"));
\r
2216 if(pCoexDm->curPsTdma == 1)
\r
2218 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);
\r
2219 pCoexDm->psTdmaDuAdjType = 6;
\r
2221 else if(pCoexDm->curPsTdma == 2)
\r
2223 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);
\r
2224 pCoexDm->psTdmaDuAdjType = 6;
\r
2226 else if(pCoexDm->curPsTdma == 3)
\r
2228 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2229 pCoexDm->psTdmaDuAdjType = 7;
\r
2231 else if(pCoexDm->curPsTdma == 4)
\r
2233 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 8);
\r
2234 pCoexDm->psTdmaDuAdjType = 8;
\r
2236 if(pCoexDm->curPsTdma == 9)
\r
2238 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);
\r
2239 pCoexDm->psTdmaDuAdjType = 14;
\r
2241 else if(pCoexDm->curPsTdma == 10)
\r
2243 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);
\r
2244 pCoexDm->psTdmaDuAdjType = 14;
\r
2246 else if(pCoexDm->curPsTdma == 11)
\r
2248 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2249 pCoexDm->psTdmaDuAdjType = 15;
\r
2251 else if(pCoexDm->curPsTdma == 12)
\r
2253 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 16);
\r
2254 pCoexDm->psTdmaDuAdjType = 16;
\r
2258 if(pCoexDm->curPsTdma == 5)
\r
2260 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);
\r
2261 pCoexDm->psTdmaDuAdjType = 6;
\r
2263 else if(pCoexDm->curPsTdma == 6)
\r
2265 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2266 pCoexDm->psTdmaDuAdjType = 7;
\r
2268 else if(pCoexDm->curPsTdma == 7)
\r
2270 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 8);
\r
2271 pCoexDm->psTdmaDuAdjType = 8;
\r
2273 else if(pCoexDm->curPsTdma == 13)
\r
2275 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);
\r
2276 pCoexDm->psTdmaDuAdjType = 14;
\r
2278 else if(pCoexDm->curPsTdma == 14)
\r
2280 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2281 pCoexDm->psTdmaDuAdjType = 15;
\r
2283 else if(pCoexDm->curPsTdma == 15)
\r
2285 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 16);
\r
2286 pCoexDm->psTdmaDuAdjType = 16;
\r
2289 else if (result == 1)
\r
2291 if(pCoexDm->curPsTdma == 8)
\r
2293 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2294 pCoexDm->psTdmaDuAdjType = 7;
\r
2296 else if(pCoexDm->curPsTdma == 7)
\r
2298 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);
\r
2299 pCoexDm->psTdmaDuAdjType = 6;
\r
2301 else if(pCoexDm->curPsTdma == 6)
\r
2303 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);
\r
2304 pCoexDm->psTdmaDuAdjType = 6;
\r
2306 else if(pCoexDm->curPsTdma == 16)
\r
2308 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2309 pCoexDm->psTdmaDuAdjType = 15;
\r
2311 else if(pCoexDm->curPsTdma == 15)
\r
2313 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);
\r
2314 pCoexDm->psTdmaDuAdjType = 14;
\r
2316 else if(pCoexDm->curPsTdma == 14)
\r
2318 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);
\r
2319 pCoexDm->psTdmaDuAdjType = 14;
\r
2325 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 0\n"));
\r
2326 if(pCoexDm->curPsTdma == 5)
\r
2328 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);
\r
2329 pCoexDm->psTdmaDuAdjType = 2;
\r
2331 else if(pCoexDm->curPsTdma == 6)
\r
2333 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);
\r
2334 pCoexDm->psTdmaDuAdjType = 2;
\r
2336 else if(pCoexDm->curPsTdma == 7)
\r
2338 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2339 pCoexDm->psTdmaDuAdjType = 3;
\r
2341 else if(pCoexDm->curPsTdma == 8)
\r
2343 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 4);
\r
2344 pCoexDm->psTdmaDuAdjType = 4;
\r
2346 if(pCoexDm->curPsTdma == 13)
\r
2348 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);
\r
2349 pCoexDm->psTdmaDuAdjType = 10;
\r
2351 else if(pCoexDm->curPsTdma == 14)
\r
2353 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);
\r
2354 pCoexDm->psTdmaDuAdjType = 10;
\r
2356 else if(pCoexDm->curPsTdma == 15)
\r
2358 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2359 pCoexDm->psTdmaDuAdjType = 11;
\r
2361 else if(pCoexDm->curPsTdma == 16)
\r
2363 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 12);
\r
2364 pCoexDm->psTdmaDuAdjType = 12;
\r
2368 if(pCoexDm->curPsTdma == 1)
\r
2370 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);
\r
2371 pCoexDm->psTdmaDuAdjType = 2;
\r
2373 else if(pCoexDm->curPsTdma == 2)
\r
2375 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2376 pCoexDm->psTdmaDuAdjType = 3;
\r
2378 else if(pCoexDm->curPsTdma == 3)
\r
2380 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 4);
\r
2381 pCoexDm->psTdmaDuAdjType = 4;
\r
2383 else if(pCoexDm->curPsTdma == 9)
\r
2385 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);
\r
2386 pCoexDm->psTdmaDuAdjType = 10;
\r
2388 else if(pCoexDm->curPsTdma == 10)
\r
2390 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2391 pCoexDm->psTdmaDuAdjType = 11;
\r
2393 else if(pCoexDm->curPsTdma == 11)
\r
2395 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 12);
\r
2396 pCoexDm->psTdmaDuAdjType = 12;
\r
2399 else if (result == 1)
\r
2401 if(pCoexDm->curPsTdma == 4)
\r
2403 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2404 pCoexDm->psTdmaDuAdjType = 3;
\r
2406 else if(pCoexDm->curPsTdma == 3)
\r
2408 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);
\r
2409 pCoexDm->psTdmaDuAdjType = 2;
\r
2411 else if(pCoexDm->curPsTdma == 2)
\r
2413 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);
\r
2414 pCoexDm->psTdmaDuAdjType = 2;
\r
2416 else if(pCoexDm->curPsTdma == 12)
\r
2418 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2419 pCoexDm->psTdmaDuAdjType = 11;
\r
2421 else if(pCoexDm->curPsTdma == 11)
\r
2423 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);
\r
2424 pCoexDm->psTdmaDuAdjType = 10;
\r
2426 else if(pCoexDm->curPsTdma == 10)
\r
2428 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);
\r
2429 pCoexDm->psTdmaDuAdjType = 10;
\r
2434 else if(maxInterval == 3)
\r
2438 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 1\n"));
\r
2439 if(pCoexDm->curPsTdma == 1)
\r
2441 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2442 pCoexDm->psTdmaDuAdjType = 7;
\r
2444 else if(pCoexDm->curPsTdma == 2)
\r
2446 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2447 pCoexDm->psTdmaDuAdjType = 7;
\r
2449 else if(pCoexDm->curPsTdma == 3)
\r
2451 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2452 pCoexDm->psTdmaDuAdjType = 7;
\r
2454 else if(pCoexDm->curPsTdma == 4)
\r
2456 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 8);
\r
2457 pCoexDm->psTdmaDuAdjType = 8;
\r
2459 if(pCoexDm->curPsTdma == 9)
\r
2461 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2462 pCoexDm->psTdmaDuAdjType = 15;
\r
2464 else if(pCoexDm->curPsTdma == 10)
\r
2466 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2467 pCoexDm->psTdmaDuAdjType = 15;
\r
2469 else if(pCoexDm->curPsTdma == 11)
\r
2471 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2472 pCoexDm->psTdmaDuAdjType = 15;
\r
2474 else if(pCoexDm->curPsTdma == 12)
\r
2476 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 16);
\r
2477 pCoexDm->psTdmaDuAdjType = 16;
\r
2481 if(pCoexDm->curPsTdma == 5)
\r
2483 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2484 pCoexDm->psTdmaDuAdjType = 7;
\r
2486 else if(pCoexDm->curPsTdma == 6)
\r
2488 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2489 pCoexDm->psTdmaDuAdjType = 7;
\r
2491 else if(pCoexDm->curPsTdma == 7)
\r
2493 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 8);
\r
2494 pCoexDm->psTdmaDuAdjType = 8;
\r
2496 else if(pCoexDm->curPsTdma == 13)
\r
2498 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2499 pCoexDm->psTdmaDuAdjType = 15;
\r
2501 else if(pCoexDm->curPsTdma == 14)
\r
2503 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2504 pCoexDm->psTdmaDuAdjType = 15;
\r
2506 else if(pCoexDm->curPsTdma == 15)
\r
2508 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 16);
\r
2509 pCoexDm->psTdmaDuAdjType = 16;
\r
2512 else if (result == 1)
\r
2514 if(pCoexDm->curPsTdma == 8)
\r
2516 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2517 pCoexDm->psTdmaDuAdjType = 7;
\r
2519 else if(pCoexDm->curPsTdma == 7)
\r
2521 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2522 pCoexDm->psTdmaDuAdjType = 7;
\r
2524 else if(pCoexDm->curPsTdma == 6)
\r
2526 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2527 pCoexDm->psTdmaDuAdjType = 7;
\r
2529 else if(pCoexDm->curPsTdma == 16)
\r
2531 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2532 pCoexDm->psTdmaDuAdjType = 15;
\r
2534 else if(pCoexDm->curPsTdma == 15)
\r
2536 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2537 pCoexDm->psTdmaDuAdjType = 15;
\r
2539 else if(pCoexDm->curPsTdma == 14)
\r
2541 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2542 pCoexDm->psTdmaDuAdjType = 15;
\r
2548 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 0\n"));
\r
2549 if(pCoexDm->curPsTdma == 5)
\r
2551 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2552 pCoexDm->psTdmaDuAdjType = 3;
\r
2554 else if(pCoexDm->curPsTdma == 6)
\r
2556 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2557 pCoexDm->psTdmaDuAdjType = 3;
\r
2559 else if(pCoexDm->curPsTdma == 7)
\r
2561 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2562 pCoexDm->psTdmaDuAdjType = 3;
\r
2564 else if(pCoexDm->curPsTdma == 8)
\r
2566 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 4);
\r
2567 pCoexDm->psTdmaDuAdjType = 4;
\r
2569 if(pCoexDm->curPsTdma == 13)
\r
2571 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2572 pCoexDm->psTdmaDuAdjType = 11;
\r
2574 else if(pCoexDm->curPsTdma == 14)
\r
2576 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2577 pCoexDm->psTdmaDuAdjType = 11;
\r
2579 else if(pCoexDm->curPsTdma == 15)
\r
2581 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2582 pCoexDm->psTdmaDuAdjType = 11;
\r
2584 else if(pCoexDm->curPsTdma == 16)
\r
2586 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 12);
\r
2587 pCoexDm->psTdmaDuAdjType = 12;
\r
2591 if(pCoexDm->curPsTdma == 1)
\r
2593 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2594 pCoexDm->psTdmaDuAdjType = 3;
\r
2596 else if(pCoexDm->curPsTdma == 2)
\r
2598 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2599 pCoexDm->psTdmaDuAdjType = 3;
\r
2601 else if(pCoexDm->curPsTdma == 3)
\r
2603 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 4);
\r
2604 pCoexDm->psTdmaDuAdjType = 4;
\r
2606 else if(pCoexDm->curPsTdma == 9)
\r
2608 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2609 pCoexDm->psTdmaDuAdjType = 11;
\r
2611 else if(pCoexDm->curPsTdma == 10)
\r
2613 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2614 pCoexDm->psTdmaDuAdjType = 11;
\r
2616 else if(pCoexDm->curPsTdma == 11)
\r
2618 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 12);
\r
2619 pCoexDm->psTdmaDuAdjType = 12;
\r
2622 else if (result == 1)
\r
2624 if(pCoexDm->curPsTdma == 4)
\r
2626 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2627 pCoexDm->psTdmaDuAdjType = 3;
\r
2629 else if(pCoexDm->curPsTdma == 3)
\r
2631 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2632 pCoexDm->psTdmaDuAdjType = 3;
\r
2634 else if(pCoexDm->curPsTdma == 2)
\r
2636 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2637 pCoexDm->psTdmaDuAdjType = 3;
\r
2639 else if(pCoexDm->curPsTdma == 12)
\r
2641 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2642 pCoexDm->psTdmaDuAdjType = 11;
\r
2644 else if(pCoexDm->curPsTdma == 11)
\r
2646 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2647 pCoexDm->psTdmaDuAdjType = 11;
\r
2649 else if(pCoexDm->curPsTdma == 10)
\r
2651 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2652 pCoexDm->psTdmaDuAdjType = 11;
\r
2659 // if current PsTdma not match with the recorded one (when scan, dhcp...),
\r
2660 // then we have to adjust it back to the previous record one.
\r
2661 if(pCoexDm->curPsTdma != pCoexDm->psTdmaDuAdjType)
\r
2663 BOOLEAN bScan=FALSE, bLink=FALSE, bRoam=FALSE;
\r
2664 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], PsTdma type dismatch!!!, curPsTdma=%d, recordPsTdma=%d\n",
\r
2665 pCoexDm->curPsTdma, pCoexDm->psTdmaDuAdjType));
\r
2667 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);
\r
2668 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_LINK, &bLink);
\r
2669 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_ROAM, &bRoam);
\r
2671 if( !bScan && !bLink && !bRoam)
\r
2673 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, pCoexDm->psTdmaDuAdjType);
\r
2677 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], roaming/link/scan is under progress, will adjust next time!!!\n"));
\r
2682 // SCO only or SCO+PAN(HS)
\r
2684 halbtc8723b2ant_ActionSco(
\r
2685 IN PBTC_COEXIST pBtCoexist
\r
2688 u1Byte wifiRssiState;
\r
2691 wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
\r
2693 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
\r
2695 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 4);
\r
2697 if(halbtc8723b2ant_NeedToDecBtPwr(pBtCoexist))
\r
2698 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);
\r
2700 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);
\r
2702 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
\r
2704 if (BTC_WIFI_BW_LEGACY == wifiBw) //for SCO quality at 11b/g mode
\r
2706 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);
\r
2708 else //for SCO quality & wifi performance balance at 11n mode
\r
2710 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 8);
\r
2713 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0); //for voice quality
\r
2716 if(BTC_WIFI_BW_HT40 == wifiBw)
\r
2718 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
2719 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
2721 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);
\r
2722 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,TRUE,0x4);
\r
2726 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);
\r
2727 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,TRUE,0x4);
\r
2732 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
2733 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
2735 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);
\r
2736 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,TRUE,0x4);
\r
2740 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);
\r
2741 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,TRUE,0x4);
\r
2748 halbtc8723b2ant_ActionHid(
\r
2749 IN PBTC_COEXIST pBtCoexist
\r
2752 u1Byte wifiRssiState, btRssiState;
\r
2755 wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
\r
2756 btRssiState = halbtc8723b2ant_BtRssiState(2, 29, 0);
\r
2758 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
\r
2760 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
2762 if(halbtc8723b2ant_NeedToDecBtPwr(pBtCoexist))
\r
2763 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);
\r
2765 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);
\r
2767 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
\r
2769 if (BTC_WIFI_BW_LEGACY == wifiBw) //for HID at 11b/g mode
\r
2771 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);
\r
2773 else //for HID quality & wifi performance balance at 11n mode
\r
2775 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 9);
\r
2778 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||
\r
2779 (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
2781 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);
\r
2785 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 13);
\r
2789 if(BTC_WIFI_BW_HT40 == wifiBw)
\r
2791 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
2792 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
2794 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);
\r
2795 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
2799 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);
\r
2800 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
2805 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
2806 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
2808 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);
\r
2809 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
2813 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);
\r
2814 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
2819 //A2DP only / PAN(EDR) only/ A2DP+PAN(HS)
\r
2821 halbtc8723b2ant_ActionA2dp(
\r
2822 IN PBTC_COEXIST pBtCoexist
\r
2825 u1Byte wifiRssiState, wifiRssiState1, btRssiState;
\r
2829 wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
\r
2830 wifiRssiState1 = halbtc8723b2ant_WifiRssiState(pBtCoexist, 1, 2, 40, 0);
\r
2831 btRssiState = halbtc8723b2ant_BtRssiState(2, 29, 0);
\r
2833 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_AP_NUM, &apNum);
\r
2835 // define the office environment
\r
2836 if(apNum >= 10 && BTC_RSSI_HIGH(wifiRssiState1))
\r
2838 //DbgPrint(" AP#>10(%d)\n", apNum);
\r
2839 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
\r
2840 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
2841 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);
\r
2842 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);
\r
2843 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);
\r
2846 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
\r
2847 if(BTC_WIFI_BW_HT40 == wifiBw)
\r
2849 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);
\r
2850 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,TRUE,0x18);
\r
2854 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
2855 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,TRUE,0x18);
\r
2860 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
\r
2862 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
2864 if(halbtc8723b2ant_NeedToDecBtPwr(pBtCoexist))
\r
2865 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);
\r
2867 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);
\r
2869 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);
\r
2871 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||
\r
2872 (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
2874 halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 1);
\r
2878 halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 1);
\r
2882 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
\r
2883 if(BTC_WIFI_BW_HT40 == wifiBw)
\r
2885 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
2886 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
2888 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);
\r
2889 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
2893 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);
\r
2894 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
2899 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
2900 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
2902 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
2903 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
2907 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
2908 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
2914 halbtc8723b2ant_ActionA2dpPanHs(
\r
2915 IN PBTC_COEXIST pBtCoexist
\r
2918 u1Byte wifiRssiState;
\r
2921 wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
\r
2923 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
\r
2925 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
2927 if(halbtc8723b2ant_NeedToDecBtPwr(pBtCoexist))
\r
2928 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);
\r
2930 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);
\r
2932 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);
\r
2934 halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 2);
\r
2937 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
\r
2938 if(BTC_WIFI_BW_HT40 == wifiBw)
\r
2940 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
2941 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
2943 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);
\r
2944 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
2948 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);
\r
2949 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
2954 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
2955 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
2957 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
2958 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
2962 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
2963 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
2969 halbtc8723b2ant_ActionPanEdr(
\r
2970 IN PBTC_COEXIST pBtCoexist
\r
2973 u1Byte wifiRssiState, btRssiState;
\r
2976 wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
\r
2977 btRssiState = halbtc8723b2ant_BtRssiState(2, 29, 0);
\r
2979 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
\r
2981 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
2983 if(halbtc8723b2ant_NeedToDecBtPwr(pBtCoexist))
\r
2984 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);
\r
2986 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);
\r
2988 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 10);
\r
2990 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||
\r
2991 (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
2993 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);
\r
2997 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);
\r
3001 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
\r
3002 if(BTC_WIFI_BW_HT40 == wifiBw)
\r
3004 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3005 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3007 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);
\r
3008 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3012 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);
\r
3013 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3018 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3019 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3021 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
3022 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3026 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
3027 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3035 halbtc8723b2ant_ActionPanHs(
\r
3036 IN PBTC_COEXIST pBtCoexist
\r
3039 u1Byte wifiRssiState;
\r
3042 wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
\r
3044 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
\r
3046 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
3048 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3049 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3051 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);
\r
3055 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);
\r
3058 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);
\r
3060 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);
\r
3062 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
\r
3063 if(BTC_WIFI_BW_HT40 == wifiBw)
\r
3065 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3066 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3068 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);
\r
3069 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3073 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);
\r
3074 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3079 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3080 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3082 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
3083 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3087 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
3088 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3095 halbtc8723b2ant_ActionPanEdrA2dp(
\r
3096 IN PBTC_COEXIST pBtCoexist
\r
3099 u1Byte wifiRssiState, btRssiState;
\r
3102 wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
\r
3103 btRssiState = halbtc8723b2ant_BtRssiState(2, 29, 0);
\r
3105 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
\r
3107 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
3109 if(halbtc8723b2ant_NeedToDecBtPwr(pBtCoexist))
\r
3110 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);
\r
3112 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);
\r
3114 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
\r
3116 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3117 (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3119 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 12);
\r
3120 if(BTC_WIFI_BW_HT40 == wifiBw)
\r
3121 halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 3);
\r
3123 halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 3);
\r
3127 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);
\r
3128 halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 3);
\r
3132 if(BTC_WIFI_BW_HT40 == wifiBw)
\r
3134 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3135 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3137 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);
\r
3138 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3142 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);
\r
3143 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3148 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3149 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3151 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
3152 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3156 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
3157 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3163 halbtc8723b2ant_ActionPanEdrHid(
\r
3164 IN PBTC_COEXIST pBtCoexist
\r
3167 u1Byte wifiRssiState, btRssiState;
\r
3170 wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
\r
3171 btRssiState = halbtc8723b2ant_BtRssiState(2, 29, 0);
\r
3172 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
\r
3174 if(halbtc8723b2ant_NeedToDecBtPwr(pBtCoexist))
\r
3175 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);
\r
3177 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);
\r
3179 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3180 (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3182 if(BTC_WIFI_BW_HT40 == wifiBw)
\r
3184 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 3);
\r
3185 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 11);
\r
3186 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x780);
\r
3190 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
3191 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);
\r
3192 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
\r
3194 halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, TRUE, FALSE, 2);
\r
3198 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
3199 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 11);
\r
3200 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
\r
3201 halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);
\r
3205 if(BTC_WIFI_BW_HT40 == wifiBw)
\r
3207 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3208 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3210 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);
\r
3211 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3215 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);
\r
3216 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3221 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3222 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3224 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);
\r
3225 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3229 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);
\r
3230 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3235 // HID+A2DP+PAN(EDR)
\r
3237 halbtc8723b2ant_ActionHidA2dpPanEdr(
\r
3238 IN PBTC_COEXIST pBtCoexist
\r
3241 u1Byte wifiRssiState, btRssiState;
\r
3244 wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
\r
3245 btRssiState = halbtc8723b2ant_BtRssiState(2, 29, 0);
\r
3247 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
\r
3249 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
3251 if(halbtc8723b2ant_NeedToDecBtPwr(pBtCoexist))
\r
3252 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);
\r
3254 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);
\r
3256 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
\r
3258 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);
\r
3260 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3261 (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3263 if(BTC_WIFI_BW_HT40 == wifiBw)
\r
3264 halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);
\r
3266 halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, TRUE, FALSE, 3);
\r
3270 halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 3);
\r
3274 if(BTC_WIFI_BW_HT40 == wifiBw)
\r
3276 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3277 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3279 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);
\r
3280 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3284 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);
\r
3285 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3290 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3291 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3293 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);
\r
3294 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3298 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);
\r
3299 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3305 halbtc8723b2ant_ActionHidA2dp(
\r
3306 IN PBTC_COEXIST pBtCoexist
\r
3309 u1Byte wifiRssiState, btRssiState;
\r
3312 wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
\r
3313 btRssiState = halbtc8723b2ant_BtRssiState(2, 29, 0);
\r
3315 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
\r
3317 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
3319 if(halbtc8723b2ant_NeedToDecBtPwr(pBtCoexist))
\r
3320 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);
\r
3322 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);
\r
3324 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
\r
3326 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);
\r
3328 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3329 (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3331 halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, TRUE, FALSE, 2);
\r
3335 halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);
\r
3339 if(BTC_WIFI_BW_HT40 == wifiBw)
\r
3341 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3342 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3344 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);
\r
3345 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3349 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);
\r
3350 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3355 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3356 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3358 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);
\r
3359 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3363 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);
\r
3364 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3370 halbtc8723b2ant_RunCoexistMechanism(
\r
3371 IN PBTC_COEXIST pBtCoexist
\r
3374 BOOLEAN bWifiUnder5G=FALSE, bBtHsOn=FALSE;
\r
3375 u1Byte btInfoOriginal=0, btRetryCnt=0;
\r
3376 u1Byte algorithm=0;
\r
3378 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], RunCoexistMechanism()===>\n"));
\r
3380 if(pBtCoexist->bManualControl)
\r
3382 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], RunCoexistMechanism(), return for Manual CTRL <===\n"));
\r
3386 if(pCoexSta->bUnderIps)
\r
3388 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], wifi is under IPS !!!\n"));
\r
3392 algorithm = halbtc8723b2ant_ActionAlgorithm(pBtCoexist);
\r
3393 if(pCoexSta->bC2hBtInquiryPage && (BT_8723B_2ANT_COEX_ALGO_PANHS!=algorithm))
\r
3395 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT is under inquiry/page scan !!\n"));
\r
3396 halbtc8723b2ant_ActionBtInquiry(pBtCoexist);
\r
3401 if(pCoexDm->bNeedRecover0x948)
\r
3403 pCoexDm->bNeedRecover0x948 = FALSE;
\r
3404 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x948, pCoexDm->backup0x948);
\r
3408 pCoexDm->curAlgorithm = algorithm;
\r
3409 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Algorithm = %d \n", pCoexDm->curAlgorithm));
\r
3411 if(halbtc8723b2ant_IsCommonAction(pBtCoexist))
\r
3413 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant common.\n"));
\r
3414 pCoexDm->bAutoTdmaAdjust = FALSE;
\r
3418 if(pCoexDm->curAlgorithm != pCoexDm->preAlgorithm)
\r
3420 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], preAlgorithm=%d, curAlgorithm=%d\n",
\r
3421 pCoexDm->preAlgorithm, pCoexDm->curAlgorithm));
\r
3422 pCoexDm->bAutoTdmaAdjust = FALSE;
\r
3424 switch(pCoexDm->curAlgorithm)
\r
3426 case BT_8723B_2ANT_COEX_ALGO_SCO:
\r
3427 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = SCO.\n"));
\r
3428 halbtc8723b2ant_ActionSco(pBtCoexist);
\r
3430 case BT_8723B_2ANT_COEX_ALGO_HID:
\r
3431 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HID.\n"));
\r
3432 halbtc8723b2ant_ActionHid(pBtCoexist);
\r
3434 case BT_8723B_2ANT_COEX_ALGO_A2DP:
\r
3435 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = A2DP.\n"));
\r
3436 halbtc8723b2ant_ActionA2dp(pBtCoexist);
\r
3438 case BT_8723B_2ANT_COEX_ALGO_A2DP_PANHS:
\r
3439 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = A2DP+PAN(HS).\n"));
\r
3440 halbtc8723b2ant_ActionA2dpPanHs(pBtCoexist);
\r
3442 case BT_8723B_2ANT_COEX_ALGO_PANEDR:
\r
3443 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = PAN(EDR).\n"));
\r
3444 halbtc8723b2ant_ActionPanEdr(pBtCoexist);
\r
3446 case BT_8723B_2ANT_COEX_ALGO_PANHS:
\r
3447 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HS mode.\n"));
\r
3448 halbtc8723b2ant_ActionPanHs(pBtCoexist);
\r
3450 case BT_8723B_2ANT_COEX_ALGO_PANEDR_A2DP:
\r
3451 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = PAN+A2DP.\n"));
\r
3452 halbtc8723b2ant_ActionPanEdrA2dp(pBtCoexist);
\r
3454 case BT_8723B_2ANT_COEX_ALGO_PANEDR_HID:
\r
3455 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = PAN(EDR)+HID.\n"));
\r
3456 halbtc8723b2ant_ActionPanEdrHid(pBtCoexist);
\r
3458 case BT_8723B_2ANT_COEX_ALGO_HID_A2DP_PANEDR:
\r
3459 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HID+A2DP+PAN.\n"));
\r
3460 halbtc8723b2ant_ActionHidA2dpPanEdr(pBtCoexist);
\r
3462 case BT_8723B_2ANT_COEX_ALGO_HID_A2DP:
\r
3463 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HID+A2DP.\n"));
\r
3464 halbtc8723b2ant_ActionHidA2dp(pBtCoexist);
\r
3467 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = coexist All Off!!\n"));
\r
3468 halbtc8723b2ant_CoexAllOff(pBtCoexist);
\r
3471 pCoexDm->preAlgorithm = pCoexDm->curAlgorithm;
\r
3476 halbtc8723b2ant_WifiOffHwCfg(
\r
3477 IN PBTC_COEXIST pBtCoexist
\r
3480 PADAPTER padapter=pBtCoexist->Adapter;
\r
3481 // set wlan_act to low
\r
3482 pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x76e, 0x4);
\r
3484 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x780); //WiFi goto standby while GNT_BT 0-->1
\r
3486 //Force GNT_BT to High
\r
3487 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x765, 0x18, 0x3);
\r
3488 if(padapter->registrypriv.mp_mode ==0)
\r
3489 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x67, 0x20, 0x0); //BT select s0/s1 is controlled by BT
\r
3491 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x67, 0x20, 0x1); //BT select s0/s1 is controlled by WiFi
\r
3494 //============================================================
\r
3495 // work around function start with wa_halbtc8723b2ant_
\r
3496 //============================================================
\r
3497 //============================================================
\r
3498 // extern function start with EXhalbtc8723b2ant_
\r
3499 //============================================================
\r
3501 EXhalbtc8723b2ant_InitHwConfig(
\r
3502 IN PBTC_COEXIST pBtCoexist
\r
3505 PBTC_BOARD_INFO pBoardInfo=&pBtCoexist->boardInfo;
\r
3506 u4Byte u4Tmp=0, fwVer;
\r
3509 u1Byte H2C_Parameter[2] ={0};
\r
3512 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], 2Ant Init HW Config!!\n"));
\r
3514 //pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0); //WiFi goto standby while GNT_BT 0-->1
\r
3515 //pBtCoexist->fBtcSetBtReg(pBtCoexist, 0, 0x3c, 0x1); //BT goto standby while GNT_BT 1-->0
\r
3517 // backup rf 0x1e value
\r
3518 pCoexDm->btRf0x1eBackup =
\r
3519 pBtCoexist->fBtcGetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff);
\r
3522 u1Tmp = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x790);
\r
3525 pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x790, u1Tmp);
\r
3528 halbtc8723b2ant_SetAntPath(pBtCoexist, BTC_ANT_WIFI_AT_MAIN, TRUE, FALSE);
\r
3531 halbtc8723b2ant_CoexTableWithType(pBtCoexist, FORCE_EXEC, 0);
\r
3533 // Enable counter statistics
\r
3534 pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x76e, 0xc); //0x76e[3] =1, WLAN_Act control by PTA
\r
3535 pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x778, 0x3);
\r
3536 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x40, 0x20, 0x1);
\r
3538 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0); //WiFi goto standby while GNT_BT 0-->1
\r
3542 EXhalbtc8723b2ant_InitCoexDm(
\r
3543 IN PBTC_COEXIST pBtCoexist
\r
3546 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], Coex Mechanism Init!!\n"));
\r
3548 halbtc8723b2ant_InitCoexDm(pBtCoexist);
\r
3552 EXhalbtc8723b2ant_DisplayCoexInfo(
\r
3553 IN PBTC_COEXIST pBtCoexist
\r
3556 PBTC_BOARD_INFO pBoardInfo=&pBtCoexist->boardInfo;
\r
3557 PBTC_STACK_INFO pStackInfo=&pBtCoexist->stackInfo;
\r
3558 PBTC_BT_LINK_INFO pBtLinkInfo=&pBtCoexist->btLinkInfo;
\r
3559 pu1Byte cliBuf=pBtCoexist->cliBuf;
\r
3560 u1Byte u1Tmp[4], i, btInfoExt, psTdmaCase=0;
\r
3562 BOOLEAN bRoam=FALSE, bScan=FALSE, bLink=FALSE, bWifiUnder5G=FALSE;
\r
3563 BOOLEAN bBtHsOn=FALSE, bWifiBusy=FALSE;
\r
3564 s4Byte wifiRssi=0, btHsRssi=0;
\r
3565 u4Byte wifiBw, wifiTrafficDir, faOfdm, faCck;
\r
3566 u1Byte wifiDot11Chnl, wifiHsChnl;
\r
3567 u4Byte fwVer=0, btPatchVer=0;
\r
3570 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n ============[BT Coexist info]============");
\r
3571 CL_PRINTF(cliBuf);
\r
3573 if(pBtCoexist->bManualControl)
\r
3575 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n ============[Under Manual Control]============");
\r
3576 CL_PRINTF(cliBuf);
\r
3577 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n ==========================================");
\r
3578 CL_PRINTF(cliBuf);
\r
3581 if(!pBoardInfo->bBtExist)
\r
3583 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n BT not exists !!!");
\r
3584 CL_PRINTF(cliBuf);
\r
3588 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d ", "Ant PG number/ Ant mechanism:", \
\r
3589 pBoardInfo->pgAntNum, pBoardInfo->btdmAntNum);
\r
3590 CL_PRINTF(cliBuf);
\r
3592 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s / %d", "BT stack/ hci ext ver", \
\r
3593 ((pStackInfo->bProfileNotified)? "Yes":"No"), pStackInfo->hciVersion);
\r
3594 CL_PRINTF(cliBuf);
\r
3596 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_BT_PATCH_VER, &btPatchVer);
\r
3597 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);
\r
3598 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d_%x/ 0x%x/ 0x%x(%d)", "CoexVer/ FwVer/ PatchVer", \
\r
3599 GLCoexVerDate8723b2Ant, GLCoexVer8723b2Ant, fwVer, btPatchVer, btPatchVer);
\r
3600 CL_PRINTF(cliBuf);
\r
3602 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);
\r
3603 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_WIFI_DOT11_CHNL, &wifiDot11Chnl);
\r
3604 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_WIFI_HS_CHNL, &wifiHsChnl);
\r
3605 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d(%d)", "Dot11 channel / HsChnl(HsMode)", \
\r
3606 wifiDot11Chnl, wifiHsChnl, bBtHsOn);
\r
3607 CL_PRINTF(cliBuf);
\r
3609 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %02x %02x %02x ", "H2C Wifi inform bt chnl Info", \
\r
3610 pCoexDm->wifiChnlInfo[0], pCoexDm->wifiChnlInfo[1],
\r
3611 pCoexDm->wifiChnlInfo[2]);
\r
3612 CL_PRINTF(cliBuf);
\r
3614 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_S4_WIFI_RSSI, &wifiRssi);
\r
3615 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_S4_HS_RSSI, &btHsRssi);
\r
3616 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_AP_NUM, &apNum);
\r
3617 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d/ %d", "Wifi rssi/ HS rssi/ AP#", \
\r
3618 wifiRssi, btHsRssi, apNum);
\r
3619 CL_PRINTF(cliBuf);
\r
3621 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);
\r
3622 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_LINK, &bLink);
\r
3623 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_ROAM, &bRoam);
\r
3624 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d/ %d ", "Wifi bLink/ bRoam/ bScan", \
\r
3625 bLink, bRoam, bScan);
\r
3626 CL_PRINTF(cliBuf);
\r
3628 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_UNDER_5G, &bWifiUnder5G);
\r
3629 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
\r
3630 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);
\r
3631 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_TRAFFIC_DIRECTION, &wifiTrafficDir);
\r
3632 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s / %s/ %s ", "Wifi status", \
\r
3633 (bWifiUnder5G? "5G":"2.4G"),
\r
3634 ((BTC_WIFI_BW_LEGACY==wifiBw)? "Legacy": (((BTC_WIFI_BW_HT40==wifiBw)? "HT40":"HT20"))),
\r
3635 ((!bWifiBusy)? "idle": ((BTC_WIFI_TRAFFIC_TX==wifiTrafficDir)? "uplink":"downlink")));
\r
3636 CL_PRINTF(cliBuf);
\r
3638 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = [%s/ %d/ %d] ", "BT [status/ rssi/ retryCnt]", \
\r
3639 ((pBtCoexist->btInfo.bBtDisabled)? ("disabled"): ((pCoexSta->bC2hBtInquiryPage)?("inquiry/page scan"):((BT_8723B_2ANT_BT_STATUS_NON_CONNECTED_IDLE == pCoexDm->btStatus)? "non-connected idle":
\r
3640 ( (BT_8723B_2ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus)? "connected-idle":"busy")))),
\r
3641 pCoexSta->btRssi, pCoexSta->btRetryCnt);
\r
3642 CL_PRINTF(cliBuf);
\r
3644 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d / %d / %d", "SCO/HID/PAN/A2DP", \
\r
3645 pBtLinkInfo->bScoExist, pBtLinkInfo->bHidExist, pBtLinkInfo->bPanExist, pBtLinkInfo->bA2dpExist);
\r
3646 CL_PRINTF(cliBuf);
\r
3647 pBtCoexist->fBtcDispDbgMsg(pBtCoexist, BTC_DBG_DISP_BT_LINK_INFO);
\r
3649 btInfoExt = pCoexSta->btInfoExt;
\r
3650 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s", "BT Info A2DP rate", \
\r
3651 (btInfoExt&BIT0)? "Basic rate":"EDR rate");
\r
3652 CL_PRINTF(cliBuf);
\r
3654 for(i=0; i<BT_INFO_SRC_8723B_2ANT_MAX; i++)
\r
3656 if(pCoexSta->btInfoC2hCnt[i])
\r
3658 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %02x %02x %02x %02x %02x %02x %02x(%d)", GLBtInfoSrc8723b2Ant[i], \
\r
3659 pCoexSta->btInfoC2h[i][0], pCoexSta->btInfoC2h[i][1],
\r
3660 pCoexSta->btInfoC2h[i][2], pCoexSta->btInfoC2h[i][3],
\r
3661 pCoexSta->btInfoC2h[i][4], pCoexSta->btInfoC2h[i][5],
\r
3662 pCoexSta->btInfoC2h[i][6], pCoexSta->btInfoC2hCnt[i]);
\r
3663 CL_PRINTF(cliBuf);
\r
3667 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s/%s", "PS state, IPS/LPS", \
\r
3668 ((pCoexSta->bUnderIps? "IPS ON":"IPS OFF")),
\r
3669 ((pCoexSta->bUnderLps? "LPS ON":"LPS OFF")));
\r
3670 CL_PRINTF(cliBuf);
\r
3671 pBtCoexist->fBtcDispDbgMsg(pBtCoexist, BTC_DBG_DISP_FW_PWR_MODE_CMD);
\r
3674 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Sw mechanism]============");
\r
3675 CL_PRINTF(cliBuf);
\r
3676 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d/ %d ", "SM1[ShRf/ LpRA/ LimDig]", \
\r
3677 pCoexDm->bCurRfRxLpfShrink, pCoexDm->bCurLowPenaltyRa, pCoexDm->bLimitedDig);
\r
3678 CL_PRINTF(cliBuf);
\r
3679 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d/ %d(0x%x) ", "SM2[AgcT/ AdcB/ SwDacSwing(lvl)]", \
\r
3680 pCoexDm->bCurAgcTableEn, pCoexDm->bCurAdcBackOff, pCoexDm->bCurDacSwingOn, pCoexDm->curDacSwingLvl);
\r
3681 CL_PRINTF(cliBuf);
\r
3684 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Fw mechanism]============");
\r
3685 CL_PRINTF(cliBuf);
\r
3687 psTdmaCase = pCoexDm->curPsTdma;
\r
3688 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %02x %02x %02x %02x %02x case-%d (auto:%d)", "PS TDMA", \
\r
3689 pCoexDm->psTdmaPara[0], pCoexDm->psTdmaPara[1],
\r
3690 pCoexDm->psTdmaPara[2], pCoexDm->psTdmaPara[3],
\r
3691 pCoexDm->psTdmaPara[4], psTdmaCase, pCoexDm->bAutoTdmaAdjust);
\r
3692 CL_PRINTF(cliBuf);
\r
3694 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d ", "DecBtPwr/ IgnWlanAct", \
\r
3695 pCoexDm->bCurDecBtPwr, pCoexDm->bCurIgnoreWlanAct);
\r
3696 CL_PRINTF(cliBuf);
\r
3699 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Hw setting]============");
\r
3700 CL_PRINTF(cliBuf);
\r
3702 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "RF-A, 0x1e initVal", \
\r
3703 pCoexDm->btRf0x1eBackup);
\r
3704 CL_PRINTF(cliBuf);
\r
3706 u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x778);
\r
3707 u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x880);
\r
3708 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x", "0x778/0x880[29:25]", \
\r
3709 u1Tmp[0], (u4Tmp[0]&0x3e000000) >> 25);
\r
3710 CL_PRINTF(cliBuf);
\r
3713 u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x948);
\r
3714 u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x67);
\r
3715 u1Tmp[1] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x765);
\r
3716 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x/ 0x%x", "0x948/ 0x67[5] / 0x765", \
\r
3717 u4Tmp[0], ((u1Tmp[0]&0x20)>> 5), u1Tmp[1]);
\r
3718 CL_PRINTF(cliBuf);
\r
3720 u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x92c);
\r
3721 u4Tmp[1] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x930);
\r
3722 u4Tmp[2] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x944);
\r
3723 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x/ 0x%x", "0x92c[1:0]/ 0x930[7:0]/0x944[1:0]", \
\r
3724 u4Tmp[0]&0x3, u4Tmp[1]&0xff, u4Tmp[2]&0x3);
\r
3725 CL_PRINTF(cliBuf);
\r
3728 u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x39);
\r
3729 u1Tmp[1] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x40);
\r
3730 u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x4c);
\r
3731 u1Tmp[2] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x64);
\r
3732 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x/ 0x%x/ 0x%x", "0x38[11]/0x40/0x4c[24:23]/0x64[0]", \
\r
3733 ((u1Tmp[0] & 0x8)>>3), u1Tmp[1], ((u4Tmp[0]&0x01800000)>>23), u1Tmp[2]&0x1);
\r
3734 CL_PRINTF(cliBuf);
\r
3736 u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x550);
\r
3737 u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x522);
\r
3738 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x", "0x550(bcn ctrl)/0x522", \
\r
3739 u4Tmp[0], u1Tmp[0]);
\r
3740 CL_PRINTF(cliBuf);
\r
3742 u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0xc50);
\r
3743 u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x49c);
\r
3744 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x", "0xc50(dig)/0x49c(null-drop)", \
\r
3745 u4Tmp[0]&0xff, u1Tmp[0]);
\r
3746 CL_PRINTF(cliBuf);
\r
3748 u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0xda0);
\r
3749 u4Tmp[1] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0xda4);
\r
3750 u4Tmp[2] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0xda8);
\r
3751 u4Tmp[3] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0xcf0);
\r
3753 u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0xa5b);
\r
3754 u1Tmp[1] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0xa5c);
\r
3756 faOfdm = ((u4Tmp[0]&0xffff0000) >> 16) + ((u4Tmp[1]&0xffff0000) >> 16) + (u4Tmp[1] & 0xffff) + (u4Tmp[2] & 0xffff) + \
\r
3757 ((u4Tmp[3]&0xffff0000) >> 16) + (u4Tmp[3] & 0xffff) ;
\r
3758 faCck = (u1Tmp[0] << 8) + u1Tmp[1];
\r
3760 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x/ 0x%x", "OFDM-CCA/OFDM-FA/CCK-FA", \
\r
3761 u4Tmp[0]&0xffff, faOfdm, faCck);
\r
3762 CL_PRINTF(cliBuf);
\r
3764 u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x6c0);
\r
3765 u4Tmp[1] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x6c4);
\r
3766 u4Tmp[2] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x6c8);
\r
3767 u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x6cc);
\r
3768 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x/ 0x%x/ 0x%x", "0x6c0/0x6c4/0x6c8/0x6cc(coexTable)", \
\r
3769 u4Tmp[0], u4Tmp[1], u4Tmp[2], u1Tmp[0]);
\r
3770 CL_PRINTF(cliBuf);
\r
3772 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d", "0x770(high-pri rx/tx)", \
\r
3773 pCoexSta->highPriorityRx, pCoexSta->highPriorityTx);
\r
3774 CL_PRINTF(cliBuf);
\r
3775 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d", "0x774(low-pri rx/tx)", \
\r
3776 pCoexSta->lowPriorityRx, pCoexSta->lowPriorityTx);
\r
3777 CL_PRINTF(cliBuf);
\r
3778 #if(BT_AUTO_REPORT_ONLY_8723B_2ANT == 1)
\r
3779 halbtc8723b2ant_MonitorBtCtr(pBtCoexist);
\r
3781 pBtCoexist->fBtcDispDbgMsg(pBtCoexist, BTC_DBG_DISP_COEX_STATISTICS);
\r
3786 EXhalbtc8723b2ant_IpsNotify(
\r
3787 IN PBTC_COEXIST pBtCoexist,
\r
3791 if(BTC_IPS_ENTER == type)
\r
3793 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], IPS ENTER notify\n"));
\r
3794 pCoexSta->bUnderIps = TRUE;
\r
3795 halbtc8723b2ant_WifiOffHwCfg(pBtCoexist);
\r
3796 halbtc8723b2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);
\r
3797 halbtc8723b2ant_CoexAllOff(pBtCoexist);
\r
3799 else if(BTC_IPS_LEAVE == type)
\r
3801 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], IPS LEAVE notify\n"));
\r
3802 pCoexSta->bUnderIps = FALSE;
\r
3803 EXhalbtc8723b2ant_InitHwConfig(pBtCoexist);
\r
3804 halbtc8723b2ant_InitCoexDm(pBtCoexist);
\r
3805 halbtc8723b2ant_QueryBtInfo(pBtCoexist);
\r
3810 EXhalbtc8723b2ant_LpsNotify(
\r
3811 IN PBTC_COEXIST pBtCoexist,
\r
3815 if(BTC_LPS_ENABLE == type)
\r
3817 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], LPS ENABLE notify\n"));
\r
3818 pCoexSta->bUnderLps = TRUE;
\r
3820 else if(BTC_LPS_DISABLE == type)
\r
3822 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], LPS DISABLE notify\n"));
\r
3823 pCoexSta->bUnderLps = FALSE;
\r
3828 EXhalbtc8723b2ant_ScanNotify(
\r
3829 IN PBTC_COEXIST pBtCoexist,
\r
3833 if(BTC_SCAN_START == type)
\r
3835 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN START notify\n"));
\r
3837 else if(BTC_SCAN_FINISH == type)
\r
3839 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN FINISH notify\n"));
\r
3844 EXhalbtc8723b2ant_ConnectNotify(
\r
3845 IN PBTC_COEXIST pBtCoexist,
\r
3849 if(BTC_ASSOCIATE_START == type)
\r
3851 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT START notify\n"));
\r
3853 else if(BTC_ASSOCIATE_FINISH == type)
\r
3855 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT FINISH notify\n"));
\r
3860 EXhalbtc8723b2ant_MediaStatusNotify(
\r
3861 IN PBTC_COEXIST pBtCoexist,
\r
3865 u1Byte H2C_Parameter[3] ={0};
\r
3867 u1Byte wifiCentralChnl;
\r
3869 if(BTC_MEDIA_CONNECT == type)
\r
3871 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], MEDIA connect notify\n"));
\r
3875 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], MEDIA disconnect notify\n"));
\r
3878 // only 2.4G we need to inform bt the chnl mask
\r
3879 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_WIFI_CENTRAL_CHNL, &wifiCentralChnl);
\r
3880 if( (BTC_MEDIA_CONNECT == type) &&
\r
3881 (wifiCentralChnl <= 14) )
\r
3883 H2C_Parameter[0] = 0x1;
\r
3884 H2C_Parameter[1] = wifiCentralChnl;
\r
3885 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
\r
3886 if(BTC_WIFI_BW_HT40 == wifiBw)
\r
3887 H2C_Parameter[2] = 0x30;
\r
3889 H2C_Parameter[2] = 0x20;
\r
3892 pCoexDm->wifiChnlInfo[0] = H2C_Parameter[0];
\r
3893 pCoexDm->wifiChnlInfo[1] = H2C_Parameter[1];
\r
3894 pCoexDm->wifiChnlInfo[2] = H2C_Parameter[2];
\r
3896 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], FW write 0x66=0x%x\n",
\r
3897 H2C_Parameter[0]<<16|H2C_Parameter[1]<<8|H2C_Parameter[2]));
\r
3899 pBtCoexist->fBtcFillH2c(pBtCoexist, 0x66, 3, H2C_Parameter);
\r
3903 EXhalbtc8723b2ant_SpecialPacketNotify(
\r
3904 IN PBTC_COEXIST pBtCoexist,
\r
3908 if(type == BTC_PACKET_DHCP)
\r
3910 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], DHCP Packet notify\n"));
\r
3915 EXhalbtc8723b2ant_BtInfoNotify(
\r
3916 IN PBTC_COEXIST pBtCoexist,
\r
3917 IN pu1Byte tmpBuf,
\r
3921 PBTC_BT_LINK_INFO pBtLinkInfo=&pBtCoexist->btLinkInfo;
\r
3923 u1Byte i, rspSource=0;
\r
3924 BOOLEAN bBtBusy=FALSE, bLimitedDig=FALSE;
\r
3925 BOOLEAN bWifiConnected=FALSE;
\r
3926 static BOOLEAN bPreScoExist=FALSE;
\r
3927 u4Byte raMask=0x0;
\r
3929 pCoexSta->bC2hBtInfoReqSent = FALSE;
\r
3931 rspSource = tmpBuf[0]&0xf;
\r
3932 if(rspSource >= BT_INFO_SRC_8723B_2ANT_MAX)
\r
3933 rspSource = BT_INFO_SRC_8723B_2ANT_WIFI_FW;
\r
3934 pCoexSta->btInfoC2hCnt[rspSource]++;
\r
3936 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Bt info[%d], length=%d, hex data=[", rspSource, length));
\r
3937 for(i=0; i<length; i++)
\r
3939 pCoexSta->btInfoC2h[rspSource][i] = tmpBuf[i];
\r
3941 btInfo = tmpBuf[i];
\r
3944 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("0x%02x]\n", tmpBuf[i]));
\r
3948 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("0x%02x, ", tmpBuf[i]));
\r
3952 if(pBtCoexist->bManualControl)
\r
3954 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), return for Manual CTRL<===\n"));
\r
3958 if(BT_INFO_SRC_8723B_2ANT_WIFI_FW != rspSource)
\r
3960 pCoexSta->btRetryCnt = // [3:0]
\r
3961 pCoexSta->btInfoC2h[rspSource][2]&0xf;
\r
3963 pCoexSta->btRssi =
\r
3964 pCoexSta->btInfoC2h[rspSource][3]*2+10;
\r
3966 pCoexSta->btInfoExt =
\r
3967 pCoexSta->btInfoC2h[rspSource][4];
\r
3969 if (pCoexSta->btInfoC2h[rspSource][2] & 0x40)
\r
3971 /* BT into is responded by BT FW and BT RF REG 0x3C != 0x01 => Need to switch GNT_BT */
\r
3972 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Switch GNT_BT since BT RF REG 0x3C != 0x01\n"));
\r
3973 pBtCoexist->fBtcSetBtReg(pBtCoexist, 0, 0x3c, 0x01);
\r
3976 // Here we need to resend some wifi info to BT
\r
3977 // because bt is reset and loss of the info.
\r
3978 if( (pCoexSta->btInfoExt & BIT1) )
\r
3980 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT ext info bit1 check, send wifi BW&Chnl to BT!!\n"));
\r
3981 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);
\r
3982 if(bWifiConnected)
\r
3984 EXhalbtc8723b2ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_CONNECT);
\r
3988 EXhalbtc8723b2ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_DISCONNECT);
\r
3992 if( (pCoexSta->btInfoExt & BIT3) )
\r
3994 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT ext info bit3 check, set BT NOT to ignore Wlan active!!\n"));
\r
3995 halbtc8723b2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, FALSE);
\r
3999 // BT already NOT ignore Wlan active, do nothing here.
\r
4001 #if(BT_AUTO_REPORT_ONLY_8723B_2ANT == 0)
\r
4002 if( (pCoexSta->btInfoExt & BIT4) )
\r
4004 // BT auto report already enabled, do nothing
\r
4008 halbtc8723b2ant_BtAutoReport(pBtCoexist, FORCE_EXEC, TRUE);
\r
4013 // check BIT2 first ==> check if bt is under inquiry or page scan
\r
4014 if(btInfo & BT_INFO_8723B_2ANT_B_INQ_PAGE)
\r
4015 pCoexSta->bC2hBtInquiryPage = TRUE;
\r
4017 pCoexSta->bC2hBtInquiryPage = FALSE;
\r
4019 // set link exist status
\r
4020 if(!(btInfo&BT_INFO_8723B_2ANT_B_CONNECTION))
\r
4022 pCoexSta->bBtLinkExist = FALSE;
\r
4023 pCoexSta->bPanExist = FALSE;
\r
4024 pCoexSta->bA2dpExist = FALSE;
\r
4025 pCoexSta->bHidExist = FALSE;
\r
4026 pCoexSta->bScoExist = FALSE;
\r
4028 else // connection exists
\r
4030 pCoexSta->bBtLinkExist = TRUE;
\r
4031 if(btInfo & BT_INFO_8723B_2ANT_B_FTP)
\r
4032 pCoexSta->bPanExist = TRUE;
\r
4034 pCoexSta->bPanExist = FALSE;
\r
4035 if(btInfo & BT_INFO_8723B_2ANT_B_A2DP)
\r
4036 pCoexSta->bA2dpExist = TRUE;
\r
4038 pCoexSta->bA2dpExist = FALSE;
\r
4039 if(btInfo & BT_INFO_8723B_2ANT_B_HID)
\r
4040 pCoexSta->bHidExist = TRUE;
\r
4042 pCoexSta->bHidExist = FALSE;
\r
4043 if(btInfo & BT_INFO_8723B_2ANT_B_SCO_ESCO)
\r
4044 pCoexSta->bScoExist = TRUE;
\r
4046 pCoexSta->bScoExist = FALSE;
\r
4049 halbtc8723b2ant_UpdateBtLinkInfo(pBtCoexist);
\r
4051 if(!(btInfo&BT_INFO_8723B_2ANT_B_CONNECTION))
\r
4053 pCoexDm->btStatus = BT_8723B_2ANT_BT_STATUS_NON_CONNECTED_IDLE;
\r
4054 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), BT Non-Connected idle!!!\n"));
\r
4056 else if(btInfo == BT_INFO_8723B_2ANT_B_CONNECTION) // connection exists but no busy
\r
4058 pCoexDm->btStatus = BT_8723B_2ANT_BT_STATUS_CONNECTED_IDLE;
\r
4059 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), BT Connected-idle!!!\n"));
\r
4061 else if((btInfo&BT_INFO_8723B_2ANT_B_SCO_ESCO) ||
\r
4062 (btInfo&BT_INFO_8723B_2ANT_B_SCO_BUSY))
\r
4064 pCoexDm->btStatus = BT_8723B_2ANT_BT_STATUS_SCO_BUSY;
\r
4065 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), BT SCO busy!!!\n"));
\r
4067 else if(btInfo&BT_INFO_8723B_2ANT_B_ACL_BUSY)
\r
4069 pCoexDm->btStatus = BT_8723B_2ANT_BT_STATUS_ACL_BUSY;
\r
4070 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), BT ACL busy!!!\n"));
\r
4074 pCoexDm->btStatus = BT_8723B_2ANT_BT_STATUS_MAX;
\r
4075 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), BT Non-Defined state!!!\n"));
\r
4078 if( (BT_8723B_2ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus) ||
\r
4079 (BT_8723B_2ANT_BT_STATUS_SCO_BUSY == pCoexDm->btStatus) ||
\r
4080 (BT_8723B_2ANT_BT_STATUS_ACL_SCO_BUSY == pCoexDm->btStatus) )
\r
4083 bLimitedDig = TRUE;
\r
4088 bLimitedDig = FALSE;
\r
4091 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_TRAFFIC_BUSY, &bBtBusy);
\r
4093 pCoexDm->bLimitedDig = bLimitedDig;
\r
4094 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_LIMITED_DIG, &bLimitedDig);
\r
4096 halbtc8723b2ant_RunCoexistMechanism(pBtCoexist);
\r
4100 EXhalbtc8723b2ant_HaltNotify(
\r
4101 IN PBTC_COEXIST pBtCoexist
\r
4104 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Halt notify\n"));
\r
4106 halbtc8723b2ant_WifiOffHwCfg(pBtCoexist);
\r
4107 pBtCoexist->fBtcSetBtReg(pBtCoexist, 0, 0x3c, 0x15); //BT goto standby while GNT_BT 1-->0
\r
4108 halbtc8723b2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);
\r
4110 EXhalbtc8723b2ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_DISCONNECT);
\r
4114 EXhalbtc8723b2ant_Periodical(
\r
4115 IN PBTC_COEXIST pBtCoexist
\r
4118 static u1Byte disVerInfoCnt=0;
\r
4119 u4Byte fwVer=0, btPatchVer=0;
\r
4120 PBTC_BOARD_INFO pBoardInfo=&pBtCoexist->boardInfo;
\r
4121 PBTC_STACK_INFO pStackInfo=&pBtCoexist->stackInfo;
\r
4123 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], ==========================Periodical===========================\n"));
\r
4125 if(disVerInfoCnt <= 5)
\r
4127 disVerInfoCnt += 1;
\r
4128 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], ****************************************************************\n"));
\r
4129 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], Ant PG Num/ Ant Mech/ Ant Pos = %d/ %d/ %d\n", \
\r
4130 pBoardInfo->pgAntNum, pBoardInfo->btdmAntNum, pBoardInfo->btdmAntPos));
\r
4131 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], BT stack/ hci ext ver = %s / %d\n", \
\r
4132 ((pStackInfo->bProfileNotified)? "Yes":"No"), pStackInfo->hciVersion));
\r
4133 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_BT_PATCH_VER, &btPatchVer);
\r
4134 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);
\r
4135 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], CoexVer/ FwVer/ PatchVer = %d_%x/ 0x%x/ 0x%x(%d)\n", \
\r
4136 GLCoexVerDate8723b2Ant, GLCoexVer8723b2Ant, fwVer, btPatchVer, btPatchVer));
\r
4137 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], ****************************************************************\n"));
\r
4140 #if(BT_AUTO_REPORT_ONLY_8723B_2ANT == 0)
\r
4141 halbtc8723b2ant_QueryBtInfo(pBtCoexist);
\r
4142 halbtc8723b2ant_MonitorBtCtr(pBtCoexist);
\r
4143 halbtc8723b2ant_MonitorBtEnableDisable(pBtCoexist);
\r
4145 if( halbtc8723b2ant_IsWifiStatusChanged(pBtCoexist) ||
\r
4146 pCoexDm->bAutoTdmaAdjust)
\r
4148 halbtc8723b2ant_RunCoexistMechanism(pBtCoexist);
\r