1 //============================================================
\r
4 // This file is for RTL8821A_CSR Co-exist mechanism
\r
7 // 2012/08/22 Cosa first check in.
\r
8 // 2012/11/14 Cosa Revise for 8821A_CSR 2Ant out sourcing.
\r
10 //============================================================
\r
12 //============================================================
\r
14 //============================================================
\r
15 #include "Mp_Precomp.h"
\r
17 #define _BTCOEX_CSR 1
\r
20 #define rtw_warn_on(condition) do {} while (0)
\r
23 #if(BT_30_SUPPORT == 1)
\r
24 //============================================================
\r
25 // Global variables, these are static variables
\r
26 //============================================================
\r
27 static COEX_DM_8821A_CSR_2ANT GLCoexDm8821aCsr2Ant;
\r
28 static PCOEX_DM_8821A_CSR_2ANT pCoexDm=&GLCoexDm8821aCsr2Ant;
\r
29 static COEX_STA_8821A_CSR_2ANT GLCoexSta8821aCsr2Ant;
\r
30 static PCOEX_STA_8821A_CSR_2ANT pCoexSta=&GLCoexSta8821aCsr2Ant;
\r
32 const char *const GLBtInfoSrc8821aCsr2Ant[]={
\r
35 "BT Info[bt auto report]",
\r
38 u4Byte GLCoexVerDate8821aCsr2Ant=20130618;
\r
39 u4Byte GLCoexVer8821aCsr2Ant=0x5050;
\r
41 //============================================================
\r
42 // local function proto type if needed
\r
43 //============================================================
\r
44 //============================================================
\r
45 // local function start with halbtc8821aCsr2ant_
\r
46 //============================================================
\r
48 halbtc8821aCsr2ant_BtRssiState(
\r
55 u1Byte btRssiState=pCoexSta->preBtRssiState;
\r
57 btRssi = pCoexSta->btRssi;
\r
61 if( (pCoexSta->preBtRssiState == BTC_RSSI_STATE_LOW) ||
\r
62 (pCoexSta->preBtRssiState == BTC_RSSI_STATE_STAY_LOW))
\r
64 if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8821A_CSR_2ANT))
\r
66 btRssiState = BTC_RSSI_STATE_HIGH;
\r
67 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to High\n"));
\r
71 btRssiState = BTC_RSSI_STATE_STAY_LOW;
\r
72 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at Low\n"));
\r
77 if(btRssi < rssiThresh)
\r
79 btRssiState = BTC_RSSI_STATE_LOW;
\r
80 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Low\n"));
\r
84 btRssiState = BTC_RSSI_STATE_STAY_HIGH;
\r
85 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at High\n"));
\r
89 else if(levelNum == 3)
\r
91 if(rssiThresh > rssiThresh1)
\r
93 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi thresh error!!\n"));
\r
94 return pCoexSta->preBtRssiState;
\r
97 if( (pCoexSta->preBtRssiState == BTC_RSSI_STATE_LOW) ||
\r
98 (pCoexSta->preBtRssiState == BTC_RSSI_STATE_STAY_LOW))
\r
100 if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8821A_CSR_2ANT))
\r
102 btRssiState = BTC_RSSI_STATE_MEDIUM;
\r
103 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Medium\n"));
\r
107 btRssiState = BTC_RSSI_STATE_STAY_LOW;
\r
108 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at Low\n"));
\r
111 else if( (pCoexSta->preBtRssiState == BTC_RSSI_STATE_MEDIUM) ||
\r
112 (pCoexSta->preBtRssiState == BTC_RSSI_STATE_STAY_MEDIUM))
\r
114 if(btRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8821A_CSR_2ANT))
\r
116 btRssiState = BTC_RSSI_STATE_HIGH;
\r
117 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to High\n"));
\r
119 else if(btRssi < rssiThresh)
\r
121 btRssiState = BTC_RSSI_STATE_LOW;
\r
122 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Low\n"));
\r
126 btRssiState = BTC_RSSI_STATE_STAY_MEDIUM;
\r
127 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at Medium\n"));
\r
132 if(btRssi < rssiThresh1)
\r
134 btRssiState = BTC_RSSI_STATE_MEDIUM;
\r
135 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Medium\n"));
\r
139 btRssiState = BTC_RSSI_STATE_STAY_HIGH;
\r
140 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at High\n"));
\r
145 pCoexSta->preBtRssiState = btRssiState;
\r
147 return btRssiState;
\r
151 halbtc8821aCsr2ant_WifiRssiState(
\r
152 IN PBTC_COEXIST pBtCoexist,
\r
154 IN u1Byte levelNum,
\r
155 IN u1Byte rssiThresh,
\r
156 IN u1Byte rssiThresh1
\r
160 u1Byte wifiRssiState=pCoexSta->preWifiRssiState[index];
\r
162 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_S4_WIFI_RSSI, &wifiRssi);
\r
166 if( (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_LOW) ||
\r
167 (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_STAY_LOW))
\r
169 if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8821A_CSR_2ANT))
\r
171 wifiRssiState = BTC_RSSI_STATE_HIGH;
\r
172 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to High\n"));
\r
176 wifiRssiState = BTC_RSSI_STATE_STAY_LOW;
\r
177 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Low\n"));
\r
182 if(wifiRssi < rssiThresh)
\r
184 wifiRssiState = BTC_RSSI_STATE_LOW;
\r
185 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Low\n"));
\r
189 wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;
\r
190 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at High\n"));
\r
194 else if(levelNum == 3)
\r
196 if(rssiThresh > rssiThresh1)
\r
198 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI thresh error!!\n"));
\r
199 return pCoexSta->preWifiRssiState[index];
\r
202 if( (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_LOW) ||
\r
203 (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_STAY_LOW))
\r
205 if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8821A_CSR_2ANT))
\r
207 wifiRssiState = BTC_RSSI_STATE_MEDIUM;
\r
208 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Medium\n"));
\r
212 wifiRssiState = BTC_RSSI_STATE_STAY_LOW;
\r
213 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Low\n"));
\r
216 else if( (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_MEDIUM) ||
\r
217 (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_STAY_MEDIUM))
\r
219 if(wifiRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8821A_CSR_2ANT))
\r
221 wifiRssiState = BTC_RSSI_STATE_HIGH;
\r
222 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to High\n"));
\r
224 else if(wifiRssi < rssiThresh)
\r
226 wifiRssiState = BTC_RSSI_STATE_LOW;
\r
227 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Low\n"));
\r
231 wifiRssiState = BTC_RSSI_STATE_STAY_MEDIUM;
\r
232 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Medium\n"));
\r
237 if(wifiRssi < rssiThresh1)
\r
239 wifiRssiState = BTC_RSSI_STATE_MEDIUM;
\r
240 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Medium\n"));
\r
244 wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;
\r
245 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at High\n"));
\r
250 pCoexSta->preWifiRssiState[index] = wifiRssiState;
\r
252 return wifiRssiState;
\r
256 halbtc8821aCsr2ant_MonitorBtEnableDisable(
\r
257 IN PBTC_COEXIST pBtCoexist
\r
260 static BOOLEAN bPreBtDisabled=FALSE;
\r
261 static u4Byte btDisableCnt=0;
\r
262 BOOLEAN bBtActive=TRUE, bBtDisabled=FALSE;
\r
264 // This function check if bt is disabled
\r
266 if( pCoexSta->highPriorityTx == 0 &&
\r
267 pCoexSta->highPriorityRx == 0 &&
\r
268 pCoexSta->lowPriorityTx == 0 &&
\r
269 pCoexSta->lowPriorityRx == 0)
\r
273 if( pCoexSta->highPriorityTx == 0xffff &&
\r
274 pCoexSta->highPriorityRx == 0xffff &&
\r
275 pCoexSta->lowPriorityTx == 0xffff &&
\r
276 pCoexSta->lowPriorityRx == 0xffff)
\r
283 bBtDisabled = FALSE;
\r
284 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);
\r
285 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is enabled !!\n"));
\r
290 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], bt all counters=0, %d times!!\n",
\r
292 if(btDisableCnt >= 2)
\r
294 bBtDisabled = TRUE;
\r
295 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);
\r
296 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is disabled !!\n"));
\r
299 if(bPreBtDisabled != bBtDisabled)
\r
301 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is from %s to %s!!\n",
\r
302 (bPreBtDisabled ? "disabled":"enabled"),
\r
303 (bBtDisabled ? "disabled":"enabled")));
\r
304 bPreBtDisabled = bBtDisabled;
\r
315 halbtc8821aCsr2ant_MonitorBtCtr(
\r
316 IN PBTC_COEXIST pBtCoexist
\r
319 u4Byte regHPTxRx, regLPTxRx, u4Tmp;
\r
320 u4Byte regHPTx=0, regHPRx=0, regLPTx=0, regLPRx=0;
\r
326 u4Tmp = pBtCoexist->fBtcRead4Byte(pBtCoexist, regHPTxRx);
\r
327 regHPTx = u4Tmp & bMaskLWord;
\r
328 regHPRx = (u4Tmp & bMaskHWord)>>16;
\r
330 u4Tmp = pBtCoexist->fBtcRead4Byte(pBtCoexist, regLPTxRx);
\r
331 regLPTx = u4Tmp & bMaskLWord;
\r
332 regLPRx = (u4Tmp & bMaskHWord)>>16;
\r
334 pCoexSta->highPriorityTx = regHPTx;
\r
335 pCoexSta->highPriorityRx = regHPRx;
\r
336 pCoexSta->lowPriorityTx = regLPTx;
\r
337 pCoexSta->lowPriorityRx = regLPRx;
\r
339 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], High Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n",
\r
340 regHPTxRx, regHPTx, regHPTx, regHPRx, regHPRx));
\r
341 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], Low Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n",
\r
342 regLPTxRx, regLPTx, regLPTx, regLPRx, regLPRx));
\r
345 pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x76e, 0x5d);
\r
349 halbtc8821aCsr2ant_UpdateRaMask(
\r
350 IN PBTC_COEXIST pBtCoexist,
\r
351 IN BOOLEAN bForceExec,
\r
352 IN u4Byte disRateMask
\r
355 pCoexDm->curRaMask = disRateMask;
\r
357 if( bForceExec || (pCoexDm->preRaMask != pCoexDm->curRaMask))
\r
359 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_UPDATE_RAMASK, &pCoexDm->curRaMask);
\r
361 pCoexDm->preRaMask = pCoexDm->curRaMask;
\r
365 halbtc8821aCsr2ant_AutoRateFallbackRetry(
\r
366 IN PBTC_COEXIST pBtCoexist,
\r
367 IN BOOLEAN bForceExec,
\r
371 BOOLEAN bWifiUnderBMode=FALSE;
\r
373 pCoexDm->curArfrType = type;
\r
375 if( bForceExec || (pCoexDm->preArfrType != pCoexDm->curArfrType))
\r
377 switch(pCoexDm->curArfrType)
\r
379 case 0: // normal mode
\r
380 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x430, pCoexDm->backupArfrCnt1);
\r
381 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x434, pCoexDm->backupArfrCnt2);
\r
384 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_UNDER_B_MODE, &bWifiUnderBMode);
\r
385 if(bWifiUnderBMode)
\r
387 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x430, 0x0);
\r
388 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x434, 0x01010101);
\r
392 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x430, 0x0);
\r
393 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x434, 0x04030201);
\r
401 pCoexDm->preArfrType = pCoexDm->curArfrType;
\r
405 halbtc8821aCsr2ant_RetryLimit(
\r
406 IN PBTC_COEXIST pBtCoexist,
\r
407 IN BOOLEAN bForceExec,
\r
411 pCoexDm->curRetryLimitType = type;
\r
413 if( bForceExec || (pCoexDm->preRetryLimitType != pCoexDm->curRetryLimitType))
\r
415 switch(pCoexDm->curRetryLimitType)
\r
417 case 0: // normal mode
\r
418 pBtCoexist->fBtcWrite2Byte(pBtCoexist, 0x42a, pCoexDm->backupRetryLimit);
\r
420 case 1: // retry limit=8
\r
421 pBtCoexist->fBtcWrite2Byte(pBtCoexist, 0x42a, 0x0808);
\r
428 pCoexDm->preRetryLimitType = pCoexDm->curRetryLimitType;
\r
432 halbtc8821aCsr2ant_AmpduMaxTime(
\r
433 IN PBTC_COEXIST pBtCoexist,
\r
434 IN BOOLEAN bForceExec,
\r
438 pCoexDm->curAmpduTimeType = type;
\r
440 if( bForceExec || (pCoexDm->preAmpduTimeType != pCoexDm->curAmpduTimeType))
\r
442 switch(pCoexDm->curAmpduTimeType)
\r
444 case 0: // normal mode
\r
445 pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x456, pCoexDm->backupAmpduMaxTime);
\r
447 case 1: // AMPDU timw = 0x38 * 32us
\r
448 pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x456, 0x38);
\r
451 pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x456, 0x17);
\r
458 pCoexDm->preAmpduTimeType = pCoexDm->curAmpduTimeType;
\r
462 halbtc8821aCsr2Ant_AmpduMaxNum(
\r
463 IN PBTC_COEXIST pBtCoexist,
\r
464 IN BOOLEAN bForceExec,
\r
468 pCoexDm->curAmpduNumType = type;
\r
470 if( bForceExec || (pCoexDm->preAmpduNumType != pCoexDm->curAmpduNumType))
\r
472 switch(pCoexDm->curAmpduNumType)
\r
474 case 0: // normal mode
\r
475 pBtCoexist->fBtcWrite2Byte(pBtCoexist, 0x4ca, pCoexDm->backupAmpduMaxNum);
\r
478 pBtCoexist->fBtcWrite2Byte(pBtCoexist, 0x4ca, 0x0808);
\r
481 pBtCoexist->fBtcWrite2Byte(pBtCoexist, 0x4ca, 0x1f1f);
\r
488 pCoexDm->preAmpduNumType = pCoexDm->curAmpduNumType;
\r
493 halbtc8821aCsr2ant_LimitedTx(
\r
494 IN PBTC_COEXIST pBtCoexist,
\r
495 IN BOOLEAN bForceExec,
\r
496 IN u1Byte raMaskType,
\r
497 IN u1Byte arfrType,
\r
498 IN u1Byte retryLimitType,
\r
499 IN u1Byte ampduTimeType,
\r
500 IN u1Byte ampduNumType
\r
505 case 0: // normal mode
\r
506 halbtc8821aCsr2ant_UpdateRaMask(pBtCoexist, bForceExec, 0x0);
\r
508 case 1: // disable cck 1/2
\r
509 halbtc8821aCsr2ant_UpdateRaMask(pBtCoexist, bForceExec, 0x00000003);
\r
511 case 2: // disable cck 1/2/5.5, ofdm 6/9/12/18/24, mcs 0/1/2/3/4
\r
512 halbtc8821aCsr2ant_UpdateRaMask(pBtCoexist, bForceExec, 0x0001f1f7);
\r
518 halbtc8821aCsr2ant_AutoRateFallbackRetry(pBtCoexist, bForceExec, arfrType);
\r
519 halbtc8821aCsr2ant_RetryLimit(pBtCoexist, bForceExec, retryLimitType);
\r
520 halbtc8821aCsr2ant_AmpduMaxTime(pBtCoexist, bForceExec, ampduTimeType);
\r
521 halbtc8821aCsr2Ant_AmpduMaxNum(pBtCoexist, bForceExec, ampduNumType);
\r
527 halbtc8821aCsr2ant_LimitedRx(
\r
528 IN PBTC_COEXIST pBtCoexist,
\r
529 IN BOOLEAN bForceExec,
\r
530 IN BOOLEAN bRejApAggPkt,
\r
531 IN BOOLEAN bBtCtrlAggBufSize,
\r
532 IN u1Byte aggBufSize
\r
535 BOOLEAN bRejectRxAgg=bRejApAggPkt;
\r
536 BOOLEAN bBtCtrlRxAggSize=bBtCtrlAggBufSize;
\r
537 u1Byte rxAggSize=aggBufSize;
\r
539 //============================================
\r
540 // Rx Aggregation related setting
\r
541 //============================================
\r
542 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_TO_REJ_AP_AGG_PKT, &bRejectRxAgg);
\r
543 // decide BT control aggregation buf size or not
\r
544 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_CTRL_AGG_SIZE, &bBtCtrlRxAggSize);
\r
545 // aggregation buf size, only work when BT control Rx aggregation size.
\r
546 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_U1_AGG_BUF_SIZE, &rxAggSize);
\r
547 // real update aggregation setting
\r
548 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_AGGREGATE_CTRL, NULL);
\r
552 halbtc8821aCsr2ant_QueryBtInfo(
\r
553 IN PBTC_COEXIST pBtCoexist
\r
556 u1Byte H2C_Parameter[1] ={0};
\r
558 pCoexSta->bC2hBtInfoReqSent = TRUE;
\r
560 H2C_Parameter[0] |= BIT0; // trigger
\r
562 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], Query Bt Info, FW write 0x61=0x%x\n",
\r
563 H2C_Parameter[0]));
\r
565 rtw_warn_on(_BTCOEX_CSR);
\r
566 pBtCoexist->fBtcFillH2c(pBtCoexist, 0x61, 1, H2C_Parameter);
\r
570 halbtc8821aCsr2ant_ActionAlgorithm(
\r
571 IN PBTC_COEXIST pBtCoexist
\r
574 PBTC_STACK_INFO pStackInfo=&pBtCoexist->stackInfo;
\r
575 BOOLEAN bBtHsOn=FALSE;
\r
576 u1Byte algorithm=BT_8821A_CSR_2ANT_COEX_ALGO_UNDEFINED;
\r
577 u1Byte numOfDiffProfile=0;
\r
579 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);
\r
581 //sync StackInfo with BT firmware and stack
\r
582 pStackInfo->bHidExist = pCoexSta->bHidExist;
\r
583 pStackInfo->bBtLinkExist = pCoexSta->bBtLinkExist;
\r
584 pStackInfo->bScoExist = pCoexSta->bScoExist;
\r
585 pStackInfo->bPanExist = pCoexSta->bPanExist;
\r
586 pStackInfo->bA2dpExist = pCoexSta->bA2dpExist;
\r
588 if(!pStackInfo->bBtLinkExist)
\r
590 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], No profile exists!!!\n"));
\r
594 if(pStackInfo->bScoExist)
\r
595 numOfDiffProfile++;
\r
596 if(pStackInfo->bHidExist)
\r
597 numOfDiffProfile++;
\r
598 if(pStackInfo->bPanExist)
\r
599 numOfDiffProfile++;
\r
600 if(pStackInfo->bA2dpExist)
\r
601 numOfDiffProfile++;
\r
603 if(numOfDiffProfile == 1)
\r
605 if(pStackInfo->bScoExist)
\r
607 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO only\n"));
\r
608 algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_SCO;
\r
612 if(pStackInfo->bHidExist)
\r
614 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID only\n"));
\r
615 algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_HID;
\r
617 else if(pStackInfo->bA2dpExist)
\r
619 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP only\n"));
\r
620 algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_A2DP;
\r
622 else if(pStackInfo->bPanExist)
\r
626 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], PAN(HS) only\n"));
\r
627 algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_PANHS;
\r
631 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], PAN(EDR) only\n"));
\r
632 algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR;
\r
637 else if(numOfDiffProfile == 2)
\r
639 if(pStackInfo->bScoExist)
\r
641 if(pStackInfo->bHidExist)
\r
643 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID\n"));
\r
644 algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR_HID;
\r
646 else if(pStackInfo->bA2dpExist)
\r
648 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + A2DP ==> SCO\n"));
\r
649 algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR_HID;
\r
651 else if(pStackInfo->bPanExist)
\r
655 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + PAN(HS)\n"));
\r
656 algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_SCO;
\r
660 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + PAN(EDR)\n"));
\r
661 algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR_HID;
\r
667 if( pStackInfo->bHidExist &&
\r
668 pStackInfo->bA2dpExist )
\r
670 if(pStackInfo->numOfHid >= 2)
\r
672 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID*2 + A2DP\n"));
\r
673 algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_HID_A2DP_PANEDR;
\r
677 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP\n"));
\r
678 algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_HID_A2DP;
\r
681 else if( pStackInfo->bHidExist &&
\r
682 pStackInfo->bPanExist )
\r
686 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + PAN(HS)\n"));
\r
687 algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_HID;
\r
691 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + PAN(EDR)\n"));
\r
692 algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR_HID;
\r
695 else if( pStackInfo->bPanExist &&
\r
696 pStackInfo->bA2dpExist )
\r
700 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP + PAN(HS)\n"));
\r
701 algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_A2DP_PANHS;
\r
705 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP + PAN(EDR)\n"));
\r
706 algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR_A2DP;
\r
711 else if(numOfDiffProfile == 3)
\r
713 if(pStackInfo->bScoExist)
\r
715 if( pStackInfo->bHidExist &&
\r
716 pStackInfo->bA2dpExist )
\r
718 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + A2DP ==> HID\n"));
\r
719 algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR_HID;
\r
721 else if( pStackInfo->bHidExist &&
\r
722 pStackInfo->bPanExist )
\r
726 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + PAN(HS)\n"));
\r
727 algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR_HID;
\r
731 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + PAN(EDR)\n"));
\r
732 algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR_HID;
\r
735 else if( pStackInfo->bPanExist &&
\r
736 pStackInfo->bA2dpExist )
\r
740 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + A2DP + PAN(HS)\n"));
\r
741 algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR_HID;
\r
745 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + A2DP + PAN(EDR) ==> HID\n"));
\r
746 algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR_HID;
\r
752 if( pStackInfo->bHidExist &&
\r
753 pStackInfo->bPanExist &&
\r
754 pStackInfo->bA2dpExist )
\r
758 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP + PAN(HS)\n"));
\r
759 algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_HID_A2DP;
\r
763 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP + PAN(EDR)\n"));
\r
764 algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_HID_A2DP_PANEDR;
\r
769 else if(numOfDiffProfile >= 3)
\r
771 if(pStackInfo->bScoExist)
\r
773 if( pStackInfo->bHidExist &&
\r
774 pStackInfo->bPanExist &&
\r
775 pStackInfo->bA2dpExist )
\r
779 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Error!!! SCO + HID + A2DP + PAN(HS)\n"));
\r
784 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + A2DP + PAN(EDR)==>PAN(EDR)+HID\n"));
\r
785 algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR_HID;
\r
795 halbtc8821aCsr2ant_NeedToDecBtPwr(
\r
796 IN PBTC_COEXIST pBtCoexist
\r
799 BOOLEAN bRet=FALSE;
\r
800 BOOLEAN bBtHsOn=FALSE, bWifiConnected=FALSE;
\r
802 u1Byte btRssiState;
\r
804 if(!pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn))
\r
806 if(!pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected))
\r
808 if(!pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_S4_HS_RSSI, &btHsRssi))
\r
811 btRssiState = halbtc8821aCsr2ant_BtRssiState(2, 35, 0);
\r
819 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], Need to decrease bt power for HS mode!!\n"));
\r
825 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||
\r
826 (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
829 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], Need to decrease bt power for Wifi is connected!!\n"));
\r
839 halbtc8821aCsr2ant_SetFwDacSwingLevel(
\r
840 IN PBTC_COEXIST pBtCoexist,
\r
841 IN u1Byte dacSwingLvl
\r
844 u1Byte H2C_Parameter[1] ={0};
\r
846 // There are several type of dacswing
\r
847 // 0x18/ 0x10/ 0xc/ 0x8/ 0x4/ 0x6
\r
848 H2C_Parameter[0] = dacSwingLvl;
\r
850 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], Set Dac Swing Level=0x%x\n", dacSwingLvl));
\r
851 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], FW write 0x64=0x%x\n", H2C_Parameter[0]));
\r
853 pBtCoexist->fBtcFillH2c(pBtCoexist, 0x64, 1, H2C_Parameter);
\r
857 halbtc8821aCsr2ant_SetFwDecBtPwr(
\r
858 IN PBTC_COEXIST pBtCoexist,
\r
859 IN BOOLEAN bDecBtPwr
\r
862 u1Byte H2C_Parameter[1] ={0};
\r
864 H2C_Parameter[0] = 0;
\r
868 H2C_Parameter[0] |= BIT1;
\r
871 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], decrease Bt Power : %s, FW write 0x62=0x%x\n",
\r
872 (bDecBtPwr? "Yes!!":"No!!"), H2C_Parameter[0]));
\r
874 rtw_warn_on(_BTCOEX_CSR);
\r
875 pBtCoexist->fBtcFillH2c(pBtCoexist, 0x62, 1, H2C_Parameter);
\r
879 halbtc8821aCsr2ant_DecBtPwr(
\r
880 IN PBTC_COEXIST pBtCoexist,
\r
881 IN BOOLEAN bForceExec,
\r
882 IN BOOLEAN bDecBtPwr
\r
885 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s Dec BT power = %s\n",
\r
886 (bForceExec? "force to":""), ((bDecBtPwr)? "ON":"OFF")));
\r
887 pCoexDm->bCurDecBtPwr = bDecBtPwr;
\r
891 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreDecBtPwr=%d, bCurDecBtPwr=%d\n",
\r
892 pCoexDm->bPreDecBtPwr, pCoexDm->bCurDecBtPwr));
\r
894 if(pCoexDm->bPreDecBtPwr == pCoexDm->bCurDecBtPwr)
\r
898 /* TODO: may CSR consider to decrease BT power? */
\r
899 //halbtc8821aCsr2ant_SetFwDecBtPwr(pBtCoexist, pCoexDm->bCurDecBtPwr);
\r
901 pCoexDm->bPreDecBtPwr = pCoexDm->bCurDecBtPwr;
\r
905 halbtc8821aCsr2ant_SetBtAutoReport(
\r
906 IN PBTC_COEXIST pBtCoexist,
\r
907 IN BOOLEAN bEnableAutoReport
\r
910 u1Byte H2C_Parameter[1] ={0};
\r
912 H2C_Parameter[0] = 0;
\r
914 if(bEnableAutoReport)
\r
916 H2C_Parameter[0] |= BIT0;
\r
919 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], BT FW auto report : %s, FW write 0x68=0x%x\n",
\r
920 (bEnableAutoReport? "Enabled!!":"Disabled!!"), H2C_Parameter[0]));
\r
922 rtw_warn_on(_BTCOEX_CSR);
\r
923 pBtCoexist->fBtcFillH2c(pBtCoexist, 0x68, 1, H2C_Parameter);
\r
927 halbtc8821aCsr2ant_BtAutoReport(
\r
928 IN PBTC_COEXIST pBtCoexist,
\r
929 IN BOOLEAN bForceExec,
\r
930 IN BOOLEAN bEnableAutoReport
\r
933 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s BT Auto report = %s\n",
\r
934 (bForceExec? "force to":""), ((bEnableAutoReport)? "Enabled":"Disabled")));
\r
935 pCoexDm->bCurBtAutoReport = bEnableAutoReport;
\r
939 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreBtAutoReport=%d, bCurBtAutoReport=%d\n",
\r
940 pCoexDm->bPreBtAutoReport, pCoexDm->bCurBtAutoReport));
\r
942 if(pCoexDm->bPreBtAutoReport == pCoexDm->bCurBtAutoReport)
\r
945 //halbtc8821aCsr2ant_SetBtAutoReport(pBtCoexist, pCoexDm->bCurBtAutoReport);
\r
947 pCoexDm->bPreBtAutoReport = pCoexDm->bCurBtAutoReport;
\r
951 halbtc8821aCsr2ant_FwDacSwingLvl(
\r
952 IN PBTC_COEXIST pBtCoexist,
\r
953 IN BOOLEAN bForceExec,
\r
954 IN u1Byte fwDacSwingLvl
\r
957 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s set FW Dac Swing level = %d\n",
\r
958 (bForceExec? "force to":""), fwDacSwingLvl));
\r
959 pCoexDm->curFwDacSwingLvl = fwDacSwingLvl;
\r
963 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], preFwDacSwingLvl=%d, curFwDacSwingLvl=%d\n",
\r
964 pCoexDm->preFwDacSwingLvl, pCoexDm->curFwDacSwingLvl));
\r
966 if(pCoexDm->preFwDacSwingLvl == pCoexDm->curFwDacSwingLvl)
\r
970 halbtc8821aCsr2ant_SetFwDacSwingLevel(pBtCoexist, pCoexDm->curFwDacSwingLvl);
\r
972 pCoexDm->preFwDacSwingLvl = pCoexDm->curFwDacSwingLvl;
\r
976 halbtc8821aCsr2ant_SetSwRfRxLpfCorner(
\r
977 IN PBTC_COEXIST pBtCoexist,
\r
978 IN BOOLEAN bRxRfShrinkOn
\r
983 //Shrink RF Rx LPF corner
\r
984 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Shrink RF Rx LPF corner!!\n"));
\r
985 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, 0xffffc);
\r
989 //Resume RF Rx LPF corner
\r
990 // After initialized, we can use pCoexDm->btRf0x1eBackup
\r
991 if(pBtCoexist->bInitilized)
\r
993 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Resume RF Rx LPF corner!!\n"));
\r
994 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, pCoexDm->btRf0x1eBackup);
\r
1000 halbtc8821aCsr2ant_RfShrink(
\r
1001 IN PBTC_COEXIST pBtCoexist,
\r
1002 IN BOOLEAN bForceExec,
\r
1003 IN BOOLEAN bRxRfShrinkOn
\r
1006 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn Rx RF Shrink = %s\n",
\r
1007 (bForceExec? "force to":""), ((bRxRfShrinkOn)? "ON":"OFF")));
\r
1008 pCoexDm->bCurRfRxLpfShrink = bRxRfShrinkOn;
\r
1012 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreRfRxLpfShrink=%d, bCurRfRxLpfShrink=%d\n",
\r
1013 pCoexDm->bPreRfRxLpfShrink, pCoexDm->bCurRfRxLpfShrink));
\r
1015 if(pCoexDm->bPreRfRxLpfShrink == pCoexDm->bCurRfRxLpfShrink)
\r
1018 halbtc8821aCsr2ant_SetSwRfRxLpfCorner(pBtCoexist, pCoexDm->bCurRfRxLpfShrink);
\r
1020 pCoexDm->bPreRfRxLpfShrink = pCoexDm->bCurRfRxLpfShrink;
\r
1024 halbtc8821aCsr2ant_SetSwPenaltyTxRateAdaptive(
\r
1025 IN PBTC_COEXIST pBtCoexist,
\r
1026 IN BOOLEAN bLowPenaltyRa
\r
1029 u1Byte H2C_Parameter[6] ={0};
\r
1031 H2C_Parameter[0] = 0x6; // opCode, 0x6= Retry_Penalty
\r
1035 H2C_Parameter[1] |= BIT0;
\r
1036 H2C_Parameter[2] = 0x00; //normal rate except MCS7/6/5, OFDM54/48/36
\r
1037 H2C_Parameter[3] = 0xf7; //MCS7 or OFDM54
\r
1038 H2C_Parameter[4] = 0xf8; //MCS6 or OFDM48
\r
1039 H2C_Parameter[5] = 0xf9; //MCS5 or OFDM36
\r
1042 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], set WiFi Low-Penalty Retry: %s",
\r
1043 (bLowPenaltyRa? "ON!!":"OFF!!") ));
\r
1045 pBtCoexist->fBtcFillH2c(pBtCoexist, 0x69, 6, H2C_Parameter);
\r
1049 halbtc8821aCsr2ant_LowPenaltyRa(
\r
1050 IN PBTC_COEXIST pBtCoexist,
\r
1051 IN BOOLEAN bForceExec,
\r
1052 IN BOOLEAN bLowPenaltyRa
\r
1055 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn LowPenaltyRA = %s\n",
\r
1056 (bForceExec? "force to":""), ((bLowPenaltyRa)? "ON":"OFF")));
\r
1057 pCoexDm->bCurLowPenaltyRa = bLowPenaltyRa;
\r
1061 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreLowPenaltyRa=%d, bCurLowPenaltyRa=%d\n",
\r
1062 pCoexDm->bPreLowPenaltyRa, pCoexDm->bCurLowPenaltyRa));
\r
1064 if(pCoexDm->bPreLowPenaltyRa == pCoexDm->bCurLowPenaltyRa)
\r
1067 halbtc8821aCsr2ant_SetSwPenaltyTxRateAdaptive(pBtCoexist, pCoexDm->bCurLowPenaltyRa);
\r
1069 pCoexDm->bPreLowPenaltyRa = pCoexDm->bCurLowPenaltyRa;
\r
1073 halbtc8821aCsr2ant_SetDacSwingReg(
\r
1074 IN PBTC_COEXIST pBtCoexist,
\r
1078 u1Byte val=(u1Byte)level;
\r
1080 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Write SwDacSwing = 0x%x\n", level));
\r
1081 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xc5b, 0x3e, val);
\r
1085 halbtc8821aCsr2ant_SetSwFullTimeDacSwing(
\r
1086 IN PBTC_COEXIST pBtCoexist,
\r
1087 IN BOOLEAN bSwDacSwingOn,
\r
1088 IN u4Byte swDacSwingLvl
\r
1093 halbtc8821aCsr2ant_SetDacSwingReg(pBtCoexist, swDacSwingLvl);
\r
1097 halbtc8821aCsr2ant_SetDacSwingReg(pBtCoexist, 0x18);
\r
1103 halbtc8821aCsr2ant_DacSwing(
\r
1104 IN PBTC_COEXIST pBtCoexist,
\r
1105 IN BOOLEAN bForceExec,
\r
1106 IN BOOLEAN bDacSwingOn,
\r
1107 IN u4Byte dacSwingLvl
\r
1110 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn DacSwing=%s, dacSwingLvl=0x%x\n",
\r
1111 (bForceExec? "force to":""), ((bDacSwingOn)? "ON":"OFF"), dacSwingLvl));
\r
1112 pCoexDm->bCurDacSwingOn = bDacSwingOn;
\r
1113 pCoexDm->curDacSwingLvl = dacSwingLvl;
\r
1117 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreDacSwingOn=%d, preDacSwingLvl=0x%x, bCurDacSwingOn=%d, curDacSwingLvl=0x%x\n",
\r
1118 pCoexDm->bPreDacSwingOn, pCoexDm->preDacSwingLvl,
\r
1119 pCoexDm->bCurDacSwingOn, pCoexDm->curDacSwingLvl));
\r
1121 if( (pCoexDm->bPreDacSwingOn == pCoexDm->bCurDacSwingOn) &&
\r
1122 (pCoexDm->preDacSwingLvl == pCoexDm->curDacSwingLvl) )
\r
1126 halbtc8821aCsr2ant_SetSwFullTimeDacSwing(pBtCoexist, bDacSwingOn, dacSwingLvl);
\r
1128 pCoexDm->bPreDacSwingOn = pCoexDm->bCurDacSwingOn;
\r
1129 pCoexDm->preDacSwingLvl = pCoexDm->curDacSwingLvl;
\r
1133 halbtc8821aCsr2ant_SetAdcBackOff(
\r
1134 IN PBTC_COEXIST pBtCoexist,
\r
1135 IN BOOLEAN bAdcBackOff
\r
1140 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], BB BackOff Level On!\n"));
\r
1141 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x8db, 0x60, 0x3);
\r
1145 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], BB BackOff Level Off!\n"));
\r
1146 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x8db, 0x60, 0x1);
\r
1151 halbtc8821aCsr2ant_AdcBackOff(
\r
1152 IN PBTC_COEXIST pBtCoexist,
\r
1153 IN BOOLEAN bForceExec,
\r
1154 IN BOOLEAN bAdcBackOff
\r
1157 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn AdcBackOff = %s\n",
\r
1158 (bForceExec? "force to":""), ((bAdcBackOff)? "ON":"OFF")));
\r
1159 pCoexDm->bCurAdcBackOff = bAdcBackOff;
\r
1163 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreAdcBackOff=%d, bCurAdcBackOff=%d\n",
\r
1164 pCoexDm->bPreAdcBackOff, pCoexDm->bCurAdcBackOff));
\r
1166 if(pCoexDm->bPreAdcBackOff == pCoexDm->bCurAdcBackOff)
\r
1169 halbtc8821aCsr2ant_SetAdcBackOff(pBtCoexist, pCoexDm->bCurAdcBackOff);
\r
1171 pCoexDm->bPreAdcBackOff = pCoexDm->bCurAdcBackOff;
\r
1175 halbtc8821aCsr2ant_SetAgcTable(
\r
1176 IN PBTC_COEXIST pBtCoexist,
\r
1177 IN BOOLEAN bAgcTableEn
\r
1180 u1Byte rssiAdjustVal=0;
\r
1182 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xef, 0xfffff, 0x02000);
\r
1185 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Agc Table On!\n"));
\r
1186 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x28F4B);
\r
1187 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x10AB2);
\r
1188 rssiAdjustVal = 8;
\r
1192 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Agc Table Off!\n"));
\r
1193 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x2884B);
\r
1194 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x104B2);
\r
1196 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xef, 0xfffff, 0x0);
\r
1198 // set rssiAdjustVal for wifi module.
\r
1199 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_U1_RSSI_ADJ_VAL_FOR_AGC_TABLE_ON, &rssiAdjustVal);
\r
1203 halbtc8821aCsr2ant_AgcTable(
\r
1204 IN PBTC_COEXIST pBtCoexist,
\r
1205 IN BOOLEAN bForceExec,
\r
1206 IN BOOLEAN bAgcTableEn
\r
1209 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s %s Agc Table\n",
\r
1210 (bForceExec? "force to":""), ((bAgcTableEn)? "Enable":"Disable")));
\r
1211 pCoexDm->bCurAgcTableEn = bAgcTableEn;
\r
1215 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreAgcTableEn=%d, bCurAgcTableEn=%d\n",
\r
1216 pCoexDm->bPreAgcTableEn, pCoexDm->bCurAgcTableEn));
\r
1218 if(pCoexDm->bPreAgcTableEn == pCoexDm->bCurAgcTableEn)
\r
1221 halbtc8821aCsr2ant_SetAgcTable(pBtCoexist, bAgcTableEn);
\r
1223 pCoexDm->bPreAgcTableEn = pCoexDm->bCurAgcTableEn;
\r
1227 halbtc8821aCsr2ant_SetCoexTable(
\r
1228 IN PBTC_COEXIST pBtCoexist,
\r
1229 IN u4Byte val0x6c0,
\r
1230 IN u4Byte val0x6c4,
\r
1231 IN u4Byte val0x6c8,
\r
1232 IN u1Byte val0x6cc
\r
1235 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c0=0x%x\n", val0x6c0));
\r
1236 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c0, val0x6c0);
\r
1238 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c4=0x%x\n", val0x6c4));
\r
1239 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c4, val0x6c4);
\r
1241 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c8=0x%x\n", val0x6c8));
\r
1242 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c8, val0x6c8);
\r
1244 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6cc=0x%x\n", val0x6cc));
\r
1245 pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cc, val0x6cc);
\r
1249 halbtc8821aCsr2ant_CoexTable(
\r
1250 IN PBTC_COEXIST pBtCoexist,
\r
1251 IN BOOLEAN bForceExec,
\r
1252 IN u4Byte val0x6c0,
\r
1253 IN u4Byte val0x6c4,
\r
1254 IN u4Byte val0x6c8,
\r
1255 IN u1Byte val0x6cc
\r
1258 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
1259 (bForceExec? "force to":""), val0x6c0, val0x6c4, val0x6c8, val0x6cc));
\r
1260 pCoexDm->curVal0x6c0 = val0x6c0;
\r
1261 pCoexDm->curVal0x6c4 = val0x6c4;
\r
1262 pCoexDm->curVal0x6c8 = val0x6c8;
\r
1263 pCoexDm->curVal0x6cc = val0x6cc;
\r
1267 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], preVal0x6c0=0x%x, preVal0x6c4=0x%x, preVal0x6c8=0x%x, preVal0x6cc=0x%x !!\n",
\r
1268 pCoexDm->preVal0x6c0, pCoexDm->preVal0x6c4, pCoexDm->preVal0x6c8, pCoexDm->preVal0x6cc));
\r
1269 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], curVal0x6c0=0x%x, curVal0x6c4=0x%x, curVal0x6c8=0x%x, curVal0x6cc=0x%x !!\n",
\r
1270 pCoexDm->curVal0x6c0, pCoexDm->curVal0x6c4, pCoexDm->curVal0x6c8, pCoexDm->curVal0x6cc));
\r
1272 if( (pCoexDm->preVal0x6c0 == pCoexDm->curVal0x6c0) &&
\r
1273 (pCoexDm->preVal0x6c4 == pCoexDm->curVal0x6c4) &&
\r
1274 (pCoexDm->preVal0x6c8 == pCoexDm->curVal0x6c8) &&
\r
1275 (pCoexDm->preVal0x6cc == pCoexDm->curVal0x6cc) )
\r
1278 halbtc8821aCsr2ant_SetCoexTable(pBtCoexist, val0x6c0, val0x6c4, val0x6c8, val0x6cc);
\r
1280 pCoexDm->preVal0x6c0 = pCoexDm->curVal0x6c0;
\r
1281 pCoexDm->preVal0x6c4 = pCoexDm->curVal0x6c4;
\r
1282 pCoexDm->preVal0x6c8 = pCoexDm->curVal0x6c8;
\r
1283 pCoexDm->preVal0x6cc = pCoexDm->curVal0x6cc;
\r
1287 halbtc8821aCsr2ant_SetFwIgnoreWlanAct(
\r
1288 IN PBTC_COEXIST pBtCoexist,
\r
1289 IN BOOLEAN bEnable
\r
1292 u1Byte H2C_Parameter[1] ={0};
\r
1296 H2C_Parameter[0] |= BIT0; // function enable
\r
1299 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], set FW for BT Ignore Wlan_Act, FW write 0x63=0x%x\n",
\r
1300 H2C_Parameter[0]));
\r
1302 rtw_warn_on(_BTCOEX_CSR);
\r
1303 pBtCoexist->fBtcFillH2c(pBtCoexist, 0x63, 1, H2C_Parameter);
\r
1307 halbtc8821aCsr2ant_IgnoreWlanAct(
\r
1308 IN PBTC_COEXIST pBtCoexist,
\r
1309 IN BOOLEAN bForceExec,
\r
1310 IN BOOLEAN bEnable
\r
1313 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s turn Ignore WlanAct %s\n",
\r
1314 (bForceExec? "force to":""), (bEnable? "ON":"OFF")));
\r
1315 pCoexDm->bCurIgnoreWlanAct = bEnable;
\r
1319 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreIgnoreWlanAct = %d, bCurIgnoreWlanAct = %d!!\n",
\r
1320 pCoexDm->bPreIgnoreWlanAct, pCoexDm->bCurIgnoreWlanAct));
\r
1322 if(pCoexDm->bPreIgnoreWlanAct == pCoexDm->bCurIgnoreWlanAct)
\r
1325 //halbtc8821aCsr2ant_SetFwIgnoreWlanAct(pBtCoexist, bEnable);
\r
1327 pCoexDm->bPreIgnoreWlanAct = pCoexDm->bCurIgnoreWlanAct;
\r
1331 halbtc8821aCsr2ant_SetFwPstdma(
\r
1332 IN PBTC_COEXIST pBtCoexist,
\r
1340 u1Byte H2C_Parameter[6] ={0};
\r
1342 H2C_Parameter[0] = byte1;
\r
1343 H2C_Parameter[1] = byte2;
\r
1344 H2C_Parameter[2] = byte3;
\r
1345 H2C_Parameter[3] = byte4;
\r
1346 H2C_Parameter[4] = byte5;
\r
1347 H2C_Parameter[5] = 0x01;
\r
1349 pCoexDm->psTdmaPara[0] = byte1;
\r
1350 pCoexDm->psTdmaPara[1] = byte2;
\r
1351 pCoexDm->psTdmaPara[2] = byte3;
\r
1352 pCoexDm->psTdmaPara[3] = byte4;
\r
1353 pCoexDm->psTdmaPara[4] = byte5;
\r
1354 pCoexDm->psTdmaPara[5] = 0x01;
\r
1356 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], FW write 0x60(6bytes)=0x%x%08x%02x\n",
\r
1357 H2C_Parameter[0],
\r
1358 H2C_Parameter[1]<<24|H2C_Parameter[2]<<16|H2C_Parameter[3]<<8|H2C_Parameter[4], H2C_Parameter[5]));
\r
1360 pBtCoexist->fBtcFillH2c(pBtCoexist, 0x60, 6, H2C_Parameter);
\r
1364 halbtc8821aCsr2ant_SwMechanism1(
\r
1365 IN PBTC_COEXIST pBtCoexist,
\r
1366 IN BOOLEAN bShrinkRxLPF,
\r
1367 IN BOOLEAN bLowPenaltyRA,
\r
1368 IN BOOLEAN bLimitedDIG,
\r
1369 IN BOOLEAN bBTLNAConstrain
\r
1374 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
\r
1376 if(BTC_WIFI_BW_HT40 != wifiBw) //only shrink RF Rx LPF for HT40
\r
1379 bShrinkRxLPF = FALSE;
\r
1382 halbtc8821aCsr2ant_RfShrink(pBtCoexist, NORMAL_EXEC, bShrinkRxLPF);
\r
1383 halbtc8821aCsr2ant_LowPenaltyRa(pBtCoexist, NORMAL_EXEC, bLowPenaltyRA);
\r
1386 //halbtc8821aCsr2ant_SetBtLnaConstrain(pBtCoexist, NORMAL_EXEC, bBTLNAConstrain);
\r
1390 halbtc8821aCsr2ant_SwMechanism2(
\r
1391 IN PBTC_COEXIST pBtCoexist,
\r
1392 IN BOOLEAN bAGCTableShift,
\r
1393 IN BOOLEAN bADCBackOff,
\r
1394 IN BOOLEAN bSWDACSwing,
\r
1395 IN u4Byte dacSwingLvl
\r
1398 //halbtc8821aCsr2ant_AgcTable(pBtCoexist, NORMAL_EXEC, bAGCTableShift);
\r
1399 halbtc8821aCsr2ant_AdcBackOff(pBtCoexist, NORMAL_EXEC, bADCBackOff);
\r
1400 halbtc8821aCsr2ant_DacSwing(pBtCoexist, NORMAL_EXEC, bSWDACSwing, dacSwingLvl);
\r
1404 halbtc8821aCsr2ant_SetAntPath(
\r
1405 IN PBTC_COEXIST pBtCoexist,
\r
1406 IN u1Byte antPosType,
\r
1407 IN BOOLEAN bInitHwCfg,
\r
1408 IN BOOLEAN bWifiOff
\r
1411 PBTC_BOARD_INFO pBoardInfo=&pBtCoexist->boardInfo;
\r
1413 u1Byte H2C_Parameter[2] ={0};
\r
1417 // 0x4c[23]=0, 0x4c[24]=1 Antenna control by WL/BT
\r
1418 u4Tmp = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x4c);
\r
1421 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x4c, u4Tmp);
\r
1423 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x974, 0x3ff);
\r
1424 pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0xcb4, 0x77);
\r
1426 if(pBoardInfo->btdmAntPos == BTC_ANTENNA_AT_MAIN_PORT)
\r
1428 //tell firmware "antenna inverse" ==> WRONG firmware antenna control code.==>need fw to fix
\r
1429 H2C_Parameter[0] = 1;
\r
1430 H2C_Parameter[1] = 1;
\r
1431 pBtCoexist->fBtcFillH2c(pBtCoexist, 0x65, 2, H2C_Parameter);
\r
1435 //tell firmware "no antenna inverse" ==> WRONG firmware antenna control code.==>need fw to fix
\r
1436 H2C_Parameter[0] = 0;
\r
1437 H2C_Parameter[1] = 1;
\r
1438 pBtCoexist->fBtcFillH2c(pBtCoexist, 0x65, 2, H2C_Parameter);
\r
1442 // ext switch setting
\r
1443 switch(antPosType)
\r
1445 case BTC_ANT_WIFI_AT_MAIN:
\r
1446 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xcb7, 0x30, 0x1);
\r
1448 case BTC_ANT_WIFI_AT_AUX:
\r
1449 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xcb7, 0x30, 0x2);
\r
1455 halbtc8821aCsr2ant_PsTdma(
\r
1456 IN PBTC_COEXIST pBtCoexist,
\r
1457 IN BOOLEAN bForceExec,
\r
1458 IN BOOLEAN bTurnOn,
\r
1462 BOOLEAN bTurnOnByCnt=FALSE;
\r
1463 u1Byte psTdmaTypeByCnt=0;
\r
1465 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s turn %s PS TDMA, type=%d\n",
\r
1466 (bForceExec? "force to":""), (bTurnOn? "ON":"OFF"), type));
\r
1467 pCoexDm->bCurPsTdmaOn = bTurnOn;
\r
1468 pCoexDm->curPsTdma = type;
\r
1472 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPrePsTdmaOn = %d, bCurPsTdmaOn = %d!!\n",
\r
1473 pCoexDm->bPrePsTdmaOn, pCoexDm->bCurPsTdmaOn));
\r
1474 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], prePsTdma = %d, curPsTdma = %d!!\n",
\r
1475 pCoexDm->prePsTdma, pCoexDm->curPsTdma));
\r
1477 if( (pCoexDm->bPrePsTdmaOn == pCoexDm->bCurPsTdmaOn) &&
\r
1478 (pCoexDm->prePsTdma == pCoexDm->curPsTdma) )
\r
1487 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0xe1, 0x90);
\r
1490 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0xe1, 0x90);
\r
1493 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x3, 0xf1, 0x90);
\r
1496 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x10, 0x03, 0xf1, 0x90);
\r
1499 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0x60, 0x90);
\r
1502 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0x60, 0x90);
\r
1505 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x3, 0x70, 0x90);
\r
1508 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xa3, 0x10, 0x3, 0x70, 0x90);
\r
1511 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0xe1, 0x90);
\r
1514 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0xe1, 0x90);
\r
1517 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xe3, 0xa, 0xa, 0xe1, 0x90);
\r
1520 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x5, 0x5, 0xe1, 0x90);
\r
1523 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0x60, 0x90);
\r
1526 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0x60, 0x90);
\r
1529 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xe3, 0xa, 0xa, 0x60, 0x90);
\r
1532 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x5, 0x5, 0x60, 0x90);
\r
1535 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xa3, 0x2f, 0x2f, 0x60, 0x90);
\r
1538 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x5, 0x5, 0xe1, 0x90);
\r
1541 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x25, 0x25, 0xe1, 0x90);
\r
1544 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x25, 0x25, 0x60, 0x90);
\r
1547 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x15, 0x03, 0x70, 0x90);
\r
1549 case 22: //ad2dp master
\r
1550 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xeb, 0x11, 0x11, 0x21, 0x10);
\r
1552 case 23: //a2dp slave
\r
1553 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xeb, 0x12, 0x12, 0x20, 0x10);
\r
1556 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0xe1, 0x90);
\r
1562 // disable PS tdma
\r
1566 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0x0, 0x0, 0x0, 0x40, 0x0);
\r
1569 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0x0, 0x0, 0x0, 0x48, 0x0);
\r
1572 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0x0, 0x0, 0x0, 0x40, 0x0);
\r
1577 // update pre state
\r
1578 pCoexDm->bPrePsTdmaOn = pCoexDm->bCurPsTdmaOn;
\r
1579 pCoexDm->prePsTdma = pCoexDm->curPsTdma;
\r
1583 halbtc8821aCsr2ant_CoexAllOff(
\r
1584 IN PBTC_COEXIST pBtCoexist
\r
1588 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);
\r
1589 halbtc8821aCsr2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
1590 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);
\r
1593 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
1594 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
1597 halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55555555, 0x55555555, 0xffff, 0x3);
\r
1601 halbtc8821aCsr2ant_CoexUnder5G(
\r
1602 IN PBTC_COEXIST pBtCoexist
\r
1605 halbtc8821aCsr2ant_CoexAllOff(pBtCoexist);
\r
1607 halbtc8821aCsr2ant_IgnoreWlanAct(pBtCoexist, NORMAL_EXEC, TRUE);
\r
1611 halbtc8821aCsr2ant_InitCoexDm(
\r
1612 IN PBTC_COEXIST pBtCoexist
\r
1615 // force to reset coex mechanism
\r
1616 halbtc8821aCsr2ant_CoexTable(pBtCoexist, FORCE_EXEC, 0x55555555, 0x55555555, 0xffff, 0x3);
\r
1618 halbtc8821aCsr2ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 1);
\r
1619 halbtc8821aCsr2ant_FwDacSwingLvl(pBtCoexist, FORCE_EXEC, 6);
\r
1620 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, FORCE_EXEC, FALSE);
\r
1622 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
1623 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
1627 halbtc8821aCsr2ant_BtInquiryPage(
\r
1628 IN PBTC_COEXIST pBtCoexist
\r
1631 BOOLEAN bLowPwrDisable=TRUE;
\r
1633 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);
\r
1635 halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5afa5afa, 0xffff, 0x3);
\r
1636 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
1639 halbtc8821aCsr2ant_IsCommonAction(
\r
1640 IN PBTC_COEXIST pBtCoexist
\r
1643 BOOLEAN bCommon=FALSE, bWifiConnected=FALSE, bWifiBusy=FALSE;
\r
1644 BOOLEAN bLowPwrDisable=FALSE;
\r
1646 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);
\r
1647 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);
\r
1649 if(!bWifiConnected &&
\r
1650 BT_8821A_CSR_2ANT_BT_STATUS_IDLE == pCoexDm->btStatus)
\r
1652 bLowPwrDisable = FALSE;
\r
1653 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);
\r
1655 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi IPS + BT IPS!!\n"));
\r
1658 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);
\r
1659 halbtc8821aCsr2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
1660 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);
\r
1662 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
1663 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
1664 halbtc8821aCsr2ant_LimitedTx(pBtCoexist, NORMAL_EXEC, 0, 0, 0, 0, 0);
\r
1665 halbtc8821aCsr2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, 0, 0, 0);
\r
1669 else if(bWifiConnected &&
\r
1670 (BT_8821A_CSR_2ANT_BT_STATUS_IDLE == pCoexDm->btStatus) )
\r
1672 bLowPwrDisable = FALSE;
\r
1673 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);
\r
1677 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi Busy + BT IPS!!\n"));
\r
1678 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);
\r
1682 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi LPS + BT IPS!!\n"));
\r
1683 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);
\r
1686 halbtc8821aCsr2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
1687 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);
\r
1689 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
1690 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
1691 halbtc8821aCsr2ant_LimitedTx(pBtCoexist, NORMAL_EXEC, 0, 0, 0, 0, 0);
\r
1692 halbtc8821aCsr2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, 0, 0, 0);
\r
1696 else if(!bWifiConnected &&
\r
1697 (BT_8821A_CSR_2ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus) )
\r
1699 bLowPwrDisable = TRUE;
\r
1700 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);
\r
1702 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi IPS + BT LPS!!\n"));
\r
1704 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);
\r
1705 halbtc8821aCsr2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
1706 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);
\r
1708 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
1709 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
1710 halbtc8821aCsr2ant_LimitedTx(pBtCoexist, NORMAL_EXEC, 0, 0, 0, 0, 0);
\r
1711 halbtc8821aCsr2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, 0, 0, 0);
\r
1715 else if(bWifiConnected &&
\r
1716 (BT_8821A_CSR_2ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus) )
\r
1718 bLowPwrDisable = TRUE;
\r
1719 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);
\r
1723 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi Busy + BT LPS!!\n"));
\r
1724 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);
\r
1728 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi LPS + BT LPS!!\n"));
\r
1729 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);
\r
1732 halbtc8821aCsr2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
1733 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);
\r
1735 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,TRUE,TRUE);
\r
1736 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
1737 halbtc8821aCsr2ant_LimitedTx(pBtCoexist, NORMAL_EXEC, 0, 0, 0, 0, 0);
\r
1738 halbtc8821aCsr2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, 0, 0, 0);
\r
1742 else if(!bWifiConnected &&
\r
1743 (BT_8821A_CSR_2ANT_BT_STATUS_NON_IDLE == pCoexDm->btStatus) )
\r
1745 bLowPwrDisable = FALSE;
\r
1746 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);
\r
1748 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi IPS + BT Busy!!\n"));
\r
1750 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);
\r
1751 halbtc8821aCsr2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
1752 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);
\r
1754 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
1755 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
1756 halbtc8821aCsr2ant_LimitedTx(pBtCoexist, NORMAL_EXEC, 0, 0, 0, 0, 0);
\r
1757 halbtc8821aCsr2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, 0, 0, 0);
\r
1763 bLowPwrDisable = TRUE;
\r
1764 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);
\r
1768 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi Busy + BT Busy!!\n"));
\r
1773 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi LPS + BT Busy!!\n"));
\r
1774 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 21);
\r
1776 if(halbtc8821aCsr2ant_NeedToDecBtPwr(pBtCoexist))
\r
1777 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);
\r
1779 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);
\r
1784 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,TRUE,TRUE);
\r
1787 if (bCommon == TRUE)
\r
1788 halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5afa5afa, 0xffff, 0x3);
\r
1793 halbtc8821aCsr2ant_TdmaDurationAdjust(
\r
1794 IN PBTC_COEXIST pBtCoexist,
\r
1795 IN BOOLEAN bScoHid,
\r
1796 IN BOOLEAN bTxPause,
\r
1797 IN u1Byte maxInterval
\r
1800 static s4Byte up,dn,m,n,WaitCount;
\r
1801 s4Byte result; //0: no change, +1: increase WiFi duration, -1: decrease WiFi duration
\r
1802 u1Byte retryCount=0;
\r
1804 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], TdmaDurationAdjust()\n"));
\r
1806 if(pCoexDm->bResetTdmaAdjust)
\r
1808 pCoexDm->bResetTdmaAdjust = FALSE;
\r
1809 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], first run TdmaDurationAdjust()!!\n"));
\r
1815 if(maxInterval == 1)
\r
1817 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 13);
\r
1818 pCoexDm->psTdmaDuAdjType = 13;
\r
1820 else if(maxInterval == 2)
\r
1822 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);
\r
1823 pCoexDm->psTdmaDuAdjType = 14;
\r
1825 else if(maxInterval == 3)
\r
1827 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
1828 pCoexDm->psTdmaDuAdjType = 15;
\r
1832 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
1833 pCoexDm->psTdmaDuAdjType = 15;
\r
1838 if(maxInterval == 1)
\r
1840 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);
\r
1841 pCoexDm->psTdmaDuAdjType = 9;
\r
1843 else if(maxInterval == 2)
\r
1845 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);
\r
1846 pCoexDm->psTdmaDuAdjType = 10;
\r
1848 else if(maxInterval == 3)
\r
1850 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
1851 pCoexDm->psTdmaDuAdjType = 11;
\r
1855 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
1856 pCoexDm->psTdmaDuAdjType = 11;
\r
1864 if(maxInterval == 1)
\r
1866 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);
\r
1867 pCoexDm->psTdmaDuAdjType = 5;
\r
1869 else if(maxInterval == 2)
\r
1871 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);
\r
1872 pCoexDm->psTdmaDuAdjType = 6;
\r
1874 else if(maxInterval == 3)
\r
1876 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
1877 pCoexDm->psTdmaDuAdjType = 7;
\r
1881 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
1882 pCoexDm->psTdmaDuAdjType = 7;
\r
1887 if(maxInterval == 1)
\r
1889 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);
\r
1890 pCoexDm->psTdmaDuAdjType = 1;
\r
1892 else if(maxInterval == 2)
\r
1894 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);
\r
1895 pCoexDm->psTdmaDuAdjType = 2;
\r
1897 else if(maxInterval == 3)
\r
1899 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
1900 pCoexDm->psTdmaDuAdjType = 3;
\r
1904 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
1905 pCoexDm->psTdmaDuAdjType = 3;
\r
1920 //accquire the BT TRx retry count from BT_Info byte2
\r
1921 retryCount = pCoexSta->btRetryCnt;
\r
1922 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], retryCount = %d\n", retryCount));
\r
1923 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], up=%d, dn=%d, m=%d, n=%d, WaitCount=%d\n",
\r
1924 up, dn, m, n, WaitCount));
\r
1928 if(retryCount == 0) // no retry in the last 2-second duration
\r
1936 if(up >= n) // if ³sÄò n Ó2¬í retry count¬°0, «h½Õ¼eWiFi duration
\r
1943 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Increase wifi duration!!\n"));
\r
1946 else if (retryCount <= 3) // <=3 retry in the last 2-second duration
\r
1954 if (dn == 2) // if ³sÄò 2 Ó2¬í retry count< 3, «h½Õ¯¶WiFi duration
\r
1956 if (WaitCount <= 2)
\r
1957 m++; // ÁקK¤@ª½¦b¨âÓlevel¤¤¨Ó¦^
\r
1961 if ( m >= 20) //m ³Ì¤jÈ = 20 ' ³Ì¤j120¬í recheck¬O§_½Õ¾ã WiFi duration.
\r
1969 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Decrease wifi duration for retryCounter<3!!\n"));
\r
1972 else //retry count > 3, ¥un1¦¸ retry count > 3, «h½Õ¯¶WiFi duration
\r
1974 if (WaitCount == 1)
\r
1975 m++; // ÁקK¤@ª½¦b¨âÓlevel¤¤¨Ó¦^
\r
1979 if ( m >= 20) //m ³Ì¤jÈ = 20 ' ³Ì¤j120¬í recheck¬O§_½Õ¾ã WiFi duration.
\r
1987 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Decrease wifi duration for retryCounter>3!!\n"));
\r
1990 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], max Interval = %d\n", maxInterval));
\r
1991 if(maxInterval == 1)
\r
1995 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 1\n"));
\r
1997 if(pCoexDm->curPsTdma == 71)
\r
1999 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);
\r
2000 pCoexDm->psTdmaDuAdjType = 5;
\r
2002 else if(pCoexDm->curPsTdma == 1)
\r
2004 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);
\r
2005 pCoexDm->psTdmaDuAdjType = 5;
\r
2007 else if(pCoexDm->curPsTdma == 2)
\r
2009 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);
\r
2010 pCoexDm->psTdmaDuAdjType = 6;
\r
2012 else if(pCoexDm->curPsTdma == 3)
\r
2014 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2015 pCoexDm->psTdmaDuAdjType = 7;
\r
2017 else if(pCoexDm->curPsTdma == 4)
\r
2019 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 8);
\r
2020 pCoexDm->psTdmaDuAdjType = 8;
\r
2022 if(pCoexDm->curPsTdma == 9)
\r
2024 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 13);
\r
2025 pCoexDm->psTdmaDuAdjType = 13;
\r
2027 else if(pCoexDm->curPsTdma == 10)
\r
2029 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);
\r
2030 pCoexDm->psTdmaDuAdjType = 14;
\r
2032 else if(pCoexDm->curPsTdma == 11)
\r
2034 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2035 pCoexDm->psTdmaDuAdjType = 15;
\r
2037 else if(pCoexDm->curPsTdma == 12)
\r
2039 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 16);
\r
2040 pCoexDm->psTdmaDuAdjType = 16;
\r
2045 if(pCoexDm->curPsTdma == 5)
\r
2047 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);
\r
2048 pCoexDm->psTdmaDuAdjType = 6;
\r
2050 else if(pCoexDm->curPsTdma == 6)
\r
2052 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2053 pCoexDm->psTdmaDuAdjType = 7;
\r
2055 else if(pCoexDm->curPsTdma == 7)
\r
2057 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 8);
\r
2058 pCoexDm->psTdmaDuAdjType = 8;
\r
2060 else if(pCoexDm->curPsTdma == 13)
\r
2062 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);
\r
2063 pCoexDm->psTdmaDuAdjType = 14;
\r
2065 else if(pCoexDm->curPsTdma == 14)
\r
2067 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2068 pCoexDm->psTdmaDuAdjType = 15;
\r
2070 else if(pCoexDm->curPsTdma == 15)
\r
2072 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 16);
\r
2073 pCoexDm->psTdmaDuAdjType = 16;
\r
2076 else if (result == 1)
\r
2078 if(pCoexDm->curPsTdma == 8)
\r
2080 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2081 pCoexDm->psTdmaDuAdjType = 7;
\r
2083 else if(pCoexDm->curPsTdma == 7)
\r
2085 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);
\r
2086 pCoexDm->psTdmaDuAdjType = 6;
\r
2088 else if(pCoexDm->curPsTdma == 6)
\r
2090 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);
\r
2091 pCoexDm->psTdmaDuAdjType = 5;
\r
2093 else if(pCoexDm->curPsTdma == 16)
\r
2095 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2096 pCoexDm->psTdmaDuAdjType = 15;
\r
2098 else if(pCoexDm->curPsTdma == 15)
\r
2100 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);
\r
2101 pCoexDm->psTdmaDuAdjType = 14;
\r
2103 else if(pCoexDm->curPsTdma == 14)
\r
2105 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 13);
\r
2106 pCoexDm->psTdmaDuAdjType = 13;
\r
2112 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 0\n"));
\r
2113 if(pCoexDm->curPsTdma == 5)
\r
2115 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 71);
\r
2116 pCoexDm->psTdmaDuAdjType = 71;
\r
2118 else if(pCoexDm->curPsTdma == 6)
\r
2120 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);
\r
2121 pCoexDm->psTdmaDuAdjType = 2;
\r
2123 else if(pCoexDm->curPsTdma == 7)
\r
2125 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2126 pCoexDm->psTdmaDuAdjType = 3;
\r
2128 else if(pCoexDm->curPsTdma == 8)
\r
2130 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 4);
\r
2131 pCoexDm->psTdmaDuAdjType = 4;
\r
2133 if(pCoexDm->curPsTdma == 13)
\r
2135 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);
\r
2136 pCoexDm->psTdmaDuAdjType = 9;
\r
2138 else if(pCoexDm->curPsTdma == 14)
\r
2140 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);
\r
2141 pCoexDm->psTdmaDuAdjType = 10;
\r
2143 else if(pCoexDm->curPsTdma == 15)
\r
2145 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2146 pCoexDm->psTdmaDuAdjType = 11;
\r
2148 else if(pCoexDm->curPsTdma == 16)
\r
2150 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 12);
\r
2151 pCoexDm->psTdmaDuAdjType = 12;
\r
2156 if(pCoexDm->curPsTdma == 71)
\r
2158 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);
\r
2159 pCoexDm->psTdmaDuAdjType = 1;
\r
2161 else if(pCoexDm->curPsTdma == 1)
\r
2163 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);
\r
2164 pCoexDm->psTdmaDuAdjType = 2;
\r
2166 else if(pCoexDm->curPsTdma == 2)
\r
2168 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2169 pCoexDm->psTdmaDuAdjType = 3;
\r
2171 else if(pCoexDm->curPsTdma == 3)
\r
2173 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 4);
\r
2174 pCoexDm->psTdmaDuAdjType = 4;
\r
2176 else if(pCoexDm->curPsTdma == 9)
\r
2178 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);
\r
2179 pCoexDm->psTdmaDuAdjType = 10;
\r
2181 else if(pCoexDm->curPsTdma == 10)
\r
2183 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2184 pCoexDm->psTdmaDuAdjType = 11;
\r
2186 else if(pCoexDm->curPsTdma == 11)
\r
2188 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 12);
\r
2189 pCoexDm->psTdmaDuAdjType = 12;
\r
2192 else if (result == 1)
\r
2194 if(pCoexDm->curPsTdma == 4)
\r
2196 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2197 pCoexDm->psTdmaDuAdjType = 3;
\r
2199 else if(pCoexDm->curPsTdma == 3)
\r
2201 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);
\r
2202 pCoexDm->psTdmaDuAdjType = 2;
\r
2204 else if(pCoexDm->curPsTdma == 2)
\r
2206 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);
\r
2207 pCoexDm->psTdmaDuAdjType = 1;
\r
2209 else if(pCoexDm->curPsTdma == 1)
\r
2211 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 71);
\r
2212 pCoexDm->psTdmaDuAdjType = 71;
\r
2214 else if(pCoexDm->curPsTdma == 12)
\r
2216 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2217 pCoexDm->psTdmaDuAdjType = 11;
\r
2219 else if(pCoexDm->curPsTdma == 11)
\r
2221 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);
\r
2222 pCoexDm->psTdmaDuAdjType = 10;
\r
2224 else if(pCoexDm->curPsTdma == 10)
\r
2226 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);
\r
2227 pCoexDm->psTdmaDuAdjType = 9;
\r
2232 else if(maxInterval == 2)
\r
2236 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 1\n"));
\r
2237 if(pCoexDm->curPsTdma == 1)
\r
2239 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);
\r
2240 pCoexDm->psTdmaDuAdjType = 6;
\r
2242 else if(pCoexDm->curPsTdma == 2)
\r
2244 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);
\r
2245 pCoexDm->psTdmaDuAdjType = 6;
\r
2247 else if(pCoexDm->curPsTdma == 3)
\r
2249 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2250 pCoexDm->psTdmaDuAdjType = 7;
\r
2252 else if(pCoexDm->curPsTdma == 4)
\r
2254 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 8);
\r
2255 pCoexDm->psTdmaDuAdjType = 8;
\r
2257 if(pCoexDm->curPsTdma == 9)
\r
2259 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);
\r
2260 pCoexDm->psTdmaDuAdjType = 14;
\r
2262 else if(pCoexDm->curPsTdma == 10)
\r
2264 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);
\r
2265 pCoexDm->psTdmaDuAdjType = 14;
\r
2267 else if(pCoexDm->curPsTdma == 11)
\r
2269 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2270 pCoexDm->psTdmaDuAdjType = 15;
\r
2272 else if(pCoexDm->curPsTdma == 12)
\r
2274 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 16);
\r
2275 pCoexDm->psTdmaDuAdjType = 16;
\r
2279 if(pCoexDm->curPsTdma == 5)
\r
2281 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);
\r
2282 pCoexDm->psTdmaDuAdjType = 6;
\r
2284 else if(pCoexDm->curPsTdma == 6)
\r
2286 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2287 pCoexDm->psTdmaDuAdjType = 7;
\r
2289 else if(pCoexDm->curPsTdma == 7)
\r
2291 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 8);
\r
2292 pCoexDm->psTdmaDuAdjType = 8;
\r
2294 else if(pCoexDm->curPsTdma == 13)
\r
2296 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);
\r
2297 pCoexDm->psTdmaDuAdjType = 14;
\r
2299 else if(pCoexDm->curPsTdma == 14)
\r
2301 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2302 pCoexDm->psTdmaDuAdjType = 15;
\r
2304 else if(pCoexDm->curPsTdma == 15)
\r
2306 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 16);
\r
2307 pCoexDm->psTdmaDuAdjType = 16;
\r
2310 else if (result == 1)
\r
2312 if(pCoexDm->curPsTdma == 8)
\r
2314 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2315 pCoexDm->psTdmaDuAdjType = 7;
\r
2317 else if(pCoexDm->curPsTdma == 7)
\r
2319 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);
\r
2320 pCoexDm->psTdmaDuAdjType = 6;
\r
2322 else if(pCoexDm->curPsTdma == 6)
\r
2324 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);
\r
2325 pCoexDm->psTdmaDuAdjType = 6;
\r
2327 else if(pCoexDm->curPsTdma == 16)
\r
2329 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2330 pCoexDm->psTdmaDuAdjType = 15;
\r
2332 else if(pCoexDm->curPsTdma == 15)
\r
2334 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);
\r
2335 pCoexDm->psTdmaDuAdjType = 14;
\r
2337 else if(pCoexDm->curPsTdma == 14)
\r
2339 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);
\r
2340 pCoexDm->psTdmaDuAdjType = 14;
\r
2346 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 0\n"));
\r
2347 if(pCoexDm->curPsTdma == 5)
\r
2349 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);
\r
2350 pCoexDm->psTdmaDuAdjType = 2;
\r
2352 else if(pCoexDm->curPsTdma == 6)
\r
2354 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);
\r
2355 pCoexDm->psTdmaDuAdjType = 2;
\r
2357 else if(pCoexDm->curPsTdma == 7)
\r
2359 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2360 pCoexDm->psTdmaDuAdjType = 3;
\r
2362 else if(pCoexDm->curPsTdma == 8)
\r
2364 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 4);
\r
2365 pCoexDm->psTdmaDuAdjType = 4;
\r
2367 if(pCoexDm->curPsTdma == 13)
\r
2369 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);
\r
2370 pCoexDm->psTdmaDuAdjType = 10;
\r
2372 else if(pCoexDm->curPsTdma == 14)
\r
2374 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);
\r
2375 pCoexDm->psTdmaDuAdjType = 10;
\r
2377 else if(pCoexDm->curPsTdma == 15)
\r
2379 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2380 pCoexDm->psTdmaDuAdjType = 11;
\r
2382 else if(pCoexDm->curPsTdma == 16)
\r
2384 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 12);
\r
2385 pCoexDm->psTdmaDuAdjType = 12;
\r
2389 if(pCoexDm->curPsTdma == 1)
\r
2391 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);
\r
2392 pCoexDm->psTdmaDuAdjType = 2;
\r
2394 else if(pCoexDm->curPsTdma == 2)
\r
2396 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2397 pCoexDm->psTdmaDuAdjType = 3;
\r
2399 else if(pCoexDm->curPsTdma == 3)
\r
2401 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 4);
\r
2402 pCoexDm->psTdmaDuAdjType = 4;
\r
2404 else if(pCoexDm->curPsTdma == 9)
\r
2406 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);
\r
2407 pCoexDm->psTdmaDuAdjType = 10;
\r
2409 else if(pCoexDm->curPsTdma == 10)
\r
2411 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2412 pCoexDm->psTdmaDuAdjType = 11;
\r
2414 else if(pCoexDm->curPsTdma == 11)
\r
2416 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 12);
\r
2417 pCoexDm->psTdmaDuAdjType = 12;
\r
2420 else if (result == 1)
\r
2422 if(pCoexDm->curPsTdma == 4)
\r
2424 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2425 pCoexDm->psTdmaDuAdjType = 3;
\r
2427 else if(pCoexDm->curPsTdma == 3)
\r
2429 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);
\r
2430 pCoexDm->psTdmaDuAdjType = 2;
\r
2432 else if(pCoexDm->curPsTdma == 2)
\r
2434 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);
\r
2435 pCoexDm->psTdmaDuAdjType = 2;
\r
2437 else if(pCoexDm->curPsTdma == 12)
\r
2439 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2440 pCoexDm->psTdmaDuAdjType = 11;
\r
2442 else if(pCoexDm->curPsTdma == 11)
\r
2444 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);
\r
2445 pCoexDm->psTdmaDuAdjType = 10;
\r
2447 else if(pCoexDm->curPsTdma == 10)
\r
2449 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);
\r
2450 pCoexDm->psTdmaDuAdjType = 10;
\r
2455 else if(maxInterval == 3)
\r
2459 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 1\n"));
\r
2460 if(pCoexDm->curPsTdma == 1)
\r
2462 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2463 pCoexDm->psTdmaDuAdjType = 7;
\r
2465 else if(pCoexDm->curPsTdma == 2)
\r
2467 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2468 pCoexDm->psTdmaDuAdjType = 7;
\r
2470 else if(pCoexDm->curPsTdma == 3)
\r
2472 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2473 pCoexDm->psTdmaDuAdjType = 7;
\r
2475 else if(pCoexDm->curPsTdma == 4)
\r
2477 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 8);
\r
2478 pCoexDm->psTdmaDuAdjType = 8;
\r
2480 if(pCoexDm->curPsTdma == 9)
\r
2482 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2483 pCoexDm->psTdmaDuAdjType = 15;
\r
2485 else if(pCoexDm->curPsTdma == 10)
\r
2487 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2488 pCoexDm->psTdmaDuAdjType = 15;
\r
2490 else if(pCoexDm->curPsTdma == 11)
\r
2492 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2493 pCoexDm->psTdmaDuAdjType = 15;
\r
2495 else if(pCoexDm->curPsTdma == 12)
\r
2497 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 16);
\r
2498 pCoexDm->psTdmaDuAdjType = 16;
\r
2502 if(pCoexDm->curPsTdma == 5)
\r
2504 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2505 pCoexDm->psTdmaDuAdjType = 7;
\r
2507 else if(pCoexDm->curPsTdma == 6)
\r
2509 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2510 pCoexDm->psTdmaDuAdjType = 7;
\r
2512 else if(pCoexDm->curPsTdma == 7)
\r
2514 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 8);
\r
2515 pCoexDm->psTdmaDuAdjType = 8;
\r
2517 else if(pCoexDm->curPsTdma == 13)
\r
2519 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2520 pCoexDm->psTdmaDuAdjType = 15;
\r
2522 else if(pCoexDm->curPsTdma == 14)
\r
2524 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2525 pCoexDm->psTdmaDuAdjType = 15;
\r
2527 else if(pCoexDm->curPsTdma == 15)
\r
2529 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 16);
\r
2530 pCoexDm->psTdmaDuAdjType = 16;
\r
2533 else if (result == 1)
\r
2535 if(pCoexDm->curPsTdma == 8)
\r
2537 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2538 pCoexDm->psTdmaDuAdjType = 7;
\r
2540 else if(pCoexDm->curPsTdma == 7)
\r
2542 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2543 pCoexDm->psTdmaDuAdjType = 7;
\r
2545 else if(pCoexDm->curPsTdma == 6)
\r
2547 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);
\r
2548 pCoexDm->psTdmaDuAdjType = 7;
\r
2550 else if(pCoexDm->curPsTdma == 16)
\r
2552 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2553 pCoexDm->psTdmaDuAdjType = 15;
\r
2555 else if(pCoexDm->curPsTdma == 15)
\r
2557 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2558 pCoexDm->psTdmaDuAdjType = 15;
\r
2560 else if(pCoexDm->curPsTdma == 14)
\r
2562 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);
\r
2563 pCoexDm->psTdmaDuAdjType = 15;
\r
2569 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 0\n"));
\r
2570 if(pCoexDm->curPsTdma == 5)
\r
2572 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2573 pCoexDm->psTdmaDuAdjType = 3;
\r
2575 else if(pCoexDm->curPsTdma == 6)
\r
2577 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2578 pCoexDm->psTdmaDuAdjType = 3;
\r
2580 else if(pCoexDm->curPsTdma == 7)
\r
2582 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2583 pCoexDm->psTdmaDuAdjType = 3;
\r
2585 else if(pCoexDm->curPsTdma == 8)
\r
2587 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 4);
\r
2588 pCoexDm->psTdmaDuAdjType = 4;
\r
2590 if(pCoexDm->curPsTdma == 13)
\r
2592 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2593 pCoexDm->psTdmaDuAdjType = 11;
\r
2595 else if(pCoexDm->curPsTdma == 14)
\r
2597 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2598 pCoexDm->psTdmaDuAdjType = 11;
\r
2600 else if(pCoexDm->curPsTdma == 15)
\r
2602 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2603 pCoexDm->psTdmaDuAdjType = 11;
\r
2605 else if(pCoexDm->curPsTdma == 16)
\r
2607 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 12);
\r
2608 pCoexDm->psTdmaDuAdjType = 12;
\r
2612 if(pCoexDm->curPsTdma == 1)
\r
2614 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2615 pCoexDm->psTdmaDuAdjType = 3;
\r
2617 else if(pCoexDm->curPsTdma == 2)
\r
2619 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2620 pCoexDm->psTdmaDuAdjType = 3;
\r
2622 else if(pCoexDm->curPsTdma == 3)
\r
2624 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 4);
\r
2625 pCoexDm->psTdmaDuAdjType = 4;
\r
2627 else if(pCoexDm->curPsTdma == 9)
\r
2629 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2630 pCoexDm->psTdmaDuAdjType = 11;
\r
2632 else if(pCoexDm->curPsTdma == 10)
\r
2634 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2635 pCoexDm->psTdmaDuAdjType = 11;
\r
2637 else if(pCoexDm->curPsTdma == 11)
\r
2639 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 12);
\r
2640 pCoexDm->psTdmaDuAdjType = 12;
\r
2643 else if (result == 1)
\r
2645 if(pCoexDm->curPsTdma == 4)
\r
2647 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2648 pCoexDm->psTdmaDuAdjType = 3;
\r
2650 else if(pCoexDm->curPsTdma == 3)
\r
2652 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2653 pCoexDm->psTdmaDuAdjType = 3;
\r
2655 else if(pCoexDm->curPsTdma == 2)
\r
2657 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);
\r
2658 pCoexDm->psTdmaDuAdjType = 3;
\r
2660 else if(pCoexDm->curPsTdma == 12)
\r
2662 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2663 pCoexDm->psTdmaDuAdjType = 11;
\r
2665 else if(pCoexDm->curPsTdma == 11)
\r
2667 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2668 pCoexDm->psTdmaDuAdjType = 11;
\r
2670 else if(pCoexDm->curPsTdma == 10)
\r
2672 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);
\r
2673 pCoexDm->psTdmaDuAdjType = 11;
\r
2680 // if current PsTdma not match with the recorded one (when scan, dhcp...),
\r
2681 // then we have to adjust it back to the previous record one.
\r
2682 if(pCoexDm->curPsTdma != pCoexDm->psTdmaDuAdjType)
\r
2684 BOOLEAN bScan=FALSE, bLink=FALSE, bRoam=FALSE;
\r
2685 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], PsTdma type dismatch!!!, curPsTdma=%d, recordPsTdma=%d\n",
\r
2686 pCoexDm->curPsTdma, pCoexDm->psTdmaDuAdjType));
\r
2688 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);
\r
2689 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_LINK, &bLink);
\r
2690 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_ROAM, &bRoam);
\r
2692 if( !bScan && !bLink && !bRoam)
\r
2694 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, pCoexDm->psTdmaDuAdjType);
\r
2698 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], roaming/link/scan is under progress, will adjust next time!!!\n"));
\r
2702 // when halbtc8821aCsr2ant_TdmaDurationAdjust() is called, fw dac swing is included in the function.
\r
2703 //if(pCoexDm->psTdmaDuAdjType == 71)
\r
2704 // halbtc8821aCsr2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 0xc); //Skip because A2DP get worse at HT40
\r
2706 halbtc8821aCsr2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 0x6);
\r
2709 // SCO only or SCO+PAN(HS)
\r
2711 halbtc8821aCsr2ant_ActionSco(
\r
2712 IN PBTC_COEXIST pBtCoexist
\r
2715 u1Byte wifiRssiState,btRssiState;
\r
2718 halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55555555, 0x55555555, 0xffffff, 0x3);
\r
2719 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0);
\r
2721 halbtc8821aCsr2ant_LowPenaltyRa(pBtCoexist, NORMAL_EXEC, TRUE);
\r
2723 halbtc8821aCsr2ant_LimitedTx(pBtCoexist, NORMAL_EXEC, 0, 1, 0, 2, 0);
\r
2725 if(pCoexSta->bSlave == FALSE)
\r
2726 halbtc8821aCsr2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, TRUE, 0x4);
\r
2728 halbtc8821aCsr2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, TRUE, 0x2);
\r
2731 wifiRssiState = halbtc8821aCsr2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
\r
2732 btRssiState = halbtc8821aCsr2ant_BtRssiState(2, 35, 0);
\r
2734 halbtc8821aCsr2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 4);
\r
2736 if(halbtc8821aCsr2ant_NeedToDecBtPwr(pBtCoexist))
\r
2737 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);
\r
2739 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);
\r
2741 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
\r
2743 if (BTC_WIFI_BW_LEGACY == wifiBw) //for SCO quality at 11b/g mode
\r
2745 halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x5a5a5a5a, 0x5a5a5a5a, 0xffff, 0x3);
\r
2747 else //for SCO quality & wifi performance balance at 11n mode
\r
2749 halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x5aea5aea, 0x5aea5aea, 0xffff, 0x3);
\r
2752 if(BTC_WIFI_BW_HT40 == wifiBw)
\r
2756 //halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);
\r
2758 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||
\r
2759 (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
2761 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0); //for voice quality
\r
2765 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0); //for voice quality
\r
2769 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
2770 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
2772 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);
\r
2773 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
2777 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);
\r
2778 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
2784 //halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);
\r
2786 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||
\r
2787 (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
2789 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0); //for voice quality
\r
2793 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0); //for voice quality
\r
2797 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
2798 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
2800 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);
\r
2801 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
2805 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);
\r
2806 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
2814 halbtc8821aCsr2ant_ActionHid(
\r
2815 IN PBTC_COEXIST pBtCoexist
\r
2818 u1Byte wifiRssiState, btRssiState;
\r
2821 wifiRssiState = halbtc8821aCsr2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
\r
2822 btRssiState = halbtc8821aCsr2ant_BtRssiState(2, 35, 0);
\r
2824 halbtc8821aCsr2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
2826 if(halbtc8821aCsr2ant_NeedToDecBtPwr(pBtCoexist))
\r
2827 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);
\r
2829 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);
\r
2831 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
\r
2833 if (BTC_WIFI_BW_LEGACY == wifiBw) //for HID at 11b/g mode
\r
2835 halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5a5a5a5a, 0xffff, 0x3);
\r
2837 else //for HID quality & wifi performance balance at 11n mode
\r
2839 halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5aea5aea, 0xffff, 0x3);
\r
2842 if(BTC_WIFI_BW_HT40 == wifiBw)
\r
2845 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||
\r
2846 (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
2848 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);
\r
2852 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 13);
\r
2856 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
2857 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
2859 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);
\r
2860 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
2864 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);
\r
2865 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
2871 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||
\r
2872 (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
2874 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);
\r
2878 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 13);
\r
2882 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
2883 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
2885 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);
\r
2886 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
2890 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);
\r
2891 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
2896 //A2DP only / PAN(EDR) only/ A2DP+PAN(HS)
\r
2898 halbtc8821aCsr2ant_ActionA2dp(
\r
2899 IN PBTC_COEXIST pBtCoexist
\r
2902 u1Byte wifiRssiState, btRssiState;
\r
2905 halbtc8821aCsr2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, TRUE, 0x8);
\r
2907 if(pCoexSta->bSlave == FALSE)
\r
2909 halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0xfdfdfdfd, 0xdfdadfda, 0xffffff, 0x3);
\r
2910 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 22);
\r
2911 halbtc8821aCsr2ant_LimitedTx(pBtCoexist, NORMAL_EXEC, 0, 0, 0, 0, 1);
\r
2912 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,TRUE,0x0c);
\r
2916 halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0xfdfdfdfd, 0xdfdadfda, 0xffffff, 0x3);
\r
2917 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 23);
\r
2918 halbtc8821aCsr2ant_LimitedTx(pBtCoexist, NORMAL_EXEC, 0, 0, 0, 0, 2);
\r
2919 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,TRUE,0x18);
\r
2923 wifiRssiState = halbtc8821aCsr2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
\r
2924 btRssiState = halbtc8821aCsr2ant_BtRssiState(2, 35, 0);
\r
2926 //fw dac swing is called in halbtc8821aCsr2ant_TdmaDurationAdjust()
\r
2927 //halbtc8821aCsr2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
2930 if(halbtc8821aCsr2ant_NeedToDecBtPwr(pBtCoexist))
\r
2931 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);
\r
2933 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);
\r
2935 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
\r
2937 if(BTC_WIFI_BW_HT40 == wifiBw)
\r
2940 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||
\r
2941 (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
2943 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 1);
\r
2947 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 1);
\r
2951 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
2952 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
2954 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);
\r
2955 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
2959 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);
\r
2960 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
2966 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||
\r
2967 (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
2969 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 1);
\r
2973 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 1);
\r
2977 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
2978 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
2980 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
2981 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
2985 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
2986 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
2993 halbtc8821aCsr2ant_ActionA2dpPanHs(
\r
2994 IN PBTC_COEXIST pBtCoexist
\r
2997 u1Byte wifiRssiState, btRssiState, btInfoExt;
\r
3000 btInfoExt = pCoexSta->btInfoExt;
\r
3001 wifiRssiState = halbtc8821aCsr2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
\r
3002 btRssiState = halbtc8821aCsr2ant_BtRssiState(2,35, 0);
\r
3004 //fw dac swing is called in halbtc8821aCsr2ant_TdmaDurationAdjust()
\r
3005 //halbtc8821aCsr2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
3008 if(halbtc8821aCsr2ant_NeedToDecBtPwr(pBtCoexist))
\r
3009 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);
\r
3011 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);
\r
3013 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
\r
3015 if(BTC_WIFI_BW_HT40 == wifiBw)
\r
3018 if(btInfoExt&BIT0) //a2dp basic rate
\r
3020 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 2);
\r
3022 else //a2dp edr rate
\r
3024 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 1);
\r
3028 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3029 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3031 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);
\r
3032 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3036 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);
\r
3037 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3043 if(btInfoExt&BIT0) //a2dp basic rate
\r
3045 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 2);
\r
3047 else //a2dp edr rate
\r
3049 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 1);
\r
3053 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3054 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3056 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
3057 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3061 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
3062 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3068 halbtc8821aCsr2ant_ActionPanEdr(
\r
3069 IN PBTC_COEXIST pBtCoexist
\r
3072 u1Byte wifiRssiState, btRssiState;
\r
3075 wifiRssiState = halbtc8821aCsr2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
\r
3076 btRssiState = halbtc8821aCsr2ant_BtRssiState(2, 35, 0);
\r
3078 halbtc8821aCsr2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
3080 if(halbtc8821aCsr2ant_NeedToDecBtPwr(pBtCoexist))
\r
3081 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);
\r
3083 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);
\r
3085 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
\r
3087 if (BTC_WIFI_BW_LEGACY == wifiBw) //for HID at 11b/g mode
\r
3089 halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5aff5aff, 0xffff, 0x3);
\r
3091 else //for HID quality & wifi performance balance at 11n mode
\r
3093 halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5aff5aff, 0xffff, 0x3);
\r
3096 if(BTC_WIFI_BW_HT40 == wifiBw)
\r
3099 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3100 (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3102 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);
\r
3106 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);
\r
3110 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3111 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3113 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);
\r
3114 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3118 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);
\r
3119 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3125 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3126 (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3128 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);
\r
3132 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);
\r
3136 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3137 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3139 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
3140 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3144 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
3145 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3153 halbtc8821aCsr2ant_ActionPanHs(
\r
3154 IN PBTC_COEXIST pBtCoexist
\r
3157 u1Byte wifiRssiState, btRssiState;
\r
3160 wifiRssiState = halbtc8821aCsr2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
\r
3161 btRssiState = halbtc8821aCsr2ant_BtRssiState(2, 35, 0);
\r
3163 halbtc8821aCsr2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
3165 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
\r
3167 if(BTC_WIFI_BW_HT40 == wifiBw)
\r
3170 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3171 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3173 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);
\r
3177 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);
\r
3179 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);
\r
3182 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3183 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3185 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);
\r
3186 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3190 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);
\r
3191 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3197 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3198 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3200 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);
\r
3204 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);
\r
3207 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3208 (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3210 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);
\r
3214 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);
\r
3218 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3219 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3221 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
3222 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3226 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
3227 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3234 halbtc8821aCsr2ant_ActionPanEdrA2dp(
\r
3235 IN PBTC_COEXIST pBtCoexist
\r
3238 u1Byte wifiRssiState, btRssiState, btInfoExt;
\r
3241 btInfoExt = pCoexSta->btInfoExt;
\r
3242 wifiRssiState = halbtc8821aCsr2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
\r
3243 btRssiState = halbtc8821aCsr2ant_BtRssiState(2, 35, 0);
\r
3245 halbtc8821aCsr2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
3247 if(halbtc8821aCsr2ant_NeedToDecBtPwr(pBtCoexist))
\r
3248 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);
\r
3250 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);
\r
3252 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
\r
3254 if (BTC_WIFI_BW_LEGACY == wifiBw) //for HID at 11b/g mode
\r
3256 halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5afa5afa, 0xffff, 0x3);
\r
3258 else //for HID quality & wifi performance balance at 11n mode
\r
3260 halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5afa5afa, 0xffff, 0x3);
\r
3263 if(BTC_WIFI_BW_HT40 == wifiBw)
\r
3266 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3267 (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3269 if(btInfoExt&BIT0) //a2dp basic rate
\r
3271 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 3);
\r
3273 else //a2dp edr rate
\r
3275 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 3);
\r
3280 if(btInfoExt&BIT0) //a2dp basic rate
\r
3282 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 3);
\r
3284 else //a2dp edr rate
\r
3286 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 3);
\r
3291 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3292 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3294 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);
\r
3295 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3299 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);
\r
3300 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3306 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3307 (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3309 if(btInfoExt&BIT0) //a2dp basic rate
\r
3311 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 3);
\r
3313 else //a2dp edr rate
\r
3315 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 3);
\r
3320 if(btInfoExt&BIT0) //a2dp basic rate
\r
3322 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 3);
\r
3324 else //a2dp edr rate
\r
3326 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 3);
\r
3331 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3332 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3334 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
3335 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3339 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);
\r
3340 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3346 halbtc8821aCsr2ant_ActionPanEdrHid(
\r
3347 IN PBTC_COEXIST pBtCoexist
\r
3350 u1Byte wifiRssiState, btRssiState;
\r
3353 wifiRssiState = halbtc8821aCsr2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
\r
3354 btRssiState = halbtc8821aCsr2ant_BtRssiState(2, 35, 0);
\r
3356 halbtc8821aCsr2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
3358 if(halbtc8821aCsr2ant_NeedToDecBtPwr(pBtCoexist))
\r
3359 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);
\r
3361 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);
\r
3363 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
\r
3365 if (BTC_WIFI_BW_LEGACY == wifiBw) //for HID at 11b/g mode
\r
3367 halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5a5f5a5f, 0xffff, 0x3);
\r
3369 else //for HID quality & wifi performance balance at 11n mode
\r
3371 halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5a5f5a5f, 0xffff, 0x3);
\r
3374 if(BTC_WIFI_BW_HT40 == wifiBw)
\r
3376 halbtc8821aCsr2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 3);
\r
3378 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3379 (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3381 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);
\r
3385 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);
\r
3389 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3390 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3392 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);
\r
3393 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3397 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);
\r
3398 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3403 halbtc8821aCsr2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
3405 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3406 (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3408 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);
\r
3412 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);
\r
3416 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3417 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3419 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);
\r
3420 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3424 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);
\r
3425 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3430 // HID+A2DP+PAN(EDR)
\r
3432 halbtc8821aCsr2ant_ActionHidA2dpPanEdr(
\r
3433 IN PBTC_COEXIST pBtCoexist
\r
3436 u1Byte wifiRssiState, btRssiState, btInfoExt;
\r
3439 btInfoExt = pCoexSta->btInfoExt;
\r
3440 wifiRssiState = halbtc8821aCsr2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
\r
3441 btRssiState = halbtc8821aCsr2ant_BtRssiState(2, 35, 0);
\r
3443 halbtc8821aCsr2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
\r
3445 if(halbtc8821aCsr2ant_NeedToDecBtPwr(pBtCoexist))
\r
3446 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);
\r
3448 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);
\r
3450 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
\r
3452 if (BTC_WIFI_BW_LEGACY == wifiBw) //for HID at 11b/g mode
\r
3454 halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5a5a5a5a, 0xffff, 0x3);
\r
3456 else //for HID quality & wifi performance balance at 11n mode
\r
3458 halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5a5a5a5a, 0xffff, 0x3);
\r
3461 if(BTC_WIFI_BW_HT40 == wifiBw)
\r
3464 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3465 (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3467 if(btInfoExt&BIT0) //a2dp basic rate
\r
3469 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 3);
\r
3471 else //a2dp edr rate
\r
3473 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 3);
\r
3478 if(btInfoExt&BIT0) //a2dp basic rate
\r
3480 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 3);
\r
3482 else //a2dp edr rate
\r
3484 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 3);
\r
3489 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3490 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3492 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);
\r
3493 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3497 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);
\r
3498 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3504 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3505 (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3507 if(btInfoExt&BIT0) //a2dp basic rate
\r
3509 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, TRUE, FALSE, 3);
\r
3511 else //a2dp edr rate
\r
3513 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, TRUE, FALSE, 3);
\r
3518 if(btInfoExt&BIT0) //a2dp basic rate
\r
3520 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 3);
\r
3522 else //a2dp edr rate
\r
3524 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 3);
\r
3529 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3530 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3532 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);
\r
3533 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3537 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);
\r
3538 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3544 halbtc8821aCsr2ant_ActionHidA2dp(
\r
3545 IN PBTC_COEXIST pBtCoexist
\r
3548 u1Byte wifiRssiState, btRssiState, btInfoExt;
\r
3551 btInfoExt = pCoexSta->btInfoExt;
\r
3552 wifiRssiState = halbtc8821aCsr2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
\r
3553 btRssiState = halbtc8821aCsr2ant_BtRssiState(2, 35, 0);
\r
3555 if(halbtc8821aCsr2ant_NeedToDecBtPwr(pBtCoexist))
\r
3556 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);
\r
3558 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);
\r
3560 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
\r
3562 if (BTC_WIFI_BW_LEGACY == wifiBw) //for HID at 11b/g mode
\r
3564 //Allen halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5a5a5a5a, 0xffff, 0x3);
\r
3565 halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5f5b5f5b, 0xffffff, 0x3);
\r
3567 else //for HID quality & wifi performance balance at 11n mode
\r
3569 //Allen halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5a5a5a5a, 0xffff, 0x3);
\r
3570 halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5f5b5f5b, 0xffffff, 0x3);
\r
3574 if(BTC_WIFI_BW_HT40 == wifiBw)
\r
3577 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3578 (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3580 if(btInfoExt&BIT0) //a2dp basic rate
\r
3582 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);
\r
3584 else //a2dp edr rate
\r
3586 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);
\r
3591 if(btInfoExt&BIT0) //a2dp basic rate
\r
3593 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);
\r
3595 else //a2dp edr rate
\r
3597 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);
\r
3602 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3603 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3605 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);
\r
3606 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3610 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);
\r
3611 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3617 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3618 (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3620 if(btInfoExt&BIT0) //a2dp basic rate
\r
3622 // halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, TRUE, FALSE, 2);
\r
3623 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);
\r
3626 else //a2dp edr rate
\r
3628 //Allen halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, TRUE, FALSE, 2);
\r
3629 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);
\r
3634 if(btInfoExt&BIT0) //a2dp basic rate
\r
3636 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);
\r
3638 else //a2dp edr rate
\r
3640 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);
\r
3645 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
\r
3646 (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )
\r
3648 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);
\r
3649 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);
\r
3653 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);
\r
3654 halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);
\r
3660 halbtc8821aCsr2ant_RunCoexistMechanism(
\r
3661 IN PBTC_COEXIST pBtCoexist
\r
3664 PBTC_STACK_INFO pStackInfo=&pBtCoexist->stackInfo;
\r
3665 BOOLEAN bWifiUnder5G=FALSE;
\r
3666 u1Byte btInfoOriginal=0, btRetryCnt=0;
\r
3667 u1Byte algorithm=0;
\r
3669 if(pBtCoexist->bManualControl)
\r
3671 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Manual control!!!\n"));
\r
3675 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_UNDER_5G, &bWifiUnder5G);
\r
3679 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], RunCoexistMechanism(), run 5G coex setting!!<===\n"));
\r
3680 halbtc8821aCsr2ant_CoexUnder5G(pBtCoexist);
\r
3684 //if(pStackInfo->bProfileNotified)
\r
3686 algorithm = halbtc8821aCsr2ant_ActionAlgorithm(pBtCoexist);
\r
3687 if(pCoexSta->bC2hBtInquiryPage && (BT_8821A_CSR_2ANT_COEX_ALGO_PANHS!=algorithm))
\r
3689 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT is under inquiry/page scan !!\n"));
\r
3690 halbtc8821aCsr2ant_BtInquiryPage(pBtCoexist);
\r
3694 pCoexDm->curAlgorithm = algorithm;
\r
3695 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Algorithm = %d \n", pCoexDm->curAlgorithm));
\r
3697 if(halbtc8821aCsr2ant_IsCommonAction(pBtCoexist))
\r
3699 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant common.\n"));
\r
3700 pCoexDm->bResetTdmaAdjust = TRUE;
\r
3704 if(pCoexDm->curAlgorithm != pCoexDm->preAlgorithm)
\r
3706 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], preAlgorithm=%d, curAlgorithm=%d\n",
\r
3707 pCoexDm->preAlgorithm, pCoexDm->curAlgorithm));
\r
3708 pCoexDm->bResetTdmaAdjust = TRUE;
\r
3710 switch(pCoexDm->curAlgorithm)
\r
3712 case BT_8821A_CSR_2ANT_COEX_ALGO_SCO:
\r
3713 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = SCO.\n"));
\r
3714 halbtc8821aCsr2ant_ActionSco(pBtCoexist);
\r
3716 case BT_8821A_CSR_2ANT_COEX_ALGO_HID:
\r
3717 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HID.\n"));
\r
3718 halbtc8821aCsr2ant_ActionHid(pBtCoexist);
\r
3720 case BT_8821A_CSR_2ANT_COEX_ALGO_A2DP:
\r
3721 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = A2DP.\n"));
\r
3722 halbtc8821aCsr2ant_ActionA2dp(pBtCoexist);
\r
3724 case BT_8821A_CSR_2ANT_COEX_ALGO_A2DP_PANHS:
\r
3725 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = A2DP+PAN(HS).\n"));
\r
3726 halbtc8821aCsr2ant_ActionA2dpPanHs(pBtCoexist);
\r
3728 case BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR:
\r
3729 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = PAN(EDR).\n"));
\r
3730 halbtc8821aCsr2ant_ActionPanEdr(pBtCoexist);
\r
3732 case BT_8821A_CSR_2ANT_COEX_ALGO_PANHS:
\r
3733 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HS mode.\n"));
\r
3734 halbtc8821aCsr2ant_ActionPanHs(pBtCoexist);
\r
3736 case BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR_A2DP:
\r
3737 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = PAN+A2DP.\n"));
\r
3738 halbtc8821aCsr2ant_ActionPanEdrA2dp(pBtCoexist);
\r
3740 case BT_8821A_CSR_2ANT_COEX_ALGO_PANEDR_HID:
\r
3741 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = PAN(EDR)+HID.\n"));
\r
3742 halbtc8821aCsr2ant_ActionPanEdrHid(pBtCoexist);
\r
3744 case BT_8821A_CSR_2ANT_COEX_ALGO_HID_A2DP_PANEDR:
\r
3745 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HID+A2DP+PAN.\n"));
\r
3746 halbtc8821aCsr2ant_ActionHidA2dpPanEdr(pBtCoexist);
\r
3748 case BT_8821A_CSR_2ANT_COEX_ALGO_HID_A2DP:
\r
3749 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HID+A2DP.\n"));
\r
3750 halbtc8821aCsr2ant_ActionHidA2dp(pBtCoexist);
\r
3753 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = coexist All Off!!\n"));
\r
3754 halbtc8821aCsr2ant_CoexAllOff(pBtCoexist);
\r
3757 pCoexDm->preAlgorithm = pCoexDm->curAlgorithm;
\r
3764 //============================================================
\r
3765 // work around function start with wa_halbtc8821aCsr2ant_
\r
3766 //============================================================
\r
3767 //============================================================
\r
3768 // extern function start with EXhalbtc8821aCsr2ant_
\r
3769 //============================================================
\r
3771 EXhalbtc8821aCsr2ant_PowerOnSetting(
\r
3772 IN PBTC_COEXIST pBtCoexist
\r
3778 EXhalbtc8821aCsr2ant_InitHwConfig(
\r
3779 IN PBTC_COEXIST pBtCoexist,
\r
3780 IN BOOLEAN bWifiOnly
\r
3783 PBTC_BOARD_INFO pBoardInfo=&pBtCoexist->boardInfo;
\r
3787 u1Byte H2C_Parameter[2] ={0};
\r
3790 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], 2Ant Init HW Config!!\n"));
\r
3797 // backup rf 0x1e value
\r
3798 pCoexDm->btRf0x1eBackup = pBtCoexist->fBtcGetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff);
\r
3799 pCoexDm->backupArfrCnt1 = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x430);
\r
3800 pCoexDm->backupArfrCnt2 = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x434);
\r
3801 pCoexDm->backupRetryLimit = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0x42a);
\r
3802 pCoexDm->backupAmpduMaxTime = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x456);
\r
3803 pCoexDm->backupAmpduMaxNum = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0x4ca);
\r
3806 #if 0 /* REMOVE */
\r
3808 u1Tmp = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x790);
\r
3811 pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x790, u1Tmp);
\r
3815 halbtc8821aCsr2ant_SetAntPath(pBtCoexist, BTC_ANT_WIFI_AT_MAIN, TRUE, FALSE);
\r
3818 halbtc8821aCsr2ant_CoexTable(pBtCoexist, FORCE_EXEC, 0x55555555, 0x55555555, 0xffff, 0x3);
\r
3820 // Enable counter statistics
\r
3821 pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x76e, 0xc); //0x76e[3] =1, WLAN_Act control by PTA
\r
3822 pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x778, 0x3);
\r
3824 #if 0 /* REMOVE */
\r
3825 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x40, 0x20, 0x1);
\r
3830 EXhalbtc8821aCsr2ant_InitCoexDm(
\r
3831 IN PBTC_COEXIST pBtCoexist
\r
3834 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], Coex Mechanism Init!!\n"));
\r
3836 halbtc8821aCsr2ant_InitCoexDm(pBtCoexist);
\r
3840 EXhalbtc8821aCsr2ant_DisplayCoexInfo(
\r
3841 IN PBTC_COEXIST pBtCoexist
\r
3844 PBTC_BOARD_INFO pBoardInfo=&pBtCoexist->boardInfo;
\r
3845 PBTC_STACK_INFO pStackInfo=&pBtCoexist->stackInfo;
\r
3846 pu1Byte cliBuf=pBtCoexist->cliBuf;
\r
3847 u1Byte u1Tmp[4], i, btInfoExt, psTdmaCase=0;
\r
3849 u4Byte fwVer=0, btPatchVer=0;
\r
3851 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n ============[BT Coexist info]============");
\r
3852 CL_PRINTF(cliBuf);
\r
3854 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d ", "Ant PG number/ Ant mechanism:", \
\r
3855 pBoardInfo->pgAntNum, pBoardInfo->btdmAntNum);
\r
3856 CL_PRINTF(cliBuf);
\r
3858 if(pBtCoexist->bManualControl)
\r
3860 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "[Action Manual control]!!");
\r
3861 CL_PRINTF(cliBuf);
\r
3864 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s / %d", "BT stack/ hci ext ver", \
\r
3865 ((pStackInfo->bProfileNotified)? "Yes":"No"), pStackInfo->hciVersion);
\r
3866 CL_PRINTF(cliBuf);
\r
3868 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_BT_PATCH_VER, &btPatchVer);
\r
3869 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);
\r
3870 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d_%d/ 0x%x/ 0x%x(%d)", "CoexVer/ FwVer/ PatchVer", \
\r
3871 GLCoexVerDate8821aCsr2Ant, GLCoexVer8821aCsr2Ant, fwVer, btPatchVer, btPatchVer);
\r
3872 CL_PRINTF(cliBuf);
\r
3874 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %02x %02x %02x ", "Wifi channel informed to BT", \
\r
3875 pCoexDm->wifiChnlInfo[0], pCoexDm->wifiChnlInfo[1],
\r
3876 pCoexDm->wifiChnlInfo[2]);
\r
3877 CL_PRINTF(cliBuf);
\r
3880 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Wifi Status]============");
\r
3881 CL_PRINTF(cliBuf);
\r
3882 pBtCoexist->fBtcDispDbgMsg(pBtCoexist, BTC_DBG_DISP_WIFI_STATUS);
\r
3884 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[BT Status]============");
\r
3885 CL_PRINTF(cliBuf);
\r
3887 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = [%s/ %d/ %d] ", "BT [status/ rssi/ retryCnt]", \
\r
3888 ((pCoexSta->bC2hBtInquiryPage)?("inquiry/page scan"):((BT_8821A_CSR_2ANT_BT_STATUS_IDLE == pCoexDm->btStatus)? "idle":( (BT_8821A_CSR_2ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus)? "connected-idle":"busy"))),
\r
3889 pCoexSta->btRssi, pCoexSta->btRetryCnt);
\r
3890 CL_PRINTF(cliBuf);
\r
3892 if(pStackInfo->bProfileNotified)
\r
3894 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d / %d / %d", "SCO/HID/PAN/A2DP", \
\r
3895 pStackInfo->bScoExist, pStackInfo->bHidExist, pStackInfo->bPanExist, pStackInfo->bA2dpExist);
\r
3896 CL_PRINTF(cliBuf);
\r
3898 pBtCoexist->fBtcDispDbgMsg(pBtCoexist, BTC_DBG_DISP_BT_LINK_INFO);
\r
3901 btInfoExt = pCoexSta->btInfoExt;
\r
3902 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s", "BT Info A2DP rate", \
\r
3903 (btInfoExt&BIT0)? "Basic rate":"EDR rate");
\r
3904 CL_PRINTF(cliBuf);
\r
3906 for(i=0; i<BT_INFO_SRC_8821A_CSR_2ANT_MAX; i++)
\r
3908 if(pCoexSta->btInfoC2hCnt[i])
\r
3910 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %02x %02x %02x %02x %02x %02x %02x(%d)", GLBtInfoSrc8821aCsr2Ant[i], \
\r
3911 pCoexSta->btInfoC2h[i][0], pCoexSta->btInfoC2h[i][1],
\r
3912 pCoexSta->btInfoC2h[i][2], pCoexSta->btInfoC2h[i][3],
\r
3913 pCoexSta->btInfoC2h[i][4], pCoexSta->btInfoC2h[i][5],
\r
3914 pCoexSta->btInfoC2h[i][6], pCoexSta->btInfoC2hCnt[i]);
\r
3915 CL_PRINTF(cliBuf);
\r
3920 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Sw mechanism]============");
\r
3921 CL_PRINTF(cliBuf);
\r
3922 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d/ %d ", "SM1[ShRf/ LpRA/ LimDig]", \
\r
3923 pCoexDm->bCurRfRxLpfShrink, pCoexDm->bCurLowPenaltyRa, pCoexDm->bLimitedDig);
\r
3924 CL_PRINTF(cliBuf);
\r
3925 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d/ %d(0x%x) ", "SM2[AgcT/ AdcB/ SwDacSwing(lvl)]", \
\r
3926 pCoexDm->bCurAgcTableEn, pCoexDm->bCurAdcBackOff, pCoexDm->bCurDacSwingOn, pCoexDm->curDacSwingLvl);
\r
3927 CL_PRINTF(cliBuf);
\r
3930 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Fw mechanism]============");
\r
3931 CL_PRINTF(cliBuf);
\r
3933 if(!pBtCoexist->bManualControl)
\r
3935 psTdmaCase = pCoexDm->curPsTdma;
\r
3936 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %02x %02x %02x %02x %02x case-%d", "PS TDMA", \
\r
3937 pCoexDm->psTdmaPara[0], pCoexDm->psTdmaPara[1],
\r
3938 pCoexDm->psTdmaPara[2], pCoexDm->psTdmaPara[3],
\r
3939 pCoexDm->psTdmaPara[4], psTdmaCase);
\r
3940 CL_PRINTF(cliBuf);
\r
3942 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d ", "DecBtPwr/ IgnWlanAct", \
\r
3943 pCoexDm->bCurDecBtPwr, pCoexDm->bCurIgnoreWlanAct);
\r
3944 CL_PRINTF(cliBuf);
\r
3948 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Hw setting]============");
\r
3949 CL_PRINTF(cliBuf);
\r
3951 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "RF-A, 0x1e initVal", \
\r
3952 pCoexDm->btRf0x1eBackup);
\r
3953 CL_PRINTF(cliBuf);
\r
3955 u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x778);
\r
3956 u1Tmp[1] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x6cc);
\r
3957 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x ", "0x778 (W_Act)/ 0x6cc (CoTab Sel)", \
\r
3958 u1Tmp[0], u1Tmp[1]);
\r
3959 CL_PRINTF(cliBuf);
\r
3961 u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x8db);
\r
3962 u1Tmp[1] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0xc5b);
\r
3963 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x", "0x8db(ADC)/0xc5b[29:25](DAC)", \
\r
3964 ((u1Tmp[0]&0x60)>>5), ((u1Tmp[1]&0x3e)>>1));
\r
3965 CL_PRINTF(cliBuf);
\r
3967 u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0xcb4);
\r
3968 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x", "0xcb4[7:0](ctrl)/ 0xcb4[29:28](val)", \
\r
3969 u4Tmp[0]&0xff, ((u4Tmp[0]&0x30000000)>>28));
\r
3970 CL_PRINTF(cliBuf);
\r
3972 u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x40);
\r
3973 u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x4c);
\r
3974 u4Tmp[1] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x974);
\r
3975 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x/ 0x%x", "0x40/ 0x4c[24:23]/ 0x974", \
\r
3976 u1Tmp[0], ((u4Tmp[0]&0x01800000)>>23), u4Tmp[1]);
\r
3977 CL_PRINTF(cliBuf);
\r
3979 u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x550);
\r
3980 u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x522);
\r
3981 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x", "0x550(bcn ctrl)/0x522", \
\r
3982 u4Tmp[0], u1Tmp[0]);
\r
3983 CL_PRINTF(cliBuf);
\r
3985 u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0xc50);
\r
3986 u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0xa0a);
\r
3987 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x", "0xc50(DIG)/0xa0a(CCK-TH)", \
\r
3988 u4Tmp[0], u1Tmp[0]);
\r
3989 CL_PRINTF(cliBuf);
\r
3991 u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0xf48);
\r
3992 u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0xa5b);
\r
3993 u1Tmp[1] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0xa5c);
\r
3994 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x", "OFDM-FA/ CCK-FA", \
\r
3995 u4Tmp[0], (u1Tmp[0]<<8) + u1Tmp[1] );
\r
3996 CL_PRINTF(cliBuf);
\r
3998 u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x6c0);
\r
3999 u4Tmp[1] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x6c4);
\r
4000 u4Tmp[2] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x6c8);
\r
4001 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x/ 0x%x", "0x6c0/0x6c4/0x6c8", \
\r
4002 u4Tmp[0], u4Tmp[1], u4Tmp[2]);
\r
4003 CL_PRINTF(cliBuf);
\r
4005 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d", "0x770 (hi-pri Rx/Tx)", \
\r
4006 pCoexSta->highPriorityRx, pCoexSta->highPriorityTx);
\r
4007 CL_PRINTF(cliBuf);
\r
4008 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d", "0x774(low-pri Rx/Tx)", \
\r
4009 pCoexSta->lowPriorityRx, pCoexSta->lowPriorityTx);
\r
4010 CL_PRINTF(cliBuf);
\r
4012 pBtCoexist->fBtcDispDbgMsg(pBtCoexist, BTC_DBG_DISP_COEX_STATISTICS);
\r
4017 EXhalbtc8821aCsr2ant_IpsNotify(
\r
4018 IN PBTC_COEXIST pBtCoexist,
\r
4022 if(BTC_IPS_ENTER == type)
\r
4024 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], IPS ENTER notify\n"));
\r
4025 pCoexSta->bUnderIps = TRUE;
\r
4026 halbtc8821aCsr2ant_CoexAllOff(pBtCoexist);
\r
4028 else if(BTC_IPS_LEAVE == type)
\r
4030 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], IPS LEAVE notify\n"));
\r
4031 pCoexSta->bUnderIps = FALSE;
\r
4032 //halbtc8821aCsr2ant_InitCoexDm(pBtCoexist);
\r
4037 EXhalbtc8821aCsr2ant_LpsNotify(
\r
4038 IN PBTC_COEXIST pBtCoexist,
\r
4042 if(BTC_LPS_ENABLE == type)
\r
4044 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], LPS ENABLE notify\n"));
\r
4045 pCoexSta->bUnderLps = TRUE;
\r
4047 else if(BTC_LPS_DISABLE == type)
\r
4049 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], LPS DISABLE notify\n"));
\r
4050 pCoexSta->bUnderLps = FALSE;
\r
4055 EXhalbtc8821aCsr2ant_ScanNotify(
\r
4056 IN PBTC_COEXIST pBtCoexist,
\r
4060 if(BTC_SCAN_START == type)
\r
4062 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN START notify\n"));
\r
4064 else if(BTC_SCAN_FINISH == type)
\r
4066 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN FINISH notify\n"));
\r
4071 EXhalbtc8821aCsr2ant_ConnectNotify(
\r
4072 IN PBTC_COEXIST pBtCoexist,
\r
4076 if(BTC_ASSOCIATE_START == type)
\r
4078 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT START notify\n"));
\r
4080 else if(BTC_ASSOCIATE_FINISH == type)
\r
4082 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT FINISH notify\n"));
\r
4087 EXhalbtc8821aCsr2ant_MediaStatusNotify(
\r
4088 IN PBTC_COEXIST pBtCoexist,
\r
4092 u1Byte H2C_Parameter[3] ={0};
\r
4094 u1Byte wifiCentralChnl;
\r
4096 if(BTC_MEDIA_CONNECT == type)
\r
4098 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], MEDIA connect notify\n"));
\r
4102 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], MEDIA disconnect notify\n"));
\r
4105 // only 2.4G we need to inform bt the chnl mask
\r
4106 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_WIFI_CENTRAL_CHNL, &wifiCentralChnl);
\r
4107 if( (BTC_MEDIA_CONNECT == type) &&
\r
4108 (wifiCentralChnl <= 14) )
\r
4110 H2C_Parameter[0] = 0x1;
\r
4111 H2C_Parameter[1] = wifiCentralChnl;
\r
4112 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
\r
4113 if(BTC_WIFI_BW_HT40 == wifiBw)
\r
4114 H2C_Parameter[2] = 0x30;
\r
4116 H2C_Parameter[2] = 0x20;
\r
4119 #if 0 /* REMOVE */
\r
4120 pCoexDm->wifiChnlInfo[0] = H2C_Parameter[0];
\r
4121 pCoexDm->wifiChnlInfo[1] = H2C_Parameter[1];
\r
4122 pCoexDm->wifiChnlInfo[2] = H2C_Parameter[2];
\r
4124 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], FW write 0x66=0x%x\n",
\r
4125 H2C_Parameter[0]<<16|H2C_Parameter[1]<<8|H2C_Parameter[2]));
\r
4127 rtw_warn_on(_BTCOEX_CSR);
\r
4128 pBtCoexist->fBtcFillH2c(pBtCoexist, 0x66, 3, H2C_Parameter);
\r
4133 EXhalbtc8821aCsr2ant_SpecialPacketNotify(
\r
4134 IN PBTC_COEXIST pBtCoexist,
\r
4138 if(type == BTC_PACKET_DHCP)
\r
4140 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], DHCP Packet notify\n"));
\r
4145 EXhalbtc8821aCsr2ant_BtInfoNotify(
\r
4146 IN PBTC_COEXIST pBtCoexist,
\r
4147 IN pu1Byte tmpBuf,
\r
4152 u1Byte i, rspSource=0;
\r
4153 BOOLEAN bBtBusy=FALSE, bLimitedDig=FALSE;
\r
4154 BOOLEAN bWifiConnected=FALSE, bBtHsOn=FALSE, bWifiUnder5G=FALSE;
\r
4156 pCoexSta->bC2hBtInfoReqSent = FALSE;
\r
4157 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_UNDER_5G, &bWifiUnder5G);
\r
4159 rspSource = tmpBuf[0]&0xf;
\r
4160 if(rspSource >= BT_INFO_SRC_8821A_CSR_2ANT_MAX)
\r
4161 rspSource = BT_INFO_SRC_8821A_CSR_2ANT_WIFI_FW;
\r
4162 pCoexSta->btInfoC2hCnt[rspSource]++;
\r
4164 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Bt info[%d], length=%d, hex data=[", rspSource, length));
\r
4165 for(i=0; i<length; i++)
\r
4167 pCoexSta->btInfoC2h[rspSource][i] = tmpBuf[i];
\r
4169 btInfo = tmpBuf[i];
\r
4172 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("0x%02x]\n", tmpBuf[i]));
\r
4176 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("0x%02x, ", tmpBuf[i]));
\r
4180 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);
\r
4181 if(BT_INFO_SRC_8821A_CSR_2ANT_WIFI_FW != rspSource)
\r
4183 pCoexSta->btRetryCnt = // [3:0]
\r
4184 pCoexSta->btInfoC2h[rspSource][2]&0xf;
\r
4186 pCoexSta->btRssi =
\r
4187 pCoexSta->btInfoC2h[rspSource][3]*2+10;
\r
4189 pCoexSta->btInfoExt =
\r
4190 pCoexSta->btInfoC2h[rspSource][4];
\r
4192 #if 0 /* REMOVE */
\r
4193 // Here we need to resend some wifi info to BT
\r
4194 // because bt is reset and loss of the info.
\r
4195 if( (pCoexSta->btInfoExt & BIT1) )
\r
4198 if(bWifiConnected)
\r
4200 EXhalbtc8821aCsr2ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_CONNECT);
\r
4204 EXhalbtc8821aCsr2ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_DISCONNECT);
\r
4209 #if 0 /* REMOVE */
\r
4210 if(!pBtCoexist->bManualControl && !bWifiUnder5G)
\r
4212 if( (pCoexSta->btInfoExt&BIT3) )
\r
4214 if(bWifiConnected)
\r
4216 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT ext info bit3 check, set BT NOT to ignore Wlan active!!\n"));
\r
4217 halbtc8821aCsr2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, FALSE);
\r
4222 // BT already NOT ignore Wlan active, do nothing here.
\r
4223 if(!bWifiConnected)
\r
4225 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT ext info bit3 check, set BT to ignore Wlan active!!\n"));
\r
4226 halbtc8821aCsr2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);
\r
4232 #if 0 /* REMOVE */
\r
4233 if( (pCoexSta->btInfoExt & BIT4) )
\r
4235 // BT auto report already enabled, do nothing
\r
4239 halbtc8821aCsr2ant_BtAutoReport(pBtCoexist, FORCE_EXEC, TRUE);
\r
4244 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);
\r
4246 if(btInfo == BT_INFO_8821A_CSR_2ANT_B_CONNECTION) // connection exists but no busy
\r
4248 pCoexSta->bBtLinkExist = TRUE;
\r
4249 pCoexDm->btStatus = BT_8821A_CSR_2ANT_BT_STATUS_CONNECTED_IDLE;
\r
4251 else if(btInfo & BT_INFO_8821A_CSR_2ANT_B_CONNECTION) // connection exists and some link is busy
\r
4253 pCoexSta->bBtLinkExist = TRUE;
\r
4255 if(btInfo & BT_INFO_8821A_CSR_2ANT_B_FTP)
\r
4256 pCoexSta->bPanExist = TRUE;
\r
4258 pCoexSta->bPanExist = FALSE;
\r
4260 if(btInfo & BT_INFO_8821A_CSR_2ANT_B_A2DP)
\r
4261 pCoexSta->bA2dpExist = TRUE;
\r
4263 pCoexSta->bA2dpExist = FALSE;
\r
4265 if(btInfo & BT_INFO_8821A_CSR_2ANT_B_HID)
\r
4266 pCoexSta->bHidExist = TRUE;
\r
4268 pCoexSta->bHidExist = FALSE;
\r
4270 if(btInfo & BT_INFO_8821A_CSR_2ANT_B_SCO_ESCO)
\r
4271 pCoexSta->bScoExist = TRUE;
\r
4273 pCoexSta->bScoExist = FALSE;
\r
4275 if (pCoexSta->btInfoExt & 0x80)
\r
4276 pCoexSta->bSlave = TRUE; //Slave
\r
4278 pCoexSta->bSlave = FALSE; //Master
\r
4280 pCoexDm->btStatus = BT_8821A_CSR_2ANT_BT_STATUS_NON_IDLE;
\r
4284 pCoexSta->bBtLinkExist = FALSE;
\r
4285 pCoexSta->bPanExist = FALSE;
\r
4286 pCoexSta->bA2dpExist = FALSE;
\r
4287 pCoexSta->bSlave = FALSE;
\r
4288 pCoexSta->bHidExist = FALSE;
\r
4289 pCoexSta->bScoExist = FALSE;
\r
4290 pCoexDm->btStatus = BT_8821A_CSR_2ANT_BT_STATUS_IDLE;
\r
4295 pCoexDm->btStatus = BT_8821A_CSR_2ANT_BT_STATUS_NON_IDLE;
\r
4298 if(btInfo & BT_INFO_8821A_CSR_2ANT_B_INQ_PAGE)
\r
4300 pCoexSta->bC2hBtInquiryPage = TRUE;
\r
4301 pCoexDm->btStatus = BT_8821A_CSR_2ANT_BT_STATUS_NON_IDLE;
\r
4305 pCoexSta->bC2hBtInquiryPage = FALSE;
\r
4309 if(BT_8821A_CSR_2ANT_BT_STATUS_NON_IDLE == pCoexDm->btStatus)
\r
4317 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_TRAFFIC_BUSY, &bBtBusy);
\r
4319 if(BT_8821A_CSR_2ANT_BT_STATUS_IDLE != pCoexDm->btStatus)
\r
4321 bLimitedDig = TRUE;
\r
4325 bLimitedDig = FALSE;
\r
4327 pCoexDm->bLimitedDig = bLimitedDig;
\r
4328 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_LIMITED_DIG, &bLimitedDig);
\r
4330 halbtc8821aCsr2ant_RunCoexistMechanism(pBtCoexist);
\r
4334 EXhalbtc8821aCsr2ant_HaltNotify(
\r
4335 IN PBTC_COEXIST pBtCoexist
\r
4338 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Halt notify\n"));
\r
4340 halbtc8821aCsr2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);
\r
4341 EXhalbtc8821aCsr2ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_DISCONNECT);
\r
4345 EXhalbtc8821aCsr2ant_PnpNotify(
\r
4346 IN PBTC_COEXIST pBtCoexist,
\r
4347 IN u1Byte pnpState
\r
4350 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Pnp notify\n"));
\r
4352 if(BTC_WIFI_PNP_SLEEP == pnpState)
\r
4354 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Pnp notify to SLEEP\n"));
\r
4355 halbtc8821aCsr2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);
\r
4357 else if(BTC_WIFI_PNP_WAKE_UP == pnpState)
\r
4359 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Pnp notify to WAKE UP\n"));
\r
4364 EXhalbtc8821aCsr2ant_Periodical(
\r
4365 IN PBTC_COEXIST pBtCoexist
\r
4368 static u1Byte disVerInfoCnt=0;
\r
4369 u4Byte fwVer=0, btPatchVer=0;
\r
4370 PBTC_BOARD_INFO pBoardInfo=&pBtCoexist->boardInfo;
\r
4371 PBTC_STACK_INFO pStackInfo=&pBtCoexist->stackInfo;
\r
4373 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], ==========================Periodical===========================\n"));
\r
4375 if(disVerInfoCnt <= 5)
\r
4377 disVerInfoCnt += 1;
\r
4378 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], ****************************************************************\n"));
\r
4379 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], Ant PG Num/ Ant Mech/ Ant Pos = %d/ %d/ %d\n", \
\r
4380 pBoardInfo->pgAntNum, pBoardInfo->btdmAntNum, pBoardInfo->btdmAntPos));
\r
4381 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], BT stack/ hci ext ver = %s / %d\n", \
\r
4382 ((pStackInfo->bProfileNotified)? "Yes":"No"), pStackInfo->hciVersion));
\r
4383 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_BT_PATCH_VER, &btPatchVer);
\r
4384 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);
\r
4385 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], CoexVer/ FwVer/ PatchVer = %d_%x/ 0x%x/ 0x%x(%d)\n", \
\r
4386 GLCoexVerDate8821aCsr2Ant, GLCoexVer8821aCsr2Ant, fwVer, btPatchVer, btPatchVer));
\r
4387 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], ****************************************************************\n"));
\r
4390 //halbtc8821aCsr2ant_QueryBtInfo(pBtCoexist);
\r
4391 //halbtc8821aCsr2ant_RunCoexistMechanism(pBtCoexist);
\r
4392 halbtc8821aCsr2ant_MonitorBtCtr(pBtCoexist);
\r
4393 halbtc8821aCsr2ant_MonitorBtEnableDisable(pBtCoexist);
\r