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