wifi: renew patch drivers/net/wireless
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rtl8188eu / hal / OUTSRC-BTCoexist / HalBtc8821a2Ant.c
1 //============================================================\r
2 // Description:\r
3 //\r
4 // This file is for RTL8821A 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 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 #if(BT_30_SUPPORT == 1)\r
17 //============================================================\r
18 // Global variables, these are static variables\r
19 //============================================================\r
20 static COEX_DM_8821A_2ANT       GLCoexDm8821a2Ant;\r
21 static PCOEX_DM_8821A_2ANT      pCoexDm=&GLCoexDm8821a2Ant;\r
22 static COEX_STA_8821A_2ANT      GLCoexSta8821a2Ant;\r
23 static PCOEX_STA_8821A_2ANT     pCoexSta=&GLCoexSta8821a2Ant;\r
24 \r
25 const char *const GLBtInfoSrc8821a2Ant[]={\r
26         "BT Info[wifi fw]",\r
27         "BT Info[bt rsp]",\r
28         "BT Info[bt auto report]",\r
29 };\r
30 \r
31 u4Byte  GLCoexVerDate8821a2Ant=20130618;\r
32 u4Byte  GLCoexVer8821a2Ant=0x5050;\r
33 \r
34 //============================================================\r
35 // local function proto type if needed\r
36 //============================================================\r
37 //============================================================\r
38 // local function start with halbtc8821a2ant_\r
39 //============================================================\r
40 u1Byte\r
41 halbtc8821a2ant_BtRssiState(\r
42         u1Byte                  levelNum,\r
43         u1Byte                  rssiThresh,\r
44         u1Byte                  rssiThresh1\r
45         )\r
46 {\r
47         s4Byte                  btRssi=0;\r
48         u1Byte                  btRssiState=pCoexSta->preBtRssiState;\r
49 \r
50         btRssi = pCoexSta->btRssi;\r
51 \r
52         if(levelNum == 2)\r
53         {                       \r
54                 if( (pCoexSta->preBtRssiState == BTC_RSSI_STATE_LOW) ||\r
55                         (pCoexSta->preBtRssiState == BTC_RSSI_STATE_STAY_LOW))\r
56                 {\r
57                         if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8821A_2ANT))\r
58                         {\r
59                                 btRssiState = BTC_RSSI_STATE_HIGH;\r
60                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to High\n"));\r
61                         }\r
62                         else\r
63                         {\r
64                                 btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
65                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at Low\n"));\r
66                         }\r
67                 }\r
68                 else\r
69                 {\r
70                         if(btRssi < rssiThresh)\r
71                         {\r
72                                 btRssiState = BTC_RSSI_STATE_LOW;\r
73                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Low\n"));\r
74                         }\r
75                         else\r
76                         {\r
77                                 btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
78                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at High\n"));\r
79                         }\r
80                 }\r
81         }\r
82         else if(levelNum == 3)\r
83         {\r
84                 if(rssiThresh > rssiThresh1)\r
85                 {\r
86                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi thresh error!!\n"));\r
87                         return pCoexSta->preBtRssiState;\r
88                 }\r
89                 \r
90                 if( (pCoexSta->preBtRssiState == BTC_RSSI_STATE_LOW) ||\r
91                         (pCoexSta->preBtRssiState == BTC_RSSI_STATE_STAY_LOW))\r
92                 {\r
93                         if(btRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8821A_2ANT))\r
94                         {\r
95                                 btRssiState = BTC_RSSI_STATE_MEDIUM;\r
96                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Medium\n"));\r
97                         }\r
98                         else\r
99                         {\r
100                                 btRssiState = BTC_RSSI_STATE_STAY_LOW;\r
101                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at Low\n"));\r
102                         }\r
103                 }\r
104                 else if( (pCoexSta->preBtRssiState == BTC_RSSI_STATE_MEDIUM) ||\r
105                         (pCoexSta->preBtRssiState == BTC_RSSI_STATE_STAY_MEDIUM))\r
106                 {\r
107                         if(btRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8821A_2ANT))\r
108                         {\r
109                                 btRssiState = BTC_RSSI_STATE_HIGH;\r
110                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to High\n"));\r
111                         }\r
112                         else if(btRssi < rssiThresh)\r
113                         {\r
114                                 btRssiState = BTC_RSSI_STATE_LOW;\r
115                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Low\n"));\r
116                         }\r
117                         else\r
118                         {\r
119                                 btRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
120                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at Medium\n"));\r
121                         }\r
122                 }\r
123                 else\r
124                 {\r
125                         if(btRssi < rssiThresh1)\r
126                         {\r
127                                 btRssiState = BTC_RSSI_STATE_MEDIUM;\r
128                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state switch to Medium\n"));\r
129                         }\r
130                         else\r
131                         {\r
132                                 btRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
133                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE, ("[BTCoex], BT Rssi state stay at High\n"));\r
134                         }\r
135                 }\r
136         }\r
137                 \r
138         pCoexSta->preBtRssiState = btRssiState;\r
139 \r
140         return btRssiState;\r
141 }\r
142 \r
143 u1Byte\r
144 halbtc8821a2ant_WifiRssiState(\r
145         IN      PBTC_COEXIST            pBtCoexist,\r
146         IN      u1Byte                  index,\r
147         IN      u1Byte                  levelNum,\r
148         IN      u1Byte                  rssiThresh,\r
149         IN      u1Byte                  rssiThresh1\r
150         )\r
151 {\r
152         s4Byte                  wifiRssi=0;\r
153         u1Byte                  wifiRssiState=pCoexSta->preWifiRssiState[index];\r
154 \r
155         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_S4_WIFI_RSSI, &wifiRssi);\r
156         \r
157         if(levelNum == 2)\r
158         {\r
159                 if( (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_LOW) ||\r
160                         (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_STAY_LOW))\r
161                 {\r
162                         if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8821A_2ANT))\r
163                         {\r
164                                 wifiRssiState = BTC_RSSI_STATE_HIGH;\r
165                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to High\n"));\r
166                         }\r
167                         else\r
168                         {\r
169                                 wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
170                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Low\n"));\r
171                         }\r
172                 }\r
173                 else\r
174                 {\r
175                         if(wifiRssi < rssiThresh)\r
176                         {\r
177                                 wifiRssiState = BTC_RSSI_STATE_LOW;\r
178                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Low\n"));\r
179                         }\r
180                         else\r
181                         {\r
182                                 wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
183                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at High\n"));\r
184                         }\r
185                 }\r
186         }\r
187         else if(levelNum == 3)\r
188         {\r
189                 if(rssiThresh > rssiThresh1)\r
190                 {\r
191                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI thresh error!!\n"));\r
192                         return pCoexSta->preWifiRssiState[index];\r
193                 }\r
194                 \r
195                 if( (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_LOW) ||\r
196                         (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_STAY_LOW))\r
197                 {\r
198                         if(wifiRssi >= (rssiThresh+BTC_RSSI_COEX_THRESH_TOL_8821A_2ANT))\r
199                         {\r
200                                 wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
201                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Medium\n"));\r
202                         }\r
203                         else\r
204                         {\r
205                                 wifiRssiState = BTC_RSSI_STATE_STAY_LOW;\r
206                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Low\n"));\r
207                         }\r
208                 }\r
209                 else if( (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_MEDIUM) ||\r
210                         (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_STAY_MEDIUM))\r
211                 {\r
212                         if(wifiRssi >= (rssiThresh1+BTC_RSSI_COEX_THRESH_TOL_8821A_2ANT))\r
213                         {\r
214                                 wifiRssiState = BTC_RSSI_STATE_HIGH;\r
215                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to High\n"));\r
216                         }\r
217                         else if(wifiRssi < rssiThresh)\r
218                         {\r
219                                 wifiRssiState = BTC_RSSI_STATE_LOW;\r
220                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Low\n"));\r
221                         }\r
222                         else\r
223                         {\r
224                                 wifiRssiState = BTC_RSSI_STATE_STAY_MEDIUM;\r
225                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at Medium\n"));\r
226                         }\r
227                 }\r
228                 else\r
229                 {\r
230                         if(wifiRssi < rssiThresh1)\r
231                         {\r
232                                 wifiRssiState = BTC_RSSI_STATE_MEDIUM;\r
233                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state switch to Medium\n"));\r
234                         }\r
235                         else\r
236                         {\r
237                                 wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;\r
238                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE, ("[BTCoex], wifi RSSI state stay at High\n"));\r
239                         }\r
240                 }\r
241         }\r
242                 \r
243         pCoexSta->preWifiRssiState[index] = wifiRssiState;\r
244 \r
245         return wifiRssiState;\r
246 }\r
247 \r
248 VOID\r
249 halbtc8821a2ant_MonitorBtEnableDisable(\r
250         IN      PBTC_COEXIST            pBtCoexist\r
251         )\r
252 {\r
253         static BOOLEAN  bPreBtDisabled=FALSE;\r
254         static u4Byte   btDisableCnt=0;\r
255         BOOLEAN                 bBtActive=TRUE, bBtDisabled=FALSE;\r
256 \r
257         // This function check if bt is disabled\r
258 \r
259         if(     pCoexSta->highPriorityTx == 0 &&\r
260                 pCoexSta->highPriorityRx == 0 &&\r
261                 pCoexSta->lowPriorityTx == 0 &&\r
262                 pCoexSta->lowPriorityRx == 0)\r
263         {\r
264                 bBtActive = FALSE;\r
265         }\r
266         if(     pCoexSta->highPriorityTx == 0xffff &&\r
267                 pCoexSta->highPriorityRx == 0xffff &&\r
268                 pCoexSta->lowPriorityTx == 0xffff &&\r
269                 pCoexSta->lowPriorityRx == 0xffff)\r
270         {\r
271                 bBtActive = FALSE;\r
272         }\r
273         if(bBtActive)\r
274         {\r
275                 btDisableCnt = 0;\r
276                 bBtDisabled = FALSE;\r
277                 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
278                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is enabled !!\n"));\r
279         }\r
280         else\r
281         {\r
282                 btDisableCnt++;\r
283                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], bt all counters=0, %d times!!\n", \r
284                                 btDisableCnt));\r
285                 if(btDisableCnt >= 2)\r
286                 {\r
287                         bBtDisabled = TRUE;\r
288                         pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_DISABLE, &bBtDisabled);\r
289                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is disabled !!\n"));\r
290                 }\r
291         }\r
292         if(bPreBtDisabled != bBtDisabled)\r
293         {\r
294                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], BT is from %s to %s!!\n", \r
295                         (bPreBtDisabled ? "disabled":"enabled"), \r
296                         (bBtDisabled ? "disabled":"enabled")));\r
297                 bPreBtDisabled = bBtDisabled;\r
298                 if(!bBtDisabled)\r
299                 {\r
300                 }\r
301                 else\r
302                 {\r
303                 }\r
304         }\r
305 }\r
306 \r
307 VOID\r
308 halbtc8821a2ant_MonitorBtCtr(\r
309         IN      PBTC_COEXIST            pBtCoexist\r
310         )\r
311 {\r
312         u4Byte                  regHPTxRx, regLPTxRx, u4Tmp;\r
313         u4Byte                  regHPTx=0, regHPRx=0, regLPTx=0, regLPRx=0;\r
314         u1Byte                  u1Tmp;\r
315         \r
316         regHPTxRx = 0x770;\r
317         regLPTxRx = 0x774;\r
318 \r
319         u4Tmp = pBtCoexist->fBtcRead4Byte(pBtCoexist, regHPTxRx);\r
320         regHPTx = u4Tmp & bMaskLWord;\r
321         regHPRx = (u4Tmp & bMaskHWord)>>16;\r
322 \r
323         u4Tmp = pBtCoexist->fBtcRead4Byte(pBtCoexist, regLPTxRx);\r
324         regLPTx = u4Tmp & bMaskLWord;\r
325         regLPRx = (u4Tmp & bMaskHWord)>>16;\r
326                 \r
327         pCoexSta->highPriorityTx = regHPTx;\r
328         pCoexSta->highPriorityRx = regHPRx;\r
329         pCoexSta->lowPriorityTx = regLPTx;\r
330         pCoexSta->lowPriorityRx = regLPRx;\r
331 \r
332         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], High Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n", \r
333                 regHPTxRx, regHPTx, regHPTx, regHPRx, regHPRx));\r
334         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], Low Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n", \r
335                 regLPTxRx, regLPTx, regLPTx, regLPRx, regLPRx));\r
336 \r
337         // reset counter\r
338         pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x76e, 0xc);\r
339 }\r
340 \r
341 VOID\r
342 halbtc8821a2ant_QueryBtInfo(\r
343         IN      PBTC_COEXIST            pBtCoexist\r
344         )\r
345 {\r
346         u1Byte                  H2C_Parameter[1] ={0};\r
347 \r
348         pCoexSta->bC2hBtInfoReqSent = TRUE;\r
349 \r
350         H2C_Parameter[0] |= BIT0;       // trigger\r
351 \r
352         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], Query Bt Info, FW write 0x61=0x%x\n", \r
353                 H2C_Parameter[0]));\r
354 \r
355         pBtCoexist->fBtcFillH2c(pBtCoexist, 0x61, 1, H2C_Parameter);\r
356 }\r
357 u1Byte\r
358 halbtc8821a2ant_ActionAlgorithm(\r
359         IN      PBTC_COEXIST            pBtCoexist\r
360         )\r
361 {\r
362         PBTC_STACK_INFO         pStackInfo=&pBtCoexist->stackInfo;\r
363         BOOLEAN                         bBtHsOn=FALSE;\r
364         u1Byte                          algorithm=BT_8821A_2ANT_COEX_ALGO_UNDEFINED;\r
365         u1Byte                          numOfDiffProfile=0;\r
366 \r
367         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
368         \r
369         //for win-8 stack HID report error\r
370         if(!pStackInfo->bHidExist)\r
371                 pStackInfo->bHidExist = pCoexSta->bHidExist;  //sync  BTInfo with BT firmware and stack\r
372         // when stack HID report error, here we use the info from bt fw.\r
373         if(!pStackInfo->bBtLinkExist)\r
374                 pStackInfo->bBtLinkExist = pCoexSta->bBtLinkExist;\r
375         \r
376         if(!pStackInfo->bBtLinkExist)\r
377         {\r
378                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], No profile exists!!!\n"));\r
379                 return algorithm;\r
380         }\r
381 \r
382         if(pStackInfo->bScoExist)\r
383                 numOfDiffProfile++;\r
384         if(pStackInfo->bHidExist)\r
385                 numOfDiffProfile++;\r
386         if(pStackInfo->bPanExist)\r
387                 numOfDiffProfile++;\r
388         if(pStackInfo->bA2dpExist)\r
389                 numOfDiffProfile++;\r
390         \r
391         if(numOfDiffProfile == 1)\r
392         {\r
393                 if(pStackInfo->bScoExist)\r
394                 {\r
395                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO only\n"));\r
396                         algorithm = BT_8821A_2ANT_COEX_ALGO_SCO;\r
397                 }\r
398                 else\r
399                 {\r
400                         if(pStackInfo->bHidExist)\r
401                         {\r
402                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID only\n"));\r
403                                 algorithm = BT_8821A_2ANT_COEX_ALGO_HID;\r
404                         }\r
405                         else if(pStackInfo->bA2dpExist)\r
406                         {\r
407                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP only\n"));\r
408                                 algorithm = BT_8821A_2ANT_COEX_ALGO_A2DP;\r
409                         }\r
410                         else if(pStackInfo->bPanExist)\r
411                         {\r
412                                 if(bBtHsOn)\r
413                                 {\r
414                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], PAN(HS) only\n"));\r
415                                         algorithm = BT_8821A_2ANT_COEX_ALGO_PANHS;\r
416                                 }\r
417                                 else\r
418                                 {\r
419                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], PAN(EDR) only\n"));\r
420                                         algorithm = BT_8821A_2ANT_COEX_ALGO_PANEDR;\r
421                                 }\r
422                         }\r
423                 }\r
424         }\r
425         else if(numOfDiffProfile == 2)\r
426         {\r
427                 if(pStackInfo->bScoExist)\r
428                 {\r
429                         if(pStackInfo->bHidExist)\r
430                         {\r
431                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID\n"));\r
432                                 algorithm = BT_8821A_2ANT_COEX_ALGO_PANEDR_HID;\r
433                         }\r
434                         else if(pStackInfo->bA2dpExist)\r
435                         {\r
436                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + A2DP ==> SCO\n"));\r
437                                 algorithm = BT_8821A_2ANT_COEX_ALGO_PANEDR_HID;\r
438                         }\r
439                         else if(pStackInfo->bPanExist)\r
440                         {\r
441                                 if(bBtHsOn)\r
442                                 {\r
443                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + PAN(HS)\n"));\r
444                                         algorithm = BT_8821A_2ANT_COEX_ALGO_SCO;\r
445                                 }\r
446                                 else\r
447                                 {\r
448                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + PAN(EDR)\n"));\r
449                                         algorithm = BT_8821A_2ANT_COEX_ALGO_PANEDR_HID;\r
450                                 }\r
451                         }\r
452                 }\r
453                 else\r
454                 {\r
455                         if( pStackInfo->bHidExist &&\r
456                                 pStackInfo->bA2dpExist )\r
457                         {\r
458                                 if(pStackInfo->numOfHid >= 2)\r
459                                 {\r
460                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID*2 + A2DP\n"));\r
461                                         algorithm = BT_8821A_2ANT_COEX_ALGO_HID_A2DP_PANEDR;\r
462                                 }\r
463                                 else\r
464                                 {                       \r
465                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP\n"));\r
466                                         algorithm = BT_8821A_2ANT_COEX_ALGO_HID_A2DP;\r
467                                 }\r
468                         }\r
469                         else if( pStackInfo->bHidExist &&\r
470                                 pStackInfo->bPanExist )\r
471                         {\r
472                                 if(bBtHsOn)\r
473                                 {\r
474                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + PAN(HS)\n"));\r
475                                         algorithm =  BT_8821A_2ANT_COEX_ALGO_HID;\r
476                                 }\r
477                                 else\r
478                                 {\r
479                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + PAN(EDR)\n"));\r
480                                         algorithm = BT_8821A_2ANT_COEX_ALGO_PANEDR_HID;\r
481                                 }\r
482                         }\r
483                         else if( pStackInfo->bPanExist &&\r
484                                 pStackInfo->bA2dpExist )\r
485                         {\r
486                                 if(bBtHsOn)\r
487                                 {\r
488                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP + PAN(HS)\n"));\r
489                                         algorithm = BT_8821A_2ANT_COEX_ALGO_A2DP_PANHS;\r
490                                 }\r
491                                 else\r
492                                 {\r
493                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP + PAN(EDR)\n"));\r
494                                         algorithm = BT_8821A_2ANT_COEX_ALGO_PANEDR_A2DP;\r
495                                 }\r
496                         }\r
497                 }\r
498         }\r
499         else if(numOfDiffProfile == 3)\r
500         {\r
501                 if(pStackInfo->bScoExist)\r
502                 {\r
503                         if( pStackInfo->bHidExist &&\r
504                                 pStackInfo->bA2dpExist )\r
505                         {\r
506                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + A2DP ==> HID\n"));\r
507                                 algorithm = BT_8821A_2ANT_COEX_ALGO_PANEDR_HID;\r
508                         }\r
509                         else if( pStackInfo->bHidExist &&\r
510                                 pStackInfo->bPanExist )\r
511                         {\r
512                                 if(bBtHsOn)\r
513                                 {\r
514                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + PAN(HS)\n"));\r
515                                         algorithm = BT_8821A_2ANT_COEX_ALGO_PANEDR_HID;\r
516                                 }\r
517                                 else\r
518                                 {\r
519                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + PAN(EDR)\n"));\r
520                                         algorithm = BT_8821A_2ANT_COEX_ALGO_PANEDR_HID;\r
521                                 }\r
522                         }\r
523                         else if( pStackInfo->bPanExist &&\r
524                                 pStackInfo->bA2dpExist )\r
525                         {\r
526                                 if(bBtHsOn)\r
527                                 {\r
528                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + A2DP + PAN(HS)\n"));\r
529                                         algorithm = BT_8821A_2ANT_COEX_ALGO_PANEDR_HID;\r
530                                 }\r
531                                 else\r
532                                 {\r
533                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + A2DP + PAN(EDR) ==> HID\n"));\r
534                                         algorithm = BT_8821A_2ANT_COEX_ALGO_PANEDR_HID;\r
535                                 }\r
536                         }\r
537                 }\r
538                 else\r
539                 {\r
540                         if( pStackInfo->bHidExist &&\r
541                                 pStackInfo->bPanExist &&\r
542                                 pStackInfo->bA2dpExist )\r
543                         {\r
544                                 if(bBtHsOn)\r
545                                 {\r
546                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP + PAN(HS)\n"));\r
547                                         algorithm = BT_8821A_2ANT_COEX_ALGO_HID_A2DP;\r
548                                 }\r
549                                 else\r
550                                 {\r
551                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP + PAN(EDR)\n"));\r
552                                         algorithm = BT_8821A_2ANT_COEX_ALGO_HID_A2DP_PANEDR;\r
553                                 }\r
554                         }\r
555                 }\r
556         }\r
557         else if(numOfDiffProfile >= 3)\r
558         {\r
559                 if(pStackInfo->bScoExist)\r
560                 {\r
561                         if( pStackInfo->bHidExist &&\r
562                                 pStackInfo->bPanExist &&\r
563                                 pStackInfo->bA2dpExist )\r
564                         {\r
565                                 if(bBtHsOn)\r
566                                 {\r
567                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Error!!! SCO + HID + A2DP + PAN(HS)\n"));\r
568 \r
569                                 }\r
570                                 else\r
571                                 {\r
572                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + A2DP + PAN(EDR)==>PAN(EDR)+HID\n"));\r
573                                         algorithm = BT_8821A_2ANT_COEX_ALGO_PANEDR_HID;\r
574                                 }\r
575                         }\r
576                 }\r
577         }\r
578 \r
579         return algorithm;\r
580 }\r
581 \r
582 BOOLEAN\r
583 halbtc8821a2ant_NeedToDecBtPwr(\r
584         IN      PBTC_COEXIST            pBtCoexist\r
585         )\r
586 {\r
587         BOOLEAN         bRet=FALSE;\r
588         BOOLEAN         bBtHsOn=FALSE, bWifiConnected=FALSE;\r
589         s4Byte          btHsRssi=0;\r
590         u1Byte          btRssiState;\r
591 \r
592         if(!pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn))\r
593                 return FALSE;\r
594         if(!pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected))\r
595                 return FALSE;\r
596         if(!pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_S4_HS_RSSI, &btHsRssi))\r
597                 return FALSE;\r
598 \r
599         btRssiState = halbtc8821a2ant_BtRssiState(2, 35, 0);\r
600 \r
601         if(bWifiConnected)\r
602         {\r
603                 if(bBtHsOn)\r
604                 {\r
605                         if(btHsRssi > 37)\r
606                         {\r
607                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], Need to decrease bt power for HS mode!!\n"));\r
608                                 bRet = TRUE;\r
609                         }\r
610                 }\r
611                 else\r
612                 {\r
613                         if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
614                         (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
615                         {\r
616                 \r
617                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], Need to decrease bt power for Wifi is connected!!\n"));\r
618                                 bRet = TRUE;\r
619                         }\r
620                 }\r
621         }\r
622         \r
623         return bRet;\r
624 }\r
625 \r
626 VOID\r
627 halbtc8821a2ant_SetFwDacSwingLevel(\r
628         IN      PBTC_COEXIST            pBtCoexist,\r
629         IN      u1Byte                  dacSwingLvl\r
630         )\r
631 {\r
632         u1Byte                  H2C_Parameter[1] ={0};\r
633 \r
634         // There are several type of dacswing\r
635         // 0x18/ 0x10/ 0xc/ 0x8/ 0x4/ 0x6\r
636         H2C_Parameter[0] = dacSwingLvl;\r
637 \r
638         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], Set Dac Swing Level=0x%x\n", dacSwingLvl));\r
639         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], FW write 0x64=0x%x\n", H2C_Parameter[0]));\r
640 \r
641         pBtCoexist->fBtcFillH2c(pBtCoexist, 0x64, 1, H2C_Parameter);\r
642 }\r
643 \r
644 VOID\r
645 halbtc8821a2ant_SetFwDecBtPwr(\r
646         IN      PBTC_COEXIST            pBtCoexist,\r
647         IN      BOOLEAN                 bDecBtPwr\r
648         )\r
649 {\r
650         u1Byte                  H2C_Parameter[1] ={0};\r
651         \r
652         H2C_Parameter[0] = 0;\r
653 \r
654         if(bDecBtPwr)\r
655         {\r
656                 H2C_Parameter[0] |= BIT1;\r
657         }\r
658 \r
659         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], decrease Bt Power : %s, FW write 0x62=0x%x\n", \r
660                 (bDecBtPwr? "Yes!!":"No!!"), H2C_Parameter[0]));\r
661 \r
662         pBtCoexist->fBtcFillH2c(pBtCoexist, 0x62, 1, H2C_Parameter);    \r
663 }\r
664 \r
665 VOID\r
666 halbtc8821a2ant_DecBtPwr(\r
667         IN      PBTC_COEXIST            pBtCoexist,\r
668         IN      BOOLEAN                 bForceExec,\r
669         IN      BOOLEAN                 bDecBtPwr\r
670         )\r
671 {\r
672         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s Dec BT power = %s\n",  \r
673                 (bForceExec? "force to":""), ((bDecBtPwr)? "ON":"OFF")));\r
674         pCoexDm->bCurDecBtPwr = bDecBtPwr;\r
675 \r
676         if(!bForceExec)\r
677         {\r
678                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreDecBtPwr=%d, bCurDecBtPwr=%d\n", \r
679                         pCoexDm->bPreDecBtPwr, pCoexDm->bCurDecBtPwr));\r
680 \r
681                 if(pCoexDm->bPreDecBtPwr == pCoexDm->bCurDecBtPwr) \r
682                         return;\r
683         }\r
684         halbtc8821a2ant_SetFwDecBtPwr(pBtCoexist, pCoexDm->bCurDecBtPwr);\r
685 \r
686         pCoexDm->bPreDecBtPwr = pCoexDm->bCurDecBtPwr;\r
687 }\r
688 \r
689 VOID\r
690 halbtc8821a2ant_SetFwBtLnaConstrain(\r
691         IN      PBTC_COEXIST            pBtCoexist,\r
692         IN      BOOLEAN                 bBtLnaConsOn\r
693         )\r
694 {\r
695         u1Byte                  H2C_Parameter[2] ={0};\r
696         \r
697         H2C_Parameter[0] = 0x3; // opCode, 0x3=BT_SET_LNA_CONSTRAIN\r
698 \r
699         if(bBtLnaConsOn)\r
700         {\r
701                 H2C_Parameter[1] |= BIT0;\r
702         }\r
703 \r
704         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], set BT LNA Constrain: %s, FW write 0x69=0x%x\n", \r
705                 (bBtLnaConsOn? "ON!!":"OFF!!"), \r
706                 H2C_Parameter[0]<<8|H2C_Parameter[1]));\r
707 \r
708         pBtCoexist->fBtcFillH2c(pBtCoexist, 0x69, 2, H2C_Parameter);    \r
709 }\r
710 \r
711 VOID\r
712 halbtc8821a2ant_SetBtLnaConstrain(\r
713         IN      PBTC_COEXIST            pBtCoexist,\r
714         IN      BOOLEAN                 bForceExec,\r
715         IN      BOOLEAN                 bBtLnaConsOn\r
716         )\r
717 {\r
718         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s BT Constrain = %s\n",  \r
719                 (bForceExec? "force":""), ((bBtLnaConsOn)? "ON":"OFF")));\r
720         pCoexDm->bCurBtLnaConstrain = bBtLnaConsOn;\r
721 \r
722         if(!bForceExec)\r
723         {\r
724                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreBtLnaConstrain=%d, bCurBtLnaConstrain=%d\n", \r
725                         pCoexDm->bPreBtLnaConstrain, pCoexDm->bCurBtLnaConstrain));\r
726 \r
727                 if(pCoexDm->bPreBtLnaConstrain == pCoexDm->bCurBtLnaConstrain) \r
728                         return;\r
729         }\r
730         halbtc8821a2ant_SetFwBtLnaConstrain(pBtCoexist, pCoexDm->bCurBtLnaConstrain);\r
731 \r
732         pCoexDm->bPreBtLnaConstrain = pCoexDm->bCurBtLnaConstrain;\r
733 }\r
734 \r
735 VOID\r
736 halbtc8821a2ant_SetFwBtPsdMode(\r
737         IN      PBTC_COEXIST            pBtCoexist,\r
738         IN      u1Byte                  btPsdMode\r
739         )\r
740 {\r
741         u1Byte                  H2C_Parameter[2] ={0};\r
742         \r
743         H2C_Parameter[0] = 0x2; // opCode, 0x2=BT_SET_PSD_MODE\r
744 \r
745         H2C_Parameter[1] = btPsdMode;\r
746 \r
747         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], set BT PSD mode=0x%x, FW write 0x69=0x%x\n", \r
748                 H2C_Parameter[1], \r
749                 H2C_Parameter[0]<<8|H2C_Parameter[1]));\r
750 \r
751         pBtCoexist->fBtcFillH2c(pBtCoexist, 0x69, 2, H2C_Parameter);    \r
752 }\r
753 \r
754 \r
755 VOID\r
756 halbtc8821a2ant_SetBtPsdMode(\r
757         IN      PBTC_COEXIST            pBtCoexist,\r
758         IN      BOOLEAN                 bForceExec,\r
759         IN      u1Byte                  btPsdMode\r
760         )\r
761 {\r
762         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s BT PSD mode = 0x%x\n",  \r
763                 (bForceExec? "force":""), btPsdMode));\r
764         pCoexDm->bCurBtPsdMode = btPsdMode;\r
765 \r
766         if(!bForceExec)\r
767         {\r
768                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreBtPsdMode=0x%x, bCurBtPsdMode=0x%x\n", \r
769                         pCoexDm->bPreBtPsdMode, pCoexDm->bCurBtPsdMode));\r
770 \r
771                 if(pCoexDm->bPreBtPsdMode == pCoexDm->bCurBtPsdMode) \r
772                         return;\r
773         }\r
774         halbtc8821a2ant_SetFwBtPsdMode(pBtCoexist, pCoexDm->bCurBtPsdMode);\r
775 \r
776         pCoexDm->bPreBtPsdMode = pCoexDm->bCurBtPsdMode;\r
777 }\r
778 \r
779 \r
780 VOID\r
781 halbtc8821a2ant_SetBtAutoReport(\r
782         IN      PBTC_COEXIST            pBtCoexist,\r
783         IN      BOOLEAN                 bEnableAutoReport\r
784         )\r
785 {\r
786         u1Byte                  H2C_Parameter[1] ={0};\r
787         \r
788         H2C_Parameter[0] = 0;\r
789 \r
790         if(bEnableAutoReport)\r
791         {\r
792                 H2C_Parameter[0] |= BIT0;\r
793         }\r
794 \r
795         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], BT FW auto report : %s, FW write 0x68=0x%x\n", \r
796                 (bEnableAutoReport? "Enabled!!":"Disabled!!"), H2C_Parameter[0]));\r
797 \r
798         pBtCoexist->fBtcFillH2c(pBtCoexist, 0x68, 1, H2C_Parameter);    \r
799 }\r
800 \r
801 VOID\r
802 halbtc8821a2ant_BtAutoReport(\r
803         IN      PBTC_COEXIST            pBtCoexist,\r
804         IN      BOOLEAN                 bForceExec,\r
805         IN      BOOLEAN                 bEnableAutoReport\r
806         )\r
807 {\r
808         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s BT Auto report = %s\n",  \r
809                 (bForceExec? "force to":""), ((bEnableAutoReport)? "Enabled":"Disabled")));\r
810         pCoexDm->bCurBtAutoReport = bEnableAutoReport;\r
811 \r
812         if(!bForceExec)\r
813         {\r
814                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreBtAutoReport=%d, bCurBtAutoReport=%d\n", \r
815                         pCoexDm->bPreBtAutoReport, pCoexDm->bCurBtAutoReport));\r
816 \r
817                 if(pCoexDm->bPreBtAutoReport == pCoexDm->bCurBtAutoReport) \r
818                         return;\r
819         }\r
820         halbtc8821a2ant_SetBtAutoReport(pBtCoexist, pCoexDm->bCurBtAutoReport);\r
821 \r
822         pCoexDm->bPreBtAutoReport = pCoexDm->bCurBtAutoReport;\r
823 }\r
824 \r
825 VOID\r
826 halbtc8821a2ant_FwDacSwingLvl(\r
827         IN      PBTC_COEXIST            pBtCoexist,\r
828         IN      BOOLEAN                 bForceExec,\r
829         IN      u1Byte                  fwDacSwingLvl\r
830         )\r
831 {\r
832         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s set FW Dac Swing level = %d\n",  \r
833                 (bForceExec? "force to":""), fwDacSwingLvl));\r
834         pCoexDm->curFwDacSwingLvl = fwDacSwingLvl;\r
835 \r
836         if(!bForceExec)\r
837         {\r
838                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], preFwDacSwingLvl=%d, curFwDacSwingLvl=%d\n", \r
839                         pCoexDm->preFwDacSwingLvl, pCoexDm->curFwDacSwingLvl));\r
840 \r
841                 if(pCoexDm->preFwDacSwingLvl == pCoexDm->curFwDacSwingLvl) \r
842                         return;\r
843         }\r
844 \r
845         halbtc8821a2ant_SetFwDacSwingLevel(pBtCoexist, pCoexDm->curFwDacSwingLvl);\r
846 \r
847         pCoexDm->preFwDacSwingLvl = pCoexDm->curFwDacSwingLvl;\r
848 }\r
849 \r
850 VOID\r
851 halbtc8821a2ant_SetSwRfRxLpfCorner(\r
852         IN      PBTC_COEXIST            pBtCoexist,\r
853         IN      BOOLEAN                 bRxRfShrinkOn\r
854         )\r
855 {\r
856         if(bRxRfShrinkOn)\r
857         {\r
858                 //Shrink RF Rx LPF corner\r
859                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Shrink RF Rx LPF corner!!\n"));\r
860                 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, 0xffffc);\r
861         }\r
862         else\r
863         {\r
864                 //Resume RF Rx LPF corner\r
865                 // After initialized, we can use pCoexDm->btRf0x1eBackup\r
866                 if(pBtCoexist->bInitilized)\r
867                 {\r
868                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Resume RF Rx LPF corner!!\n"));\r
869                         pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, pCoexDm->btRf0x1eBackup);\r
870                 }\r
871         }\r
872 }\r
873 \r
874 VOID\r
875 halbtc8821a2ant_RfShrink(\r
876         IN      PBTC_COEXIST            pBtCoexist,\r
877         IN      BOOLEAN                 bForceExec,\r
878         IN      BOOLEAN                 bRxRfShrinkOn\r
879         )\r
880 {\r
881         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn Rx RF Shrink = %s\n",  \r
882                 (bForceExec? "force to":""), ((bRxRfShrinkOn)? "ON":"OFF")));\r
883         pCoexDm->bCurRfRxLpfShrink = bRxRfShrinkOn;\r
884 \r
885         if(!bForceExec)\r
886         {\r
887                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreRfRxLpfShrink=%d, bCurRfRxLpfShrink=%d\n", \r
888                         pCoexDm->bPreRfRxLpfShrink, pCoexDm->bCurRfRxLpfShrink));\r
889 \r
890                 if(pCoexDm->bPreRfRxLpfShrink == pCoexDm->bCurRfRxLpfShrink) \r
891                         return;\r
892         }\r
893         halbtc8821a2ant_SetSwRfRxLpfCorner(pBtCoexist, pCoexDm->bCurRfRxLpfShrink);\r
894 \r
895         pCoexDm->bPreRfRxLpfShrink = pCoexDm->bCurRfRxLpfShrink;\r
896 }\r
897 \r
898 VOID\r
899 halbtc8821a2ant_SetSwPenaltyTxRateAdaptive(\r
900         IN      PBTC_COEXIST            pBtCoexist,\r
901         IN      BOOLEAN                 bLowPenaltyRa\r
902         )\r
903 {\r
904         u1Byte                  H2C_Parameter[6] ={0};\r
905         \r
906         H2C_Parameter[0] = 0x6; // opCode, 0x6= Retry_Penalty\r
907 \r
908         if(bLowPenaltyRa)\r
909         {\r
910                 H2C_Parameter[1] |= BIT0;\r
911                 H2C_Parameter[2] = 0x00;  //normal rate except MCS7/6/5, OFDM54/48/36\r
912                 H2C_Parameter[3] = 0xf7;  //MCS7 or OFDM54\r
913                 H2C_Parameter[4] = 0xf8;  //MCS6 or OFDM48\r
914                 H2C_Parameter[5] = 0xf9;        //MCS5 or OFDM36        \r
915         }\r
916 \r
917         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], set WiFi Low-Penalty Retry: %s", \r
918                 (bLowPenaltyRa? "ON!!":"OFF!!") ));\r
919 \r
920         pBtCoexist->fBtcFillH2c(pBtCoexist, 0x69, 6, H2C_Parameter);\r
921 }\r
922 \r
923 VOID\r
924 halbtc8821a2ant_LowPenaltyRa(\r
925         IN      PBTC_COEXIST            pBtCoexist,\r
926         IN      BOOLEAN                 bForceExec,\r
927         IN      BOOLEAN                 bLowPenaltyRa\r
928         )\r
929 {\r
930         //return;\r
931         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn LowPenaltyRA = %s\n",  \r
932                 (bForceExec? "force to":""), ((bLowPenaltyRa)? "ON":"OFF")));\r
933         pCoexDm->bCurLowPenaltyRa = bLowPenaltyRa;\r
934 \r
935         if(!bForceExec)\r
936         {\r
937                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreLowPenaltyRa=%d, bCurLowPenaltyRa=%d\n", \r
938                         pCoexDm->bPreLowPenaltyRa, pCoexDm->bCurLowPenaltyRa));\r
939 \r
940                 if(pCoexDm->bPreLowPenaltyRa == pCoexDm->bCurLowPenaltyRa) \r
941                         return;\r
942         }\r
943         halbtc8821a2ant_SetSwPenaltyTxRateAdaptive(pBtCoexist, pCoexDm->bCurLowPenaltyRa);\r
944 \r
945         pCoexDm->bPreLowPenaltyRa = pCoexDm->bCurLowPenaltyRa;\r
946 }\r
947 \r
948 VOID\r
949 halbtc8821a2ant_SetDacSwingReg(\r
950         IN      PBTC_COEXIST            pBtCoexist,\r
951         IN      u4Byte                  level\r
952         )\r
953 {\r
954         u1Byte  val=(u1Byte)level;\r
955 \r
956         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Write SwDacSwing = 0x%x\n", level));\r
957         pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xc5b, 0x3e, val);\r
958 }\r
959 \r
960 VOID\r
961 halbtc8821a2ant_SetSwFullTimeDacSwing(\r
962         IN      PBTC_COEXIST            pBtCoexist,\r
963         IN      BOOLEAN                 bSwDacSwingOn,\r
964         IN      u4Byte                  swDacSwingLvl\r
965         )\r
966 {\r
967         if(bSwDacSwingOn)\r
968         {\r
969                 halbtc8821a2ant_SetDacSwingReg(pBtCoexist, swDacSwingLvl);\r
970         }\r
971         else\r
972         {\r
973                 halbtc8821a2ant_SetDacSwingReg(pBtCoexist, 0x18);\r
974         }\r
975 }\r
976 \r
977 \r
978 VOID\r
979 halbtc8821a2ant_DacSwing(\r
980         IN      PBTC_COEXIST            pBtCoexist,\r
981         IN      BOOLEAN                 bForceExec,\r
982         IN      BOOLEAN                 bDacSwingOn,\r
983         IN      u4Byte                  dacSwingLvl\r
984         )\r
985 {\r
986         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn DacSwing=%s, dacSwingLvl=0x%x\n",  \r
987                 (bForceExec? "force to":""), ((bDacSwingOn)? "ON":"OFF"), dacSwingLvl));\r
988         pCoexDm->bCurDacSwingOn = bDacSwingOn;\r
989         pCoexDm->curDacSwingLvl = dacSwingLvl;\r
990 \r
991         if(!bForceExec)\r
992         {\r
993                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreDacSwingOn=%d, preDacSwingLvl=0x%x, bCurDacSwingOn=%d, curDacSwingLvl=0x%x\n", \r
994                         pCoexDm->bPreDacSwingOn, pCoexDm->preDacSwingLvl,\r
995                         pCoexDm->bCurDacSwingOn, pCoexDm->curDacSwingLvl));\r
996 \r
997                 if( (pCoexDm->bPreDacSwingOn == pCoexDm->bCurDacSwingOn) &&\r
998                         (pCoexDm->preDacSwingLvl == pCoexDm->curDacSwingLvl) )\r
999                         return;\r
1000         }\r
1001         delay_ms(30);\r
1002         halbtc8821a2ant_SetSwFullTimeDacSwing(pBtCoexist, bDacSwingOn, dacSwingLvl);\r
1003 \r
1004         pCoexDm->bPreDacSwingOn = pCoexDm->bCurDacSwingOn;\r
1005         pCoexDm->preDacSwingLvl = pCoexDm->curDacSwingLvl;\r
1006 }\r
1007 \r
1008 VOID\r
1009 halbtc8821a2ant_SetAdcBackOff(\r
1010         IN      PBTC_COEXIST            pBtCoexist,\r
1011         IN      BOOLEAN                 bAdcBackOff\r
1012         )\r
1013 {\r
1014         if(bAdcBackOff)\r
1015         {\r
1016                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], BB BackOff Level On!\n"));\r
1017                 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x8db, 0x60, 0x3);\r
1018         }\r
1019         else\r
1020         {\r
1021                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], BB BackOff Level Off!\n"));\r
1022                 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x8db, 0x60, 0x1);\r
1023         }\r
1024 }\r
1025 \r
1026 VOID\r
1027 halbtc8821a2ant_AdcBackOff(\r
1028         IN      PBTC_COEXIST            pBtCoexist,\r
1029         IN      BOOLEAN                 bForceExec,\r
1030         IN      BOOLEAN                 bAdcBackOff\r
1031         )\r
1032 {\r
1033         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn AdcBackOff = %s\n",  \r
1034                 (bForceExec? "force to":""), ((bAdcBackOff)? "ON":"OFF")));\r
1035         pCoexDm->bCurAdcBackOff = bAdcBackOff;\r
1036 \r
1037         if(!bForceExec)\r
1038         {\r
1039                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreAdcBackOff=%d, bCurAdcBackOff=%d\n", \r
1040                         pCoexDm->bPreAdcBackOff, pCoexDm->bCurAdcBackOff));\r
1041 \r
1042                 if(pCoexDm->bPreAdcBackOff == pCoexDm->bCurAdcBackOff) \r
1043                         return;\r
1044         }\r
1045         halbtc8821a2ant_SetAdcBackOff(pBtCoexist, pCoexDm->bCurAdcBackOff);\r
1046 \r
1047         pCoexDm->bPreAdcBackOff = pCoexDm->bCurAdcBackOff;\r
1048 }\r
1049 \r
1050 VOID\r
1051 halbtc8821a2ant_SetAgcTable(\r
1052         IN      PBTC_COEXIST            pBtCoexist,\r
1053         IN      BOOLEAN                 bAgcTableEn\r
1054         )\r
1055 {\r
1056         u1Byte          rssiAdjustVal=0;\r
1057 \r
1058         pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xef, 0xfffff, 0x02000);\r
1059         if(bAgcTableEn)\r
1060         {\r
1061                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Agc Table On!\n"));\r
1062                 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff,  0x28F4B);\r
1063                 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff,  0x10AB2);\r
1064                 rssiAdjustVal = 8;\r
1065         }\r
1066         else\r
1067         {\r
1068                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Agc Table Off!\n"));\r
1069                 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x2884B);\r
1070                 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x104B2);\r
1071         }\r
1072         pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xef, 0xfffff, 0x0);\r
1073 \r
1074         // set rssiAdjustVal for wifi module.\r
1075         pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_U1_RSSI_ADJ_VAL_FOR_AGC_TABLE_ON, &rssiAdjustVal);\r
1076 }\r
1077 \r
1078 VOID\r
1079 halbtc8821a2ant_AgcTable(\r
1080         IN      PBTC_COEXIST            pBtCoexist,\r
1081         IN      BOOLEAN                 bForceExec,\r
1082         IN      BOOLEAN                 bAgcTableEn\r
1083         )\r
1084 {\r
1085         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s %s Agc Table\n",  \r
1086                 (bForceExec? "force to":""), ((bAgcTableEn)? "Enable":"Disable")));\r
1087         pCoexDm->bCurAgcTableEn = bAgcTableEn;\r
1088 \r
1089         if(!bForceExec)\r
1090         {\r
1091                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreAgcTableEn=%d, bCurAgcTableEn=%d\n", \r
1092                         pCoexDm->bPreAgcTableEn, pCoexDm->bCurAgcTableEn));\r
1093 \r
1094                 if(pCoexDm->bPreAgcTableEn == pCoexDm->bCurAgcTableEn) \r
1095                         return;\r
1096         }\r
1097         halbtc8821a2ant_SetAgcTable(pBtCoexist, bAgcTableEn);\r
1098 \r
1099         pCoexDm->bPreAgcTableEn = pCoexDm->bCurAgcTableEn;\r
1100 }\r
1101 \r
1102 VOID\r
1103 halbtc8821a2ant_SetCoexTable(\r
1104         IN      PBTC_COEXIST    pBtCoexist,\r
1105         IN      u4Byte          val0x6c0,\r
1106         IN      u4Byte          val0x6c4,\r
1107         IN      u4Byte          val0x6c8,\r
1108         IN      u1Byte          val0x6cc\r
1109         )\r
1110 {\r
1111         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c0=0x%x\n", val0x6c0));\r
1112         pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c0, val0x6c0);\r
1113 \r
1114         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c4=0x%x\n", val0x6c4));\r
1115         pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c4, val0x6c4);\r
1116 \r
1117         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c8=0x%x\n", val0x6c8));\r
1118         pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c8, val0x6c8);\r
1119 \r
1120         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6cc=0x%x\n", val0x6cc));\r
1121         pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cc, val0x6cc);\r
1122 }\r
1123 \r
1124 VOID\r
1125 halbtc8821a2ant_CoexTable(\r
1126         IN      PBTC_COEXIST            pBtCoexist,\r
1127         IN      BOOLEAN                 bForceExec,\r
1128         IN      u4Byte                  val0x6c0,\r
1129         IN      u4Byte                  val0x6c4,\r
1130         IN      u4Byte                  val0x6c8,\r
1131         IN      u1Byte                  val0x6cc\r
1132         )\r
1133 {\r
1134         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
1135                 (bForceExec? "force to":""), val0x6c0, val0x6c4, val0x6c8, val0x6cc));\r
1136         pCoexDm->curVal0x6c0 = val0x6c0;\r
1137         pCoexDm->curVal0x6c4 = val0x6c4;\r
1138         pCoexDm->curVal0x6c8 = val0x6c8;\r
1139         pCoexDm->curVal0x6cc = val0x6cc;\r
1140 \r
1141         if(!bForceExec)\r
1142         {\r
1143                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], preVal0x6c0=0x%x, preVal0x6c4=0x%x, preVal0x6c8=0x%x, preVal0x6cc=0x%x !!\n", \r
1144                         pCoexDm->preVal0x6c0, pCoexDm->preVal0x6c4, pCoexDm->preVal0x6c8, pCoexDm->preVal0x6cc));\r
1145                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], curVal0x6c0=0x%x, curVal0x6c4=0x%x, curVal0x6c8=0x%x, curVal0x6cc=0x%x !!\n", \r
1146                         pCoexDm->curVal0x6c0, pCoexDm->curVal0x6c4, pCoexDm->curVal0x6c8, pCoexDm->curVal0x6cc));\r
1147         \r
1148                 if( (pCoexDm->preVal0x6c0 == pCoexDm->curVal0x6c0) &&\r
1149                         (pCoexDm->preVal0x6c4 == pCoexDm->curVal0x6c4) &&\r
1150                         (pCoexDm->preVal0x6c8 == pCoexDm->curVal0x6c8) &&\r
1151                         (pCoexDm->preVal0x6cc == pCoexDm->curVal0x6cc) )\r
1152                         return;\r
1153         }\r
1154         halbtc8821a2ant_SetCoexTable(pBtCoexist, val0x6c0, val0x6c4, val0x6c8, val0x6cc);\r
1155 \r
1156         pCoexDm->preVal0x6c0 = pCoexDm->curVal0x6c0;\r
1157         pCoexDm->preVal0x6c4 = pCoexDm->curVal0x6c4;\r
1158         pCoexDm->preVal0x6c8 = pCoexDm->curVal0x6c8;\r
1159         pCoexDm->preVal0x6cc = pCoexDm->curVal0x6cc;\r
1160 }\r
1161 \r
1162 VOID\r
1163 halbtc8821a2ant_SetFwIgnoreWlanAct(\r
1164         IN      PBTC_COEXIST            pBtCoexist,\r
1165         IN      BOOLEAN                 bEnable\r
1166         )\r
1167 {\r
1168         u1Byte                  H2C_Parameter[1] ={0};\r
1169                 \r
1170         if(bEnable)\r
1171         {\r
1172                 H2C_Parameter[0] |= BIT0;               // function enable\r
1173         }\r
1174         \r
1175         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], set FW for BT Ignore Wlan_Act, FW write 0x63=0x%x\n", \r
1176                 H2C_Parameter[0]));\r
1177 \r
1178         pBtCoexist->fBtcFillH2c(pBtCoexist, 0x63, 1, H2C_Parameter);\r
1179 }\r
1180 \r
1181 VOID\r
1182 halbtc8821a2ant_IgnoreWlanAct(\r
1183         IN      PBTC_COEXIST            pBtCoexist,\r
1184         IN      BOOLEAN                 bForceExec,\r
1185         IN      BOOLEAN                 bEnable\r
1186         )\r
1187 {\r
1188         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s turn Ignore WlanAct %s\n", \r
1189                 (bForceExec? "force to":""), (bEnable? "ON":"OFF")));\r
1190         pCoexDm->bCurIgnoreWlanAct = bEnable;\r
1191 \r
1192         if(!bForceExec)\r
1193         {\r
1194                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreIgnoreWlanAct = %d, bCurIgnoreWlanAct = %d!!\n", \r
1195                         pCoexDm->bPreIgnoreWlanAct, pCoexDm->bCurIgnoreWlanAct));\r
1196 \r
1197                 if(pCoexDm->bPreIgnoreWlanAct == pCoexDm->bCurIgnoreWlanAct)\r
1198                         return;\r
1199         }\r
1200         halbtc8821a2ant_SetFwIgnoreWlanAct(pBtCoexist, bEnable);\r
1201 \r
1202         pCoexDm->bPreIgnoreWlanAct = pCoexDm->bCurIgnoreWlanAct;\r
1203 }\r
1204 \r
1205 VOID\r
1206 halbtc8821a2ant_SetFwPstdma(\r
1207         IN      PBTC_COEXIST            pBtCoexist,\r
1208         IN      u1Byte                  byte1,\r
1209         IN      u1Byte                  byte2,\r
1210         IN      u1Byte                  byte3,\r
1211         IN      u1Byte                  byte4,\r
1212         IN      u1Byte                  byte5\r
1213         )\r
1214 {\r
1215         u1Byte                  H2C_Parameter[5] ={0};\r
1216 \r
1217         H2C_Parameter[0] = byte1;       \r
1218         H2C_Parameter[1] = byte2;       \r
1219         H2C_Parameter[2] = byte3;\r
1220         H2C_Parameter[3] = byte4;\r
1221         H2C_Parameter[4] = byte5;\r
1222 \r
1223         pCoexDm->psTdmaPara[0] = byte1;\r
1224         pCoexDm->psTdmaPara[1] = byte2;\r
1225         pCoexDm->psTdmaPara[2] = byte3;\r
1226         pCoexDm->psTdmaPara[3] = byte4;\r
1227         pCoexDm->psTdmaPara[4] = byte5;\r
1228         \r
1229         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], FW write 0x60(5bytes)=0x%x%08x\n", \r
1230                 H2C_Parameter[0], \r
1231                 H2C_Parameter[1]<<24|H2C_Parameter[2]<<16|H2C_Parameter[3]<<8|H2C_Parameter[4]));\r
1232 \r
1233         pBtCoexist->fBtcFillH2c(pBtCoexist, 0x60, 5, H2C_Parameter);\r
1234 }\r
1235 \r
1236 VOID\r
1237 halbtc8821a2ant_SwMechanism1(\r
1238         IN      PBTC_COEXIST    pBtCoexist,     \r
1239         IN      BOOLEAN         bShrinkRxLPF,\r
1240         IN      BOOLEAN         bLowPenaltyRA,\r
1241         IN      BOOLEAN         bLimitedDIG, \r
1242         IN      BOOLEAN         bBTLNAConstrain\r
1243         ) \r
1244 {\r
1245         u4Byte  wifiBw;\r
1246         \r
1247         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
1248         \r
1249         if(BTC_WIFI_BW_HT40 != wifiBw)  //only shrink RF Rx LPF for HT40\r
1250         {\r
1251                 if (bShrinkRxLPF)\r
1252                         bShrinkRxLPF = FALSE;\r
1253         }\r
1254                 \r
1255          halbtc8821a2ant_RfShrink(pBtCoexist, NORMAL_EXEC, bShrinkRxLPF);\r
1256         halbtc8821a2ant_LowPenaltyRa(pBtCoexist, NORMAL_EXEC, bLowPenaltyRA);\r
1257 \r
1258         //no limited DIG\r
1259         //halbtc8821a2ant_SetBtLnaConstrain(pBtCoexist, NORMAL_EXEC, bBTLNAConstrain);\r
1260 }\r
1261 \r
1262 VOID\r
1263 halbtc8821a2ant_SwMechanism2(\r
1264         IN      PBTC_COEXIST    pBtCoexist,     \r
1265         IN      BOOLEAN         bAGCTableShift,\r
1266         IN      BOOLEAN         bADCBackOff,\r
1267         IN      BOOLEAN         bSWDACSwing,\r
1268         IN      u4Byte          dacSwingLvl\r
1269         ) \r
1270 {\r
1271         //halbtc8821a2ant_AgcTable(pBtCoexist, NORMAL_EXEC, bAGCTableShift);\r
1272         halbtc8821a2ant_AdcBackOff(pBtCoexist, NORMAL_EXEC, bADCBackOff);\r
1273         halbtc8821a2ant_DacSwing(pBtCoexist, NORMAL_EXEC, bSWDACSwing, dacSwingLvl);\r
1274 }\r
1275 \r
1276 VOID\r
1277 halbtc8821a2ant_SetAntPath(\r
1278         IN      PBTC_COEXIST            pBtCoexist,\r
1279         IN      u1Byte                          antPosType,\r
1280         IN      BOOLEAN                         bInitHwCfg,\r
1281         IN      BOOLEAN                         bWifiOff\r
1282         )\r
1283 {\r
1284         PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
1285         u4Byte                          u4Tmp=0;\r
1286         u1Byte                          H2C_Parameter[2] ={0};\r
1287         \r
1288         if(bInitHwCfg)\r
1289         {\r
1290                 // 0x4c[23]=0, 0x4c[24]=1  Antenna control by WL/BT\r
1291                 u4Tmp = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x4c);\r
1292                 u4Tmp &=~BIT23;\r
1293                 u4Tmp |= BIT24;\r
1294                 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x4c, u4Tmp);\r
1295 \r
1296                 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x974, 0x3ff);\r
1297                 pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0xcb4, 0x77);\r
1298 \r
1299                 if(pBoardInfo->btdmAntPos == BTC_ANTENNA_AT_MAIN_PORT) \r
1300                 {\r
1301                         //tell firmware "antenna inverse"  ==> WRONG firmware antenna control code.==>need fw to fix\r
1302                         H2C_Parameter[0] = 1;\r
1303                         H2C_Parameter[1] = 1;\r
1304                         pBtCoexist->fBtcFillH2c(pBtCoexist, 0x65, 2, H2C_Parameter);\r
1305                 }\r
1306                 else\r
1307                 {\r
1308                         //tell firmware "no antenna inverse" ==> WRONG firmware antenna control code.==>need fw to fix\r
1309                         H2C_Parameter[0] = 0;\r
1310                         H2C_Parameter[1] = 1;\r
1311                         pBtCoexist->fBtcFillH2c(pBtCoexist, 0x65, 2, H2C_Parameter);\r
1312                 }\r
1313         }\r
1314         \r
1315         // ext switch setting\r
1316         switch(antPosType)\r
1317         {\r
1318                 case BTC_ANT_WIFI_AT_MAIN:\r
1319                         pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xcb7, 0x30, 0x1);\r
1320                         break;\r
1321                 case BTC_ANT_WIFI_AT_AUX:\r
1322                         pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xcb7, 0x30, 0x2);\r
1323                         break;\r
1324         }\r
1325 }\r
1326 \r
1327 VOID\r
1328 halbtc8821a2ant_PsTdma(\r
1329         IN      PBTC_COEXIST            pBtCoexist,\r
1330         IN      BOOLEAN                 bForceExec,\r
1331         IN      BOOLEAN                 bTurnOn,\r
1332         IN      u1Byte                  type\r
1333         )\r
1334 {\r
1335         BOOLEAN                 bTurnOnByCnt=FALSE;\r
1336         u1Byte                  psTdmaTypeByCnt=0;\r
1337 \r
1338         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s turn %s PS TDMA, type=%d\n", \r
1339                 (bForceExec? "force to":""), (bTurnOn? "ON":"OFF"), type));\r
1340         pCoexDm->bCurPsTdmaOn = bTurnOn;\r
1341         pCoexDm->curPsTdma = type;\r
1342 \r
1343         if(!bForceExec)\r
1344         {\r
1345                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPrePsTdmaOn = %d, bCurPsTdmaOn = %d!!\n", \r
1346                         pCoexDm->bPrePsTdmaOn, pCoexDm->bCurPsTdmaOn));\r
1347                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], prePsTdma = %d, curPsTdma = %d!!\n", \r
1348                         pCoexDm->prePsTdma, pCoexDm->curPsTdma));\r
1349 \r
1350                 if( (pCoexDm->bPrePsTdmaOn == pCoexDm->bCurPsTdmaOn) &&\r
1351                         (pCoexDm->prePsTdma == pCoexDm->curPsTdma) )\r
1352                         return;\r
1353         }       \r
1354         if(bTurnOn)\r
1355         {\r
1356                 switch(type)\r
1357                 {\r
1358                         case 1:\r
1359                         default:\r
1360                                 halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0xe1, 0x90);\r
1361                                 break;\r
1362                         case 2:\r
1363                                 halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0xe1, 0x90);\r
1364                                 break;\r
1365                         case 3:\r
1366                                 halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x3, 0xf1, 0x90);\r
1367                                 break;\r
1368                         case 4:\r
1369                                 halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x10, 0x03, 0xf1, 0x90);\r
1370                                 break;\r
1371                         case 5:\r
1372                                 halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0x60, 0x90);\r
1373                                 break;\r
1374                         case 6:\r
1375                                 halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0x60, 0x90);\r
1376                                 break;\r
1377                         case 7:\r
1378                                 halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x3, 0x70, 0x90);\r
1379                                 break;\r
1380                         case 8: \r
1381                                 halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xa3, 0x10, 0x3, 0x70, 0x90);\r
1382                                 break;\r
1383                         case 9: \r
1384                                 halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0xe1, 0x90);\r
1385                                 break;\r
1386                         case 10:        \r
1387                                 halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0xe1, 0x90);\r
1388                                 break;\r
1389                         case 11:        \r
1390                                 halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0xa, 0xa, 0xe1, 0x90);\r
1391                                 break;\r
1392                         case 12:\r
1393                                 halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x5, 0x5, 0xe1, 0x90);\r
1394                                 break;\r
1395                         case 13:\r
1396                                 halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0x60, 0x90);\r
1397                                 break;\r
1398                         case 14:\r
1399                                 halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0x60, 0x90);\r
1400                                 break;\r
1401                         case 15:\r
1402                                 halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0xa, 0xa, 0x60, 0x90);\r
1403                                 break;\r
1404                         case 16:\r
1405                                 halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x5, 0x5, 0x60, 0x90);\r
1406                                 break;\r
1407                         case 17:\r
1408                                 halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xa3, 0x2f, 0x2f, 0x60, 0x90);\r
1409                                 break;\r
1410                         case 18:\r
1411                                 halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x5, 0x5, 0xe1, 0x90);\r
1412                                 break;                  \r
1413                         case 19:\r
1414                                 halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x25, 0x25, 0xe1, 0x90);\r
1415                                 break;\r
1416                         case 20:\r
1417                                 halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x25, 0x25, 0x60, 0x90);\r
1418                                 break;\r
1419                         case 21:        \r
1420                                 halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x15, 0x03, 0x70, 0x90);\r
1421                                 break;\r
1422                         case 71:\r
1423                                 halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0xe1, 0x90);\r
1424                                 break;\r
1425                 }\r
1426         }\r
1427         else\r
1428         {\r
1429                 // disable PS tdma\r
1430                 switch(type)\r
1431                 {\r
1432                         case 0:\r
1433                                 halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0x0, 0x0, 0x0, 0x40, 0x0);\r
1434                                 break;\r
1435                         case 1:\r
1436                                 halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0x0, 0x0, 0x0, 0x48, 0x0);\r
1437                                 break;\r
1438                         default:\r
1439                                 halbtc8821a2ant_SetFwPstdma(pBtCoexist, 0x0, 0x0, 0x0, 0x40, 0x0);\r
1440                                 break;\r
1441                 }\r
1442         }\r
1443 \r
1444         // update pre state\r
1445         pCoexDm->bPrePsTdmaOn = pCoexDm->bCurPsTdmaOn;\r
1446         pCoexDm->prePsTdma = pCoexDm->curPsTdma;\r
1447 }\r
1448 \r
1449 VOID\r
1450 halbtc8821a2ant_CoexAllOff(\r
1451         IN      PBTC_COEXIST            pBtCoexist\r
1452         )\r
1453 {\r
1454         // fw all off\r
1455         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
1456         halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
1457         halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
1458 \r
1459         // sw all off\r
1460         halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
1461         halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
1462 \r
1463         // hw all off\r
1464         halbtc8821a2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55555555, 0x55555555, 0xffff, 0x3);\r
1465 }\r
1466 \r
1467 VOID\r
1468 halbtc8821a2ant_CoexUnder5G(\r
1469         IN      PBTC_COEXIST            pBtCoexist\r
1470         )\r
1471 {\r
1472         halbtc8821a2ant_CoexAllOff(pBtCoexist);\r
1473 }\r
1474 \r
1475 VOID\r
1476 halbtc8821a2ant_InitCoexDm(\r
1477         IN      PBTC_COEXIST            pBtCoexist\r
1478         )\r
1479 {       \r
1480         // force to reset coex mechanism\r
1481         halbtc8821a2ant_CoexTable(pBtCoexist, FORCE_EXEC, 0x55555555, 0x55555555, 0xffff, 0x3);\r
1482 \r
1483         halbtc8821a2ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 1);\r
1484         halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, FORCE_EXEC, 6);\r
1485         halbtc8821a2ant_DecBtPwr(pBtCoexist, FORCE_EXEC, FALSE);\r
1486 \r
1487         halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
1488         halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
1489 }\r
1490 \r
1491 VOID\r
1492 halbtc8821a2ant_BtInquiryPage(\r
1493         IN      PBTC_COEXIST            pBtCoexist\r
1494         )\r
1495 {\r
1496         BOOLEAN bLowPwrDisable=TRUE;\r
1497         \r
1498         pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
1499 \r
1500         halbtc8821a2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5afa5afa, 0xffff, 0x3);\r
1501         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
1502 }\r
1503 BOOLEAN\r
1504 halbtc8821a2ant_IsCommonAction(\r
1505         IN      PBTC_COEXIST            pBtCoexist\r
1506         )\r
1507 {\r
1508         BOOLEAN                 bCommon=FALSE, bWifiConnected=FALSE, bWifiBusy=FALSE;\r
1509         BOOLEAN                 bLowPwrDisable=FALSE;\r
1510 \r
1511         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
1512         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);\r
1513 \r
1514         halbtc8821a2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5afa5afa, 0xffff, 0x3);\r
1515 \r
1516         if(!bWifiConnected && \r
1517                 BT_8821A_2ANT_BT_STATUS_IDLE == pCoexDm->btStatus)\r
1518         {\r
1519                 bLowPwrDisable = FALSE;\r
1520                 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
1521 \r
1522                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi IPS + BT IPS!!\n"));  \r
1523 \r
1524                 \r
1525                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
1526                 halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
1527                 halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
1528                 \r
1529                 halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
1530                 halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
1531 \r
1532                 bCommon = TRUE;\r
1533         }\r
1534         else if(bWifiConnected && \r
1535                         (BT_8821A_2ANT_BT_STATUS_IDLE == pCoexDm->btStatus) )\r
1536         {               \r
1537                 bLowPwrDisable = FALSE;\r
1538                 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
1539 \r
1540                 if(bWifiBusy)\r
1541                 {       \r
1542                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi Busy + BT IPS!!\n"));\r
1543                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
1544                 }\r
1545                 else\r
1546                 {\r
1547                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi LPS + BT IPS!!\n"));\r
1548                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
1549                 }\r
1550                 \r
1551                 halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
1552                 halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
1553 \r
1554                 halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
1555                 halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
1556 \r
1557                 bCommon = TRUE;\r
1558         }\r
1559         else if(!bWifiConnected && \r
1560                 (BT_8821A_2ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus) )\r
1561         {\r
1562                 bLowPwrDisable = TRUE;\r
1563                 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
1564 \r
1565                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi IPS + BT LPS!!\n"));          \r
1566 \r
1567                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
1568                 halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
1569                 halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
1570 \r
1571                 halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
1572                 halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
1573 \r
1574                 bCommon = TRUE;\r
1575         }\r
1576         else if(bWifiConnected && \r
1577                 (BT_8821A_2ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus) )\r
1578         {\r
1579                 bLowPwrDisable = TRUE;\r
1580                 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
1581                 \r
1582                 if(bWifiBusy)\r
1583                 {\r
1584                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi Busy + BT LPS!!\n"));\r
1585                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
1586                 }\r
1587                 else\r
1588                 {\r
1589                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi LPS + BT LPS!!\n"));\r
1590                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
1591                 }\r
1592                 \r
1593                 halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
1594                 halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
1595 \r
1596                 halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,TRUE,TRUE);\r
1597                 halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
1598 \r
1599                 bCommon = TRUE;\r
1600         }\r
1601         else if(!bWifiConnected && \r
1602                         (BT_8821A_2ANT_BT_STATUS_NON_IDLE == pCoexDm->btStatus) )\r
1603         {\r
1604                 bLowPwrDisable = FALSE;\r
1605                 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
1606 \r
1607                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi IPS + BT Busy!!\n")); \r
1608 \r
1609                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
1610                 halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
1611                 halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
1612 \r
1613                 halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
1614                 halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
1615                 \r
1616                 bCommon = TRUE;\r
1617         }\r
1618         else\r
1619         {\r
1620                 bLowPwrDisable = TRUE;\r
1621                 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
1622 \r
1623                 if(bWifiBusy)\r
1624                 {\r
1625                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi Busy + BT Busy!!\n"));\r
1626                         bCommon = FALSE;\r
1627                 }\r
1628                 else\r
1629                 {\r
1630                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi LPS + BT Busy!!\n"));\r
1631                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 21);\r
1632 \r
1633                         if(halbtc8821a2ant_NeedToDecBtPwr(pBtCoexist))\r
1634                                 halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);\r
1635                         else    \r
1636                                 halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
1637                         \r
1638                         bCommon = TRUE;\r
1639                 }\r
1640 \r
1641                 halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,TRUE,TRUE);\r
1642         }\r
1643         \r
1644         return bCommon;\r
1645 }\r
1646 VOID\r
1647 halbtc8821a2ant_TdmaDurationAdjust(\r
1648         IN      PBTC_COEXIST            pBtCoexist,\r
1649         IN      BOOLEAN                 bScoHid,\r
1650         IN      BOOLEAN                 bTxPause,\r
1651         IN      u1Byte                  maxInterval\r
1652         )\r
1653 {\r
1654         static s4Byte           up,dn,m,n,WaitCount;\r
1655         s4Byte                  result;   //0: no change, +1: increase WiFi duration, -1: decrease WiFi duration\r
1656         u1Byte                  retryCount=0;\r
1657 \r
1658         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], TdmaDurationAdjust()\n"));\r
1659 \r
1660         if(pCoexDm->bResetTdmaAdjust)\r
1661         {\r
1662                 pCoexDm->bResetTdmaAdjust = FALSE;\r
1663                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], first run TdmaDurationAdjust()!!\n"));\r
1664                 {\r
1665                         if(bScoHid)\r
1666                         {\r
1667                                 if(bTxPause)\r
1668                                 {\r
1669                                         if(maxInterval == 1)\r
1670                                         {\r
1671                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 13);\r
1672                                                 pCoexDm->psTdmaDuAdjType = 13;  \r
1673                                         }\r
1674                                         else if(maxInterval == 2)\r
1675                                         {\r
1676                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);\r
1677                                                 pCoexDm->psTdmaDuAdjType = 14;  \r
1678                                         }\r
1679                                         else if(maxInterval == 3)\r
1680                                         {\r
1681                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
1682                                                 pCoexDm->psTdmaDuAdjType = 15;  \r
1683                                         }\r
1684                                         else\r
1685                                         {\r
1686                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
1687                                                 pCoexDm->psTdmaDuAdjType = 15;\r
1688                                         }\r
1689                                 }\r
1690                                 else\r
1691                                 {\r
1692                                         if(maxInterval == 1)\r
1693                                         {\r
1694                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);\r
1695                                                 pCoexDm->psTdmaDuAdjType = 9;   \r
1696                                         }\r
1697                                         else if(maxInterval == 2)\r
1698                                         {\r
1699                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);\r
1700                                                 pCoexDm->psTdmaDuAdjType = 10;  \r
1701                                         }\r
1702                                         else if(maxInterval == 3)\r
1703                                         {\r
1704                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
1705                                                 pCoexDm->psTdmaDuAdjType = 11;\r
1706                                         }\r
1707                                         else\r
1708                                         {\r
1709                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
1710                                                 pCoexDm->psTdmaDuAdjType = 11;\r
1711                                         }\r
1712                                 }\r
1713                         }\r
1714                         else\r
1715                         {\r
1716                                 if(bTxPause)\r
1717                                 {\r
1718                                         if(maxInterval == 1)\r
1719                                         {\r
1720                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);\r
1721                                                 pCoexDm->psTdmaDuAdjType = 5;   \r
1722                                         }\r
1723                                         else if(maxInterval == 2)\r
1724                                         {\r
1725                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
1726                                                 pCoexDm->psTdmaDuAdjType = 6;   \r
1727                                         }\r
1728                                         else if(maxInterval == 3)\r
1729                                         {\r
1730                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
1731                                                 pCoexDm->psTdmaDuAdjType = 7;\r
1732                                         }\r
1733                                         else\r
1734                                         {\r
1735                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
1736                                                 pCoexDm->psTdmaDuAdjType = 7;\r
1737                                         }\r
1738                                 }\r
1739                                 else\r
1740                                 {\r
1741                                         if(maxInterval == 1)\r
1742                                         {\r
1743                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);\r
1744                                                 pCoexDm->psTdmaDuAdjType = 1;   \r
1745                                         }\r
1746                                         else if(maxInterval == 2)\r
1747                                         {\r
1748                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
1749                                                 pCoexDm->psTdmaDuAdjType = 2;   \r
1750                                         }\r
1751                                         else if(maxInterval == 3)\r
1752                                         {\r
1753                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
1754                                                 pCoexDm->psTdmaDuAdjType = 3;\r
1755                                         }\r
1756                                         else\r
1757                                         {\r
1758                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
1759                                                 pCoexDm->psTdmaDuAdjType = 3;\r
1760                                         }\r
1761                                 }\r
1762                         }\r
1763                 }\r
1764                 //============\r
1765                 up = 0;\r
1766                 dn = 0;\r
1767                 m = 1;\r
1768                 n= 3;\r
1769                 result = 0;\r
1770                 WaitCount = 0;\r
1771         }\r
1772         else\r
1773         {\r
1774                 //accquire the BT TRx retry count from BT_Info byte2\r
1775                 retryCount = pCoexSta->btRetryCnt;\r
1776                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], retryCount = %d\n", retryCount));\r
1777                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], up=%d, dn=%d, m=%d, n=%d, WaitCount=%d\n", \r
1778                         up, dn, m, n, WaitCount));\r
1779                 result = 0;\r
1780                 WaitCount++; \r
1781                   \r
1782                 if(retryCount == 0)  // no retry in the last 2-second duration\r
1783                 {\r
1784                         up++;\r
1785                         dn--;\r
1786 \r
1787                         if (dn <= 0)\r
1788                                 dn = 0;                          \r
1789 \r
1790                         if(up >= n)     // if ³sÄò n ­Ó2¬í retry count¬°0, «h½Õ¼eWiFi duration\r
1791                         {\r
1792                                 WaitCount = 0; \r
1793                                 n = 3;\r
1794                                 up = 0;\r
1795                                 dn = 0;\r
1796                                 result = 1; \r
1797                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Increase wifi duration!!\n"));\r
1798                         }\r
1799                 }\r
1800                 else if (retryCount <= 3)       // <=3 retry in the last 2-second duration\r
1801                 {\r
1802                         up--; \r
1803                         dn++;\r
1804 \r
1805                         if (up <= 0)\r
1806                                 up = 0;\r
1807 \r
1808                         if (dn == 2)    // if ³sÄò 2 ­Ó2¬í retry count< 3, «h½Õ¯¶WiFi duration\r
1809                         {\r
1810                                 if (WaitCount <= 2)\r
1811                                         m++; // ÁקK¤@ª½¦b¨â­Ólevel¤¤¨Ó¦^\r
1812                                 else\r
1813                                         m = 1;\r
1814 \r
1815                                 if ( m >= 20) //m ³Ì¤j­È = 20 ' ³Ì¤j120¬í recheck¬O§_½Õ¾ã WiFi duration.\r
1816                                         m = 20;\r
1817 \r
1818                                 n = 3*m;\r
1819                                 up = 0;\r
1820                                 dn = 0;\r
1821                                 WaitCount = 0;\r
1822                                 result = -1; \r
1823                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Decrease wifi duration for retryCounter<3!!\n"));\r
1824                         }\r
1825                 }\r
1826                 else  //retry count > 3, ¥u­n1¦¸ retry count > 3, «h½Õ¯¶WiFi duration\r
1827                 {\r
1828                         if (WaitCount == 1)\r
1829                                 m++; // ÁקK¤@ª½¦b¨â­Ólevel¤¤¨Ó¦^\r
1830                         else\r
1831                                 m = 1;\r
1832 \r
1833                         if ( m >= 20) //m ³Ì¤j­È = 20 ' ³Ì¤j120¬í recheck¬O§_½Õ¾ã WiFi duration.\r
1834                                 m = 20;\r
1835 \r
1836                         n = 3*m;\r
1837                         up = 0;\r
1838                         dn = 0;\r
1839                         WaitCount = 0; \r
1840                         result = -1;\r
1841                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Decrease wifi duration for retryCounter>3!!\n"));\r
1842                 }\r
1843 \r
1844                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], max Interval = %d\n", maxInterval));\r
1845                 if(maxInterval == 1)\r
1846                 {\r
1847                         if(bTxPause)\r
1848                         {\r
1849                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 1\n"));\r
1850 \r
1851                                 if(pCoexDm->curPsTdma == 71)\r
1852                                 {\r
1853                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);\r
1854                                         pCoexDm->psTdmaDuAdjType = 5;\r
1855                                 }\r
1856                                 else if(pCoexDm->curPsTdma == 1)\r
1857                                 {\r
1858                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);\r
1859                                         pCoexDm->psTdmaDuAdjType = 5;\r
1860                                 }\r
1861                                 else if(pCoexDm->curPsTdma == 2)\r
1862                                 {\r
1863                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
1864                                         pCoexDm->psTdmaDuAdjType = 6;\r
1865                                 }\r
1866                                 else if(pCoexDm->curPsTdma == 3)\r
1867                                 {\r
1868                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
1869                                         pCoexDm->psTdmaDuAdjType = 7;\r
1870                                 }\r
1871                                 else if(pCoexDm->curPsTdma == 4)\r
1872                                 {\r
1873                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 8);\r
1874                                         pCoexDm->psTdmaDuAdjType = 8;\r
1875                                 }\r
1876                                 if(pCoexDm->curPsTdma == 9)\r
1877                                 {\r
1878                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 13);\r
1879                                         pCoexDm->psTdmaDuAdjType = 13;\r
1880                                 }\r
1881                                 else if(pCoexDm->curPsTdma == 10)\r
1882                                 {\r
1883                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);\r
1884                                         pCoexDm->psTdmaDuAdjType = 14;\r
1885                                 }\r
1886                                 else if(pCoexDm->curPsTdma == 11)\r
1887                                 {\r
1888                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
1889                                         pCoexDm->psTdmaDuAdjType = 15;\r
1890                                 }\r
1891                                 else if(pCoexDm->curPsTdma == 12)\r
1892                                 {\r
1893                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 16);\r
1894                                         pCoexDm->psTdmaDuAdjType = 16;\r
1895                                 }\r
1896                                 \r
1897                                 if(result == -1)\r
1898                                 {                                       \r
1899                                         if(pCoexDm->curPsTdma == 5)\r
1900                                         {\r
1901                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
1902                                                 pCoexDm->psTdmaDuAdjType = 6;\r
1903                                         }\r
1904                                         else if(pCoexDm->curPsTdma == 6)\r
1905                                         {\r
1906                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
1907                                                 pCoexDm->psTdmaDuAdjType = 7;\r
1908                                         }\r
1909                                         else if(pCoexDm->curPsTdma == 7)\r
1910                                         {\r
1911                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 8);\r
1912                                                 pCoexDm->psTdmaDuAdjType = 8;\r
1913                                         }\r
1914                                         else if(pCoexDm->curPsTdma == 13)\r
1915                                         {\r
1916                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);\r
1917                                                 pCoexDm->psTdmaDuAdjType = 14;\r
1918                                         }\r
1919                                         else if(pCoexDm->curPsTdma == 14)\r
1920                                         {\r
1921                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
1922                                                 pCoexDm->psTdmaDuAdjType = 15;\r
1923                                         }\r
1924                                         else if(pCoexDm->curPsTdma == 15)\r
1925                                         {\r
1926                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 16);\r
1927                                                 pCoexDm->psTdmaDuAdjType = 16;\r
1928                                         }\r
1929                                 } \r
1930                                 else if (result == 1)\r
1931                                 {\r
1932                                         if(pCoexDm->curPsTdma == 8)\r
1933                                         {\r
1934                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
1935                                                 pCoexDm->psTdmaDuAdjType = 7;\r
1936                                         }\r
1937                                         else if(pCoexDm->curPsTdma == 7)\r
1938                                         {\r
1939                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
1940                                                 pCoexDm->psTdmaDuAdjType = 6;\r
1941                                         }\r
1942                                         else if(pCoexDm->curPsTdma == 6)\r
1943                                         {\r
1944                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);\r
1945                                                 pCoexDm->psTdmaDuAdjType = 5;\r
1946                                         }\r
1947                                         else if(pCoexDm->curPsTdma == 16)\r
1948                                         {\r
1949                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
1950                                                 pCoexDm->psTdmaDuAdjType = 15;\r
1951                                         }\r
1952                                         else if(pCoexDm->curPsTdma == 15)\r
1953                                         {\r
1954                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);\r
1955                                                 pCoexDm->psTdmaDuAdjType = 14;\r
1956                                         }\r
1957                                         else if(pCoexDm->curPsTdma == 14)\r
1958                                         {\r
1959                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 13);\r
1960                                                 pCoexDm->psTdmaDuAdjType = 13;\r
1961                                         }\r
1962                                 }\r
1963                         }\r
1964                         else\r
1965                         {\r
1966                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 0\n"));\r
1967                                 if(pCoexDm->curPsTdma == 5)\r
1968                                 {\r
1969                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 71);\r
1970                                         pCoexDm->psTdmaDuAdjType = 71;\r
1971                                 }\r
1972                                 else if(pCoexDm->curPsTdma == 6)\r
1973                                 {\r
1974                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
1975                                         pCoexDm->psTdmaDuAdjType = 2;\r
1976                                 }\r
1977                                 else if(pCoexDm->curPsTdma == 7)\r
1978                                 {\r
1979                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
1980                                         pCoexDm->psTdmaDuAdjType = 3;\r
1981                                 }\r
1982                                 else if(pCoexDm->curPsTdma == 8)\r
1983                                 {\r
1984                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 4);\r
1985                                         pCoexDm->psTdmaDuAdjType = 4;\r
1986                                 }\r
1987                                 if(pCoexDm->curPsTdma == 13)\r
1988                                 {\r
1989                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);\r
1990                                         pCoexDm->psTdmaDuAdjType = 9;\r
1991                                 }\r
1992                                 else if(pCoexDm->curPsTdma == 14)\r
1993                                 {\r
1994                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);\r
1995                                         pCoexDm->psTdmaDuAdjType = 10;\r
1996                                 }\r
1997                                 else if(pCoexDm->curPsTdma == 15)\r
1998                                 {\r
1999                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2000                                         pCoexDm->psTdmaDuAdjType = 11;\r
2001                                 }\r
2002                                 else if(pCoexDm->curPsTdma == 16)\r
2003                                 {\r
2004                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 12);\r
2005                                         pCoexDm->psTdmaDuAdjType = 12;\r
2006                                 }\r
2007                                 \r
2008                                 if(result == -1)\r
2009                                 {\r
2010                                         if(pCoexDm->curPsTdma == 71)\r
2011                                         {\r
2012                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);\r
2013                                                 pCoexDm->psTdmaDuAdjType = 1;\r
2014                                         }\r
2015                                         else if(pCoexDm->curPsTdma == 1)\r
2016                                         {\r
2017                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
2018                                                 pCoexDm->psTdmaDuAdjType = 2;\r
2019                                         }\r
2020                                         else if(pCoexDm->curPsTdma == 2)\r
2021                                         {\r
2022                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2023                                                 pCoexDm->psTdmaDuAdjType = 3;\r
2024                                         }\r
2025                                         else if(pCoexDm->curPsTdma == 3)\r
2026                                         {\r
2027                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 4);\r
2028                                                 pCoexDm->psTdmaDuAdjType = 4;\r
2029                                         }\r
2030                                         else if(pCoexDm->curPsTdma == 9)\r
2031                                         {\r
2032                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);\r
2033                                                 pCoexDm->psTdmaDuAdjType = 10;\r
2034                                         }\r
2035                                         else if(pCoexDm->curPsTdma == 10)\r
2036                                         {\r
2037                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2038                                                 pCoexDm->psTdmaDuAdjType = 11;\r
2039                                         }\r
2040                                         else if(pCoexDm->curPsTdma == 11)\r
2041                                         {\r
2042                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 12);\r
2043                                                 pCoexDm->psTdmaDuAdjType = 12;\r
2044                                         }\r
2045                                 } \r
2046                                 else if (result == 1)\r
2047                                 {\r
2048                                         if(pCoexDm->curPsTdma == 4)\r
2049                                         {\r
2050                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2051                                                 pCoexDm->psTdmaDuAdjType = 3;\r
2052                                         }\r
2053                                         else if(pCoexDm->curPsTdma == 3)\r
2054                                         {\r
2055                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
2056                                                 pCoexDm->psTdmaDuAdjType = 2;\r
2057                                         }\r
2058                                         else if(pCoexDm->curPsTdma == 2)\r
2059                                         {\r
2060                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);\r
2061                                                 pCoexDm->psTdmaDuAdjType = 1;\r
2062                                         }\r
2063                                         else if(pCoexDm->curPsTdma == 1)\r
2064                                         {\r
2065                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 71);\r
2066                                                 pCoexDm->psTdmaDuAdjType = 71;\r
2067                                         }\r
2068                                         else if(pCoexDm->curPsTdma == 12)\r
2069                                         {\r
2070                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2071                                                 pCoexDm->psTdmaDuAdjType = 11;\r
2072                                         }\r
2073                                         else if(pCoexDm->curPsTdma == 11)\r
2074                                         {\r
2075                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);\r
2076                                                 pCoexDm->psTdmaDuAdjType = 10;\r
2077                                         }\r
2078                                         else if(pCoexDm->curPsTdma == 10)\r
2079                                         {\r
2080                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);\r
2081                                                 pCoexDm->psTdmaDuAdjType = 9;\r
2082                                         }\r
2083                                 }\r
2084                         }\r
2085                 }\r
2086                 else if(maxInterval == 2)\r
2087                 {\r
2088                         if(bTxPause)\r
2089                         {\r
2090                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 1\n"));\r
2091                                 if(pCoexDm->curPsTdma == 1)\r
2092                                 {\r
2093                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
2094                                         pCoexDm->psTdmaDuAdjType = 6;\r
2095                                 }\r
2096                                 else if(pCoexDm->curPsTdma == 2)\r
2097                                 {\r
2098                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
2099                                         pCoexDm->psTdmaDuAdjType = 6;\r
2100                                 }\r
2101                                 else if(pCoexDm->curPsTdma == 3)\r
2102                                 {\r
2103                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2104                                         pCoexDm->psTdmaDuAdjType = 7;\r
2105                                 }\r
2106                                 else if(pCoexDm->curPsTdma == 4)\r
2107                                 {\r
2108                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 8);\r
2109                                         pCoexDm->psTdmaDuAdjType = 8;\r
2110                                 }\r
2111                                 if(pCoexDm->curPsTdma == 9)\r
2112                                 {\r
2113                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);\r
2114                                         pCoexDm->psTdmaDuAdjType = 14;\r
2115                                 }\r
2116                                 else if(pCoexDm->curPsTdma == 10)\r
2117                                 {\r
2118                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);\r
2119                                         pCoexDm->psTdmaDuAdjType = 14;\r
2120                                 }\r
2121                                 else if(pCoexDm->curPsTdma == 11)\r
2122                                 {\r
2123                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2124                                         pCoexDm->psTdmaDuAdjType = 15;\r
2125                                 }\r
2126                                 else if(pCoexDm->curPsTdma == 12)\r
2127                                 {\r
2128                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 16);\r
2129                                         pCoexDm->psTdmaDuAdjType = 16;\r
2130                                 }\r
2131                                 if(result == -1)\r
2132                                 {\r
2133                                         if(pCoexDm->curPsTdma == 5) \r
2134                                         {\r
2135                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
2136                                                 pCoexDm->psTdmaDuAdjType = 6;\r
2137                                         }\r
2138                                         else if(pCoexDm->curPsTdma == 6)\r
2139                                         {\r
2140                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2141                                                 pCoexDm->psTdmaDuAdjType = 7;\r
2142                                         }\r
2143                                         else if(pCoexDm->curPsTdma == 7)\r
2144                                         {\r
2145                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 8);\r
2146                                                 pCoexDm->psTdmaDuAdjType = 8;\r
2147                                         }\r
2148                                         else if(pCoexDm->curPsTdma == 13)\r
2149                                         {\r
2150                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);\r
2151                                                 pCoexDm->psTdmaDuAdjType = 14;\r
2152                                         }\r
2153                                         else if(pCoexDm->curPsTdma == 14)\r
2154                                         {\r
2155                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2156                                                 pCoexDm->psTdmaDuAdjType = 15;\r
2157                                         }\r
2158                                         else if(pCoexDm->curPsTdma == 15)\r
2159                                         {\r
2160                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 16);\r
2161                                                 pCoexDm->psTdmaDuAdjType = 16;\r
2162                                         }\r
2163                                 } \r
2164                                 else if (result == 1)\r
2165                                 {\r
2166                                         if(pCoexDm->curPsTdma == 8)\r
2167                                         {\r
2168                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2169                                                 pCoexDm->psTdmaDuAdjType = 7;\r
2170                                         }\r
2171                                         else if(pCoexDm->curPsTdma == 7)\r
2172                                         {\r
2173                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
2174                                                 pCoexDm->psTdmaDuAdjType = 6;\r
2175                                         }\r
2176                                         else if(pCoexDm->curPsTdma == 6)\r
2177                                         {\r
2178                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
2179                                                 pCoexDm->psTdmaDuAdjType = 6;\r
2180                                         }                                       \r
2181                                         else if(pCoexDm->curPsTdma == 16)\r
2182                                         {\r
2183                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2184                                                 pCoexDm->psTdmaDuAdjType = 15;\r
2185                                         }\r
2186                                         else if(pCoexDm->curPsTdma == 15)\r
2187                                         {\r
2188                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);\r
2189                                                 pCoexDm->psTdmaDuAdjType = 14;\r
2190                                         }\r
2191                                         else if(pCoexDm->curPsTdma == 14)\r
2192                                         {\r
2193                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);\r
2194                                                 pCoexDm->psTdmaDuAdjType = 14;\r
2195                                         }\r
2196                                 }\r
2197                         }\r
2198                         else\r
2199                         {\r
2200                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 0\n"));\r
2201                                 if(pCoexDm->curPsTdma == 5)\r
2202                                 {\r
2203                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
2204                                         pCoexDm->psTdmaDuAdjType = 2;\r
2205                                 }\r
2206                                 else if(pCoexDm->curPsTdma == 6)\r
2207                                 {\r
2208                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
2209                                         pCoexDm->psTdmaDuAdjType = 2;\r
2210                                 }\r
2211                                 else if(pCoexDm->curPsTdma == 7)\r
2212                                 {\r
2213                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2214                                         pCoexDm->psTdmaDuAdjType = 3;\r
2215                                 }\r
2216                                 else if(pCoexDm->curPsTdma == 8)\r
2217                                 {\r
2218                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 4);\r
2219                                         pCoexDm->psTdmaDuAdjType = 4;\r
2220                                 }\r
2221                                 if(pCoexDm->curPsTdma == 13)\r
2222                                 {\r
2223                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);\r
2224                                         pCoexDm->psTdmaDuAdjType = 10;\r
2225                                 }\r
2226                                 else if(pCoexDm->curPsTdma == 14)\r
2227                                 {\r
2228                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);\r
2229                                         pCoexDm->psTdmaDuAdjType = 10;\r
2230                                 }\r
2231                                 else if(pCoexDm->curPsTdma == 15)\r
2232                                 {\r
2233                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2234                                         pCoexDm->psTdmaDuAdjType = 11;\r
2235                                 }\r
2236                                 else if(pCoexDm->curPsTdma == 16)\r
2237                                 {\r
2238                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 12);\r
2239                                         pCoexDm->psTdmaDuAdjType = 12;\r
2240                                 }\r
2241                                 if(result == -1)\r
2242                                 {\r
2243                                         if(pCoexDm->curPsTdma == 1)\r
2244                                         {\r
2245                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
2246                                                 pCoexDm->psTdmaDuAdjType = 2;\r
2247                                         }\r
2248                                         else if(pCoexDm->curPsTdma == 2)\r
2249                                         {\r
2250                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2251                                                 pCoexDm->psTdmaDuAdjType = 3;\r
2252                                         }\r
2253                                         else if(pCoexDm->curPsTdma == 3)\r
2254                                         {\r
2255                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 4);\r
2256                                                 pCoexDm->psTdmaDuAdjType = 4;\r
2257                                         }\r
2258                                         else if(pCoexDm->curPsTdma == 9)\r
2259                                         {\r
2260                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);\r
2261                                                 pCoexDm->psTdmaDuAdjType = 10;\r
2262                                         }\r
2263                                         else if(pCoexDm->curPsTdma == 10)\r
2264                                         {\r
2265                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2266                                                 pCoexDm->psTdmaDuAdjType = 11;\r
2267                                         }\r
2268                                         else if(pCoexDm->curPsTdma == 11)\r
2269                                         {\r
2270                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 12);\r
2271                                                 pCoexDm->psTdmaDuAdjType = 12;\r
2272                                         }\r
2273                                 } \r
2274                                 else if (result == 1)\r
2275                                 {\r
2276                                         if(pCoexDm->curPsTdma == 4)\r
2277                                         {\r
2278                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2279                                                 pCoexDm->psTdmaDuAdjType = 3;\r
2280                                         }\r
2281                                         else if(pCoexDm->curPsTdma == 3)\r
2282                                         {\r
2283                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
2284                                                 pCoexDm->psTdmaDuAdjType = 2;\r
2285                                         }\r
2286                                         else if(pCoexDm->curPsTdma == 2)\r
2287                                         {\r
2288                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
2289                                                 pCoexDm->psTdmaDuAdjType = 2;\r
2290                                         }\r
2291                                         else if(pCoexDm->curPsTdma == 12)\r
2292                                         {\r
2293                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2294                                                 pCoexDm->psTdmaDuAdjType = 11;\r
2295                                         }\r
2296                                         else if(pCoexDm->curPsTdma == 11)\r
2297                                         {\r
2298                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);\r
2299                                                 pCoexDm->psTdmaDuAdjType = 10;\r
2300                                         }\r
2301                                         else if(pCoexDm->curPsTdma == 10)\r
2302                                         {\r
2303                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);\r
2304                                                 pCoexDm->psTdmaDuAdjType = 10;\r
2305                                         }\r
2306                                 }\r
2307                         }\r
2308                 }\r
2309                 else if(maxInterval == 3)\r
2310                 {\r
2311                         if(bTxPause)\r
2312                         {\r
2313                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 1\n"));\r
2314                                 if(pCoexDm->curPsTdma == 1)\r
2315                                 {\r
2316                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2317                                         pCoexDm->psTdmaDuAdjType = 7;\r
2318                                 }\r
2319                                 else if(pCoexDm->curPsTdma == 2)\r
2320                                 {\r
2321                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2322                                         pCoexDm->psTdmaDuAdjType = 7;\r
2323                                 }\r
2324                                 else if(pCoexDm->curPsTdma == 3)\r
2325                                 {\r
2326                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2327                                         pCoexDm->psTdmaDuAdjType = 7;\r
2328                                 }\r
2329                                 else if(pCoexDm->curPsTdma == 4)\r
2330                                 {\r
2331                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 8);\r
2332                                         pCoexDm->psTdmaDuAdjType = 8;\r
2333                                 }\r
2334                                 if(pCoexDm->curPsTdma == 9)\r
2335                                 {\r
2336                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2337                                         pCoexDm->psTdmaDuAdjType = 15;\r
2338                                 }\r
2339                                 else if(pCoexDm->curPsTdma == 10)\r
2340                                 {\r
2341                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2342                                         pCoexDm->psTdmaDuAdjType = 15;\r
2343                                 }\r
2344                                 else if(pCoexDm->curPsTdma == 11)\r
2345                                 {\r
2346                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2347                                         pCoexDm->psTdmaDuAdjType = 15;\r
2348                                 }\r
2349                                 else if(pCoexDm->curPsTdma == 12)\r
2350                                 {\r
2351                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 16);\r
2352                                         pCoexDm->psTdmaDuAdjType = 16;\r
2353                                 }\r
2354                                 if(result == -1)\r
2355                                 {\r
2356                                         if(pCoexDm->curPsTdma == 5) \r
2357                                         {\r
2358                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2359                                                 pCoexDm->psTdmaDuAdjType = 7;\r
2360                                         }\r
2361                                         else if(pCoexDm->curPsTdma == 6)\r
2362                                         {\r
2363                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2364                                                 pCoexDm->psTdmaDuAdjType = 7;\r
2365                                         }\r
2366                                         else if(pCoexDm->curPsTdma == 7)\r
2367                                         {\r
2368                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 8);\r
2369                                                 pCoexDm->psTdmaDuAdjType = 8;\r
2370                                         }\r
2371                                         else if(pCoexDm->curPsTdma == 13)\r
2372                                         {\r
2373                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2374                                                 pCoexDm->psTdmaDuAdjType = 15;\r
2375                                         }\r
2376                                         else if(pCoexDm->curPsTdma == 14)\r
2377                                         {\r
2378                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2379                                                 pCoexDm->psTdmaDuAdjType = 15;\r
2380                                         }\r
2381                                         else if(pCoexDm->curPsTdma == 15)\r
2382                                         {\r
2383                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 16);\r
2384                                                 pCoexDm->psTdmaDuAdjType = 16;\r
2385                                         }\r
2386                                 } \r
2387                                 else if (result == 1)\r
2388                                 {\r
2389                                         if(pCoexDm->curPsTdma == 8)\r
2390                                         {\r
2391                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2392                                                 pCoexDm->psTdmaDuAdjType = 7;\r
2393                                         }\r
2394                                         else if(pCoexDm->curPsTdma == 7)\r
2395                                         {\r
2396                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2397                                                 pCoexDm->psTdmaDuAdjType = 7;\r
2398                                         }\r
2399                                         else if(pCoexDm->curPsTdma == 6)\r
2400                                         {\r
2401                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2402                                                 pCoexDm->psTdmaDuAdjType = 7;\r
2403                                         }                                       \r
2404                                         else if(pCoexDm->curPsTdma == 16)\r
2405                                         {\r
2406                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2407                                                 pCoexDm->psTdmaDuAdjType = 15;\r
2408                                         }\r
2409                                         else if(pCoexDm->curPsTdma == 15)\r
2410                                         {\r
2411                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2412                                                 pCoexDm->psTdmaDuAdjType = 15;\r
2413                                         }\r
2414                                         else if(pCoexDm->curPsTdma == 14)\r
2415                                         {\r
2416                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2417                                                 pCoexDm->psTdmaDuAdjType = 15;\r
2418                                         }\r
2419                                 }\r
2420                         }\r
2421                         else\r
2422                         {\r
2423                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 0\n"));\r
2424                                 if(pCoexDm->curPsTdma == 5)\r
2425                                 {\r
2426                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2427                                         pCoexDm->psTdmaDuAdjType = 3;\r
2428                                 }\r
2429                                 else if(pCoexDm->curPsTdma == 6)\r
2430                                 {\r
2431                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2432                                         pCoexDm->psTdmaDuAdjType = 3;\r
2433                                 }\r
2434                                 else if(pCoexDm->curPsTdma == 7)\r
2435                                 {\r
2436                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2437                                         pCoexDm->psTdmaDuAdjType = 3;\r
2438                                 }\r
2439                                 else if(pCoexDm->curPsTdma == 8)\r
2440                                 {\r
2441                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 4);\r
2442                                         pCoexDm->psTdmaDuAdjType = 4;\r
2443                                 }\r
2444                                 if(pCoexDm->curPsTdma == 13)\r
2445                                 {\r
2446                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2447                                         pCoexDm->psTdmaDuAdjType = 11;\r
2448                                 }\r
2449                                 else if(pCoexDm->curPsTdma == 14)\r
2450                                 {\r
2451                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2452                                         pCoexDm->psTdmaDuAdjType = 11;\r
2453                                 }\r
2454                                 else if(pCoexDm->curPsTdma == 15)\r
2455                                 {\r
2456                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2457                                         pCoexDm->psTdmaDuAdjType = 11;\r
2458                                 }\r
2459                                 else if(pCoexDm->curPsTdma == 16)\r
2460                                 {\r
2461                                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 12);\r
2462                                         pCoexDm->psTdmaDuAdjType = 12;\r
2463                                 }\r
2464                                 if(result == -1)\r
2465                                 {\r
2466                                         if(pCoexDm->curPsTdma == 1)\r
2467                                         {\r
2468                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2469                                                 pCoexDm->psTdmaDuAdjType = 3;\r
2470                                         }\r
2471                                         else if(pCoexDm->curPsTdma == 2)\r
2472                                         {\r
2473                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2474                                                 pCoexDm->psTdmaDuAdjType = 3;\r
2475                                         }\r
2476                                         else if(pCoexDm->curPsTdma == 3)\r
2477                                         {\r
2478                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 4);\r
2479                                                 pCoexDm->psTdmaDuAdjType = 4;\r
2480                                         }\r
2481                                         else if(pCoexDm->curPsTdma == 9)\r
2482                                         {\r
2483                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2484                                                 pCoexDm->psTdmaDuAdjType = 11;\r
2485                                         }\r
2486                                         else if(pCoexDm->curPsTdma == 10)\r
2487                                         {\r
2488                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2489                                                 pCoexDm->psTdmaDuAdjType = 11;\r
2490                                         }\r
2491                                         else if(pCoexDm->curPsTdma == 11)\r
2492                                         {\r
2493                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 12);\r
2494                                                 pCoexDm->psTdmaDuAdjType = 12;\r
2495                                         }\r
2496                                 } \r
2497                                 else if (result == 1)\r
2498                                 {\r
2499                                         if(pCoexDm->curPsTdma == 4)\r
2500                                         {\r
2501                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2502                                                 pCoexDm->psTdmaDuAdjType = 3;\r
2503                                         }\r
2504                                         else if(pCoexDm->curPsTdma == 3)\r
2505                                         {\r
2506                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2507                                                 pCoexDm->psTdmaDuAdjType = 3;\r
2508                                         }\r
2509                                         else if(pCoexDm->curPsTdma == 2)\r
2510                                         {\r
2511                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2512                                                 pCoexDm->psTdmaDuAdjType = 3;\r
2513                                         }\r
2514                                         else if(pCoexDm->curPsTdma == 12)\r
2515                                         {\r
2516                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2517                                                 pCoexDm->psTdmaDuAdjType = 11;\r
2518                                         }\r
2519                                         else if(pCoexDm->curPsTdma == 11)\r
2520                                         {\r
2521                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2522                                                 pCoexDm->psTdmaDuAdjType = 11;\r
2523                                         }\r
2524                                         else if(pCoexDm->curPsTdma == 10)\r
2525                                         {\r
2526                                                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2527                                                 pCoexDm->psTdmaDuAdjType = 11;\r
2528                                         }\r
2529                                 }\r
2530                         }\r
2531                 }\r
2532         }\r
2533 \r
2534         // if current PsTdma not match with the recorded one (when scan, dhcp...), \r
2535         // then we have to adjust it back to the previous record one.\r
2536         if(pCoexDm->curPsTdma != pCoexDm->psTdmaDuAdjType)\r
2537         {\r
2538                 BOOLEAN bScan=FALSE, bLink=FALSE, bRoam=FALSE;\r
2539                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], PsTdma type dismatch!!!, curPsTdma=%d, recordPsTdma=%d\n", \r
2540                         pCoexDm->curPsTdma, pCoexDm->psTdmaDuAdjType));\r
2541 \r
2542                 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);\r
2543                 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_LINK, &bLink);\r
2544                 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_ROAM, &bRoam);\r
2545                 \r
2546                 if( !bScan && !bLink && !bRoam)\r
2547                 {\r
2548                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, pCoexDm->psTdmaDuAdjType);\r
2549                 }\r
2550                 else\r
2551                 {\r
2552                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], roaming/link/scan is under progress, will adjust next time!!!\n"));\r
2553                 }\r
2554         }\r
2555 \r
2556         // when halbtc8821a2ant_TdmaDurationAdjust() is called, fw dac swing is included in the function.\r
2557         //if(pCoexDm->psTdmaDuAdjType == 71)\r
2558         //      halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 0xc); //Skip because A2DP get worse at HT40\r
2559         //else\r
2560                 halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 0x6);\r
2561 }\r
2562 \r
2563 // SCO only or SCO+PAN(HS)\r
2564 VOID\r
2565 halbtc8821a2ant_ActionSco(\r
2566         IN      PBTC_COEXIST            pBtCoexist\r
2567         )\r
2568 {\r
2569         u1Byte  wifiRssiState,btRssiState;\r
2570         u4Byte  wifiBw;\r
2571 \r
2572         wifiRssiState = halbtc8821a2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
2573         btRssiState = halbtc8821a2ant_BtRssiState(2, 35, 0);\r
2574 \r
2575         halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 4);\r
2576 \r
2577         if(halbtc8821a2ant_NeedToDecBtPwr(pBtCoexist))\r
2578                 halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);\r
2579         else    \r
2580                 halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
2581         \r
2582         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
2583 \r
2584         if (BTC_WIFI_BW_LEGACY == wifiBw) //for SCO quality at 11b/g mode\r
2585         {\r
2586                 halbtc8821a2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x5a5a5a5a, 0x5a5a5a5a, 0xffff, 0x3);\r
2587         }\r
2588         else  //for SCO quality & wifi performance balance at 11n mode\r
2589         {\r
2590                 halbtc8821a2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x5aea5aea, 0x5aea5aea, 0xffff, 0x3);\r
2591         }\r
2592 \r
2593         if(BTC_WIFI_BW_HT40 == wifiBw)\r
2594         {\r
2595         \r
2596                 // fw mechanism\r
2597                 //halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);\r
2598 \r
2599                 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
2600                         (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
2601                 {\r
2602                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0); //for voice quality\r
2603                 }\r
2604                 else\r
2605                 {\r
2606                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0); //for voice quality\r
2607                 }\r
2608 \r
2609                 // sw mechanism\r
2610                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
2611                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
2612                 {\r
2613                         halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
2614                         halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);                 \r
2615                 }\r
2616                 else\r
2617                 {\r
2618                         halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
2619                         halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);        \r
2620                 }               \r
2621         }\r
2622         else\r
2623         {\r
2624                 // fw mechanism\r
2625                 //halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);\r
2626 \r
2627                 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
2628                         (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
2629                 {\r
2630                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0); //for voice quality\r
2631                 }\r
2632                 else\r
2633                 {\r
2634                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0); //for voice quality\r
2635                 }\r
2636                 \r
2637                 // sw mechanism\r
2638                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
2639                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
2640                 {\r
2641                          halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
2642                          halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
2643                 }\r
2644                 else\r
2645                 {\r
2646                          halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
2647                          halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
2648                 }               \r
2649         }\r
2650 }\r
2651 \r
2652 \r
2653 VOID\r
2654 halbtc8821a2ant_ActionHid(\r
2655         IN      PBTC_COEXIST            pBtCoexist\r
2656         )\r
2657 {\r
2658         u1Byte  wifiRssiState, btRssiState;     \r
2659         u4Byte  wifiBw;\r
2660 \r
2661         wifiRssiState = halbtc8821a2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
2662         btRssiState = halbtc8821a2ant_BtRssiState(2, 35, 0);\r
2663 \r
2664         halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
2665 \r
2666         if(halbtc8821a2ant_NeedToDecBtPwr(pBtCoexist))\r
2667                 halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);\r
2668         else    \r
2669                 halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
2670 \r
2671         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
2672 \r
2673         if (BTC_WIFI_BW_LEGACY == wifiBw) //for HID at 11b/g mode\r
2674         {\r
2675                 halbtc8821a2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5a5a5a5a, 0xffff, 0x3);\r
2676         }\r
2677         else  //for HID quality & wifi performance balance at 11n mode\r
2678         {\r
2679                 halbtc8821a2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5aea5aea, 0xffff, 0x3);\r
2680         }\r
2681 \r
2682         if(BTC_WIFI_BW_HT40 == wifiBw)\r
2683         {\r
2684                 // fw mechanism\r
2685                 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
2686                         (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
2687                 {\r
2688                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);\r
2689                 }\r
2690                 else\r
2691                 {\r
2692                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 13);\r
2693                 }\r
2694 \r
2695                 // sw mechanism\r
2696                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
2697                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
2698                 {\r
2699                          halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
2700                          halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
2701                 }\r
2702                 else\r
2703                 {\r
2704                          halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
2705                          halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
2706                 }       \r
2707         }\r
2708         else\r
2709         {\r
2710                 // fw mechanism\r
2711                 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
2712                         (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
2713                 {\r
2714                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);\r
2715                 }\r
2716                 else\r
2717                 {\r
2718                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 13);\r
2719                 }\r
2720 \r
2721                 // sw mechanism\r
2722                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
2723                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
2724                 {\r
2725                          halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
2726                          halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
2727                 }\r
2728                 else\r
2729                 {\r
2730                          halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
2731                          halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
2732                 }               \r
2733         }\r
2734 }\r
2735 \r
2736 //A2DP only / PAN(EDR) only/ A2DP+PAN(HS)\r
2737 VOID\r
2738 halbtc8821a2ant_ActionA2dp(\r
2739         IN      PBTC_COEXIST            pBtCoexist\r
2740         )\r
2741 {\r
2742         u1Byte          wifiRssiState, btRssiState;\r
2743         u4Byte          wifiBw;\r
2744 \r
2745         wifiRssiState = halbtc8821a2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
2746         btRssiState = halbtc8821a2ant_BtRssiState(2, 35, 0);\r
2747 \r
2748         //fw dac swing is called in halbtc8821a2ant_TdmaDurationAdjust()\r
2749         //halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
2750         \r
2751 \r
2752         if(halbtc8821a2ant_NeedToDecBtPwr(pBtCoexist))\r
2753                 halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);\r
2754         else    \r
2755                 halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
2756 \r
2757         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
2758 \r
2759         if(BTC_WIFI_BW_HT40 == wifiBw)\r
2760         {\r
2761                 // fw mechanism\r
2762                 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
2763                         (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
2764                 {\r
2765                         halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 1);\r
2766                 }\r
2767                 else\r
2768                 {\r
2769                         halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 1);\r
2770                 }\r
2771 \r
2772                 // sw mechanism\r
2773                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
2774                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
2775                 {\r
2776                          halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
2777                          halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
2778                 }\r
2779                 else\r
2780                 {\r
2781                          halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
2782                          halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
2783                 }\r
2784         }\r
2785         else\r
2786         {\r
2787                 // fw mechanism\r
2788                 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
2789                         (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
2790                 {\r
2791                         halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 1);\r
2792                 }\r
2793                 else\r
2794                 {\r
2795                         halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 1);\r
2796                 }\r
2797                 \r
2798                 // sw mechanism\r
2799                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
2800                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
2801                 {\r
2802                          halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
2803                          halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
2804                 }\r
2805                 else\r
2806                 {\r
2807                          halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
2808                          halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
2809                 }               \r
2810         }\r
2811 }\r
2812 \r
2813 VOID\r
2814 halbtc8821a2ant_ActionA2dpPanHs(\r
2815         IN      PBTC_COEXIST            pBtCoexist\r
2816         )\r
2817 {\r
2818         u1Byte          wifiRssiState, btRssiState, btInfoExt;\r
2819         u4Byte          wifiBw;\r
2820 \r
2821         btInfoExt = pCoexSta->btInfoExt;\r
2822         wifiRssiState = halbtc8821a2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
2823         btRssiState = halbtc8821a2ant_BtRssiState(2,35, 0);\r
2824 \r
2825         //fw dac swing is called in halbtc8821a2ant_TdmaDurationAdjust()\r
2826         //halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
2827 \r
2828 \r
2829         if(halbtc8821a2ant_NeedToDecBtPwr(pBtCoexist))\r
2830                 halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);\r
2831         else    \r
2832                 halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
2833 \r
2834         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
2835 \r
2836         if(BTC_WIFI_BW_HT40 == wifiBw)\r
2837         {\r
2838                 // fw mechanism\r
2839                 if(btInfoExt&BIT0)      //a2dp basic rate\r
2840                 {\r
2841                         halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 2);\r
2842                 }\r
2843                 else                            //a2dp edr rate\r
2844                 {\r
2845                         halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 1);\r
2846                 }\r
2847 \r
2848                 // sw mechanism\r
2849                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
2850                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
2851                 {\r
2852                          halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
2853                          halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
2854                 }\r
2855                 else\r
2856                 {\r
2857                          halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
2858                          halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
2859                 }\r
2860         }\r
2861         else\r
2862         {\r
2863                 // fw mechanism\r
2864                 if(btInfoExt&BIT0)      //a2dp basic rate\r
2865                 {\r
2866                         halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 2);\r
2867                 }\r
2868                 else                            //a2dp edr rate\r
2869                 {\r
2870                         halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 1);\r
2871                 }\r
2872                 \r
2873                 // sw mechanism\r
2874                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
2875                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
2876                 {\r
2877                          halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
2878                          halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
2879                 }\r
2880                 else\r
2881                 {\r
2882                          halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
2883                          halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
2884                 }               \r
2885         }\r
2886 }\r
2887 \r
2888 VOID\r
2889 halbtc8821a2ant_ActionPanEdr(\r
2890         IN      PBTC_COEXIST            pBtCoexist\r
2891         )\r
2892 {\r
2893         u1Byte          wifiRssiState, btRssiState;\r
2894         u4Byte          wifiBw;\r
2895 \r
2896         wifiRssiState = halbtc8821a2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
2897         btRssiState = halbtc8821a2ant_BtRssiState(2, 35, 0);\r
2898 \r
2899         halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
2900 \r
2901         if(halbtc8821a2ant_NeedToDecBtPwr(pBtCoexist))\r
2902                 halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);\r
2903         else    \r
2904                 halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
2905 \r
2906         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
2907 \r
2908         if (BTC_WIFI_BW_LEGACY == wifiBw) //for HID at 11b/g mode\r
2909         {\r
2910                 halbtc8821a2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5aff5aff, 0xffff, 0x3);\r
2911         }\r
2912         else  //for HID quality & wifi performance balance at 11n mode\r
2913         {\r
2914                 halbtc8821a2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5aff5aff, 0xffff, 0x3);\r
2915         }\r
2916 \r
2917         if(BTC_WIFI_BW_HT40 == wifiBw)\r
2918         {\r
2919                 // fw mechanism\r
2920                 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
2921                         (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
2922                 {\r
2923                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);\r
2924                 }\r
2925                 else\r
2926                 {\r
2927                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);\r
2928                 }\r
2929 \r
2930                 // sw mechanism\r
2931                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
2932                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
2933                 {\r
2934                          halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
2935                          halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
2936                 }\r
2937                 else\r
2938                 {\r
2939                          halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
2940                          halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
2941                 }\r
2942         }\r
2943         else\r
2944         {\r
2945                 // fw mechanism\r
2946                 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
2947                         (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
2948                 {\r
2949                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);\r
2950                 }\r
2951                 else\r
2952                 {\r
2953                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);\r
2954                 }\r
2955 \r
2956                 // sw mechanism\r
2957                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
2958                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
2959                 {\r
2960                          halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
2961                          halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
2962                 }\r
2963                 else\r
2964                 {\r
2965                          halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
2966                          halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
2967                 }\r
2968         }\r
2969 }\r
2970 \r
2971 \r
2972 //PAN(HS) only\r
2973 VOID\r
2974 halbtc8821a2ant_ActionPanHs(\r
2975         IN      PBTC_COEXIST            pBtCoexist\r
2976         )\r
2977 {\r
2978         u1Byte          wifiRssiState, btRssiState;\r
2979         u4Byte          wifiBw;\r
2980 \r
2981         wifiRssiState = halbtc8821a2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
2982         btRssiState = halbtc8821a2ant_BtRssiState(2, 35, 0);\r
2983 \r
2984         halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
2985 \r
2986         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
2987 \r
2988         if(BTC_WIFI_BW_HT40 == wifiBw)\r
2989         {\r
2990                 // fw mechanism\r
2991                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
2992                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
2993                 {\r
2994                         halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);\r
2995                 }\r
2996                 else\r
2997                 {\r
2998                         halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
2999                 }\r
3000                 halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
3001 \r
3002                 // sw mechanism\r
3003                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3004                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3005                 {\r
3006                          halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
3007                          halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3008                 }\r
3009                 else\r
3010                 {\r
3011                          halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
3012                          halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3013                 }\r
3014         }\r
3015         else\r
3016         {\r
3017                 // fw mechanism\r
3018                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3019                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3020                 {\r
3021                         halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);\r
3022                 }\r
3023                 else\r
3024                 {\r
3025                         halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
3026                 }\r
3027 \r
3028                 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
3029                         (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3030                 {\r
3031                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
3032                 }\r
3033                 else\r
3034                 {\r
3035                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
3036                 }\r
3037 \r
3038                 // sw mechanism\r
3039                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3040                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3041                 {\r
3042                          halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
3043                          halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3044                 }\r
3045                 else\r
3046                 {\r
3047                          halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
3048                          halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3049                 }\r
3050         }\r
3051 }\r
3052 \r
3053 //PAN(EDR)+A2DP\r
3054 VOID\r
3055 halbtc8821a2ant_ActionPanEdrA2dp(\r
3056         IN      PBTC_COEXIST            pBtCoexist\r
3057         )\r
3058 {\r
3059         u1Byte          wifiRssiState, btRssiState, btInfoExt;\r
3060         u4Byte          wifiBw;\r
3061 \r
3062         btInfoExt = pCoexSta->btInfoExt;\r
3063         wifiRssiState = halbtc8821a2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
3064         btRssiState = halbtc8821a2ant_BtRssiState(2, 35, 0);\r
3065 \r
3066         halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
3067 \r
3068         if(halbtc8821a2ant_NeedToDecBtPwr(pBtCoexist))\r
3069                 halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);\r
3070         else    \r
3071                 halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
3072 \r
3073         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
3074 \r
3075         if (BTC_WIFI_BW_LEGACY == wifiBw) //for HID at 11b/g mode\r
3076         {\r
3077                 halbtc8821a2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5afa5afa, 0xffff, 0x3);\r
3078         }\r
3079         else  //for HID quality & wifi performance balance at 11n mode\r
3080         {\r
3081                 halbtc8821a2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5afa5afa, 0xffff, 0x3);\r
3082         }\r
3083 \r
3084         if(BTC_WIFI_BW_HT40 == wifiBw)\r
3085         {\r
3086                 // fw mechanism\r
3087                 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
3088                         (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3089                 {\r
3090                         if(btInfoExt&BIT0)      //a2dp basic rate\r
3091                         {\r
3092                                 halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 3);\r
3093                         }\r
3094                         else                            //a2dp edr rate\r
3095                         {\r
3096                                 halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 3);\r
3097                         }\r
3098                 }\r
3099                 else\r
3100                 {\r
3101                         if(btInfoExt&BIT0)      //a2dp basic rate\r
3102                         {\r
3103                                 halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 3);\r
3104                         }\r
3105                         else                            //a2dp edr rate\r
3106                         {\r
3107                                 halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 3);\r
3108                         }\r
3109                 }\r
3110 \r
3111                 // sw mechanism\r
3112                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3113                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3114                 {\r
3115                          halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
3116                          halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3117                 }\r
3118                 else\r
3119                 {\r
3120                          halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
3121                          halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3122                 };\r
3123         }\r
3124         else\r
3125         {\r
3126                 // fw mechanism\r
3127                 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
3128                         (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3129                 {\r
3130                         if(btInfoExt&BIT0)      //a2dp basic rate\r
3131                         {\r
3132                                 halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 3);\r
3133                         }\r
3134                         else                            //a2dp edr rate\r
3135                         {\r
3136                                 halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 3);\r
3137                         }\r
3138                 }\r
3139                 else\r
3140                 {\r
3141                         if(btInfoExt&BIT0)      //a2dp basic rate\r
3142                         {\r
3143                                 halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 3);\r
3144                         }\r
3145                         else                            //a2dp edr rate\r
3146                         {\r
3147                                 halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 3);\r
3148                         }\r
3149                 }\r
3150 \r
3151                 // sw mechanism\r
3152                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3153                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3154                 {\r
3155                         halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
3156                          halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3157                 }\r
3158                 else\r
3159                 {\r
3160                          halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
3161                          halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3162                 }\r
3163         }\r
3164 }\r
3165 \r
3166 VOID\r
3167 halbtc8821a2ant_ActionPanEdrHid(\r
3168         IN      PBTC_COEXIST            pBtCoexist\r
3169         )\r
3170 {\r
3171         u1Byte          wifiRssiState, btRssiState;\r
3172         u4Byte          wifiBw;\r
3173 \r
3174         wifiRssiState = halbtc8821a2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
3175         btRssiState = halbtc8821a2ant_BtRssiState(2, 35, 0);\r
3176 \r
3177         halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
3178 \r
3179         if(halbtc8821a2ant_NeedToDecBtPwr(pBtCoexist))\r
3180                 halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);\r
3181         else    \r
3182                 halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
3183 \r
3184         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
3185 \r
3186         if (BTC_WIFI_BW_LEGACY == wifiBw) //for HID at 11b/g mode\r
3187         {\r
3188                 halbtc8821a2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5a5f5a5f, 0xffff, 0x3);\r
3189         }\r
3190         else  //for HID quality & wifi performance balance at 11n mode\r
3191         {\r
3192                 halbtc8821a2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5a5f5a5f, 0xffff, 0x3);\r
3193         }\r
3194 \r
3195         if(BTC_WIFI_BW_HT40 == wifiBw)\r
3196         { \r
3197                 halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 3);\r
3198                 // fw mechanism\r
3199                 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
3200                         (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3201                 {\r
3202                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10); \r
3203                 }\r
3204                 else\r
3205                 {\r
3206                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14); \r
3207                 }\r
3208 \r
3209                 // sw mechanism\r
3210                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3211                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3212                 {\r
3213                          halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
3214                          halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3215                 }\r
3216                 else\r
3217                 {\r
3218                          halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
3219                          halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3220                 }\r
3221         }\r
3222         else\r
3223         {\r
3224                 halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
3225                 // fw mechanism\r
3226                 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
3227                         (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3228                 {\r
3229                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);\r
3230                 }\r
3231                 else\r
3232                 {\r
3233                         halbtc8821a2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);\r
3234                 }\r
3235                 \r
3236                 // sw mechanism\r
3237                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3238                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3239                 {\r
3240                          halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
3241                          halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3242                 }\r
3243                 else\r
3244                 {\r
3245                          halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
3246                          halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3247                 }\r
3248         }\r
3249 }\r
3250 \r
3251 // HID+A2DP+PAN(EDR)\r
3252 VOID\r
3253 halbtc8821a2ant_ActionHidA2dpPanEdr(\r
3254         IN      PBTC_COEXIST            pBtCoexist\r
3255         )\r
3256 {\r
3257         u1Byte          wifiRssiState, btRssiState, btInfoExt;\r
3258         u4Byte          wifiBw;\r
3259 \r
3260         btInfoExt = pCoexSta->btInfoExt;\r
3261         wifiRssiState = halbtc8821a2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
3262         btRssiState = halbtc8821a2ant_BtRssiState(2, 35, 0);\r
3263 \r
3264         halbtc8821a2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
3265 \r
3266         if(halbtc8821a2ant_NeedToDecBtPwr(pBtCoexist))\r
3267                 halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);\r
3268         else    \r
3269                 halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
3270 \r
3271         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
3272 \r
3273         if (BTC_WIFI_BW_LEGACY == wifiBw) //for HID at 11b/g mode\r
3274         {\r
3275                 halbtc8821a2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5a5a5a5a, 0xffff, 0x3);\r
3276         }\r
3277         else  //for HID quality & wifi performance balance at 11n mode\r
3278         {\r
3279                 halbtc8821a2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5a5a5a5a, 0xffff, 0x3);\r
3280         }\r
3281 \r
3282         if(BTC_WIFI_BW_HT40 == wifiBw)\r
3283         {\r
3284                 // fw mechanism\r
3285                 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
3286                         (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3287                 {\r
3288                         if(btInfoExt&BIT0)      //a2dp basic rate\r
3289                         {\r
3290                                 halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 3);\r
3291                         }\r
3292                         else                            //a2dp edr rate\r
3293                         {\r
3294                                 halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 3);\r
3295                         }\r
3296                 }\r
3297                 else\r
3298                 {\r
3299                         if(btInfoExt&BIT0)      //a2dp basic rate\r
3300                         {\r
3301                                 halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 3);\r
3302                         }\r
3303                         else                            //a2dp edr rate\r
3304                         {\r
3305                                 halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 3);\r
3306                         }\r
3307                 }\r
3308                 \r
3309                 // sw mechanism\r
3310                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3311                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3312                 {\r
3313                          halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
3314                          halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3315                 }\r
3316                 else\r
3317                 {\r
3318                          halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
3319                          halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3320                 }\r
3321         }\r
3322         else\r
3323         {\r
3324                 // fw mechanism\r
3325                 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
3326                         (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3327                 {\r
3328                         if(btInfoExt&BIT0)      //a2dp basic rate\r
3329                         {\r
3330                                 halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, FALSE, 3);\r
3331                         }\r
3332                         else                            //a2dp edr rate\r
3333                         {\r
3334                                 halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, FALSE, 3);\r
3335                         }\r
3336                 }\r
3337                 else\r
3338                 {\r
3339                         if(btInfoExt&BIT0)      //a2dp basic rate\r
3340                         {\r
3341                                 halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 3);\r
3342                         }\r
3343                         else                            //a2dp edr rate\r
3344                         {\r
3345                                 halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 3);\r
3346                         }\r
3347                 }\r
3348 \r
3349                 // sw mechanism\r
3350                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3351                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3352                 {\r
3353                          halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
3354                          halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3355                 }\r
3356                 else\r
3357                 {\r
3358                          halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
3359                          halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3360                 }\r
3361         }\r
3362 }\r
3363 \r
3364 VOID\r
3365 halbtc8821a2ant_ActionHidA2dp(\r
3366         IN      PBTC_COEXIST            pBtCoexist\r
3367         )\r
3368 {\r
3369         u1Byte          wifiRssiState, btRssiState, btInfoExt;\r
3370         u4Byte          wifiBw;\r
3371 \r
3372         btInfoExt = pCoexSta->btInfoExt;\r
3373         wifiRssiState = halbtc8821a2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
3374         btRssiState = halbtc8821a2ant_BtRssiState(2, 35, 0);\r
3375 \r
3376         if(halbtc8821a2ant_NeedToDecBtPwr(pBtCoexist))\r
3377                 halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, TRUE);\r
3378         else    \r
3379                 halbtc8821a2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, FALSE);\r
3380 \r
3381         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
3382 \r
3383         if (BTC_WIFI_BW_LEGACY == wifiBw) //for HID at 11b/g mode\r
3384         {\r
3385 //Allen         halbtc8821a2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5a5a5a5a, 0xffff, 0x3);\r
3386                 halbtc8821a2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5f5b5f5b, 0xffffff, 0x3);\r
3387         }\r
3388         else  //for HID quality & wifi performance balance at 11n mode\r
3389         {\r
3390 //Allen         halbtc8821a2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5a5a5a5a, 0xffff, 0x3);\r
3391                         halbtc8821a2ant_CoexTable(pBtCoexist, NORMAL_EXEC, 0x55ff55ff, 0x5f5b5f5b, 0xffffff, 0x3);\r
3392 \r
3393         }\r
3394 \r
3395         if(BTC_WIFI_BW_HT40 == wifiBw)\r
3396         {\r
3397                 // fw mechanism\r
3398                 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
3399                         (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3400                 {\r
3401                         if(btInfoExt&BIT0)      //a2dp basic rate\r
3402                         {\r
3403                                 halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);\r
3404                         }\r
3405                         else                            //a2dp edr rate\r
3406                         {\r
3407                                 halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);\r
3408                         }\r
3409                 }\r
3410                 else\r
3411                 {\r
3412                         if(btInfoExt&BIT0)      //a2dp basic rate\r
3413                         {\r
3414                                 halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);\r
3415                         }\r
3416                         else                            //a2dp edr rate\r
3417                         {\r
3418                                 halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);\r
3419                         }\r
3420                 }\r
3421                 \r
3422                 // sw mechanism\r
3423                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3424                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3425                 {\r
3426                          halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
3427                          halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3428                 }\r
3429                 else\r
3430                 {\r
3431                          halbtc8821a2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
3432                          halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3433                 }\r
3434         }\r
3435         else\r
3436         {\r
3437                 // fw mechanism\r
3438                 if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
3439                         (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3440                 {\r
3441                         if(btInfoExt&BIT0)      //a2dp basic rate\r
3442                         {\r
3443 //                              halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, FALSE, 2);\r
3444                                 halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);\r
3445 \r
3446                         }\r
3447                         else                            //a2dp edr rate\r
3448                         {\r
3449 //Allen                         halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, FALSE, 2);\r
3450                                 halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);\r
3451                         }\r
3452                 }\r
3453                 else\r
3454                 {\r
3455                         if(btInfoExt&BIT0)      //a2dp basic rate\r
3456                         {\r
3457                                 halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);\r
3458                         }\r
3459                         else                            //a2dp edr rate\r
3460                         {\r
3461                                 halbtc8821a2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);\r
3462                         }\r
3463                 }\r
3464 \r
3465                 // sw mechanism\r
3466                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3467                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3468                 {\r
3469                          halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
3470                          halbtc8821a2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3471                 }\r
3472                 else\r
3473                 {\r
3474                          halbtc8821a2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
3475                          halbtc8821a2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3476                 }\r
3477         }\r
3478 }\r
3479 \r
3480 VOID\r
3481 halbtc8821a2ant_RunCoexistMechanism(\r
3482         IN      PBTC_COEXIST            pBtCoexist\r
3483         )\r
3484 {\r
3485         PBTC_STACK_INFO         pStackInfo=&pBtCoexist->stackInfo;\r
3486         BOOLEAN                         bWifiUnder5G=FALSE;\r
3487         u1Byte                          btInfoOriginal=0, btRetryCnt=0;\r
3488         u1Byte                          algorithm=0;\r
3489 \r
3490         if(pBtCoexist->bManualControl)\r
3491         {\r
3492                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Manual control!!!\n"));\r
3493                 return;\r
3494         }\r
3495         \r
3496         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_UNDER_5G, &bWifiUnder5G);\r
3497 \r
3498         if(bWifiUnder5G)\r
3499         {\r
3500                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], RunCoexistMechanism(), run 5G coex setting!!<===\n"));\r
3501                 halbtc8821a2ant_CoexUnder5G(pBtCoexist);\r
3502                 return;\r
3503         }\r
3504 \r
3505         if(pStackInfo->bProfileNotified)\r
3506         {\r
3507                 algorithm = halbtc8821a2ant_ActionAlgorithm(pBtCoexist);\r
3508                 if(pCoexSta->bC2hBtInquiryPage && (BT_8821A_2ANT_COEX_ALGO_PANHS!=algorithm))\r
3509                 {\r
3510                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT is under inquiry/page scan !!\n"));\r
3511                         halbtc8821a2ant_BtInquiryPage(pBtCoexist);\r
3512                         return;\r
3513                 }\r
3514 \r
3515                 pCoexDm->curAlgorithm = algorithm;\r
3516                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Algorithm = %d \n", pCoexDm->curAlgorithm));\r
3517 \r
3518                 if(halbtc8821a2ant_IsCommonAction(pBtCoexist))\r
3519                 {\r
3520                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant common.\n"));\r
3521                         pCoexDm->bResetTdmaAdjust = TRUE;\r
3522                 }\r
3523                 else\r
3524                 {\r
3525                         if(pCoexDm->curAlgorithm != pCoexDm->preAlgorithm)\r
3526                         {\r
3527                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], preAlgorithm=%d, curAlgorithm=%d\n", \r
3528                                         pCoexDm->preAlgorithm, pCoexDm->curAlgorithm));\r
3529                                 pCoexDm->bResetTdmaAdjust = TRUE;\r
3530                         }\r
3531                         switch(pCoexDm->curAlgorithm)\r
3532                         {\r
3533                                 case BT_8821A_2ANT_COEX_ALGO_SCO:\r
3534                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = SCO.\n"));\r
3535                                         halbtc8821a2ant_ActionSco(pBtCoexist);\r
3536                                         break;\r
3537                                 case BT_8821A_2ANT_COEX_ALGO_HID:\r
3538                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HID.\n"));\r
3539                                         halbtc8821a2ant_ActionHid(pBtCoexist);\r
3540                                         break;\r
3541                                 case BT_8821A_2ANT_COEX_ALGO_A2DP:\r
3542                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = A2DP.\n"));\r
3543                                         halbtc8821a2ant_ActionA2dp(pBtCoexist);\r
3544                                         break;\r
3545                                 case BT_8821A_2ANT_COEX_ALGO_A2DP_PANHS:\r
3546                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = A2DP+PAN(HS).\n"));\r
3547                                         halbtc8821a2ant_ActionA2dpPanHs(pBtCoexist);\r
3548                                         break;\r
3549                                 case BT_8821A_2ANT_COEX_ALGO_PANEDR:\r
3550                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = PAN(EDR).\n"));\r
3551                                         halbtc8821a2ant_ActionPanEdr(pBtCoexist);\r
3552                                         break;\r
3553                                 case BT_8821A_2ANT_COEX_ALGO_PANHS:\r
3554                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HS mode.\n"));\r
3555                                         halbtc8821a2ant_ActionPanHs(pBtCoexist);\r
3556                                         break;\r
3557                                 case BT_8821A_2ANT_COEX_ALGO_PANEDR_A2DP:\r
3558                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = PAN+A2DP.\n"));\r
3559                                         halbtc8821a2ant_ActionPanEdrA2dp(pBtCoexist);\r
3560                                         break;\r
3561                                 case BT_8821A_2ANT_COEX_ALGO_PANEDR_HID:\r
3562                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = PAN(EDR)+HID.\n"));\r
3563                                         halbtc8821a2ant_ActionPanEdrHid(pBtCoexist);\r
3564                                         break;\r
3565                                 case BT_8821A_2ANT_COEX_ALGO_HID_A2DP_PANEDR:\r
3566                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HID+A2DP+PAN.\n"));\r
3567                                         halbtc8821a2ant_ActionHidA2dpPanEdr(pBtCoexist);\r
3568                                         break;\r
3569                                 case BT_8821A_2ANT_COEX_ALGO_HID_A2DP:\r
3570                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HID+A2DP.\n"));\r
3571                                         halbtc8821a2ant_ActionHidA2dp(pBtCoexist);\r
3572                                         break;\r
3573                                 default:\r
3574                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = coexist All Off!!\n"));\r
3575                                         halbtc8821a2ant_CoexAllOff(pBtCoexist);\r
3576                                         break;\r
3577                         }\r
3578                         pCoexDm->preAlgorithm = pCoexDm->curAlgorithm;\r
3579                 }\r
3580         }\r
3581         else\r
3582         {       // stack doesn't notify profile info.\r
3583                 // use the following profile info from bt fw.\r
3584                 //pCoexSta->bBtLinkExist\r
3585                 //pCoexSta->bScoExist\r
3586                 //pCoexSta->bA2dpExist\r
3587                 //pCoexSta->bHidExist\r
3588                 //pCoexSta->bPanExist\r
3589 }\r
3590 }\r
3591 \r
3592 \r
3593 \r
3594 //============================================================\r
3595 // work around function start with wa_halbtc8821a2ant_\r
3596 //============================================================\r
3597 //============================================================\r
3598 // extern function start with EXhalbtc8821a2ant_\r
3599 //============================================================\r
3600 VOID\r
3601 EXhalbtc8821a2ant_InitHwConfig(\r
3602         IN      PBTC_COEXIST            pBtCoexist\r
3603         )\r
3604 {\r
3605         PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
3606         u4Byte  u4Tmp=0;\r
3607         u2Byte                          u2Tmp=0;\r
3608         u1Byte  u1Tmp=0;\r
3609         u1Byte                          H2C_Parameter[2] ={0};\r
3610                 \r
3611 \r
3612         BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], 2Ant Init HW Config!!\n"));\r
3613 \r
3614         // backup rf 0x1e value\r
3615         pCoexDm->btRf0x1eBackup = \r
3616                 pBtCoexist->fBtcGetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff);\r
3617 \r
3618         // 0x790[5:0]=0x5\r
3619         u1Tmp = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x790);\r
3620         u1Tmp &= 0xc0;\r
3621         u1Tmp |= 0x5;\r
3622         pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x790, u1Tmp);\r
3623         \r
3624         //Antenna config\r
3625         halbtc8821a2ant_SetAntPath(pBtCoexist, BTC_ANT_WIFI_AT_MAIN, TRUE, FALSE);\r
3626 \r
3627         // PTA parameter\r
3628         halbtc8821a2ant_CoexTable(pBtCoexist, FORCE_EXEC, 0x55555555, 0x55555555, 0xffff, 0x3);\r
3629         \r
3630         // Enable counter statistics\r
3631         pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x76e, 0xc); //0x76e[3] =1, WLAN_Act control by PTA\r
3632         pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x778, 0x3);\r
3633         pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x40, 0x20, 0x1);\r
3634 }\r
3635 \r
3636 VOID\r
3637 EXhalbtc8821a2ant_InitCoexDm(\r
3638         IN      PBTC_COEXIST            pBtCoexist\r
3639         )\r
3640 {\r
3641         BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], Coex Mechanism Init!!\n"));\r
3642         \r
3643         halbtc8821a2ant_InitCoexDm(pBtCoexist);\r
3644 }\r
3645 \r
3646 VOID\r
3647 EXhalbtc8821a2ant_DisplayCoexInfo(\r
3648         IN      PBTC_COEXIST            pBtCoexist\r
3649         )\r
3650 {\r
3651         PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
3652         PBTC_STACK_INFO         pStackInfo=&pBtCoexist->stackInfo;\r
3653         pu1Byte                         cliBuf=pBtCoexist->cliBuf;\r
3654         u1Byte                          u1Tmp[4], i, btInfoExt, psTdmaCase=0;\r
3655         u4Byte                          u4Tmp[4];\r
3656         BOOLEAN                         bRoam=FALSE, bScan=FALSE, bLink=FALSE, bWifiUnder5G=FALSE;\r
3657         BOOLEAN                         bBtHsOn=FALSE, bWifiBusy=FALSE;\r
3658         s4Byte                          wifiRssi=0, btHsRssi=0;\r
3659         u4Byte                          wifiBw, wifiTrafficDir;\r
3660         u1Byte                          wifiDot11Chnl, wifiHsChnl;\r
3661         u4Byte                          fwVer=0, btPatchVer=0;\r
3662 \r
3663         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n ============[BT Coexist info]============");\r
3664         CL_PRINTF(cliBuf);\r
3665 \r
3666         if(!pBoardInfo->bBtExist)\r
3667         {\r
3668                 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n BT not exists !!!");\r
3669                 CL_PRINTF(cliBuf);\r
3670                 return;\r
3671         }\r
3672 \r
3673         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d ", "Ant PG number/ Ant mechanism:", \\r
3674                 pBoardInfo->pgAntNum, pBoardInfo->btdmAntNum);\r
3675         CL_PRINTF(cliBuf);      \r
3676         \r
3677         if(pBtCoexist->bManualControl)\r
3678         {\r
3679                 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "[Action Manual control]!!");\r
3680                 CL_PRINTF(cliBuf);\r
3681         }\r
3682         \r
3683         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s / %d", "BT stack/ hci ext ver", \\r
3684                 ((pStackInfo->bProfileNotified)? "Yes":"No"), pStackInfo->hciVersion);\r
3685         CL_PRINTF(cliBuf);\r
3686 \r
3687         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_BT_PATCH_VER, &btPatchVer);\r
3688         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);\r
3689         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d_%d/ 0x%x/ 0x%x(%d)", "CoexVer/ FwVer/ PatchVer", \\r
3690                 GLCoexVerDate8821a2Ant, GLCoexVer8821a2Ant, fwVer, btPatchVer, btPatchVer);\r
3691         CL_PRINTF(cliBuf);\r
3692 \r
3693         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
3694         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_WIFI_DOT11_CHNL, &wifiDot11Chnl);\r
3695         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_WIFI_HS_CHNL, &wifiHsChnl);\r
3696         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d(%d)", "Dot11 channel / HsMode(HsChnl)", \\r
3697                 wifiDot11Chnl, bBtHsOn, wifiHsChnl);\r
3698         CL_PRINTF(cliBuf);\r
3699 \r
3700         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %02x %02x %02x ", "H2C Wifi inform bt chnl Info", \\r
3701                 pCoexDm->wifiChnlInfo[0], pCoexDm->wifiChnlInfo[1],\r
3702                 pCoexDm->wifiChnlInfo[2]);\r
3703         CL_PRINTF(cliBuf);\r
3704 \r
3705         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_S4_WIFI_RSSI, &wifiRssi);\r
3706         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_S4_HS_RSSI, &btHsRssi);\r
3707         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d", "Wifi rssi/ HS rssi", \\r
3708                 wifiRssi, btHsRssi);\r
3709         CL_PRINTF(cliBuf);\r
3710 \r
3711         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);\r
3712         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_LINK, &bLink);\r
3713         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_ROAM, &bRoam);\r
3714         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d/ %d ", "Wifi bLink/ bRoam/ bScan", \\r
3715                 bLink, bRoam, bScan);\r
3716         CL_PRINTF(cliBuf);\r
3717 \r
3718         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_UNDER_5G, &bWifiUnder5G);\r
3719         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
3720         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);\r
3721         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_TRAFFIC_DIRECTION, &wifiTrafficDir);\r
3722         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s / %s/ %s ", "Wifi status", \\r
3723                 (bWifiUnder5G? "5G":"2.4G"),\r
3724                 ((BTC_WIFI_BW_LEGACY==wifiBw)? "Legacy": (((BTC_WIFI_BW_HT40==wifiBw)? "HT40":"HT20"))),\r
3725                 ((!bWifiBusy)? "idle": ((BTC_WIFI_TRAFFIC_TX==wifiTrafficDir)? "uplink":"downlink")));\r
3726         CL_PRINTF(cliBuf);\r
3727 \r
3728         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = [%s/ %d/ %d] ", "BT [status/ rssi/ retryCnt]", \\r
3729                 ((pCoexSta->bC2hBtInquiryPage)?("inquiry/page scan"):((BT_8821A_2ANT_BT_STATUS_IDLE == pCoexDm->btStatus)? "idle":(  (BT_8821A_2ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus)? "connected-idle":"busy"))),\r
3730                 pCoexSta->btRssi, pCoexSta->btRetryCnt);\r
3731         CL_PRINTF(cliBuf);\r
3732         \r
3733         if(pStackInfo->bProfileNotified)\r
3734         {                       \r
3735                 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d / %d / %d", "SCO/HID/PAN/A2DP", \\r
3736                         pStackInfo->bScoExist, pStackInfo->bHidExist, pStackInfo->bPanExist, pStackInfo->bA2dpExist);\r
3737                 CL_PRINTF(cliBuf);      \r
3738 \r
3739                 pBtCoexist->fBtcDispDbgMsg(pBtCoexist, BTC_DBG_DISP_BT_LINK_INFO);\r
3740         }\r
3741 \r
3742         btInfoExt = pCoexSta->btInfoExt;\r
3743         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s", "BT Info A2DP rate", \\r
3744                 (btInfoExt&BIT0)? "Basic rate":"EDR rate");\r
3745         CL_PRINTF(cliBuf);      \r
3746 \r
3747         for(i=0; i<BT_INFO_SRC_8821A_2ANT_MAX; i++)\r
3748         {\r
3749                 if(pCoexSta->btInfoC2hCnt[i])\r
3750                 {                               \r
3751                         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %02x %02x %02x %02x %02x %02x %02x(%d)", GLBtInfoSrc8821a2Ant[i], \\r
3752                                 pCoexSta->btInfoC2h[i][0], pCoexSta->btInfoC2h[i][1],\r
3753                                 pCoexSta->btInfoC2h[i][2], pCoexSta->btInfoC2h[i][3],\r
3754                                 pCoexSta->btInfoC2h[i][4], pCoexSta->btInfoC2h[i][5],\r
3755                                 pCoexSta->btInfoC2h[i][6], pCoexSta->btInfoC2hCnt[i]);\r
3756                         CL_PRINTF(cliBuf);\r
3757                 }\r
3758         }\r
3759 \r
3760         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s/%s", "PS state, IPS/LPS", \\r
3761                 ((pCoexSta->bUnderIps? "IPS ON":"IPS OFF")),\r
3762                 ((pCoexSta->bUnderLps? "LPS ON":"LPS OFF")));\r
3763         CL_PRINTF(cliBuf);\r
3764         pBtCoexist->fBtcDispDbgMsg(pBtCoexist, BTC_DBG_DISP_FW_PWR_MODE_CMD);\r
3765 \r
3766         // Sw mechanism \r
3767         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Sw mechanism]============");\r
3768         CL_PRINTF(cliBuf);\r
3769         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d/ %d/ %d ", "SM1[ShRf/ LpRA/ LimDig/ btLna]", \\r
3770                 pCoexDm->bCurRfRxLpfShrink, pCoexDm->bCurLowPenaltyRa, pCoexDm->bLimitedDig, pCoexDm->bCurBtLnaConstrain);\r
3771         CL_PRINTF(cliBuf);\r
3772         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d/ %d(0x%x) ", "SM2[AgcT/ AdcB/ SwDacSwing(lvl)]", \\r
3773                 pCoexDm->bCurAgcTableEn, pCoexDm->bCurAdcBackOff, pCoexDm->bCurDacSwingOn, pCoexDm->curDacSwingLvl);\r
3774         CL_PRINTF(cliBuf);\r
3775 \r
3776         // Fw mechanism         \r
3777         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Fw mechanism]============");\r
3778         CL_PRINTF(cliBuf);      \r
3779         \r
3780         if(!pBtCoexist->bManualControl)\r
3781         {\r
3782                 psTdmaCase = pCoexDm->curPsTdma;\r
3783                 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %02x %02x %02x %02x %02x case-%d", "PS TDMA", \\r
3784                         pCoexDm->psTdmaPara[0], pCoexDm->psTdmaPara[1],\r
3785                         pCoexDm->psTdmaPara[2], pCoexDm->psTdmaPara[3],\r
3786                         pCoexDm->psTdmaPara[4], psTdmaCase);\r
3787                 CL_PRINTF(cliBuf);\r
3788         \r
3789                 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d ", "DecBtPwr/ IgnWlanAct", \\r
3790                         pCoexDm->bCurDecBtPwr, pCoexDm->bCurIgnoreWlanAct);\r
3791                 CL_PRINTF(cliBuf);\r
3792         }\r
3793 \r
3794         // Hw setting           \r
3795         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Hw setting]============");\r
3796         CL_PRINTF(cliBuf);      \r
3797 \r
3798         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "RF-A, 0x1e initVal", \\r
3799                 pCoexDm->btRf0x1eBackup);\r
3800         CL_PRINTF(cliBuf);\r
3801 \r
3802         u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x778);\r
3803         u1Tmp[1] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x6cc);\r
3804         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x ", "0x778 (W_Act)/ 0x6cc (CoTab Sel)", \\r
3805                 u1Tmp[0], u1Tmp[1]);\r
3806         CL_PRINTF(cliBuf);\r
3807 \r
3808         u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x8db);\r
3809         u1Tmp[1] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0xc5b);\r
3810         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x", "0x8db(ADC)/0xc5b[29:25](DAC)", \\r
3811                 ((u1Tmp[0]&0x60)>>5), ((u1Tmp[1]&0x3e)>>1));\r
3812         CL_PRINTF(cliBuf); \r
3813         \r
3814         u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0xcb4);\r
3815         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x", "0xcb4[7:0](ctrl)/ 0xcb4[29:28](val)", \\r
3816                 u4Tmp[0]&0xff, ((u4Tmp[0]&0x30000000)>>28));\r
3817         CL_PRINTF(cliBuf);\r
3818 \r
3819         u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x40);\r
3820         u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x4c);\r
3821         u4Tmp[1] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x974);\r
3822         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x/ 0x%x", "0x40/ 0x4c[24:23]/ 0x974", \\r
3823                 u1Tmp[0], ((u4Tmp[0]&0x01800000)>>23), u4Tmp[1]);\r
3824         CL_PRINTF(cliBuf);\r
3825 \r
3826         u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x550);\r
3827         u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x522);\r
3828         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x", "0x550(bcn ctrl)/0x522", \\r
3829                 u4Tmp[0], u1Tmp[0]);\r
3830         CL_PRINTF(cliBuf);\r
3831 \r
3832         u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0xc50);\r
3833         u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0xa0a);\r
3834         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x", "0xc50(DIG)/0xa0a(CCK-TH)", \\r
3835                 u4Tmp[0], u1Tmp[0]);\r
3836         CL_PRINTF(cliBuf);\r
3837 \r
3838         u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0xf48);\r
3839         u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0xa5b);\r
3840         u1Tmp[1] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0xa5c);\r
3841         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x", "OFDM-FA/ CCK-FA", \\r
3842                 u4Tmp[0], (u1Tmp[0]<<8) + u1Tmp[1]  );\r
3843         CL_PRINTF(cliBuf);\r
3844 \r
3845         u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x6c0);\r
3846         u4Tmp[1] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x6c4);\r
3847         u4Tmp[2] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x6c8);\r
3848         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x/ 0x%x", "0x6c0/0x6c4/0x6c8", \\r
3849                 u4Tmp[0], u4Tmp[1], u4Tmp[2]);\r
3850         CL_PRINTF(cliBuf);\r
3851 \r
3852         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d", "0x770 (hi-pri Rx/Tx)", \\r
3853                 pCoexSta->highPriorityRx, pCoexSta->highPriorityTx);\r
3854         CL_PRINTF(cliBuf);\r
3855         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d", "0x774(low-pri Rx/Tx)", \\r
3856                 pCoexSta->lowPriorityRx, pCoexSta->lowPriorityTx);\r
3857         CL_PRINTF(cliBuf);\r
3858 \r
3859         // Tx mgnt queue hang or not, 0x41b should = 0xf, ex: 0xd ==>hang\r
3860         u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x41b);\r
3861         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "0x41b (mgntQ hang chk == 0xf)", \\r
3862                 u1Tmp[0]);\r
3863         CL_PRINTF(cliBuf);      \r
3864 \r
3865         pBtCoexist->fBtcDispDbgMsg(pBtCoexist, BTC_DBG_DISP_COEX_STATISTICS);\r
3866 }\r
3867 \r
3868 \r
3869 VOID\r
3870 EXhalbtc8821a2ant_IpsNotify(\r
3871         IN      PBTC_COEXIST            pBtCoexist,\r
3872         IN      u1Byte                  type\r
3873         )\r
3874 {\r
3875         if(BTC_IPS_ENTER == type)\r
3876         {\r
3877                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], IPS ENTER notify\n"));\r
3878                 pCoexSta->bUnderIps = TRUE;\r
3879                 halbtc8821a2ant_CoexAllOff(pBtCoexist);\r
3880         }\r
3881         else if(BTC_IPS_LEAVE == type)\r
3882         {\r
3883                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], IPS LEAVE notify\n"));\r
3884                 pCoexSta->bUnderIps = FALSE;\r
3885                 //halbtc8821a2ant_InitCoexDm(pBtCoexist);\r
3886         }\r
3887 }\r
3888 \r
3889 VOID\r
3890 EXhalbtc8821a2ant_LpsNotify(\r
3891         IN      PBTC_COEXIST            pBtCoexist,\r
3892         IN      u1Byte                  type\r
3893         )\r
3894 {\r
3895         if(BTC_LPS_ENABLE == type)\r
3896         {\r
3897                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], LPS ENABLE notify\n"));\r
3898                 pCoexSta->bUnderLps = TRUE;\r
3899         }\r
3900         else if(BTC_LPS_DISABLE == type)\r
3901         {\r
3902                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], LPS DISABLE notify\n"));\r
3903                 pCoexSta->bUnderLps = FALSE;\r
3904         }\r
3905 }\r
3906 \r
3907 VOID\r
3908 EXhalbtc8821a2ant_ScanNotify(\r
3909         IN      PBTC_COEXIST            pBtCoexist,\r
3910         IN      u1Byte                  type\r
3911         )\r
3912 {\r
3913         if(BTC_SCAN_START == type)\r
3914         {\r
3915                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN START notify\n"));\r
3916         }\r
3917         else if(BTC_SCAN_FINISH == type)\r
3918         {\r
3919                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN FINISH notify\n"));\r
3920         }\r
3921 }\r
3922 \r
3923 VOID\r
3924 EXhalbtc8821a2ant_ConnectNotify(\r
3925         IN      PBTC_COEXIST            pBtCoexist,\r
3926         IN      u1Byte                  type\r
3927         )\r
3928 {\r
3929         if(BTC_ASSOCIATE_START == type)\r
3930         {\r
3931                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT START notify\n"));\r
3932         }\r
3933         else if(BTC_ASSOCIATE_FINISH == type)\r
3934         {\r
3935                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT FINISH notify\n"));\r
3936         }\r
3937 }\r
3938 \r
3939 VOID\r
3940 EXhalbtc8821a2ant_MediaStatusNotify(\r
3941         IN      PBTC_COEXIST                    pBtCoexist,\r
3942         IN      u1Byte                          type\r
3943         )\r
3944 {\r
3945         u1Byte                  H2C_Parameter[3] ={0};\r
3946         u4Byte                  wifiBw;\r
3947         u1Byte                  wifiCentralChnl;\r
3948 \r
3949         if(BTC_MEDIA_CONNECT == type)\r
3950         {\r
3951                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], MEDIA connect notify\n"));\r
3952         }\r
3953         else\r
3954         {\r
3955                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], MEDIA disconnect notify\n"));\r
3956         }\r
3957 \r
3958         // only 2.4G we need to inform bt the chnl mask\r
3959         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_WIFI_CENTRAL_CHNL, &wifiCentralChnl);\r
3960         if( (BTC_MEDIA_CONNECT == type) &&\r
3961                 (wifiCentralChnl <= 14) )\r
3962         {\r
3963                 H2C_Parameter[0] = 0x1;\r
3964                 H2C_Parameter[1] = wifiCentralChnl;\r
3965                 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
3966                 if(BTC_WIFI_BW_HT40 == wifiBw)\r
3967                         H2C_Parameter[2] = 0x30;\r
3968                 else\r
3969                         H2C_Parameter[2] = 0x20;\r
3970         }\r
3971                         \r
3972         pCoexDm->wifiChnlInfo[0] = H2C_Parameter[0];\r
3973         pCoexDm->wifiChnlInfo[1] = H2C_Parameter[1];\r
3974         pCoexDm->wifiChnlInfo[2] = H2C_Parameter[2];\r
3975         \r
3976         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], FW write 0x66=0x%x\n", \r
3977                 H2C_Parameter[0]<<16|H2C_Parameter[1]<<8|H2C_Parameter[2]));\r
3978 \r
3979         pBtCoexist->fBtcFillH2c(pBtCoexist, 0x66, 3, H2C_Parameter);\r
3980 }\r
3981 \r
3982 VOID\r
3983 EXhalbtc8821a2ant_SpecialPacketNotify(\r
3984         IN      PBTC_COEXIST                    pBtCoexist,\r
3985         IN      u1Byte                          type\r
3986         )\r
3987 {\r
3988         if(type == BTC_PACKET_DHCP)\r
3989         {\r
3990                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], DHCP Packet notify\n"));\r
3991         }\r
3992 }\r
3993 \r
3994 VOID\r
3995 EXhalbtc8821a2ant_BtInfoNotify(\r
3996         IN      PBTC_COEXIST            pBtCoexist,\r
3997         IN      pu1Byte                 tmpBuf,\r
3998         IN      u1Byte                  length\r
3999         )\r
4000 {\r
4001         u1Byte                  btInfo=0;\r
4002         u1Byte                  i, rspSource=0;\r
4003         static u4Byte           setBtLnaCnt=0, setBtPsdMode=0;\r
4004         BOOLEAN                 bBtBusy=FALSE, bLimitedDig=FALSE;\r
4005         BOOLEAN                 bWifiConnected=FALSE, bBtHsOn=FALSE;\r
4006 \r
4007         pCoexSta->bC2hBtInfoReqSent = FALSE;\r
4008 \r
4009         rspSource = tmpBuf[0]&0xf;\r
4010         if(rspSource >= BT_INFO_SRC_8821A_2ANT_MAX)\r
4011                 rspSource = BT_INFO_SRC_8821A_2ANT_WIFI_FW;\r
4012         pCoexSta->btInfoC2hCnt[rspSource]++;\r
4013 \r
4014         BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Bt info[%d], length=%d, hex data=[", rspSource, length));\r
4015         for(i=0; i<length; i++)\r
4016         {\r
4017                 pCoexSta->btInfoC2h[rspSource][i] = tmpBuf[i];\r
4018                 if(i == 1)\r
4019                         btInfo = tmpBuf[i];\r
4020                 if(i == length-1)\r
4021                 {\r
4022                         BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("0x%02x]\n", tmpBuf[i]));\r
4023                 }\r
4024                 else\r
4025                 {\r
4026                         BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("0x%02x, ", tmpBuf[i]));\r
4027                 }\r
4028         }\r
4029 \r
4030         if(BT_INFO_SRC_8821A_2ANT_WIFI_FW != rspSource)\r
4031         {\r
4032                 pCoexSta->btRetryCnt =  // [3:0]\r
4033                         pCoexSta->btInfoC2h[rspSource][2]&0xf;\r
4034 \r
4035                 pCoexSta->btRssi =\r
4036                         pCoexSta->btInfoC2h[rspSource][3]*2+10;\r
4037 \r
4038                 pCoexSta->btInfoExt = \r
4039                         pCoexSta->btInfoC2h[rspSource][4];\r
4040 \r
4041                 // Here we need to resend some wifi info to BT\r
4042                 // because bt is reset and loss of the info.\r
4043                 if( (pCoexSta->btInfoExt & BIT1) )\r
4044                 {                       \r
4045                         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
4046                         if(bWifiConnected)\r
4047                         {\r
4048                                 EXhalbtc8821a2ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_CONNECT);\r
4049                         }\r
4050                         else\r
4051                         {\r
4052                                 EXhalbtc8821a2ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_DISCONNECT);\r
4053                         }\r
4054 \r
4055                         setBtPsdMode = 0;\r
4056                 }\r
4057                 if(setBtPsdMode <= 3)\r
4058                 {\r\r
4059                         halbtc8821a2ant_SetBtPsdMode(pBtCoexist, FORCE_EXEC, 0x0); //fix CH-BW mode \r
4060                         setBtPsdMode++;\r
4061                 }\r
4062                 \r
4063                 if(pCoexDm->bCurBtLnaConstrain)\r
4064                 {\r
4065                         if( (pCoexSta->btInfoExt & BIT2) )\r
4066                         {\r
4067                         }\r
4068                         else\r
4069                         {\r
4070                                 if(setBtLnaCnt <= 3)\r
4071                                 {\r
4072                                         halbtc8821a2ant_SetBtLnaConstrain(pBtCoexist, FORCE_EXEC, TRUE);\r
4073                                         setBtLnaCnt++;\r
4074                                 }\r
4075                         }\r
4076                 }\r
4077                 else\r
4078                 {\r
4079                         setBtLnaCnt = 0;\r
4080                 }\r
4081 \r
4082                 if( (pCoexSta->btInfoExt & BIT3) )\r
4083                 {\r
4084                         halbtc8821a2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, FALSE);\r
4085                 }\r
4086                 else\r
4087                 {\r
4088                         // BT already NOT ignore Wlan active, do nothing here.\r
4089                 }\r
4090 \r
4091                 if( (pCoexSta->btInfoExt & BIT4) )\r
4092                 {\r
4093                         // BT auto report already enabled, do nothing\r
4094                 }\r
4095                 else\r
4096                 {\r
4097                         halbtc8821a2ant_BtAutoReport(pBtCoexist, FORCE_EXEC, TRUE);\r
4098                 }\r
4099         }\r
4100                 \r
4101         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
4102         // check BIT2 first ==> check if bt is under inquiry or page scan\r
4103         if(btInfo & BT_INFO_8821A_2ANT_B_INQ_PAGE)\r
4104         {\r
4105                 pCoexSta->bC2hBtInquiryPage = TRUE;\r
4106                 pCoexDm->btStatus = BT_8821A_2ANT_BT_STATUS_NON_IDLE;\r
4107         }\r
4108         else\r
4109         {\r
4110                 pCoexSta->bC2hBtInquiryPage = FALSE;\r
4111                 if(btInfo == 0x1)       // connection exists but no busy\r
4112                 {\r
4113                         pCoexSta->bBtLinkExist = TRUE;\r
4114                         pCoexDm->btStatus = BT_8821A_2ANT_BT_STATUS_CONNECTED_IDLE;\r
4115                 }\r
4116                 else if(btInfo & BT_INFO_8821A_2ANT_B_CONNECTION)       // connection exists and some link is busy\r
4117                 {\r
4118                         pCoexSta->bBtLinkExist = TRUE;\r
4119                         if(btInfo & BT_INFO_8821A_2ANT_B_FTP)\r
4120                                 pCoexSta->bPanExist = TRUE;\r
4121                         else\r
4122                                 pCoexSta->bPanExist = FALSE;\r
4123                         if(btInfo & BT_INFO_8821A_2ANT_B_A2DP)\r
4124                                 pCoexSta->bA2dpExist = TRUE;\r
4125                         else\r
4126                                 pCoexSta->bA2dpExist = FALSE;\r
4127                         if(btInfo & BT_INFO_8821A_2ANT_B_HID)\r
4128                                 pCoexSta->bHidExist = TRUE;\r
4129                         else\r
4130                                 pCoexSta->bHidExist = FALSE;\r
4131                         if(btInfo & BT_INFO_8821A_2ANT_B_SCO_ESCO)\r
4132                                 pCoexSta->bScoExist = TRUE;\r
4133                         else\r
4134                                 pCoexSta->bScoExist = FALSE;\r
4135                         pCoexDm->btStatus = BT_8821A_2ANT_BT_STATUS_NON_IDLE;\r
4136                 }\r
4137                 else\r
4138                 {\r
4139                         pCoexSta->bBtLinkExist = FALSE;\r
4140                         pCoexSta->bPanExist = FALSE;\r
4141                         pCoexSta->bA2dpExist = FALSE;\r
4142                         pCoexSta->bHidExist = FALSE;\r
4143                         pCoexSta->bScoExist = FALSE;\r
4144                         pCoexDm->btStatus = BT_8821A_2ANT_BT_STATUS_IDLE;\r
4145                 }\r
4146 \r
4147                 if(bBtHsOn)\r
4148                 {\r
4149                         pCoexDm->btStatus = BT_8821A_2ANT_BT_STATUS_NON_IDLE;\r
4150                 }\r
4151         }\r
4152 \r
4153         if(BT_8821A_2ANT_BT_STATUS_NON_IDLE == pCoexDm->btStatus)\r
4154         {\r
4155                 bBtBusy = TRUE;\r
4156         }\r
4157         else\r
4158         {\r
4159                 bBtBusy = FALSE;\r
4160         }\r
4161         pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_TRAFFIC_BUSY, &bBtBusy);\r
4162 \r
4163         if(BT_8821A_2ANT_BT_STATUS_IDLE != pCoexDm->btStatus)\r
4164         {\r
4165                 bLimitedDig = TRUE;\r
4166         }\r
4167         else\r
4168         {\r
4169                 bLimitedDig = FALSE;\r
4170         }\r
4171         pCoexDm->bLimitedDig = bLimitedDig;\r
4172         pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_LIMITED_DIG, &bLimitedDig);\r
4173 \r
4174         halbtc8821a2ant_RunCoexistMechanism(pBtCoexist);\r
4175 }\r
4176 \r
4177 VOID\r
4178 EXhalbtc8821a2ant_HaltNotify(\r
4179         IN      PBTC_COEXIST                    pBtCoexist\r
4180         )\r
4181 {\r
4182         BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Halt notify\n"));\r
4183 \r
4184         halbtc8821a2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);\r
4185         EXhalbtc8821a2ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_DISCONNECT);\r
4186 }\r
4187 \r
4188 VOID\r
4189 EXhalbtc8821a2ant_Periodical(\r
4190         IN      PBTC_COEXIST                    pBtCoexist\r
4191         )\r
4192 {\r
4193         static u1Byte           disVerInfoCnt=0;\r
4194         u4Byte                          fwVer=0, btPatchVer=0;\r
4195         PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
4196         PBTC_STACK_INFO         pStackInfo=&pBtCoexist->stackInfo;\r
4197 \r
4198         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], ==========================Periodical===========================\n"));\r
4199 \r
4200         if(disVerInfoCnt <= 5)\r
4201         {\r
4202                 disVerInfoCnt += 1;\r
4203                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], ****************************************************************\n"));\r
4204                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], Ant PG Num/ Ant Mech/ Ant Pos = %d/ %d/ %d\n", \\r
4205                         pBoardInfo->pgAntNum, pBoardInfo->btdmAntNum, pBoardInfo->btdmAntPos));\r
4206                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], BT stack/ hci ext ver = %s / %d\n", \\r
4207                         ((pStackInfo->bProfileNotified)? "Yes":"No"), pStackInfo->hciVersion));\r
4208                 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_BT_PATCH_VER, &btPatchVer);\r
4209                 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);\r
4210                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], CoexVer/ FwVer/ PatchVer = %d_%x/ 0x%x/ 0x%x(%d)\n", \\r
4211                         GLCoexVerDate8821a2Ant, GLCoexVer8821a2Ant, fwVer, btPatchVer, btPatchVer));\r
4212                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], ****************************************************************\n"));\r
4213         }\r
4214 \r
4215         halbtc8821a2ant_QueryBtInfo(pBtCoexist);\r
4216         halbtc8821a2ant_MonitorBtCtr(pBtCoexist);\r
4217         halbtc8821a2ant_MonitorBtEnableDisable(pBtCoexist);\r
4218 }\r
4219 \r
4220 \r
4221 #endif\r
4222 \r