dt-bindings: Document the Rockchip RGA bindings
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8723bs / hal / OUTSRC-BTCoexist / HalBtc8821aCsr2Ant.c
1 //============================================================\r
2 // Description:\r
3 //\r
4 // This file is for RTL8821A_CSR Co-exist mechanism\r
5 //\r
6 // History\r
7 // 2012/08/22 Cosa first check in.\r
8 // 2012/11/14 Cosa Revise for 8821A_CSR 2Ant out sourcing.\r
9 //\r
10 //============================================================\r
11 \r
12 //============================================================\r
13 // include files\r
14 //============================================================\r
15 #include "Mp_Precomp.h"\r
16 \r
17 #define _BTCOEX_CSR 1\r
18 \r
19 #ifndef rtw_warn_on\r
20         #define rtw_warn_on(condition) do {} while (0)\r
21 #endif\r
22 \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
31 \r
32 const char *const GLBtInfoSrc8821aCsr2Ant[]={\r
33         "BT Info[wifi fw]",\r
34         "BT Info[bt rsp]",\r
35         "BT Info[bt auto report]",\r
36 };\r
37 \r
38 u4Byte  GLCoexVerDate8821aCsr2Ant=20130618;\r
39 u4Byte  GLCoexVer8821aCsr2Ant=0x5050;\r
40 \r
41 //============================================================\r
42 // local function proto type if needed\r
43 //============================================================\r
44 //============================================================\r
45 // local function start with halbtc8821aCsr2ant_\r
46 //============================================================\r
47 u1Byte\r
48 halbtc8821aCsr2ant_BtRssiState(\r
49         u1Byte                  levelNum,\r
50         u1Byte                  rssiThresh,\r
51         u1Byte                  rssiThresh1\r
52         )\r
53 {\r
54         s4Byte                  btRssi=0;\r
55         u1Byte                  btRssiState=pCoexSta->preBtRssiState;\r
56 \r
57         btRssi = pCoexSta->btRssi;\r
58 \r
59         if(levelNum == 2)\r
60         {                       \r
61                 if( (pCoexSta->preBtRssiState == BTC_RSSI_STATE_LOW) ||\r
62                         (pCoexSta->preBtRssiState == BTC_RSSI_STATE_STAY_LOW))\r
63                 {\r
64                         if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8821A_CSR_2ANT))\r
65                         {\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
68                         }\r
69                         else\r
70                         {\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
73                         }\r
74                 }\r
75                 else\r
76                 {\r
77                         if(btRssi < rssiThresh)\r
78                         {\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
81                         }\r
82                         else\r
83                         {\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
86                         }\r
87                 }\r
88         }\r
89         else if(levelNum == 3)\r
90         {\r
91                 if(rssiThresh > rssiThresh1)\r
92                 {\r
93                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi thresh error!!\n"));\r
94                         return pCoexSta->preBtRssiState;\r
95                 }\r
96                 \r
97                 if( (pCoexSta->preBtRssiState == BTC_RSSI_STATE_LOW) ||\r
98                         (pCoexSta->preBtRssiState == BTC_RSSI_STATE_STAY_LOW))\r
99                 {\r
100                         if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8821A_CSR_2ANT))\r
101                         {\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
104                         }\r
105                         else\r
106                         {\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
109                         }\r
110                 }\r
111                 else if( (pCoexSta->preBtRssiState == BTC_RSSI_STATE_MEDIUM) ||\r
112                         (pCoexSta->preBtRssiState == BTC_RSSI_STATE_STAY_MEDIUM))\r
113                 {\r
114                         if(btRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8821A_CSR_2ANT))\r
115                         {\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
118                         }\r
119                         else if(btRssi < rssiThresh)\r
120                         {\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
123                         }\r
124                         else\r
125                         {\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
128                         }\r
129                 }\r
130                 else\r
131                 {\r
132                         if(btRssi < rssiThresh1)\r
133                         {\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
136                         }\r
137                         else\r
138                         {\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
141                         }\r
142                 }\r
143         }\r
144                 \r
145         pCoexSta->preBtRssiState = btRssiState;\r
146 \r
147         return btRssiState;\r
148 }\r
149 \r
150 u1Byte\r
151 halbtc8821aCsr2ant_WifiRssiState(\r
152         IN      PBTC_COEXIST            pBtCoexist,\r
153         IN      u1Byte                  index,\r
154         IN      u1Byte                  levelNum,\r
155         IN      u1Byte                  rssiThresh,\r
156         IN      u1Byte                  rssiThresh1\r
157         )\r
158 {\r
159         s4Byte                  wifiRssi=0;\r
160         u1Byte                  wifiRssiState=pCoexSta->preWifiRssiState[index];\r
161 \r
162         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_S4_WIFI_RSSI, &wifiRssi);\r
163         \r
164         if(levelNum == 2)\r
165         {\r
166                 if( (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_LOW) ||\r
167                         (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_STAY_LOW))\r
168                 {\r
169                         if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8821A_CSR_2ANT))\r
170                         {\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
173                         }\r
174                         else\r
175                         {\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
178                         }\r
179                 }\r
180                 else\r
181                 {\r
182                         if(wifiRssi < rssiThresh)\r
183                         {\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
186                         }\r
187                         else\r
188                         {\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
191                         }\r
192                 }\r
193         }\r
194         else if(levelNum == 3)\r
195         {\r
196                 if(rssiThresh > rssiThresh1)\r
197                 {\r
198                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI thresh error!!\n"));\r
199                         return pCoexSta->preWifiRssiState[index];\r
200                 }\r
201                 \r
202                 if( (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_LOW) ||\r
203                         (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_STAY_LOW))\r
204                 {\r
205                         if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8821A_CSR_2ANT))\r
206                         {\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
209                         }\r
210                         else\r
211                         {\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
214                         }\r
215                 }\r
216                 else if( (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_MEDIUM) ||\r
217                         (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_STAY_MEDIUM))\r
218                 {\r
219                         if(wifiRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8821A_CSR_2ANT))\r
220                         {\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
223                         }\r
224                         else if(wifiRssi < rssiThresh)\r
225                         {\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
228                         }\r
229                         else\r
230                         {\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
233                         }\r
234                 }\r
235                 else\r
236                 {\r
237                         if(wifiRssi < rssiThresh1)\r
238                         {\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
241                         }\r
242                         else\r
243                         {\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
246                         }\r
247                 }\r
248         }\r
249                 \r
250         pCoexSta->preWifiRssiState[index] = wifiRssiState;\r
251 \r
252         return wifiRssiState;\r
253 }\r
254 \r
255 VOID\r
256 halbtc8821aCsr2ant_MonitorBtEnableDisable(\r
257         IN      PBTC_COEXIST            pBtCoexist\r
258         )\r
259 {\r
260         static BOOLEAN  bPreBtDisabled=FALSE;\r
261         static u4Byte   btDisableCnt=0;\r
262         BOOLEAN                 bBtActive=TRUE, bBtDisabled=FALSE;\r
263 \r
264         // This function check if bt is disabled\r
265 \r
266         if(     pCoexSta->highPriorityTx == 0 &&\r
267                 pCoexSta->highPriorityRx == 0 &&\r
268                 pCoexSta->lowPriorityTx == 0 &&\r
269                 pCoexSta->lowPriorityRx == 0)\r
270         {\r
271                 bBtActive = FALSE;\r
272         }\r
273         if(     pCoexSta->highPriorityTx == 0xffff &&\r
274                 pCoexSta->highPriorityRx == 0xffff &&\r
275                 pCoexSta->lowPriorityTx == 0xffff &&\r
276                 pCoexSta->lowPriorityRx == 0xffff)\r
277         {\r
278                 bBtActive = FALSE;\r
279         }\r
280         if(bBtActive)\r
281         {\r
282                 btDisableCnt = 0;\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
286         }\r
287         else\r
288         {\r
289                 btDisableCnt++;\r
290                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], bt all counters=0, %d times!!\n", \r
291                                 btDisableCnt));\r
292                 if(btDisableCnt >= 2)\r
293                 {\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
297                 }\r
298         }\r
299         if(bPreBtDisabled != bBtDisabled)\r
300         {\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
305                 if(!bBtDisabled)\r
306                 {\r
307                 }\r
308                 else\r
309                 {\r
310                 }\r
311         }\r
312 }\r
313 \r
314 VOID\r
315 halbtc8821aCsr2ant_MonitorBtCtr(\r
316         IN      PBTC_COEXIST            pBtCoexist\r
317         )\r
318 {\r
319         u4Byte                  regHPTxRx, regLPTxRx, u4Tmp;\r
320         u4Byte                  regHPTx=0, regHPRx=0, regLPTx=0, regLPRx=0;\r
321         u1Byte                  u1Tmp;\r
322         \r
323         regHPTxRx = 0x770;\r
324         regLPTxRx = 0x774;\r
325 \r
326         u4Tmp = pBtCoexist->fBtcRead4Byte(pBtCoexist, regHPTxRx);\r
327         regHPTx = u4Tmp & bMaskLWord;\r
328         regHPRx = (u4Tmp & bMaskHWord)>>16;\r
329 \r
330         u4Tmp = pBtCoexist->fBtcRead4Byte(pBtCoexist, regLPTxRx);\r
331         regLPTx = u4Tmp & bMaskLWord;\r
332         regLPRx = (u4Tmp & bMaskHWord)>>16;\r
333                 \r
334         pCoexSta->highPriorityTx = regHPTx;\r
335         pCoexSta->highPriorityRx = regHPRx;\r
336         pCoexSta->lowPriorityTx = regLPTx;\r
337         pCoexSta->lowPriorityRx = regLPRx;\r
338 \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
343 \r
344         // reset counter\r
345         pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x76e, 0x5d);\r
346 }\r
347 \r
348 VOID\r
349 halbtc8821aCsr2ant_UpdateRaMask(\r
350         IN      PBTC_COEXIST            pBtCoexist,\r
351         IN      BOOLEAN                         bForceExec,\r
352         IN      u4Byte                          disRateMask\r
353         )\r
354 {\r
355         pCoexDm->curRaMask = disRateMask;\r
356         \r
357         if( bForceExec || (pCoexDm->preRaMask != pCoexDm->curRaMask))\r
358         {\r
359                 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_UPDATE_RAMASK, &pCoexDm->curRaMask);\r
360         }\r
361         pCoexDm->preRaMask = pCoexDm->curRaMask;\r
362 }\r
363 \r
364 VOID\r
365 halbtc8821aCsr2ant_AutoRateFallbackRetry(\r
366         IN      PBTC_COEXIST            pBtCoexist,\r
367         IN      BOOLEAN                         bForceExec,\r
368         IN      u1Byte                          type\r
369         )\r
370 {\r
371         BOOLEAN bWifiUnderBMode=FALSE;\r
372         \r
373         pCoexDm->curArfrType = type;\r
374 \r
375         if( bForceExec || (pCoexDm->preArfrType != pCoexDm->curArfrType))\r
376         {\r
377                 switch(pCoexDm->curArfrType)\r
378                 {\r
379                         case 0: // normal mode\r
380                                 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x430, pCoexDm->backupArfrCnt1);\r
381                                 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x434, pCoexDm->backupArfrCnt2);\r
382                                 break;\r
383                         case 1: \r
384                                 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_UNDER_B_MODE, &bWifiUnderBMode);\r
385                                 if(bWifiUnderBMode)\r
386                                 {\r
387                                         pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x430, 0x0);\r
388                                         pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x434, 0x01010101);\r
389                                 }\r
390                                 else\r
391                                 {\r
392                                         pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x430, 0x0);\r
393                                         pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x434, 0x04030201);\r
394                                 }\r
395                                 break;\r
396                         default:\r
397                                 break;\r
398                 }\r
399         }\r
400 \r
401         pCoexDm->preArfrType = pCoexDm->curArfrType;\r
402 }\r
403 \r
404 VOID\r
405 halbtc8821aCsr2ant_RetryLimit(\r
406         IN      PBTC_COEXIST            pBtCoexist,\r
407         IN      BOOLEAN                         bForceExec,\r
408         IN      u1Byte                          type\r
409         )\r
410 {\r
411         pCoexDm->curRetryLimitType = type;\r
412 \r
413         if( bForceExec || (pCoexDm->preRetryLimitType != pCoexDm->curRetryLimitType))\r
414         {\r
415                 switch(pCoexDm->curRetryLimitType)\r
416                 {\r
417                         case 0: // normal mode\r
418                                 pBtCoexist->fBtcWrite2Byte(pBtCoexist, 0x42a, pCoexDm->backupRetryLimit);\r
419                                 break;\r
420                         case 1: // retry limit=8\r
421                                 pBtCoexist->fBtcWrite2Byte(pBtCoexist, 0x42a, 0x0808);\r
422                                 break;\r
423                         default:\r
424                                 break;\r
425                 }\r
426         }\r
427 \r
428         pCoexDm->preRetryLimitType = pCoexDm->curRetryLimitType;\r
429 }\r
430 \r
431 VOID\r
432 halbtc8821aCsr2ant_AmpduMaxTime(\r
433         IN      PBTC_COEXIST            pBtCoexist,\r
434         IN      BOOLEAN                         bForceExec,\r
435         IN      u1Byte                          type\r
436         )\r
437 {\r
438         pCoexDm->curAmpduTimeType = type;\r
439 \r
440         if( bForceExec || (pCoexDm->preAmpduTimeType != pCoexDm->curAmpduTimeType))\r
441         {\r
442                 switch(pCoexDm->curAmpduTimeType)\r
443                 {\r
444                         case 0: // normal mode\r
445                                 pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x456, pCoexDm->backupAmpduMaxTime);\r
446                                 break;\r
447                         case 1: // AMPDU timw = 0x38 * 32us\r
448                                 pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x456, 0x38);\r
449                                 break;\r
450                         case 2: \r
451                                 pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x456, 0x17);\r
452                                 break;\r
453                         default:\r
454                                 break;\r
455                 }\r
456         }\r
457 \r
458         pCoexDm->preAmpduTimeType = pCoexDm->curAmpduTimeType;\r
459 }\r
460 \r
461 VOID\r
462 halbtc8821aCsr2Ant_AmpduMaxNum(\r
463         IN      PBTC_COEXIST            pBtCoexist,\r
464         IN      BOOLEAN                         bForceExec,\r
465         IN      u1Byte                          type\r
466         )\r
467 {\r
468         pCoexDm->curAmpduNumType = type;\r
469 \r
470         if( bForceExec || (pCoexDm->preAmpduNumType != pCoexDm->curAmpduNumType))\r
471         {\r
472                 switch(pCoexDm->curAmpduNumType)\r
473                 {\r
474                         case 0: // normal mode\r
475                                 pBtCoexist->fBtcWrite2Byte(pBtCoexist, 0x4ca, pCoexDm->backupAmpduMaxNum);\r
476                                 break;\r
477                         case 1:\r
478                                 pBtCoexist->fBtcWrite2Byte(pBtCoexist, 0x4ca, 0x0808);\r
479                                 break;\r
480                         case 2: \r
481                                 pBtCoexist->fBtcWrite2Byte(pBtCoexist, 0x4ca, 0x1f1f);\r
482                                 break;\r
483                         default:\r
484                                 break;\r
485                 }\r
486         }\r
487 \r
488         pCoexDm->preAmpduNumType = pCoexDm->curAmpduNumType;\r
489 \r
490 }\r
491 \r
492 VOID\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
501         )\r
502 {\r
503         switch(raMaskType)\r
504         {\r
505                 case 0: // normal mode\r
506                         halbtc8821aCsr2ant_UpdateRaMask(pBtCoexist, bForceExec, 0x0);\r
507                         break;\r
508                 case 1: // disable cck 1/2\r
509                         halbtc8821aCsr2ant_UpdateRaMask(pBtCoexist, bForceExec, 0x00000003);\r
510                         break;\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
513                         break;\r
514                 default:\r
515                         break;\r
516         }\r
517 \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
522 }\r
523 \r
524 \r
525 \r
526 VOID\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
533         )\r
534 {\r
535         BOOLEAN bRejectRxAgg=bRejApAggPkt;\r
536         BOOLEAN bBtCtrlRxAggSize=bBtCtrlAggBufSize;\r
537         u1Byte  rxAggSize=aggBufSize;\r
538 \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
549 }\r
550 \r
551 VOID\r
552 halbtc8821aCsr2ant_QueryBtInfo(\r
553         IN      PBTC_COEXIST            pBtCoexist\r
554         )\r
555 {\r
556         u1Byte                  H2C_Parameter[1] ={0};\r
557 \r
558         pCoexSta->bC2hBtInfoReqSent = TRUE;\r
559 \r
560         H2C_Parameter[0] |= BIT0;       // trigger\r
561 \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
564 \r
565         rtw_warn_on(_BTCOEX_CSR);\r
566         pBtCoexist->fBtcFillH2c(pBtCoexist, 0x61, 1, H2C_Parameter);\r
567 }\r
568 \r
569 u1Byte\r
570 halbtc8821aCsr2ant_ActionAlgorithm(\r
571         IN      PBTC_COEXIST            pBtCoexist\r
572         )\r
573 {\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
578 \r
579         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
580 \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
587 \r
588         if(!pStackInfo->bBtLinkExist)\r
589         {\r
590                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], No profile exists!!!\n"));\r
591                 return algorithm;\r
592         }\r
593 \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
602         \r
603         if(numOfDiffProfile == 1)\r
604         {\r
605                 if(pStackInfo->bScoExist)\r
606                 {\r
607                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO only\n"));\r
608                         algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_SCO;\r
609                 }\r
610                 else\r
611                 {\r
612                         if(pStackInfo->bHidExist)\r
613                         {\r
614                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID only\n"));\r
615                                 algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_HID;\r
616                         }\r
617                         else if(pStackInfo->bA2dpExist)\r
618                         {\r
619                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP only\n"));\r
620                                 algorithm = BT_8821A_CSR_2ANT_COEX_ALGO_A2DP;\r
621                         }\r
622                         else if(pStackInfo->bPanExist)\r
623                         {\r
624                                 if(bBtHsOn)\r
625                                 {\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
628                                 }\r
629                                 else\r
630                                 {\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
633                                 }\r
634                         }\r
635                 }\r
636         }\r
637         else if(numOfDiffProfile == 2)\r
638         {\r
639                 if(pStackInfo->bScoExist)\r
640                 {\r
641                         if(pStackInfo->bHidExist)\r
642                         {\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
645                         }\r
646                         else if(pStackInfo->bA2dpExist)\r
647                         {\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
650                         }\r
651                         else if(pStackInfo->bPanExist)\r
652                         {\r
653                                 if(bBtHsOn)\r
654                                 {\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
657                                 }\r
658                                 else\r
659                                 {\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
662                                 }\r
663                         }\r
664                 }\r
665                 else\r
666                 {\r
667                         if( pStackInfo->bHidExist &&\r
668                                 pStackInfo->bA2dpExist )\r
669                         {\r
670                                 if(pStackInfo->numOfHid >= 2)\r
671                                 {\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
674                                 }\r
675                                 else\r
676                                 {                       \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
679                                 }\r
680                         }\r
681                         else if( pStackInfo->bHidExist &&\r
682                                 pStackInfo->bPanExist )\r
683                         {\r
684                                 if(bBtHsOn)\r
685                                 {\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
688                                 }\r
689                                 else\r
690                                 {\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
693                                 }\r
694                         }\r
695                         else if( pStackInfo->bPanExist &&\r
696                                 pStackInfo->bA2dpExist )\r
697                         {\r
698                                 if(bBtHsOn)\r
699                                 {\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
702                                 }\r
703                                 else\r
704                                 {\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
707                                 }\r
708                         }\r
709                 }\r
710         }\r
711         else if(numOfDiffProfile == 3)\r
712         {\r
713                 if(pStackInfo->bScoExist)\r
714                 {\r
715                         if( pStackInfo->bHidExist &&\r
716                                 pStackInfo->bA2dpExist )\r
717                         {\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
720                         }\r
721                         else if( pStackInfo->bHidExist &&\r
722                                 pStackInfo->bPanExist )\r
723                         {\r
724                                 if(bBtHsOn)\r
725                                 {\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
728                                 }\r
729                                 else\r
730                                 {\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
733                                 }\r
734                         }\r
735                         else if( pStackInfo->bPanExist &&\r
736                                 pStackInfo->bA2dpExist )\r
737                         {\r
738                                 if(bBtHsOn)\r
739                                 {\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
742                                 }\r
743                                 else\r
744                                 {\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
747                                 }\r
748                         }\r
749                 }\r
750                 else\r
751                 {\r
752                         if( pStackInfo->bHidExist &&\r
753                                 pStackInfo->bPanExist &&\r
754                                 pStackInfo->bA2dpExist )\r
755                         {\r
756                                 if(bBtHsOn)\r
757                                 {\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
760                                 }\r
761                                 else\r
762                                 {\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
765                                 }\r
766                         }\r
767                 }\r
768         }\r
769         else if(numOfDiffProfile >= 3)\r
770         {\r
771                 if(pStackInfo->bScoExist)\r
772                 {\r
773                         if( pStackInfo->bHidExist &&\r
774                                 pStackInfo->bPanExist &&\r
775                                 pStackInfo->bA2dpExist )\r
776                         {\r
777                                 if(bBtHsOn)\r
778                                 {\r
779                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Error!!! SCO + HID + A2DP + PAN(HS)\n"));\r
780 \r
781                                 }\r
782                                 else\r
783                                 {\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
786                                 }\r
787                         }\r
788                 }\r
789         }\r
790 \r
791         return algorithm;\r
792 }\r
793 \r
794 BOOLEAN\r
795 halbtc8821aCsr2ant_NeedToDecBtPwr(\r
796         IN      PBTC_COEXIST            pBtCoexist\r
797         )\r
798 {\r
799         BOOLEAN         bRet=FALSE;\r
800         BOOLEAN         bBtHsOn=FALSE, bWifiConnected=FALSE;\r
801         s4Byte          btHsRssi=0;\r
802         u1Byte          btRssiState;\r
803 \r
804         if(!pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn))\r
805                 return FALSE;\r
806         if(!pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected))\r
807                 return FALSE;\r
808         if(!pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_S4_HS_RSSI, &btHsRssi))\r
809                 return FALSE;\r
810 \r
811         btRssiState = halbtc8821aCsr2ant_BtRssiState(2, 35, 0);\r
812 \r
813         if(bWifiConnected)\r
814         {\r
815                 if(bBtHsOn)\r
816                 {\r
817                         if(btHsRssi > 37)\r
818                         {\r
819                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], Need to decrease bt power for HS mode!!\n"));\r
820                                 bRet = TRUE;\r
821                         }\r
822                 }\r
823                 else\r
824                 {\r
825                         if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
826                         (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
827                         {\r
828                 \r
829                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], Need to decrease bt power for Wifi is connected!!\n"));\r
830                                 bRet = TRUE;\r
831                         }\r
832                 }\r
833         }\r
834         \r
835         return bRet;\r
836 }\r
837 \r
838 VOID\r
839 halbtc8821aCsr2ant_SetFwDacSwingLevel(\r
840         IN      PBTC_COEXIST            pBtCoexist,\r
841         IN      u1Byte                  dacSwingLvl\r
842         )\r
843 {\r
844         u1Byte                  H2C_Parameter[1] ={0};\r
845 \r
846         // There are several type of dacswing\r
847         // 0x18/ 0x10/ 0xc/ 0x8/ 0x4/ 0x6\r
848         H2C_Parameter[0] = dacSwingLvl;\r
849 \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
852 \r
853         pBtCoexist->fBtcFillH2c(pBtCoexist, 0x64, 1, H2C_Parameter);\r
854 }\r
855 \r
856 VOID\r
857 halbtc8821aCsr2ant_SetFwDecBtPwr(\r
858         IN      PBTC_COEXIST            pBtCoexist,\r
859         IN      BOOLEAN                 bDecBtPwr\r
860         )\r
861 {\r
862         u1Byte                  H2C_Parameter[1] ={0};\r
863         \r
864         H2C_Parameter[0] = 0;\r
865 \r
866         if(bDecBtPwr)\r
867         {\r
868                 H2C_Parameter[0] |= BIT1;\r
869         }\r
870 \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
873 \r
874         rtw_warn_on(_BTCOEX_CSR);\r
875         pBtCoexist->fBtcFillH2c(pBtCoexist, 0x62, 1, H2C_Parameter);    \r
876 }\r
877 \r
878 VOID\r
879 halbtc8821aCsr2ant_DecBtPwr(\r
880         IN      PBTC_COEXIST            pBtCoexist,\r
881         IN      BOOLEAN                 bForceExec,\r
882         IN      BOOLEAN                 bDecBtPwr\r
883         )\r
884 {\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
888 \r
889         if(!bForceExec)\r
890         {\r
891                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreDecBtPwr=%d, bCurDecBtPwr=%d\n", \r
892                         pCoexDm->bPreDecBtPwr, pCoexDm->bCurDecBtPwr));\r
893 \r
894                 if(pCoexDm->bPreDecBtPwr == pCoexDm->bCurDecBtPwr) \r
895                         return;\r
896         }\r
897 \r
898         /* TODO: may CSR consider to decrease BT power? */\r
899         //halbtc8821aCsr2ant_SetFwDecBtPwr(pBtCoexist, pCoexDm->bCurDecBtPwr);\r
900 \r
901         pCoexDm->bPreDecBtPwr = pCoexDm->bCurDecBtPwr;\r
902 }\r
903 \r
904 VOID\r
905 halbtc8821aCsr2ant_SetBtAutoReport(\r
906         IN      PBTC_COEXIST            pBtCoexist,\r
907         IN      BOOLEAN                 bEnableAutoReport\r
908         )\r
909 {\r
910         u1Byte                  H2C_Parameter[1] ={0};\r
911         \r
912         H2C_Parameter[0] = 0;\r
913 \r
914         if(bEnableAutoReport)\r
915         {\r
916                 H2C_Parameter[0] |= BIT0;\r
917         }\r
918 \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
921 \r
922         rtw_warn_on(_BTCOEX_CSR);\r
923         pBtCoexist->fBtcFillH2c(pBtCoexist, 0x68, 1, H2C_Parameter);    \r
924 }\r
925 \r
926 VOID\r
927 halbtc8821aCsr2ant_BtAutoReport(\r
928         IN      PBTC_COEXIST            pBtCoexist,\r
929         IN      BOOLEAN                 bForceExec,\r
930         IN      BOOLEAN                 bEnableAutoReport\r
931         )\r
932 {\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
936 \r
937         if(!bForceExec)\r
938         {\r
939                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreBtAutoReport=%d, bCurBtAutoReport=%d\n", \r
940                         pCoexDm->bPreBtAutoReport, pCoexDm->bCurBtAutoReport));\r
941 \r
942                 if(pCoexDm->bPreBtAutoReport == pCoexDm->bCurBtAutoReport) \r
943                         return;\r
944         }\r
945         //halbtc8821aCsr2ant_SetBtAutoReport(pBtCoexist, pCoexDm->bCurBtAutoReport);\r
946 \r
947         pCoexDm->bPreBtAutoReport = pCoexDm->bCurBtAutoReport;\r
948 }\r
949 \r
950 VOID\r
951 halbtc8821aCsr2ant_FwDacSwingLvl(\r
952         IN      PBTC_COEXIST            pBtCoexist,\r
953         IN      BOOLEAN                 bForceExec,\r
954         IN      u1Byte                  fwDacSwingLvl\r
955         )\r
956 {\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
960 \r
961         if(!bForceExec)\r
962         {\r
963                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], preFwDacSwingLvl=%d, curFwDacSwingLvl=%d\n", \r
964                         pCoexDm->preFwDacSwingLvl, pCoexDm->curFwDacSwingLvl));\r
965 \r
966                 if(pCoexDm->preFwDacSwingLvl == pCoexDm->curFwDacSwingLvl) \r
967                         return;\r
968         }\r
969 \r
970         halbtc8821aCsr2ant_SetFwDacSwingLevel(pBtCoexist, pCoexDm->curFwDacSwingLvl);\r
971 \r
972         pCoexDm->preFwDacSwingLvl = pCoexDm->curFwDacSwingLvl;\r
973 }\r
974 \r
975 VOID\r
976 halbtc8821aCsr2ant_SetSwRfRxLpfCorner(\r
977         IN      PBTC_COEXIST            pBtCoexist,\r
978         IN      BOOLEAN                 bRxRfShrinkOn\r
979         )\r
980 {\r
981         if(bRxRfShrinkOn)\r
982         {\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
986         }\r
987         else\r
988         {\r
989                 //Resume RF Rx LPF corner\r
990                 // After initialized, we can use pCoexDm->btRf0x1eBackup\r
991                 if(pBtCoexist->bInitilized)\r
992                 {\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
995                 }\r
996         }\r
997 }\r
998 \r
999 VOID\r
1000 halbtc8821aCsr2ant_RfShrink(\r
1001         IN      PBTC_COEXIST            pBtCoexist,\r
1002         IN      BOOLEAN                 bForceExec,\r
1003         IN      BOOLEAN                 bRxRfShrinkOn\r
1004         )\r
1005 {\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
1009 \r
1010         if(!bForceExec)\r
1011         {\r
1012                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreRfRxLpfShrink=%d, bCurRfRxLpfShrink=%d\n", \r
1013                         pCoexDm->bPreRfRxLpfShrink, pCoexDm->bCurRfRxLpfShrink));\r
1014 \r
1015                 if(pCoexDm->bPreRfRxLpfShrink == pCoexDm->bCurRfRxLpfShrink) \r
1016                         return;\r
1017         }\r
1018         halbtc8821aCsr2ant_SetSwRfRxLpfCorner(pBtCoexist, pCoexDm->bCurRfRxLpfShrink);\r
1019 \r
1020         pCoexDm->bPreRfRxLpfShrink = pCoexDm->bCurRfRxLpfShrink;\r
1021 }\r
1022 \r
1023 VOID\r
1024 halbtc8821aCsr2ant_SetSwPenaltyTxRateAdaptive(\r
1025         IN      PBTC_COEXIST            pBtCoexist,\r
1026         IN      BOOLEAN                 bLowPenaltyRa\r
1027         )\r
1028 {\r
1029         u1Byte                  H2C_Parameter[6] ={0};\r
1030         \r
1031         H2C_Parameter[0] = 0x6; // opCode, 0x6= Retry_Penalty\r
1032 \r
1033         if(bLowPenaltyRa)\r
1034         {\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
1040         }\r
1041 \r
1042         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], set WiFi Low-Penalty Retry: %s", \r
1043                 (bLowPenaltyRa? "ON!!":"OFF!!") ));\r
1044 \r
1045         pBtCoexist->fBtcFillH2c(pBtCoexist, 0x69, 6, H2C_Parameter);\r
1046 }\r
1047 \r
1048 VOID\r
1049 halbtc8821aCsr2ant_LowPenaltyRa(\r
1050         IN      PBTC_COEXIST            pBtCoexist,\r
1051         IN      BOOLEAN                 bForceExec,\r
1052         IN      BOOLEAN                 bLowPenaltyRa\r
1053         )\r
1054 {\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
1058 \r
1059         if(!bForceExec)\r
1060         {\r
1061                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreLowPenaltyRa=%d, bCurLowPenaltyRa=%d\n", \r
1062                         pCoexDm->bPreLowPenaltyRa, pCoexDm->bCurLowPenaltyRa));\r
1063 \r
1064                 if(pCoexDm->bPreLowPenaltyRa == pCoexDm->bCurLowPenaltyRa) \r
1065                         return;\r
1066         }\r
1067         halbtc8821aCsr2ant_SetSwPenaltyTxRateAdaptive(pBtCoexist, pCoexDm->bCurLowPenaltyRa);\r
1068 \r
1069         pCoexDm->bPreLowPenaltyRa = pCoexDm->bCurLowPenaltyRa;\r
1070 }\r
1071 \r
1072 VOID\r
1073 halbtc8821aCsr2ant_SetDacSwingReg(\r
1074         IN      PBTC_COEXIST            pBtCoexist,\r
1075         IN      u4Byte                  level\r
1076         )\r
1077 {\r
1078         u1Byte  val=(u1Byte)level;\r
1079 \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
1082 }\r
1083 \r
1084 VOID\r
1085 halbtc8821aCsr2ant_SetSwFullTimeDacSwing(\r
1086         IN      PBTC_COEXIST            pBtCoexist,\r
1087         IN      BOOLEAN                 bSwDacSwingOn,\r
1088         IN      u4Byte                  swDacSwingLvl\r
1089         )\r
1090 {\r
1091         if(bSwDacSwingOn)\r
1092         {\r
1093                 halbtc8821aCsr2ant_SetDacSwingReg(pBtCoexist, swDacSwingLvl);\r
1094         }\r
1095         else\r
1096         {\r
1097                 halbtc8821aCsr2ant_SetDacSwingReg(pBtCoexist, 0x18);\r
1098         }\r
1099 }\r
1100 \r
1101 \r
1102 VOID\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
1108         )\r
1109 {\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
1114 \r
1115         if(!bForceExec)\r
1116         {\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
1120 \r
1121                 if( (pCoexDm->bPreDacSwingOn == pCoexDm->bCurDacSwingOn) &&\r
1122                         (pCoexDm->preDacSwingLvl == pCoexDm->curDacSwingLvl) )\r
1123                         return;\r
1124         }\r
1125         delay_ms(30);\r
1126         halbtc8821aCsr2ant_SetSwFullTimeDacSwing(pBtCoexist, bDacSwingOn, dacSwingLvl);\r
1127 \r
1128         pCoexDm->bPreDacSwingOn = pCoexDm->bCurDacSwingOn;\r
1129         pCoexDm->preDacSwingLvl = pCoexDm->curDacSwingLvl;\r
1130 }\r
1131 \r
1132 VOID\r
1133 halbtc8821aCsr2ant_SetAdcBackOff(\r
1134         IN      PBTC_COEXIST            pBtCoexist,\r
1135         IN      BOOLEAN                 bAdcBackOff\r
1136         )\r
1137 {\r
1138         if(bAdcBackOff)\r
1139         {\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
1142         }\r
1143         else\r
1144         {\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
1147         }\r
1148 }\r
1149 \r
1150 VOID\r
1151 halbtc8821aCsr2ant_AdcBackOff(\r
1152         IN      PBTC_COEXIST            pBtCoexist,\r
1153         IN      BOOLEAN                 bForceExec,\r
1154         IN      BOOLEAN                 bAdcBackOff\r
1155         )\r
1156 {\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
1160 \r
1161         if(!bForceExec)\r
1162         {\r
1163                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreAdcBackOff=%d, bCurAdcBackOff=%d\n", \r
1164                         pCoexDm->bPreAdcBackOff, pCoexDm->bCurAdcBackOff));\r
1165 \r
1166                 if(pCoexDm->bPreAdcBackOff == pCoexDm->bCurAdcBackOff) \r
1167                         return;\r
1168         }\r
1169         halbtc8821aCsr2ant_SetAdcBackOff(pBtCoexist, pCoexDm->bCurAdcBackOff);\r
1170 \r
1171         pCoexDm->bPreAdcBackOff = pCoexDm->bCurAdcBackOff;\r
1172 }\r
1173 \r
1174 VOID\r
1175 halbtc8821aCsr2ant_SetAgcTable(\r
1176         IN      PBTC_COEXIST            pBtCoexist,\r
1177         IN      BOOLEAN                 bAgcTableEn\r
1178         )\r
1179 {\r
1180         u1Byte          rssiAdjustVal=0;\r
1181 \r
1182         pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xef, 0xfffff, 0x02000);\r
1183         if(bAgcTableEn)\r
1184         {\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
1189         }\r
1190         else\r
1191         {\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
1195         }\r
1196         pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xef, 0xfffff, 0x0);\r
1197 \r
1198         // set rssiAdjustVal for wifi module.\r
1199         pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_U1_RSSI_ADJ_VAL_FOR_AGC_TABLE_ON, &rssiAdjustVal);\r
1200 }\r
1201 \r
1202 VOID\r
1203 halbtc8821aCsr2ant_AgcTable(\r
1204         IN      PBTC_COEXIST            pBtCoexist,\r
1205         IN      BOOLEAN                 bForceExec,\r
1206         IN      BOOLEAN                 bAgcTableEn\r
1207         )\r
1208 {\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
1212 \r
1213         if(!bForceExec)\r
1214         {\r
1215                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreAgcTableEn=%d, bCurAgcTableEn=%d\n", \r
1216                         pCoexDm->bPreAgcTableEn, pCoexDm->bCurAgcTableEn));\r
1217 \r
1218                 if(pCoexDm->bPreAgcTableEn == pCoexDm->bCurAgcTableEn) \r
1219                         return;\r
1220         }\r
1221         halbtc8821aCsr2ant_SetAgcTable(pBtCoexist, bAgcTableEn);\r
1222 \r
1223         pCoexDm->bPreAgcTableEn = pCoexDm->bCurAgcTableEn;\r
1224 }\r
1225 \r
1226 VOID\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
1233         )\r
1234 {\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
1237 \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
1240 \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
1243 \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
1246 }\r
1247 \r
1248 VOID\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
1256         )\r
1257 {\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
1264 \r
1265         if(!bForceExec)\r
1266         {\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
1271         \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
1276                         return;\r
1277         }\r
1278         halbtc8821aCsr2ant_SetCoexTable(pBtCoexist, val0x6c0, val0x6c4, val0x6c8, val0x6cc);\r
1279 \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
1284 }\r
1285 \r
1286 VOID\r
1287 halbtc8821aCsr2ant_SetFwIgnoreWlanAct(\r
1288         IN      PBTC_COEXIST            pBtCoexist,\r
1289         IN      BOOLEAN                 bEnable\r
1290         )\r
1291 {\r
1292         u1Byte                  H2C_Parameter[1] ={0};\r
1293                 \r
1294         if(bEnable)\r
1295         {\r
1296                 H2C_Parameter[0] |= BIT0;               // function enable\r
1297         }\r
1298         \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
1301 \r
1302         rtw_warn_on(_BTCOEX_CSR);\r
1303         pBtCoexist->fBtcFillH2c(pBtCoexist, 0x63, 1, H2C_Parameter);\r
1304 }\r
1305 \r
1306 VOID\r
1307 halbtc8821aCsr2ant_IgnoreWlanAct(\r
1308         IN      PBTC_COEXIST            pBtCoexist,\r
1309         IN      BOOLEAN                 bForceExec,\r
1310         IN      BOOLEAN                 bEnable\r
1311         )\r
1312 {\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
1316 \r
1317         if(!bForceExec)\r
1318         {\r
1319                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreIgnoreWlanAct = %d, bCurIgnoreWlanAct = %d!!\n", \r
1320                         pCoexDm->bPreIgnoreWlanAct, pCoexDm->bCurIgnoreWlanAct));\r
1321 \r
1322                 if(pCoexDm->bPreIgnoreWlanAct == pCoexDm->bCurIgnoreWlanAct)\r
1323                         return;\r
1324         }\r
1325         //halbtc8821aCsr2ant_SetFwIgnoreWlanAct(pBtCoexist, bEnable);\r
1326 \r
1327         pCoexDm->bPreIgnoreWlanAct = pCoexDm->bCurIgnoreWlanAct;\r
1328 }\r
1329 \r
1330 VOID\r
1331 halbtc8821aCsr2ant_SetFwPstdma(\r
1332         IN      PBTC_COEXIST            pBtCoexist,\r
1333         IN      u1Byte                  byte1,\r
1334         IN      u1Byte                  byte2,\r
1335         IN      u1Byte                  byte3,\r
1336         IN      u1Byte                  byte4,\r
1337         IN      u1Byte                  byte5\r
1338         )\r
1339 {\r
1340         u1Byte                  H2C_Parameter[6] ={0};\r
1341 \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
1348 \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
1355         \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
1359 \r
1360         pBtCoexist->fBtcFillH2c(pBtCoexist, 0x60, 6, H2C_Parameter);\r
1361 }\r
1362 \r
1363 VOID\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
1370         ) \r
1371 {\r
1372         u4Byte  wifiBw;\r
1373         \r
1374         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
1375         \r
1376         if(BTC_WIFI_BW_HT40 != wifiBw)  //only shrink RF Rx LPF for HT40\r
1377         {\r
1378                 if (bShrinkRxLPF)\r
1379                         bShrinkRxLPF = FALSE;\r
1380         }\r
1381                 \r
1382          halbtc8821aCsr2ant_RfShrink(pBtCoexist, NORMAL_EXEC, bShrinkRxLPF);\r
1383         halbtc8821aCsr2ant_LowPenaltyRa(pBtCoexist, NORMAL_EXEC, bLowPenaltyRA);\r
1384 \r
1385         //no limited DIG\r
1386         //halbtc8821aCsr2ant_SetBtLnaConstrain(pBtCoexist, NORMAL_EXEC, bBTLNAConstrain);\r
1387 }\r
1388 \r
1389 VOID\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
1396         ) \r
1397 {\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
1401 }\r
1402 \r
1403 VOID\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
1409         )\r
1410 {\r
1411         PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
1412         u4Byte                          u4Tmp=0;\r
1413         u1Byte                          H2C_Parameter[2] ={0};\r
1414         \r
1415         if(bInitHwCfg)\r
1416         {\r
1417                 // 0x4c[23]=0, 0x4c[24]=1  Antenna control by WL/BT\r
1418                 u4Tmp = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x4c);\r
1419                 u4Tmp &=~BIT23;\r
1420                 u4Tmp |= BIT24;\r
1421                 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x4c, u4Tmp);\r
1422 \r
1423                 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x974, 0x3ff);\r
1424                 pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0xcb4, 0x77);\r
1425 \r
1426                 if(pBoardInfo->btdmAntPos == BTC_ANTENNA_AT_MAIN_PORT) \r
1427                 {\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
1432                 }\r
1433                 else\r
1434                 {\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
1439                 }\r
1440         }\r
1441         \r
1442         // ext switch setting\r
1443         switch(antPosType)\r
1444         {\r
1445                 case BTC_ANT_WIFI_AT_MAIN:\r
1446                         pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xcb7, 0x30, 0x1);\r
1447                         break;\r
1448                 case BTC_ANT_WIFI_AT_AUX:\r
1449                         pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xcb7, 0x30, 0x2);\r
1450                         break;\r
1451         }\r
1452 }\r
1453 \r
1454 VOID\r
1455 halbtc8821aCsr2ant_PsTdma(\r
1456         IN      PBTC_COEXIST            pBtCoexist,\r
1457         IN      BOOLEAN                 bForceExec,\r
1458         IN      BOOLEAN                 bTurnOn,\r
1459         IN      u1Byte                  type\r
1460         )\r
1461 {\r
1462         BOOLEAN                 bTurnOnByCnt=FALSE;\r
1463         u1Byte                  psTdmaTypeByCnt=0;\r
1464 \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
1469 \r
1470         if(!bForceExec)\r
1471         {\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
1476 \r
1477                 if( (pCoexDm->bPrePsTdmaOn == pCoexDm->bCurPsTdmaOn) &&\r
1478                         (pCoexDm->prePsTdma == pCoexDm->curPsTdma) )\r
1479                         return;\r
1480         }       \r
1481         if(bTurnOn)\r
1482         {\r
1483                 switch(type)\r
1484                 {\r
1485                         case 1:\r
1486                         default:\r
1487                                 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0xe1, 0x90);\r
1488                                 break;\r
1489                         case 2:\r
1490                                 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0xe1, 0x90);\r
1491                                 break;\r
1492                         case 3:\r
1493                                 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x3, 0xf1, 0x90);\r
1494                                 break;\r
1495                         case 4:\r
1496                                 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x10, 0x03, 0xf1, 0x90);\r
1497                                 break;\r
1498                         case 5:\r
1499                                 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0x60, 0x90);\r
1500                                 break;\r
1501                         case 6:\r
1502                                 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0x60, 0x90);\r
1503                                 break;\r
1504                         case 7:\r
1505                                 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x3, 0x70, 0x90);\r
1506                                 break;\r
1507                         case 8: \r
1508                                 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xa3, 0x10, 0x3, 0x70, 0x90);\r
1509                                 break;\r
1510                         case 9: \r
1511                                 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0xe1, 0x90);\r
1512                                 break;\r
1513                         case 10:        \r
1514                                 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0xe1, 0x90);\r
1515                                 break;\r
1516                         case 11:        \r
1517                                 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xe3, 0xa, 0xa, 0xe1, 0x90);\r
1518                                 break;\r
1519                         case 12:\r
1520                                 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x5, 0x5, 0xe1, 0x90);\r
1521                                 break;\r
1522                         case 13:\r
1523                                 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0x60, 0x90);\r
1524                                 break;\r
1525                         case 14:\r
1526                                 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0x60, 0x90);\r
1527                                 break;\r
1528                         case 15:\r
1529                                 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xe3, 0xa, 0xa, 0x60, 0x90);\r
1530                                 break;\r
1531                         case 16:\r
1532                                 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x5, 0x5, 0x60, 0x90);\r
1533                                 break;\r
1534                         case 17:\r
1535                                 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xa3, 0x2f, 0x2f, 0x60, 0x90);\r
1536                                 break;\r
1537                         case 18:\r
1538                                 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x5, 0x5, 0xe1, 0x90);\r
1539                                 break;                  \r
1540                         case 19:\r
1541                                 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x25, 0x25, 0xe1, 0x90);\r
1542                                 break;\r
1543                         case 20:\r
1544                                 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x25, 0x25, 0x60, 0x90);\r
1545                                 break;\r
1546                         case 21:        \r
1547                                 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x15, 0x03, 0x70, 0x90);\r
1548                                 break;\r
1549                         case 22:        //ad2dp master\r
1550                                 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xeb, 0x11, 0x11, 0x21, 0x10);\r
1551                                 break;\r
1552                         case 23:        //a2dp slave\r
1553                                 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xeb, 0x12, 0x12, 0x20, 0x10);\r
1554                                 break;\r
1555                         case 71:\r
1556                                 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0xe1, 0x90);\r
1557                                 break;\r
1558                 }\r
1559         }\r
1560         else\r
1561         {\r
1562                 // disable PS tdma\r
1563                 switch(type)\r
1564                 {\r
1565                         case 0:\r
1566                                 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0x0, 0x0, 0x0, 0x40, 0x0);\r
1567                                 break;\r
1568                         case 1:\r
1569                                 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0x0, 0x0, 0x0, 0x48, 0x0);\r
1570                                 break;\r
1571                         default:\r
1572                                 halbtc8821aCsr2ant_SetFwPstdma(pBtCoexist, 0x0, 0x0, 0x0, 0x40, 0x0);\r
1573                                 break;\r
1574                 }\r
1575         }\r
1576 \r
1577         // update pre state\r
1578         pCoexDm->bPrePsTdmaOn = pCoexDm->bCurPsTdmaOn;\r
1579         pCoexDm->prePsTdma = pCoexDm->curPsTdma;\r
1580 }\r
1581 \r
1582 VOID\r
1583 halbtc8821aCsr2ant_CoexAllOff(\r
1584         IN      PBTC_COEXIST            pBtCoexist\r
1585         )\r
1586 {\r
1587         // fw all off\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
1591 \r
1592         // sw all off\r
1593         halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
1594         halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
1595 \r
1596         // hw all off\r
1597         halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55555555, 0x55555555, 0xffff, 0x3);\r
1598 }\r
1599 \r
1600 VOID\r
1601 halbtc8821aCsr2ant_CoexUnder5G(\r
1602         IN      PBTC_COEXIST            pBtCoexist\r
1603         )\r
1604 {\r
1605         halbtc8821aCsr2ant_CoexAllOff(pBtCoexist);\r
1606 \r
1607         halbtc8821aCsr2ant_IgnoreWlanAct(pBtCoexist, NORMAL_EXEC, TRUE);\r
1608 }\r
1609 \r
1610 VOID\r
1611 halbtc8821aCsr2ant_InitCoexDm(\r
1612         IN      PBTC_COEXIST            pBtCoexist\r
1613         )\r
1614 {       \r
1615         // force to reset coex mechanism\r
1616         halbtc8821aCsr2ant_CoexTable(pBtCoexist, FORCE_EXEC, 0x55555555, 0x55555555, 0xffff, 0x3);\r
1617 \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
1621 \r
1622         halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
1623         halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
1624 }\r
1625 \r
1626 VOID\r
1627 halbtc8821aCsr2ant_BtInquiryPage(\r
1628         IN      PBTC_COEXIST            pBtCoexist\r
1629         )\r
1630 {\r
1631         BOOLEAN bLowPwrDisable=TRUE;\r
1632         \r
1633         pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
1634 \r
1635         halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5afa5afa, 0xffff, 0x3);\r
1636         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
1637 }\r
1638 BOOLEAN\r
1639 halbtc8821aCsr2ant_IsCommonAction(\r
1640         IN      PBTC_COEXIST            pBtCoexist\r
1641         )\r
1642 {\r
1643         BOOLEAN                 bCommon=FALSE, bWifiConnected=FALSE, bWifiBusy=FALSE;\r
1644         BOOLEAN                 bLowPwrDisable=FALSE;\r
1645 \r
1646         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
1647         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);\r
1648 \r
1649         if(!bWifiConnected && \r
1650                 BT_8821A_CSR_2ANT_BT_STATUS_IDLE == pCoexDm->btStatus)\r
1651         {\r
1652                 bLowPwrDisable = FALSE;\r
1653                 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
1654 \r
1655                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi IPS + BT IPS!!\n"));  \r
1656 \r
1657                 \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
1661                 \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
1666 \r
1667                 bCommon = TRUE;\r
1668         }\r
1669         else if(bWifiConnected && \r
1670                         (BT_8821A_CSR_2ANT_BT_STATUS_IDLE == pCoexDm->btStatus) )\r
1671         {               \r
1672                 bLowPwrDisable = FALSE;\r
1673                 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
1674 \r
1675                 if(bWifiBusy)\r
1676                 {       \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
1679                 }\r
1680                 else\r
1681                 {\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
1684                 }\r
1685                 \r
1686                 halbtc8821aCsr2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
1687                 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
1688 \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
1693 \r
1694                 bCommon = TRUE;\r
1695         }\r
1696         else if(!bWifiConnected && \r
1697                 (BT_8821A_CSR_2ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus) )\r
1698         {\r
1699                 bLowPwrDisable = TRUE;\r
1700                 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
1701 \r
1702                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi IPS + BT LPS!!\n"));          \r
1703 \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
1707 \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
1712 \r
1713                 bCommon = TRUE;\r
1714         }\r
1715         else if(bWifiConnected && \r
1716                 (BT_8821A_CSR_2ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus) )\r
1717         {\r
1718                 bLowPwrDisable = TRUE;\r
1719                 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
1720                 \r
1721                 if(bWifiBusy)\r
1722                 {\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
1725                 }\r
1726                 else\r
1727                 {\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
1730                 }\r
1731                 \r
1732                 halbtc8821aCsr2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
1733                 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
1734 \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
1739 \r
1740                 bCommon = TRUE;\r
1741         }\r
1742         else if(!bWifiConnected && \r
1743                         (BT_8821A_CSR_2ANT_BT_STATUS_NON_IDLE == pCoexDm->btStatus) )\r
1744         {\r
1745                 bLowPwrDisable = FALSE;\r
1746                 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
1747 \r
1748                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi IPS + BT Busy!!\n")); \r
1749 \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
1753 \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
1758                 \r
1759                 bCommon = TRUE;\r
1760         }\r
1761         else\r
1762         {\r
1763                 bLowPwrDisable = TRUE;\r
1764                 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
1765 \r
1766                 if(bWifiBusy)\r
1767                 {\r
1768                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi Busy + BT Busy!!\n"));\r
1769                         bCommon = FALSE;\r
1770                 }\r
1771                 else\r
1772                 {\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
1775 \r
1776                         if(halbtc8821aCsr2ant_NeedToDecBtPwr(pBtCoexist))\r
1777                                 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);\r
1778                         else    \r
1779                                 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
1780                         \r
1781                         bCommon = TRUE;\r
1782                 }\r
1783 \r
1784                 halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,TRUE,TRUE);\r
1785         }\r
1786 \r
1787         if (bCommon == TRUE)\r
1788                 halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5afa5afa, 0xffff, 0x3);\r
1789 \r
1790         return bCommon;\r
1791 }\r
1792 VOID\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
1798         )\r
1799 {\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
1803 \r
1804         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], TdmaDurationAdjust()\n"));\r
1805 \r
1806         if(pCoexDm->bResetTdmaAdjust)\r
1807         {\r
1808                 pCoexDm->bResetTdmaAdjust = FALSE;\r
1809                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], first run TdmaDurationAdjust()!!\n"));\r
1810                 {\r
1811                         if(bScoHid)\r
1812                         {\r
1813                                 if(bTxPause)\r
1814                                 {\r
1815                                         if(maxInterval == 1)\r
1816                                         {\r
1817                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 13);\r
1818                                                 pCoexDm->psTdmaDuAdjType = 13;  \r
1819                                         }\r
1820                                         else if(maxInterval == 2)\r
1821                                         {\r
1822                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);\r
1823                                                 pCoexDm->psTdmaDuAdjType = 14;  \r
1824                                         }\r
1825                                         else if(maxInterval == 3)\r
1826                                         {\r
1827                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
1828                                                 pCoexDm->psTdmaDuAdjType = 15;  \r
1829                                         }\r
1830                                         else\r
1831                                         {\r
1832                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
1833                                                 pCoexDm->psTdmaDuAdjType = 15;\r
1834                                         }\r
1835                                 }\r
1836                                 else\r
1837                                 {\r
1838                                         if(maxInterval == 1)\r
1839                                         {\r
1840                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);\r
1841                                                 pCoexDm->psTdmaDuAdjType = 9;   \r
1842                                         }\r
1843                                         else if(maxInterval == 2)\r
1844                                         {\r
1845                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);\r
1846                                                 pCoexDm->psTdmaDuAdjType = 10;  \r
1847                                         }\r
1848                                         else if(maxInterval == 3)\r
1849                                         {\r
1850                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
1851                                                 pCoexDm->psTdmaDuAdjType = 11;\r
1852                                         }\r
1853                                         else\r
1854                                         {\r
1855                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
1856                                                 pCoexDm->psTdmaDuAdjType = 11;\r
1857                                         }\r
1858                                 }\r
1859                         }\r
1860                         else\r
1861                         {\r
1862                                 if(bTxPause)\r
1863                                 {\r
1864                                         if(maxInterval == 1)\r
1865                                         {\r
1866                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);\r
1867                                                 pCoexDm->psTdmaDuAdjType = 5;   \r
1868                                         }\r
1869                                         else if(maxInterval == 2)\r
1870                                         {\r
1871                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
1872                                                 pCoexDm->psTdmaDuAdjType = 6;   \r
1873                                         }\r
1874                                         else if(maxInterval == 3)\r
1875                                         {\r
1876                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
1877                                                 pCoexDm->psTdmaDuAdjType = 7;\r
1878                                         }\r
1879                                         else\r
1880                                         {\r
1881                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
1882                                                 pCoexDm->psTdmaDuAdjType = 7;\r
1883                                         }\r
1884                                 }\r
1885                                 else\r
1886                                 {\r
1887                                         if(maxInterval == 1)\r
1888                                         {\r
1889                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);\r
1890                                                 pCoexDm->psTdmaDuAdjType = 1;   \r
1891                                         }\r
1892                                         else if(maxInterval == 2)\r
1893                                         {\r
1894                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
1895                                                 pCoexDm->psTdmaDuAdjType = 2;   \r
1896                                         }\r
1897                                         else if(maxInterval == 3)\r
1898                                         {\r
1899                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
1900                                                 pCoexDm->psTdmaDuAdjType = 3;\r
1901                                         }\r
1902                                         else\r
1903                                         {\r
1904                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
1905                                                 pCoexDm->psTdmaDuAdjType = 3;\r
1906                                         }\r
1907                                 }\r
1908                         }\r
1909                 }\r
1910                 //============\r
1911                 up = 0;\r
1912                 dn = 0;\r
1913                 m = 1;\r
1914                 n= 3;\r
1915                 result = 0;\r
1916                 WaitCount = 0;\r
1917         }\r
1918         else\r
1919         {\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
1925                 result = 0;\r
1926                 WaitCount++; \r
1927                   \r
1928                 if(retryCount == 0)  // no retry in the last 2-second duration\r
1929                 {\r
1930                         up++;\r
1931                         dn--;\r
1932 \r
1933                         if (dn <= 0)\r
1934                                 dn = 0;                          \r
1935 \r
1936                         if(up >= n)     // if ³sÄò n ­Ó2¬í retry count¬°0, «h½Õ¼eWiFi duration\r
1937                         {\r
1938                                 WaitCount = 0; \r
1939                                 n = 3;\r
1940                                 up = 0;\r
1941                                 dn = 0;\r
1942                                 result = 1; \r
1943                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Increase wifi duration!!\n"));\r
1944                         }\r
1945                 }\r
1946                 else if (retryCount <= 3)       // <=3 retry in the last 2-second duration\r
1947                 {\r
1948                         up--; \r
1949                         dn++;\r
1950 \r
1951                         if (up <= 0)\r
1952                                 up = 0;\r
1953 \r
1954                         if (dn == 2)    // if ³sÄò 2 ­Ó2¬í retry count< 3, «h½Õ¯¶WiFi duration\r
1955                         {\r
1956                                 if (WaitCount <= 2)\r
1957                                         m++; // ÁקK¤@ª½¦b¨â­Ólevel¤¤¨Ó¦^\r
1958                                 else\r
1959                                         m = 1;\r
1960 \r
1961                                 if ( m >= 20) //m ³Ì¤j­È = 20 ' ³Ì¤j120¬í recheck¬O§_½Õ¾ã WiFi duration.\r
1962                                         m = 20;\r
1963 \r
1964                                 n = 3*m;\r
1965                                 up = 0;\r
1966                                 dn = 0;\r
1967                                 WaitCount = 0;\r
1968                                 result = -1; \r
1969                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Decrease wifi duration for retryCounter<3!!\n"));\r
1970                         }\r
1971                 }\r
1972                 else  //retry count > 3, ¥u­n1¦¸ retry count > 3, «h½Õ¯¶WiFi duration\r
1973                 {\r
1974                         if (WaitCount == 1)\r
1975                                 m++; // ÁקK¤@ª½¦b¨â­Ólevel¤¤¨Ó¦^\r
1976                         else\r
1977                                 m = 1;\r
1978 \r
1979                         if ( m >= 20) //m ³Ì¤j­È = 20 ' ³Ì¤j120¬í recheck¬O§_½Õ¾ã WiFi duration.\r
1980                                 m = 20;\r
1981 \r
1982                         n = 3*m;\r
1983                         up = 0;\r
1984                         dn = 0;\r
1985                         WaitCount = 0; \r
1986                         result = -1;\r
1987                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Decrease wifi duration for retryCounter>3!!\n"));\r
1988                 }\r
1989 \r
1990                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], max Interval = %d\n", maxInterval));\r
1991                 if(maxInterval == 1)\r
1992                 {\r
1993                         if(bTxPause)\r
1994                         {\r
1995                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 1\n"));\r
1996 \r
1997                                 if(pCoexDm->curPsTdma == 71)\r
1998                                 {\r
1999                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);\r
2000                                         pCoexDm->psTdmaDuAdjType = 5;\r
2001                                 }\r
2002                                 else if(pCoexDm->curPsTdma == 1)\r
2003                                 {\r
2004                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);\r
2005                                         pCoexDm->psTdmaDuAdjType = 5;\r
2006                                 }\r
2007                                 else if(pCoexDm->curPsTdma == 2)\r
2008                                 {\r
2009                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
2010                                         pCoexDm->psTdmaDuAdjType = 6;\r
2011                                 }\r
2012                                 else if(pCoexDm->curPsTdma == 3)\r
2013                                 {\r
2014                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2015                                         pCoexDm->psTdmaDuAdjType = 7;\r
2016                                 }\r
2017                                 else if(pCoexDm->curPsTdma == 4)\r
2018                                 {\r
2019                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 8);\r
2020                                         pCoexDm->psTdmaDuAdjType = 8;\r
2021                                 }\r
2022                                 if(pCoexDm->curPsTdma == 9)\r
2023                                 {\r
2024                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 13);\r
2025                                         pCoexDm->psTdmaDuAdjType = 13;\r
2026                                 }\r
2027                                 else if(pCoexDm->curPsTdma == 10)\r
2028                                 {\r
2029                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);\r
2030                                         pCoexDm->psTdmaDuAdjType = 14;\r
2031                                 }\r
2032                                 else if(pCoexDm->curPsTdma == 11)\r
2033                                 {\r
2034                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2035                                         pCoexDm->psTdmaDuAdjType = 15;\r
2036                                 }\r
2037                                 else if(pCoexDm->curPsTdma == 12)\r
2038                                 {\r
2039                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 16);\r
2040                                         pCoexDm->psTdmaDuAdjType = 16;\r
2041                                 }\r
2042                                 \r
2043                                 if(result == -1)\r
2044                                 {                                       \r
2045                                         if(pCoexDm->curPsTdma == 5)\r
2046                                         {\r
2047                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
2048                                                 pCoexDm->psTdmaDuAdjType = 6;\r
2049                                         }\r
2050                                         else if(pCoexDm->curPsTdma == 6)\r
2051                                         {\r
2052                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2053                                                 pCoexDm->psTdmaDuAdjType = 7;\r
2054                                         }\r
2055                                         else if(pCoexDm->curPsTdma == 7)\r
2056                                         {\r
2057                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 8);\r
2058                                                 pCoexDm->psTdmaDuAdjType = 8;\r
2059                                         }\r
2060                                         else if(pCoexDm->curPsTdma == 13)\r
2061                                         {\r
2062                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);\r
2063                                                 pCoexDm->psTdmaDuAdjType = 14;\r
2064                                         }\r
2065                                         else if(pCoexDm->curPsTdma == 14)\r
2066                                         {\r
2067                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2068                                                 pCoexDm->psTdmaDuAdjType = 15;\r
2069                                         }\r
2070                                         else if(pCoexDm->curPsTdma == 15)\r
2071                                         {\r
2072                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 16);\r
2073                                                 pCoexDm->psTdmaDuAdjType = 16;\r
2074                                         }\r
2075                                 } \r
2076                                 else if (result == 1)\r
2077                                 {\r
2078                                         if(pCoexDm->curPsTdma == 8)\r
2079                                         {\r
2080                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2081                                                 pCoexDm->psTdmaDuAdjType = 7;\r
2082                                         }\r
2083                                         else if(pCoexDm->curPsTdma == 7)\r
2084                                         {\r
2085                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
2086                                                 pCoexDm->psTdmaDuAdjType = 6;\r
2087                                         }\r
2088                                         else if(pCoexDm->curPsTdma == 6)\r
2089                                         {\r
2090                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);\r
2091                                                 pCoexDm->psTdmaDuAdjType = 5;\r
2092                                         }\r
2093                                         else if(pCoexDm->curPsTdma == 16)\r
2094                                         {\r
2095                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2096                                                 pCoexDm->psTdmaDuAdjType = 15;\r
2097                                         }\r
2098                                         else if(pCoexDm->curPsTdma == 15)\r
2099                                         {\r
2100                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);\r
2101                                                 pCoexDm->psTdmaDuAdjType = 14;\r
2102                                         }\r
2103                                         else if(pCoexDm->curPsTdma == 14)\r
2104                                         {\r
2105                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 13);\r
2106                                                 pCoexDm->psTdmaDuAdjType = 13;\r
2107                                         }\r
2108                                 }\r
2109                         }\r
2110                         else\r
2111                         {\r
2112                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 0\n"));\r
2113                                 if(pCoexDm->curPsTdma == 5)\r
2114                                 {\r
2115                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 71);\r
2116                                         pCoexDm->psTdmaDuAdjType = 71;\r
2117                                 }\r
2118                                 else if(pCoexDm->curPsTdma == 6)\r
2119                                 {\r
2120                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
2121                                         pCoexDm->psTdmaDuAdjType = 2;\r
2122                                 }\r
2123                                 else if(pCoexDm->curPsTdma == 7)\r
2124                                 {\r
2125                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2126                                         pCoexDm->psTdmaDuAdjType = 3;\r
2127                                 }\r
2128                                 else if(pCoexDm->curPsTdma == 8)\r
2129                                 {\r
2130                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 4);\r
2131                                         pCoexDm->psTdmaDuAdjType = 4;\r
2132                                 }\r
2133                                 if(pCoexDm->curPsTdma == 13)\r
2134                                 {\r
2135                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);\r
2136                                         pCoexDm->psTdmaDuAdjType = 9;\r
2137                                 }\r
2138                                 else if(pCoexDm->curPsTdma == 14)\r
2139                                 {\r
2140                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);\r
2141                                         pCoexDm->psTdmaDuAdjType = 10;\r
2142                                 }\r
2143                                 else if(pCoexDm->curPsTdma == 15)\r
2144                                 {\r
2145                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2146                                         pCoexDm->psTdmaDuAdjType = 11;\r
2147                                 }\r
2148                                 else if(pCoexDm->curPsTdma == 16)\r
2149                                 {\r
2150                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 12);\r
2151                                         pCoexDm->psTdmaDuAdjType = 12;\r
2152                                 }\r
2153                                 \r
2154                                 if(result == -1)\r
2155                                 {\r
2156                                         if(pCoexDm->curPsTdma == 71)\r
2157                                         {\r
2158                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);\r
2159                                                 pCoexDm->psTdmaDuAdjType = 1;\r
2160                                         }\r
2161                                         else if(pCoexDm->curPsTdma == 1)\r
2162                                         {\r
2163                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
2164                                                 pCoexDm->psTdmaDuAdjType = 2;\r
2165                                         }\r
2166                                         else if(pCoexDm->curPsTdma == 2)\r
2167                                         {\r
2168                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2169                                                 pCoexDm->psTdmaDuAdjType = 3;\r
2170                                         }\r
2171                                         else if(pCoexDm->curPsTdma == 3)\r
2172                                         {\r
2173                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 4);\r
2174                                                 pCoexDm->psTdmaDuAdjType = 4;\r
2175                                         }\r
2176                                         else if(pCoexDm->curPsTdma == 9)\r
2177                                         {\r
2178                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);\r
2179                                                 pCoexDm->psTdmaDuAdjType = 10;\r
2180                                         }\r
2181                                         else if(pCoexDm->curPsTdma == 10)\r
2182                                         {\r
2183                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2184                                                 pCoexDm->psTdmaDuAdjType = 11;\r
2185                                         }\r
2186                                         else if(pCoexDm->curPsTdma == 11)\r
2187                                         {\r
2188                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 12);\r
2189                                                 pCoexDm->psTdmaDuAdjType = 12;\r
2190                                         }\r
2191                                 } \r
2192                                 else if (result == 1)\r
2193                                 {\r
2194                                         if(pCoexDm->curPsTdma == 4)\r
2195                                         {\r
2196                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2197                                                 pCoexDm->psTdmaDuAdjType = 3;\r
2198                                         }\r
2199                                         else if(pCoexDm->curPsTdma == 3)\r
2200                                         {\r
2201                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
2202                                                 pCoexDm->psTdmaDuAdjType = 2;\r
2203                                         }\r
2204                                         else if(pCoexDm->curPsTdma == 2)\r
2205                                         {\r
2206                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);\r
2207                                                 pCoexDm->psTdmaDuAdjType = 1;\r
2208                                         }\r
2209                                         else if(pCoexDm->curPsTdma == 1)\r
2210                                         {\r
2211                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 71);\r
2212                                                 pCoexDm->psTdmaDuAdjType = 71;\r
2213                                         }\r
2214                                         else if(pCoexDm->curPsTdma == 12)\r
2215                                         {\r
2216                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2217                                                 pCoexDm->psTdmaDuAdjType = 11;\r
2218                                         }\r
2219                                         else if(pCoexDm->curPsTdma == 11)\r
2220                                         {\r
2221                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);\r
2222                                                 pCoexDm->psTdmaDuAdjType = 10;\r
2223                                         }\r
2224                                         else if(pCoexDm->curPsTdma == 10)\r
2225                                         {\r
2226                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);\r
2227                                                 pCoexDm->psTdmaDuAdjType = 9;\r
2228                                         }\r
2229                                 }\r
2230                         }\r
2231                 }\r
2232                 else if(maxInterval == 2)\r
2233                 {\r
2234                         if(bTxPause)\r
2235                         {\r
2236                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 1\n"));\r
2237                                 if(pCoexDm->curPsTdma == 1)\r
2238                                 {\r
2239                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
2240                                         pCoexDm->psTdmaDuAdjType = 6;\r
2241                                 }\r
2242                                 else if(pCoexDm->curPsTdma == 2)\r
2243                                 {\r
2244                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
2245                                         pCoexDm->psTdmaDuAdjType = 6;\r
2246                                 }\r
2247                                 else if(pCoexDm->curPsTdma == 3)\r
2248                                 {\r
2249                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2250                                         pCoexDm->psTdmaDuAdjType = 7;\r
2251                                 }\r
2252                                 else if(pCoexDm->curPsTdma == 4)\r
2253                                 {\r
2254                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 8);\r
2255                                         pCoexDm->psTdmaDuAdjType = 8;\r
2256                                 }\r
2257                                 if(pCoexDm->curPsTdma == 9)\r
2258                                 {\r
2259                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);\r
2260                                         pCoexDm->psTdmaDuAdjType = 14;\r
2261                                 }\r
2262                                 else if(pCoexDm->curPsTdma == 10)\r
2263                                 {\r
2264                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);\r
2265                                         pCoexDm->psTdmaDuAdjType = 14;\r
2266                                 }\r
2267                                 else if(pCoexDm->curPsTdma == 11)\r
2268                                 {\r
2269                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2270                                         pCoexDm->psTdmaDuAdjType = 15;\r
2271                                 }\r
2272                                 else if(pCoexDm->curPsTdma == 12)\r
2273                                 {\r
2274                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 16);\r
2275                                         pCoexDm->psTdmaDuAdjType = 16;\r
2276                                 }\r
2277                                 if(result == -1)\r
2278                                 {\r
2279                                         if(pCoexDm->curPsTdma == 5) \r
2280                                         {\r
2281                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
2282                                                 pCoexDm->psTdmaDuAdjType = 6;\r
2283                                         }\r
2284                                         else if(pCoexDm->curPsTdma == 6)\r
2285                                         {\r
2286                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2287                                                 pCoexDm->psTdmaDuAdjType = 7;\r
2288                                         }\r
2289                                         else if(pCoexDm->curPsTdma == 7)\r
2290                                         {\r
2291                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 8);\r
2292                                                 pCoexDm->psTdmaDuAdjType = 8;\r
2293                                         }\r
2294                                         else if(pCoexDm->curPsTdma == 13)\r
2295                                         {\r
2296                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);\r
2297                                                 pCoexDm->psTdmaDuAdjType = 14;\r
2298                                         }\r
2299                                         else if(pCoexDm->curPsTdma == 14)\r
2300                                         {\r
2301                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2302                                                 pCoexDm->psTdmaDuAdjType = 15;\r
2303                                         }\r
2304                                         else if(pCoexDm->curPsTdma == 15)\r
2305                                         {\r
2306                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 16);\r
2307                                                 pCoexDm->psTdmaDuAdjType = 16;\r
2308                                         }\r
2309                                 } \r
2310                                 else if (result == 1)\r
2311                                 {\r
2312                                         if(pCoexDm->curPsTdma == 8)\r
2313                                         {\r
2314                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2315                                                 pCoexDm->psTdmaDuAdjType = 7;\r
2316                                         }\r
2317                                         else if(pCoexDm->curPsTdma == 7)\r
2318                                         {\r
2319                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
2320                                                 pCoexDm->psTdmaDuAdjType = 6;\r
2321                                         }\r
2322                                         else if(pCoexDm->curPsTdma == 6)\r
2323                                         {\r
2324                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
2325                                                 pCoexDm->psTdmaDuAdjType = 6;\r
2326                                         }                                       \r
2327                                         else if(pCoexDm->curPsTdma == 16)\r
2328                                         {\r
2329                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2330                                                 pCoexDm->psTdmaDuAdjType = 15;\r
2331                                         }\r
2332                                         else if(pCoexDm->curPsTdma == 15)\r
2333                                         {\r
2334                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);\r
2335                                                 pCoexDm->psTdmaDuAdjType = 14;\r
2336                                         }\r
2337                                         else if(pCoexDm->curPsTdma == 14)\r
2338                                         {\r
2339                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);\r
2340                                                 pCoexDm->psTdmaDuAdjType = 14;\r
2341                                         }\r
2342                                 }\r
2343                         }\r
2344                         else\r
2345                         {\r
2346                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 0\n"));\r
2347                                 if(pCoexDm->curPsTdma == 5)\r
2348                                 {\r
2349                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
2350                                         pCoexDm->psTdmaDuAdjType = 2;\r
2351                                 }\r
2352                                 else if(pCoexDm->curPsTdma == 6)\r
2353                                 {\r
2354                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
2355                                         pCoexDm->psTdmaDuAdjType = 2;\r
2356                                 }\r
2357                                 else if(pCoexDm->curPsTdma == 7)\r
2358                                 {\r
2359                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2360                                         pCoexDm->psTdmaDuAdjType = 3;\r
2361                                 }\r
2362                                 else if(pCoexDm->curPsTdma == 8)\r
2363                                 {\r
2364                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 4);\r
2365                                         pCoexDm->psTdmaDuAdjType = 4;\r
2366                                 }\r
2367                                 if(pCoexDm->curPsTdma == 13)\r
2368                                 {\r
2369                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);\r
2370                                         pCoexDm->psTdmaDuAdjType = 10;\r
2371                                 }\r
2372                                 else if(pCoexDm->curPsTdma == 14)\r
2373                                 {\r
2374                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);\r
2375                                         pCoexDm->psTdmaDuAdjType = 10;\r
2376                                 }\r
2377                                 else if(pCoexDm->curPsTdma == 15)\r
2378                                 {\r
2379                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2380                                         pCoexDm->psTdmaDuAdjType = 11;\r
2381                                 }\r
2382                                 else if(pCoexDm->curPsTdma == 16)\r
2383                                 {\r
2384                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 12);\r
2385                                         pCoexDm->psTdmaDuAdjType = 12;\r
2386                                 }\r
2387                                 if(result == -1)\r
2388                                 {\r
2389                                         if(pCoexDm->curPsTdma == 1)\r
2390                                         {\r
2391                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
2392                                                 pCoexDm->psTdmaDuAdjType = 2;\r
2393                                         }\r
2394                                         else if(pCoexDm->curPsTdma == 2)\r
2395                                         {\r
2396                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2397                                                 pCoexDm->psTdmaDuAdjType = 3;\r
2398                                         }\r
2399                                         else if(pCoexDm->curPsTdma == 3)\r
2400                                         {\r
2401                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 4);\r
2402                                                 pCoexDm->psTdmaDuAdjType = 4;\r
2403                                         }\r
2404                                         else if(pCoexDm->curPsTdma == 9)\r
2405                                         {\r
2406                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);\r
2407                                                 pCoexDm->psTdmaDuAdjType = 10;\r
2408                                         }\r
2409                                         else if(pCoexDm->curPsTdma == 10)\r
2410                                         {\r
2411                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2412                                                 pCoexDm->psTdmaDuAdjType = 11;\r
2413                                         }\r
2414                                         else if(pCoexDm->curPsTdma == 11)\r
2415                                         {\r
2416                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 12);\r
2417                                                 pCoexDm->psTdmaDuAdjType = 12;\r
2418                                         }\r
2419                                 } \r
2420                                 else if (result == 1)\r
2421                                 {\r
2422                                         if(pCoexDm->curPsTdma == 4)\r
2423                                         {\r
2424                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2425                                                 pCoexDm->psTdmaDuAdjType = 3;\r
2426                                         }\r
2427                                         else if(pCoexDm->curPsTdma == 3)\r
2428                                         {\r
2429                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
2430                                                 pCoexDm->psTdmaDuAdjType = 2;\r
2431                                         }\r
2432                                         else if(pCoexDm->curPsTdma == 2)\r
2433                                         {\r
2434                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
2435                                                 pCoexDm->psTdmaDuAdjType = 2;\r
2436                                         }\r
2437                                         else if(pCoexDm->curPsTdma == 12)\r
2438                                         {\r
2439                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2440                                                 pCoexDm->psTdmaDuAdjType = 11;\r
2441                                         }\r
2442                                         else if(pCoexDm->curPsTdma == 11)\r
2443                                         {\r
2444                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);\r
2445                                                 pCoexDm->psTdmaDuAdjType = 10;\r
2446                                         }\r
2447                                         else if(pCoexDm->curPsTdma == 10)\r
2448                                         {\r
2449                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);\r
2450                                                 pCoexDm->psTdmaDuAdjType = 10;\r
2451                                         }\r
2452                                 }\r
2453                         }\r
2454                 }\r
2455                 else if(maxInterval == 3)\r
2456                 {\r
2457                         if(bTxPause)\r
2458                         {\r
2459                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 1\n"));\r
2460                                 if(pCoexDm->curPsTdma == 1)\r
2461                                 {\r
2462                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2463                                         pCoexDm->psTdmaDuAdjType = 7;\r
2464                                 }\r
2465                                 else if(pCoexDm->curPsTdma == 2)\r
2466                                 {\r
2467                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2468                                         pCoexDm->psTdmaDuAdjType = 7;\r
2469                                 }\r
2470                                 else if(pCoexDm->curPsTdma == 3)\r
2471                                 {\r
2472                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2473                                         pCoexDm->psTdmaDuAdjType = 7;\r
2474                                 }\r
2475                                 else if(pCoexDm->curPsTdma == 4)\r
2476                                 {\r
2477                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 8);\r
2478                                         pCoexDm->psTdmaDuAdjType = 8;\r
2479                                 }\r
2480                                 if(pCoexDm->curPsTdma == 9)\r
2481                                 {\r
2482                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2483                                         pCoexDm->psTdmaDuAdjType = 15;\r
2484                                 }\r
2485                                 else if(pCoexDm->curPsTdma == 10)\r
2486                                 {\r
2487                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2488                                         pCoexDm->psTdmaDuAdjType = 15;\r
2489                                 }\r
2490                                 else if(pCoexDm->curPsTdma == 11)\r
2491                                 {\r
2492                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2493                                         pCoexDm->psTdmaDuAdjType = 15;\r
2494                                 }\r
2495                                 else if(pCoexDm->curPsTdma == 12)\r
2496                                 {\r
2497                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 16);\r
2498                                         pCoexDm->psTdmaDuAdjType = 16;\r
2499                                 }\r
2500                                 if(result == -1)\r
2501                                 {\r
2502                                         if(pCoexDm->curPsTdma == 5) \r
2503                                         {\r
2504                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2505                                                 pCoexDm->psTdmaDuAdjType = 7;\r
2506                                         }\r
2507                                         else if(pCoexDm->curPsTdma == 6)\r
2508                                         {\r
2509                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2510                                                 pCoexDm->psTdmaDuAdjType = 7;\r
2511                                         }\r
2512                                         else if(pCoexDm->curPsTdma == 7)\r
2513                                         {\r
2514                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 8);\r
2515                                                 pCoexDm->psTdmaDuAdjType = 8;\r
2516                                         }\r
2517                                         else if(pCoexDm->curPsTdma == 13)\r
2518                                         {\r
2519                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2520                                                 pCoexDm->psTdmaDuAdjType = 15;\r
2521                                         }\r
2522                                         else if(pCoexDm->curPsTdma == 14)\r
2523                                         {\r
2524                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2525                                                 pCoexDm->psTdmaDuAdjType = 15;\r
2526                                         }\r
2527                                         else if(pCoexDm->curPsTdma == 15)\r
2528                                         {\r
2529                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 16);\r
2530                                                 pCoexDm->psTdmaDuAdjType = 16;\r
2531                                         }\r
2532                                 } \r
2533                                 else if (result == 1)\r
2534                                 {\r
2535                                         if(pCoexDm->curPsTdma == 8)\r
2536                                         {\r
2537                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2538                                                 pCoexDm->psTdmaDuAdjType = 7;\r
2539                                         }\r
2540                                         else if(pCoexDm->curPsTdma == 7)\r
2541                                         {\r
2542                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2543                                                 pCoexDm->psTdmaDuAdjType = 7;\r
2544                                         }\r
2545                                         else if(pCoexDm->curPsTdma == 6)\r
2546                                         {\r
2547                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2548                                                 pCoexDm->psTdmaDuAdjType = 7;\r
2549                                         }                                       \r
2550                                         else if(pCoexDm->curPsTdma == 16)\r
2551                                         {\r
2552                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2553                                                 pCoexDm->psTdmaDuAdjType = 15;\r
2554                                         }\r
2555                                         else if(pCoexDm->curPsTdma == 15)\r
2556                                         {\r
2557                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2558                                                 pCoexDm->psTdmaDuAdjType = 15;\r
2559                                         }\r
2560                                         else if(pCoexDm->curPsTdma == 14)\r
2561                                         {\r
2562                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2563                                                 pCoexDm->psTdmaDuAdjType = 15;\r
2564                                         }\r
2565                                 }\r
2566                         }\r
2567                         else\r
2568                         {\r
2569                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 0\n"));\r
2570                                 if(pCoexDm->curPsTdma == 5)\r
2571                                 {\r
2572                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2573                                         pCoexDm->psTdmaDuAdjType = 3;\r
2574                                 }\r
2575                                 else if(pCoexDm->curPsTdma == 6)\r
2576                                 {\r
2577                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2578                                         pCoexDm->psTdmaDuAdjType = 3;\r
2579                                 }\r
2580                                 else if(pCoexDm->curPsTdma == 7)\r
2581                                 {\r
2582                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2583                                         pCoexDm->psTdmaDuAdjType = 3;\r
2584                                 }\r
2585                                 else if(pCoexDm->curPsTdma == 8)\r
2586                                 {\r
2587                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 4);\r
2588                                         pCoexDm->psTdmaDuAdjType = 4;\r
2589                                 }\r
2590                                 if(pCoexDm->curPsTdma == 13)\r
2591                                 {\r
2592                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2593                                         pCoexDm->psTdmaDuAdjType = 11;\r
2594                                 }\r
2595                                 else if(pCoexDm->curPsTdma == 14)\r
2596                                 {\r
2597                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2598                                         pCoexDm->psTdmaDuAdjType = 11;\r
2599                                 }\r
2600                                 else if(pCoexDm->curPsTdma == 15)\r
2601                                 {\r
2602                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2603                                         pCoexDm->psTdmaDuAdjType = 11;\r
2604                                 }\r
2605                                 else if(pCoexDm->curPsTdma == 16)\r
2606                                 {\r
2607                                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 12);\r
2608                                         pCoexDm->psTdmaDuAdjType = 12;\r
2609                                 }\r
2610                                 if(result == -1)\r
2611                                 {\r
2612                                         if(pCoexDm->curPsTdma == 1)\r
2613                                         {\r
2614                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2615                                                 pCoexDm->psTdmaDuAdjType = 3;\r
2616                                         }\r
2617                                         else if(pCoexDm->curPsTdma == 2)\r
2618                                         {\r
2619                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2620                                                 pCoexDm->psTdmaDuAdjType = 3;\r
2621                                         }\r
2622                                         else if(pCoexDm->curPsTdma == 3)\r
2623                                         {\r
2624                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 4);\r
2625                                                 pCoexDm->psTdmaDuAdjType = 4;\r
2626                                         }\r
2627                                         else if(pCoexDm->curPsTdma == 9)\r
2628                                         {\r
2629                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2630                                                 pCoexDm->psTdmaDuAdjType = 11;\r
2631                                         }\r
2632                                         else if(pCoexDm->curPsTdma == 10)\r
2633                                         {\r
2634                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2635                                                 pCoexDm->psTdmaDuAdjType = 11;\r
2636                                         }\r
2637                                         else if(pCoexDm->curPsTdma == 11)\r
2638                                         {\r
2639                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 12);\r
2640                                                 pCoexDm->psTdmaDuAdjType = 12;\r
2641                                         }\r
2642                                 } \r
2643                                 else if (result == 1)\r
2644                                 {\r
2645                                         if(pCoexDm->curPsTdma == 4)\r
2646                                         {\r
2647                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2648                                                 pCoexDm->psTdmaDuAdjType = 3;\r
2649                                         }\r
2650                                         else if(pCoexDm->curPsTdma == 3)\r
2651                                         {\r
2652                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2653                                                 pCoexDm->psTdmaDuAdjType = 3;\r
2654                                         }\r
2655                                         else if(pCoexDm->curPsTdma == 2)\r
2656                                         {\r
2657                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2658                                                 pCoexDm->psTdmaDuAdjType = 3;\r
2659                                         }\r
2660                                         else if(pCoexDm->curPsTdma == 12)\r
2661                                         {\r
2662                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2663                                                 pCoexDm->psTdmaDuAdjType = 11;\r
2664                                         }\r
2665                                         else if(pCoexDm->curPsTdma == 11)\r
2666                                         {\r
2667                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2668                                                 pCoexDm->psTdmaDuAdjType = 11;\r
2669                                         }\r
2670                                         else if(pCoexDm->curPsTdma == 10)\r
2671                                         {\r
2672                                                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2673                                                 pCoexDm->psTdmaDuAdjType = 11;\r
2674                                         }\r
2675                                 }\r
2676                         }\r
2677                 }\r
2678         }\r
2679 \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
2683         {\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
2687 \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
2691                 \r
2692                 if( !bScan && !bLink && !bRoam)\r
2693                 {\r
2694                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, pCoexDm->psTdmaDuAdjType);\r
2695                 }\r
2696                 else\r
2697                 {\r
2698                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], roaming/link/scan is under progress, will adjust next time!!!\n"));\r
2699                 }\r
2700         }\r
2701 \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
2705         //else\r
2706                 halbtc8821aCsr2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 0x6);\r
2707 }\r
2708 \r
2709 // SCO only or SCO+PAN(HS)\r
2710 VOID\r
2711 halbtc8821aCsr2ant_ActionSco(\r
2712         IN      PBTC_COEXIST            pBtCoexist\r
2713         )\r
2714 {\r
2715         u1Byte  wifiRssiState,btRssiState;\r
2716         u4Byte  wifiBw;\r
2717 \r
2718         halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55555555, 0x55555555, 0xffffff, 0x3);\r
2719         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0);\r
2720 \r
2721         halbtc8821aCsr2ant_LowPenaltyRa(pBtCoexist, NORMAL_EXEC, TRUE);\r
2722 \r
2723         halbtc8821aCsr2ant_LimitedTx(pBtCoexist, NORMAL_EXEC, 0, 1, 0, 2, 0);\r
2724 \r
2725         if(pCoexSta->bSlave == FALSE)\r
2726                 halbtc8821aCsr2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, TRUE, 0x4);\r
2727         else\r
2728                 halbtc8821aCsr2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, TRUE, 0x2);\r
2729 \r
2730 /*\r
2731         wifiRssiState = halbtc8821aCsr2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
2732         btRssiState = halbtc8821aCsr2ant_BtRssiState(2, 35, 0);\r
2733 \r
2734         halbtc8821aCsr2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 4);\r
2735 \r
2736         if(halbtc8821aCsr2ant_NeedToDecBtPwr(pBtCoexist))\r
2737                 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);\r
2738         else    \r
2739                 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
2740         \r
2741         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
2742 \r
2743         if (BTC_WIFI_BW_LEGACY == wifiBw) //for SCO quality at 11b/g mode\r
2744         {\r
2745                 halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x5a5a5a5a, 0x5a5a5a5a, 0xffff, 0x3);\r
2746         }\r
2747         else  //for SCO quality & wifi performance balance at 11n mode\r
2748         {\r
2749                 halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x5aea5aea, 0x5aea5aea, 0xffff, 0x3);\r
2750         }\r
2751 \r
2752         if(BTC_WIFI_BW_HT40 == wifiBw)\r
2753         {\r
2754         \r
2755                 // fw mechanism\r
2756                 //halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);\r
2757 \r
2758                 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
2759                         (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
2760                 {\r
2761                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0); //for voice quality\r
2762                 }\r
2763                 else\r
2764                 {\r
2765                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0); //for voice quality\r
2766                 }\r
2767 \r
2768                 // sw mechanism\r
2769                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
2770                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
2771                 {\r
2772                         halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
2773                         halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);                      \r
2774                 }\r
2775                 else\r
2776                 {\r
2777                         halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
2778                         halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);     \r
2779                 }               \r
2780         }\r
2781         else\r
2782         {\r
2783                 // fw mechanism\r
2784                 //halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);\r
2785 \r
2786                 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
2787                         (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
2788                 {\r
2789                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0); //for voice quality\r
2790                 }\r
2791                 else\r
2792                 {\r
2793                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0); //for voice quality\r
2794                 }\r
2795                 \r
2796                 // sw mechanism\r
2797                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
2798                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
2799                 {\r
2800                          halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
2801                          halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
2802                 }\r
2803                 else\r
2804                 {\r
2805                          halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
2806                          halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
2807                 }               \r
2808         }\r
2809 */\r
2810 }\r
2811 \r
2812 \r
2813 VOID\r
2814 halbtc8821aCsr2ant_ActionHid(\r
2815         IN      PBTC_COEXIST            pBtCoexist\r
2816         )\r
2817 {\r
2818         u1Byte  wifiRssiState, btRssiState;     \r
2819         u4Byte  wifiBw;\r
2820 \r
2821         wifiRssiState = halbtc8821aCsr2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
2822         btRssiState = halbtc8821aCsr2ant_BtRssiState(2, 35, 0);\r
2823 \r
2824         halbtc8821aCsr2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
2825 \r
2826         if(halbtc8821aCsr2ant_NeedToDecBtPwr(pBtCoexist))\r
2827                 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);\r
2828         else    \r
2829                 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
2830 \r
2831         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
2832 \r
2833         if (BTC_WIFI_BW_LEGACY == wifiBw) //for HID at 11b/g mode\r
2834         {\r
2835                 halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5a5a5a5a, 0xffff, 0x3);\r
2836         }\r
2837         else  //for HID quality & wifi performance balance at 11n mode\r
2838         {\r
2839                 halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5aea5aea, 0xffff, 0x3);\r
2840         }\r
2841 \r
2842         if(BTC_WIFI_BW_HT40 == wifiBw)\r
2843         {\r
2844                 // fw mechanism\r
2845                 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
2846                         (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
2847                 {\r
2848                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);\r
2849                 }\r
2850                 else\r
2851                 {\r
2852                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 13);\r
2853                 }\r
2854 \r
2855                 // sw mechanism\r
2856                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
2857                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
2858                 {\r
2859                          halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
2860                          halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
2861                 }\r
2862                 else\r
2863                 {\r
2864                          halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
2865                          halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
2866                 }       \r
2867         }\r
2868         else\r
2869         {\r
2870                 // fw mechanism\r
2871                 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
2872                         (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
2873                 {\r
2874                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);\r
2875                 }\r
2876                 else\r
2877                 {\r
2878                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 13);\r
2879                 }\r
2880 \r
2881                 // sw mechanism\r
2882                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
2883                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
2884                 {\r
2885                          halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
2886                          halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
2887                 }\r
2888                 else\r
2889                 {\r
2890                          halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
2891                          halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
2892                 }               \r
2893         }\r
2894 }\r
2895 \r
2896 //A2DP only / PAN(EDR) only/ A2DP+PAN(HS)\r
2897 VOID\r
2898 halbtc8821aCsr2ant_ActionA2dp(\r
2899         IN      PBTC_COEXIST            pBtCoexist\r
2900         )\r
2901 {\r
2902         u1Byte          wifiRssiState, btRssiState;\r
2903         u4Byte          wifiBw;\r
2904 \r
2905         halbtc8821aCsr2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, TRUE, 0x8);\r
2906 \r
2907         if(pCoexSta->bSlave == FALSE)\r
2908         {\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
2913         }\r
2914         else\r
2915         {\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
2920         }\r
2921 \r
2922 /*\r
2923         wifiRssiState = halbtc8821aCsr2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
2924         btRssiState = halbtc8821aCsr2ant_BtRssiState(2, 35, 0);\r
2925 \r
2926         //fw dac swing is called in halbtc8821aCsr2ant_TdmaDurationAdjust()\r
2927         //halbtc8821aCsr2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
2928         \r
2929 \r
2930         if(halbtc8821aCsr2ant_NeedToDecBtPwr(pBtCoexist))\r
2931                 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);\r
2932         else    \r
2933                 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
2934 \r
2935         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
2936 \r
2937         if(BTC_WIFI_BW_HT40 == wifiBw)\r
2938         {\r
2939                 // fw mechanism\r
2940                 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
2941                         (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
2942                 {\r
2943                         halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 1);\r
2944                 }\r
2945                 else\r
2946                 {\r
2947                         halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 1);\r
2948                 }\r
2949 \r
2950                 // sw mechanism\r
2951                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
2952                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
2953                 {\r
2954                          halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
2955                          halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
2956                 }\r
2957                 else\r
2958                 {\r
2959                          halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
2960                          halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
2961                 }\r
2962         }\r
2963         else\r
2964         {\r
2965                 // fw mechanism\r
2966                 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
2967                         (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
2968                 {\r
2969                         halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 1);\r
2970                 }\r
2971                 else\r
2972                 {\r
2973                         halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 1);\r
2974                 }\r
2975                 \r
2976                 // sw mechanism\r
2977                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
2978                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
2979                 {\r
2980                          halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
2981                          halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
2982                 }\r
2983                 else\r
2984                 {\r
2985                          halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
2986                          halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
2987                 }               \r
2988         }\r
2989 */\r
2990 }\r
2991 \r
2992 VOID\r
2993 halbtc8821aCsr2ant_ActionA2dpPanHs(\r
2994         IN      PBTC_COEXIST            pBtCoexist\r
2995         )\r
2996 {\r
2997         u1Byte          wifiRssiState, btRssiState, btInfoExt;\r
2998         u4Byte          wifiBw;\r
2999 \r
3000         btInfoExt = pCoexSta->btInfoExt;\r
3001         wifiRssiState = halbtc8821aCsr2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
3002         btRssiState = halbtc8821aCsr2ant_BtRssiState(2,35, 0);\r
3003 \r
3004         //fw dac swing is called in halbtc8821aCsr2ant_TdmaDurationAdjust()\r
3005         //halbtc8821aCsr2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
3006 \r
3007 \r
3008         if(halbtc8821aCsr2ant_NeedToDecBtPwr(pBtCoexist))\r
3009                 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);\r
3010         else    \r
3011                 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
3012 \r
3013         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
3014 \r
3015         if(BTC_WIFI_BW_HT40 == wifiBw)\r
3016         {\r
3017                 // fw mechanism\r
3018                 if(btInfoExt&BIT0)      //a2dp basic rate\r
3019                 {\r
3020                         halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 2);\r
3021                 }\r
3022                 else                            //a2dp edr rate\r
3023                 {\r
3024                         halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 1);\r
3025                 }\r
3026 \r
3027                 // sw mechanism\r
3028                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3029                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3030                 {\r
3031                          halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
3032                          halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3033                 }\r
3034                 else\r
3035                 {\r
3036                          halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
3037                          halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3038                 }\r
3039         }\r
3040         else\r
3041         {\r
3042                 // fw mechanism\r
3043                 if(btInfoExt&BIT0)      //a2dp basic rate\r
3044                 {\r
3045                         halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 2);\r
3046                 }\r
3047                 else                            //a2dp edr rate\r
3048                 {\r
3049                         halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 1);\r
3050                 }\r
3051                 \r
3052                 // sw mechanism\r
3053                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3054                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3055                 {\r
3056                          halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
3057                          halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3058                 }\r
3059                 else\r
3060                 {\r
3061                          halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
3062                          halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3063                 }               \r
3064         }\r
3065 }\r
3066 \r
3067 VOID\r
3068 halbtc8821aCsr2ant_ActionPanEdr(\r
3069         IN      PBTC_COEXIST            pBtCoexist\r
3070         )\r
3071 {\r
3072         u1Byte          wifiRssiState, btRssiState;\r
3073         u4Byte          wifiBw;\r
3074 \r
3075         wifiRssiState = halbtc8821aCsr2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
3076         btRssiState = halbtc8821aCsr2ant_BtRssiState(2, 35, 0);\r
3077 \r
3078         halbtc8821aCsr2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
3079 \r
3080         if(halbtc8821aCsr2ant_NeedToDecBtPwr(pBtCoexist))\r
3081                 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);\r
3082         else    \r
3083                 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
3084 \r
3085         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
3086 \r
3087         if (BTC_WIFI_BW_LEGACY == wifiBw) //for HID at 11b/g mode\r
3088         {\r
3089                 halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5aff5aff, 0xffff, 0x3);\r
3090         }\r
3091         else  //for HID quality & wifi performance balance at 11n mode\r
3092         {\r
3093                 halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5aff5aff, 0xffff, 0x3);\r
3094         }\r
3095 \r
3096         if(BTC_WIFI_BW_HT40 == wifiBw)\r
3097         {\r
3098                 // fw mechanism\r
3099                 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
3100                         (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3101                 {\r
3102                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);\r
3103                 }\r
3104                 else\r
3105                 {\r
3106                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);\r
3107                 }\r
3108 \r
3109                 // sw mechanism\r
3110                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3111                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3112                 {\r
3113                          halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
3114                          halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3115                 }\r
3116                 else\r
3117                 {\r
3118                          halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
3119                          halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3120                 }\r
3121         }\r
3122         else\r
3123         {\r
3124                 // fw mechanism\r
3125                 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
3126                         (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3127                 {\r
3128                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);\r
3129                 }\r
3130                 else\r
3131                 {\r
3132                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);\r
3133                 }\r
3134 \r
3135                 // sw mechanism\r
3136                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3137                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3138                 {\r
3139                          halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
3140                          halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3141                 }\r
3142                 else\r
3143                 {\r
3144                          halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
3145                          halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3146                 }\r
3147         }\r
3148 }\r
3149 \r
3150 \r
3151 //PAN(HS) only\r
3152 VOID\r
3153 halbtc8821aCsr2ant_ActionPanHs(\r
3154         IN      PBTC_COEXIST            pBtCoexist\r
3155         )\r
3156 {\r
3157         u1Byte          wifiRssiState, btRssiState;\r
3158         u4Byte          wifiBw;\r
3159 \r
3160         wifiRssiState = halbtc8821aCsr2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
3161         btRssiState = halbtc8821aCsr2ant_BtRssiState(2, 35, 0);\r
3162 \r
3163         halbtc8821aCsr2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
3164 \r
3165         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
3166 \r
3167         if(BTC_WIFI_BW_HT40 == wifiBw)\r
3168         {\r
3169                 // fw mechanism\r
3170                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3171                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3172                 {\r
3173                         halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);\r
3174                 }\r
3175                 else\r
3176                 {\r
3177                         halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
3178                 }\r
3179                 halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
3180 \r
3181                 // sw mechanism\r
3182                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3183                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3184                 {\r
3185                          halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
3186                          halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3187                 }\r
3188                 else\r
3189                 {\r
3190                          halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
3191                          halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3192                 }\r
3193         }\r
3194         else\r
3195         {\r
3196                 // fw mechanism\r
3197                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3198                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3199                 {\r
3200                         halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);\r
3201                 }\r
3202                 else\r
3203                 {\r
3204                         halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
3205                 }\r
3206 \r
3207                 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
3208                         (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3209                 {\r
3210                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
3211                 }\r
3212                 else\r
3213                 {\r
3214                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
3215                 }\r
3216 \r
3217                 // sw mechanism\r
3218                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3219                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3220                 {\r
3221                          halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
3222                          halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3223                 }\r
3224                 else\r
3225                 {\r
3226                          halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
3227                          halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3228                 }\r
3229         }\r
3230 }\r
3231 \r
3232 //PAN(EDR)+A2DP\r
3233 VOID\r
3234 halbtc8821aCsr2ant_ActionPanEdrA2dp(\r
3235         IN      PBTC_COEXIST            pBtCoexist\r
3236         )\r
3237 {\r
3238         u1Byte          wifiRssiState, btRssiState, btInfoExt;\r
3239         u4Byte          wifiBw;\r
3240 \r
3241         btInfoExt = pCoexSta->btInfoExt;\r
3242         wifiRssiState = halbtc8821aCsr2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
3243         btRssiState = halbtc8821aCsr2ant_BtRssiState(2, 35, 0);\r
3244 \r
3245         halbtc8821aCsr2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
3246 \r
3247         if(halbtc8821aCsr2ant_NeedToDecBtPwr(pBtCoexist))\r
3248                 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);\r
3249         else    \r
3250                 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
3251 \r
3252         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
3253 \r
3254         if (BTC_WIFI_BW_LEGACY == wifiBw) //for HID at 11b/g mode\r
3255         {\r
3256                 halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5afa5afa, 0xffff, 0x3);\r
3257         }\r
3258         else  //for HID quality & wifi performance balance at 11n mode\r
3259         {\r
3260                 halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5afa5afa, 0xffff, 0x3);\r
3261         }\r
3262 \r
3263         if(BTC_WIFI_BW_HT40 == wifiBw)\r
3264         {\r
3265                 // fw mechanism\r
3266                 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
3267                         (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3268                 {\r
3269                         if(btInfoExt&BIT0)      //a2dp basic rate\r
3270                         {\r
3271                                 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 3);\r
3272                         }\r
3273                         else                            //a2dp edr rate\r
3274                         {\r
3275                                 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 3);\r
3276                         }\r
3277                 }\r
3278                 else\r
3279                 {\r
3280                         if(btInfoExt&BIT0)      //a2dp basic rate\r
3281                         {\r
3282                                 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 3);\r
3283                         }\r
3284                         else                            //a2dp edr rate\r
3285                         {\r
3286                                 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 3);\r
3287                         }\r
3288                 }\r
3289 \r
3290                 // sw mechanism\r
3291                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3292                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3293                 {\r
3294                          halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
3295                          halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3296                 }\r
3297                 else\r
3298                 {\r
3299                          halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
3300                          halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3301                 };\r
3302         }\r
3303         else\r
3304         {\r
3305                 // fw mechanism\r
3306                 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
3307                         (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3308                 {\r
3309                         if(btInfoExt&BIT0)      //a2dp basic rate\r
3310                         {\r
3311                                 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 3);\r
3312                         }\r
3313                         else                            //a2dp edr rate\r
3314                         {\r
3315                                 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 3);\r
3316                         }\r
3317                 }\r
3318                 else\r
3319                 {\r
3320                         if(btInfoExt&BIT0)      //a2dp basic rate\r
3321                         {\r
3322                                 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 3);\r
3323                         }\r
3324                         else                            //a2dp edr rate\r
3325                         {\r
3326                                 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 3);\r
3327                         }\r
3328                 }\r
3329 \r
3330                 // sw mechanism\r
3331                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3332                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3333                 {\r
3334                         halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
3335                          halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3336                 }\r
3337                 else\r
3338                 {\r
3339                          halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
3340                          halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3341                 }\r
3342         }\r
3343 }\r
3344 \r
3345 VOID\r
3346 halbtc8821aCsr2ant_ActionPanEdrHid(\r
3347         IN      PBTC_COEXIST            pBtCoexist\r
3348         )\r
3349 {\r
3350         u1Byte          wifiRssiState, btRssiState;\r
3351         u4Byte          wifiBw;\r
3352 \r
3353         wifiRssiState = halbtc8821aCsr2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
3354         btRssiState = halbtc8821aCsr2ant_BtRssiState(2, 35, 0);\r
3355 \r
3356         halbtc8821aCsr2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
3357 \r
3358         if(halbtc8821aCsr2ant_NeedToDecBtPwr(pBtCoexist))\r
3359                 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);\r
3360         else    \r
3361                 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
3362 \r
3363         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
3364 \r
3365         if (BTC_WIFI_BW_LEGACY == wifiBw) //for HID at 11b/g mode\r
3366         {\r
3367                 halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5a5f5a5f, 0xffff, 0x3);\r
3368         }\r
3369         else  //for HID quality & wifi performance balance at 11n mode\r
3370         {\r
3371                 halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5a5f5a5f, 0xffff, 0x3);\r
3372         }\r
3373 \r
3374         if(BTC_WIFI_BW_HT40 == wifiBw)\r
3375         { \r
3376                 halbtc8821aCsr2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 3);\r
3377                 // fw mechanism\r
3378                 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
3379                         (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3380                 {\r
3381                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10); \r
3382                 }\r
3383                 else\r
3384                 {\r
3385                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14); \r
3386                 }\r
3387 \r
3388                 // sw mechanism\r
3389                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3390                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3391                 {\r
3392                          halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
3393                          halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3394                 }\r
3395                 else\r
3396                 {\r
3397                          halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
3398                          halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3399                 }\r
3400         }\r
3401         else\r
3402         {\r
3403                 halbtc8821aCsr2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
3404                 // fw mechanism\r
3405                 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
3406                         (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3407                 {\r
3408                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);\r
3409                 }\r
3410                 else\r
3411                 {\r
3412                         halbtc8821aCsr2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);\r
3413                 }\r
3414                 \r
3415                 // sw mechanism\r
3416                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3417                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3418                 {\r
3419                          halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
3420                          halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3421                 }\r
3422                 else\r
3423                 {\r
3424                          halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
3425                          halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3426                 }\r
3427         }\r
3428 }\r
3429 \r
3430 // HID+A2DP+PAN(EDR)\r
3431 VOID\r
3432 halbtc8821aCsr2ant_ActionHidA2dpPanEdr(\r
3433         IN      PBTC_COEXIST            pBtCoexist\r
3434         )\r
3435 {\r
3436         u1Byte          wifiRssiState, btRssiState, btInfoExt;\r
3437         u4Byte          wifiBw;\r
3438 \r
3439         btInfoExt = pCoexSta->btInfoExt;\r
3440         wifiRssiState = halbtc8821aCsr2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
3441         btRssiState = halbtc8821aCsr2ant_BtRssiState(2, 35, 0);\r
3442 \r
3443         halbtc8821aCsr2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
3444 \r
3445         if(halbtc8821aCsr2ant_NeedToDecBtPwr(pBtCoexist))\r
3446                 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);\r
3447         else    \r
3448                 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
3449 \r
3450         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
3451 \r
3452         if (BTC_WIFI_BW_LEGACY == wifiBw) //for HID at 11b/g mode\r
3453         {\r
3454                 halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5a5a5a5a, 0xffff, 0x3);\r
3455         }\r
3456         else  //for HID quality & wifi performance balance at 11n mode\r
3457         {\r
3458                 halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5a5a5a5a, 0xffff, 0x3);\r
3459         }\r
3460 \r
3461         if(BTC_WIFI_BW_HT40 == wifiBw)\r
3462         {\r
3463                 // fw mechanism\r
3464                 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
3465                         (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3466                 {\r
3467                         if(btInfoExt&BIT0)      //a2dp basic rate\r
3468                         {\r
3469                                 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 3);\r
3470                         }\r
3471                         else                            //a2dp edr rate\r
3472                         {\r
3473                                 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 3);\r
3474                         }\r
3475                 }\r
3476                 else\r
3477                 {\r
3478                         if(btInfoExt&BIT0)      //a2dp basic rate\r
3479                         {\r
3480                                 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 3);\r
3481                         }\r
3482                         else                            //a2dp edr rate\r
3483                         {\r
3484                                 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 3);\r
3485                         }\r
3486                 }\r
3487                 \r
3488                 // sw mechanism\r
3489                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3490                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3491                 {\r
3492                          halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
3493                          halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3494                 }\r
3495                 else\r
3496                 {\r
3497                          halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
3498                          halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3499                 }\r
3500         }\r
3501         else\r
3502         {\r
3503                 // fw mechanism\r
3504                 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
3505                         (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3506                 {\r
3507                         if(btInfoExt&BIT0)      //a2dp basic rate\r
3508                         {\r
3509                                 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, TRUE, FALSE, 3);\r
3510                         }\r
3511                         else                            //a2dp edr rate\r
3512                         {\r
3513                                 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, TRUE, FALSE, 3);\r
3514                         }\r
3515                 }\r
3516                 else\r
3517                 {\r
3518                         if(btInfoExt&BIT0)      //a2dp basic rate\r
3519                         {\r
3520                                 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 3);\r
3521                         }\r
3522                         else                            //a2dp edr rate\r
3523                         {\r
3524                                 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 3);\r
3525                         }\r
3526                 }\r
3527 \r
3528                 // sw mechanism\r
3529                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3530                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3531                 {\r
3532                          halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
3533                          halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3534                 }\r
3535                 else\r
3536                 {\r
3537                          halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
3538                          halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3539                 }\r
3540         }\r
3541 }\r
3542 \r
3543 VOID\r
3544 halbtc8821aCsr2ant_ActionHidA2dp(\r
3545         IN      PBTC_COEXIST            pBtCoexist\r
3546         )\r
3547 {\r
3548         u1Byte          wifiRssiState, btRssiState, btInfoExt;\r
3549         u4Byte          wifiBw;\r
3550 \r
3551         btInfoExt = pCoexSta->btInfoExt;\r
3552         wifiRssiState = halbtc8821aCsr2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
3553         btRssiState = halbtc8821aCsr2ant_BtRssiState(2, 35, 0);\r
3554 \r
3555         if(halbtc8821aCsr2ant_NeedToDecBtPwr(pBtCoexist))\r
3556                 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);\r
3557         else    \r
3558                 halbtc8821aCsr2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
3559 \r
3560         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
3561 \r
3562         if (BTC_WIFI_BW_LEGACY == wifiBw) //for HID at 11b/g mode\r
3563         {\r
3564 //Allen         halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5a5a5a5a, 0xffff, 0x3);\r
3565                 halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5f5b5f5b, 0xffffff, 0x3);\r
3566         }\r
3567         else  //for HID quality & wifi performance balance at 11n mode\r
3568         {\r
3569 //Allen         halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5a5a5a5a, 0xffff, 0x3);\r
3570                         halbtc8821aCsr2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5f5b5f5b, 0xffffff, 0x3);\r
3571 \r
3572         }\r
3573 \r
3574         if(BTC_WIFI_BW_HT40 == wifiBw)\r
3575         {\r
3576                 // fw mechanism\r
3577                 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
3578                         (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3579                 {\r
3580                         if(btInfoExt&BIT0)      //a2dp basic rate\r
3581                         {\r
3582                                 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);\r
3583                         }\r
3584                         else                            //a2dp edr rate\r
3585                         {\r
3586                                 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);\r
3587                         }\r
3588                 }\r
3589                 else\r
3590                 {\r
3591                         if(btInfoExt&BIT0)      //a2dp basic rate\r
3592                         {\r
3593                                 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);\r
3594                         }\r
3595                         else                            //a2dp edr rate\r
3596                         {\r
3597                                 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);\r
3598                         }\r
3599                 }\r
3600                 \r
3601                 // sw mechanism\r
3602                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3603                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3604                 {\r
3605                          halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
3606                          halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3607                 }\r
3608                 else\r
3609                 {\r
3610                          halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
3611                          halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3612                 }\r
3613         }\r
3614         else\r
3615         {\r
3616                 // fw mechanism\r
3617                 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
3618                         (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3619                 {\r
3620                         if(btInfoExt&BIT0)      //a2dp basic rate\r
3621                         {\r
3622 //                              halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, TRUE, FALSE, 2);\r
3623                                 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);\r
3624 \r
3625                         }\r
3626                         else                            //a2dp edr rate\r
3627                         {\r
3628 //Allen                         halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, TRUE, FALSE, 2);\r
3629                                 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);\r
3630                         }\r
3631                 }\r
3632                 else\r
3633                 {\r
3634                         if(btInfoExt&BIT0)      //a2dp basic rate\r
3635                         {\r
3636                                 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);\r
3637                         }\r
3638                         else                            //a2dp edr rate\r
3639                         {\r
3640                                 halbtc8821aCsr2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);\r
3641                         }\r
3642                 }\r
3643 \r
3644                 // sw mechanism\r
3645                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3646                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3647                 {\r
3648                          halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
3649                          halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3650                 }\r
3651                 else\r
3652                 {\r
3653                          halbtc8821aCsr2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
3654                          halbtc8821aCsr2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3655                 }\r
3656         }\r
3657 }\r
3658 \r
3659 VOID\r
3660 halbtc8821aCsr2ant_RunCoexistMechanism(\r
3661         IN      PBTC_COEXIST            pBtCoexist\r
3662         )\r
3663 {\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
3668 \r
3669         if(pBtCoexist->bManualControl)\r
3670         {\r
3671                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Manual control!!!\n"));\r
3672                 return;\r
3673         }\r
3674 \r
3675         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_UNDER_5G, &bWifiUnder5G);\r
3676 \r
3677         if(bWifiUnder5G)\r
3678         {\r
3679                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], RunCoexistMechanism(), run 5G coex setting!!<===\n"));\r
3680                 halbtc8821aCsr2ant_CoexUnder5G(pBtCoexist);\r
3681                 return;\r
3682         }\r
3683 \r
3684         //if(pStackInfo->bProfileNotified)\r
3685         {\r
3686                 algorithm = halbtc8821aCsr2ant_ActionAlgorithm(pBtCoexist);\r
3687                 if(pCoexSta->bC2hBtInquiryPage && (BT_8821A_CSR_2ANT_COEX_ALGO_PANHS!=algorithm))\r
3688                 {\r
3689                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT is under inquiry/page scan !!\n"));\r
3690                         halbtc8821aCsr2ant_BtInquiryPage(pBtCoexist);\r
3691                         return;\r
3692                 }\r
3693 \r
3694                 pCoexDm->curAlgorithm = algorithm;\r
3695                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Algorithm = %d \n", pCoexDm->curAlgorithm));\r
3696 \r
3697                 if(halbtc8821aCsr2ant_IsCommonAction(pBtCoexist))\r
3698                 {\r
3699                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant common.\n"));\r
3700                         pCoexDm->bResetTdmaAdjust = TRUE;\r
3701                 }\r
3702                 else\r
3703                 {\r
3704                         if(pCoexDm->curAlgorithm != pCoexDm->preAlgorithm)\r
3705                         {\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
3709                         }\r
3710                         switch(pCoexDm->curAlgorithm)\r
3711                         {\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
3715                                         break;\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
3719                                         break;\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
3723                                         break;\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
3727                                         break;\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
3731                                         break;\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
3735                                         break;\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
3739                                         break;\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
3743                                         break;\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
3747                                         break;\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
3751                                         break;\r
3752                                 default:\r
3753                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = coexist All Off!!\n"));\r
3754                                         halbtc8821aCsr2ant_CoexAllOff(pBtCoexist);\r
3755                                         break;\r
3756                         }\r
3757                         pCoexDm->preAlgorithm = pCoexDm->curAlgorithm;\r
3758                 }\r
3759         }\r
3760 }\r
3761 \r
3762 \r
3763 \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
3770 VOID\r
3771 EXhalbtc8821aCsr2ant_PowerOnSetting(\r
3772         IN      PBTC_COEXIST            pBtCoexist\r
3773         )\r
3774 {\r
3775 }\r
3776 \r
3777 VOID\r
3778 EXhalbtc8821aCsr2ant_InitHwConfig(\r
3779         IN      PBTC_COEXIST            pBtCoexist,\r
3780         IN      BOOLEAN                         bWifiOnly\r
3781         )\r
3782 {\r
3783         PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
3784         u4Byte  u4Tmp=0;\r
3785         u2Byte                          u2Tmp=0;\r
3786         u1Byte  u1Tmp=0;\r
3787         u1Byte                          H2C_Parameter[2] ={0};\r
3788                 \r
3789 \r
3790         BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], 2Ant Init HW Config!!\n"));\r
3791 \r
3792         if(bWifiOnly)\r
3793                 return;\r
3794         \r
3795         //if(bBackUp)\r
3796         {\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
3804         }\r
3805 \r
3806         #if 0 /* REMOVE */\r
3807         // 0x790[5:0]=0x5\r
3808         u1Tmp = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x790);\r
3809         u1Tmp &= 0xc0;\r
3810         u1Tmp |= 0x5;\r
3811         pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x790, u1Tmp);\r
3812         #endif\r
3813         \r
3814         //Antenna config\r
3815         halbtc8821aCsr2ant_SetAntPath(pBtCoexist, BTC_ANT_WIFI_AT_MAIN, TRUE, FALSE);\r
3816 \r
3817         // PTA parameter\r
3818         halbtc8821aCsr2ant_CoexTable(pBtCoexist, FORCE_EXEC, 0x55555555, 0x55555555, 0xffff, 0x3);\r
3819         \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
3823 \r
3824         #if 0 /* REMOVE */\r
3825         pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x40, 0x20, 0x1);\r
3826         #endif\r
3827 }\r
3828 \r
3829 VOID\r
3830 EXhalbtc8821aCsr2ant_InitCoexDm(\r
3831         IN      PBTC_COEXIST            pBtCoexist\r
3832         )\r
3833 {\r
3834         BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], Coex Mechanism Init!!\n"));\r
3835         \r
3836         halbtc8821aCsr2ant_InitCoexDm(pBtCoexist);\r
3837 }\r
3838 \r
3839 VOID\r
3840 EXhalbtc8821aCsr2ant_DisplayCoexInfo(\r
3841         IN      PBTC_COEXIST            pBtCoexist\r
3842         )\r
3843 {\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
3848         u4Byte                          u4Tmp[4];\r
3849         u4Byte                          fwVer=0, btPatchVer=0;\r
3850 \r
3851         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n ============[BT Coexist info]============");\r
3852         CL_PRINTF(cliBuf);\r
3853 \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
3857         \r
3858         if(pBtCoexist->bManualControl)\r
3859         {\r
3860                 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "[Action Manual control]!!");\r
3861                 CL_PRINTF(cliBuf);\r
3862         }\r
3863         \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
3867 \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
3873 \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
3878 \r
3879         // wifi status\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
3883 \r
3884         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[BT Status]============");\r
3885         CL_PRINTF(cliBuf);\r
3886 \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
3891         \r
3892         if(pStackInfo->bProfileNotified)\r
3893         {                       \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
3897 \r
3898                 pBtCoexist->fBtcDispDbgMsg(pBtCoexist, BTC_DBG_DISP_BT_LINK_INFO);\r
3899         }\r
3900 \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
3905 \r
3906         for(i=0; i<BT_INFO_SRC_8821A_CSR_2ANT_MAX; i++)\r
3907         {\r
3908                 if(pCoexSta->btInfoC2hCnt[i])\r
3909                 {                               \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
3916                 }\r
3917         }\r
3918 \r
3919         // Sw mechanism \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
3928 \r
3929         // Fw mechanism         \r
3930         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Fw mechanism]============");\r
3931         CL_PRINTF(cliBuf);      \r
3932         \r
3933         if(!pBtCoexist->bManualControl)\r
3934         {\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
3941         \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
3945         }\r
3946 \r
3947         // Hw setting           \r
3948         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Hw setting]============");\r
3949         CL_PRINTF(cliBuf);      \r
3950 \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
3954 \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
3960 \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
3966         \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
3971 \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
3978 \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
3984 \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
3990 \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
3997 \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
4004 \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
4011 \r
4012         pBtCoexist->fBtcDispDbgMsg(pBtCoexist, BTC_DBG_DISP_COEX_STATISTICS);\r
4013 }\r
4014 \r
4015 \r
4016 VOID\r
4017 EXhalbtc8821aCsr2ant_IpsNotify(\r
4018         IN      PBTC_COEXIST            pBtCoexist,\r
4019         IN      u1Byte                  type\r
4020         )\r
4021 {\r
4022         if(BTC_IPS_ENTER == type)\r
4023         {\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
4027         }\r
4028         else if(BTC_IPS_LEAVE == type)\r
4029         {\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
4033         }\r
4034 }\r
4035 \r
4036 VOID\r
4037 EXhalbtc8821aCsr2ant_LpsNotify(\r
4038         IN      PBTC_COEXIST            pBtCoexist,\r
4039         IN      u1Byte                  type\r
4040         )\r
4041 {\r
4042         if(BTC_LPS_ENABLE == type)\r
4043         {\r
4044                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], LPS ENABLE notify\n"));\r
4045                 pCoexSta->bUnderLps = TRUE;\r
4046         }\r
4047         else if(BTC_LPS_DISABLE == type)\r
4048         {\r
4049                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], LPS DISABLE notify\n"));\r
4050                 pCoexSta->bUnderLps = FALSE;\r
4051         }\r
4052 }\r
4053 \r
4054 VOID\r
4055 EXhalbtc8821aCsr2ant_ScanNotify(\r
4056         IN      PBTC_COEXIST            pBtCoexist,\r
4057         IN      u1Byte                  type\r
4058         )\r
4059 {\r
4060         if(BTC_SCAN_START == type)\r
4061         {\r
4062                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN START notify\n"));\r
4063         }\r
4064         else if(BTC_SCAN_FINISH == type)\r
4065         {\r
4066                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN FINISH notify\n"));\r
4067         }\r
4068 }\r
4069 \r
4070 VOID\r
4071 EXhalbtc8821aCsr2ant_ConnectNotify(\r
4072         IN      PBTC_COEXIST            pBtCoexist,\r
4073         IN      u1Byte                  type\r
4074         )\r
4075 {\r
4076         if(BTC_ASSOCIATE_START == type)\r
4077         {\r
4078                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT START notify\n"));\r
4079         }\r
4080         else if(BTC_ASSOCIATE_FINISH == type)\r
4081         {\r
4082                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT FINISH notify\n"));\r
4083         }\r
4084 }\r
4085 \r
4086 VOID\r
4087 EXhalbtc8821aCsr2ant_MediaStatusNotify(\r
4088         IN      PBTC_COEXIST                    pBtCoexist,\r
4089         IN      u1Byte                          type\r
4090         )\r
4091 {\r
4092         u1Byte                  H2C_Parameter[3] ={0};\r
4093         u4Byte                  wifiBw;\r
4094         u1Byte                  wifiCentralChnl;\r
4095 \r
4096         if(BTC_MEDIA_CONNECT == type)\r
4097         {\r
4098                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], MEDIA connect notify\n"));\r
4099         }\r
4100         else\r
4101         {\r
4102                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], MEDIA disconnect notify\n"));\r
4103         }\r
4104 \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
4109         {\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
4115                 else\r
4116                         H2C_Parameter[2] = 0x20;\r
4117         }\r
4118 \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
4123         \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
4126 \r
4127         rtw_warn_on(_BTCOEX_CSR);\r
4128         pBtCoexist->fBtcFillH2c(pBtCoexist, 0x66, 3, H2C_Parameter);\r
4129         #endif\r
4130 }\r
4131 \r
4132 VOID\r
4133 EXhalbtc8821aCsr2ant_SpecialPacketNotify(\r
4134         IN      PBTC_COEXIST                    pBtCoexist,\r
4135         IN      u1Byte                          type\r
4136         )\r
4137 {\r
4138         if(type == BTC_PACKET_DHCP)\r
4139         {\r
4140                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], DHCP Packet notify\n"));\r
4141         }\r
4142 }\r
4143 \r
4144 VOID\r
4145 EXhalbtc8821aCsr2ant_BtInfoNotify(\r
4146         IN      PBTC_COEXIST            pBtCoexist,\r
4147         IN      pu1Byte                 tmpBuf,\r
4148         IN      u1Byte                  length\r
4149         )\r
4150 {\r
4151         u1Byte                  btInfo=0;\r
4152         u1Byte                  i, rspSource=0;\r
4153         BOOLEAN                 bBtBusy=FALSE, bLimitedDig=FALSE;\r
4154         BOOLEAN                 bWifiConnected=FALSE, bBtHsOn=FALSE, bWifiUnder5G=FALSE;\r
4155 \r
4156         pCoexSta->bC2hBtInfoReqSent = FALSE;\r
4157         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_UNDER_5G, &bWifiUnder5G);\r
4158 \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
4163 \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
4166         {\r
4167                 pCoexSta->btInfoC2h[rspSource][i] = tmpBuf[i];\r
4168                 if(i == 1)\r
4169                         btInfo = tmpBuf[i];\r
4170                 if(i == length-1)\r
4171                 {\r
4172                         BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("0x%02x]\n", tmpBuf[i]));\r
4173                 }\r
4174                 else\r
4175                 {\r
4176                         BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("0x%02x, ", tmpBuf[i]));\r
4177                 }\r
4178         }\r
4179 \r
4180         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
4181         if(BT_INFO_SRC_8821A_CSR_2ANT_WIFI_FW != rspSource)\r
4182         {\r
4183                 pCoexSta->btRetryCnt =  // [3:0]\r
4184                         pCoexSta->btInfoC2h[rspSource][2]&0xf;\r
4185 \r
4186                 pCoexSta->btRssi =\r
4187                         pCoexSta->btInfoC2h[rspSource][3]*2+10;\r
4188 \r
4189                 pCoexSta->btInfoExt = \r
4190                         pCoexSta->btInfoC2h[rspSource][4];\r
4191 \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
4196                 {                       \r
4197                         \r
4198                         if(bWifiConnected)\r
4199                         {\r
4200                                 EXhalbtc8821aCsr2ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_CONNECT);\r
4201                         }\r
4202                         else\r
4203                         {\r
4204                                 EXhalbtc8821aCsr2ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_DISCONNECT);\r
4205                         }\r
4206                 }\r
4207                 #endif\r
4208 \r
4209                 #if 0 /* REMOVE */\r
4210                 if(!pBtCoexist->bManualControl && !bWifiUnder5G)\r
4211                 {\r
4212                         if( (pCoexSta->btInfoExt&BIT3) )\r
4213                         {\r
4214                                 if(bWifiConnected)\r
4215                                 {\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
4218                                 }\r
4219                         }\r
4220                         else\r
4221                         {\r
4222                                 // BT already NOT ignore Wlan active, do nothing here.\r
4223                                 if(!bWifiConnected)\r
4224                                 {\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
4227                                 }\r
4228                         }\r
4229                 }\r
4230                 #endif\r
4231 \r
4232                 #if 0 /* REMOVE */\r
4233                 if( (pCoexSta->btInfoExt & BIT4) )\r
4234                 {\r
4235                         // BT auto report already enabled, do nothing\r
4236                 }\r
4237                 else\r
4238                 {\r
4239                         halbtc8821aCsr2ant_BtAutoReport(pBtCoexist, FORCE_EXEC, TRUE);\r
4240                 }\r
4241                 #endif\r
4242         }\r
4243                 \r
4244         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
4245 \r
4246         if(btInfo == BT_INFO_8821A_CSR_2ANT_B_CONNECTION)       // connection exists but no busy\r
4247         {\r
4248                 pCoexSta->bBtLinkExist = TRUE;\r
4249                 pCoexDm->btStatus = BT_8821A_CSR_2ANT_BT_STATUS_CONNECTED_IDLE;\r
4250         }\r
4251         else if(btInfo & BT_INFO_8821A_CSR_2ANT_B_CONNECTION)   // connection exists and some link is busy\r
4252         {\r
4253                 pCoexSta->bBtLinkExist = TRUE;\r
4254 \r
4255                 if(btInfo & BT_INFO_8821A_CSR_2ANT_B_FTP)\r
4256                         pCoexSta->bPanExist = TRUE;\r
4257                 else\r
4258                         pCoexSta->bPanExist = FALSE;\r
4259 \r
4260                 if(btInfo & BT_INFO_8821A_CSR_2ANT_B_A2DP)\r
4261                         pCoexSta->bA2dpExist = TRUE;\r
4262                 else\r
4263                         pCoexSta->bA2dpExist = FALSE;\r
4264 \r
4265                 if(btInfo & BT_INFO_8821A_CSR_2ANT_B_HID)\r
4266                         pCoexSta->bHidExist = TRUE;\r
4267                 else\r
4268                         pCoexSta->bHidExist = FALSE;\r
4269 \r
4270                 if(btInfo & BT_INFO_8821A_CSR_2ANT_B_SCO_ESCO)\r
4271                         pCoexSta->bScoExist = TRUE;\r
4272                 else\r
4273                         pCoexSta->bScoExist = FALSE;\r
4274 \r
4275                 if (pCoexSta->btInfoExt & 0x80)\r
4276                         pCoexSta->bSlave = TRUE; //Slave\r
4277                 else\r
4278                         pCoexSta->bSlave = FALSE; //Master\r
4279 \r
4280                 pCoexDm->btStatus = BT_8821A_CSR_2ANT_BT_STATUS_NON_IDLE;\r
4281         }\r
4282         else\r
4283         {\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
4291         }\r
4292 \r
4293         if(bBtHsOn)\r
4294         {\r
4295                 pCoexDm->btStatus = BT_8821A_CSR_2ANT_BT_STATUS_NON_IDLE;\r
4296         }\r
4297 \r
4298         if(btInfo & BT_INFO_8821A_CSR_2ANT_B_INQ_PAGE)\r
4299         {\r
4300                 pCoexSta->bC2hBtInquiryPage = TRUE;\r
4301                 pCoexDm->btStatus = BT_8821A_CSR_2ANT_BT_STATUS_NON_IDLE;\r
4302         } \r
4303         else\r
4304         {\r
4305                 pCoexSta->bC2hBtInquiryPage = FALSE;\r
4306         }\r
4307 \r
4308 \r
4309         if(BT_8821A_CSR_2ANT_BT_STATUS_NON_IDLE == pCoexDm->btStatus)\r
4310         {\r
4311                 bBtBusy = TRUE;\r
4312         }\r
4313         else\r
4314         {\r
4315                 bBtBusy = FALSE;\r
4316         }\r
4317         pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_TRAFFIC_BUSY, &bBtBusy);\r
4318 \r
4319         if(BT_8821A_CSR_2ANT_BT_STATUS_IDLE != pCoexDm->btStatus)\r
4320         {\r
4321                 bLimitedDig = TRUE;\r
4322         }\r
4323         else\r
4324         {\r
4325                 bLimitedDig = FALSE;\r
4326         }\r
4327         pCoexDm->bLimitedDig = bLimitedDig;\r
4328         pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_LIMITED_DIG, &bLimitedDig);\r
4329 \r
4330         halbtc8821aCsr2ant_RunCoexistMechanism(pBtCoexist);\r
4331 }\r
4332 \r
4333 VOID\r
4334 EXhalbtc8821aCsr2ant_HaltNotify(\r
4335         IN      PBTC_COEXIST                    pBtCoexist\r
4336         )\r
4337 {\r
4338         BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Halt notify\n"));\r
4339 \r
4340         halbtc8821aCsr2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);\r
4341         EXhalbtc8821aCsr2ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_DISCONNECT);\r
4342 }\r
4343 \r
4344 VOID\r
4345 EXhalbtc8821aCsr2ant_PnpNotify(\r
4346         IN      PBTC_COEXIST                    pBtCoexist,\r
4347         IN      u1Byte                          pnpState\r
4348         )\r
4349 {\r
4350         BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Pnp notify\n"));\r
4351 \r
4352         if(BTC_WIFI_PNP_SLEEP == pnpState)\r
4353         {\r
4354                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Pnp notify to SLEEP\n"));\r
4355                 halbtc8821aCsr2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);\r
4356         }\r
4357         else if(BTC_WIFI_PNP_WAKE_UP == pnpState)\r
4358         {\r
4359                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Pnp notify to WAKE UP\n"));\r
4360         }\r
4361 }\r
4362 \r
4363 VOID\r
4364 EXhalbtc8821aCsr2ant_Periodical(\r
4365         IN      PBTC_COEXIST                    pBtCoexist\r
4366         )\r
4367 {\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
4372 \r
4373         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], ==========================Periodical===========================\n"));\r
4374 \r
4375         if(disVerInfoCnt <= 5)\r
4376         {\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
4388         }\r
4389 \r
4390         //halbtc8821aCsr2ant_QueryBtInfo(pBtCoexist);\r
4391         //halbtc8821aCsr2ant_RunCoexistMechanism(pBtCoexist);\r
4392         halbtc8821aCsr2ant_MonitorBtCtr(pBtCoexist);\r
4393         halbtc8821aCsr2ant_MonitorBtEnableDisable(pBtCoexist);\r
4394 }\r
4395 \r
4396 \r
4397 #endif\r
4398 \r