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=20140730;
\r
31 u4Byte GLCoexVer8723b2Ant=0x42;
\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_LimitedRx(
\r
308 IN PBTC_COEXIST pBtCoexist,
\r
309 IN BOOLEAN bForceExec,
\r
310 IN BOOLEAN bRejApAggPkt,
\r
311 IN BOOLEAN bBtCtrlAggBufSize,
\r
312 IN u1Byte aggBufSize
\r
315 BOOLEAN bRejectRxAgg=bRejApAggPkt;
\r
316 BOOLEAN bBtCtrlRxAggSize=bBtCtrlAggBufSize;
\r
317 u1Byte rxAggSize=aggBufSize;
\r
319 //============================================
\r
320 // Rx Aggregation related setting
\r
321 //============================================
\r
322 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_TO_REJ_AP_AGG_PKT, &bRejectRxAgg);
\r
323 // decide BT control aggregation buf size or not
\r
324 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_CTRL_AGG_SIZE, &bBtCtrlRxAggSize);
\r
325 // aggregation buf size, only work when BT control Rx aggregation size.
\r
326 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_U1_AGG_BUF_SIZE, &rxAggSize);
\r
327 // real update aggregation setting
\r
328 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_AGGREGATE_CTRL, NULL);
\r
332 halbtc8723b2ant_MonitorBtCtr(
\r
333 IN PBTC_COEXIST pBtCoexist
\r
336 u4Byte regHPTxRx, regLPTxRx, u4Tmp;
\r
337 u4Byte regHPTx=0, regHPRx=0, regLPTx=0, regLPRx=0;
\r
343 u4Tmp = pBtCoexist->fBtcRead4Byte(pBtCoexist, regHPTxRx);
\r
344 regHPTx = u4Tmp & bMaskLWord;
\r
345 regHPRx = (u4Tmp & bMaskHWord)>>16;
\r
347 u4Tmp = pBtCoexist->fBtcRead4Byte(pBtCoexist, regLPTxRx);
\r
348 regLPTx = u4Tmp & bMaskLWord;
\r
349 regLPRx = (u4Tmp & bMaskHWord)>>16;
\r
351 pCoexSta->highPriorityTx = regHPTx;
\r
352 pCoexSta->highPriorityRx = regHPRx;
\r
353 pCoexSta->lowPriorityTx = regLPTx;
\r
354 pCoexSta->lowPriorityRx = regLPRx;
\r
356 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], High Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n",
\r
357 regHPTxRx, regHPTx, regHPTx, regHPRx, regHPRx));
\r
358 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], Low Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n",
\r
359 regLPTxRx, regLPTx, regLPTx, regLPRx, regLPRx));
\r
362 pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x76e, 0xc);
\r
366 halbtc8723b2ant_MonitorWiFiCtr(
\r
367 IN PBTC_COEXIST pBtCoexist
\r
373 BOOLEAN bWifiBusy = FALSE, bWifiUnderBMode = FALSE;
\r
374 static u1Byte nCCKLockCounter = 0;
\r
377 if (pCoexSta->bUnderIps)
\r
379 pCoexSta->nCRCOK_CCK = 0;
\r
380 pCoexSta->nCRCOK_11g = 0;
\r
381 pCoexSta->nCRCOK_11n = 0;
\r
382 pCoexSta->nCRCOK_11nAgg = 0;
\r
384 pCoexSta->nCRCErr_CCK = 0;
\r
385 pCoexSta->nCRCErr_11g = 0;
\r
386 pCoexSta->nCRCErr_11n = 0;
\r
387 pCoexSta->nCRCErr_11nAgg = 0;
\r
391 pCoexSta->nCRCOK_CCK = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0xf88);
\r
392 pCoexSta->nCRCOK_11g = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0xf94);
\r
393 pCoexSta->nCRCOK_11n = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0xf90);
\r
394 pCoexSta->nCRCOK_11nAgg= pBtCoexist->fBtcRead2Byte(pBtCoexist, 0xfb8);
\r
396 pCoexSta->nCRCErr_CCK = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0xf84);
\r
397 pCoexSta->nCRCErr_11g = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0xf96);
\r
398 pCoexSta->nCRCErr_11n = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0xf92);
\r
399 pCoexSta->nCRCErr_11nAgg = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0xfba);
\r
403 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xf16, 0x1, 0x1);
\r
404 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xf16, 0x1, 0x0);
\r
408 halbtc8723b2ant_QueryBtInfo(
\r
409 IN PBTC_COEXIST pBtCoexist
\r
412 u1Byte H2C_Parameter[1] ={0};
\r
414 pCoexSta->bC2hBtInfoReqSent = TRUE;
\r
416 H2C_Parameter[0] |= BIT0; // trigger
\r
418 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], Query Bt Info, FW write 0x61=0x%x\n",
\r
419 H2C_Parameter[0]));
\r
421 pBtCoexist->fBtcFillH2c(pBtCoexist, 0x61, 1, H2C_Parameter);
\r
425 halbtc8723b2ant_IsWifiStatusChanged(
\r
426 IN PBTC_COEXIST pBtCoexist
\r
429 static BOOLEAN bPreWifiBusy=FALSE, bPreUnder4way=FALSE, bPreBtHsOn=FALSE;
\r
430 BOOLEAN bWifiBusy=FALSE, bUnder4way=FALSE, bBtHsOn=FALSE;
\r
431 BOOLEAN bWifiConnected=FALSE;
\r
432 u1Byte wifiRssiState=BTC_RSSI_STATE_HIGH;
\r
435 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);
\r
436 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);
\r
437 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);
\r
438 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_4_WAY_PROGRESS, &bUnder4way);
\r
442 if(bWifiBusy != bPreWifiBusy)
\r
444 bPreWifiBusy = bWifiBusy;
\r
447 if(bUnder4way != bPreUnder4way)
\r
449 bPreUnder4way = bUnder4way;
\r
452 if(bBtHsOn != bPreBtHsOn)
\r
454 bPreBtHsOn = bBtHsOn;
\r
459 wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist,3, 2, BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES, 0);
\r
461 if ( (BTC_RSSI_STATE_HIGH ==wifiRssiState ) || (BTC_RSSI_STATE_LOW ==wifiRssiState ))
\r
472 halbtc8723b2ant_UpdateBtLinkInfo(
\r
473 IN PBTC_COEXIST pBtCoexist
\r
476 PBTC_STACK_INFO pStackInfo=&pBtCoexist->stackInfo;
\r
477 PBTC_BT_LINK_INFO pBtLinkInfo=&pBtCoexist->btLinkInfo;
\r
478 BOOLEAN bBtHsOn=FALSE;
\r
480 #if(BT_AUTO_REPORT_ONLY_8723B_2ANT == 1) // profile from bt patch
\r
481 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);
\r
483 pBtLinkInfo->bBtLinkExist = pCoexSta->bBtLinkExist;
\r
484 pBtLinkInfo->bScoExist = pCoexSta->bScoExist;
\r
485 pBtLinkInfo->bA2dpExist = pCoexSta->bA2dpExist;
\r
486 pBtLinkInfo->bPanExist = pCoexSta->bPanExist;
\r
487 pBtLinkInfo->bHidExist = pCoexSta->bHidExist;
\r
489 // work around for HS mode.
\r
492 pBtLinkInfo->bPanExist = TRUE;
\r
493 pBtLinkInfo->bBtLinkExist = TRUE;
\r
495 #else // profile from bt stack
\r
496 pBtLinkInfo->bBtLinkExist = pStackInfo->bBtLinkExist;
\r
497 pBtLinkInfo->bScoExist = pStackInfo->bScoExist;
\r
498 pBtLinkInfo->bA2dpExist = pStackInfo->bA2dpExist;
\r
499 pBtLinkInfo->bPanExist = pStackInfo->bPanExist;
\r
500 pBtLinkInfo->bHidExist = pStackInfo->bHidExist;
\r
502 //for win-8 stack HID report error
\r
503 if(!pStackInfo->bHidExist)
\r
504 pStackInfo->bHidExist = pCoexSta->bHidExist; //sync BTInfo with BT firmware and stack
\r
505 // when stack HID report error, here we use the info from bt fw.
\r
506 if(!pStackInfo->bBtLinkExist)
\r
507 pStackInfo->bBtLinkExist = pCoexSta->bBtLinkExist;
\r
509 // check if Sco only
\r
510 if( pBtLinkInfo->bScoExist &&
\r
511 !pBtLinkInfo->bA2dpExist &&
\r
512 !pBtLinkInfo->bPanExist &&
\r
513 !pBtLinkInfo->bHidExist )
\r
514 pBtLinkInfo->bScoOnly = TRUE;
\r
516 pBtLinkInfo->bScoOnly = FALSE;
\r
518 // check if A2dp only
\r
519 if( !pBtLinkInfo->bScoExist &&
\r
520 pBtLinkInfo->bA2dpExist &&
\r
521 !pBtLinkInfo->bPanExist &&
\r
522 !pBtLinkInfo->bHidExist )
\r
523 pBtLinkInfo->bA2dpOnly = TRUE;
\r
525 pBtLinkInfo->bA2dpOnly = FALSE;
\r
527 // check if Pan only
\r
528 if( !pBtLinkInfo->bScoExist &&
\r
529 !pBtLinkInfo->bA2dpExist &&
\r
530 pBtLinkInfo->bPanExist &&
\r
531 !pBtLinkInfo->bHidExist )
\r
532 pBtLinkInfo->bPanOnly = TRUE;
\r
534 pBtLinkInfo->bPanOnly = FALSE;
\r
536 // check if Hid only
\r
537 if( !pBtLinkInfo->bScoExist &&
\r
538 !pBtLinkInfo->bA2dpExist &&
\r
539 !pBtLinkInfo->bPanExist &&
\r
540 pBtLinkInfo->bHidExist )
\r
541 pBtLinkInfo->bHidOnly = TRUE;
\r
543 pBtLinkInfo->bHidOnly = FALSE;
\r
547 halbtc8723b2ant_ActionAlgorithm(
\r
548 IN PBTC_COEXIST pBtCoexist
\r
551 PBTC_BT_LINK_INFO pBtLinkInfo=&pBtCoexist->btLinkInfo;
\r
552 BOOLEAN bBtHsOn=FALSE;
\r
553 u1Byte algorithm=BT_8723B_2ANT_COEX_ALGO_UNDEFINED;
\r
554 u1Byte numOfDiffProfile=0;
\r
556 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);
\r
558 if(!pBtLinkInfo->bBtLinkExist)
\r
560 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], No BT link exists!!!\n"));
\r
564 if(pBtLinkInfo->bScoExist)
\r
565 numOfDiffProfile++;
\r
566 if(pBtLinkInfo->bHidExist)
\r
567 numOfDiffProfile++;
\r
568 if(pBtLinkInfo->bPanExist)
\r
569 numOfDiffProfile++;
\r
570 if(pBtLinkInfo->bA2dpExist)
\r
571 numOfDiffProfile++;
\r
573 if(numOfDiffProfile == 1)
\r
575 if(pBtLinkInfo->bScoExist)
\r
577 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO only\n"));
\r
578 algorithm = BT_8723B_2ANT_COEX_ALGO_SCO;
\r
582 if(pBtLinkInfo->bHidExist)
\r
584 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID only\n"));
\r
585 algorithm = BT_8723B_2ANT_COEX_ALGO_HID;
\r
587 else if(pBtLinkInfo->bA2dpExist)
\r
589 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP only\n"));
\r
590 algorithm = BT_8723B_2ANT_COEX_ALGO_A2DP;
\r
592 else if(pBtLinkInfo->bPanExist)
\r
596 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], PAN(HS) only\n"));
\r
597 algorithm = BT_8723B_2ANT_COEX_ALGO_PANHS;
\r
601 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], PAN(EDR) only\n"));
\r
602 algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR;
\r
607 else if(numOfDiffProfile == 2)
\r
609 if(pBtLinkInfo->bScoExist)
\r
611 if(pBtLinkInfo->bHidExist)
\r
613 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID\n"));
\r
614 algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
\r
616 else if(pBtLinkInfo->bA2dpExist)
\r
618 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + A2DP ==> SCO\n"));
\r
619 algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
\r
621 else if(pBtLinkInfo->bPanExist)
\r
625 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + PAN(HS)\n"));
\r
626 algorithm = BT_8723B_2ANT_COEX_ALGO_SCO;
\r
630 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + PAN(EDR)\n"));
\r
631 algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
\r
637 if( pBtLinkInfo->bHidExist &&
\r
638 pBtLinkInfo->bA2dpExist )
\r
641 if(pStackInfo->numOfHid >= 2)
\r
643 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID*2 + A2DP\n"));
\r
644 algorithm = BT_8723B_2ANT_COEX_ALGO_HID_A2DP_PANEDR;
\r
649 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP\n"));
\r
650 algorithm = BT_8723B_2ANT_COEX_ALGO_HID_A2DP;
\r
653 else if( pBtLinkInfo->bHidExist &&
\r
654 pBtLinkInfo->bPanExist )
\r
658 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + PAN(HS)\n"));
\r
659 algorithm = BT_8723B_2ANT_COEX_ALGO_HID;
\r
663 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + PAN(EDR)\n"));
\r
664 algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
\r
667 else if( pBtLinkInfo->bPanExist &&
\r
668 pBtLinkInfo->bA2dpExist )
\r
672 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP + PAN(HS)\n"));
\r
673 algorithm = BT_8723B_2ANT_COEX_ALGO_A2DP_PANHS;
\r
677 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP + PAN(EDR)\n"));
\r
678 algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_A2DP;
\r
683 else if(numOfDiffProfile == 3)
\r
685 if(pBtLinkInfo->bScoExist)
\r
687 if( pBtLinkInfo->bHidExist &&
\r
688 pBtLinkInfo->bA2dpExist )
\r
690 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + A2DP ==> HID\n"));
\r
691 algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
\r
693 else if( pBtLinkInfo->bHidExist &&
\r
694 pBtLinkInfo->bPanExist )
\r
698 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + PAN(HS)\n"));
\r
699 algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
\r
703 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + PAN(EDR)\n"));
\r
704 algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
\r
707 else if( pBtLinkInfo->bPanExist &&
\r
708 pBtLinkInfo->bA2dpExist )
\r
712 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + A2DP + PAN(HS)\n"));
\r
713 algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
\r
717 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + A2DP + PAN(EDR) ==> HID\n"));
\r
718 algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
\r
724 if( pBtLinkInfo->bHidExist &&
\r
725 pBtLinkInfo->bPanExist &&
\r
726 pBtLinkInfo->bA2dpExist )
\r
730 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP + PAN(HS)\n"));
\r
731 algorithm = BT_8723B_2ANT_COEX_ALGO_HID_A2DP;
\r
735 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP + PAN(EDR)\n"));
\r
736 algorithm = BT_8723B_2ANT_COEX_ALGO_HID_A2DP_PANEDR;
\r
741 else if(numOfDiffProfile >= 3)
\r
743 if(pBtLinkInfo->bScoExist)
\r
745 if( pBtLinkInfo->bHidExist &&
\r
746 pBtLinkInfo->bPanExist &&
\r
747 pBtLinkInfo->bA2dpExist )
\r
751 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Error!!! SCO + HID + A2DP + PAN(HS)\n"));
\r
756 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + A2DP + PAN(EDR)==>PAN(EDR)+HID\n"));
\r
757 algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
\r
767 halbtc8723b2ant_SetFwDacSwingLevel(
\r
768 IN PBTC_COEXIST pBtCoexist,
\r
769 IN u1Byte dacSwingLvl
\r
772 u1Byte H2C_Parameter[1] ={0};
\r
774 // There are several type of dacswing
\r
775 // 0x18/ 0x10/ 0xc/ 0x8/ 0x4/ 0x6
\r
776 H2C_Parameter[0] = dacSwingLvl;
\r
778 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], Set Dac Swing Level=0x%x\n", dacSwingLvl));
\r
779 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], FW write 0x64=0x%x\n", H2C_Parameter[0]));
\r
781 pBtCoexist->fBtcFillH2c(pBtCoexist, 0x64, 1, H2C_Parameter);
\r
785 halbtc8723b2ant_SetFwDecBtPwr(
\r
786 IN PBTC_COEXIST pBtCoexist,
\r
787 IN u1Byte decBtPwrLvl
\r
790 u1Byte H2C_Parameter[1] ={0};
\r
792 H2C_Parameter[0] = decBtPwrLvl;
\r
794 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], decrease Bt Power level = %d, FW write 0x62=0x%x\n",
\r
795 decBtPwrLvl, H2C_Parameter[0]));
\r
797 pBtCoexist->fBtcFillH2c(pBtCoexist, 0x62, 1, H2C_Parameter);
\r
801 halbtc8723b2ant_DecBtPwr(
\r
802 IN PBTC_COEXIST pBtCoexist,
\r
803 IN BOOLEAN bForceExec,
\r
804 IN u1Byte decBtPwrLvl
\r
807 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s Dec BT power level = %d\n",
\r
808 (bForceExec? "force to":""), decBtPwrLvl));
\r
809 pCoexDm->curBtDecPwrLvl = decBtPwrLvl;
\r
813 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], preBtDecPwrLvl=%d, curBtDecPwrLvl=%d\n",
\r
814 pCoexDm->preBtDecPwrLvl, pCoexDm->curBtDecPwrLvl));
\r
816 if(pCoexDm->preBtDecPwrLvl == pCoexDm->curBtDecPwrLvl)
\r
819 halbtc8723b2ant_SetFwDecBtPwr(pBtCoexist, pCoexDm->curBtDecPwrLvl);
\r
821 pCoexDm->preBtDecPwrLvl = pCoexDm->curBtDecPwrLvl;
\r
825 halbtc8723b2ant_SetBtAutoReport(
\r
826 IN PBTC_COEXIST pBtCoexist,
\r
827 IN BOOLEAN bEnableAutoReport
\r
830 u1Byte H2C_Parameter[1] ={0};
\r
832 H2C_Parameter[0] = 0;
\r
834 if(bEnableAutoReport)
\r
836 H2C_Parameter[0] |= BIT0;
\r
839 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], BT FW auto report : %s, FW write 0x68=0x%x\n",
\r
840 (bEnableAutoReport? "Enabled!!":"Disabled!!"), H2C_Parameter[0]));
\r
842 pBtCoexist->fBtcFillH2c(pBtCoexist, 0x68, 1, H2C_Parameter);
\r
846 halbtc8723b2ant_BtAutoReport(
\r
847 IN PBTC_COEXIST pBtCoexist,
\r
848 IN BOOLEAN bForceExec,
\r
849 IN BOOLEAN bEnableAutoReport
\r
852 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s BT Auto report = %s\n",
\r
853 (bForceExec? "force to":""), ((bEnableAutoReport)? "Enabled":"Disabled")));
\r
854 pCoexDm->bCurBtAutoReport = bEnableAutoReport;
\r
858 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreBtAutoReport=%d, bCurBtAutoReport=%d\n",
\r
859 pCoexDm->bPreBtAutoReport, pCoexDm->bCurBtAutoReport));
\r
861 if(pCoexDm->bPreBtAutoReport == pCoexDm->bCurBtAutoReport)
\r
864 halbtc8723b2ant_SetBtAutoReport(pBtCoexist, pCoexDm->bCurBtAutoReport);
\r
866 pCoexDm->bPreBtAutoReport = pCoexDm->bCurBtAutoReport;
\r
870 halbtc8723b2ant_FwDacSwingLvl(
\r
871 IN PBTC_COEXIST pBtCoexist,
\r
872 IN BOOLEAN bForceExec,
\r
873 IN u1Byte fwDacSwingLvl
\r
876 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s set FW Dac Swing level = %d\n",
\r
877 (bForceExec? "force to":""), fwDacSwingLvl));
\r
878 pCoexDm->curFwDacSwingLvl = fwDacSwingLvl;
\r
882 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], preFwDacSwingLvl=%d, curFwDacSwingLvl=%d\n",
\r
883 pCoexDm->preFwDacSwingLvl, pCoexDm->curFwDacSwingLvl));
\r
885 if(pCoexDm->preFwDacSwingLvl == pCoexDm->curFwDacSwingLvl)
\r
889 halbtc8723b2ant_SetFwDacSwingLevel(pBtCoexist, pCoexDm->curFwDacSwingLvl);
\r
891 pCoexDm->preFwDacSwingLvl = pCoexDm->curFwDacSwingLvl;
\r
895 halbtc8723b2ant_SetSwRfRxLpfCorner(
\r
896 IN PBTC_COEXIST pBtCoexist,
\r
897 IN BOOLEAN bRxRfShrinkOn
\r
902 //Shrink RF Rx LPF corner
\r
903 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Shrink RF Rx LPF corner!!\n"));
\r
904 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, 0xffffc);
\r
908 //Resume RF Rx LPF corner
\r
909 // After initialized, we can use pCoexDm->btRf0x1eBackup
\r
910 if(pBtCoexist->bInitilized)
\r
912 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Resume RF Rx LPF corner!!\n"));
\r
913 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, pCoexDm->btRf0x1eBackup);
\r
919 halbtc8723b2ant_RfShrink(
\r
920 IN PBTC_COEXIST pBtCoexist,
\r
921 IN BOOLEAN bForceExec,
\r
922 IN BOOLEAN bRxRfShrinkOn
\r
925 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn Rx RF Shrink = %s\n",
\r
926 (bForceExec? "force to":""), ((bRxRfShrinkOn)? "ON":"OFF")));
\r
927 pCoexDm->bCurRfRxLpfShrink = bRxRfShrinkOn;
\r
931 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreRfRxLpfShrink=%d, bCurRfRxLpfShrink=%d\n",
\r
932 pCoexDm->bPreRfRxLpfShrink, pCoexDm->bCurRfRxLpfShrink));
\r
934 if(pCoexDm->bPreRfRxLpfShrink == pCoexDm->bCurRfRxLpfShrink)
\r
937 halbtc8723b2ant_SetSwRfRxLpfCorner(pBtCoexist, pCoexDm->bCurRfRxLpfShrink);
\r
939 pCoexDm->bPreRfRxLpfShrink = pCoexDm->bCurRfRxLpfShrink;
\r
943 halbtc8723b2ant_SetSwPenaltyTxRateAdaptive(
\r
944 IN PBTC_COEXIST pBtCoexist,
\r
945 IN BOOLEAN bLowPenaltyRa
\r
948 u1Byte H2C_Parameter[6] ={0};
\r
950 H2C_Parameter[0] = 0x6; // opCode, 0x6= Retry_Penalty
\r
954 H2C_Parameter[1] |= BIT0;
\r
955 H2C_Parameter[2] = 0x00; //normal rate except MCS7/6/5, OFDM54/48/36
\r
956 H2C_Parameter[3] = 0xf7; //MCS7 or OFDM54
\r
957 H2C_Parameter[4] = 0xf8; //MCS6 or OFDM48
\r
958 H2C_Parameter[5] = 0xf9; //MCS5 or OFDM36
\r
961 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], set WiFi Low-Penalty Retry: %s",
\r
962 (bLowPenaltyRa? "ON!!":"OFF!!")) );
\r
964 pBtCoexist->fBtcFillH2c(pBtCoexist, 0x69, 6, H2C_Parameter);
\r
968 halbtc8723b2ant_LowPenaltyRa(
\r
969 IN PBTC_COEXIST pBtCoexist,
\r
970 IN BOOLEAN bForceExec,
\r
971 IN BOOLEAN bLowPenaltyRa
\r
975 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn LowPenaltyRA = %s\n",
\r
976 (bForceExec? "force to":""), ((bLowPenaltyRa)? "ON":"OFF")));
\r
977 pCoexDm->bCurLowPenaltyRa = bLowPenaltyRa;
\r
981 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreLowPenaltyRa=%d, bCurLowPenaltyRa=%d\n",
\r
982 pCoexDm->bPreLowPenaltyRa, pCoexDm->bCurLowPenaltyRa));
\r
984 if(pCoexDm->bPreLowPenaltyRa == pCoexDm->bCurLowPenaltyRa)
\r
987 halbtc8723b2ant_SetSwPenaltyTxRateAdaptive(pBtCoexist, pCoexDm->bCurLowPenaltyRa);
\r
989 pCoexDm->bPreLowPenaltyRa = pCoexDm->bCurLowPenaltyRa;
\r
993 halbtc8723b2ant_SetDacSwingReg(
\r
994 IN PBTC_COEXIST pBtCoexist,
\r
998 u1Byte val=(u1Byte)level;
\r
1000 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Write SwDacSwing = 0x%x\n", level));
\r
1001 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x883, 0x3e, val);
\r
1005 halbtc8723b2ant_SetSwFullTimeDacSwing(
\r
1006 IN PBTC_COEXIST pBtCoexist,
\r
1007 IN BOOLEAN bSwDacSwingOn,
\r
1008 IN u4Byte swDacSwingLvl
\r
1013 halbtc8723b2ant_SetDacSwingReg(pBtCoexist, swDacSwingLvl);
\r
1017 halbtc8723b2ant_SetDacSwingReg(pBtCoexist, 0x18);
\r
1023 halbtc8723b2ant_DacSwing(
\r
1024 IN PBTC_COEXIST pBtCoexist,
\r
1025 IN BOOLEAN bForceExec,
\r
1026 IN BOOLEAN bDacSwingOn,
\r
1027 IN u4Byte dacSwingLvl
\r
1030 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn DacSwing=%s, dacSwingLvl=0x%x\n",
\r
1031 (bForceExec? "force to":""), ((bDacSwingOn)? "ON":"OFF"), dacSwingLvl));
\r
1032 pCoexDm->bCurDacSwingOn = bDacSwingOn;
\r
1033 pCoexDm->curDacSwingLvl = dacSwingLvl;
\r
1037 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreDacSwingOn=%d, preDacSwingLvl=0x%x, bCurDacSwingOn=%d, curDacSwingLvl=0x%x\n",
\r
1038 pCoexDm->bPreDacSwingOn, pCoexDm->preDacSwingLvl,
\r
1039 pCoexDm->bCurDacSwingOn, pCoexDm->curDacSwingLvl));
\r
1041 if( (pCoexDm->bPreDacSwingOn == pCoexDm->bCurDacSwingOn) &&
\r
1042 (pCoexDm->preDacSwingLvl == pCoexDm->curDacSwingLvl) )
\r
1046 halbtc8723b2ant_SetSwFullTimeDacSwing(pBtCoexist, bDacSwingOn, dacSwingLvl);
\r
1048 pCoexDm->bPreDacSwingOn = pCoexDm->bCurDacSwingOn;
\r
1049 pCoexDm->preDacSwingLvl = pCoexDm->curDacSwingLvl;
\r
1053 halbtc8723b2ant_SetAdcBackOff(
\r
1054 IN PBTC_COEXIST pBtCoexist,
\r
1055 IN BOOLEAN bAdcBackOff
\r
1060 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], BB BackOff Level On!\n"));
\r
1061 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xc05, 0x30, 0x3);
\r
1065 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], BB BackOff Level Off!\n"));
\r
1066 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xc05, 0x30, 0x1);
\r
1071 halbtc8723b2ant_AdcBackOff(
\r
1072 IN PBTC_COEXIST pBtCoexist,
\r
1073 IN BOOLEAN bForceExec,
\r
1074 IN BOOLEAN bAdcBackOff
\r
1077 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn AdcBackOff = %s\n",
\r
1078 (bForceExec? "force to":""), ((bAdcBackOff)? "ON":"OFF")));
\r
1079 pCoexDm->bCurAdcBackOff = bAdcBackOff;
\r
1083 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreAdcBackOff=%d, bCurAdcBackOff=%d\n",
\r
1084 pCoexDm->bPreAdcBackOff, pCoexDm->bCurAdcBackOff));
\r
1086 if(pCoexDm->bPreAdcBackOff == pCoexDm->bCurAdcBackOff)
\r
1089 halbtc8723b2ant_SetAdcBackOff(pBtCoexist, pCoexDm->bCurAdcBackOff);
\r
1091 pCoexDm->bPreAdcBackOff = pCoexDm->bCurAdcBackOff;
\r
1095 halbtc8723b2ant_SetAgcTable(
\r
1096 IN PBTC_COEXIST pBtCoexist,
\r
1097 IN BOOLEAN bAgcTableEn
\r
1100 u1Byte rssiAdjustVal=0;
\r
1102 //=================BB AGC Gain Table
\r
1105 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], BB Agc Table On!\n"));
\r
1106 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x6e1A0001);
\r
1107 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x6d1B0001);
\r
1108 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x6c1C0001);
\r
1109 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x6b1D0001);
\r
1110 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x6a1E0001);
\r
1111 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x691F0001);
\r
1112 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x68200001);
\r
1116 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], BB Agc Table Off!\n"));
\r
1117 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xaa1A0001);
\r
1118 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xa91B0001);
\r
1119 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xa81C0001);
\r
1120 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xa71D0001);
\r
1121 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xa61E0001);
\r
1122 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xa51F0001);
\r
1123 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xa4200001);
\r
1127 //=================RF Gain
\r
1128 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xef, 0xfffff, 0x02000);
\r
1131 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Agc Table On!\n"));
\r
1132 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x38fff);
\r
1133 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x38ffe);
\r
1137 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Agc Table Off!\n"));
\r
1138 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x380c3);
\r
1139 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x28ce6);
\r
1141 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xef, 0xfffff, 0x0);
\r
1143 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xed, 0xfffff, 0x1);
\r
1146 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Agc Table On!\n"));
\r
1147 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x40, 0xfffff, 0x38fff);
\r
1148 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x40, 0xfffff, 0x38ffe);
\r
1152 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Agc Table Off!\n"));
\r
1153 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x40, 0xfffff, 0x380c3);
\r
1154 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x40, 0xfffff, 0x28ce6);
\r
1156 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xed, 0xfffff, 0x0);
\r
1158 // set rssiAdjustVal for wifi module.
\r
1161 rssiAdjustVal = 8;
\r
1163 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_U1_RSSI_ADJ_VAL_FOR_AGC_TABLE_ON, &rssiAdjustVal);
\r
1167 halbtc8723b2ant_AgcTable(
\r
1168 IN PBTC_COEXIST pBtCoexist,
\r
1169 IN BOOLEAN bForceExec,
\r
1170 IN BOOLEAN bAgcTableEn
\r
1173 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s %s Agc Table\n",
\r
1174 (bForceExec? "force to":""), ((bAgcTableEn)? "Enable":"Disable")));
\r
1175 pCoexDm->bCurAgcTableEn = bAgcTableEn;
\r
1179 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreAgcTableEn=%d, bCurAgcTableEn=%d\n",
\r
1180 pCoexDm->bPreAgcTableEn, pCoexDm->bCurAgcTableEn));
\r
1182 if(pCoexDm->bPreAgcTableEn == pCoexDm->bCurAgcTableEn)
\r
1185 halbtc8723b2ant_SetAgcTable(pBtCoexist, bAgcTableEn);
\r
1187 pCoexDm->bPreAgcTableEn = pCoexDm->bCurAgcTableEn;
\r
1191 halbtc8723b2ant_SetCoexTable(
\r
1192 IN PBTC_COEXIST pBtCoexist,
\r
1193 IN u4Byte val0x6c0,
\r
1194 IN u4Byte val0x6c4,
\r
1195 IN u4Byte val0x6c8,
\r
1196 IN u1Byte val0x6cc
\r
1199 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c0=0x%x\n", val0x6c0));
\r
1200 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c0, val0x6c0);
\r
1202 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c4=0x%x\n", val0x6c4));
\r
1203 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c4, val0x6c4);
\r
1205 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c8=0x%x\n", val0x6c8));
\r
1206 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c8, val0x6c8);
\r
1208 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6cc=0x%x\n", val0x6cc));
\r
1209 pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cc, val0x6cc);
\r
1213 halbtc8723b2ant_CoexTable(
\r
1214 IN PBTC_COEXIST pBtCoexist,
\r
1215 IN BOOLEAN bForceExec,
\r
1216 IN u4Byte val0x6c0,
\r
1217 IN u4Byte val0x6c4,
\r
1218 IN u4Byte val0x6c8,
\r
1219 IN u1Byte val0x6cc
\r
1222 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
1223 (bForceExec? "force to":""), val0x6c0, val0x6c4, val0x6c8, val0x6cc));
\r
1224 pCoexDm->curVal0x6c0 = val0x6c0;
\r
1225 pCoexDm->curVal0x6c4 = val0x6c4;
\r
1226 pCoexDm->curVal0x6c8 = val0x6c8;
\r
1227 pCoexDm->curVal0x6cc = val0x6cc;
\r
1231 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], preVal0x6c0=0x%x, preVal0x6c4=0x%x, preVal0x6c8=0x%x, preVal0x6cc=0x%x !!\n",
\r
1232 pCoexDm->preVal0x6c0, pCoexDm->preVal0x6c4, pCoexDm->preVal0x6c8, pCoexDm->preVal0x6cc));
\r
1233 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], curVal0x6c0=0x%x, curVal0x6c4=0x%x, curVal0x6c8=0x%x, curVal0x6cc=0x%x !!\n",
\r
1234 pCoexDm->curVal0x6c0, pCoexDm->curVal0x6c4, pCoexDm->curVal0x6c8, pCoexDm->curVal0x6cc));
\r
1236 if( (pCoexDm->preVal0x6c0 == pCoexDm->curVal0x6c0) &&
\r
1237 (pCoexDm->preVal0x6c4 == pCoexDm->curVal0x6c4) &&
\r
1238 (pCoexDm->preVal0x6c8 == pCoexDm->curVal0x6c8) &&
\r
1239 (pCoexDm->preVal0x6cc == pCoexDm->curVal0x6cc) )
\r
1242 halbtc8723b2ant_SetCoexTable(pBtCoexist, val0x6c0, val0x6c4, val0x6c8, val0x6cc);
\r
1244 pCoexDm->preVal0x6c0 = pCoexDm->curVal0x6c0;
\r
1245 pCoexDm->preVal0x6c4 = pCoexDm->curVal0x6c4;
\r
1246 pCoexDm->preVal0x6c8 = pCoexDm->curVal0x6c8;
\r
1247 pCoexDm->preVal0x6cc = pCoexDm->curVal0x6cc;
\r
1251 halbtc8723b2ant_CoexTableWithType(
\r
1252 IN PBTC_COEXIST pBtCoexist,
\r
1253 IN BOOLEAN bForceExec,
\r
1257 pCoexSta->nCoexTableType = type;
\r
1262 halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x55555555, 0x55555555, 0xffffff, 0x3);
\r
1265 halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x55555555, 0x5afa5afa, 0xffffff, 0x3);
\r
1268 halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x5ada5ada, 0x5ada5ada, 0xffffff, 0x3);
\r
1271 halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0xaaaaaaaa, 0xaaaaaaaa, 0xffffff, 0x3);
\r
1274 halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0xffffffff, 0xffffffff, 0xffffff, 0x3);
\r
1277 halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x5fff5fff, 0x5fff5fff, 0xffffff, 0x3);
\r
1280 halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x55ff55ff, 0x5a5a5a5a, 0xffffff, 0x3);
\r
1283 halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x55dd55dd, 0x5ada5ada, 0xffffff, 0x3);
\r
1286 halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x55dd55dd, 0x5ada5ada, 0xffffff, 0x3);
\r
1289 halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x55dd55dd, 0x5ada5ada, 0xffffff, 0x3);
\r
1292 halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x55dd55dd, 0x5ada5ada, 0xffffff, 0x3);
\r
1295 halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x55dd55dd, 0x5ada5ada, 0xffffff, 0x3);
\r
1298 halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x55dd55dd, 0x5ada5ada, 0xffffff, 0x3);
\r
1301 halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x5fff5fff, 0xaaaaaaaa, 0xffffff, 0x3);
\r
1304 halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x5fff5fff, 0x5ada5ada, 0xffffff, 0x3);
\r
1307 halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x55dd55dd, 0xaaaaaaaa, 0xffffff, 0x3);
\r
1315 halbtc8723b2ant_SetFwIgnoreWlanAct(
\r
1316 IN PBTC_COEXIST pBtCoexist,
\r
1317 IN BOOLEAN bEnable
\r
1320 u1Byte H2C_Parameter[1] ={0};
\r
1324 H2C_Parameter[0] |= BIT0; // function enable
\r
1327 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], set FW for BT Ignore Wlan_Act, FW write 0x63=0x%x\n",
\r
1328 H2C_Parameter[0]));
\r
1330 pBtCoexist->fBtcFillH2c(pBtCoexist, 0x63, 1, H2C_Parameter);
\r
1334 halbtc8723b2ant_SetLpsRpwm(
\r
1335 IN PBTC_COEXIST pBtCoexist,
\r
1340 u1Byte lps=lpsVal;
\r
1341 u1Byte rpwm=rpwmVal;
\r
1343 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_U1_LPS_VAL, &lps);
\r
1344 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_U1_RPWM_VAL, &rpwm);
\r
1348 halbtc8723b2ant_LpsRpwm(
\r
1349 IN PBTC_COEXIST pBtCoexist,
\r
1350 IN BOOLEAN bForceExec,
\r
1355 BOOLEAN bForceExecPwrCmd=FALSE;
\r
1357 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s set lps/rpwm=0x%x/0x%x \n",
\r
1358 (bForceExec? "force to":""), lpsVal, rpwmVal));
\r
1359 pCoexDm->curLps = lpsVal;
\r
1360 pCoexDm->curRpwm = rpwmVal;
\r
1364 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], LPS-RxBeaconMode=0x%x , LPS-RPWM=0x%x!!\n",
\r
1365 pCoexDm->curLps, pCoexDm->curRpwm));
\r
1367 if( (pCoexDm->preLps == pCoexDm->curLps) &&
\r
1368 (pCoexDm->preRpwm == pCoexDm->curRpwm) )
\r
1370 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], LPS-RPWM_Last=0x%x , LPS-RPWM_Now=0x%x!!\n",
\r
1371 pCoexDm->preRpwm, pCoexDm->curRpwm));
\r
1376 halbtc8723b2ant_SetLpsRpwm(pBtCoexist, lpsVal, rpwmVal);
\r
1378 pCoexDm->preLps = pCoexDm->curLps;
\r
1379 pCoexDm->preRpwm = pCoexDm->curRpwm;
\r
1383 halbtc8723b2ant_IgnoreWlanAct(
\r
1384 IN PBTC_COEXIST pBtCoexist,
\r
1385 IN BOOLEAN bForceExec,
\r
1386 IN BOOLEAN bEnable
\r
1389 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s turn Ignore WlanAct %s\n",
\r
1390 (bForceExec? "force to":""), (bEnable? "ON":"OFF")));
\r
1391 pCoexDm->bCurIgnoreWlanAct = bEnable;
\r
1395 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreIgnoreWlanAct = %d, bCurIgnoreWlanAct = %d!!\n",
\r
1396 pCoexDm->bPreIgnoreWlanAct, pCoexDm->bCurIgnoreWlanAct));
\r
1398 if(pCoexDm->bPreIgnoreWlanAct == pCoexDm->bCurIgnoreWlanAct)
\r
1401 halbtc8723b2ant_SetFwIgnoreWlanAct(pBtCoexist, bEnable);
\r
1403 pCoexDm->bPreIgnoreWlanAct = pCoexDm->bCurIgnoreWlanAct;
\r
1407 halbtc8723b2ant_SetFwPstdma(
\r
1408 IN PBTC_COEXIST pBtCoexist,
\r
1416 u1Byte H2C_Parameter[5] ={0};
\r
1418 H2C_Parameter[0] = byte1;
\r
1419 H2C_Parameter[1] = byte2;
\r
1420 H2C_Parameter[2] = byte3;
\r
1421 H2C_Parameter[3] = byte4;
\r
1422 H2C_Parameter[4] = byte5;
\r
1424 pCoexDm->psTdmaPara[0] = byte1;
\r
1425 pCoexDm->psTdmaPara[1] = byte2;
\r
1426 pCoexDm->psTdmaPara[2] = byte3;
\r
1427 pCoexDm->psTdmaPara[3] = byte4;
\r
1428 pCoexDm->psTdmaPara[4] = byte5;
\r
1430 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], FW write 0x60(5bytes)=0x%x%08x\n",
\r
1431 H2C_Parameter[0],
\r
1432 H2C_Parameter[1]<<24|H2C_Parameter[2]<<16|H2C_Parameter[3]<<8|H2C_Parameter[4]));
\r
1434 pBtCoexist->fBtcFillH2c(pBtCoexist, 0x60, 5, H2C_Parameter);
\r
1438 halbtc8723b2ant_SwMechanism1(
\r
1439 IN PBTC_COEXIST pBtCoexist,
\r
1440 IN BOOLEAN bShrinkRxLPF,
\r
1441 IN BOOLEAN bLowPenaltyRA,
\r
1442 IN BOOLEAN bLimitedDIG,
\r
1443 IN BOOLEAN bBTLNAConstrain
\r
1449 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
\r
1451 if(BTC_WIFI_BW_HT40 != wifiBw) //only shrink RF Rx LPF for HT40
\r
1454 bShrinkRxLPF = FALSE;
\r
1458 //halbtc8723b2ant_RfShrink(pBtCoexist, NORMAL_EXEC, bShrinkRxLPF);
\r
1459 halbtc8723b2ant_LowPenaltyRa(pBtCoexist, NORMAL_EXEC, bLowPenaltyRA);
\r
1463 halbtc8723b2ant_SwMechanism2(
\r
1464 IN PBTC_COEXIST pBtCoexist,
\r
1465 IN BOOLEAN bAGCTableShift,
\r
1466 IN BOOLEAN bADCBackOff,
\r
1467 IN BOOLEAN bSWDACSwing,
\r
1468 IN u4Byte dacSwingLvl
\r
1471 //halbtc8723b2ant_AgcTable(pBtCoexist, NORMAL_EXEC, bAGCTableShift);
\r
1472 //halbtc8723b2ant_AdcBackOff(pBtCoexist, NORMAL_EXEC, bADCBackOff);
\r
1473 //halbtc8723b2ant_DacSwing(pBtCoexist, NORMAL_EXEC, bSWDACSwing, dacSwingLvl);
\r
1477 halbtc8723b2ant_SetAntPath(
\r
1478 IN PBTC_COEXIST pBtCoexist,
\r
1479 IN u1Byte antPosType,
\r
1480 IN BOOLEAN bInitHwCfg,
\r
1481 IN BOOLEAN bWifiOff
\r
1484 PBTC_BOARD_INFO pBoardInfo=&pBtCoexist->boardInfo;
\r
1485 u4Byte fwVer=0, u4Tmp=0;
\r
1486 BOOLEAN bPgExtSwitch=FALSE;
\r
1487 BOOLEAN bUseExtSwitch=FALSE;
\r
1488 u1Byte H2C_Parameter[2] ={0};
\r
1490 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_EXT_SWITCH, &bPgExtSwitch);
\r
1491 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer); // [31:16]=fw ver, [15:0]=fw sub ver
\r
1493 if((fwVer>0 && fwVer<0xc0000) || bPgExtSwitch)
\r
1494 bUseExtSwitch = TRUE;
\r
1498 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x39, 0x8, 0x1);
\r
1499 pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x974, 0xff);
\r
1500 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x944, 0x3, 0x3);
\r
1501 pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x930, 0x77);
\r
1502 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x67, 0x20, 0x1);
\r
1504 if(fwVer >= 0x180000)
\r
1506 /* Use H2C to set GNT_BT to High to avoid A2DP click */
\r
1507 H2C_Parameter[0] = 1;
\r
1508 pBtCoexist->fBtcFillH2c(pBtCoexist, 0x6E, 1, H2C_Parameter);
\r
1512 pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x765, 0x18);
\r
1515 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x948, 0x0);
\r
1517 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0); //WiFi TRx Mask off
\r
1518 //remove due to interrupt is disabled that polling c2h will fail and delay 100ms.
\r
1519 //pBtCoexist->fBtcSetBtReg(pBtCoexist, BTC_BT_REG_RF, 0x3c, 0x01); //BT TRx Mask off
\r
1521 if(pBoardInfo->btdmAntPos == BTC_ANTENNA_AT_MAIN_PORT)
\r
1523 //tell firmware "no antenna inverse"
\r
1524 H2C_Parameter[0] = 0;
\r
1528 //tell firmware "antenna inverse"
\r
1529 H2C_Parameter[0] = 1;
\r
1532 if (bUseExtSwitch)
\r
1535 H2C_Parameter[1] = 1;
\r
1540 H2C_Parameter[1] = 0;
\r
1542 pBtCoexist->fBtcFillH2c(pBtCoexist, 0x65, 2, H2C_Parameter);
\r
1546 if(fwVer >= 0x180000)
\r
1548 /* Use H2C to set GNT_BT to "Control by PTA"*/
\r
1549 H2C_Parameter[0] = 0;
\r
1550 pBtCoexist->fBtcFillH2c(pBtCoexist, 0x6E, 1, H2C_Parameter);
\r
1554 pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x765, 0x0);
\r
1558 // ext switch setting
\r
1563 // 0x4c[23]=0, 0x4c[24]=1 Antenna control by WL/BT
\r
1564 u4Tmp = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x4c);
\r
1567 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x4c, u4Tmp);
\r
1570 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x948, 0x0); // fixed internal switch S1->WiFi, S0->BT
\r
1571 switch(antPosType)
\r
1573 case BTC_ANT_WIFI_AT_MAIN:
\r
1574 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x92c, 0x3, 0x1); // ext switch main at wifi
\r
1576 case BTC_ANT_WIFI_AT_AUX:
\r
1577 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x92c, 0x3, 0x2); // ext switch aux at wifi
\r
1581 else // internal switch
\r
1585 // 0x4c[23]=0, 0x4c[24]=1 Antenna control by WL/BT
\r
1586 u4Tmp = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x4c);
\r
1589 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x4c, u4Tmp);
\r
1592 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x64, 0x1, 0x0); //fixed external switch S1->Main, S0->Aux
\r
1593 switch(antPosType)
\r
1595 case BTC_ANT_WIFI_AT_MAIN:
\r
1596 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x948, 0x0); // fixed internal switch S1->WiFi, S0->BT
\r
1598 case BTC_ANT_WIFI_AT_AUX:
\r
1599 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x948, 0x280); // fixed internal switch S0->WiFi, S1->BT
\r
1606 halbtc8723b2ant_PsTdma(
\r
1607 IN PBTC_COEXIST pBtCoexist,
\r
1608 IN BOOLEAN bForceExec,
\r
1609 IN BOOLEAN bTurnOn,
\r
1613 BOOLEAN bTurnOnByCnt=FALSE;
\r
1614 u1Byte psTdmaTypeByCnt=0;
\r
1615 u1Byte wifiRssiState1, btRssiState;
\r
1618 wifiRssiState1 = halbtc8723b2ant_WifiRssiState(pBtCoexist, 1, 2, BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES, 0);
\r
1619 btRssiState = halbtc8723b2ant_BtRssiState(2, BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES, 0);
\r
1621 if (!(BTC_RSSI_HIGH(wifiRssiState1) && BTC_RSSI_HIGH(btRssiState)) && bTurnOn)
\r
1623 type = type +100; //for WiFi RSSI low or BT RSSI low
\r
1626 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s turn %s PS TDMA, type=%d\n",
\r
1627 (bForceExec? "force to":""), (bTurnOn? "ON":"OFF"), type));
\r
1628 pCoexDm->bCurPsTdmaOn = bTurnOn;
\r
1629 pCoexDm->curPsTdma = type;
\r
1633 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPrePsTdmaOn = %d, bCurPsTdmaOn = %d!!\n",
\r
1634 pCoexDm->bPrePsTdmaOn, pCoexDm->bCurPsTdmaOn));
\r
1635 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], prePsTdma = %d, curPsTdma = %d!!\n",
\r
1636 pCoexDm->prePsTdma, pCoexDm->curPsTdma));
\r
1638 if( (pCoexDm->bPrePsTdmaOn == pCoexDm->bCurPsTdmaOn) &&
\r
1639 (pCoexDm->prePsTdma == pCoexDm->curPsTdma) )
\r
1648 //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0xe1, 0x90);
\r
1649 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x3c, 0x03, 0xf1, 0x90);
\r
1652 //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0xe1, 0x90);
\r
1653 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x2d, 0x03, 0xf1, 0x90);
\r
1656 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x3, 0xf1, 0x90);
\r
1659 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x10, 0x03, 0xf1, 0x90);
\r
1662 //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0x60, 0x90);
\r
1663 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x3c, 0x3, 0x70, 0x90);
\r
1666 //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0x60, 0x90);
\r
1667 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x2d, 0x3, 0x70, 0x90);
\r
1670 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x3, 0x70, 0x90);
\r
1673 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xa3, 0x10, 0x3, 0x70, 0x90);
\r
1676 //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0xe1, 0x90);
\r
1677 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x3c, 0x03, 0xf1, 0x90);
\r
1680 //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0xe1, 0x90);
\r
1681 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x2d, 0x03, 0xf1, 0x90);
\r
1684 //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0xa, 0xa, 0xe1, 0x90);
\r
1685 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x3, 0xf1, 0x90);
\r
1688 //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x5, 0x5, 0xe1, 0x90);
\r
1689 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x10, 0x3, 0xf1, 0x90);
\r
1692 //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0x60, 0x90);
\r
1693 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x3c, 0x3, 0x70, 0x90);
\r
1696 //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0x60, 0x90);
\r
1697 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x2d, 0x3, 0x70, 0x90);
\r
1700 //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0xa, 0xa, 0x60, 0x90);
\r
1701 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x3, 0x70, 0x90);
\r
1704 //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x5, 0x5, 0x60, 0x90);
\r
1705 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x10, 0x3, 0x70, 0x90);
\r
1708 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xa3, 0x2f, 0x2f, 0x60, 0x90);
\r
1711 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x5, 0x5, 0xe1, 0x90);
\r
1714 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x25, 0x25, 0xe1, 0x90);
\r
1717 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x25, 0x25, 0x60, 0x90);
\r
1720 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x15, 0x03, 0x70, 0x90);
\r
1723 //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0xe1, 0x90);
\r
1725 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x3c, 0x03, 0xf1, 0x90);
\r
1730 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xd3, 0x3a, 0x03, 0x70, 0x50);
\r
1736 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xd3, 0x2d, 0x03, 0x70, 0x50);
\r
1742 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xd3, 0x21, 0x03, 0x70, 0x50);
\r
1748 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xd3, 0x21, 0x03, 0x70, 0x50);
\r
1751 //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0xe1, 0x90);
\r
1752 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x3c, 0x03, 0xf1, 0x90);
\r
1755 //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0x60, 0x90);
\r
1756 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x3c, 0x03, 0x70, 0x90);
\r
1759 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x15, 0x03, 0x70, 0x90);
\r
1763 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x35, 0x03, 0x71, 0x11);
\r
1769 // disable PS tdma
\r
1773 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0x0, 0x0, 0x0, 0x40, 0x0);
\r
1776 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0x0, 0x0, 0x0, 0x48, 0x0);
\r
1779 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0x0, 0x0, 0x0, 0x40, 0x0);
\r
1784 // update pre state
\r
1785 pCoexDm->bPrePsTdmaOn = pCoexDm->bCurPsTdmaOn;
\r
1786 pCoexDm->prePsTdma = pCoexDm->curPsTdma;
\r
1790 halbtc8723b2ant_PsTdmaCheckForPowerSaveState(
\r
1791 IN PBTC_COEXIST pBtCoexist,
\r
1792 IN BOOLEAN bNewPsState
\r
1795 u1Byte lpsMode=0x0;
\r
1797 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_LPS_MODE, &lpsMode);
\r
1799 if(lpsMode) // already under LPS state
\r
1803 // keep state under LPS, do nothing.
\r
1807 // will leave LPS state, turn off psTdma first
\r
1808 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);
\r
1811 else // NO PS state
\r
1815 // will enter LPS state, turn off psTdma first
\r
1816 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);
\r
1820 // keep state under NO PS state, do nothing.
\r
1826 halbtc8723b2ant_PowerSaveState(
\r
1827 IN PBTC_COEXIST pBtCoexist,
\r
1833 BOOLEAN bLowPwrDisable=FALSE;
\r
1837 case BTC_PS_WIFI_NATIVE:
\r
1838 // recover to original 32k low power setting
\r
1839 bLowPwrDisable = FALSE;
\r
1840 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);
\r
1841 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_NORMAL_LPS, NULL);
\r
1842 pCoexSta->bForceLpsOn = FALSE;
\r
1844 case BTC_PS_LPS_ON:
\r
1845 halbtc8723b2ant_PsTdmaCheckForPowerSaveState(pBtCoexist, TRUE);
\r
1846 halbtc8723b2ant_LpsRpwm(pBtCoexist, NORMAL_EXEC, lpsVal, rpwmVal);
\r
1847 // when coex force to enter LPS, do not enter 32k low power.
\r
1848 bLowPwrDisable = TRUE;
\r
1849 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);
\r
1850 // power save must executed before psTdma.
\r
1851 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_ENTER_LPS, NULL);
\r
1852 pCoexSta->bForceLpsOn = TRUE;
\r
1854 case BTC_PS_LPS_OFF:
\r
1855 halbtc8723b2ant_PsTdmaCheckForPowerSaveState(pBtCoexist, FALSE);
\r
1856 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_LEAVE_LPS, NULL);
\r
1857 pCoexSta->bForceLpsOn = FALSE;
\r
1866 halbtc8723b2ant_CoexAllOff(
\r
1867 IN PBTC_COEXIST pBtCoexist
\r
1871 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
\r
1872 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);
\r
1873 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
1874 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);
\r
1877 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
1878 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
1881 //pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
\r
1882 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);
\r
1886 halbtc8723b2ant_InitCoexDm(
\r
1887 IN PBTC_COEXIST pBtCoexist
\r
1890 // force to reset coex mechanism
\r
1891 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);
\r
1893 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
\r
1894 halbtc8723b2ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 1);
\r
1895 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, FORCE_EXEC, 6);
\r
1896 halbtc8723b2ant_DecBtPwr(pBtCoexist, FORCE_EXEC, 0);
\r
1898 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
1899 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
1903 halbtc8723b2ant_ActionBtInquiry(
\r
1904 IN PBTC_COEXIST pBtCoexist
\r
1907 u1Byte wifiRssiState, wifiRssiState1, btRssiState;
\r
1908 BOOLEAN bWifiConnected=FALSE;
\r
1909 BOOLEAN bLowPwrDisable=TRUE;
\r
1910 BOOLEAN bScan=FALSE, bLink=FALSE, bRoam=FALSE;
\r
1913 wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
\r
1914 wifiRssiState1 = halbtc8723b2ant_WifiRssiState(pBtCoexist, 1, 2, BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES, 0);
\r
1915 btRssiState = halbtc8723b2ant_BtRssiState(2, BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES, 0);
\r
1917 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);
\r
1918 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);
\r
1920 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);
\r
1921 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_LINK, &bLink);
\r
1922 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_ROAM, &bRoam);
\r
1925 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
\r
1927 if(bScan || bLink || bRoam)
\r
1929 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi link process + BT Inq/Page!!\n"));
\r
1930 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 15);
\r
1931 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 22);
\r
1933 else if(bWifiConnected)
\r
1935 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi connected + BT Inq/Page!!\n"));
\r
1936 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 15);
\r
1937 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 22);
\r
1941 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi no-link + BT Inq/Page!!\n"));
\r
1942 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);
\r
1943 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0);
\r
1946 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, FORCE_EXEC, 6);
\r
1947 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);
\r
1949 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
1950 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
1952 pCoexDm->bNeedRecover0x948 = TRUE;
\r
1953 pCoexDm->backup0x948 = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x948);
\r
1955 halbtc8723b2ant_SetAntPath(pBtCoexist, BTC_ANT_WIFI_AT_AUX, FALSE, FALSE);
\r
1961 halbtc8723b2ant_ActionWiFiLinkProcess(
\r
1962 IN PBTC_COEXIST pBtCoexist
\r
1966 u1Byte u1Tmpa, u1Tmpb;
\r
1968 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 15);
\r
1969 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 22);
\r
1971 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
1972 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
1975 u4Tmp = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x948);
\r
1976 u1Tmpa = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x765);
\r
1977 u1Tmpb = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x76e);
\r
1979 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("############# [BTCoex], 0x948=0x%x, 0x765=0x%x, 0x76e=0x%x\n",
\r
1980 u4Tmp, u1Tmpa, u1Tmpb));
\r
1984 halbtc8723b2ant_IsCommonAction(
\r
1985 IN PBTC_COEXIST pBtCoexist
\r
1988 u1Byte btRssiState=BTC_RSSI_STATE_HIGH;
\r
1989 BOOLEAN bCommon=FALSE, bWifiConnected=FALSE, bWifiBusy=FALSE;
\r
1990 BOOLEAN bBtHsOn=FALSE, bLowPwrDisable=FALSE;
\r
1992 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);
\r
1993 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);
\r
1994 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);
\r
1996 if(!bWifiConnected)
\r
1998 bLowPwrDisable = FALSE;
\r
1999 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);
\r
2000 halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);
\r
2002 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi non-connected idle!!\n"));
\r
2004 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
\r
2005 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);
\r
2007 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
\r
2008 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);
\r
2009 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
2010 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);
\r
2012 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
2013 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
2019 if(BT_8723B_2ANT_BT_STATUS_NON_CONNECTED_IDLE == pCoexDm->btStatus)
\r
2021 bLowPwrDisable = FALSE;
\r
2022 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);
\r
2023 halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);
\r
2025 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi connected + BT non connected-idle!!\n"));
\r
2027 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
\r
2028 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);
\r
2030 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
\r
2031 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);
\r
2032 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 0xb);
\r
2033 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);
\r
2035 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
2036 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
2040 else if(BT_8723B_2ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus)
\r
2042 bLowPwrDisable = TRUE;
\r
2043 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);
\r
2047 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi connected + BT connected-idle!!\n"));
\r
2048 halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);
\r
2050 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
\r
2051 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);
\r
2053 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
\r
2054 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);
\r
2055 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 0xb);
\r
2056 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);
\r
2058 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);
\r
2059 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
2065 bLowPwrDisable = TRUE;
\r
2066 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);
\r
2070 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi Connected-Busy + BT Busy!!\n"));
\r
2075 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi Connected-Idle + BT Busy!!\n"));
\r
2082 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi Connected-Idle + BT Busy!!\n"));
\r
2083 btRssiState = halbtc8723b2ant_BtRssiState(2, BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES, 0);
\r
2084 halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);
\r
2086 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
\r
2087 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);
\r
2089 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
\r
2090 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 21);
\r
2091 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 0xb);
\r
2092 if(BTC_RSSI_HIGH(btRssiState))
\r
2093 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);
\r
2095 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);
\r
2096 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
2097 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
2107 halbtc8723b2ant_TdmaDurationAdjust(
\r
2108 IN PBTC_COEXIST pBtCoexist,
\r
2109 IN BOOLEAN bScoHid,
\r
2110 IN BOOLEAN bTxPause,
\r
2111 IN u1Byte maxInterval
\r
2114 static s4Byte up,dn,m,n,WaitCount;
\r
2115 s4Byte result; //0: no change, +1: increase WiFi duration, -1: decrease WiFi duration
\r
2116 u1Byte retryCount=0;
\r
2118 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], TdmaDurationAdjust()\n"));
\r
2120 if(!pCoexDm->bAutoTdmaAdjust)
\r
2122 pCoexDm->bAutoTdmaAdjust = TRUE;
\r
2123 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], first run TdmaDurationAdjust()!!\n"));
\r
2129 if(maxInterval == 1)
\r
2131 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 13);
\r
2132 pCoexDm->psTdmaDuAdjType = 13;
\r
2134 else if(maxInterval == 2)
\r
2136 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);
\r
2137 pCoexDm->psTdmaDuAdjType = 14;
\r
2139 else if(maxInterval == 3)
\r
2141 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2142 pCoexDm->psTdmaDuAdjType = 15;
\r
2146 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2147 pCoexDm->psTdmaDuAdjType = 15;
\r
2152 if(maxInterval == 1)
\r
2154 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);
\r
2155 pCoexDm->psTdmaDuAdjType = 9;
\r
2157 else if(maxInterval == 2)
\r
2159 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);
\r
2160 pCoexDm->psTdmaDuAdjType = 10;
\r
2162 else if(maxInterval == 3)
\r
2164 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2165 pCoexDm->psTdmaDuAdjType = 11;
\r
2169 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2170 pCoexDm->psTdmaDuAdjType = 11;
\r
2178 if(maxInterval == 1)
\r
2180 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);
\r
2181 pCoexDm->psTdmaDuAdjType = 5;
\r
2183 else if(maxInterval == 2)
\r
2185 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);
\r
2186 pCoexDm->psTdmaDuAdjType = 6;
\r
2188 else if(maxInterval == 3)
\r
2190 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2191 pCoexDm->psTdmaDuAdjType = 7;
\r
2195 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2196 pCoexDm->psTdmaDuAdjType = 7;
\r
2201 if(maxInterval == 1)
\r
2203 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);
\r
2204 pCoexDm->psTdmaDuAdjType = 1;
\r
2206 else if(maxInterval == 2)
\r
2208 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);
\r
2209 pCoexDm->psTdmaDuAdjType = 2;
\r
2211 else if(maxInterval == 3)
\r
2213 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2214 pCoexDm->psTdmaDuAdjType = 3;
\r
2218 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2219 pCoexDm->psTdmaDuAdjType = 3;
\r
2234 //accquire the BT TRx retry count from BT_Info byte2
\r
2235 retryCount = pCoexSta->btRetryCnt;
\r
2236 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], retryCount = %d\n", retryCount));
\r
2237 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], up=%d, dn=%d, m=%d, n=%d, WaitCount=%d\n",
\r
2238 up, dn, m, n, WaitCount));
\r
2242 if(retryCount == 0) // no retry in the last 2-second duration
\r
2250 if(up >= n) // if ³sÄò n Ó2¬í retry count¬°0, «h½Õ¼eWiFi duration
\r
2257 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Increase wifi duration!!\n"));
\r
2260 else if (retryCount <= 3) // <=3 retry in the last 2-second duration
\r
2268 if (dn == 2) // if ³sÄò 2 Ó2¬í retry count< 3, «h½Õ¯¶WiFi duration
\r
2270 if (WaitCount <= 2)
\r
2271 m++; // ÁקK¤@ª½¦b¨âÓlevel¤¤¨Ó¦^
\r
2275 if ( m >= 20) //m ³Ì¤jÈ = 20 ' ³Ì¤j120¬í recheck¬O§_½Õ¾ã WiFi duration.
\r
2283 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Decrease wifi duration for retryCounter<3!!\n"));
\r
2286 else //retry count > 3, ¥un1¦¸ retry count > 3, «h½Õ¯¶WiFi duration
\r
2288 if (WaitCount == 1)
\r
2289 m++; // ÁקK¤@ª½¦b¨âÓlevel¤¤¨Ó¦^
\r
2293 if ( m >= 20) //m ³Ì¤jÈ = 20 ' ³Ì¤j120¬í recheck¬O§_½Õ¾ã WiFi duration.
\r
2301 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Decrease wifi duration for retryCounter>3!!\n"));
\r
2304 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], max Interval = %d\n", maxInterval));
\r
2305 if(maxInterval == 1)
\r
2309 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 1\n"));
\r
2311 if(pCoexDm->curPsTdma == 71)
\r
2313 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);
\r
2314 pCoexDm->psTdmaDuAdjType = 5;
\r
2316 else if(pCoexDm->curPsTdma == 1)
\r
2318 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);
\r
2319 pCoexDm->psTdmaDuAdjType = 5;
\r
2321 else if(pCoexDm->curPsTdma == 2)
\r
2323 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);
\r
2324 pCoexDm->psTdmaDuAdjType = 6;
\r
2326 else if(pCoexDm->curPsTdma == 3)
\r
2328 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2329 pCoexDm->psTdmaDuAdjType = 7;
\r
2331 else if(pCoexDm->curPsTdma == 4)
\r
2333 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 8);
\r
2334 pCoexDm->psTdmaDuAdjType = 8;
\r
2336 if(pCoexDm->curPsTdma == 9)
\r
2338 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 13);
\r
2339 pCoexDm->psTdmaDuAdjType = 13;
\r
2341 else if(pCoexDm->curPsTdma == 10)
\r
2343 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);
\r
2344 pCoexDm->psTdmaDuAdjType = 14;
\r
2346 else if(pCoexDm->curPsTdma == 11)
\r
2348 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2349 pCoexDm->psTdmaDuAdjType = 15;
\r
2351 else if(pCoexDm->curPsTdma == 12)
\r
2353 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 16);
\r
2354 pCoexDm->psTdmaDuAdjType = 16;
\r
2359 if(pCoexDm->curPsTdma == 5)
\r
2361 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);
\r
2362 pCoexDm->psTdmaDuAdjType = 6;
\r
2364 else if(pCoexDm->curPsTdma == 6)
\r
2366 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2367 pCoexDm->psTdmaDuAdjType = 7;
\r
2369 else if(pCoexDm->curPsTdma == 7)
\r
2371 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 8);
\r
2372 pCoexDm->psTdmaDuAdjType = 8;
\r
2374 else if(pCoexDm->curPsTdma == 13)
\r
2376 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);
\r
2377 pCoexDm->psTdmaDuAdjType = 14;
\r
2379 else if(pCoexDm->curPsTdma == 14)
\r
2381 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2382 pCoexDm->psTdmaDuAdjType = 15;
\r
2384 else if(pCoexDm->curPsTdma == 15)
\r
2386 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 16);
\r
2387 pCoexDm->psTdmaDuAdjType = 16;
\r
2390 else if (result == 1)
\r
2392 if(pCoexDm->curPsTdma == 8)
\r
2394 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2395 pCoexDm->psTdmaDuAdjType = 7;
\r
2397 else if(pCoexDm->curPsTdma == 7)
\r
2399 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);
\r
2400 pCoexDm->psTdmaDuAdjType = 6;
\r
2402 else if(pCoexDm->curPsTdma == 6)
\r
2404 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);
\r
2405 pCoexDm->psTdmaDuAdjType = 5;
\r
2407 else if(pCoexDm->curPsTdma == 16)
\r
2409 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2410 pCoexDm->psTdmaDuAdjType = 15;
\r
2412 else if(pCoexDm->curPsTdma == 15)
\r
2414 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);
\r
2415 pCoexDm->psTdmaDuAdjType = 14;
\r
2417 else if(pCoexDm->curPsTdma == 14)
\r
2419 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 13);
\r
2420 pCoexDm->psTdmaDuAdjType = 13;
\r
2426 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 0\n"));
\r
2427 if(pCoexDm->curPsTdma == 5)
\r
2429 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 71);
\r
2430 pCoexDm->psTdmaDuAdjType = 71;
\r
2432 else if(pCoexDm->curPsTdma == 6)
\r
2434 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);
\r
2435 pCoexDm->psTdmaDuAdjType = 2;
\r
2437 else if(pCoexDm->curPsTdma == 7)
\r
2439 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2440 pCoexDm->psTdmaDuAdjType = 3;
\r
2442 else if(pCoexDm->curPsTdma == 8)
\r
2444 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 4);
\r
2445 pCoexDm->psTdmaDuAdjType = 4;
\r
2447 if(pCoexDm->curPsTdma == 13)
\r
2449 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);
\r
2450 pCoexDm->psTdmaDuAdjType = 9;
\r
2452 else if(pCoexDm->curPsTdma == 14)
\r
2454 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);
\r
2455 pCoexDm->psTdmaDuAdjType = 10;
\r
2457 else if(pCoexDm->curPsTdma == 15)
\r
2459 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2460 pCoexDm->psTdmaDuAdjType = 11;
\r
2462 else if(pCoexDm->curPsTdma == 16)
\r
2464 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 12);
\r
2465 pCoexDm->psTdmaDuAdjType = 12;
\r
2470 if(pCoexDm->curPsTdma == 71)
\r
2472 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);
\r
2473 pCoexDm->psTdmaDuAdjType = 1;
\r
2475 else if(pCoexDm->curPsTdma == 1)
\r
2477 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);
\r
2478 pCoexDm->psTdmaDuAdjType = 2;
\r
2480 else if(pCoexDm->curPsTdma == 2)
\r
2482 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2483 pCoexDm->psTdmaDuAdjType = 3;
\r
2485 else if(pCoexDm->curPsTdma == 3)
\r
2487 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 4);
\r
2488 pCoexDm->psTdmaDuAdjType = 4;
\r
2490 else if(pCoexDm->curPsTdma == 9)
\r
2492 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);
\r
2493 pCoexDm->psTdmaDuAdjType = 10;
\r
2495 else if(pCoexDm->curPsTdma == 10)
\r
2497 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2498 pCoexDm->psTdmaDuAdjType = 11;
\r
2500 else if(pCoexDm->curPsTdma == 11)
\r
2502 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 12);
\r
2503 pCoexDm->psTdmaDuAdjType = 12;
\r
2506 else if (result == 1)
\r
2508 if(pCoexDm->curPsTdma == 4)
\r
2510 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2511 pCoexDm->psTdmaDuAdjType = 3;
\r
2513 else if(pCoexDm->curPsTdma == 3)
\r
2515 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);
\r
2516 pCoexDm->psTdmaDuAdjType = 2;
\r
2518 else if(pCoexDm->curPsTdma == 2)
\r
2520 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);
\r
2521 pCoexDm->psTdmaDuAdjType = 1;
\r
2523 else if(pCoexDm->curPsTdma == 1)
\r
2525 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 71);
\r
2526 pCoexDm->psTdmaDuAdjType = 71;
\r
2528 else if(pCoexDm->curPsTdma == 12)
\r
2530 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2531 pCoexDm->psTdmaDuAdjType = 11;
\r
2533 else if(pCoexDm->curPsTdma == 11)
\r
2535 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);
\r
2536 pCoexDm->psTdmaDuAdjType = 10;
\r
2538 else if(pCoexDm->curPsTdma == 10)
\r
2540 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);
\r
2541 pCoexDm->psTdmaDuAdjType = 9;
\r
2546 else if(maxInterval == 2)
\r
2550 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 1\n"));
\r
2551 if(pCoexDm->curPsTdma == 1)
\r
2553 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);
\r
2554 pCoexDm->psTdmaDuAdjType = 6;
\r
2556 else if(pCoexDm->curPsTdma == 2)
\r
2558 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);
\r
2559 pCoexDm->psTdmaDuAdjType = 6;
\r
2561 else if(pCoexDm->curPsTdma == 3)
\r
2563 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2564 pCoexDm->psTdmaDuAdjType = 7;
\r
2566 else if(pCoexDm->curPsTdma == 4)
\r
2568 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 8);
\r
2569 pCoexDm->psTdmaDuAdjType = 8;
\r
2571 if(pCoexDm->curPsTdma == 9)
\r
2573 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);
\r
2574 pCoexDm->psTdmaDuAdjType = 14;
\r
2576 else if(pCoexDm->curPsTdma == 10)
\r
2578 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);
\r
2579 pCoexDm->psTdmaDuAdjType = 14;
\r
2581 else if(pCoexDm->curPsTdma == 11)
\r
2583 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2584 pCoexDm->psTdmaDuAdjType = 15;
\r
2586 else if(pCoexDm->curPsTdma == 12)
\r
2588 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 16);
\r
2589 pCoexDm->psTdmaDuAdjType = 16;
\r
2593 if(pCoexDm->curPsTdma == 5)
\r
2595 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);
\r
2596 pCoexDm->psTdmaDuAdjType = 6;
\r
2598 else if(pCoexDm->curPsTdma == 6)
\r
2600 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2601 pCoexDm->psTdmaDuAdjType = 7;
\r
2603 else if(pCoexDm->curPsTdma == 7)
\r
2605 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 8);
\r
2606 pCoexDm->psTdmaDuAdjType = 8;
\r
2608 else if(pCoexDm->curPsTdma == 13)
\r
2610 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);
\r
2611 pCoexDm->psTdmaDuAdjType = 14;
\r
2613 else if(pCoexDm->curPsTdma == 14)
\r
2615 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2616 pCoexDm->psTdmaDuAdjType = 15;
\r
2618 else if(pCoexDm->curPsTdma == 15)
\r
2620 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 16);
\r
2621 pCoexDm->psTdmaDuAdjType = 16;
\r
2624 else if (result == 1)
\r
2626 if(pCoexDm->curPsTdma == 8)
\r
2628 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2629 pCoexDm->psTdmaDuAdjType = 7;
\r
2631 else if(pCoexDm->curPsTdma == 7)
\r
2633 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);
\r
2634 pCoexDm->psTdmaDuAdjType = 6;
\r
2636 else if(pCoexDm->curPsTdma == 6)
\r
2638 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);
\r
2639 pCoexDm->psTdmaDuAdjType = 6;
\r
2641 else if(pCoexDm->curPsTdma == 16)
\r
2643 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2644 pCoexDm->psTdmaDuAdjType = 15;
\r
2646 else if(pCoexDm->curPsTdma == 15)
\r
2648 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);
\r
2649 pCoexDm->psTdmaDuAdjType = 14;
\r
2651 else if(pCoexDm->curPsTdma == 14)
\r
2653 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);
\r
2654 pCoexDm->psTdmaDuAdjType = 14;
\r
2660 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 0\n"));
\r
2661 if(pCoexDm->curPsTdma == 5)
\r
2663 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);
\r
2664 pCoexDm->psTdmaDuAdjType = 2;
\r
2666 else if(pCoexDm->curPsTdma == 6)
\r
2668 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);
\r
2669 pCoexDm->psTdmaDuAdjType = 2;
\r
2671 else if(pCoexDm->curPsTdma == 7)
\r
2673 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2674 pCoexDm->psTdmaDuAdjType = 3;
\r
2676 else if(pCoexDm->curPsTdma == 8)
\r
2678 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 4);
\r
2679 pCoexDm->psTdmaDuAdjType = 4;
\r
2681 if(pCoexDm->curPsTdma == 13)
\r
2683 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);
\r
2684 pCoexDm->psTdmaDuAdjType = 10;
\r
2686 else if(pCoexDm->curPsTdma == 14)
\r
2688 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);
\r
2689 pCoexDm->psTdmaDuAdjType = 10;
\r
2691 else if(pCoexDm->curPsTdma == 15)
\r
2693 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2694 pCoexDm->psTdmaDuAdjType = 11;
\r
2696 else if(pCoexDm->curPsTdma == 16)
\r
2698 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 12);
\r
2699 pCoexDm->psTdmaDuAdjType = 12;
\r
2703 if(pCoexDm->curPsTdma == 1)
\r
2705 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);
\r
2706 pCoexDm->psTdmaDuAdjType = 2;
\r
2708 else if(pCoexDm->curPsTdma == 2)
\r
2710 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2711 pCoexDm->psTdmaDuAdjType = 3;
\r
2713 else if(pCoexDm->curPsTdma == 3)
\r
2715 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 4);
\r
2716 pCoexDm->psTdmaDuAdjType = 4;
\r
2718 else if(pCoexDm->curPsTdma == 9)
\r
2720 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);
\r
2721 pCoexDm->psTdmaDuAdjType = 10;
\r
2723 else if(pCoexDm->curPsTdma == 10)
\r
2725 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2726 pCoexDm->psTdmaDuAdjType = 11;
\r
2728 else if(pCoexDm->curPsTdma == 11)
\r
2730 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 12);
\r
2731 pCoexDm->psTdmaDuAdjType = 12;
\r
2734 else if (result == 1)
\r
2736 if(pCoexDm->curPsTdma == 4)
\r
2738 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2739 pCoexDm->psTdmaDuAdjType = 3;
\r
2741 else if(pCoexDm->curPsTdma == 3)
\r
2743 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);
\r
2744 pCoexDm->psTdmaDuAdjType = 2;
\r
2746 else if(pCoexDm->curPsTdma == 2)
\r
2748 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);
\r
2749 pCoexDm->psTdmaDuAdjType = 2;
\r
2751 else if(pCoexDm->curPsTdma == 12)
\r
2753 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2754 pCoexDm->psTdmaDuAdjType = 11;
\r
2756 else if(pCoexDm->curPsTdma == 11)
\r
2758 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);
\r
2759 pCoexDm->psTdmaDuAdjType = 10;
\r
2761 else if(pCoexDm->curPsTdma == 10)
\r
2763 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);
\r
2764 pCoexDm->psTdmaDuAdjType = 10;
\r
2769 else if(maxInterval == 3)
\r
2773 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 1\n"));
\r
2774 if(pCoexDm->curPsTdma == 1)
\r
2776 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2777 pCoexDm->psTdmaDuAdjType = 7;
\r
2779 else if(pCoexDm->curPsTdma == 2)
\r
2781 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2782 pCoexDm->psTdmaDuAdjType = 7;
\r
2784 else if(pCoexDm->curPsTdma == 3)
\r
2786 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2787 pCoexDm->psTdmaDuAdjType = 7;
\r
2789 else if(pCoexDm->curPsTdma == 4)
\r
2791 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 8);
\r
2792 pCoexDm->psTdmaDuAdjType = 8;
\r
2794 if(pCoexDm->curPsTdma == 9)
\r
2796 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2797 pCoexDm->psTdmaDuAdjType = 15;
\r
2799 else if(pCoexDm->curPsTdma == 10)
\r
2801 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2802 pCoexDm->psTdmaDuAdjType = 15;
\r
2804 else if(pCoexDm->curPsTdma == 11)
\r
2806 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2807 pCoexDm->psTdmaDuAdjType = 15;
\r
2809 else if(pCoexDm->curPsTdma == 12)
\r
2811 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 16);
\r
2812 pCoexDm->psTdmaDuAdjType = 16;
\r
2816 if(pCoexDm->curPsTdma == 5)
\r
2818 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2819 pCoexDm->psTdmaDuAdjType = 7;
\r
2821 else if(pCoexDm->curPsTdma == 6)
\r
2823 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2824 pCoexDm->psTdmaDuAdjType = 7;
\r
2826 else if(pCoexDm->curPsTdma == 7)
\r
2828 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 8);
\r
2829 pCoexDm->psTdmaDuAdjType = 8;
\r
2831 else if(pCoexDm->curPsTdma == 13)
\r
2833 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2834 pCoexDm->psTdmaDuAdjType = 15;
\r
2836 else if(pCoexDm->curPsTdma == 14)
\r
2838 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2839 pCoexDm->psTdmaDuAdjType = 15;
\r
2841 else if(pCoexDm->curPsTdma == 15)
\r
2843 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 16);
\r
2844 pCoexDm->psTdmaDuAdjType = 16;
\r
2847 else if (result == 1)
\r
2849 if(pCoexDm->curPsTdma == 8)
\r
2851 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2852 pCoexDm->psTdmaDuAdjType = 7;
\r
2854 else if(pCoexDm->curPsTdma == 7)
\r
2856 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2857 pCoexDm->psTdmaDuAdjType = 7;
\r
2859 else if(pCoexDm->curPsTdma == 6)
\r
2861 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2862 pCoexDm->psTdmaDuAdjType = 7;
\r
2864 else if(pCoexDm->curPsTdma == 16)
\r
2866 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2867 pCoexDm->psTdmaDuAdjType = 15;
\r
2869 else if(pCoexDm->curPsTdma == 15)
\r
2871 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2872 pCoexDm->psTdmaDuAdjType = 15;
\r
2874 else if(pCoexDm->curPsTdma == 14)
\r
2876 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2877 pCoexDm->psTdmaDuAdjType = 15;
\r
2883 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 0\n"));
\r
2884 if(pCoexDm->curPsTdma == 5)
\r
2886 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2887 pCoexDm->psTdmaDuAdjType = 3;
\r
2889 else if(pCoexDm->curPsTdma == 6)
\r
2891 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2892 pCoexDm->psTdmaDuAdjType = 3;
\r
2894 else if(pCoexDm->curPsTdma == 7)
\r
2896 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2897 pCoexDm->psTdmaDuAdjType = 3;
\r
2899 else if(pCoexDm->curPsTdma == 8)
\r
2901 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 4);
\r
2902 pCoexDm->psTdmaDuAdjType = 4;
\r
2904 if(pCoexDm->curPsTdma == 13)
\r
2906 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2907 pCoexDm->psTdmaDuAdjType = 11;
\r
2909 else if(pCoexDm->curPsTdma == 14)
\r
2911 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2912 pCoexDm->psTdmaDuAdjType = 11;
\r
2914 else if(pCoexDm->curPsTdma == 15)
\r
2916 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2917 pCoexDm->psTdmaDuAdjType = 11;
\r
2919 else if(pCoexDm->curPsTdma == 16)
\r
2921 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 12);
\r
2922 pCoexDm->psTdmaDuAdjType = 12;
\r
2926 if(pCoexDm->curPsTdma == 1)
\r
2928 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2929 pCoexDm->psTdmaDuAdjType = 3;
\r
2931 else if(pCoexDm->curPsTdma == 2)
\r
2933 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2934 pCoexDm->psTdmaDuAdjType = 3;
\r
2936 else if(pCoexDm->curPsTdma == 3)
\r
2938 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 4);
\r
2939 pCoexDm->psTdmaDuAdjType = 4;
\r
2941 else if(pCoexDm->curPsTdma == 9)
\r
2943 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2944 pCoexDm->psTdmaDuAdjType = 11;
\r
2946 else if(pCoexDm->curPsTdma == 10)
\r
2948 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2949 pCoexDm->psTdmaDuAdjType = 11;
\r
2951 else if(pCoexDm->curPsTdma == 11)
\r
2953 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 12);
\r
2954 pCoexDm->psTdmaDuAdjType = 12;
\r
2957 else if (result == 1)
\r
2959 if(pCoexDm->curPsTdma == 4)
\r
2961 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2962 pCoexDm->psTdmaDuAdjType = 3;
\r
2964 else if(pCoexDm->curPsTdma == 3)
\r
2966 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2967 pCoexDm->psTdmaDuAdjType = 3;
\r
2969 else if(pCoexDm->curPsTdma == 2)
\r
2971 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2972 pCoexDm->psTdmaDuAdjType = 3;
\r
2974 else if(pCoexDm->curPsTdma == 12)
\r
2976 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2977 pCoexDm->psTdmaDuAdjType = 11;
\r
2979 else if(pCoexDm->curPsTdma == 11)
\r
2981 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2982 pCoexDm->psTdmaDuAdjType = 11;
\r
2984 else if(pCoexDm->curPsTdma == 10)
\r
2986 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2987 pCoexDm->psTdmaDuAdjType = 11;
\r
2994 // if current PsTdma not match with the recorded one (when scan, dhcp...),
\r
2995 // then we have to adjust it back to the previous record one.
\r
2996 if(pCoexDm->curPsTdma != pCoexDm->psTdmaDuAdjType)
\r
2998 BOOLEAN bScan=FALSE, bLink=FALSE, bRoam=FALSE;
\r
2999 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], PsTdma type dismatch!!!, curPsTdma=%d, recordPsTdma=%d\n",
\r
3000 pCoexDm->curPsTdma, pCoexDm->psTdmaDuAdjType));
\r
3002 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);
\r
3003 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_LINK, &bLink);
\r
3004 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_ROAM, &bRoam);
\r
3006 if( !bScan && !bLink && !bRoam)
\r
3008 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, pCoexDm->psTdmaDuAdjType);
\r
3012 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], roaming/link/scan is under progress, will adjust next time!!!\n"));
\r
3017 // SCO only or SCO+PAN(HS)
\r
3019 halbtc8723b2ant_ActionSco(
\r
3020 IN PBTC_COEXIST pBtCoexist
\r
3023 u1Byte wifiRssiState, btRssiState;
\r
3026 wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
\r
3027 btRssiState = halbtc8723b2ant_BtRssiState(2, BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES, 0);
\r
3029 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
\r
3031 halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);
\r
3033 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 4);
\r
3035 if(BTC_RSSI_HIGH(btRssiState))
\r
3036 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);
\r
3038 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);
\r
3040 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
\r
3042 if (BTC_WIFI_BW_LEGACY == wifiBw) //for SCO quality at 11b/g mode
\r
3044 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);
\r
3046 else //for SCO quality & wifi performance balance at 11n mode
\r
3048 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 8);
\r
3051 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
\r
3052 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0); //for voice quality
\r
3055 if(BTC_WIFI_BW_HT40 == wifiBw)
\r
3057 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3058 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3060 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);
\r
3061 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,TRUE,0x4);
\r
3065 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);
\r
3066 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,TRUE,0x4);
\r
3071 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3072 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3074 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);
\r
3075 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,TRUE,0x4);
\r
3079 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);
\r
3080 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,TRUE,0x4);
\r
3087 halbtc8723b2ant_ActionHid(
\r
3088 IN PBTC_COEXIST pBtCoexist
\r
3091 u1Byte wifiRssiState, btRssiState;
\r
3094 wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
\r
3095 btRssiState = halbtc8723b2ant_BtRssiState(2, BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES, 0);
\r
3097 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
\r
3099 halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);
\r
3101 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
3103 if(BTC_RSSI_HIGH(btRssiState))
\r
3104 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);
\r
3106 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);
\r
3108 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
\r
3110 if (BTC_WIFI_BW_LEGACY == wifiBw) //for HID at 11b/g mode
\r
3112 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);
\r
3114 else //for HID quality & wifi performance balance at 11n mode
\r
3116 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 9);
\r
3119 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
\r
3121 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3122 (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3124 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);
\r
3128 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 13);
\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,TRUE,FALSE,FALSE);
\r
3138 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3142 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,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,TRUE,FALSE,FALSE);
\r
3152 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3156 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);
\r
3157 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3162 //A2DP only / PAN(EDR) only/ A2DP+PAN(HS)
\r
3164 halbtc8723b2ant_ActionA2dp(
\r
3165 IN PBTC_COEXIST pBtCoexist
\r
3168 u1Byte wifiRssiState, wifiRssiState1, btRssiState;
\r
3172 wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
\r
3173 wifiRssiState1 = halbtc8723b2ant_WifiRssiState(pBtCoexist, 1, 2, BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES, 0);
\r
3174 btRssiState = halbtc8723b2ant_BtRssiState(2, BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES, 0);
\r
3176 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_AP_NUM, &apNum);
\r
3178 // define the office environment
\r
3179 if( (apNum >= 10) && BTC_RSSI_HIGH(wifiRssiState1) && BTC_RSSI_HIGH(btRssiState))
\r
3181 //DbgPrint(" AP#>10(%d)\n", apNum);
\r
3182 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
\r
3184 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
\r
3185 halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);
\r
3186 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
3187 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);
\r
3189 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);
\r
3191 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
\r
3192 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);
\r
3195 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
\r
3196 if(BTC_WIFI_BW_HT40 == wifiBw)
\r
3198 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);
\r
3199 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,TRUE,0x18);
\r
3203 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
3204 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,TRUE,0x18);
\r
3210 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
\r
3211 halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);
\r
3213 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
3215 if(BTC_RSSI_HIGH(btRssiState))
\r
3216 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);
\r
3218 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);
\r
3221 if (BTC_RSSI_HIGH(wifiRssiState1) && BTC_RSSI_HIGH(btRssiState))
\r
3223 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);
\r
3224 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
\r
3228 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 13);
\r
3229 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);
\r
3233 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3234 (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3236 halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 1);
\r
3240 halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 1);
\r
3244 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
\r
3245 if(BTC_WIFI_BW_HT40 == wifiBw)
\r
3247 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3248 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3250 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);
\r
3251 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3255 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);
\r
3256 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3261 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3262 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3264 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
3265 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3269 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
3270 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3276 halbtc8723b2ant_ActionA2dpPanHs(
\r
3277 IN PBTC_COEXIST pBtCoexist
\r
3280 u1Byte wifiRssiState, wifiRssiState1, btRssiState;
\r
3283 wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
\r
3284 wifiRssiState1 = halbtc8723b2ant_WifiRssiState(pBtCoexist, 1, 2, BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES, 0);
\r
3285 btRssiState = halbtc8723b2ant_BtRssiState(2, BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES, 0);
\r
3287 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
\r
3289 halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);
\r
3291 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
3293 if(BTC_RSSI_HIGH(btRssiState))
\r
3294 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);
\r
3296 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);
\r
3298 if (BTC_RSSI_HIGH(wifiRssiState1) && BTC_RSSI_HIGH(btRssiState))
\r
3300 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);
\r
3301 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
\r
3305 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 13);
\r
3306 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);
\r
3309 halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 2);
\r
3312 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
\r
3313 if(BTC_WIFI_BW_HT40 == wifiBw)
\r
3315 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3316 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3318 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);
\r
3319 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3323 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);
\r
3324 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3329 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3330 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3332 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
3333 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3337 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
3338 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3344 halbtc8723b2ant_ActionPanEdr(
\r
3345 IN PBTC_COEXIST pBtCoexist
\r
3348 u1Byte wifiRssiState,wifiRssiState1, btRssiState;
\r
3351 wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
\r
3352 wifiRssiState1 = halbtc8723b2ant_WifiRssiState(pBtCoexist, 1, 2, BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES, 0);
\r
3353 btRssiState = halbtc8723b2ant_BtRssiState(2, BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES, 0);
\r
3355 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
\r
3357 halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);
\r
3359 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
3361 if(BTC_RSSI_HIGH(btRssiState))
\r
3362 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);
\r
3364 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);
\r
3366 if (BTC_RSSI_HIGH(wifiRssiState1) && BTC_RSSI_HIGH(btRssiState))
\r
3368 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 10);
\r
3369 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
\r
3373 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 13);
\r
3374 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);
\r
3377 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3378 (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3380 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);
\r
3384 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);
\r
3388 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
\r
3389 if(BTC_WIFI_BW_HT40 == wifiBw)
\r
3391 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3392 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3394 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);
\r
3395 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3399 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);
\r
3400 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3405 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3406 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3408 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
3409 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3413 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
3414 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3422 halbtc8723b2ant_ActionPanHs(
\r
3423 IN PBTC_COEXIST pBtCoexist
\r
3426 u1Byte wifiRssiState, wifiRssiState1, btRssiState;
\r
3429 wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
\r
3430 wifiRssiState1 = halbtc8723b2ant_WifiRssiState(pBtCoexist, 1, 2, BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES, 0);
\r
3431 btRssiState = halbtc8723b2ant_BtRssiState(2, BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES, 0);
\r
3433 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
\r
3435 halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);
\r
3437 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
3439 if(BTC_RSSI_HIGH(btRssiState))
\r
3440 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);
\r
3442 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);
\r
3444 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);
\r
3446 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
\r
3447 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);
\r
3449 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
\r
3450 if(BTC_WIFI_BW_HT40 == wifiBw)
\r
3452 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3453 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3455 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);
\r
3456 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3460 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);
\r
3461 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3466 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3467 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3469 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
3470 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3474 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
3475 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3482 halbtc8723b2ant_ActionPanEdrA2dp(
\r
3483 IN PBTC_COEXIST pBtCoexist
\r
3486 u1Byte wifiRssiState, wifiRssiState1, btRssiState;
\r
3489 wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
\r
3490 wifiRssiState1 = halbtc8723b2ant_WifiRssiState(pBtCoexist, 1, 2, BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES, 0);
\r
3491 btRssiState = halbtc8723b2ant_BtRssiState(2, BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES, 0);
\r
3493 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
\r
3495 halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);
\r
3497 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
3499 if(BTC_RSSI_HIGH(btRssiState))
\r
3500 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);
\r
3502 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);
\r
3504 if (BTC_RSSI_HIGH(wifiRssiState1) && BTC_RSSI_HIGH(btRssiState))
\r
3505 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
\r
3507 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);
\r
3509 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
\r
3511 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3512 (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3514 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 12);
\r
3516 if(BTC_WIFI_BW_HT40 == wifiBw)
\r
3517 halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 3);
\r
3519 halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 3);
\r
3523 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 13);
\r
3524 halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 3);
\r
3528 if(BTC_WIFI_BW_HT40 == wifiBw)
\r
3530 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3531 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3533 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);
\r
3534 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3538 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);
\r
3539 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3544 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3545 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3547 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
3548 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3552 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
3553 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3559 halbtc8723b2ant_ActionPanEdrHid(
\r
3560 IN PBTC_COEXIST pBtCoexist
\r
3563 u1Byte wifiRssiState, wifiRssiState1, btRssiState;
\r
3566 wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
\r
3567 wifiRssiState1 = halbtc8723b2ant_WifiRssiState(pBtCoexist, 1, 2, BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES, 0);
\r
3568 btRssiState = halbtc8723b2ant_BtRssiState(2, BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES, 0);
\r
3569 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
\r
3571 halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);
\r
3573 if(BTC_RSSI_HIGH(btRssiState))
\r
3574 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);
\r
3576 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);
\r
3578 if (BTC_RSSI_HIGH(wifiRssiState1) && BTC_RSSI_HIGH(btRssiState))
\r
3580 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);
\r
3581 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
\r
3585 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 14);
\r
3586 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);
\r
3589 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3590 (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3592 if(BTC_WIFI_BW_HT40 == wifiBw)
\r
3594 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 3);
\r
3595 //halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 11);
\r
3596 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x780);
\r
3600 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
3601 //halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);
\r
3602 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
\r
3604 halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, TRUE, FALSE, 2);
\r
3608 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
3609 //halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 14);
\r
3610 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
\r
3611 halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);
\r
3615 if(BTC_WIFI_BW_HT40 == wifiBw)
\r
3617 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3618 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3620 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);
\r
3621 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3625 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);
\r
3626 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3631 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3632 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3634 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);
\r
3635 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3639 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);
\r
3640 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3645 // HID+A2DP+PAN(EDR)
\r
3647 halbtc8723b2ant_ActionHidA2dpPanEdr(
\r
3648 IN PBTC_COEXIST pBtCoexist
\r
3651 u1Byte wifiRssiState,wifiRssiState1, btRssiState;
\r
3654 wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
\r
3655 wifiRssiState1 = halbtc8723b2ant_WifiRssiState(pBtCoexist, 1, 2, BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES, 0);
\r
3656 btRssiState = halbtc8723b2ant_BtRssiState(2, BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES, 0);
\r
3658 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
\r
3660 halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);
\r
3662 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
3664 if(BTC_RSSI_HIGH(btRssiState))
\r
3665 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);
\r
3667 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);
\r
3669 if (BTC_RSSI_HIGH(wifiRssiState1) && BTC_RSSI_HIGH(btRssiState))
\r
3671 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);
\r
3672 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
\r
3676 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 14);
\r
3677 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);
\r
3680 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
\r
3682 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3683 (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3685 if(BTC_WIFI_BW_HT40 == wifiBw)
\r
3686 halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);
\r
3688 halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, TRUE, FALSE, 3);
\r
3692 halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 3);
\r
3696 if(BTC_WIFI_BW_HT40 == wifiBw)
\r
3698 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3699 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3701 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);
\r
3702 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3706 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);
\r
3707 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3712 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3713 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3715 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);
\r
3716 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3720 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);
\r
3721 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3727 halbtc8723b2ant_ActionHidA2dp(
\r
3728 IN PBTC_COEXIST pBtCoexist
\r
3731 u1Byte wifiRssiState, wifiRssiState1, btRssiState;
\r
3735 wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
\r
3736 //btRssiState = halbtc8723b2ant_BtRssiState(2, 29, 0);
\r
3737 wifiRssiState1 = halbtc8723b2ant_WifiRssiState(pBtCoexist, 1, 2, BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES, 0);
\r
3738 btRssiState = halbtc8723b2ant_BtRssiState(3, BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES, 37);
\r
3740 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
\r
3742 halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, TRUE, 0x5);
\r
3744 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
3746 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
\r
3747 if(BTC_WIFI_BW_LEGACY == wifiBw)
\r
3749 if(BTC_RSSI_HIGH(btRssiState))
\r
3750 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);
\r
3751 else if(BTC_RSSI_MEDIUM(btRssiState))
\r
3752 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);
\r
3754 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);
\r
3757 { // only 802.11N mode we have to dec bt power to 4 degree
\r
3758 if(BTC_RSSI_HIGH(btRssiState))
\r
3760 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_AP_NUM, &apNum);
\r
3761 // need to check ap Number of Not
\r
3763 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 4);
\r
3765 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);
\r
3767 else if(BTC_RSSI_MEDIUM(btRssiState))
\r
3768 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);
\r
3770 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);
\r
3773 if (BTC_RSSI_HIGH(wifiRssiState1) && BTC_RSSI_HIGH(btRssiState))
\r
3775 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);
\r
3776 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
\r
3780 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 14);
\r
3781 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);
\r
3784 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3785 (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3787 halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, TRUE, FALSE, 3);
\r
3791 halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 3);
\r
3795 if(BTC_WIFI_BW_HT40 == wifiBw)
\r
3797 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3798 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3800 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);
\r
3801 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3805 halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);
\r
3806 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3811 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3812 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3814 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);
\r
3815 halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3819 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);
\r
3820 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3826 halbtc8723b2ant_ActionBtWhckTest(
\r
3827 IN PBTC_COEXIST pBtCoexist
\r
3830 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);
\r
3833 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
3834 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3836 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
\r
3838 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);
\r
3839 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);
\r
3843 halbtc8723b2ant_ActionWifiMultiPort(
\r
3844 IN PBTC_COEXIST pBtCoexist
\r
3847 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
3848 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);
\r
3851 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
3852 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3855 //pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
\r
3856 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);
\r
3858 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
\r
3859 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);
\r
3863 halbtc8723b2ant_RunCoexistMechanism(
\r
3864 IN PBTC_COEXIST pBtCoexist
\r
3867 BOOLEAN bWifiUnder5G=FALSE, bBtHsOn=FALSE;
\r
3868 u1Byte btInfoOriginal=0, btRetryCnt=0;
\r
3869 u1Byte algorithm=0;
\r
3870 u4Byte numOfWifiLink=0;
\r
3871 u4Byte wifiLinkStatus=0;
\r
3872 PBTC_BT_LINK_INFO pBtLinkInfo=&pBtCoexist->btLinkInfo;
\r
3873 BOOLEAN bMiracastPlusBt=FALSE;
\r
3874 BOOLEAN bScan=FALSE, bLink=FALSE, bRoam=FALSE;
\r
3876 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], RunCoexistMechanism()===>\n"));
\r
3878 if(pBtCoexist->bManualControl)
\r
3880 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], RunCoexistMechanism(), return for Manual CTRL <===\n"));
\r
3884 if(pCoexSta->bUnderIps)
\r
3886 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], wifi is under IPS !!!\n"));
\r
3890 if(pCoexSta->bBtWhckTest)
\r
3892 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT is under WHCK TEST!!!\n"));
\r
3893 halbtc8723b2ant_ActionBtWhckTest(pBtCoexist);
\r
3897 algorithm = halbtc8723b2ant_ActionAlgorithm(pBtCoexist);
\r
3898 if(pCoexSta->bC2hBtInquiryPage && (BT_8723B_2ANT_COEX_ALGO_PANHS!=algorithm))
\r
3900 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT is under inquiry/page scan !!\n"));
\r
3901 halbtc8723b2ant_ActionBtInquiry(pBtCoexist);
\r
3907 if(pCoexDm->bNeedRecover0x948)
\r
3909 pCoexDm->bNeedRecover0x948 = FALSE;
\r
3910 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x948, pCoexDm->backup0x948);
\r
3915 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);
\r
3916 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_LINK, &bLink);
\r
3917 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_ROAM, &bRoam);
\r
3919 if(bScan || bLink || bRoam)
\r
3921 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], WiFi is under Link Process !!\n"));
\r
3922 halbtc8723b2ant_ActionWiFiLinkProcess(pBtCoexist);
\r
3928 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_LINK_STATUS, &wifiLinkStatus);
\r
3929 numOfWifiLink = wifiLinkStatus>>16;
\r
3931 if((numOfWifiLink>=2) || (wifiLinkStatus&WIFI_P2P_GO_CONNECTED))
\r
3933 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("############# [BTCoex], Multi-Port numOfWifiLink = %d, wifiLinkStatus = 0x%x\n", numOfWifiLink,wifiLinkStatus) );
\r
3935 if(pBtLinkInfo->bBtLinkExist)
\r
3937 bMiracastPlusBt = TRUE;
\r
3941 bMiracastPlusBt = FALSE;
\r
3944 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_MIRACAST_PLUS_BT, &bMiracastPlusBt);
\r
3945 halbtc8723b2ant_ActionWifiMultiPort(pBtCoexist);
\r
3951 bMiracastPlusBt = FALSE;
\r
3952 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_MIRACAST_PLUS_BT, &bMiracastPlusBt);
\r
3955 pCoexDm->curAlgorithm = algorithm;
\r
3956 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Algorithm = %d \n", pCoexDm->curAlgorithm));
\r
3958 if(halbtc8723b2ant_IsCommonAction(pBtCoexist))
\r
3960 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant common.\n"));
\r
3961 pCoexDm->bAutoTdmaAdjust = FALSE;
\r
3965 if(pCoexDm->curAlgorithm != pCoexDm->preAlgorithm)
\r
3967 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], preAlgorithm=%d, curAlgorithm=%d\n",
\r
3968 pCoexDm->preAlgorithm, pCoexDm->curAlgorithm));
\r
3969 pCoexDm->bAutoTdmaAdjust = FALSE;
\r
3971 switch(pCoexDm->curAlgorithm)
\r
3973 case BT_8723B_2ANT_COEX_ALGO_SCO:
\r
3974 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = SCO.\n"));
\r
3975 halbtc8723b2ant_ActionSco(pBtCoexist);
\r
3977 case BT_8723B_2ANT_COEX_ALGO_HID:
\r
3978 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HID.\n"));
\r
3979 halbtc8723b2ant_ActionHid(pBtCoexist);
\r
3981 case BT_8723B_2ANT_COEX_ALGO_A2DP:
\r
3982 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = A2DP.\n"));
\r
3983 halbtc8723b2ant_ActionA2dp(pBtCoexist);
\r
3985 case BT_8723B_2ANT_COEX_ALGO_A2DP_PANHS:
\r
3986 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = A2DP+PAN(HS).\n"));
\r
3987 halbtc8723b2ant_ActionA2dpPanHs(pBtCoexist);
\r
3989 case BT_8723B_2ANT_COEX_ALGO_PANEDR:
\r
3990 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = PAN(EDR).\n"));
\r
3991 halbtc8723b2ant_ActionPanEdr(pBtCoexist);
\r
3993 case BT_8723B_2ANT_COEX_ALGO_PANHS:
\r
3994 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HS mode.\n"));
\r
3995 halbtc8723b2ant_ActionPanHs(pBtCoexist);
\r
3997 case BT_8723B_2ANT_COEX_ALGO_PANEDR_A2DP:
\r
3998 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = PAN+A2DP.\n"));
\r
3999 halbtc8723b2ant_ActionPanEdrA2dp(pBtCoexist);
\r
4001 case BT_8723B_2ANT_COEX_ALGO_PANEDR_HID:
\r
4002 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = PAN(EDR)+HID.\n"));
\r
4003 halbtc8723b2ant_ActionPanEdrHid(pBtCoexist);
\r
4005 case BT_8723B_2ANT_COEX_ALGO_HID_A2DP_PANEDR:
\r
4006 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HID+A2DP+PAN.\n"));
\r
4007 halbtc8723b2ant_ActionHidA2dpPanEdr(pBtCoexist);
\r
4009 case BT_8723B_2ANT_COEX_ALGO_HID_A2DP:
\r
4010 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HID+A2DP.\n"));
\r
4011 halbtc8723b2ant_ActionHidA2dp(pBtCoexist);
\r
4014 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = coexist All Off!!\n"));
\r
4015 halbtc8723b2ant_CoexAllOff(pBtCoexist);
\r
4018 pCoexDm->preAlgorithm = pCoexDm->curAlgorithm;
\r
4023 halbtc8723b2ant_WifiOffHwCfg(
\r
4024 IN PBTC_COEXIST pBtCoexist
\r
4027 BOOLEAN bIsInMpMode = FALSE;
\r
4028 u1Byte H2C_Parameter[2] ={0};
\r
4031 // set wlan_act to low
\r
4032 pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x76e, 0x4);
\r
4034 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x780); //WiFi goto standby while GNT_BT 0-->1
\r
4035 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);
\r
4036 if(fwVer >= 0x180000)
\r
4038 /* Use H2C to set GNT_BT to HIGH */
\r
4039 H2C_Parameter[0] = 1;
\r
4040 pBtCoexist->fBtcFillH2c(pBtCoexist, 0x6E, 1, H2C_Parameter);
\r
4044 pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x765, 0x18);
\r
4047 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_IS_IN_MP_MODE, &bIsInMpMode);
\r
4049 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x67, 0x20, 0x0); //BT select s0/s1 is controlled by BT
\r
4051 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x67, 0x20, 0x1); //BT select s0/s1 is controlled by WiFi
\r
4055 halbtc8723b2ant_InitHwConfig(
\r
4056 IN PBTC_COEXIST pBtCoexist,
\r
4057 IN BOOLEAN bBackUp
\r
4060 PBTC_BOARD_INFO pBoardInfo=&pBtCoexist->boardInfo;
\r
4061 u4Byte u4Tmp=0, fwVer;
\r
4064 u1Byte H2C_Parameter[2] ={0};
\r
4067 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], 2Ant Init HW Config!!\n"));
\r
4069 // backup rf 0x1e value
\r
4070 pCoexDm->btRf0x1eBackup =
\r
4071 pBtCoexist->fBtcGetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff);
\r
4074 u1Tmp = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x790);
\r
4077 pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x790, u1Tmp);
\r
4080 halbtc8723b2ant_SetAntPath(pBtCoexist, BTC_ANT_WIFI_AT_MAIN, TRUE, FALSE);
\r
4081 pCoexSta->disVerInfoCnt = 0;
\r
4084 halbtc8723b2ant_CoexTableWithType(pBtCoexist, FORCE_EXEC, 0);
\r
4086 // Enable counter statistics
\r
4087 pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x76e, 0x4); //0x76e[3] =1, WLAN_Act control by PTA
\r
4088 pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x778, 0x3);
\r
4089 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x40, 0x20, 0x1);
\r
4092 //============================================================
\r
4093 // work around function start with wa_halbtc8723b2ant_
\r
4094 //============================================================
\r
4095 //============================================================
\r
4096 // extern function start with EXhalbtc8723b2ant_
\r
4097 //============================================================
\r
4099 EXhalbtc8723b2ant_PowerOnSetting(
\r
4100 IN PBTC_COEXIST pBtCoexist
\r
4103 PBTC_BOARD_INFO pBoardInfo=&pBtCoexist->boardInfo;
\r
4106 pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x67, 0x20);
\r
4108 // enable BB, REG_SYS_FUNC_EN such that we can write 0x948 correctly.
\r
4109 u2Tmp = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0x2);
\r
4110 pBtCoexist->fBtcWrite2Byte(pBtCoexist, 0x2, u2Tmp|BIT0|BIT1);
\r
4112 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x948, 0x0);
\r
4114 if(pBtCoexist->chipInterface == BTC_INTF_USB)
\r
4116 // fixed at S0 for USB interface
\r
4117 pBoardInfo->btdmAntPos = BTC_ANTENNA_AT_AUX_PORT;
\r
4121 // for PCIE and SDIO interface, we check efuse 0xc3[6]
\r
4122 if(pBoardInfo->singleAntPath == 0)
\r
4125 pBoardInfo->btdmAntPos = BTC_ANTENNA_AT_MAIN_PORT;
\r
4127 else if(pBoardInfo->singleAntPath == 1)
\r
4130 pBoardInfo->btdmAntPos = BTC_ANTENNA_AT_AUX_PORT;
\r
4136 EXhalbtc8723b2ant_PreLoadFirmware(
\r
4137 IN PBTC_COEXIST pBtCoexist
\r
4140 PBTC_BOARD_INFO pBoardInfo=&pBtCoexist->boardInfo;
\r
4141 u1Byte u1Tmp=0x4; /* Set BIT2 by default since it's 2ant case */
\r
4144 // S0 or S1 setting and Local register setting(By the setting fw can get ant number, S0/S1, ... info)
\r
4145 // Local setting bit define
\r
4146 // BIT0: "0" for no antenna inverse; "1" for antenna inverse
\r
4147 // BIT1: "0" for internal switch; "1" for external switch
\r
4148 // BIT2: "0" for one antenna; "1" for two antenna
\r
4149 // NOTE: here default all internal switch and 1-antenna ==> BIT1=0 and BIT2=0
\r
4150 if(pBtCoexist->chipInterface == BTC_INTF_USB)
\r
4152 // fixed at S0 for USB interface
\r
4153 u1Tmp |= 0x1; // antenna inverse
\r
4154 pBtCoexist->fBtcWriteLocalReg1Byte(pBtCoexist, 0xfe08, u1Tmp);
\r
4158 // for PCIE and SDIO interface, we check efuse 0xc3[6]
\r
4159 if(pBoardInfo->singleAntPath == 0)
\r
4162 else if(pBoardInfo->singleAntPath == 1)
\r
4165 u1Tmp |= 0x1; // antenna inverse
\r
4168 if(pBtCoexist->chipInterface == BTC_INTF_PCI)
\r
4170 pBtCoexist->fBtcWriteLocalReg1Byte(pBtCoexist, 0x384, u1Tmp);
\r
4172 else if(pBtCoexist->chipInterface == BTC_INTF_SDIO)
\r
4174 pBtCoexist->fBtcWriteLocalReg1Byte(pBtCoexist, 0x60, u1Tmp);
\r
4180 EXhalbtc8723b2ant_InitHwConfig(
\r
4181 IN PBTC_COEXIST pBtCoexist,
\r
4182 IN BOOLEAN bWifiOnly
\r
4185 halbtc8723b2ant_InitHwConfig(pBtCoexist, TRUE);
\r
4189 EXhalbtc8723b2ant_InitCoexDm(
\r
4190 IN PBTC_COEXIST pBtCoexist
\r
4193 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], Coex Mechanism Init!!\n"));
\r
4195 halbtc8723b2ant_InitCoexDm(pBtCoexist);
\r
4199 EXhalbtc8723b2ant_DisplayCoexInfo(
\r
4200 IN PBTC_COEXIST pBtCoexist
\r
4203 PBTC_BOARD_INFO pBoardInfo=&pBtCoexist->boardInfo;
\r
4204 PBTC_STACK_INFO pStackInfo=&pBtCoexist->stackInfo;
\r
4205 PBTC_BT_LINK_INFO pBtLinkInfo=&pBtCoexist->btLinkInfo;
\r
4206 pu1Byte cliBuf=pBtCoexist->cliBuf;
\r
4207 u1Byte u1Tmp[4], i, btInfoExt, psTdmaCase=0;
\r
4209 u4Byte faOfdm, faCck;
\r
4210 u4Byte fwVer=0, btPatchVer=0;
\r
4212 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n ============[BT Coexist info]============");
\r
4213 CL_PRINTF(cliBuf);
\r
4215 if(pBtCoexist->bManualControl)
\r
4217 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n ============[Under Manual Control]============");
\r
4218 CL_PRINTF(cliBuf);
\r
4219 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n ==========================================");
\r
4220 CL_PRINTF(cliBuf);
\r
4223 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d ", "Ant PG number/ Ant mechanism:", \
\r
4224 pBoardInfo->pgAntNum, pBoardInfo->btdmAntNum);
\r
4225 CL_PRINTF(cliBuf);
\r
4227 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s / %d", "BT stack/ hci ext ver", \
\r
4228 ((pStackInfo->bProfileNotified)? "Yes":"No"), pStackInfo->hciVersion);
\r
4229 CL_PRINTF(cliBuf);
\r
4231 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_BT_PATCH_VER, &btPatchVer);
\r
4232 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);
\r
4233 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d_%x/ 0x%x/ 0x%x(%d)", "CoexVer/ FwVer/ PatchVer", \
\r
4234 GLCoexVerDate8723b2Ant, GLCoexVer8723b2Ant, fwVer, btPatchVer, btPatchVer);
\r
4235 CL_PRINTF(cliBuf);
\r
4237 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %02x %02x %02x ", "Wifi channel informed to BT", \
\r
4238 pCoexDm->wifiChnlInfo[0], pCoexDm->wifiChnlInfo[1],
\r
4239 pCoexDm->wifiChnlInfo[2]);
\r
4240 CL_PRINTF(cliBuf);
\r
4243 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Wifi Status]============");
\r
4244 CL_PRINTF(cliBuf);
\r
4245 pBtCoexist->fBtcDispDbgMsg(pBtCoexist, BTC_DBG_DISP_WIFI_STATUS);
\r
4247 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[BT Status]============");
\r
4248 CL_PRINTF(cliBuf);
\r
4250 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = [%s/ %ddBm/ %d] ", "BT [status/ rssi/ retryCnt]", \
\r
4251 ((pBtCoexist->btInfo.bBtDisabled)? ("disabled"): ((pCoexSta->bC2hBtInquiryPage)?("inquiry/page scan"):((BT_8723B_2ANT_BT_STATUS_NON_CONNECTED_IDLE == pCoexDm->btStatus)? "non-connected idle":
\r
4252 ( (BT_8723B_2ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus)? "connected-idle":"busy")))),
\r
4253 pCoexSta->btRssi-100, pCoexSta->btRetryCnt);
\r
4254 CL_PRINTF(cliBuf);
\r
4256 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d / %d / %d", "SCO/HID/PAN/A2DP", \
\r
4257 pBtLinkInfo->bScoExist, pBtLinkInfo->bHidExist, pBtLinkInfo->bPanExist, pBtLinkInfo->bA2dpExist);
\r
4258 CL_PRINTF(cliBuf);
\r
4259 pBtCoexist->fBtcDispDbgMsg(pBtCoexist, BTC_DBG_DISP_BT_LINK_INFO);
\r
4261 btInfoExt = pCoexSta->btInfoExt;
\r
4262 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s", "BT Info A2DP rate", \
\r
4263 (btInfoExt&BIT0)? "Basic rate":"EDR rate");
\r
4264 CL_PRINTF(cliBuf);
\r
4266 for(i=0; i<BT_INFO_SRC_8723B_2ANT_MAX; i++)
\r
4268 if(pCoexSta->btInfoC2hCnt[i])
\r
4270 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %02x %02x %02x %02x %02x %02x %02x(%d)", GLBtInfoSrc8723b2Ant[i], \
\r
4271 pCoexSta->btInfoC2h[i][0], pCoexSta->btInfoC2h[i][1],
\r
4272 pCoexSta->btInfoC2h[i][2], pCoexSta->btInfoC2h[i][3],
\r
4273 pCoexSta->btInfoC2h[i][4], pCoexSta->btInfoC2h[i][5],
\r
4274 pCoexSta->btInfoC2h[i][6], pCoexSta->btInfoC2hCnt[i]);
\r
4275 CL_PRINTF(cliBuf);
\r
4280 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Sw mechanism]============");
\r
4281 CL_PRINTF(cliBuf);
\r
4282 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d/ %d ", "SM1[ShRf/ LpRA/ LimDig]", \
\r
4283 pCoexDm->bCurRfRxLpfShrink, pCoexDm->bCurLowPenaltyRa, pCoexDm->bLimitedDig);
\r
4284 CL_PRINTF(cliBuf);
\r
4285 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d/ %d(0x%x) ", "SM2[AgcT/ AdcB/ SwDacSwing(lvl)]", \
\r
4286 pCoexDm->bCurAgcTableEn, pCoexDm->bCurAdcBackOff, pCoexDm->bCurDacSwingOn, pCoexDm->curDacSwingLvl);
\r
4287 CL_PRINTF(cliBuf);
\r
4290 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Fw mechanism]============");
\r
4291 CL_PRINTF(cliBuf);
\r
4293 psTdmaCase = pCoexDm->curPsTdma;
\r
4294 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %02x %02x %02x %02x %02x case-%d (auto:%d)", "PS TDMA", \
\r
4295 pCoexDm->psTdmaPara[0], pCoexDm->psTdmaPara[1],
\r
4296 pCoexDm->psTdmaPara[2], pCoexDm->psTdmaPara[3],
\r
4297 pCoexDm->psTdmaPara[4], psTdmaCase, pCoexDm->bAutoTdmaAdjust);
\r
4298 CL_PRINTF(cliBuf);
\r
4300 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "Coex Table Type", \
\r
4301 pCoexSta->nCoexTableType);
\r
4302 CL_PRINTF(cliBuf);
\r
4304 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d ", "DecBtPwr/ IgnWlanAct", \
\r
4305 pCoexDm->curBtDecPwrLvl, pCoexDm->bCurIgnoreWlanAct);
\r
4306 CL_PRINTF(cliBuf);
\r
4309 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Hw setting]============");
\r
4310 CL_PRINTF(cliBuf);
\r
4312 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "RF-A, 0x1e initVal", \
\r
4313 pCoexDm->btRf0x1eBackup);
\r
4314 CL_PRINTF(cliBuf);
\r
4316 u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x778);
\r
4317 u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x880);
\r
4318 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x", "0x778/0x880[29:25]", \
\r
4319 u1Tmp[0], (u4Tmp[0]&0x3e000000) >> 25);
\r
4320 CL_PRINTF(cliBuf);
\r
4323 u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x948);
\r
4324 u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x67);
\r
4325 u1Tmp[1] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x765);
\r
4326 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x/ 0x%x", "0x948/ 0x67[5] / 0x765", \
\r
4327 u4Tmp[0], ((u1Tmp[0]&0x20)>> 5), u1Tmp[1]);
\r
4328 CL_PRINTF(cliBuf);
\r
4330 u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x92c);
\r
4331 u4Tmp[1] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x930);
\r
4332 u4Tmp[2] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x944);
\r
4333 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
4334 u4Tmp[0]&0x3, u4Tmp[1]&0xff, u4Tmp[2]&0x3);
\r
4335 CL_PRINTF(cliBuf);
\r
4338 u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x39);
\r
4339 u1Tmp[1] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x40);
\r
4340 u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x4c);
\r
4341 u1Tmp[2] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x64);
\r
4342 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
4343 ((u1Tmp[0] & 0x8)>>3), u1Tmp[1], ((u4Tmp[0]&0x01800000)>>23), u1Tmp[2]&0x1);
\r
4344 CL_PRINTF(cliBuf);
\r
4346 u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x550);
\r
4347 u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x522);
\r
4348 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x", "0x550(bcn ctrl)/0x522", \
\r
4349 u4Tmp[0], u1Tmp[0]);
\r
4350 CL_PRINTF(cliBuf);
\r
4352 u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0xc50);
\r
4353 u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x49c);
\r
4354 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x", "0xc50(dig)/0x49c(null-drop)", \
\r
4355 u4Tmp[0]&0xff, u1Tmp[0]);
\r
4356 CL_PRINTF(cliBuf);
\r
4358 u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0xda0);
\r
4359 u4Tmp[1] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0xda4);
\r
4360 u4Tmp[2] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0xda8);
\r
4361 u4Tmp[3] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0xcf0);
\r
4363 u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0xa5b);
\r
4364 u1Tmp[1] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0xa5c);
\r
4366 faOfdm = ((u4Tmp[0]&0xffff0000) >> 16) + ((u4Tmp[1]&0xffff0000) >> 16) + (u4Tmp[1] & 0xffff) + (u4Tmp[2] & 0xffff) + \
\r
4367 ((u4Tmp[3]&0xffff0000) >> 16) + (u4Tmp[3] & 0xffff) ;
\r
4368 faCck = (u1Tmp[0] << 8) + u1Tmp[1];
\r
4370 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x/ 0x%x", "OFDM-CCA/OFDM-FA/CCK-FA", \
\r
4371 u4Tmp[0]&0xffff, faOfdm, faCck);
\r
4372 CL_PRINTF(cliBuf);
\r
4374 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d/ %d/ %d", "CRC_OK CCK/11g/11n/11n-Agg", \
\r
4375 pCoexSta->nCRCOK_CCK, pCoexSta->nCRCOK_11g, pCoexSta->nCRCOK_11n, pCoexSta->nCRCOK_11nAgg);
\r
4376 CL_PRINTF(cliBuf);
\r
4378 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d/ %d/ %d", "CRC_Err CCK/11g/11n/11n-Agg", \
\r
4379 pCoexSta->nCRCErr_CCK, pCoexSta->nCRCErr_11g, pCoexSta->nCRCErr_11n, pCoexSta->nCRCErr_11nAgg);
\r
4380 CL_PRINTF(cliBuf);
\r
4382 u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x6c0);
\r
4383 u4Tmp[1] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x6c4);
\r
4384 u4Tmp[2] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x6c8);
\r
4385 u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x6cc);
\r
4386 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x/ 0x%x/ 0x%x", "0x6c0/0x6c4/0x6c8/0x6cc(coexTable)", \
\r
4387 u4Tmp[0], u4Tmp[1], u4Tmp[2], u1Tmp[0]);
\r
4388 CL_PRINTF(cliBuf);
\r
4390 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d", "0x770(high-pri rx/tx)", \
\r
4391 pCoexSta->highPriorityRx, pCoexSta->highPriorityTx);
\r
4392 CL_PRINTF(cliBuf);
\r
4393 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d", "0x774(low-pri rx/tx)", \
\r
4394 pCoexSta->lowPriorityRx, pCoexSta->lowPriorityTx);
\r
4395 CL_PRINTF(cliBuf);
\r
4396 #if(BT_AUTO_REPORT_ONLY_8723B_2ANT == 1)
\r
4397 //halbtc8723b2ant_MonitorBtCtr(pBtCoexist);
\r
4399 pBtCoexist->fBtcDispDbgMsg(pBtCoexist, BTC_DBG_DISP_COEX_STATISTICS);
\r
4404 EXhalbtc8723b2ant_IpsNotify(
\r
4405 IN PBTC_COEXIST pBtCoexist,
\r
4409 if(BTC_IPS_ENTER == type)
\r
4411 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], IPS ENTER notify\n"));
\r
4412 pCoexSta->bUnderIps = TRUE;
\r
4413 halbtc8723b2ant_WifiOffHwCfg(pBtCoexist);
\r
4414 halbtc8723b2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);
\r
4415 halbtc8723b2ant_CoexAllOff(pBtCoexist);
\r
4417 else if(BTC_IPS_LEAVE == type)
\r
4419 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], IPS LEAVE notify\n"));
\r
4420 pCoexSta->bUnderIps = FALSE;
\r
4421 halbtc8723b2ant_InitHwConfig(pBtCoexist, FALSE);
\r
4422 halbtc8723b2ant_InitCoexDm(pBtCoexist);
\r
4423 halbtc8723b2ant_QueryBtInfo(pBtCoexist);
\r
4428 EXhalbtc8723b2ant_LpsNotify(
\r
4429 IN PBTC_COEXIST pBtCoexist,
\r
4433 if(BTC_LPS_ENABLE == type)
\r
4435 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], LPS ENABLE notify\n"));
\r
4436 pCoexSta->bUnderLps = TRUE;
\r
4438 else if(BTC_LPS_DISABLE == type)
\r
4440 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], LPS DISABLE notify\n"));
\r
4441 pCoexSta->bUnderLps = FALSE;
\r
4446 EXhalbtc8723b2ant_ScanNotify(
\r
4447 IN PBTC_COEXIST pBtCoexist,
\r
4452 u1Byte u1Tmpa, u1Tmpb;
\r
4456 u4Tmp = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x948);
\r
4457 u1Tmpa = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x765);
\r
4458 u1Tmpb = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x76e);
\r
4460 if(BTC_SCAN_START == type)
\r
4462 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN START notify\n"));
\r
4464 else if(BTC_SCAN_FINISH == type)
\r
4466 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN FINISH notify\n"));
\r
4469 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("############# [BTCoex], 0x948=0x%x, 0x765=0x%x, 0x76e=0x%x\n",
\r
4470 u4Tmp, u1Tmpa, u1Tmpb));
\r
4474 EXhalbtc8723b2ant_ConnectNotify(
\r
4475 IN PBTC_COEXIST pBtCoexist,
\r
4479 if(BTC_ASSOCIATE_START == type)
\r
4481 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT START notify\n"));
\r
4483 else if(BTC_ASSOCIATE_FINISH == type)
\r
4485 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT FINISH notify\n"));
\r
4490 EXhalbtc8723b2ant_MediaStatusNotify(
\r
4491 IN PBTC_COEXIST pBtCoexist,
\r
4495 u1Byte H2C_Parameter[3] ={0};
\r
4497 u1Byte wifiCentralChnl;
\r
4500 if(BTC_MEDIA_CONNECT == type)
\r
4502 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], MEDIA connect notify\n"));
\r
4506 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], MEDIA disconnect notify\n"));
\r
4509 // only 2.4G we need to inform bt the chnl mask
\r
4510 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_WIFI_CENTRAL_CHNL, &wifiCentralChnl);
\r
4511 if( (BTC_MEDIA_CONNECT == type) &&
\r
4512 (wifiCentralChnl <= 14) )
\r
4514 H2C_Parameter[0] = 0x1;
\r
4515 H2C_Parameter[1] = wifiCentralChnl;
\r
4516 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
\r
4517 if(BTC_WIFI_BW_HT40 == wifiBw)
\r
4518 H2C_Parameter[2] = 0x30;
\r
4521 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_AP_NUM, &apNum);
\r
4523 H2C_Parameter[2] = 0x30;
\r
4525 H2C_Parameter[2] = 0x20;
\r
4529 pCoexDm->wifiChnlInfo[0] = H2C_Parameter[0];
\r
4530 pCoexDm->wifiChnlInfo[1] = H2C_Parameter[1];
\r
4531 pCoexDm->wifiChnlInfo[2] = H2C_Parameter[2];
\r
4533 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], FW write 0x66=0x%x\n",
\r
4534 H2C_Parameter[0]<<16|H2C_Parameter[1]<<8|H2C_Parameter[2]));
\r
4536 pBtCoexist->fBtcFillH2c(pBtCoexist, 0x66, 3, H2C_Parameter);
\r
4540 EXhalbtc8723b2ant_SpecialPacketNotify(
\r
4541 IN PBTC_COEXIST pBtCoexist,
\r
4545 if(type == BTC_PACKET_DHCP)
\r
4547 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], DHCP Packet notify\n"));
\r
4552 EXhalbtc8723b2ant_BtInfoNotify(
\r
4553 IN PBTC_COEXIST pBtCoexist,
\r
4554 IN pu1Byte tmpBuf,
\r
4558 PBTC_BT_LINK_INFO pBtLinkInfo=&pBtCoexist->btLinkInfo;
\r
4560 u1Byte i, rspSource=0;
\r
4561 BOOLEAN bBtBusy=FALSE, bLimitedDig=FALSE;
\r
4562 BOOLEAN bWifiConnected=FALSE;
\r
4563 static BOOLEAN bPreScoExist=FALSE;
\r
4564 u4Byte raMask=0x0;
\r
4566 pCoexSta->bC2hBtInfoReqSent = FALSE;
\r
4568 rspSource = tmpBuf[0]&0xf;
\r
4569 if(rspSource >= BT_INFO_SRC_8723B_2ANT_MAX)
\r
4570 rspSource = BT_INFO_SRC_8723B_2ANT_WIFI_FW;
\r
4571 pCoexSta->btInfoC2hCnt[rspSource]++;
\r
4573 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Bt info[%d], length=%d, hex data=[", rspSource, length));
\r
4574 for(i=0; i<length; i++)
\r
4576 pCoexSta->btInfoC2h[rspSource][i] = tmpBuf[i];
\r
4578 btInfo = tmpBuf[i];
\r
4581 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("0x%02x]\n", tmpBuf[i]));
\r
4585 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("0x%02x, ", tmpBuf[i]));
\r
4589 if(pBtCoexist->bManualControl)
\r
4591 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), return for Manual CTRL<===\n"));
\r
4595 // if 0xff, it means BT is under WHCK test
\r
4596 if (btInfo == 0xff)
\r
4597 pCoexSta->bBtWhckTest = TRUE;
\r
4599 pCoexSta->bBtWhckTest = FALSE;
\r
4601 if(BT_INFO_SRC_8723B_2ANT_WIFI_FW != rspSource)
\r
4603 pCoexSta->btRetryCnt = // [3:0]
\r
4604 pCoexSta->btInfoC2h[rspSource][2]&0xf;
\r
4606 pCoexSta->btRssi =
\r
4607 pCoexSta->btInfoC2h[rspSource][3]*2+10;
\r
4609 pCoexSta->btInfoExt =
\r
4610 pCoexSta->btInfoC2h[rspSource][4];
\r
4612 pCoexSta->bBtTxRxMask = (pCoexSta->btInfoC2h[rspSource][2]&0x40);
\r
4613 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_TX_RX_MASK, &pCoexSta->bBtTxRxMask);
\r
4614 if (pCoexSta->bBtTxRxMask)
\r
4616 /* BT into is responded by BT FW and BT RF REG 0x3C != 0x01 => Need to switch BT TRx Mask */
\r
4617 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Switch BT TRx Mask since BT RF REG 0x3C != 0x01\n"));
\r
4618 pBtCoexist->fBtcSetBtReg(pBtCoexist, BTC_BT_REG_RF, 0x3c, 0x01);
\r
4621 // Here we need to resend some wifi info to BT
\r
4622 // because bt is reset and loss of the info.
\r
4623 if( (pCoexSta->btInfoExt & BIT1) )
\r
4625 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT ext info bit1 check, send wifi BW&Chnl to BT!!\n"));
\r
4626 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);
\r
4627 if(bWifiConnected)
\r
4629 EXhalbtc8723b2ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_CONNECT);
\r
4633 EXhalbtc8723b2ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_DISCONNECT);
\r
4637 if( (pCoexSta->btInfoExt & BIT3) )
\r
4639 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT ext info bit3 check, set BT NOT to ignore Wlan active!!\n"));
\r
4640 halbtc8723b2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, FALSE);
\r
4644 // BT already NOT ignore Wlan active, do nothing here.
\r
4646 #if(BT_AUTO_REPORT_ONLY_8723B_2ANT == 0)
\r
4647 if( (pCoexSta->btInfoExt & BIT4) )
\r
4649 // BT auto report already enabled, do nothing
\r
4653 halbtc8723b2ant_BtAutoReport(pBtCoexist, FORCE_EXEC, TRUE);
\r
4658 // check BIT2 first ==> check if bt is under inquiry or page scan
\r
4659 if(btInfo & BT_INFO_8723B_2ANT_B_INQ_PAGE)
\r
4660 pCoexSta->bC2hBtInquiryPage = TRUE;
\r
4662 pCoexSta->bC2hBtInquiryPage = FALSE;
\r
4664 // set link exist status
\r
4665 if(!(btInfo&BT_INFO_8723B_2ANT_B_CONNECTION))
\r
4667 pCoexSta->bBtLinkExist = FALSE;
\r
4668 pCoexSta->bPanExist = FALSE;
\r
4669 pCoexSta->bA2dpExist = FALSE;
\r
4670 pCoexSta->bHidExist = FALSE;
\r
4671 pCoexSta->bScoExist = FALSE;
\r
4673 else // connection exists
\r
4675 pCoexSta->bBtLinkExist = TRUE;
\r
4676 if(btInfo & BT_INFO_8723B_2ANT_B_FTP)
\r
4677 pCoexSta->bPanExist = TRUE;
\r
4679 pCoexSta->bPanExist = FALSE;
\r
4680 if(btInfo & BT_INFO_8723B_2ANT_B_A2DP)
\r
4681 pCoexSta->bA2dpExist = TRUE;
\r
4683 pCoexSta->bA2dpExist = FALSE;
\r
4684 if(btInfo & BT_INFO_8723B_2ANT_B_HID)
\r
4685 pCoexSta->bHidExist = TRUE;
\r
4687 pCoexSta->bHidExist = FALSE;
\r
4688 if(btInfo & BT_INFO_8723B_2ANT_B_SCO_ESCO)
\r
4689 pCoexSta->bScoExist = TRUE;
\r
4691 pCoexSta->bScoExist = FALSE;
\r
4694 halbtc8723b2ant_UpdateBtLinkInfo(pBtCoexist);
\r
4696 if(!(btInfo&BT_INFO_8723B_2ANT_B_CONNECTION))
\r
4698 pCoexDm->btStatus = BT_8723B_2ANT_BT_STATUS_NON_CONNECTED_IDLE;
\r
4699 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), BT Non-Connected idle!!!\n"));
\r
4701 else if(btInfo == BT_INFO_8723B_2ANT_B_CONNECTION) // connection exists but no busy
\r
4703 pCoexDm->btStatus = BT_8723B_2ANT_BT_STATUS_CONNECTED_IDLE;
\r
4704 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), BT Connected-idle!!!\n"));
\r
4706 else if((btInfo&BT_INFO_8723B_2ANT_B_SCO_ESCO) ||
\r
4707 (btInfo&BT_INFO_8723B_2ANT_B_SCO_BUSY))
\r
4709 pCoexDm->btStatus = BT_8723B_2ANT_BT_STATUS_SCO_BUSY;
\r
4710 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), BT SCO busy!!!\n"));
\r
4712 else if(btInfo&BT_INFO_8723B_2ANT_B_ACL_BUSY)
\r
4714 pCoexDm->btStatus = BT_8723B_2ANT_BT_STATUS_ACL_BUSY;
\r
4715 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), BT ACL busy!!!\n"));
\r
4719 pCoexDm->btStatus = BT_8723B_2ANT_BT_STATUS_MAX;
\r
4720 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), BT Non-Defined state!!!\n"));
\r
4723 if( (BT_8723B_2ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus) ||
\r
4724 (BT_8723B_2ANT_BT_STATUS_SCO_BUSY == pCoexDm->btStatus) ||
\r
4725 (BT_8723B_2ANT_BT_STATUS_ACL_SCO_BUSY == pCoexDm->btStatus) )
\r
4728 bLimitedDig = TRUE;
\r
4733 bLimitedDig = FALSE;
\r
4736 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_TRAFFIC_BUSY, &bBtBusy);
\r
4738 pCoexDm->bLimitedDig = bLimitedDig;
\r
4739 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_LIMITED_DIG, &bLimitedDig);
\r
4741 halbtc8723b2ant_RunCoexistMechanism(pBtCoexist);
\r
4745 EXhalbtc8723b2ant_HaltNotify(
\r
4746 IN PBTC_COEXIST pBtCoexist
\r
4749 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Halt notify\n"));
\r
4751 halbtc8723b2ant_WifiOffHwCfg(pBtCoexist);
\r
4752 //remove due to interrupt is disabled that polling c2h will fail and delay 100ms.
\r
4753 //pBtCoexist->fBtcSetBtReg(pBtCoexist, BTC_BT_REG_RF, 0x3c, 0x15); //BT goto standby while GNT_BT 1-->0
\r
4754 halbtc8723b2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);
\r
4756 EXhalbtc8723b2ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_DISCONNECT);
\r
4760 EXhalbtc8723b2ant_PnpNotify(
\r
4761 IN PBTC_COEXIST pBtCoexist,
\r
4762 IN u1Byte pnpState
\r
4765 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Pnp notify\n"));
\r
4767 if(BTC_WIFI_PNP_SLEEP == pnpState)
\r
4769 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Pnp notify to SLEEP\n"));
\r
4771 else if(BTC_WIFI_PNP_WAKE_UP == pnpState)
\r
4773 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Pnp notify to WAKE UP\n"));
\r
4774 halbtc8723b2ant_InitHwConfig(pBtCoexist, FALSE);
\r
4775 halbtc8723b2ant_InitCoexDm(pBtCoexist);
\r
4776 halbtc8723b2ant_QueryBtInfo(pBtCoexist);
\r
4781 EXhalbtc8723b2ant_Periodical(
\r
4782 IN PBTC_COEXIST pBtCoexist
\r
4785 //static u1Byte disVerInfoCnt=0;
\r
4786 u4Byte fwVer=0, btPatchVer=0;
\r
4787 PBTC_BOARD_INFO pBoardInfo=&pBtCoexist->boardInfo;
\r
4788 PBTC_STACK_INFO pStackInfo=&pBtCoexist->stackInfo;
\r
4790 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], ==========================Periodical===========================\n"));
\r
4792 if(pCoexSta->disVerInfoCnt <= 5)
\r
4794 pCoexSta->disVerInfoCnt += 1;
\r
4795 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], ****************************************************************\n"));
\r
4796 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], Ant PG Num/ Ant Mech/ Ant Pos = %d/ %d/ %d\n", \
\r
4797 pBoardInfo->pgAntNum, pBoardInfo->btdmAntNum, pBoardInfo->btdmAntPos));
\r
4798 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], BT stack/ hci ext ver = %s / %d\n", \
\r
4799 ((pStackInfo->bProfileNotified)? "Yes":"No"), pStackInfo->hciVersion));
\r
4800 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_BT_PATCH_VER, &btPatchVer);
\r
4801 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);
\r
4802 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], CoexVer/ FwVer/ PatchVer = %d_%x/ 0x%x/ 0x%x(%d)\n", \
\r
4803 GLCoexVerDate8723b2Ant, GLCoexVer8723b2Ant, fwVer, btPatchVer, btPatchVer));
\r
4804 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], ****************************************************************\n"));
\r
4806 if (pCoexSta->disVerInfoCnt == 3)
\r
4808 //Antenna config to set 0x765 = 0x0 (GNT_BT control by PTA) after initial
\r
4809 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], Set GNT_BT control by PTA\n"));
\r
4810 halbtc8723b2ant_SetAntPath(pBtCoexist, BTC_ANT_WIFI_AT_MAIN, FALSE, FALSE);
\r
4814 #if(BT_AUTO_REPORT_ONLY_8723B_2ANT == 0)
\r
4815 halbtc8723b2ant_QueryBtInfo(pBtCoexist);
\r
4816 halbtc8723b2ant_MonitorBtEnableDisable(pBtCoexist);
\r
4818 halbtc8723b2ant_MonitorBtCtr(pBtCoexist);
\r
4819 halbtc8723b2ant_MonitorWiFiCtr(pBtCoexist);
\r
4821 if( halbtc8723b2ant_IsWifiStatusChanged(pBtCoexist) ||
\r
4822 pCoexDm->bAutoTdmaAdjust)
\r
4824 halbtc8723b2ant_RunCoexistMechanism(pBtCoexist);
\r