support different wifi bt chip auto compatible
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8189es / 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=20140730;\r
31 u4Byte  GLCoexVer8723b2Ant=0x42;\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_LimitedRx(\r
308         IN      PBTC_COEXIST            pBtCoexist,\r
309         IN      BOOLEAN                         bForceExec,\r
310         IN      BOOLEAN                         bRejApAggPkt,\r
311         IN      BOOLEAN                         bBtCtrlAggBufSize,\r
312         IN      u1Byte                          aggBufSize\r
313         )\r
314 {\r
315         BOOLEAN bRejectRxAgg=bRejApAggPkt;\r
316         BOOLEAN bBtCtrlRxAggSize=bBtCtrlAggBufSize;\r
317         u1Byte  rxAggSize=aggBufSize;\r
318 \r
319         //============================================\r
320         //      Rx Aggregation related setting\r
321         //============================================\r
322         pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_TO_REJ_AP_AGG_PKT, &bRejectRxAgg);\r
323         // decide BT control aggregation buf size or not\r
324         pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_CTRL_AGG_SIZE, &bBtCtrlRxAggSize);\r
325         // aggregation buf size, only work when BT control Rx aggregation size.\r
326         pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_U1_AGG_BUF_SIZE, &rxAggSize);\r
327         // real update aggregation setting\r
328         pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_AGGREGATE_CTRL, NULL);\r
329 }\r
330 \r
331 VOID\r
332 halbtc8723b2ant_MonitorBtCtr(\r
333         IN      PBTC_COEXIST            pBtCoexist\r
334         )\r
335 {\r
336         u4Byte                  regHPTxRx, regLPTxRx, u4Tmp;\r
337         u4Byte                  regHPTx=0, regHPRx=0, regLPTx=0, regLPRx=0;\r
338         u1Byte                  u1Tmp;\r
339         \r
340         regHPTxRx = 0x770;\r
341         regLPTxRx = 0x774;\r
342 \r
343         u4Tmp = pBtCoexist->fBtcRead4Byte(pBtCoexist, regHPTxRx);\r
344         regHPTx = u4Tmp & bMaskLWord;\r
345         regHPRx = (u4Tmp & bMaskHWord)>>16;\r
346 \r
347         u4Tmp = pBtCoexist->fBtcRead4Byte(pBtCoexist, regLPTxRx);\r
348         regLPTx = u4Tmp & bMaskLWord;\r
349         regLPRx = (u4Tmp & bMaskHWord)>>16;\r
350                 \r
351         pCoexSta->highPriorityTx = regHPTx;\r
352         pCoexSta->highPriorityRx = regHPRx;\r
353         pCoexSta->lowPriorityTx = regLPTx;\r
354         pCoexSta->lowPriorityRx = regLPRx;\r
355 \r
356         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], High Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n", \r
357                 regHPTxRx, regHPTx, regHPTx, regHPRx, regHPRx));\r
358         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR, ("[BTCoex], Low Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n", \r
359                 regLPTxRx, regLPTx, regLPTx, regLPRx, regLPRx));\r
360 \r
361         // reset counter\r
362         pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x76e, 0xc);\r
363 }\r
364 \r
365 VOID\r
366 halbtc8723b2ant_MonitorWiFiCtr(\r
367         IN      PBTC_COEXIST            pBtCoexist\r
368         )\r
369 {\r
370         u4Byte  u4Tmp;\r
371         u2Byte  u2Tmp[3];\r
372         s4Byte  wifiRssi=0;\r
373         BOOLEAN bWifiBusy = FALSE, bWifiUnderBMode = FALSE;\r
374         static u1Byte nCCKLockCounter = 0;\r
375 \r
376 \r
377         if (pCoexSta->bUnderIps)\r
378         {\r
379                 pCoexSta->nCRCOK_CCK = 0;\r
380                 pCoexSta->nCRCOK_11g = 0;\r
381                 pCoexSta->nCRCOK_11n = 0;\r
382                 pCoexSta->nCRCOK_11nAgg = 0;\r
383 \r
384                 pCoexSta->nCRCErr_CCK = 0;\r
385                 pCoexSta->nCRCErr_11g = 0;\r
386                 pCoexSta->nCRCErr_11n = 0;\r
387                 pCoexSta->nCRCErr_11nAgg = 0;   \r
388         }\r
389         else\r
390         {\r
391                 pCoexSta->nCRCOK_CCK    = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0xf88);\r
392                 pCoexSta->nCRCOK_11g    = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0xf94);\r
393                 pCoexSta->nCRCOK_11n    = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0xf90);\r
394                 pCoexSta->nCRCOK_11nAgg= pBtCoexist->fBtcRead2Byte(pBtCoexist, 0xfb8);\r
395 \r
396                 pCoexSta->nCRCErr_CCK    = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0xf84);\r
397                 pCoexSta->nCRCErr_11g    = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0xf96);\r
398                 pCoexSta->nCRCErr_11n    = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0xf92);\r
399                 pCoexSta->nCRCErr_11nAgg = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0xfba);                \r
400         }\r
401 \r
402         //reset counter\r
403         pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xf16, 0x1, 0x1);\r
404         pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xf16, 0x1, 0x0);\r
405 }\r
406 \r
407 VOID\r
408 halbtc8723b2ant_QueryBtInfo(\r
409         IN      PBTC_COEXIST            pBtCoexist\r
410         )\r
411 {\r
412         u1Byte                  H2C_Parameter[1] ={0};\r
413 \r
414         pCoexSta->bC2hBtInfoReqSent = TRUE;\r
415 \r
416         H2C_Parameter[0] |= BIT0;       // trigger\r
417 \r
418         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], Query Bt Info, FW write 0x61=0x%x\n", \r
419                 H2C_Parameter[0]));\r
420 \r
421         pBtCoexist->fBtcFillH2c(pBtCoexist, 0x61, 1, H2C_Parameter);\r
422 }\r
423 \r
424 BOOLEAN\r
425 halbtc8723b2ant_IsWifiStatusChanged(\r
426         IN      PBTC_COEXIST            pBtCoexist\r
427         )\r
428 {\r
429         static BOOLEAN  bPreWifiBusy=FALSE, bPreUnder4way=FALSE, bPreBtHsOn=FALSE;\r
430         BOOLEAN bWifiBusy=FALSE, bUnder4way=FALSE, bBtHsOn=FALSE;\r
431         BOOLEAN bWifiConnected=FALSE;\r
432         u1Byte                  wifiRssiState=BTC_RSSI_STATE_HIGH;\r
433         \r
434 \r
435         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
436         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);\r
437         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
438         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_4_WAY_PROGRESS, &bUnder4way);\r
439 \r
440         if(bWifiConnected)\r
441         {\r
442                 if(bWifiBusy != bPreWifiBusy)\r
443                 {\r
444                         bPreWifiBusy = bWifiBusy;\r
445                         return TRUE;\r
446                 }\r
447                 if(bUnder4way != bPreUnder4way)\r
448                 {\r
449                         bPreUnder4way = bUnder4way;\r
450                         return TRUE;\r
451                 }\r
452                 if(bBtHsOn != bPreBtHsOn)\r
453                 {\r
454                         bPreBtHsOn = bBtHsOn;\r
455                         return TRUE;\r
456                 }\r
457 \r
458 \r
459                 wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist,3, 2, BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES, 0);    \r
460 \r
461                 if ( (BTC_RSSI_STATE_HIGH ==wifiRssiState ) ||  (BTC_RSSI_STATE_LOW ==wifiRssiState ))\r
462                 {\r
463                         return TRUE;\r
464                 }\r
465         \r
466         }\r
467 \r
468         return FALSE;\r
469 }\r
470 \r
471 VOID\r
472 halbtc8723b2ant_UpdateBtLinkInfo(\r
473         IN      PBTC_COEXIST            pBtCoexist\r
474         )\r
475 {\r
476         PBTC_STACK_INFO         pStackInfo=&pBtCoexist->stackInfo;\r
477         PBTC_BT_LINK_INFO       pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
478         BOOLEAN                         bBtHsOn=FALSE;\r
479 \r
480 #if(BT_AUTO_REPORT_ONLY_8723B_2ANT == 1)        // profile from bt patch\r
481         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
482 \r
483         pBtLinkInfo->bBtLinkExist = pCoexSta->bBtLinkExist;\r
484         pBtLinkInfo->bScoExist = pCoexSta->bScoExist;\r
485         pBtLinkInfo->bA2dpExist = pCoexSta->bA2dpExist;\r
486         pBtLinkInfo->bPanExist = pCoexSta->bPanExist;\r
487         pBtLinkInfo->bHidExist = pCoexSta->bHidExist;\r
488 \r
489         // work around for HS mode.\r
490         if(bBtHsOn)\r
491         {\r
492                 pBtLinkInfo->bPanExist = TRUE;\r
493                 pBtLinkInfo->bBtLinkExist = TRUE;\r
494         }\r
495 #else   // profile from bt stack\r
496         pBtLinkInfo->bBtLinkExist = pStackInfo->bBtLinkExist;\r
497         pBtLinkInfo->bScoExist = pStackInfo->bScoExist;\r
498         pBtLinkInfo->bA2dpExist = pStackInfo->bA2dpExist;\r
499         pBtLinkInfo->bPanExist = pStackInfo->bPanExist;\r
500         pBtLinkInfo->bHidExist = pStackInfo->bHidExist;\r
501 \r
502         //for win-8 stack HID report error\r
503         if(!pStackInfo->bHidExist)\r
504                 pStackInfo->bHidExist = pCoexSta->bHidExist;  //sync  BTInfo with BT firmware and stack\r
505         // when stack HID report error, here we use the info from bt fw.\r
506         if(!pStackInfo->bBtLinkExist)\r
507                 pStackInfo->bBtLinkExist = pCoexSta->bBtLinkExist;      \r
508 #endif\r
509         // check if Sco only\r
510         if( pBtLinkInfo->bScoExist &&\r
511                 !pBtLinkInfo->bA2dpExist &&\r
512                 !pBtLinkInfo->bPanExist &&\r
513                 !pBtLinkInfo->bHidExist )\r
514                 pBtLinkInfo->bScoOnly = TRUE;\r
515         else\r
516                 pBtLinkInfo->bScoOnly = FALSE;\r
517 \r
518         // check if A2dp only\r
519         if( !pBtLinkInfo->bScoExist &&\r
520                 pBtLinkInfo->bA2dpExist &&\r
521                 !pBtLinkInfo->bPanExist &&\r
522                 !pBtLinkInfo->bHidExist )\r
523                 pBtLinkInfo->bA2dpOnly = TRUE;\r
524         else\r
525                 pBtLinkInfo->bA2dpOnly = FALSE;\r
526 \r
527         // check if Pan only\r
528         if( !pBtLinkInfo->bScoExist &&\r
529                 !pBtLinkInfo->bA2dpExist &&\r
530                 pBtLinkInfo->bPanExist &&\r
531                 !pBtLinkInfo->bHidExist )\r
532                 pBtLinkInfo->bPanOnly = TRUE;\r
533         else\r
534                 pBtLinkInfo->bPanOnly = FALSE;\r
535         \r
536         // check if Hid only\r
537         if( !pBtLinkInfo->bScoExist &&\r
538                 !pBtLinkInfo->bA2dpExist &&\r
539                 !pBtLinkInfo->bPanExist &&\r
540                 pBtLinkInfo->bHidExist )\r
541                 pBtLinkInfo->bHidOnly = TRUE;\r
542         else\r
543                 pBtLinkInfo->bHidOnly = FALSE;\r
544 }\r
545 \r
546 u1Byte\r
547 halbtc8723b2ant_ActionAlgorithm(\r
548         IN      PBTC_COEXIST            pBtCoexist\r
549         )\r
550 {\r
551         PBTC_BT_LINK_INFO       pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
552         BOOLEAN                         bBtHsOn=FALSE;\r
553         u1Byte                          algorithm=BT_8723B_2ANT_COEX_ALGO_UNDEFINED;\r
554         u1Byte                          numOfDiffProfile=0;\r
555 \r
556         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
557                 \r
558         if(!pBtLinkInfo->bBtLinkExist)\r
559         {\r
560                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], No BT link exists!!!\n"));\r
561                 return algorithm;\r
562         }\r
563 \r
564         if(pBtLinkInfo->bScoExist)\r
565                 numOfDiffProfile++;\r
566         if(pBtLinkInfo->bHidExist)\r
567                 numOfDiffProfile++;\r
568         if(pBtLinkInfo->bPanExist)\r
569                 numOfDiffProfile++;\r
570         if(pBtLinkInfo->bA2dpExist)\r
571                 numOfDiffProfile++;\r
572         \r
573         if(numOfDiffProfile == 1)\r
574         {\r
575                 if(pBtLinkInfo->bScoExist)\r
576                 {\r
577                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO only\n"));\r
578                         algorithm = BT_8723B_2ANT_COEX_ALGO_SCO;\r
579                 }\r
580                 else\r
581                 {\r
582                         if(pBtLinkInfo->bHidExist)\r
583                         {\r
584                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID only\n"));\r
585                                 algorithm = BT_8723B_2ANT_COEX_ALGO_HID;\r
586                         }\r
587                         else if(pBtLinkInfo->bA2dpExist)\r
588                         {\r
589                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP only\n"));\r
590                                 algorithm = BT_8723B_2ANT_COEX_ALGO_A2DP;\r
591                         }\r
592                         else if(pBtLinkInfo->bPanExist)\r
593                         {\r
594                                 if(bBtHsOn)\r
595                                 {\r
596                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], PAN(HS) only\n"));\r
597                                         algorithm = BT_8723B_2ANT_COEX_ALGO_PANHS;\r
598                                 }\r
599                                 else\r
600                                 {\r
601                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], PAN(EDR) only\n"));\r
602                                         algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR;\r
603                                 }\r
604                         }\r
605                 }\r
606         }\r
607         else if(numOfDiffProfile == 2)\r
608         {\r
609                 if(pBtLinkInfo->bScoExist)\r
610                 {\r
611                         if(pBtLinkInfo->bHidExist)\r
612                         {\r
613                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID\n"));\r
614                                 algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;\r
615                         }\r
616                         else if(pBtLinkInfo->bA2dpExist)\r
617                         {\r
618                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + A2DP ==> SCO\n"));\r
619                                 algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;\r
620                         }\r
621                         else if(pBtLinkInfo->bPanExist)\r
622                         {\r
623                                 if(bBtHsOn)\r
624                                 {\r
625                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + PAN(HS)\n"));\r
626                                         algorithm = BT_8723B_2ANT_COEX_ALGO_SCO;\r
627                                 }\r
628                                 else\r
629                                 {\r
630                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + PAN(EDR)\n"));\r
631                                         algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;\r
632                                 }\r
633                         }\r
634                 }\r
635                 else\r
636                 {\r
637                         if( pBtLinkInfo->bHidExist &&\r
638                                 pBtLinkInfo->bA2dpExist )\r
639                         {\r
640 #if 0\r
641                                 if(pStackInfo->numOfHid >= 2)\r
642                                 {\r
643                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID*2 + A2DP\n"));\r
644                                         algorithm = BT_8723B_2ANT_COEX_ALGO_HID_A2DP_PANEDR;\r
645                                 }\r
646                                 else\r
647 #endif\r
648                                 {                       \r
649                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP\n"));\r
650                                         algorithm = BT_8723B_2ANT_COEX_ALGO_HID_A2DP;\r
651                                 }\r
652                         }\r
653                         else if( pBtLinkInfo->bHidExist &&\r
654                                 pBtLinkInfo->bPanExist )\r
655                         {\r
656                                 if(bBtHsOn)\r
657                                 {\r
658                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + PAN(HS)\n"));\r
659                                         algorithm = BT_8723B_2ANT_COEX_ALGO_HID;\r
660                                 }\r
661                                 else\r
662                                 {\r
663                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + PAN(EDR)\n"));\r
664                                         algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;\r
665                                 }\r
666                         }\r
667                         else if( pBtLinkInfo->bPanExist &&\r
668                                 pBtLinkInfo->bA2dpExist )\r
669                         {\r
670                                 if(bBtHsOn)\r
671                                 {\r
672                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP + PAN(HS)\n"));\r
673                                         algorithm = BT_8723B_2ANT_COEX_ALGO_A2DP_PANHS;\r
674                                 }\r
675                                 else\r
676                                 {\r
677                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], A2DP + PAN(EDR)\n"));\r
678                                         algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_A2DP;\r
679                                 }\r
680                         }\r
681                 }\r
682         }\r
683         else if(numOfDiffProfile == 3)\r
684         {\r
685                 if(pBtLinkInfo->bScoExist)\r
686                 {\r
687                         if( pBtLinkInfo->bHidExist &&\r
688                                 pBtLinkInfo->bA2dpExist )\r
689                         {\r
690                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + A2DP ==> HID\n"));\r
691                                 algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;\r
692                         }\r
693                         else if( pBtLinkInfo->bHidExist &&\r
694                                 pBtLinkInfo->bPanExist )\r
695                         {\r
696                                 if(bBtHsOn)\r
697                                 {\r
698                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + PAN(HS)\n"));\r
699                                         algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;\r
700                                 }\r
701                                 else\r
702                                 {\r
703                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + PAN(EDR)\n"));\r
704                                         algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;\r
705                                 }\r
706                         }\r
707                         else if( pBtLinkInfo->bPanExist &&\r
708                                 pBtLinkInfo->bA2dpExist )\r
709                         {\r
710                                 if(bBtHsOn)\r
711                                 {\r
712                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + A2DP + PAN(HS)\n"));\r
713                                         algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;\r
714                                 }\r
715                                 else\r
716                                 {\r
717                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + A2DP + PAN(EDR) ==> HID\n"));\r
718                                         algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;\r
719                                 }\r
720                         }\r
721                 }\r
722                 else\r
723                 {\r
724                         if( pBtLinkInfo->bHidExist &&\r
725                                 pBtLinkInfo->bPanExist &&\r
726                                 pBtLinkInfo->bA2dpExist )\r
727                         {\r
728                                 if(bBtHsOn)\r
729                                 {\r
730                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP + PAN(HS)\n"));\r
731                                         algorithm = BT_8723B_2ANT_COEX_ALGO_HID_A2DP;\r
732                                 }\r
733                                 else\r
734                                 {\r
735                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], HID + A2DP + PAN(EDR)\n"));\r
736                                         algorithm = BT_8723B_2ANT_COEX_ALGO_HID_A2DP_PANEDR;\r
737                                 }\r
738                         }\r
739                 }\r
740         }\r
741         else if(numOfDiffProfile >= 3)\r
742         {\r
743                 if(pBtLinkInfo->bScoExist)\r
744                 {\r
745                         if( pBtLinkInfo->bHidExist &&\r
746                                 pBtLinkInfo->bPanExist &&\r
747                                 pBtLinkInfo->bA2dpExist )\r
748                         {\r
749                                 if(bBtHsOn)\r
750                                 {\r
751                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Error!!! SCO + HID + A2DP + PAN(HS)\n"));\r
752 \r
753                                 }\r
754                                 else\r
755                                 {\r
756                                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], SCO + HID + A2DP + PAN(EDR)==>PAN(EDR)+HID\n"));\r
757                                         algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;\r
758                                 }\r
759                         }\r
760                 }\r
761         }\r
762 \r
763         return algorithm;\r
764 }\r
765 \r
766 VOID\r
767 halbtc8723b2ant_SetFwDacSwingLevel(\r
768         IN      PBTC_COEXIST            pBtCoexist,\r
769         IN      u1Byte                  dacSwingLvl\r
770         )\r
771 {\r
772         u1Byte                  H2C_Parameter[1] ={0};\r
773 \r
774         // There are several type of dacswing\r
775         // 0x18/ 0x10/ 0xc/ 0x8/ 0x4/ 0x6\r
776         H2C_Parameter[0] = dacSwingLvl;\r
777 \r
778         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], Set Dac Swing Level=0x%x\n", dacSwingLvl));\r
779         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], FW write 0x64=0x%x\n", H2C_Parameter[0]));\r
780 \r
781         pBtCoexist->fBtcFillH2c(pBtCoexist, 0x64, 1, H2C_Parameter);\r
782 }\r
783 \r
784 VOID\r
785 halbtc8723b2ant_SetFwDecBtPwr(\r
786         IN      PBTC_COEXIST            pBtCoexist,\r
787         IN      u1Byte                          decBtPwrLvl\r
788         )\r
789 {\r
790         u1Byte                  H2C_Parameter[1] ={0};\r
791         \r
792         H2C_Parameter[0] = decBtPwrLvl;\r
793 \r
794         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], decrease Bt Power level = %d, FW write 0x62=0x%x\n", \r
795                 decBtPwrLvl, H2C_Parameter[0]));\r
796 \r
797         pBtCoexist->fBtcFillH2c(pBtCoexist, 0x62, 1, H2C_Parameter);    \r
798 }\r
799 \r
800 VOID\r
801 halbtc8723b2ant_DecBtPwr(\r
802         IN      PBTC_COEXIST            pBtCoexist,\r
803         IN      BOOLEAN                 bForceExec,\r
804         IN      u1Byte                          decBtPwrLvl\r
805         )\r
806 {\r
807         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s Dec BT power level = %d\n",  \r
808                 (bForceExec? "force to":""), decBtPwrLvl));\r
809         pCoexDm->curBtDecPwrLvl = decBtPwrLvl;\r
810 \r
811         if(!bForceExec)\r
812         {\r
813                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], preBtDecPwrLvl=%d, curBtDecPwrLvl=%d\n", \r
814                         pCoexDm->preBtDecPwrLvl, pCoexDm->curBtDecPwrLvl));\r
815 \r
816                 if(pCoexDm->preBtDecPwrLvl == pCoexDm->curBtDecPwrLvl) \r
817                         return;\r
818         }\r
819         halbtc8723b2ant_SetFwDecBtPwr(pBtCoexist, pCoexDm->curBtDecPwrLvl);\r
820 \r
821         pCoexDm->preBtDecPwrLvl = pCoexDm->curBtDecPwrLvl;\r
822 }\r
823 \r
824 VOID\r
825 halbtc8723b2ant_SetBtAutoReport(\r
826         IN      PBTC_COEXIST            pBtCoexist,\r
827         IN      BOOLEAN                 bEnableAutoReport\r
828         )\r
829 {\r
830         u1Byte                  H2C_Parameter[1] ={0};\r
831         \r
832         H2C_Parameter[0] = 0;\r
833 \r
834         if(bEnableAutoReport)\r
835         {\r
836                 H2C_Parameter[0] |= BIT0;\r
837         }\r
838 \r
839         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], BT FW auto report : %s, FW write 0x68=0x%x\n", \r
840                 (bEnableAutoReport? "Enabled!!":"Disabled!!"), H2C_Parameter[0]));\r
841 \r
842         pBtCoexist->fBtcFillH2c(pBtCoexist, 0x68, 1, H2C_Parameter);    \r
843 }\r
844 \r
845 VOID\r
846 halbtc8723b2ant_BtAutoReport(\r
847         IN      PBTC_COEXIST            pBtCoexist,\r
848         IN      BOOLEAN                 bForceExec,\r
849         IN      BOOLEAN                 bEnableAutoReport\r
850         )\r
851 {\r
852         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s BT Auto report = %s\n",  \r
853                 (bForceExec? "force to":""), ((bEnableAutoReport)? "Enabled":"Disabled")));\r
854         pCoexDm->bCurBtAutoReport = bEnableAutoReport;\r
855 \r
856         if(!bForceExec)\r
857         {\r
858                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreBtAutoReport=%d, bCurBtAutoReport=%d\n", \r
859                         pCoexDm->bPreBtAutoReport, pCoexDm->bCurBtAutoReport));\r
860 \r
861                 if(pCoexDm->bPreBtAutoReport == pCoexDm->bCurBtAutoReport) \r
862                         return;\r
863         }\r
864         halbtc8723b2ant_SetBtAutoReport(pBtCoexist, pCoexDm->bCurBtAutoReport);\r
865 \r
866         pCoexDm->bPreBtAutoReport = pCoexDm->bCurBtAutoReport;\r
867 }\r
868 \r
869 VOID\r
870 halbtc8723b2ant_FwDacSwingLvl(\r
871         IN      PBTC_COEXIST            pBtCoexist,\r
872         IN      BOOLEAN                 bForceExec,\r
873         IN      u1Byte                  fwDacSwingLvl\r
874         )\r
875 {\r
876         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s set FW Dac Swing level = %d\n",  \r
877                 (bForceExec? "force to":""), fwDacSwingLvl));\r
878         pCoexDm->curFwDacSwingLvl = fwDacSwingLvl;\r
879 \r
880         if(!bForceExec)\r
881         {\r
882                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], preFwDacSwingLvl=%d, curFwDacSwingLvl=%d\n", \r
883                         pCoexDm->preFwDacSwingLvl, pCoexDm->curFwDacSwingLvl));\r
884 \r
885                 if(pCoexDm->preFwDacSwingLvl == pCoexDm->curFwDacSwingLvl) \r
886                         return;\r
887         }\r
888 \r
889         halbtc8723b2ant_SetFwDacSwingLevel(pBtCoexist, pCoexDm->curFwDacSwingLvl);\r
890 \r
891         pCoexDm->preFwDacSwingLvl = pCoexDm->curFwDacSwingLvl;\r
892 }\r
893 \r
894 VOID\r
895 halbtc8723b2ant_SetSwRfRxLpfCorner(\r
896         IN      PBTC_COEXIST            pBtCoexist,\r
897         IN      BOOLEAN                 bRxRfShrinkOn\r
898         )\r
899 {\r
900         if(bRxRfShrinkOn)\r
901         {\r
902                 //Shrink RF Rx LPF corner\r
903                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Shrink RF Rx LPF corner!!\n"));\r
904                 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, 0xffffc);\r
905         }\r
906         else\r
907         {\r
908                 //Resume RF Rx LPF corner\r
909                 // After initialized, we can use pCoexDm->btRf0x1eBackup\r
910                 if(pBtCoexist->bInitilized)\r
911                 {\r
912                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Resume RF Rx LPF corner!!\n"));\r
913                         pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, pCoexDm->btRf0x1eBackup);\r
914                 }\r
915         }\r
916 }\r
917 \r
918 VOID\r
919 halbtc8723b2ant_RfShrink(\r
920         IN      PBTC_COEXIST            pBtCoexist,\r
921         IN      BOOLEAN                 bForceExec,\r
922         IN      BOOLEAN                 bRxRfShrinkOn\r
923         )\r
924 {\r
925         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn Rx RF Shrink = %s\n",  \r
926                 (bForceExec? "force to":""), ((bRxRfShrinkOn)? "ON":"OFF")));\r
927         pCoexDm->bCurRfRxLpfShrink = bRxRfShrinkOn;\r
928 \r
929         if(!bForceExec)\r
930         {\r
931                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreRfRxLpfShrink=%d, bCurRfRxLpfShrink=%d\n", \r
932                         pCoexDm->bPreRfRxLpfShrink, pCoexDm->bCurRfRxLpfShrink));\r
933 \r
934                 if(pCoexDm->bPreRfRxLpfShrink == pCoexDm->bCurRfRxLpfShrink) \r
935                         return;\r
936         }\r
937         halbtc8723b2ant_SetSwRfRxLpfCorner(pBtCoexist, pCoexDm->bCurRfRxLpfShrink);\r
938 \r
939         pCoexDm->bPreRfRxLpfShrink = pCoexDm->bCurRfRxLpfShrink;\r
940 }\r
941 \r
942 VOID\r
943 halbtc8723b2ant_SetSwPenaltyTxRateAdaptive(\r
944         IN      PBTC_COEXIST            pBtCoexist,\r
945         IN      BOOLEAN                 bLowPenaltyRa\r
946         )\r
947 {\r
948         u1Byte                  H2C_Parameter[6] ={0};\r
949         \r
950         H2C_Parameter[0] = 0x6; // opCode, 0x6= Retry_Penalty\r
951 \r
952         if(bLowPenaltyRa)\r
953         {\r
954                 H2C_Parameter[1] |= BIT0;\r
955                 H2C_Parameter[2] = 0x00;  //normal rate except MCS7/6/5, OFDM54/48/36\r
956                 H2C_Parameter[3] = 0xf7;  //MCS7 or OFDM54\r
957                 H2C_Parameter[4] = 0xf8;  //MCS6 or OFDM48\r
958                 H2C_Parameter[5] = 0xf9;        //MCS5 or OFDM36        \r
959         }\r
960 \r
961         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], set WiFi Low-Penalty Retry: %s", \r
962                 (bLowPenaltyRa? "ON!!":"OFF!!")) );\r
963 \r
964         pBtCoexist->fBtcFillH2c(pBtCoexist, 0x69, 6, H2C_Parameter);\r
965 }\r
966 \r
967 VOID\r
968 halbtc8723b2ant_LowPenaltyRa(\r
969         IN      PBTC_COEXIST            pBtCoexist,\r
970         IN      BOOLEAN                 bForceExec,\r
971         IN      BOOLEAN                 bLowPenaltyRa\r
972         )\r
973 {\r
974         //return;\r
975         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn LowPenaltyRA = %s\n",  \r
976                 (bForceExec? "force to":""), ((bLowPenaltyRa)? "ON":"OFF")));\r
977         pCoexDm->bCurLowPenaltyRa = bLowPenaltyRa;\r
978 \r
979         if(!bForceExec)\r
980         {\r
981                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreLowPenaltyRa=%d, bCurLowPenaltyRa=%d\n", \r
982                         pCoexDm->bPreLowPenaltyRa, pCoexDm->bCurLowPenaltyRa));\r
983 \r
984                 if(pCoexDm->bPreLowPenaltyRa == pCoexDm->bCurLowPenaltyRa) \r
985                         return;\r
986         }\r
987         halbtc8723b2ant_SetSwPenaltyTxRateAdaptive(pBtCoexist, pCoexDm->bCurLowPenaltyRa);\r
988 \r
989         pCoexDm->bPreLowPenaltyRa = pCoexDm->bCurLowPenaltyRa;\r
990 }\r
991 \r
992 VOID\r
993 halbtc8723b2ant_SetDacSwingReg(\r
994         IN      PBTC_COEXIST            pBtCoexist,\r
995         IN      u4Byte                  level\r
996         )\r
997 {\r
998         u1Byte  val=(u1Byte)level;\r
999 \r
1000         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Write SwDacSwing = 0x%x\n", level));\r
1001         pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x883, 0x3e, val);\r
1002 }\r
1003 \r
1004 VOID\r
1005 halbtc8723b2ant_SetSwFullTimeDacSwing(\r
1006         IN      PBTC_COEXIST            pBtCoexist,\r
1007         IN      BOOLEAN                 bSwDacSwingOn,\r
1008         IN      u4Byte                  swDacSwingLvl\r
1009         )\r
1010 {\r
1011         if(bSwDacSwingOn)\r
1012         {\r
1013                 halbtc8723b2ant_SetDacSwingReg(pBtCoexist, swDacSwingLvl);\r
1014         }\r
1015         else\r
1016         {\r
1017                 halbtc8723b2ant_SetDacSwingReg(pBtCoexist, 0x18);\r
1018         }\r
1019 }\r
1020 \r
1021 \r
1022 VOID\r
1023 halbtc8723b2ant_DacSwing(\r
1024         IN      PBTC_COEXIST            pBtCoexist,\r
1025         IN      BOOLEAN                 bForceExec,\r
1026         IN      BOOLEAN                 bDacSwingOn,\r
1027         IN      u4Byte                  dacSwingLvl\r
1028         )\r
1029 {\r
1030         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn DacSwing=%s, dacSwingLvl=0x%x\n",  \r
1031                 (bForceExec? "force to":""), ((bDacSwingOn)? "ON":"OFF"), dacSwingLvl));\r
1032         pCoexDm->bCurDacSwingOn = bDacSwingOn;\r
1033         pCoexDm->curDacSwingLvl = dacSwingLvl;\r
1034 \r
1035         if(!bForceExec)\r
1036         {\r
1037                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreDacSwingOn=%d, preDacSwingLvl=0x%x, bCurDacSwingOn=%d, curDacSwingLvl=0x%x\n", \r
1038                         pCoexDm->bPreDacSwingOn, pCoexDm->preDacSwingLvl,\r
1039                         pCoexDm->bCurDacSwingOn, pCoexDm->curDacSwingLvl));\r
1040 \r
1041                 if( (pCoexDm->bPreDacSwingOn == pCoexDm->bCurDacSwingOn) &&\r
1042                         (pCoexDm->preDacSwingLvl == pCoexDm->curDacSwingLvl) )\r
1043                         return;\r
1044         }\r
1045         delay_ms(30);\r
1046         halbtc8723b2ant_SetSwFullTimeDacSwing(pBtCoexist, bDacSwingOn, dacSwingLvl);\r
1047 \r
1048         pCoexDm->bPreDacSwingOn = pCoexDm->bCurDacSwingOn;\r
1049         pCoexDm->preDacSwingLvl = pCoexDm->curDacSwingLvl;\r
1050 }\r
1051 \r
1052 VOID\r
1053 halbtc8723b2ant_SetAdcBackOff(\r
1054         IN      PBTC_COEXIST            pBtCoexist,\r
1055         IN      BOOLEAN                 bAdcBackOff\r
1056         )\r
1057 {\r
1058         if(bAdcBackOff)\r
1059         {\r
1060                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], BB BackOff Level On!\n"));\r
1061                 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xc05, 0x30, 0x3);\r
1062         }\r
1063         else\r
1064         {\r
1065                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], BB BackOff Level Off!\n"));\r
1066                 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xc05, 0x30, 0x1);\r
1067         }\r
1068 }\r
1069 \r
1070 VOID\r
1071 halbtc8723b2ant_AdcBackOff(\r
1072         IN      PBTC_COEXIST            pBtCoexist,\r
1073         IN      BOOLEAN                 bForceExec,\r
1074         IN      BOOLEAN                 bAdcBackOff\r
1075         )\r
1076 {\r
1077         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s turn AdcBackOff = %s\n",  \r
1078                 (bForceExec? "force to":""), ((bAdcBackOff)? "ON":"OFF")));\r
1079         pCoexDm->bCurAdcBackOff = bAdcBackOff;\r
1080 \r
1081         if(!bForceExec)\r
1082         {\r
1083                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreAdcBackOff=%d, bCurAdcBackOff=%d\n", \r
1084                         pCoexDm->bPreAdcBackOff, pCoexDm->bCurAdcBackOff));\r
1085 \r
1086                 if(pCoexDm->bPreAdcBackOff == pCoexDm->bCurAdcBackOff) \r
1087                         return;\r
1088         }\r
1089         halbtc8723b2ant_SetAdcBackOff(pBtCoexist, pCoexDm->bCurAdcBackOff);\r
1090 \r
1091         pCoexDm->bPreAdcBackOff = pCoexDm->bCurAdcBackOff;\r
1092 }\r
1093 \r
1094 VOID\r
1095 halbtc8723b2ant_SetAgcTable(\r
1096         IN      PBTC_COEXIST            pBtCoexist,\r
1097         IN      BOOLEAN                 bAgcTableEn\r
1098         )\r
1099 {\r
1100         u1Byte          rssiAdjustVal=0;\r
1101 \r
1102         //=================BB AGC Gain Table\r
1103         if(bAgcTableEn)\r
1104         {\r
1105                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], BB Agc Table On!\n"));\r
1106                 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x6e1A0001);\r
1107                 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x6d1B0001);\r
1108                 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x6c1C0001);\r
1109                 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x6b1D0001);\r
1110                 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x6a1E0001);\r
1111                 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x691F0001);\r
1112                 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x68200001);\r
1113         }\r
1114         else\r
1115         {\r
1116                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], BB Agc Table Off!\n"));\r
1117                 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xaa1A0001);\r
1118                 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xa91B0001);\r
1119                 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xa81C0001);\r
1120                 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xa71D0001);\r
1121                 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xa61E0001);\r
1122                 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xa51F0001);\r
1123                 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xa4200001);\r
1124         }\r
1125         \r
1126         \r
1127         //=================RF Gain\r
1128         pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xef, 0xfffff, 0x02000);\r
1129         if(bAgcTableEn)\r
1130         {\r
1131                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Agc Table On!\n"));\r
1132                 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x38fff);\r
1133                 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x38ffe);\r
1134         }\r
1135         else\r
1136         {\r
1137                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Agc Table Off!\n"));\r
1138                 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x380c3);\r
1139                 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x28ce6);\r
1140         }\r
1141         pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xef, 0xfffff, 0x0);\r
1142 \r
1143         pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xed, 0xfffff, 0x1);\r
1144         if(bAgcTableEn)\r
1145         {\r
1146                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Agc Table On!\n"));\r
1147                 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x40, 0xfffff, 0x38fff);\r
1148                 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x40, 0xfffff, 0x38ffe);\r
1149         }\r
1150         else\r
1151         {\r
1152                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], Agc Table Off!\n"));\r
1153                 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x40, 0xfffff, 0x380c3);\r
1154                 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x40, 0xfffff, 0x28ce6);\r
1155         }\r
1156         pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xed, 0xfffff, 0x0);\r
1157 \r
1158         // set rssiAdjustVal for wifi module.\r
1159         if(bAgcTableEn)\r
1160         {\r
1161                 rssiAdjustVal = 8;\r
1162         }\r
1163         pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_U1_RSSI_ADJ_VAL_FOR_AGC_TABLE_ON, &rssiAdjustVal);\r
1164 }\r
1165 \r
1166 VOID\r
1167 halbtc8723b2ant_AgcTable(\r
1168         IN      PBTC_COEXIST            pBtCoexist,\r
1169         IN      BOOLEAN                 bForceExec,\r
1170         IN      BOOLEAN                 bAgcTableEn\r
1171         )\r
1172 {\r
1173         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s %s Agc Table\n",  \r
1174                 (bForceExec? "force to":""), ((bAgcTableEn)? "Enable":"Disable")));\r
1175         pCoexDm->bCurAgcTableEn = bAgcTableEn;\r
1176 \r
1177         if(!bForceExec)\r
1178         {\r
1179                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], bPreAgcTableEn=%d, bCurAgcTableEn=%d\n", \r
1180                         pCoexDm->bPreAgcTableEn, pCoexDm->bCurAgcTableEn));\r
1181 \r
1182                 if(pCoexDm->bPreAgcTableEn == pCoexDm->bCurAgcTableEn) \r
1183                         return;\r
1184         }\r
1185         halbtc8723b2ant_SetAgcTable(pBtCoexist, bAgcTableEn);\r
1186 \r
1187         pCoexDm->bPreAgcTableEn = pCoexDm->bCurAgcTableEn;\r
1188 }\r
1189 \r
1190 VOID\r
1191 halbtc8723b2ant_SetCoexTable(\r
1192         IN      PBTC_COEXIST    pBtCoexist,\r
1193         IN      u4Byte          val0x6c0,\r
1194         IN      u4Byte          val0x6c4,\r
1195         IN      u4Byte          val0x6c8,\r
1196         IN      u1Byte          val0x6cc\r
1197         )\r
1198 {\r
1199         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c0=0x%x\n", val0x6c0));\r
1200         pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c0, val0x6c0);\r
1201 \r
1202         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c4=0x%x\n", val0x6c4));\r
1203         pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c4, val0x6c4);\r
1204 \r
1205         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6c8=0x%x\n", val0x6c8));\r
1206         pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c8, val0x6c8);\r
1207 \r
1208         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC, ("[BTCoex], set coex table, set 0x6cc=0x%x\n", val0x6cc));\r
1209         pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cc, val0x6cc);\r
1210 }\r
1211 \r
1212 VOID\r
1213 halbtc8723b2ant_CoexTable(\r
1214         IN      PBTC_COEXIST            pBtCoexist,\r
1215         IN      BOOLEAN                 bForceExec,\r
1216         IN      u4Byte                  val0x6c0,\r
1217         IN      u4Byte                  val0x6c4,\r
1218         IN      u4Byte                  val0x6c8,\r
1219         IN      u1Byte                  val0x6cc\r
1220         )\r
1221 {\r
1222         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW, ("[BTCoex], %s write Coex Table 0x6c0=0x%x, 0x6c4=0x%x, 0x6c8=0x%x, 0x6cc=0x%x\n", \r
1223                 (bForceExec? "force to":""), val0x6c0, val0x6c4, val0x6c8, val0x6cc));\r
1224         pCoexDm->curVal0x6c0 = val0x6c0;\r
1225         pCoexDm->curVal0x6c4 = val0x6c4;\r
1226         pCoexDm->curVal0x6c8 = val0x6c8;\r
1227         pCoexDm->curVal0x6cc = val0x6cc;\r
1228 \r
1229         if(!bForceExec)\r
1230         {\r
1231                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], preVal0x6c0=0x%x, preVal0x6c4=0x%x, preVal0x6c8=0x%x, preVal0x6cc=0x%x !!\n", \r
1232                         pCoexDm->preVal0x6c0, pCoexDm->preVal0x6c4, pCoexDm->preVal0x6c8, pCoexDm->preVal0x6cc));\r
1233                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL, ("[BTCoex], curVal0x6c0=0x%x, curVal0x6c4=0x%x, curVal0x6c8=0x%x, curVal0x6cc=0x%x !!\n", \r
1234                         pCoexDm->curVal0x6c0, pCoexDm->curVal0x6c4, pCoexDm->curVal0x6c8, pCoexDm->curVal0x6cc));\r
1235         \r
1236                 if( (pCoexDm->preVal0x6c0 == pCoexDm->curVal0x6c0) &&\r
1237                         (pCoexDm->preVal0x6c4 == pCoexDm->curVal0x6c4) &&\r
1238                         (pCoexDm->preVal0x6c8 == pCoexDm->curVal0x6c8) &&\r
1239                         (pCoexDm->preVal0x6cc == pCoexDm->curVal0x6cc) )\r
1240                         return;\r
1241         }\r
1242         halbtc8723b2ant_SetCoexTable(pBtCoexist, val0x6c0, val0x6c4, val0x6c8, val0x6cc);\r
1243 \r
1244         pCoexDm->preVal0x6c0 = pCoexDm->curVal0x6c0;\r
1245         pCoexDm->preVal0x6c4 = pCoexDm->curVal0x6c4;\r
1246         pCoexDm->preVal0x6c8 = pCoexDm->curVal0x6c8;\r
1247         pCoexDm->preVal0x6cc = pCoexDm->curVal0x6cc;\r
1248 }\r
1249 \r
1250 VOID\r
1251 halbtc8723b2ant_CoexTableWithType(\r
1252         IN      PBTC_COEXIST            pBtCoexist,\r
1253         IN      BOOLEAN                         bForceExec,\r
1254         IN      u1Byte                          type\r
1255         )\r
1256 {\r
1257         pCoexSta->nCoexTableType = type;\r
1258         \r
1259         switch(type)\r
1260         {\r
1261                 case 0:\r
1262                         halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x55555555, 0x55555555, 0xffffff, 0x3);\r
1263                         break;\r
1264                 case 1:\r
1265                         halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x55555555, 0x5afa5afa, 0xffffff, 0x3);\r
1266                         break;\r
1267                 case 2:\r
1268                         halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x5ada5ada, 0x5ada5ada, 0xffffff, 0x3);\r
1269                         break;\r
1270                 case 3:\r
1271                         halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0xaaaaaaaa, 0xaaaaaaaa, 0xffffff, 0x3);\r
1272                         break;\r
1273                 case 4:\r
1274                         halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0xffffffff, 0xffffffff, 0xffffff, 0x3);\r
1275                         break;\r
1276                 case 5:\r
1277                         halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x5fff5fff, 0x5fff5fff, 0xffffff, 0x3);\r
1278                         break;\r
1279                 case 6:\r
1280                         halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x55ff55ff, 0x5a5a5a5a, 0xffffff, 0x3);\r
1281                         break;\r
1282                 case 7:\r
1283                         halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x55dd55dd, 0x5ada5ada, 0xffffff, 0x3);\r
1284                         break;\r
1285                 case 8:\r
1286                         halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x55dd55dd, 0x5ada5ada, 0xffffff, 0x3);\r
1287                         break;\r
1288                 case 9:\r
1289                         halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x55dd55dd, 0x5ada5ada, 0xffffff, 0x3);\r
1290                         break;\r
1291                 case 10:\r
1292                         halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x55dd55dd, 0x5ada5ada, 0xffffff, 0x3);\r
1293                         break;\r
1294                 case 11:\r
1295                         halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x55dd55dd, 0x5ada5ada, 0xffffff, 0x3);\r
1296                         break;\r
1297                 case 12:\r
1298                         halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x55dd55dd, 0x5ada5ada, 0xffffff, 0x3);\r
1299                         break;\r
1300                 case 13:\r
1301                         halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x5fff5fff, 0xaaaaaaaa, 0xffffff, 0x3);\r
1302                         break;\r
1303                 case 14:\r
1304                         halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x5fff5fff, 0x5ada5ada, 0xffffff, 0x3);\r
1305                         break;\r
1306                 case 15:\r
1307                         halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x55dd55dd, 0xaaaaaaaa, 0xffffff, 0x3);\r
1308                         break;\r
1309                 default:\r
1310                         break;\r
1311         }\r
1312 }\r
1313 \r
1314 VOID\r
1315 halbtc8723b2ant_SetFwIgnoreWlanAct(\r
1316         IN      PBTC_COEXIST            pBtCoexist,\r
1317         IN      BOOLEAN                 bEnable\r
1318         )\r
1319 {\r
1320         u1Byte                  H2C_Parameter[1] ={0};\r
1321                 \r
1322         if(bEnable)\r
1323         {\r
1324                 H2C_Parameter[0] |= BIT0;               // function enable\r
1325         }\r
1326         \r
1327         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], set FW for BT Ignore Wlan_Act, FW write 0x63=0x%x\n", \r
1328                 H2C_Parameter[0]));\r
1329 \r
1330         pBtCoexist->fBtcFillH2c(pBtCoexist, 0x63, 1, H2C_Parameter);\r
1331 }\r
1332 \r
1333 VOID\r
1334 halbtc8723b2ant_SetLpsRpwm(\r
1335         IN      PBTC_COEXIST            pBtCoexist,\r
1336         IN      u1Byte                  lpsVal,\r
1337         IN      u1Byte                  rpwmVal\r
1338         )\r
1339 {\r
1340         u1Byte  lps=lpsVal;\r
1341         u1Byte  rpwm=rpwmVal;\r
1342         \r
1343         pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_U1_LPS_VAL, &lps);\r
1344         pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_U1_RPWM_VAL, &rpwm);\r
1345 }\r
1346 \r
1347 VOID\r
1348 halbtc8723b2ant_LpsRpwm(\r
1349         IN      PBTC_COEXIST            pBtCoexist,\r
1350         IN      BOOLEAN                 bForceExec,\r
1351         IN      u1Byte                  lpsVal,\r
1352         IN      u1Byte                  rpwmVal\r
1353         )\r
1354 {\r
1355         BOOLEAN bForceExecPwrCmd=FALSE;\r
1356         \r
1357         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s set lps/rpwm=0x%x/0x%x \n", \r
1358                 (bForceExec? "force to":""), lpsVal, rpwmVal));\r
1359         pCoexDm->curLps = lpsVal;\r
1360         pCoexDm->curRpwm = rpwmVal;\r
1361 \r
1362         if(!bForceExec)\r
1363         {\r
1364                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], LPS-RxBeaconMode=0x%x , LPS-RPWM=0x%x!!\n", \r
1365                          pCoexDm->curLps, pCoexDm->curRpwm));\r
1366 \r
1367                 if( (pCoexDm->preLps == pCoexDm->curLps) &&\r
1368                         (pCoexDm->preRpwm == pCoexDm->curRpwm) )\r
1369                 {\r
1370                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], LPS-RPWM_Last=0x%x , LPS-RPWM_Now=0x%x!!\n", \r
1371                                  pCoexDm->preRpwm, pCoexDm->curRpwm));\r
1372 \r
1373                         return;\r
1374                 }\r
1375         }\r
1376         halbtc8723b2ant_SetLpsRpwm(pBtCoexist, lpsVal, rpwmVal);\r
1377 \r
1378         pCoexDm->preLps = pCoexDm->curLps;\r
1379         pCoexDm->preRpwm = pCoexDm->curRpwm;\r
1380 }\r
1381 \r
1382 VOID\r
1383 halbtc8723b2ant_IgnoreWlanAct(\r
1384         IN      PBTC_COEXIST            pBtCoexist,\r
1385         IN      BOOLEAN                 bForceExec,\r
1386         IN      BOOLEAN                 bEnable\r
1387         )\r
1388 {\r
1389         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s turn Ignore WlanAct %s\n", \r
1390                 (bForceExec? "force to":""), (bEnable? "ON":"OFF")));\r
1391         pCoexDm->bCurIgnoreWlanAct = bEnable;\r
1392 \r
1393         if(!bForceExec)\r
1394         {\r
1395                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPreIgnoreWlanAct = %d, bCurIgnoreWlanAct = %d!!\n", \r
1396                         pCoexDm->bPreIgnoreWlanAct, pCoexDm->bCurIgnoreWlanAct));\r
1397 \r
1398                 if(pCoexDm->bPreIgnoreWlanAct == pCoexDm->bCurIgnoreWlanAct)\r
1399                         return;\r
1400         }\r
1401         halbtc8723b2ant_SetFwIgnoreWlanAct(pBtCoexist, bEnable);\r
1402 \r
1403         pCoexDm->bPreIgnoreWlanAct = pCoexDm->bCurIgnoreWlanAct;\r
1404 }\r
1405 \r
1406 VOID\r
1407 halbtc8723b2ant_SetFwPstdma(\r
1408         IN      PBTC_COEXIST            pBtCoexist,\r
1409         IN      u1Byte                  byte1,\r
1410         IN      u1Byte                  byte2,\r
1411         IN      u1Byte                  byte3,\r
1412         IN      u1Byte                  byte4,\r
1413         IN      u1Byte                  byte5\r
1414         )\r
1415 {\r
1416         u1Byte                  H2C_Parameter[5] ={0};\r
1417 \r
1418         H2C_Parameter[0] = byte1;       \r
1419         H2C_Parameter[1] = byte2;       \r
1420         H2C_Parameter[2] = byte3;\r
1421         H2C_Parameter[3] = byte4;\r
1422         H2C_Parameter[4] = byte5;\r
1423 \r
1424         pCoexDm->psTdmaPara[0] = byte1;\r
1425         pCoexDm->psTdmaPara[1] = byte2;\r
1426         pCoexDm->psTdmaPara[2] = byte3;\r
1427         pCoexDm->psTdmaPara[3] = byte4;\r
1428         pCoexDm->psTdmaPara[4] = byte5;\r
1429         \r
1430         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], FW write 0x60(5bytes)=0x%x%08x\n", \r
1431                 H2C_Parameter[0], \r
1432                 H2C_Parameter[1]<<24|H2C_Parameter[2]<<16|H2C_Parameter[3]<<8|H2C_Parameter[4]));\r
1433 \r
1434         pBtCoexist->fBtcFillH2c(pBtCoexist, 0x60, 5, H2C_Parameter);\r
1435 }\r
1436 \r
1437 VOID\r
1438 halbtc8723b2ant_SwMechanism1(\r
1439         IN      PBTC_COEXIST    pBtCoexist,     \r
1440         IN      BOOLEAN         bShrinkRxLPF,\r
1441         IN      BOOLEAN         bLowPenaltyRA,\r
1442         IN      BOOLEAN         bLimitedDIG, \r
1443         IN      BOOLEAN         bBTLNAConstrain\r
1444         ) \r
1445 {\r
1446         /*\r
1447         u4Byte  wifiBw;\r
1448         \r
1449         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
1450         \r
1451         if(BTC_WIFI_BW_HT40 != wifiBw)  //only shrink RF Rx LPF for HT40\r
1452         {\r
1453                 if (bShrinkRxLPF)\r
1454                         bShrinkRxLPF = FALSE;\r
1455         }\r
1456         */\r
1457         \r
1458         //halbtc8723b2ant_RfShrink(pBtCoexist, NORMAL_EXEC, bShrinkRxLPF);\r
1459         halbtc8723b2ant_LowPenaltyRa(pBtCoexist, NORMAL_EXEC, bLowPenaltyRA);\r
1460 }\r
1461 \r
1462 VOID\r
1463 halbtc8723b2ant_SwMechanism2(\r
1464         IN      PBTC_COEXIST    pBtCoexist,     \r
1465         IN      BOOLEAN         bAGCTableShift,\r
1466         IN      BOOLEAN         bADCBackOff,\r
1467         IN      BOOLEAN         bSWDACSwing,\r
1468         IN      u4Byte          dacSwingLvl\r
1469         ) \r
1470 {\r
1471         //halbtc8723b2ant_AgcTable(pBtCoexist, NORMAL_EXEC, bAGCTableShift);\r
1472         //halbtc8723b2ant_AdcBackOff(pBtCoexist, NORMAL_EXEC, bADCBackOff);\r
1473         //halbtc8723b2ant_DacSwing(pBtCoexist, NORMAL_EXEC, bSWDACSwing, dacSwingLvl);\r
1474 }\r
1475 \r
1476 VOID\r
1477 halbtc8723b2ant_SetAntPath(\r
1478         IN      PBTC_COEXIST            pBtCoexist,\r
1479         IN      u1Byte                          antPosType,\r
1480         IN      BOOLEAN                         bInitHwCfg,\r
1481         IN      BOOLEAN                         bWifiOff\r
1482         )\r
1483 {\r
1484         PBTC_BOARD_INFO pBoardInfo=&pBtCoexist->boardInfo;\r
1485         u4Byte                  fwVer=0, u4Tmp=0;\r
1486         BOOLEAN                 bPgExtSwitch=FALSE;\r
1487         BOOLEAN                 bUseExtSwitch=FALSE;\r
1488         u1Byte                  H2C_Parameter[2] ={0};\r
1489 \r
1490         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_EXT_SWITCH, &bPgExtSwitch);\r
1491         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);        // [31:16]=fw ver, [15:0]=fw sub ver\r
1492 \r
1493         if((fwVer>0 && fwVer<0xc0000) || bPgExtSwitch)\r
1494                 bUseExtSwitch = TRUE;\r
1495 \r
1496         if(bInitHwCfg)\r
1497         {\r
1498                 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x39, 0x8, 0x1);\r
1499                 pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x974, 0xff);\r
1500                 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x944, 0x3, 0x3);\r
1501                 pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x930, 0x77);\r
1502                 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x67, 0x20, 0x1);\r
1503 \r
1504                 if(fwVer >= 0x180000)\r
1505                 {\r
1506                         /* Use H2C to set GNT_BT to High to avoid A2DP click */\r
1507                         H2C_Parameter[0] = 1;\r
1508                 pBtCoexist->fBtcFillH2c(pBtCoexist, 0x6E, 1, H2C_Parameter);\r
1509                 }\r
1510                 else\r
1511                 {\r
1512                         pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x765, 0x18);\r
1513                 }\r
1514                 \r
1515                 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x948, 0x0);\r
1516 \r
1517                 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0); //WiFi TRx Mask off\r
1518                 //remove due to interrupt is disabled that polling c2h will fail and delay 100ms.\r
1519                 //pBtCoexist->fBtcSetBtReg(pBtCoexist, BTC_BT_REG_RF, 0x3c, 0x01); //BT TRx Mask off\r
1520 \r
1521                 if(pBoardInfo->btdmAntPos == BTC_ANTENNA_AT_MAIN_PORT)\r
1522                 {\r
1523                         //tell firmware "no antenna inverse"\r
1524                         H2C_Parameter[0] = 0;\r
1525                 }\r
1526                 else\r
1527                 {\r
1528                         //tell firmware "antenna inverse"\r
1529                         H2C_Parameter[0] = 1;\r
1530                 }\r
1531 \r
1532                 if (bUseExtSwitch)\r
1533                 {\r
1534                         //ext switch type\r
1535                         H2C_Parameter[1] = 1;\r
1536                 }\r
1537                 else\r
1538                 {\r
1539                         //int switch type\r
1540                         H2C_Parameter[1] = 0;\r
1541                 }\r
1542                 pBtCoexist->fBtcFillH2c(pBtCoexist, 0x65, 2, H2C_Parameter);\r
1543         }\r
1544         else\r
1545         {\r
1546                 if(fwVer >= 0x180000)\r
1547                 {\r
1548                         /* Use H2C to set GNT_BT to "Control by PTA"*/\r
1549                         H2C_Parameter[0] = 0;\r
1550                         pBtCoexist->fBtcFillH2c(pBtCoexist, 0x6E, 1, H2C_Parameter);                    \r
1551                 }\r
1552                 else\r
1553                 {\r
1554                         pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x765, 0x0);\r
1555                 }\r
1556         }\r
1557 \r
1558         // ext switch setting\r
1559         if(bUseExtSwitch)\r
1560         {\r
1561                 if (bInitHwCfg)\r
1562                 {\r
1563                         // 0x4c[23]=0, 0x4c[24]=1  Antenna control by WL/BT\r
1564                         u4Tmp = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x4c);\r
1565                         u4Tmp &=~BIT23;\r
1566                         u4Tmp |= BIT24;\r
1567                         pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x4c, u4Tmp);\r
1568                 }\r
1569                 \r
1570                 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x948, 0x0); // fixed internal switch S1->WiFi, S0->BT\r
1571                 switch(antPosType)\r
1572                 {\r
1573                         case BTC_ANT_WIFI_AT_MAIN:\r
1574                                 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x92c, 0x3, 0x1); // ext switch main at wifi\r
1575                                 break;\r
1576                         case BTC_ANT_WIFI_AT_AUX:\r
1577                                 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x92c, 0x3, 0x2); // ext switch aux at wifi\r
1578                                 break;\r
1579                 }       \r
1580         }\r
1581         else    // internal switch\r
1582         {\r
1583                 if (bInitHwCfg)\r
1584                 {\r
1585                         // 0x4c[23]=0, 0x4c[24]=1  Antenna control by WL/BT\r
1586                         u4Tmp = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x4c);\r
1587                         u4Tmp |= BIT23;\r
1588                         u4Tmp &=~BIT24;\r
1589                         pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x4c, u4Tmp);\r
1590                 }\r
1591                 \r
1592                 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x64, 0x1, 0x0); //fixed external switch S1->Main, S0->Aux\r
1593                 switch(antPosType)\r
1594                 {\r
1595                         case BTC_ANT_WIFI_AT_MAIN:\r
1596                                 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x948, 0x0); // fixed internal switch S1->WiFi, S0->BT\r
1597                                 break;\r
1598                         case BTC_ANT_WIFI_AT_AUX:\r
1599                                 pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x948, 0x280); // fixed internal switch S0->WiFi, S1->BT\r
1600                                 break;\r
1601                 }\r
1602         }\r
1603 }\r
1604 \r
1605 VOID\r
1606 halbtc8723b2ant_PsTdma(\r
1607         IN      PBTC_COEXIST            pBtCoexist,\r
1608         IN      BOOLEAN                 bForceExec,\r
1609         IN      BOOLEAN                 bTurnOn,\r
1610         IN      u1Byte                  type\r
1611         )\r
1612 {\r
1613         BOOLEAN                 bTurnOnByCnt=FALSE;\r
1614         u1Byte                  psTdmaTypeByCnt=0;\r
1615         u1Byte                  wifiRssiState1, btRssiState;\r
1616 \r
1617         \r
1618         wifiRssiState1 = halbtc8723b2ant_WifiRssiState(pBtCoexist, 1, 2, BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES, 0);\r
1619         btRssiState = halbtc8723b2ant_BtRssiState(2, BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES, 0);\r
1620 \r
1621         if (!(BTC_RSSI_HIGH(wifiRssiState1) && BTC_RSSI_HIGH(btRssiState)) && bTurnOn)\r
1622         {\r
1623                 type = type +100;  //for WiFi RSSI low or BT RSSI low\r
1624         }\r
1625 \r
1626         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], %s turn %s PS TDMA, type=%d\n", \r
1627                 (bForceExec? "force to":""), (bTurnOn? "ON":"OFF"), type));\r
1628         pCoexDm->bCurPsTdmaOn = bTurnOn;\r
1629         pCoexDm->curPsTdma = type;\r
1630 \r
1631         if(!bForceExec)\r
1632         {\r
1633                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], bPrePsTdmaOn = %d, bCurPsTdmaOn = %d!!\n", \r
1634                         pCoexDm->bPrePsTdmaOn, pCoexDm->bCurPsTdmaOn));\r
1635                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], prePsTdma = %d, curPsTdma = %d!!\n", \r
1636                         pCoexDm->prePsTdma, pCoexDm->curPsTdma));\r
1637 \r
1638                 if( (pCoexDm->bPrePsTdmaOn == pCoexDm->bCurPsTdmaOn) &&\r
1639                         (pCoexDm->prePsTdma == pCoexDm->curPsTdma) )\r
1640                         return;\r
1641         }       \r
1642         if(bTurnOn)\r
1643         {\r
1644                 switch(type)\r
1645                 {\r
1646                         case 1:\r
1647                         default:\r
1648                                 //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0xe1, 0x90);\r
1649                                 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x3c, 0x03, 0xf1, 0x90);\r
1650                                 break;\r
1651                         case 2:\r
1652                                 //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0xe1, 0x90);\r
1653                                 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x2d, 0x03, 0xf1, 0x90);\r
1654                                 break;\r
1655                         case 3:\r
1656                                 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x3, 0xf1, 0x90);\r
1657                                 break;\r
1658                         case 4:\r
1659                                 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x10, 0x03, 0xf1, 0x90);\r
1660                                 break;\r
1661                         case 5:\r
1662                                 //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0x60, 0x90);\r
1663                                 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x3c, 0x3, 0x70, 0x90);                           \r
1664                                 break;\r
1665                         case 6:\r
1666                                 //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0x60, 0x90);\r
1667                                 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x2d, 0x3, 0x70, 0x90);\r
1668                                 break;\r
1669                         case 7:\r
1670                                 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x3, 0x70, 0x90);\r
1671                                 break;\r
1672                         case 8: \r
1673                                 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xa3, 0x10, 0x3, 0x70, 0x90);\r
1674                                 break;\r
1675                         case 9: \r
1676                                 //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0xe1, 0x90);\r
1677                                 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x3c, 0x03, 0xf1, 0x90);\r
1678                                 break;\r
1679                         case 10:        \r
1680                                 //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0xe1, 0x90);\r
1681                                 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x2d, 0x03, 0xf1, 0x90);\r
1682                                 break;\r
1683                         case 11:        \r
1684                                 //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0xa, 0xa, 0xe1, 0x90);\r
1685                                 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x3, 0xf1, 0x90);\r
1686                                 break;\r
1687                         case 12:\r
1688                                 //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x5, 0x5, 0xe1, 0x90);\r
1689                                 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x10, 0x3, 0xf1, 0x90);\r
1690                                 break;\r
1691                         case 13:\r
1692                                 //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0x60, 0x90);\r
1693                                 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x3c, 0x3, 0x70, 0x90);           \r
1694                                 break;\r
1695                         case 14:\r
1696                                 //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0x60, 0x90);\r
1697                                 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x2d, 0x3, 0x70, 0x90);           \r
1698                                 break;\r
1699                         case 15:\r
1700                                 //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0xa, 0xa, 0x60, 0x90);\r
1701                                 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x3, 0x70, 0x90);           \r
1702                                 break;\r
1703                         case 16:\r
1704                                 //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x5, 0x5, 0x60, 0x90);\r
1705                                 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x10, 0x3, 0x70, 0x90);           \r
1706                                 break;\r
1707                         case 17:\r
1708                                 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xa3, 0x2f, 0x2f, 0x60, 0x90);\r
1709                                 break;\r
1710                         case 18:\r
1711                                 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x5, 0x5, 0xe1, 0x90);\r
1712                                 break;                  \r
1713                         case 19:\r
1714                                 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x25, 0x25, 0xe1, 0x90);\r
1715                                 break;\r
1716                         case 20:\r
1717                                 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x25, 0x25, 0x60, 0x90);\r
1718                                 break;\r
1719                         case 21:\r
1720                                 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x15, 0x03, 0x70, 0x90);\r
1721                                 break;  \r
1722                         case 71:\r
1723                                 //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0xe1, 0x90);\r
1724 \r
1725                                 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x3c, 0x03, 0xf1, 0x90);\r
1726                                 break;\r
1727                         case 101:\r
1728                         case 105:\r
1729                         case 171:       \r
1730                                 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xd3, 0x3a, 0x03, 0x70, 0x50);\r
1731                                 break;\r
1732                         case 102:\r
1733                         case 106:\r
1734                         case 110:\r
1735                         case 114:       \r
1736                                 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xd3, 0x2d, 0x03, 0x70, 0x50);\r
1737                                 break;  \r
1738                         case 103:\r
1739                         case 107:\r
1740                         case 111:\r
1741                         case 115:       \r
1742                                 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xd3, 0x21, 0x03, 0x70, 0x50);\r
1743                                 break;          \r
1744                         case 104:\r
1745                         case 108:\r
1746                         case 112:\r
1747                         case 116:       \r
1748                                 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xd3, 0x21, 0x03, 0x70, 0x50);\r
1749                                 break;  \r
1750                         case 109:\r
1751                                 //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0xe1, 0x90);\r
1752                                 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x3c, 0x03, 0xf1, 0x90);\r
1753                                 break;\r
1754                         case 113:       \r
1755                                 //halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0x60, 0x90);\r
1756                                 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x3c, 0x03, 0x70, 0x90);\r
1757                                 break;\r
1758                         case 121:       \r
1759                                 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x15, 0x03, 0x70, 0x90);\r
1760                                 break;  \r
1761                         case 22:\r
1762                         case 122:\r
1763                                 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x35, 0x03, 0x71, 0x11);\r
1764                                 break;\r
1765                 }\r
1766         }\r
1767         else\r
1768         {\r
1769                 // disable PS tdma\r
1770                 switch(type)\r
1771                 {\r
1772                         case 0:\r
1773                                 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0x0, 0x0, 0x0, 0x40, 0x0);\r
1774                                 break;\r
1775                         case 1:\r
1776                                 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0x0, 0x0, 0x0, 0x48, 0x0);\r
1777                                 break;\r
1778                         default:\r
1779                                 halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0x0, 0x0, 0x0, 0x40, 0x0);\r
1780                                 break;\r
1781                 }\r
1782         }\r
1783 \r
1784         // update pre state\r
1785         pCoexDm->bPrePsTdmaOn = pCoexDm->bCurPsTdmaOn;\r
1786         pCoexDm->prePsTdma = pCoexDm->curPsTdma;\r
1787 }\r
1788 \r
1789 VOID\r
1790 halbtc8723b2ant_PsTdmaCheckForPowerSaveState(\r
1791         IN      PBTC_COEXIST            pBtCoexist,\r
1792         IN      BOOLEAN                 bNewPsState\r
1793         )\r
1794 {\r
1795         u1Byte  lpsMode=0x0;\r
1796 \r
1797         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_LPS_MODE, &lpsMode);\r
1798         \r
1799         if(lpsMode)     // already under LPS state\r
1800         {\r
1801                 if(bNewPsState)         \r
1802                 {\r
1803                         // keep state under LPS, do nothing.\r
1804                 }\r
1805                 else\r
1806                 {\r
1807                         // will leave LPS state, turn off psTdma first\r
1808                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
1809                 }\r
1810         }\r
1811         else                                            // NO PS state\r
1812         {\r
1813                 if(bNewPsState)\r
1814                 {\r
1815                         // will enter LPS state, turn off psTdma first\r
1816                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
1817                 }\r
1818                 else\r
1819                 {\r
1820                         // keep state under NO PS state, do nothing.\r
1821                 }\r
1822         }\r
1823 }\r
1824 \r
1825 VOID\r
1826 halbtc8723b2ant_PowerSaveState(\r
1827         IN      PBTC_COEXIST            pBtCoexist,\r
1828         IN      u1Byte                          psType,\r
1829         IN      u1Byte                          lpsVal,\r
1830         IN      u1Byte                          rpwmVal\r
1831         )\r
1832 {\r
1833         BOOLEAN         bLowPwrDisable=FALSE;\r
1834         \r
1835         switch(psType)\r
1836         {\r
1837                 case BTC_PS_WIFI_NATIVE:\r
1838                         // recover to original 32k low power setting\r
1839                         bLowPwrDisable = FALSE;\r
1840                         pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
1841                         pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_NORMAL_LPS, NULL);\r
1842                         pCoexSta->bForceLpsOn = FALSE;\r
1843                         break;\r
1844                 case BTC_PS_LPS_ON:\r
1845                         halbtc8723b2ant_PsTdmaCheckForPowerSaveState(pBtCoexist, TRUE);\r
1846                         halbtc8723b2ant_LpsRpwm(pBtCoexist, NORMAL_EXEC, lpsVal, rpwmVal);                      \r
1847                         // when coex force to enter LPS, do not enter 32k low power.\r
1848                         bLowPwrDisable = TRUE;\r
1849                         pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
1850                         // power save must executed before psTdma.                      \r
1851                         pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_ENTER_LPS, NULL);\r
1852                         pCoexSta->bForceLpsOn = TRUE;\r
1853                         break;\r
1854                 case BTC_PS_LPS_OFF:\r
1855                         halbtc8723b2ant_PsTdmaCheckForPowerSaveState(pBtCoexist, FALSE);\r
1856                         pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_LEAVE_LPS, NULL);\r
1857                         pCoexSta->bForceLpsOn = FALSE;\r
1858                         break;\r
1859                 default:\r
1860                         break;\r
1861         }\r
1862 }\r
1863 \r
1864 \r
1865 VOID\r
1866 halbtc8723b2ant_CoexAllOff(\r
1867         IN      PBTC_COEXIST            pBtCoexist\r
1868         )\r
1869 {\r
1870         // fw all off\r
1871         halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);               \r
1872         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
1873         halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
1874         halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
1875 \r
1876         // sw all off\r
1877         halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
1878         halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
1879 \r
1880         // hw all off\r
1881         //pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
1882         halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
1883 }\r
1884 \r
1885 VOID\r
1886 halbtc8723b2ant_InitCoexDm(\r
1887         IN      PBTC_COEXIST            pBtCoexist\r
1888         )\r
1889 {       \r
1890         // force to reset coex mechanism\r
1891         halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
1892         \r
1893         halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);               \r
1894         halbtc8723b2ant_PsTdma(pBtCoexist, FORCE_EXEC, FALSE, 1);\r
1895         halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, FORCE_EXEC, 6);\r
1896         halbtc8723b2ant_DecBtPwr(pBtCoexist, FORCE_EXEC, 0);\r
1897 \r
1898         halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
1899         halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
1900 }\r
1901 \r
1902 VOID\r
1903 halbtc8723b2ant_ActionBtInquiry(\r
1904         IN      PBTC_COEXIST            pBtCoexist\r
1905         )\r
1906 {\r
1907         u1Byte          wifiRssiState, wifiRssiState1, btRssiState;\r
1908         BOOLEAN bWifiConnected=FALSE;\r
1909         BOOLEAN bLowPwrDisable=TRUE;\r
1910         BOOLEAN         bScan=FALSE, bLink=FALSE, bRoam=FALSE;\r
1911 \r
1912 \r
1913         wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
1914         wifiRssiState1 = halbtc8723b2ant_WifiRssiState(pBtCoexist, 1, 2, BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES, 0);\r
1915         btRssiState = halbtc8723b2ant_BtRssiState(2, BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES, 0);\r
1916         \r
1917         pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
1918         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
1919 \r
1920         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);\r
1921         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_LINK, &bLink);\r
1922         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_ROAM, &bRoam);\r
1923                 \r
1924         \r
1925         halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);               \r
1926 \r
1927         if(bScan || bLink || bRoam)\r
1928         {\r
1929                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi link process + BT Inq/Page!!\n"));\r
1930                 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 15);         \r
1931                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 22);\r
1932         }\r
1933         else if(bWifiConnected)\r
1934         {\r
1935                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi connected + BT Inq/Page!!\n"));\r
1936                 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 15);         \r
1937                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 22);\r
1938         }\r
1939         else\r
1940         {\r
1941                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi no-link + BT Inq/Page!!\n"));\r
1942                 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
1943                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0);\r
1944         }       \r
1945         \r
1946         halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, FORCE_EXEC, 6);\r
1947         halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
1948 \r
1949         halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
1950         halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
1951 /*\r
1952         pCoexDm->bNeedRecover0x948 = TRUE;\r
1953         pCoexDm->backup0x948 = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x948);\r
1954 \r
1955         halbtc8723b2ant_SetAntPath(pBtCoexist, BTC_ANT_WIFI_AT_AUX, FALSE, FALSE);\r
1956 */      \r
1957 }\r
1958 \r
1959 \r
1960 VOID\r
1961 halbtc8723b2ant_ActionWiFiLinkProcess(\r
1962         IN      PBTC_COEXIST            pBtCoexist\r
1963         )\r
1964 {\r
1965         u4Byte  u4Tmp;\r
1966         u1Byte  u1Tmpa, u1Tmpb;\r
1967         \r
1968         halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 15);         \r
1969         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 22);\r
1970 \r
1971         halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
1972         halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
1973 \r
1974 \r
1975          u4Tmp = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x948);\r
1976         u1Tmpa = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x765);\r
1977          u1Tmpb = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x76e);\r
1978 \r
1979          BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("############# [BTCoex], 0x948=0x%x, 0x765=0x%x, 0x76e=0x%x\n",\r
1980                       u4Tmp,  u1Tmpa, u1Tmpb));\r
1981 }\r
1982 \r
1983 BOOLEAN\r
1984 halbtc8723b2ant_IsCommonAction(\r
1985         IN      PBTC_COEXIST            pBtCoexist\r
1986         )\r
1987 {\r
1988         u1Byte                  btRssiState=BTC_RSSI_STATE_HIGH;\r
1989         BOOLEAN                 bCommon=FALSE, bWifiConnected=FALSE, bWifiBusy=FALSE;\r
1990         BOOLEAN                 bBtHsOn=FALSE, bLowPwrDisable=FALSE;\r
1991 \r
1992         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);\r
1993         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
1994         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);\r
1995 \r
1996         if(!bWifiConnected)\r
1997         {\r
1998                 bLowPwrDisable = FALSE;\r
1999                 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
2000                 halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
2001 \r
2002                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi non-connected idle!!\n"));\r
2003 \r
2004                 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
2005                 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
2006                 \r
2007                 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);                       \r
2008                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
2009                 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
2010                 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
2011                 \r
2012                 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
2013                 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
2014 \r
2015                 bCommon = TRUE;\r
2016         }\r
2017         else\r
2018         {\r
2019                 if(BT_8723B_2ANT_BT_STATUS_NON_CONNECTED_IDLE == pCoexDm->btStatus)\r
2020                 {\r
2021                         bLowPwrDisable = FALSE;\r
2022                         pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
2023                         halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
2024 \r
2025                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi connected + BT non connected-idle!!\n"));\r
2026 \r
2027                         pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
2028                         halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
2029 \r
2030                         halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);                       \r
2031                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);              \r
2032                         halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 0xb);\r
2033                         halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
2034 \r
2035                 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
2036                         halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
2037 \r
2038                         bCommon = TRUE;\r
2039                 }\r
2040                 else if(BT_8723B_2ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus)\r
2041                 {\r
2042                         bLowPwrDisable = TRUE;\r
2043                         pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
2044 \r
2045                         if(bBtHsOn)\r
2046                                 return FALSE;\r
2047                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi connected + BT connected-idle!!\n"));\r
2048                         halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
2049 \r
2050                         pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
2051                         halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
2052 \r
2053                         halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);                       \r
2054                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
2055                         halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 0xb);\r
2056                         halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
2057 \r
2058                         halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
2059                         halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
2060 \r
2061                         bCommon = TRUE;\r
2062                 }\r
2063                 else\r
2064                 {\r
2065                         bLowPwrDisable = TRUE;\r
2066                         pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);\r
2067 \r
2068                         if(bWifiBusy)\r
2069                         {\r
2070                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi Connected-Busy + BT Busy!!\n"));\r
2071                                 bCommon = FALSE;\r
2072                         }\r
2073                         else\r
2074                         {\r
2075                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi Connected-Idle + BT Busy!!\n"));\r
2076                                 bCommon = FALSE;\r
2077                         \r
2078                                 /*\r
2079                                 if(bBtHsOn)\r
2080                                         return FALSE;\r
2081                                 \r
2082                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Wifi Connected-Idle + BT Busy!!\n"));\r
2083                                 btRssiState = halbtc8723b2ant_BtRssiState(2, BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES, 0);\r
2084                                 halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
2085 \r
2086                                 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
2087                                 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);\r
2088                                 \r
2089                                 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);                                                       \r
2090                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 21);\r
2091                                 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 0xb);\r
2092                                 if(BTC_RSSI_HIGH(btRssiState))\r
2093                                         halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
2094                                 else    \r
2095                                         halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
2096                                 halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
2097                                 halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
2098                                 bCommon = TRUE;\r
2099                                 */\r
2100                         }\r
2101                 }       \r
2102         }\r
2103 \r
2104         return bCommon;\r
2105 }\r
2106 VOID\r
2107 halbtc8723b2ant_TdmaDurationAdjust(\r
2108         IN      PBTC_COEXIST            pBtCoexist,\r
2109         IN      BOOLEAN                 bScoHid,\r
2110         IN      BOOLEAN                 bTxPause,\r
2111         IN      u1Byte                  maxInterval\r
2112         )\r
2113 {\r
2114         static s4Byte           up,dn,m,n,WaitCount;\r
2115         s4Byte                  result;   //0: no change, +1: increase WiFi duration, -1: decrease WiFi duration\r
2116         u1Byte                  retryCount=0;\r
2117 \r
2118         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW, ("[BTCoex], TdmaDurationAdjust()\n"));\r
2119 \r
2120         if(!pCoexDm->bAutoTdmaAdjust)\r
2121         {\r
2122                 pCoexDm->bAutoTdmaAdjust = TRUE;\r
2123                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], first run TdmaDurationAdjust()!!\n"));\r
2124                 {\r
2125                         if(bScoHid)\r
2126                         {\r
2127                                 if(bTxPause)\r
2128                                 {\r
2129                                         if(maxInterval == 1)\r
2130                                         {\r
2131                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 13);\r
2132                                                 pCoexDm->psTdmaDuAdjType = 13;  \r
2133                                         }\r
2134                                         else if(maxInterval == 2)\r
2135                                         {\r
2136                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);\r
2137                                                 pCoexDm->psTdmaDuAdjType = 14;  \r
2138                                         }\r
2139                                         else if(maxInterval == 3)\r
2140                                         {\r
2141                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2142                                                 pCoexDm->psTdmaDuAdjType = 15;  \r
2143                                         }\r
2144                                         else\r
2145                                         {\r
2146                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2147                                                 pCoexDm->psTdmaDuAdjType = 15;\r
2148                                         }\r
2149                                 }\r
2150                                 else\r
2151                                 {\r
2152                                         if(maxInterval == 1)\r
2153                                         {\r
2154                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);\r
2155                                                 pCoexDm->psTdmaDuAdjType = 9;   \r
2156                                         }\r
2157                                         else if(maxInterval == 2)\r
2158                                         {\r
2159                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);\r
2160                                                 pCoexDm->psTdmaDuAdjType = 10;  \r
2161                                         }\r
2162                                         else if(maxInterval == 3)\r
2163                                         {\r
2164                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2165                                                 pCoexDm->psTdmaDuAdjType = 11;\r
2166                                         }\r
2167                                         else\r
2168                                         {\r
2169                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2170                                                 pCoexDm->psTdmaDuAdjType = 11;\r
2171                                         }\r
2172                                 }\r
2173                         }\r
2174                         else\r
2175                         {\r
2176                                 if(bTxPause)\r
2177                                 {\r
2178                                         if(maxInterval == 1)\r
2179                                         {\r
2180                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);\r
2181                                                 pCoexDm->psTdmaDuAdjType = 5;   \r
2182                                         }\r
2183                                         else if(maxInterval == 2)\r
2184                                         {\r
2185                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
2186                                                 pCoexDm->psTdmaDuAdjType = 6;   \r
2187                                         }\r
2188                                         else if(maxInterval == 3)\r
2189                                         {\r
2190                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2191                                                 pCoexDm->psTdmaDuAdjType = 7;\r
2192                                         }\r
2193                                         else\r
2194                                         {\r
2195                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2196                                                 pCoexDm->psTdmaDuAdjType = 7;\r
2197                                         }\r
2198                                 }\r
2199                                 else\r
2200                                 {\r
2201                                         if(maxInterval == 1)\r
2202                                         {\r
2203                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);\r
2204                                                 pCoexDm->psTdmaDuAdjType = 1;   \r
2205                                         }\r
2206                                         else if(maxInterval == 2)\r
2207                                         {\r
2208                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
2209                                                 pCoexDm->psTdmaDuAdjType = 2;   \r
2210                                         }\r
2211                                         else if(maxInterval == 3)\r
2212                                         {\r
2213                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2214                                                 pCoexDm->psTdmaDuAdjType = 3;\r
2215                                         }\r
2216                                         else\r
2217                                         {\r
2218                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2219                                                 pCoexDm->psTdmaDuAdjType = 3;\r
2220                                         }\r
2221                                 }\r
2222                         }\r
2223                 }\r
2224                 //============\r
2225                 up = 0;\r
2226                 dn = 0;\r
2227                 m = 1;\r
2228                 n= 3;\r
2229                 result = 0;\r
2230                 WaitCount = 0;\r
2231         }\r
2232         else\r
2233         {\r
2234                 //accquire the BT TRx retry count from BT_Info byte2\r
2235                 retryCount = pCoexSta->btRetryCnt;\r
2236                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], retryCount = %d\n", retryCount));\r
2237                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], up=%d, dn=%d, m=%d, n=%d, WaitCount=%d\n", \r
2238                         up, dn, m, n, WaitCount));\r
2239                 result = 0;\r
2240                 WaitCount++; \r
2241                   \r
2242                 if(retryCount == 0)  // no retry in the last 2-second duration\r
2243                 {\r
2244                         up++;\r
2245                         dn--;\r
2246 \r
2247                         if (dn <= 0)\r
2248                                 dn = 0;                          \r
2249 \r
2250                         if(up >= n)     // if ³sÄò n ­Ó2¬í retry count¬°0, «h½Õ¼eWiFi duration\r
2251                         {\r
2252                                 WaitCount = 0; \r
2253                                 n = 3;\r
2254                                 up = 0;\r
2255                                 dn = 0;\r
2256                                 result = 1; \r
2257                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Increase wifi duration!!\n"));\r
2258                         }\r
2259                 }\r
2260                 else if (retryCount <= 3)       // <=3 retry in the last 2-second duration\r
2261                 {\r
2262                         up--; \r
2263                         dn++;\r
2264 \r
2265                         if (up <= 0)\r
2266                                 up = 0;\r
2267 \r
2268                         if (dn == 2)    // if ³sÄò 2 ­Ó2¬í retry count< 3, «h½Õ¯¶WiFi duration\r
2269                         {\r
2270                                 if (WaitCount <= 2)\r
2271                                         m++; // ÁקK¤@ª½¦b¨â­Ólevel¤¤¨Ó¦^\r
2272                                 else\r
2273                                         m = 1;\r
2274 \r
2275                                 if ( m >= 20) //m ³Ì¤j­È = 20 ' ³Ì¤j120¬í recheck¬O§_½Õ¾ã WiFi duration.\r
2276                                         m = 20;\r
2277 \r
2278                                 n = 3*m;\r
2279                                 up = 0;\r
2280                                 dn = 0;\r
2281                                 WaitCount = 0;\r
2282                                 result = -1; \r
2283                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Decrease wifi duration for retryCounter<3!!\n"));\r
2284                         }\r
2285                 }\r
2286                 else  //retry count > 3, ¥u­n1¦¸ retry count > 3, «h½Õ¯¶WiFi duration\r
2287                 {\r
2288                         if (WaitCount == 1)\r
2289                                 m++; // ÁקK¤@ª½¦b¨â­Ólevel¤¤¨Ó¦^\r
2290                         else\r
2291                                 m = 1;\r
2292 \r
2293                         if ( m >= 20) //m ³Ì¤j­È = 20 ' ³Ì¤j120¬í recheck¬O§_½Õ¾ã WiFi duration.\r
2294                                 m = 20;\r
2295 \r
2296                         n = 3*m;\r
2297                         up = 0;\r
2298                         dn = 0;\r
2299                         WaitCount = 0; \r
2300                         result = -1;\r
2301                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], Decrease wifi duration for retryCounter>3!!\n"));\r
2302                 }\r
2303 \r
2304                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], max Interval = %d\n", maxInterval));\r
2305                 if(maxInterval == 1)\r
2306                 {\r
2307                         if(bTxPause)\r
2308                         {\r
2309                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 1\n"));\r
2310 \r
2311                                 if(pCoexDm->curPsTdma == 71)\r
2312                                 {\r
2313                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);\r
2314                                         pCoexDm->psTdmaDuAdjType = 5;\r
2315                                 }\r
2316                                 else if(pCoexDm->curPsTdma == 1)\r
2317                                 {\r
2318                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);\r
2319                                         pCoexDm->psTdmaDuAdjType = 5;\r
2320                                 }\r
2321                                 else if(pCoexDm->curPsTdma == 2)\r
2322                                 {\r
2323                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
2324                                         pCoexDm->psTdmaDuAdjType = 6;\r
2325                                 }\r
2326                                 else if(pCoexDm->curPsTdma == 3)\r
2327                                 {\r
2328                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2329                                         pCoexDm->psTdmaDuAdjType = 7;\r
2330                                 }\r
2331                                 else if(pCoexDm->curPsTdma == 4)\r
2332                                 {\r
2333                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 8);\r
2334                                         pCoexDm->psTdmaDuAdjType = 8;\r
2335                                 }\r
2336                                 if(pCoexDm->curPsTdma == 9)\r
2337                                 {\r
2338                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 13);\r
2339                                         pCoexDm->psTdmaDuAdjType = 13;\r
2340                                 }\r
2341                                 else if(pCoexDm->curPsTdma == 10)\r
2342                                 {\r
2343                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);\r
2344                                         pCoexDm->psTdmaDuAdjType = 14;\r
2345                                 }\r
2346                                 else if(pCoexDm->curPsTdma == 11)\r
2347                                 {\r
2348                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2349                                         pCoexDm->psTdmaDuAdjType = 15;\r
2350                                 }\r
2351                                 else if(pCoexDm->curPsTdma == 12)\r
2352                                 {\r
2353                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 16);\r
2354                                         pCoexDm->psTdmaDuAdjType = 16;\r
2355                                 }\r
2356                                 \r
2357                                 if(result == -1)\r
2358                                 {                                       \r
2359                                         if(pCoexDm->curPsTdma == 5)\r
2360                                         {\r
2361                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
2362                                                 pCoexDm->psTdmaDuAdjType = 6;\r
2363                                         }\r
2364                                         else if(pCoexDm->curPsTdma == 6)\r
2365                                         {\r
2366                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2367                                                 pCoexDm->psTdmaDuAdjType = 7;\r
2368                                         }\r
2369                                         else if(pCoexDm->curPsTdma == 7)\r
2370                                         {\r
2371                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 8);\r
2372                                                 pCoexDm->psTdmaDuAdjType = 8;\r
2373                                         }\r
2374                                         else if(pCoexDm->curPsTdma == 13)\r
2375                                         {\r
2376                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);\r
2377                                                 pCoexDm->psTdmaDuAdjType = 14;\r
2378                                         }\r
2379                                         else if(pCoexDm->curPsTdma == 14)\r
2380                                         {\r
2381                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2382                                                 pCoexDm->psTdmaDuAdjType = 15;\r
2383                                         }\r
2384                                         else if(pCoexDm->curPsTdma == 15)\r
2385                                         {\r
2386                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 16);\r
2387                                                 pCoexDm->psTdmaDuAdjType = 16;\r
2388                                         }\r
2389                                 } \r
2390                                 else if (result == 1)\r
2391                                 {\r
2392                                         if(pCoexDm->curPsTdma == 8)\r
2393                                         {\r
2394                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2395                                                 pCoexDm->psTdmaDuAdjType = 7;\r
2396                                         }\r
2397                                         else if(pCoexDm->curPsTdma == 7)\r
2398                                         {\r
2399                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
2400                                                 pCoexDm->psTdmaDuAdjType = 6;\r
2401                                         }\r
2402                                         else if(pCoexDm->curPsTdma == 6)\r
2403                                         {\r
2404                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);\r
2405                                                 pCoexDm->psTdmaDuAdjType = 5;\r
2406                                         }\r
2407                                         else if(pCoexDm->curPsTdma == 16)\r
2408                                         {\r
2409                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2410                                                 pCoexDm->psTdmaDuAdjType = 15;\r
2411                                         }\r
2412                                         else if(pCoexDm->curPsTdma == 15)\r
2413                                         {\r
2414                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);\r
2415                                                 pCoexDm->psTdmaDuAdjType = 14;\r
2416                                         }\r
2417                                         else if(pCoexDm->curPsTdma == 14)\r
2418                                         {\r
2419                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 13);\r
2420                                                 pCoexDm->psTdmaDuAdjType = 13;\r
2421                                         }\r
2422                                 }\r
2423                         }\r
2424                         else\r
2425                         {\r
2426                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 0\n"));\r
2427                                 if(pCoexDm->curPsTdma == 5)\r
2428                                 {\r
2429                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 71);\r
2430                                         pCoexDm->psTdmaDuAdjType = 71;\r
2431                                 }\r
2432                                 else if(pCoexDm->curPsTdma == 6)\r
2433                                 {\r
2434                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
2435                                         pCoexDm->psTdmaDuAdjType = 2;\r
2436                                 }\r
2437                                 else if(pCoexDm->curPsTdma == 7)\r
2438                                 {\r
2439                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2440                                         pCoexDm->psTdmaDuAdjType = 3;\r
2441                                 }\r
2442                                 else if(pCoexDm->curPsTdma == 8)\r
2443                                 {\r
2444                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 4);\r
2445                                         pCoexDm->psTdmaDuAdjType = 4;\r
2446                                 }\r
2447                                 if(pCoexDm->curPsTdma == 13)\r
2448                                 {\r
2449                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);\r
2450                                         pCoexDm->psTdmaDuAdjType = 9;\r
2451                                 }\r
2452                                 else if(pCoexDm->curPsTdma == 14)\r
2453                                 {\r
2454                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);\r
2455                                         pCoexDm->psTdmaDuAdjType = 10;\r
2456                                 }\r
2457                                 else if(pCoexDm->curPsTdma == 15)\r
2458                                 {\r
2459                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2460                                         pCoexDm->psTdmaDuAdjType = 11;\r
2461                                 }\r
2462                                 else if(pCoexDm->curPsTdma == 16)\r
2463                                 {\r
2464                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 12);\r
2465                                         pCoexDm->psTdmaDuAdjType = 12;\r
2466                                 }\r
2467                                 \r
2468                                 if(result == -1)\r
2469                                 {\r
2470                                         if(pCoexDm->curPsTdma == 71)\r
2471                                         {\r
2472                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);\r
2473                                                 pCoexDm->psTdmaDuAdjType = 1;\r
2474                                         }\r
2475                                         else if(pCoexDm->curPsTdma == 1)\r
2476                                         {\r
2477                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
2478                                                 pCoexDm->psTdmaDuAdjType = 2;\r
2479                                         }\r
2480                                         else if(pCoexDm->curPsTdma == 2)\r
2481                                         {\r
2482                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2483                                                 pCoexDm->psTdmaDuAdjType = 3;\r
2484                                         }\r
2485                                         else if(pCoexDm->curPsTdma == 3)\r
2486                                         {\r
2487                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 4);\r
2488                                                 pCoexDm->psTdmaDuAdjType = 4;\r
2489                                         }\r
2490                                         else if(pCoexDm->curPsTdma == 9)\r
2491                                         {\r
2492                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);\r
2493                                                 pCoexDm->psTdmaDuAdjType = 10;\r
2494                                         }\r
2495                                         else if(pCoexDm->curPsTdma == 10)\r
2496                                         {\r
2497                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2498                                                 pCoexDm->psTdmaDuAdjType = 11;\r
2499                                         }\r
2500                                         else if(pCoexDm->curPsTdma == 11)\r
2501                                         {\r
2502                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 12);\r
2503                                                 pCoexDm->psTdmaDuAdjType = 12;\r
2504                                         }\r
2505                                 } \r
2506                                 else if (result == 1)\r
2507                                 {\r
2508                                         if(pCoexDm->curPsTdma == 4)\r
2509                                         {\r
2510                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2511                                                 pCoexDm->psTdmaDuAdjType = 3;\r
2512                                         }\r
2513                                         else if(pCoexDm->curPsTdma == 3)\r
2514                                         {\r
2515                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
2516                                                 pCoexDm->psTdmaDuAdjType = 2;\r
2517                                         }\r
2518                                         else if(pCoexDm->curPsTdma == 2)\r
2519                                         {\r
2520                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);\r
2521                                                 pCoexDm->psTdmaDuAdjType = 1;\r
2522                                         }\r
2523                                         else if(pCoexDm->curPsTdma == 1)\r
2524                                         {\r
2525                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 71);\r
2526                                                 pCoexDm->psTdmaDuAdjType = 71;\r
2527                                         }\r
2528                                         else if(pCoexDm->curPsTdma == 12)\r
2529                                         {\r
2530                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2531                                                 pCoexDm->psTdmaDuAdjType = 11;\r
2532                                         }\r
2533                                         else if(pCoexDm->curPsTdma == 11)\r
2534                                         {\r
2535                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);\r
2536                                                 pCoexDm->psTdmaDuAdjType = 10;\r
2537                                         }\r
2538                                         else if(pCoexDm->curPsTdma == 10)\r
2539                                         {\r
2540                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);\r
2541                                                 pCoexDm->psTdmaDuAdjType = 9;\r
2542                                         }\r
2543                                 }\r
2544                         }\r
2545                 }\r
2546                 else if(maxInterval == 2)\r
2547                 {\r
2548                         if(bTxPause)\r
2549                         {\r
2550                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 1\n"));\r
2551                                 if(pCoexDm->curPsTdma == 1)\r
2552                                 {\r
2553                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
2554                                         pCoexDm->psTdmaDuAdjType = 6;\r
2555                                 }\r
2556                                 else if(pCoexDm->curPsTdma == 2)\r
2557                                 {\r
2558                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
2559                                         pCoexDm->psTdmaDuAdjType = 6;\r
2560                                 }\r
2561                                 else if(pCoexDm->curPsTdma == 3)\r
2562                                 {\r
2563                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2564                                         pCoexDm->psTdmaDuAdjType = 7;\r
2565                                 }\r
2566                                 else if(pCoexDm->curPsTdma == 4)\r
2567                                 {\r
2568                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 8);\r
2569                                         pCoexDm->psTdmaDuAdjType = 8;\r
2570                                 }\r
2571                                 if(pCoexDm->curPsTdma == 9)\r
2572                                 {\r
2573                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);\r
2574                                         pCoexDm->psTdmaDuAdjType = 14;\r
2575                                 }\r
2576                                 else if(pCoexDm->curPsTdma == 10)\r
2577                                 {\r
2578                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);\r
2579                                         pCoexDm->psTdmaDuAdjType = 14;\r
2580                                 }\r
2581                                 else if(pCoexDm->curPsTdma == 11)\r
2582                                 {\r
2583                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2584                                         pCoexDm->psTdmaDuAdjType = 15;\r
2585                                 }\r
2586                                 else if(pCoexDm->curPsTdma == 12)\r
2587                                 {\r
2588                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 16);\r
2589                                         pCoexDm->psTdmaDuAdjType = 16;\r
2590                                 }\r
2591                                 if(result == -1)\r
2592                                 {\r
2593                                         if(pCoexDm->curPsTdma == 5) \r
2594                                         {\r
2595                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
2596                                                 pCoexDm->psTdmaDuAdjType = 6;\r
2597                                         }\r
2598                                         else if(pCoexDm->curPsTdma == 6)\r
2599                                         {\r
2600                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2601                                                 pCoexDm->psTdmaDuAdjType = 7;\r
2602                                         }\r
2603                                         else if(pCoexDm->curPsTdma == 7)\r
2604                                         {\r
2605                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 8);\r
2606                                                 pCoexDm->psTdmaDuAdjType = 8;\r
2607                                         }\r
2608                                         else if(pCoexDm->curPsTdma == 13)\r
2609                                         {\r
2610                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);\r
2611                                                 pCoexDm->psTdmaDuAdjType = 14;\r
2612                                         }\r
2613                                         else if(pCoexDm->curPsTdma == 14)\r
2614                                         {\r
2615                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2616                                                 pCoexDm->psTdmaDuAdjType = 15;\r
2617                                         }\r
2618                                         else if(pCoexDm->curPsTdma == 15)\r
2619                                         {\r
2620                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 16);\r
2621                                                 pCoexDm->psTdmaDuAdjType = 16;\r
2622                                         }\r
2623                                 } \r
2624                                 else if (result == 1)\r
2625                                 {\r
2626                                         if(pCoexDm->curPsTdma == 8)\r
2627                                         {\r
2628                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2629                                                 pCoexDm->psTdmaDuAdjType = 7;\r
2630                                         }\r
2631                                         else if(pCoexDm->curPsTdma == 7)\r
2632                                         {\r
2633                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
2634                                                 pCoexDm->psTdmaDuAdjType = 6;\r
2635                                         }\r
2636                                         else if(pCoexDm->curPsTdma == 6)\r
2637                                         {\r
2638                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 6);\r
2639                                                 pCoexDm->psTdmaDuAdjType = 6;\r
2640                                         }                                       \r
2641                                         else if(pCoexDm->curPsTdma == 16)\r
2642                                         {\r
2643                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2644                                                 pCoexDm->psTdmaDuAdjType = 15;\r
2645                                         }\r
2646                                         else if(pCoexDm->curPsTdma == 15)\r
2647                                         {\r
2648                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);\r
2649                                                 pCoexDm->psTdmaDuAdjType = 14;\r
2650                                         }\r
2651                                         else if(pCoexDm->curPsTdma == 14)\r
2652                                         {\r
2653                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 14);\r
2654                                                 pCoexDm->psTdmaDuAdjType = 14;\r
2655                                         }\r
2656                                 }\r
2657                         }\r
2658                         else\r
2659                         {\r
2660                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 0\n"));\r
2661                                 if(pCoexDm->curPsTdma == 5)\r
2662                                 {\r
2663                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
2664                                         pCoexDm->psTdmaDuAdjType = 2;\r
2665                                 }\r
2666                                 else if(pCoexDm->curPsTdma == 6)\r
2667                                 {\r
2668                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
2669                                         pCoexDm->psTdmaDuAdjType = 2;\r
2670                                 }\r
2671                                 else if(pCoexDm->curPsTdma == 7)\r
2672                                 {\r
2673                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2674                                         pCoexDm->psTdmaDuAdjType = 3;\r
2675                                 }\r
2676                                 else if(pCoexDm->curPsTdma == 8)\r
2677                                 {\r
2678                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 4);\r
2679                                         pCoexDm->psTdmaDuAdjType = 4;\r
2680                                 }\r
2681                                 if(pCoexDm->curPsTdma == 13)\r
2682                                 {\r
2683                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);\r
2684                                         pCoexDm->psTdmaDuAdjType = 10;\r
2685                                 }\r
2686                                 else if(pCoexDm->curPsTdma == 14)\r
2687                                 {\r
2688                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);\r
2689                                         pCoexDm->psTdmaDuAdjType = 10;\r
2690                                 }\r
2691                                 else if(pCoexDm->curPsTdma == 15)\r
2692                                 {\r
2693                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2694                                         pCoexDm->psTdmaDuAdjType = 11;\r
2695                                 }\r
2696                                 else if(pCoexDm->curPsTdma == 16)\r
2697                                 {\r
2698                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 12);\r
2699                                         pCoexDm->psTdmaDuAdjType = 12;\r
2700                                 }\r
2701                                 if(result == -1)\r
2702                                 {\r
2703                                         if(pCoexDm->curPsTdma == 1)\r
2704                                         {\r
2705                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
2706                                                 pCoexDm->psTdmaDuAdjType = 2;\r
2707                                         }\r
2708                                         else if(pCoexDm->curPsTdma == 2)\r
2709                                         {\r
2710                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2711                                                 pCoexDm->psTdmaDuAdjType = 3;\r
2712                                         }\r
2713                                         else if(pCoexDm->curPsTdma == 3)\r
2714                                         {\r
2715                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 4);\r
2716                                                 pCoexDm->psTdmaDuAdjType = 4;\r
2717                                         }\r
2718                                         else if(pCoexDm->curPsTdma == 9)\r
2719                                         {\r
2720                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);\r
2721                                                 pCoexDm->psTdmaDuAdjType = 10;\r
2722                                         }\r
2723                                         else if(pCoexDm->curPsTdma == 10)\r
2724                                         {\r
2725                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2726                                                 pCoexDm->psTdmaDuAdjType = 11;\r
2727                                         }\r
2728                                         else if(pCoexDm->curPsTdma == 11)\r
2729                                         {\r
2730                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 12);\r
2731                                                 pCoexDm->psTdmaDuAdjType = 12;\r
2732                                         }\r
2733                                 } \r
2734                                 else if (result == 1)\r
2735                                 {\r
2736                                         if(pCoexDm->curPsTdma == 4)\r
2737                                         {\r
2738                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2739                                                 pCoexDm->psTdmaDuAdjType = 3;\r
2740                                         }\r
2741                                         else if(pCoexDm->curPsTdma == 3)\r
2742                                         {\r
2743                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
2744                                                 pCoexDm->psTdmaDuAdjType = 2;\r
2745                                         }\r
2746                                         else if(pCoexDm->curPsTdma == 2)\r
2747                                         {\r
2748                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 2);\r
2749                                                 pCoexDm->psTdmaDuAdjType = 2;\r
2750                                         }\r
2751                                         else if(pCoexDm->curPsTdma == 12)\r
2752                                         {\r
2753                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2754                                                 pCoexDm->psTdmaDuAdjType = 11;\r
2755                                         }\r
2756                                         else if(pCoexDm->curPsTdma == 11)\r
2757                                         {\r
2758                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);\r
2759                                                 pCoexDm->psTdmaDuAdjType = 10;\r
2760                                         }\r
2761                                         else if(pCoexDm->curPsTdma == 10)\r
2762                                         {\r
2763                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 10);\r
2764                                                 pCoexDm->psTdmaDuAdjType = 10;\r
2765                                         }\r
2766                                 }\r
2767                         }\r
2768                 }\r
2769                 else if(maxInterval == 3)\r
2770                 {\r
2771                         if(bTxPause)\r
2772                         {\r
2773                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 1\n"));\r
2774                                 if(pCoexDm->curPsTdma == 1)\r
2775                                 {\r
2776                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2777                                         pCoexDm->psTdmaDuAdjType = 7;\r
2778                                 }\r
2779                                 else if(pCoexDm->curPsTdma == 2)\r
2780                                 {\r
2781                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2782                                         pCoexDm->psTdmaDuAdjType = 7;\r
2783                                 }\r
2784                                 else if(pCoexDm->curPsTdma == 3)\r
2785                                 {\r
2786                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2787                                         pCoexDm->psTdmaDuAdjType = 7;\r
2788                                 }\r
2789                                 else if(pCoexDm->curPsTdma == 4)\r
2790                                 {\r
2791                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 8);\r
2792                                         pCoexDm->psTdmaDuAdjType = 8;\r
2793                                 }\r
2794                                 if(pCoexDm->curPsTdma == 9)\r
2795                                 {\r
2796                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2797                                         pCoexDm->psTdmaDuAdjType = 15;\r
2798                                 }\r
2799                                 else if(pCoexDm->curPsTdma == 10)\r
2800                                 {\r
2801                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2802                                         pCoexDm->psTdmaDuAdjType = 15;\r
2803                                 }\r
2804                                 else if(pCoexDm->curPsTdma == 11)\r
2805                                 {\r
2806                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2807                                         pCoexDm->psTdmaDuAdjType = 15;\r
2808                                 }\r
2809                                 else if(pCoexDm->curPsTdma == 12)\r
2810                                 {\r
2811                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 16);\r
2812                                         pCoexDm->psTdmaDuAdjType = 16;\r
2813                                 }\r
2814                                 if(result == -1)\r
2815                                 {\r
2816                                         if(pCoexDm->curPsTdma == 5) \r
2817                                         {\r
2818                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2819                                                 pCoexDm->psTdmaDuAdjType = 7;\r
2820                                         }\r
2821                                         else if(pCoexDm->curPsTdma == 6)\r
2822                                         {\r
2823                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2824                                                 pCoexDm->psTdmaDuAdjType = 7;\r
2825                                         }\r
2826                                         else if(pCoexDm->curPsTdma == 7)\r
2827                                         {\r
2828                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 8);\r
2829                                                 pCoexDm->psTdmaDuAdjType = 8;\r
2830                                         }\r
2831                                         else if(pCoexDm->curPsTdma == 13)\r
2832                                         {\r
2833                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2834                                                 pCoexDm->psTdmaDuAdjType = 15;\r
2835                                         }\r
2836                                         else if(pCoexDm->curPsTdma == 14)\r
2837                                         {\r
2838                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2839                                                 pCoexDm->psTdmaDuAdjType = 15;\r
2840                                         }\r
2841                                         else if(pCoexDm->curPsTdma == 15)\r
2842                                         {\r
2843                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 16);\r
2844                                                 pCoexDm->psTdmaDuAdjType = 16;\r
2845                                         }\r
2846                                 } \r
2847                                 else if (result == 1)\r
2848                                 {\r
2849                                         if(pCoexDm->curPsTdma == 8)\r
2850                                         {\r
2851                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2852                                                 pCoexDm->psTdmaDuAdjType = 7;\r
2853                                         }\r
2854                                         else if(pCoexDm->curPsTdma == 7)\r
2855                                         {\r
2856                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2857                                                 pCoexDm->psTdmaDuAdjType = 7;\r
2858                                         }\r
2859                                         else if(pCoexDm->curPsTdma == 6)\r
2860                                         {\r
2861                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 7);\r
2862                                                 pCoexDm->psTdmaDuAdjType = 7;\r
2863                                         }                                       \r
2864                                         else if(pCoexDm->curPsTdma == 16)\r
2865                                         {\r
2866                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2867                                                 pCoexDm->psTdmaDuAdjType = 15;\r
2868                                         }\r
2869                                         else if(pCoexDm->curPsTdma == 15)\r
2870                                         {\r
2871                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2872                                                 pCoexDm->psTdmaDuAdjType = 15;\r
2873                                         }\r
2874                                         else if(pCoexDm->curPsTdma == 14)\r
2875                                         {\r
2876                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 15);\r
2877                                                 pCoexDm->psTdmaDuAdjType = 15;\r
2878                                         }\r
2879                                 }\r
2880                         }\r
2881                         else\r
2882                         {\r
2883                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], TxPause = 0\n"));\r
2884                                 if(pCoexDm->curPsTdma == 5)\r
2885                                 {\r
2886                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2887                                         pCoexDm->psTdmaDuAdjType = 3;\r
2888                                 }\r
2889                                 else if(pCoexDm->curPsTdma == 6)\r
2890                                 {\r
2891                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2892                                         pCoexDm->psTdmaDuAdjType = 3;\r
2893                                 }\r
2894                                 else if(pCoexDm->curPsTdma == 7)\r
2895                                 {\r
2896                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2897                                         pCoexDm->psTdmaDuAdjType = 3;\r
2898                                 }\r
2899                                 else if(pCoexDm->curPsTdma == 8)\r
2900                                 {\r
2901                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 4);\r
2902                                         pCoexDm->psTdmaDuAdjType = 4;\r
2903                                 }\r
2904                                 if(pCoexDm->curPsTdma == 13)\r
2905                                 {\r
2906                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2907                                         pCoexDm->psTdmaDuAdjType = 11;\r
2908                                 }\r
2909                                 else if(pCoexDm->curPsTdma == 14)\r
2910                                 {\r
2911                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2912                                         pCoexDm->psTdmaDuAdjType = 11;\r
2913                                 }\r
2914                                 else if(pCoexDm->curPsTdma == 15)\r
2915                                 {\r
2916                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2917                                         pCoexDm->psTdmaDuAdjType = 11;\r
2918                                 }\r
2919                                 else if(pCoexDm->curPsTdma == 16)\r
2920                                 {\r
2921                                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 12);\r
2922                                         pCoexDm->psTdmaDuAdjType = 12;\r
2923                                 }\r
2924                                 if(result == -1)\r
2925                                 {\r
2926                                         if(pCoexDm->curPsTdma == 1)\r
2927                                         {\r
2928                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2929                                                 pCoexDm->psTdmaDuAdjType = 3;\r
2930                                         }\r
2931                                         else if(pCoexDm->curPsTdma == 2)\r
2932                                         {\r
2933                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2934                                                 pCoexDm->psTdmaDuAdjType = 3;\r
2935                                         }\r
2936                                         else if(pCoexDm->curPsTdma == 3)\r
2937                                         {\r
2938                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 4);\r
2939                                                 pCoexDm->psTdmaDuAdjType = 4;\r
2940                                         }\r
2941                                         else if(pCoexDm->curPsTdma == 9)\r
2942                                         {\r
2943                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2944                                                 pCoexDm->psTdmaDuAdjType = 11;\r
2945                                         }\r
2946                                         else if(pCoexDm->curPsTdma == 10)\r
2947                                         {\r
2948                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2949                                                 pCoexDm->psTdmaDuAdjType = 11;\r
2950                                         }\r
2951                                         else if(pCoexDm->curPsTdma == 11)\r
2952                                         {\r
2953                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 12);\r
2954                                                 pCoexDm->psTdmaDuAdjType = 12;\r
2955                                         }\r
2956                                 } \r
2957                                 else if (result == 1)\r
2958                                 {\r
2959                                         if(pCoexDm->curPsTdma == 4)\r
2960                                         {\r
2961                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2962                                                 pCoexDm->psTdmaDuAdjType = 3;\r
2963                                         }\r
2964                                         else if(pCoexDm->curPsTdma == 3)\r
2965                                         {\r
2966                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2967                                                 pCoexDm->psTdmaDuAdjType = 3;\r
2968                                         }\r
2969                                         else if(pCoexDm->curPsTdma == 2)\r
2970                                         {\r
2971                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 3);\r
2972                                                 pCoexDm->psTdmaDuAdjType = 3;\r
2973                                         }\r
2974                                         else if(pCoexDm->curPsTdma == 12)\r
2975                                         {\r
2976                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2977                                                 pCoexDm->psTdmaDuAdjType = 11;\r
2978                                         }\r
2979                                         else if(pCoexDm->curPsTdma == 11)\r
2980                                         {\r
2981                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2982                                                 pCoexDm->psTdmaDuAdjType = 11;\r
2983                                         }\r
2984                                         else if(pCoexDm->curPsTdma == 10)\r
2985                                         {\r
2986                                                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 11);\r
2987                                                 pCoexDm->psTdmaDuAdjType = 11;\r
2988                                         }\r
2989                                 }\r
2990                         }\r
2991                 }\r
2992         }\r
2993 \r
2994         // if current PsTdma not match with the recorded one (when scan, dhcp...), \r
2995         // then we have to adjust it back to the previous record one.\r
2996         if(pCoexDm->curPsTdma != pCoexDm->psTdmaDuAdjType)\r
2997         {\r
2998                 BOOLEAN bScan=FALSE, bLink=FALSE, bRoam=FALSE;\r
2999                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], PsTdma type dismatch!!!, curPsTdma=%d, recordPsTdma=%d\n", \r
3000                         pCoexDm->curPsTdma, pCoexDm->psTdmaDuAdjType));\r
3001 \r
3002                 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);\r
3003                 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_LINK, &bLink);\r
3004                 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_ROAM, &bRoam);\r
3005                 \r
3006                 if( !bScan && !bLink && !bRoam)\r
3007                 {\r
3008                         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, pCoexDm->psTdmaDuAdjType);\r
3009                 }\r
3010                 else\r
3011                 {\r
3012                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL, ("[BTCoex], roaming/link/scan is under progress, will adjust next time!!!\n"));\r
3013                 }\r
3014         }\r
3015 }\r
3016 \r
3017 // SCO only or SCO+PAN(HS)\r
3018 VOID\r
3019 halbtc8723b2ant_ActionSco(\r
3020         IN      PBTC_COEXIST            pBtCoexist\r
3021         )\r
3022 {\r
3023         u1Byte  wifiRssiState, btRssiState;\r
3024         u4Byte  wifiBw;\r
3025 \r
3026         wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
3027         btRssiState = halbtc8723b2ant_BtRssiState(2, BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES, 0);\r
3028 \r
3029         pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
3030 \r
3031         halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
3032         \r
3033         halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 4);\r
3034 \r
3035         if(BTC_RSSI_HIGH(btRssiState))\r
3036                 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
3037         else    \r
3038                 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
3039         \r
3040         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
3041 \r
3042         if (BTC_WIFI_BW_LEGACY == wifiBw) //for SCO quality at 11b/g mode\r
3043         {\r
3044                 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);\r
3045         }\r
3046         else  //for SCO quality & wifi performance balance at 11n mode\r
3047         {\r
3048                 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 8);\r
3049         }\r
3050 \r
3051         halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);                       \r
3052         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 0); //for voice quality\r
3053 \r
3054         // sw mechanism\r
3055         if(BTC_WIFI_BW_HT40 == wifiBw)\r
3056         {\r
3057                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3058                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3059                 {\r
3060                         halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
3061                         halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,TRUE,0x4);                   \r
3062                 }\r
3063                 else\r
3064                 {\r
3065                         halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
3066                         halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,TRUE,0x4);  \r
3067                 }               \r
3068         }\r
3069         else\r
3070         {\r
3071                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3072                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3073                 {\r
3074                         halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
3075                         halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,TRUE,0x4);\r
3076                 }\r
3077                 else\r
3078                 {\r
3079                         halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
3080                         halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,TRUE,0x4);\r
3081                 }               \r
3082         }\r
3083 }\r
3084 \r
3085 \r
3086 VOID\r
3087 halbtc8723b2ant_ActionHid(\r
3088         IN      PBTC_COEXIST            pBtCoexist\r
3089         )\r
3090 {\r
3091         u1Byte  wifiRssiState, btRssiState;     \r
3092         u4Byte  wifiBw;\r
3093 \r
3094         wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
3095         btRssiState = halbtc8723b2ant_BtRssiState(2, BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES, 0);\r
3096 \r
3097         pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
3098 \r
3099         halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
3100         \r
3101         halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
3102 \r
3103         if(BTC_RSSI_HIGH(btRssiState))\r
3104                 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
3105         else    \r
3106                 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
3107 \r
3108         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
3109 \r
3110         if (BTC_WIFI_BW_LEGACY == wifiBw) //for HID at 11b/g mode\r
3111         {\r
3112                 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);\r
3113         }\r
3114         else  //for HID quality & wifi performance balance at 11n mode\r
3115         {\r
3116                 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 9);\r
3117         }\r
3118 \r
3119         halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);                       \r
3120         \r
3121         if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
3122                 (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3123         {\r
3124                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 9);\r
3125         }\r
3126         else\r
3127         {\r
3128                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 13);\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,TRUE,FALSE,FALSE);\r
3138                         halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3139                 }\r
3140                 else\r
3141                 {\r
3142                         halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,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,TRUE,FALSE,FALSE);\r
3152                         halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3153                 }\r
3154                 else\r
3155                 {\r
3156                         halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
3157                         halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3158                 }               \r
3159         }\r
3160 }\r
3161 \r
3162 //A2DP only / PAN(EDR) only/ A2DP+PAN(HS)\r
3163 VOID\r
3164 halbtc8723b2ant_ActionA2dp(\r
3165         IN      PBTC_COEXIST            pBtCoexist\r
3166         )\r
3167 {\r
3168         u1Byte          wifiRssiState, wifiRssiState1, btRssiState;\r
3169         u4Byte          wifiBw;\r
3170         u1Byte          apNum=0;\r
3171 \r
3172         wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
3173         wifiRssiState1 = halbtc8723b2ant_WifiRssiState(pBtCoexist, 1, 2, BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES, 0);\r
3174         btRssiState = halbtc8723b2ant_BtRssiState(2, BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES, 0);\r
3175 \r
3176         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_AP_NUM, &apNum);\r
3177 \r
3178         // define the office environment\r
3179         if( (apNum >= 10) && BTC_RSSI_HIGH(wifiRssiState1) && BTC_RSSI_HIGH(btRssiState))\r
3180         {\r
3181                 //DbgPrint(" AP#>10(%d)\n", apNum);\r
3182                 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);                       \r
3183                 \r
3184                 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);      \r
3185                 halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
3186                 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);      \r
3187                 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);                   \r
3188                                         \r
3189                 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
3190 \r
3191                 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);               \r
3192                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
3193 \r
3194                 // sw mechanism\r
3195                 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
3196                 if(BTC_WIFI_BW_HT40 == wifiBw)\r
3197                 {\r
3198                         halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
3199                         halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,TRUE,0x18);\r
3200                 }\r
3201                 else\r
3202                 {\r
3203                         halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
3204                         halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,TRUE,0x18);          \r
3205                 }\r
3206                 return;\r
3207                 \r
3208         }\r
3209 \r
3210         pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
3211         halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
3212 \r
3213         halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
3214 \r
3215         if(BTC_RSSI_HIGH(btRssiState))\r
3216                 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
3217         else    \r
3218                 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
3219 \r
3220                 \r
3221         if (BTC_RSSI_HIGH(wifiRssiState1) && BTC_RSSI_HIGH(btRssiState))\r
3222         {\r
3223         halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);\r
3224                 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);               \r
3225         }\r
3226         else\r
3227         {\r
3228                 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 13);\r
3229                 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);           \r
3230         }\r
3231         \r
3232 \r
3233         if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
3234                 (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3235         {\r
3236                 halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 1);\r
3237         }\r
3238         else\r
3239         {\r
3240                 halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 1);\r
3241         }\r
3242 \r
3243         // sw mechanism\r
3244         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
3245         if(BTC_WIFI_BW_HT40 == wifiBw)\r
3246         {\r
3247                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3248                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3249                 {\r
3250                         halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
3251                         halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3252                 }\r
3253                 else\r
3254                 {\r
3255                         halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
3256                         halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3257                 }\r
3258         }\r
3259         else\r
3260         {\r
3261                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3262                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3263                 {\r
3264                         halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
3265                         halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3266                 }\r
3267                 else\r
3268                 {\r
3269                         halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
3270                         halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3271                 }               \r
3272         }\r
3273 }\r
3274 \r
3275 VOID\r
3276 halbtc8723b2ant_ActionA2dpPanHs(\r
3277         IN      PBTC_COEXIST            pBtCoexist\r
3278         )\r
3279 {\r
3280         u1Byte          wifiRssiState, wifiRssiState1, btRssiState;\r
3281         u4Byte          wifiBw;\r
3282 \r
3283         wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
3284         wifiRssiState1 = halbtc8723b2ant_WifiRssiState(pBtCoexist, 1, 2, BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES, 0);  \r
3285         btRssiState = halbtc8723b2ant_BtRssiState(2, BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES, 0);\r
3286 \r
3287         pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
3288 \r
3289         halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
3290         \r
3291         halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
3292 \r
3293         if(BTC_RSSI_HIGH(btRssiState))\r
3294                 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
3295         else    \r
3296                 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
3297 \r
3298         if (BTC_RSSI_HIGH(wifiRssiState1) && BTC_RSSI_HIGH(btRssiState))\r
3299         {\r
3300         halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);\r
3301                 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);               \r
3302         }\r
3303         else\r
3304         {\r
3305                 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 13);\r
3306                 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);           \r
3307         }\r
3308 \r
3309         halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 2);\r
3310 \r
3311         // sw mechanism\r
3312         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
3313         if(BTC_WIFI_BW_HT40 == wifiBw)\r
3314         {\r
3315                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3316                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3317                 {\r
3318                         halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
3319                         halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3320                 }\r
3321                 else\r
3322                 {\r
3323                         halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
3324                         halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3325                 }\r
3326         }\r
3327         else\r
3328         {\r
3329                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3330                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3331                 {\r
3332                         halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
3333                         halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3334                 }\r
3335                 else\r
3336                 {\r
3337                         halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
3338                         halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3339                 }               \r
3340         }\r
3341 }\r
3342 \r
3343 VOID\r
3344 halbtc8723b2ant_ActionPanEdr(\r
3345         IN      PBTC_COEXIST            pBtCoexist\r
3346         )\r
3347 {\r
3348         u1Byte          wifiRssiState,wifiRssiState1, btRssiState;\r
3349         u4Byte          wifiBw;\r
3350 \r
3351         wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
3352         wifiRssiState1 = halbtc8723b2ant_WifiRssiState(pBtCoexist, 1, 2, BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES, 0);  \r
3353         btRssiState = halbtc8723b2ant_BtRssiState(2, BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES, 0);\r
3354 \r
3355         pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
3356 \r
3357         halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
3358 \r
3359         halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
3360 \r
3361         if(BTC_RSSI_HIGH(btRssiState))\r
3362                 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
3363         else    \r
3364                 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
3365 \r
3366         if (BTC_RSSI_HIGH(wifiRssiState1) && BTC_RSSI_HIGH(btRssiState))\r
3367         {\r
3368         halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 10);\r
3369                 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);               \r
3370         }\r
3371         else\r
3372         {\r
3373                 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 13);\r
3374                 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);           \r
3375         }\r
3376 \r
3377         if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
3378                 (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3379         {\r
3380                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 1);\r
3381         }\r
3382         else\r
3383         {\r
3384                 halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, TRUE, 5);\r
3385         }\r
3386         \r
3387         // sw mechanism\r
3388         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
3389         if(BTC_WIFI_BW_HT40 == wifiBw)\r
3390         {\r
3391                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3392                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3393                 {\r
3394                         halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
3395                         halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3396                 }\r
3397                 else\r
3398                 {\r
3399                         halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
3400                         halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3401                 }\r
3402         }\r
3403         else\r
3404         {\r
3405                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3406                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3407                 {\r
3408                         halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
3409                         halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3410                 }\r
3411                 else\r
3412                 {\r
3413                         halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
3414                         halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3415                 }\r
3416         }\r
3417 }\r
3418 \r
3419 \r
3420 //PAN(HS) only\r
3421 VOID\r
3422 halbtc8723b2ant_ActionPanHs(\r
3423         IN      PBTC_COEXIST            pBtCoexist\r
3424         )\r
3425 {\r
3426         u1Byte          wifiRssiState, wifiRssiState1, btRssiState;\r
3427         u4Byte          wifiBw;\r
3428 \r
3429         wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
3430         wifiRssiState1 = halbtc8723b2ant_WifiRssiState(pBtCoexist, 1, 2, BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES, 0);  \r
3431         btRssiState = halbtc8723b2ant_BtRssiState(2, BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES, 0);\r
3432 \r
3433         pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
3434 \r
3435         halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
3436 \r
3437         halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
3438 \r
3439         if(BTC_RSSI_HIGH(btRssiState))\r
3440                 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
3441         else\r
3442                 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
3443         \r
3444         halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);\r
3445         \r
3446         halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);               \r
3447         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
3448 \r
3449         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
3450         if(BTC_WIFI_BW_HT40 == wifiBw)\r
3451         {\r
3452                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3453                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3454                 {\r
3455                         halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
3456                         halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3457                 }\r
3458                 else\r
3459                 {\r
3460                         halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
3461                         halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3462                 }\r
3463         }\r
3464         else\r
3465         {\r
3466                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3467                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3468                 {\r
3469                         halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
3470                         halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3471                 }\r
3472                 else\r
3473                 {\r
3474                         halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
3475                         halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3476                 }\r
3477         }\r
3478 }\r
3479 \r
3480 //PAN(EDR)+A2DP\r
3481 VOID\r
3482 halbtc8723b2ant_ActionPanEdrA2dp(\r
3483         IN      PBTC_COEXIST            pBtCoexist\r
3484         )\r
3485 {\r
3486         u1Byte          wifiRssiState, wifiRssiState1, btRssiState;\r
3487         u4Byte          wifiBw;\r
3488 \r
3489         wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
3490         wifiRssiState1 = halbtc8723b2ant_WifiRssiState(pBtCoexist, 1, 2, BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES, 0);  \r
3491         btRssiState = halbtc8723b2ant_BtRssiState(2, BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES, 0);\r
3492 \r
3493         pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
3494 \r
3495         halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
3496 \r
3497         halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
3498 \r
3499         if(BTC_RSSI_HIGH(btRssiState))\r
3500                 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
3501         else    \r
3502                 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
3503 \r
3504         if (BTC_RSSI_HIGH(wifiRssiState1) && BTC_RSSI_HIGH(btRssiState))                \r
3505                 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);               \r
3506         else\r
3507                 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);\r
3508 \r
3509         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
3510 \r
3511         if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
3512                 (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3513         {\r
3514                 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 12);\r
3515                 \r
3516                 if(BTC_WIFI_BW_HT40 == wifiBw)\r
3517                         halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 3);\r
3518                 else\r
3519                         halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, FALSE, FALSE, 3);\r
3520         }\r
3521         else\r
3522         {\r
3523                 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 13);\r
3524                 halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, FALSE, TRUE, 3);\r
3525         }\r
3526         \r
3527         // sw mechanism \r
3528         if(BTC_WIFI_BW_HT40 == wifiBw)\r
3529         {\r
3530                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3531                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3532                 {\r
3533                         halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
3534                         halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3535                 }\r
3536                 else\r
3537                 {\r
3538                         halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,FALSE,FALSE,FALSE);\r
3539                         halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3540                 }\r
3541         }\r
3542         else\r
3543         {\r
3544                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3545                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3546                 {\r
3547                         halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
3548                         halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3549                 }\r
3550                 else\r
3551                 {\r
3552                         halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
3553                         halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3554                 }\r
3555         }\r
3556 }\r
3557 \r
3558 VOID\r
3559 halbtc8723b2ant_ActionPanEdrHid(\r
3560         IN      PBTC_COEXIST            pBtCoexist\r
3561         )\r
3562 {\r
3563         u1Byte          wifiRssiState, wifiRssiState1, btRssiState;\r
3564         u4Byte          wifiBw;\r
3565 \r
3566         wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
3567         wifiRssiState1 = halbtc8723b2ant_WifiRssiState(pBtCoexist, 1, 2, BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES, 0);  \r
3568         btRssiState = halbtc8723b2ant_BtRssiState(2, BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES, 0);\r
3569         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
3570 \r
3571         halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
3572 \r
3573         if(BTC_RSSI_HIGH(btRssiState))\r
3574                 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
3575         else    \r
3576                 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
3577 \r
3578         if (BTC_RSSI_HIGH(wifiRssiState1) && BTC_RSSI_HIGH(btRssiState))        \r
3579         {\r
3580                 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);\r
3581                 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);               \r
3582         }\r
3583         else\r
3584         {\r
3585                 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 14);\r
3586                 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);\r
3587         }\r
3588 \r
3589         if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
3590                 (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3591         {\r
3592                 if(BTC_WIFI_BW_HT40 == wifiBw)\r
3593                 {\r
3594                         halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 3);\r
3595                         //halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 11);\r
3596                         pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x780);\r
3597                 }\r
3598                 else\r
3599                 {\r
3600                         halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
3601                         //halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);\r
3602                         pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
3603                 }\r
3604                 halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, TRUE, FALSE, 2);\r
3605         }\r
3606         else\r
3607         {\r
3608                 halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
3609                 //halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 14);\r
3610                 pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
3611                 halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);\r
3612         }\r
3613         \r
3614         // sw mechanism\r
3615         if(BTC_WIFI_BW_HT40 == wifiBw)\r
3616         {\r
3617                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3618                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3619                 {\r
3620                         halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
3621                         halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3622                 }\r
3623                 else\r
3624                 {\r
3625                         halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
3626                         halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3627                 }\r
3628         }\r
3629         else\r
3630         {\r
3631                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3632                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3633                 {\r
3634                         halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
3635                         halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3636                 }\r
3637                 else\r
3638                 {\r
3639                         halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
3640                         halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3641                 }\r
3642         }\r
3643 }\r
3644 \r
3645 // HID+A2DP+PAN(EDR)\r
3646 VOID\r
3647 halbtc8723b2ant_ActionHidA2dpPanEdr(\r
3648         IN      PBTC_COEXIST            pBtCoexist\r
3649         )\r
3650 {\r
3651         u1Byte          wifiRssiState,wifiRssiState1,  btRssiState;\r
3652         u4Byte          wifiBw;\r
3653 \r
3654         wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
3655         wifiRssiState1 = halbtc8723b2ant_WifiRssiState(pBtCoexist, 1, 2, BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES, 0);  \r
3656         btRssiState = halbtc8723b2ant_BtRssiState(2, BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES, 0);\r
3657 \r
3658         pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
3659 \r
3660         halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, FALSE, 0x8);\r
3661 \r
3662         halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
3663 \r
3664         if(BTC_RSSI_HIGH(btRssiState))\r
3665                 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
3666         else    \r
3667                 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
3668 \r
3669         if (BTC_RSSI_HIGH(wifiRssiState1) && BTC_RSSI_HIGH(btRssiState))\r
3670         {\r
3671                 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);\r
3672                 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);               \r
3673         }\r
3674         else\r
3675         {\r
3676                 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 14);\r
3677                 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);           \r
3678         }\r
3679 \r
3680         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
3681 \r
3682         if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
3683                 (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3684         {\r
3685                 if(BTC_WIFI_BW_HT40 == wifiBw)\r
3686                         halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 2);\r
3687                 else\r
3688                         halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, TRUE, FALSE, 3);\r
3689         }\r
3690         else\r
3691         {\r
3692                 halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 3);\r
3693         }\r
3694 \r
3695         // sw mechanism\r
3696         if(BTC_WIFI_BW_HT40 == wifiBw)\r
3697         {\r
3698                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3699                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3700                 {\r
3701                         halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
3702                         halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3703                 }\r
3704                 else\r
3705                 {\r
3706                         halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
3707                         halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3708                 }\r
3709         }\r
3710         else\r
3711         {\r
3712                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3713                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3714                 {\r
3715                         halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
3716                         halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3717                 }\r
3718                 else\r
3719                 {\r
3720                         halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
3721                         halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3722                 }\r
3723         }\r
3724 }\r
3725 \r
3726 VOID\r
3727 halbtc8723b2ant_ActionHidA2dp(\r
3728         IN      PBTC_COEXIST            pBtCoexist\r
3729         )\r
3730 {\r
3731         u1Byte          wifiRssiState, wifiRssiState1, btRssiState;\r
3732         u4Byte          wifiBw;\r
3733         u1Byte          apNum=0;\r
3734 \r
3735         wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);\r
3736         //btRssiState = halbtc8723b2ant_BtRssiState(2, 29, 0);\r
3737         wifiRssiState1 = halbtc8723b2ant_WifiRssiState(pBtCoexist, 1, 2, BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES, 0);  \r
3738         btRssiState = halbtc8723b2ant_BtRssiState(3, BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES, 37);\r
3739 \r
3740         pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
3741 \r
3742         halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, FALSE, TRUE, 0x5);\r
3743 \r
3744         halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
3745 \r
3746         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
3747         if(BTC_WIFI_BW_LEGACY == wifiBw)\r
3748         {\r
3749                 if(BTC_RSSI_HIGH(btRssiState))\r
3750                         halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
3751                 else if(BTC_RSSI_MEDIUM(btRssiState))\r
3752                         halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
3753         else    \r
3754                         halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
3755         }\r
3756         else    \r
3757         {       // only 802.11N mode we have to dec bt power to 4 degree\r
3758                 if(BTC_RSSI_HIGH(btRssiState))\r
3759                 {\r
3760                         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_AP_NUM, &apNum);\r
3761                         // need to check ap Number of Not\r
3762                         if(apNum < 10)\r
3763                                 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 4);\r
3764                         else\r
3765                                 halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
3766                 }\r
3767                 else if(BTC_RSSI_MEDIUM(btRssiState))\r
3768                         halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);\r
3769                 else    \r
3770                         halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
3771         }\r
3772 \r
3773         if (BTC_RSSI_HIGH(wifiRssiState1) && BTC_RSSI_HIGH(btRssiState))\r
3774         {\r
3775         halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);\r
3776                 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);               \r
3777         }\r
3778         else\r
3779         {\r
3780                 halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 14);\r
3781                 halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);           \r
3782         }\r
3783 \r
3784         if( (btRssiState == BTC_RSSI_STATE_HIGH) ||\r
3785                 (btRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3786         {\r
3787                 halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, TRUE, FALSE, 3);\r
3788         }\r
3789         else\r
3790         {\r
3791                 halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, TRUE, TRUE, 3);\r
3792         }\r
3793         \r
3794         // sw mechanism\r
3795         if(BTC_WIFI_BW_HT40 == wifiBw)\r
3796         {\r
3797                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3798                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3799                 {\r
3800                         halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
3801                         halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3802                 }\r
3803                 else\r
3804                 {\r
3805                         halbtc8723b2ant_SwMechanism1(pBtCoexist,TRUE,TRUE,FALSE,FALSE);\r
3806                         halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3807                 }\r
3808         }\r
3809         else\r
3810         {\r
3811                 if( (wifiRssiState == BTC_RSSI_STATE_HIGH) ||\r
3812                         (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH) )\r
3813                 {\r
3814                         halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
3815                         halbtc8723b2ant_SwMechanism2(pBtCoexist,TRUE,FALSE,FALSE,0x18);\r
3816                 }\r
3817                 else\r
3818                 {\r
3819                         halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,TRUE,FALSE,FALSE);\r
3820                         halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3821                 }\r
3822         }\r
3823 }\r
3824 \r
3825 VOID\r
3826 halbtc8723b2ant_ActionBtWhckTest(\r
3827         IN      PBTC_COEXIST            pBtCoexist\r
3828         )\r
3829 {\r
3830         halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
3831 \r
3832         // sw all off\r
3833         halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
3834         halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3835 \r
3836         halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
3837         \r
3838         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
3839         halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
3840 }\r
3841 \r
3842 VOID\r
3843 halbtc8723b2ant_ActionWifiMultiPort(\r
3844         IN      PBTC_COEXIST            pBtCoexist\r
3845         )\r
3846 {               \r
3847         halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);\r
3848         halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);\r
3849 \r
3850         // sw all off\r
3851         halbtc8723b2ant_SwMechanism1(pBtCoexist,FALSE,FALSE,FALSE,FALSE);\r
3852         halbtc8723b2ant_SwMechanism2(pBtCoexist,FALSE,FALSE,FALSE,0x18);\r
3853 \r
3854         // hw all off\r
3855         //pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
3856         halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);\r
3857 \r
3858         halbtc8723b2ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);               \r
3859         halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, FALSE, 1);\r
3860 }\r
3861 \r
3862 VOID\r
3863 halbtc8723b2ant_RunCoexistMechanism(\r
3864         IN      PBTC_COEXIST            pBtCoexist\r
3865         )\r
3866 {\r
3867         BOOLEAN                         bWifiUnder5G=FALSE, bBtHsOn=FALSE;\r
3868         u1Byte                          btInfoOriginal=0, btRetryCnt=0;\r
3869         u1Byte                          algorithm=0;\r
3870         u4Byte                          numOfWifiLink=0;\r
3871         u4Byte                          wifiLinkStatus=0;\r
3872         PBTC_BT_LINK_INFO pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
3873         BOOLEAN                         bMiracastPlusBt=FALSE;\r
3874         BOOLEAN                         bScan=FALSE, bLink=FALSE, bRoam=FALSE;\r
3875 \r
3876         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], RunCoexistMechanism()===>\n"));\r
3877 \r
3878         if(pBtCoexist->bManualControl)\r
3879         {\r
3880                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], RunCoexistMechanism(), return for Manual CTRL <===\n"));\r
3881                 return;\r
3882         }\r
3883 \r
3884         if(pCoexSta->bUnderIps)\r
3885         {\r
3886                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], wifi is under IPS !!!\n"));\r
3887                 return;\r
3888         }\r
3889 \r
3890         if(pCoexSta->bBtWhckTest)\r
3891         {\r
3892                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT is under WHCK TEST!!!\n"));\r
3893                 halbtc8723b2ant_ActionBtWhckTest(pBtCoexist);\r
3894                 return;\r
3895         }\r
3896 \r
3897         algorithm = halbtc8723b2ant_ActionAlgorithm(pBtCoexist);\r
3898         if(pCoexSta->bC2hBtInquiryPage && (BT_8723B_2ANT_COEX_ALGO_PANHS!=algorithm))\r
3899         {\r
3900                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT is under inquiry/page scan !!\n"));\r
3901                 halbtc8723b2ant_ActionBtInquiry(pBtCoexist);\r
3902                 return;\r
3903         }\r
3904         else\r
3905         {\r
3906                 /*\r
3907                 if(pCoexDm->bNeedRecover0x948)\r
3908                 {\r
3909                         pCoexDm->bNeedRecover0x948 = FALSE;\r
3910                         pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x948, pCoexDm->backup0x948);\r
3911                 }\r
3912                 */\r
3913         }\r
3914 \r
3915         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);\r
3916         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_LINK, &bLink);\r
3917         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_ROAM, &bRoam);\r
3918 \r
3919         if(bScan || bLink || bRoam)\r
3920         {\r
3921                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], WiFi is under Link Process !!\n"));\r
3922                 halbtc8723b2ant_ActionWiFiLinkProcess(pBtCoexist);\r
3923                 return;\r
3924         }\r
3925 \r
3926         //for P2P\r
3927 \r
3928         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_LINK_STATUS, &wifiLinkStatus);\r
3929         numOfWifiLink = wifiLinkStatus>>16;\r
3930         \r
3931         if((numOfWifiLink>=2) || (wifiLinkStatus&WIFI_P2P_GO_CONNECTED))\r
3932         {\r
3933                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("############# [BTCoex],  Multi-Port numOfWifiLink = %d, wifiLinkStatus = 0x%x\n", numOfWifiLink,wifiLinkStatus) );\r
3934 \r
3935                 if(pBtLinkInfo->bBtLinkExist)\r
3936                 {\r
3937                         bMiracastPlusBt = TRUE;\r
3938                 }\r
3939                 else\r
3940                 {\r
3941                         bMiracastPlusBt = FALSE;\r
3942                 }\r
3943                 \r
3944                 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_MIRACAST_PLUS_BT, &bMiracastPlusBt);\r
3945                 halbtc8723b2ant_ActionWifiMultiPort(pBtCoexist);\r
3946                 \r
3947                 return;\r
3948         }\r
3949         else\r
3950         {\r
3951                 bMiracastPlusBt = FALSE;\r
3952                 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_MIRACAST_PLUS_BT, &bMiracastPlusBt);\r
3953         }\r
3954 \r
3955         pCoexDm->curAlgorithm = algorithm;\r
3956         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Algorithm = %d \n", pCoexDm->curAlgorithm));\r
3957 \r
3958         if(halbtc8723b2ant_IsCommonAction(pBtCoexist))\r
3959         {\r
3960                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant common.\n"));\r
3961                 pCoexDm->bAutoTdmaAdjust = FALSE;\r
3962         }\r
3963         else\r
3964         {\r
3965                 if(pCoexDm->curAlgorithm != pCoexDm->preAlgorithm)\r
3966                 {\r
3967                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], preAlgorithm=%d, curAlgorithm=%d\n", \r
3968                                 pCoexDm->preAlgorithm, pCoexDm->curAlgorithm));\r
3969                         pCoexDm->bAutoTdmaAdjust = FALSE;\r
3970                 }\r
3971                 switch(pCoexDm->curAlgorithm)\r
3972                 {\r
3973                         case BT_8723B_2ANT_COEX_ALGO_SCO:\r
3974                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = SCO.\n"));\r
3975                                 halbtc8723b2ant_ActionSco(pBtCoexist);\r
3976                                 break;\r
3977                         case BT_8723B_2ANT_COEX_ALGO_HID:\r
3978                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HID.\n"));\r
3979                                 halbtc8723b2ant_ActionHid(pBtCoexist);\r
3980                                 break;\r
3981                         case BT_8723B_2ANT_COEX_ALGO_A2DP:\r
3982                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = A2DP.\n"));\r
3983                                 halbtc8723b2ant_ActionA2dp(pBtCoexist);\r
3984                                 break;\r
3985                         case BT_8723B_2ANT_COEX_ALGO_A2DP_PANHS:\r
3986                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = A2DP+PAN(HS).\n"));\r
3987                                 halbtc8723b2ant_ActionA2dpPanHs(pBtCoexist);\r
3988                                 break;\r
3989                         case BT_8723B_2ANT_COEX_ALGO_PANEDR:\r
3990                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = PAN(EDR).\n"));\r
3991                                 halbtc8723b2ant_ActionPanEdr(pBtCoexist);\r
3992                                 break;\r
3993                         case BT_8723B_2ANT_COEX_ALGO_PANHS:\r
3994                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HS mode.\n"));\r
3995                                 halbtc8723b2ant_ActionPanHs(pBtCoexist);\r
3996                                 break;\r
3997                         case BT_8723B_2ANT_COEX_ALGO_PANEDR_A2DP:\r
3998                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = PAN+A2DP.\n"));\r
3999                                 halbtc8723b2ant_ActionPanEdrA2dp(pBtCoexist);\r
4000                                 break;\r
4001                         case BT_8723B_2ANT_COEX_ALGO_PANEDR_HID:\r
4002                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = PAN(EDR)+HID.\n"));\r
4003                                 halbtc8723b2ant_ActionPanEdrHid(pBtCoexist);\r
4004                                 break;\r
4005                         case BT_8723B_2ANT_COEX_ALGO_HID_A2DP_PANEDR:\r
4006                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HID+A2DP+PAN.\n"));\r
4007                                 halbtc8723b2ant_ActionHidA2dpPanEdr(pBtCoexist);\r
4008                                 break;\r
4009                         case BT_8723B_2ANT_COEX_ALGO_HID_A2DP:\r
4010                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = HID+A2DP.\n"));\r
4011                                 halbtc8723b2ant_ActionHidA2dp(pBtCoexist);\r
4012                                 break;\r
4013                         default:\r
4014                                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Action 2-Ant, algorithm = coexist All Off!!\n"));\r
4015                                 halbtc8723b2ant_CoexAllOff(pBtCoexist);\r
4016                                 break;\r
4017                 }\r
4018                 pCoexDm->preAlgorithm = pCoexDm->curAlgorithm;\r
4019         }\r
4020 }\r
4021 \r
4022 VOID\r
4023 halbtc8723b2ant_WifiOffHwCfg(\r
4024         IN      PBTC_COEXIST            pBtCoexist\r
4025         )\r
4026 {\r
4027         BOOLEAN bIsInMpMode = FALSE;\r
4028         u1Byte H2C_Parameter[2] ={0};\r
4029         u4Byte fwVer=0;\r
4030 \r
4031         // set wlan_act to low\r
4032         pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x76e, 0x4);\r
4033 \r
4034         pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x780); //WiFi goto standby while GNT_BT 0-->1\r
4035         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);\r
4036         if(fwVer >= 0x180000)\r
4037         {\r
4038         /* Use H2C to set GNT_BT to HIGH */\r
4039         H2C_Parameter[0] = 1;\r
4040         pBtCoexist->fBtcFillH2c(pBtCoexist, 0x6E, 1, H2C_Parameter);\r
4041         }\r
4042         else\r
4043         {\r
4044                 pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x765, 0x18);\r
4045         }\r
4046         \r
4047         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_IS_IN_MP_MODE, &bIsInMpMode);\r
4048         if(!bIsInMpMode)\r
4049                 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x67, 0x20, 0x0); //BT select s0/s1 is controlled by BT\r
4050         else\r
4051                 pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x67, 0x20, 0x1); //BT select s0/s1 is controlled by WiFi\r
4052 }\r
4053 \r
4054 VOID\r
4055 halbtc8723b2ant_InitHwConfig(\r
4056         IN      PBTC_COEXIST            pBtCoexist,\r
4057         IN      BOOLEAN                         bBackUp\r
4058         )\r
4059 {\r
4060         PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
4061         u4Byte  u4Tmp=0, fwVer;\r
4062         u2Byte                          u2Tmp=0;\r
4063         u1Byte  u1Tmp=0;\r
4064         u1Byte                          H2C_Parameter[2] ={0};\r
4065                 \r
4066 \r
4067         BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], 2Ant Init HW Config!!\n"));\r
4068 \r
4069         // backup rf 0x1e value\r
4070         pCoexDm->btRf0x1eBackup = \r
4071                 pBtCoexist->fBtcGetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff);  \r
4072 \r
4073         // 0x790[5:0]=0x5\r
4074         u1Tmp = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x790);\r
4075         u1Tmp &= 0xc0;\r
4076         u1Tmp |= 0x5;\r
4077         pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x790, u1Tmp);\r
4078 \r
4079         //Antenna config        \r
4080         halbtc8723b2ant_SetAntPath(pBtCoexist, BTC_ANT_WIFI_AT_MAIN, TRUE, FALSE);\r
4081         pCoexSta->disVerInfoCnt = 0;\r
4082 \r
4083         // PTA parameter\r
4084         halbtc8723b2ant_CoexTableWithType(pBtCoexist, FORCE_EXEC, 0);\r
4085         \r
4086         // Enable counter statistics\r
4087         pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x76e, 0x4); //0x76e[3] =1, WLAN_Act control by PTA\r
4088         pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x778, 0x3);\r
4089         pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x40, 0x20, 0x1);\r
4090 }\r
4091 \r
4092 //============================================================\r
4093 // work around function start with wa_halbtc8723b2ant_\r
4094 //============================================================\r
4095 //============================================================\r
4096 // extern function start with EXhalbtc8723b2ant_\r
4097 //============================================================\r
4098 VOID\r
4099 EXhalbtc8723b2ant_PowerOnSetting(\r
4100         IN      PBTC_COEXIST            pBtCoexist\r
4101         )\r
4102 {\r
4103         PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
4104         u2Byte u2Tmp=0x0;\r
4105 \r
4106         pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x67, 0x20);\r
4107 \r
4108         // enable BB, REG_SYS_FUNC_EN such that we can write 0x948 correctly.\r
4109         u2Tmp = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0x2);\r
4110         pBtCoexist->fBtcWrite2Byte(pBtCoexist, 0x2, u2Tmp|BIT0|BIT1);\r
4111 \r
4112         pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x948, 0x0);\r
4113 \r
4114         if(pBtCoexist->chipInterface == BTC_INTF_USB)\r
4115         {\r
4116                 // fixed at S0 for USB interface\r
4117                 pBoardInfo->btdmAntPos = BTC_ANTENNA_AT_AUX_PORT;\r
4118         }\r
4119         else\r
4120         {\r
4121                 // for PCIE and SDIO interface, we check efuse 0xc3[6]\r
4122                 if(pBoardInfo->singleAntPath == 0)\r
4123                 {\r
4124                         // set to S1\r
4125                         pBoardInfo->btdmAntPos = BTC_ANTENNA_AT_MAIN_PORT;\r
4126                 }\r
4127                 else if(pBoardInfo->singleAntPath == 1)\r
4128                 {\r
4129                         // set to S0\r
4130                         pBoardInfo->btdmAntPos = BTC_ANTENNA_AT_AUX_PORT;\r
4131                 }\r
4132         }\r
4133 }\r
4134 \r
4135 VOID\r
4136 EXhalbtc8723b2ant_PreLoadFirmware(\r
4137         IN      PBTC_COEXIST            pBtCoexist\r
4138         )\r
4139 {\r
4140         PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
4141         u1Byte u1Tmp=0x4; /* Set BIT2 by default since it's 2ant case */\r
4142 \r
4143         // \r
4144         // S0 or S1 setting and Local register setting(By the setting fw can get ant number, S0/S1, ... info)\r
4145         // Local setting bit define\r
4146         //      BIT0: "0" for no antenna inverse; "1" for antenna inverse \r
4147         //      BIT1: "0" for internal switch; "1" for external switch\r
4148         //      BIT2: "0" for one antenna; "1" for two antenna\r
4149         // NOTE: here default all internal switch and 1-antenna ==> BIT1=0 and BIT2=0\r
4150         if(pBtCoexist->chipInterface == BTC_INTF_USB)\r
4151         {\r
4152                 // fixed at S0 for USB interface\r
4153                 u1Tmp |= 0x1;   // antenna inverse\r
4154                 pBtCoexist->fBtcWriteLocalReg1Byte(pBtCoexist, 0xfe08, u1Tmp);\r
4155         }\r
4156         else\r
4157         {\r
4158                 // for PCIE and SDIO interface, we check efuse 0xc3[6]\r
4159                 if(pBoardInfo->singleAntPath == 0)\r
4160                 {\r
4161                 }\r
4162                 else if(pBoardInfo->singleAntPath == 1)\r
4163                 {\r
4164                         // set to S0\r
4165                         u1Tmp |= 0x1;   // antenna inverse\r
4166                 }\r
4167 \r
4168                 if(pBtCoexist->chipInterface == BTC_INTF_PCI)\r
4169                 {       \r
4170                         pBtCoexist->fBtcWriteLocalReg1Byte(pBtCoexist, 0x384, u1Tmp);\r
4171                 }\r
4172                 else if(pBtCoexist->chipInterface == BTC_INTF_SDIO)\r
4173                 {\r
4174                         pBtCoexist->fBtcWriteLocalReg1Byte(pBtCoexist, 0x60, u1Tmp);\r
4175                 }                       \r
4176         }\r
4177 }\r
4178 \r
4179 VOID\r
4180 EXhalbtc8723b2ant_InitHwConfig(\r
4181         IN      PBTC_COEXIST            pBtCoexist,\r
4182         IN      BOOLEAN                         bWifiOnly\r
4183         )\r
4184 {\r
4185         halbtc8723b2ant_InitHwConfig(pBtCoexist, TRUE);\r
4186 }\r
4187 \r
4188 VOID\r
4189 EXhalbtc8723b2ant_InitCoexDm(\r
4190         IN      PBTC_COEXIST            pBtCoexist\r
4191         )\r
4192 {\r
4193         BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], Coex Mechanism Init!!\n"));\r
4194         \r
4195         halbtc8723b2ant_InitCoexDm(pBtCoexist);\r
4196 }\r
4197 \r
4198 VOID\r
4199 EXhalbtc8723b2ant_DisplayCoexInfo(\r
4200         IN      PBTC_COEXIST            pBtCoexist\r
4201         )\r
4202 {\r
4203         PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
4204         PBTC_STACK_INFO         pStackInfo=&pBtCoexist->stackInfo;\r
4205         PBTC_BT_LINK_INFO       pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
4206         pu1Byte                         cliBuf=pBtCoexist->cliBuf;\r
4207         u1Byte                          u1Tmp[4], i, btInfoExt, psTdmaCase=0;\r
4208         u4Byte                          u4Tmp[4];\r
4209         u4Byte                          faOfdm, faCck;\r
4210         u4Byte                          fwVer=0, btPatchVer=0;\r
4211 \r
4212         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n ============[BT Coexist info]============");\r
4213         CL_PRINTF(cliBuf);\r
4214 \r
4215         if(pBtCoexist->bManualControl)\r
4216         {\r
4217                 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n ============[Under Manual Control]============");\r
4218                 CL_PRINTF(cliBuf);\r
4219                 CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n ==========================================");\r
4220                 CL_PRINTF(cliBuf);\r
4221         }\r
4222 \r
4223         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d ", "Ant PG number/ Ant mechanism:", \\r
4224                 pBoardInfo->pgAntNum, pBoardInfo->btdmAntNum);\r
4225         CL_PRINTF(cliBuf);\r
4226         \r
4227         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s / %d", "BT stack/ hci ext ver", \\r
4228                 ((pStackInfo->bProfileNotified)? "Yes":"No"), pStackInfo->hciVersion);\r
4229         CL_PRINTF(cliBuf);\r
4230 \r
4231         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_BT_PATCH_VER, &btPatchVer);\r
4232         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);\r
4233         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d_%x/ 0x%x/ 0x%x(%d)", "CoexVer/ FwVer/ PatchVer", \\r
4234                 GLCoexVerDate8723b2Ant, GLCoexVer8723b2Ant, fwVer, btPatchVer, btPatchVer);\r
4235         CL_PRINTF(cliBuf);\r
4236 \r
4237         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %02x %02x %02x ", "Wifi channel informed to BT", \\r
4238                 pCoexDm->wifiChnlInfo[0], pCoexDm->wifiChnlInfo[1],\r
4239                 pCoexDm->wifiChnlInfo[2]);\r
4240         CL_PRINTF(cliBuf);\r
4241 \r
4242         // wifi status\r
4243         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Wifi Status]============");\r
4244         CL_PRINTF(cliBuf);\r
4245         pBtCoexist->fBtcDispDbgMsg(pBtCoexist, BTC_DBG_DISP_WIFI_STATUS);\r
4246 \r
4247         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[BT Status]============");\r
4248         CL_PRINTF(cliBuf);\r
4249 \r
4250         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = [%s/ %ddBm/ %d] ", "BT [status/ rssi/ retryCnt]", \\r
4251                 ((pBtCoexist->btInfo.bBtDisabled)? ("disabled"):        ((pCoexSta->bC2hBtInquiryPage)?("inquiry/page scan"):((BT_8723B_2ANT_BT_STATUS_NON_CONNECTED_IDLE == pCoexDm->btStatus)? "non-connected idle":\r
4252                 (  (BT_8723B_2ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus)? "connected-idle":"busy")))),\r
4253                 pCoexSta->btRssi-100, pCoexSta->btRetryCnt);\r
4254         CL_PRINTF(cliBuf);\r
4255 \r
4256         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d / %d / %d", "SCO/HID/PAN/A2DP", \\r
4257                 pBtLinkInfo->bScoExist, pBtLinkInfo->bHidExist, pBtLinkInfo->bPanExist, pBtLinkInfo->bA2dpExist);\r
4258         CL_PRINTF(cliBuf);\r
4259         pBtCoexist->fBtcDispDbgMsg(pBtCoexist, BTC_DBG_DISP_BT_LINK_INFO);\r
4260 \r
4261         btInfoExt = pCoexSta->btInfoExt;\r
4262         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s", "BT Info A2DP rate", \\r
4263                 (btInfoExt&BIT0)? "Basic rate":"EDR rate");\r
4264         CL_PRINTF(cliBuf);      \r
4265 \r
4266         for(i=0; i<BT_INFO_SRC_8723B_2ANT_MAX; i++)\r
4267         {\r
4268                 if(pCoexSta->btInfoC2hCnt[i])\r
4269                 {                               \r
4270                         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %02x %02x %02x %02x %02x %02x %02x(%d)", GLBtInfoSrc8723b2Ant[i], \\r
4271                                 pCoexSta->btInfoC2h[i][0], pCoexSta->btInfoC2h[i][1],\r
4272                                 pCoexSta->btInfoC2h[i][2], pCoexSta->btInfoC2h[i][3],\r
4273                                 pCoexSta->btInfoC2h[i][4], pCoexSta->btInfoC2h[i][5],\r
4274                                 pCoexSta->btInfoC2h[i][6], pCoexSta->btInfoC2hCnt[i]);\r
4275                         CL_PRINTF(cliBuf);\r
4276                 }\r
4277         }\r
4278 \r
4279         // Sw mechanism \r
4280         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Sw mechanism]============");\r
4281         CL_PRINTF(cliBuf);\r
4282         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d/ %d ", "SM1[ShRf/ LpRA/ LimDig]", \\r
4283                 pCoexDm->bCurRfRxLpfShrink, pCoexDm->bCurLowPenaltyRa, pCoexDm->bLimitedDig);\r
4284         CL_PRINTF(cliBuf);\r
4285         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d/ %d(0x%x) ", "SM2[AgcT/ AdcB/ SwDacSwing(lvl)]", \\r
4286                 pCoexDm->bCurAgcTableEn, pCoexDm->bCurAdcBackOff, pCoexDm->bCurDacSwingOn, pCoexDm->curDacSwingLvl);\r
4287         CL_PRINTF(cliBuf);\r
4288 \r
4289         // Fw mechanism         \r
4290         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Fw mechanism]============");\r
4291         CL_PRINTF(cliBuf);      \r
4292 \r
4293         psTdmaCase = pCoexDm->curPsTdma;\r
4294         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %02x %02x %02x %02x %02x case-%d (auto:%d)", "PS TDMA", \\r
4295                 pCoexDm->psTdmaPara[0], pCoexDm->psTdmaPara[1],\r
4296                 pCoexDm->psTdmaPara[2], pCoexDm->psTdmaPara[3],\r
4297                 pCoexDm->psTdmaPara[4], psTdmaCase, pCoexDm->bAutoTdmaAdjust);\r
4298         CL_PRINTF(cliBuf);\r
4299 \r
4300         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d", "Coex Table Type", \\r
4301                         pCoexSta->nCoexTableType);\r
4302                 CL_PRINTF(cliBuf);\r
4303 \r
4304         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d ", "DecBtPwr/ IgnWlanAct", \\r
4305                 pCoexDm->curBtDecPwrLvl, pCoexDm->bCurIgnoreWlanAct);\r
4306         CL_PRINTF(cliBuf);\r
4307 \r
4308         // Hw setting           \r
4309         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Hw setting]============");\r
4310         CL_PRINTF(cliBuf);      \r
4311 \r
4312         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "RF-A, 0x1e initVal", \\r
4313                 pCoexDm->btRf0x1eBackup);\r
4314         CL_PRINTF(cliBuf);\r
4315 \r
4316         u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x778);\r
4317         u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x880);\r
4318         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x", "0x778/0x880[29:25]", \\r
4319                 u1Tmp[0], (u4Tmp[0]&0x3e000000) >> 25);\r
4320         CL_PRINTF(cliBuf);\r
4321 \r
4322 \r
4323         u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x948);\r
4324         u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x67);\r
4325         u1Tmp[1] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x765);\r
4326         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x/ 0x%x", "0x948/ 0x67[5] / 0x765", \\r
4327                 u4Tmp[0], ((u1Tmp[0]&0x20)>> 5), u1Tmp[1]);\r
4328         CL_PRINTF(cliBuf);\r
4329         \r
4330         u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x92c);\r
4331         u4Tmp[1] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x930);\r
4332         u4Tmp[2] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x944);        \r
4333         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x/ 0x%x", "0x92c[1:0]/ 0x930[7:0]/0x944[1:0]", \\r
4334                 u4Tmp[0]&0x3, u4Tmp[1]&0xff, u4Tmp[2]&0x3);\r
4335         CL_PRINTF(cliBuf);\r
4336 \r
4337 \r
4338         u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x39);\r
4339         u1Tmp[1] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x40);\r
4340         u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x4c);\r
4341         u1Tmp[2] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x64);\r
4342         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x/ 0x%x/ 0x%x", "0x38[11]/0x40/0x4c[24:23]/0x64[0]", \\r
4343                 ((u1Tmp[0] & 0x8)>>3), u1Tmp[1], ((u4Tmp[0]&0x01800000)>>23), u1Tmp[2]&0x1);\r
4344         CL_PRINTF(cliBuf);\r
4345 \r
4346         u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x550);\r
4347         u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x522);\r
4348         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x", "0x550(bcn ctrl)/0x522", \\r
4349                 u4Tmp[0], u1Tmp[0]);\r
4350         CL_PRINTF(cliBuf);\r
4351 \r
4352         u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0xc50);\r
4353         u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x49c);\r
4354         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x", "0xc50(dig)/0x49c(null-drop)", \\r
4355                 u4Tmp[0]&0xff, u1Tmp[0]);\r
4356         CL_PRINTF(cliBuf);\r
4357 \r
4358         u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0xda0);\r
4359         u4Tmp[1] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0xda4);\r
4360         u4Tmp[2] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0xda8);\r
4361         u4Tmp[3] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0xcf0);\r
4362 \r
4363         u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0xa5b);\r
4364         u1Tmp[1] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0xa5c);\r
4365 \r
4366         faOfdm = ((u4Tmp[0]&0xffff0000) >> 16) +  ((u4Tmp[1]&0xffff0000) >> 16) + (u4Tmp[1] & 0xffff) +  (u4Tmp[2] & 0xffff) + \\r
4367                              ((u4Tmp[3]&0xffff0000) >> 16) + (u4Tmp[3] & 0xffff) ;\r
4368         faCck = (u1Tmp[0] << 8) + u1Tmp[1];\r
4369         \r
4370         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x/ 0x%x", "OFDM-CCA/OFDM-FA/CCK-FA", \\r
4371                 u4Tmp[0]&0xffff, faOfdm, faCck);\r
4372         CL_PRINTF(cliBuf);\r
4373 \r
4374         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d/ %d/ %d", "CRC_OK CCK/11g/11n/11n-Agg", \\r
4375                 pCoexSta->nCRCOK_CCK, pCoexSta->nCRCOK_11g, pCoexSta->nCRCOK_11n, pCoexSta->nCRCOK_11nAgg);\r
4376         CL_PRINTF(cliBuf);\r
4377 \r
4378         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d/ %d/ %d", "CRC_Err CCK/11g/11n/11n-Agg", \\r
4379                 pCoexSta->nCRCErr_CCK, pCoexSta->nCRCErr_11g, pCoexSta->nCRCErr_11n, pCoexSta->nCRCErr_11nAgg);\r
4380         CL_PRINTF(cliBuf);      \r
4381 \r
4382         u4Tmp[0] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x6c0);\r
4383         u4Tmp[1] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x6c4);\r
4384         u4Tmp[2] = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x6c8);\r
4385         u1Tmp[0] = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x6cc);\r
4386         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x/ 0x%x/ 0x%x", "0x6c0/0x6c4/0x6c8/0x6cc(coexTable)", \\r
4387                 u4Tmp[0], u4Tmp[1], u4Tmp[2], u1Tmp[0]);\r
4388         CL_PRINTF(cliBuf);\r
4389 \r
4390         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d", "0x770(high-pri rx/tx)", \\r
4391                 pCoexSta->highPriorityRx, pCoexSta->highPriorityTx);\r
4392         CL_PRINTF(cliBuf);\r
4393         CL_SPRINTF(cliBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d", "0x774(low-pri rx/tx)", \\r
4394                 pCoexSta->lowPriorityRx, pCoexSta->lowPriorityTx);\r
4395         CL_PRINTF(cliBuf);\r
4396 #if(BT_AUTO_REPORT_ONLY_8723B_2ANT == 1)\r
4397         //halbtc8723b2ant_MonitorBtCtr(pBtCoexist);\r
4398 #endif\r
4399         pBtCoexist->fBtcDispDbgMsg(pBtCoexist, BTC_DBG_DISP_COEX_STATISTICS);\r
4400 }\r
4401 \r
4402 \r
4403 VOID\r
4404 EXhalbtc8723b2ant_IpsNotify(\r
4405         IN      PBTC_COEXIST            pBtCoexist,\r
4406         IN      u1Byte                  type\r
4407         )\r
4408 {\r
4409         if(BTC_IPS_ENTER == type)\r
4410         {\r
4411                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], IPS ENTER notify\n"));\r
4412                 pCoexSta->bUnderIps = TRUE;\r
4413                 halbtc8723b2ant_WifiOffHwCfg(pBtCoexist);\r
4414                 halbtc8723b2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);\r
4415                 halbtc8723b2ant_CoexAllOff(pBtCoexist);\r
4416         }\r
4417         else if(BTC_IPS_LEAVE == type)\r
4418         {\r
4419                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], IPS LEAVE notify\n"));\r
4420                 pCoexSta->bUnderIps = FALSE;\r
4421                 halbtc8723b2ant_InitHwConfig(pBtCoexist, FALSE);\r
4422                 halbtc8723b2ant_InitCoexDm(pBtCoexist);\r
4423                 halbtc8723b2ant_QueryBtInfo(pBtCoexist);\r
4424         }\r
4425 }\r
4426 \r
4427 VOID\r
4428 EXhalbtc8723b2ant_LpsNotify(\r
4429         IN      PBTC_COEXIST            pBtCoexist,\r
4430         IN      u1Byte                  type\r
4431         )\r
4432 {\r
4433         if(BTC_LPS_ENABLE == type)\r
4434         {\r
4435                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], LPS ENABLE notify\n"));\r
4436                 pCoexSta->bUnderLps = TRUE;\r
4437         }\r
4438         else if(BTC_LPS_DISABLE == type)\r
4439         {\r
4440                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], LPS DISABLE notify\n"));\r
4441                 pCoexSta->bUnderLps = FALSE;\r
4442         }\r
4443 }\r
4444 \r
4445 VOID\r
4446 EXhalbtc8723b2ant_ScanNotify(\r
4447         IN      PBTC_COEXIST            pBtCoexist,\r
4448         IN      u1Byte                  type\r
4449         )\r
4450 {\r
4451         u4Byte  u4Tmp;\r
4452         u1Byte  u1Tmpa, u1Tmpb; \r
4453         \r
4454 \r
4455 \r
4456         u4Tmp = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x948);\r
4457         u1Tmpa = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x765);\r
4458         u1Tmpb = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x76e);\r
4459         \r
4460         if(BTC_SCAN_START == type)\r
4461         {\r
4462                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN START notify\n"));\r
4463         }\r
4464         else if(BTC_SCAN_FINISH == type)\r
4465         {\r
4466                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], SCAN FINISH notify\n"));\r
4467         }\r
4468 \r
4469         BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("############# [BTCoex], 0x948=0x%x, 0x765=0x%x, 0x76e=0x%x\n",\r
4470                 u4Tmp,  u1Tmpa, u1Tmpb));\r
4471 }\r
4472 \r
4473 VOID\r
4474 EXhalbtc8723b2ant_ConnectNotify(\r
4475         IN      PBTC_COEXIST            pBtCoexist,\r
4476         IN      u1Byte                  type\r
4477         )\r
4478 {\r
4479         if(BTC_ASSOCIATE_START == type)\r
4480         {\r
4481                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT START notify\n"));\r
4482         }\r
4483         else if(BTC_ASSOCIATE_FINISH == type)\r
4484         {\r
4485                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], CONNECT FINISH notify\n"));\r
4486         }\r
4487 }\r
4488 \r
4489 VOID\r
4490 EXhalbtc8723b2ant_MediaStatusNotify(\r
4491         IN      PBTC_COEXIST            pBtCoexist,\r
4492         IN      u1Byte                          type\r
4493         )\r
4494 {\r
4495         u1Byte                  H2C_Parameter[3] ={0};\r
4496         u4Byte                  wifiBw;\r
4497         u1Byte                  wifiCentralChnl;\r
4498         u1Byte                  apNum=0;\r
4499 \r
4500         if(BTC_MEDIA_CONNECT == type)\r
4501         {\r
4502                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], MEDIA connect notify\n"));\r
4503         }\r
4504         else\r
4505         {\r
4506                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], MEDIA disconnect notify\n"));\r
4507         }\r
4508 \r
4509         // only 2.4G we need to inform bt the chnl mask\r
4510         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_WIFI_CENTRAL_CHNL, &wifiCentralChnl);\r
4511         if( (BTC_MEDIA_CONNECT == type) &&\r
4512                 (wifiCentralChnl <= 14) )\r
4513         {\r
4514                 H2C_Parameter[0] = 0x1;\r
4515                 H2C_Parameter[1] = wifiCentralChnl;\r
4516                 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);\r
4517                 if(BTC_WIFI_BW_HT40 == wifiBw)\r
4518                         H2C_Parameter[2] = 0x30;\r
4519                 else\r
4520                 {\r
4521                         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_AP_NUM, &apNum);\r
4522                         if(apNum < 10)\r
4523                                 H2C_Parameter[2] = 0x30;\r
4524                         else\r
4525                                 H2C_Parameter[2] = 0x20;\r
4526         }\r
4527         }\r
4528         \r
4529         pCoexDm->wifiChnlInfo[0] = H2C_Parameter[0];\r
4530         pCoexDm->wifiChnlInfo[1] = H2C_Parameter[1];\r
4531         pCoexDm->wifiChnlInfo[2] = H2C_Parameter[2];\r
4532         \r
4533         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC, ("[BTCoex], FW write 0x66=0x%x\n", \r
4534                 H2C_Parameter[0]<<16|H2C_Parameter[1]<<8|H2C_Parameter[2]));\r
4535 \r
4536         pBtCoexist->fBtcFillH2c(pBtCoexist, 0x66, 3, H2C_Parameter);    \r
4537 }\r
4538 \r
4539 VOID\r
4540 EXhalbtc8723b2ant_SpecialPacketNotify(\r
4541         IN      PBTC_COEXIST                    pBtCoexist,\r
4542         IN      u1Byte                          type\r
4543         )\r
4544 {\r
4545         if(type == BTC_PACKET_DHCP)\r
4546         {\r
4547                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], DHCP Packet notify\n"));\r
4548         }\r
4549 }\r
4550 \r
4551 VOID\r
4552 EXhalbtc8723b2ant_BtInfoNotify(\r
4553         IN      PBTC_COEXIST            pBtCoexist,\r
4554         IN      pu1Byte                 tmpBuf,\r
4555         IN      u1Byte                  length\r
4556         )\r
4557 {\r
4558         PBTC_BT_LINK_INFO       pBtLinkInfo=&pBtCoexist->btLinkInfo;\r
4559         u1Byte                  btInfo=0;\r
4560         u1Byte                  i, rspSource=0;\r
4561         BOOLEAN                 bBtBusy=FALSE, bLimitedDig=FALSE;\r
4562         BOOLEAN                 bWifiConnected=FALSE;\r
4563         static BOOLEAN          bPreScoExist=FALSE;\r
4564         u4Byte                          raMask=0x0;\r
4565 \r
4566         pCoexSta->bC2hBtInfoReqSent = FALSE;\r
4567 \r
4568         rspSource = tmpBuf[0]&0xf;\r
4569         if(rspSource >= BT_INFO_SRC_8723B_2ANT_MAX)\r
4570                 rspSource = BT_INFO_SRC_8723B_2ANT_WIFI_FW;\r
4571         pCoexSta->btInfoC2hCnt[rspSource]++;\r
4572 \r
4573         BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Bt info[%d], length=%d, hex data=[", rspSource, length));\r
4574         for(i=0; i<length; i++)\r
4575         {\r
4576                 pCoexSta->btInfoC2h[rspSource][i] = tmpBuf[i];\r
4577                 if(i == 1)\r
4578                         btInfo = tmpBuf[i];\r
4579                 if(i == length-1)\r
4580                 {\r
4581                         BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("0x%02x]\n", tmpBuf[i]));\r
4582                 }\r
4583                 else\r
4584                 {\r
4585                         BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("0x%02x, ", tmpBuf[i]));\r
4586                 }\r
4587         }\r
4588 \r
4589         if(pBtCoexist->bManualControl)\r
4590         {\r
4591                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), return for Manual CTRL<===\n"));\r
4592                 return;\r
4593         }\r
4594 \r
4595         // if 0xff, it means BT is under WHCK test\r
4596         if (btInfo == 0xff)\r
4597                 pCoexSta->bBtWhckTest = TRUE;\r
4598         else\r
4599                 pCoexSta->bBtWhckTest = FALSE;\r
4600 \r
4601         if(BT_INFO_SRC_8723B_2ANT_WIFI_FW != rspSource)\r
4602         {\r
4603                 pCoexSta->btRetryCnt =  // [3:0]\r
4604                         pCoexSta->btInfoC2h[rspSource][2]&0xf;\r
4605 \r
4606                 pCoexSta->btRssi =\r
4607                         pCoexSta->btInfoC2h[rspSource][3]*2+10;\r
4608 \r
4609                 pCoexSta->btInfoExt = \r
4610                         pCoexSta->btInfoC2h[rspSource][4];\r
4611 \r
4612                 pCoexSta->bBtTxRxMask = (pCoexSta->btInfoC2h[rspSource][2]&0x40);\r
4613                 pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_TX_RX_MASK, &pCoexSta->bBtTxRxMask);\r
4614                 if (pCoexSta->bBtTxRxMask)\r
4615                 {\r
4616                         /* BT into is responded by BT FW and BT RF REG 0x3C != 0x01 => Need to switch BT TRx Mask */                            \r
4617                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], Switch BT TRx Mask since BT RF REG 0x3C != 0x01\n"));\r
4618                         pBtCoexist->fBtcSetBtReg(pBtCoexist, BTC_BT_REG_RF, 0x3c, 0x01);\r
4619                 }\r
4620 \r
4621                 // Here we need to resend some wifi info to BT\r
4622                 // because bt is reset and loss of the info.\r
4623                 if( (pCoexSta->btInfoExt & BIT1) )\r
4624                 {\r
4625                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT ext info bit1 check, send wifi BW&Chnl to BT!!\n"));\r
4626                         pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);\r
4627                         if(bWifiConnected)\r
4628                         {\r
4629                                 EXhalbtc8723b2ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_CONNECT);\r
4630                         }\r
4631                         else\r
4632                         {\r
4633                                 EXhalbtc8723b2ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_DISCONNECT);\r
4634                         }\r
4635                 }\r
4636                 \r
4637                 if( (pCoexSta->btInfoExt & BIT3) )\r
4638                 {\r
4639                         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BT ext info bit3 check, set BT NOT to ignore Wlan active!!\n"));\r
4640                         halbtc8723b2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, FALSE);\r
4641                 }\r
4642                 else\r
4643                 {\r
4644                         // BT already NOT ignore Wlan active, do nothing here.\r
4645                 }\r
4646 #if(BT_AUTO_REPORT_ONLY_8723B_2ANT == 0)\r
4647                 if( (pCoexSta->btInfoExt & BIT4) )\r
4648                 {\r
4649                         // BT auto report already enabled, do nothing\r
4650                 }\r
4651                 else\r
4652                 {\r
4653                         halbtc8723b2ant_BtAutoReport(pBtCoexist, FORCE_EXEC, TRUE);\r
4654                 }\r
4655 #endif\r
4656         }\r
4657 \r
4658         // check BIT2 first ==> check if bt is under inquiry or page scan\r
4659         if(btInfo & BT_INFO_8723B_2ANT_B_INQ_PAGE)\r
4660                 pCoexSta->bC2hBtInquiryPage = TRUE;\r
4661         else\r
4662                 pCoexSta->bC2hBtInquiryPage = FALSE;\r
4663 \r
4664         // set link exist status\r
4665         if(!(btInfo&BT_INFO_8723B_2ANT_B_CONNECTION))\r
4666         {\r
4667                 pCoexSta->bBtLinkExist = FALSE;\r
4668                 pCoexSta->bPanExist = FALSE;\r
4669                 pCoexSta->bA2dpExist = FALSE;\r
4670                 pCoexSta->bHidExist = FALSE;\r
4671                 pCoexSta->bScoExist = FALSE;\r
4672         }\r
4673         else    // connection exists\r
4674         {\r
4675                 pCoexSta->bBtLinkExist = TRUE;\r
4676                 if(btInfo & BT_INFO_8723B_2ANT_B_FTP)\r
4677                         pCoexSta->bPanExist = TRUE;\r
4678                 else\r
4679                         pCoexSta->bPanExist = FALSE;\r
4680                 if(btInfo & BT_INFO_8723B_2ANT_B_A2DP)\r
4681                         pCoexSta->bA2dpExist = TRUE;\r
4682                 else\r
4683                         pCoexSta->bA2dpExist = FALSE;\r
4684                 if(btInfo & BT_INFO_8723B_2ANT_B_HID)\r
4685                         pCoexSta->bHidExist = TRUE;\r
4686                 else\r
4687                         pCoexSta->bHidExist = FALSE;\r
4688                 if(btInfo & BT_INFO_8723B_2ANT_B_SCO_ESCO)\r
4689                         pCoexSta->bScoExist = TRUE;\r
4690                 else\r
4691                         pCoexSta->bScoExist = FALSE;\r
4692         }\r
4693 \r
4694         halbtc8723b2ant_UpdateBtLinkInfo(pBtCoexist);\r
4695         \r
4696         if(!(btInfo&BT_INFO_8723B_2ANT_B_CONNECTION))\r
4697         {\r
4698                 pCoexDm->btStatus = BT_8723B_2ANT_BT_STATUS_NON_CONNECTED_IDLE;\r
4699                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), BT Non-Connected idle!!!\n"));\r
4700         }\r
4701         else if(btInfo == BT_INFO_8723B_2ANT_B_CONNECTION)      // connection exists but no busy\r
4702         {\r
4703                 pCoexDm->btStatus = BT_8723B_2ANT_BT_STATUS_CONNECTED_IDLE;\r
4704                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), BT Connected-idle!!!\n"));\r
4705         }\r
4706         else if((btInfo&BT_INFO_8723B_2ANT_B_SCO_ESCO) ||\r
4707                 (btInfo&BT_INFO_8723B_2ANT_B_SCO_BUSY))\r
4708         {\r
4709                 pCoexDm->btStatus = BT_8723B_2ANT_BT_STATUS_SCO_BUSY;\r
4710                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), BT SCO busy!!!\n"));\r
4711         }\r
4712         else if(btInfo&BT_INFO_8723B_2ANT_B_ACL_BUSY)\r
4713         {\r
4714                 pCoexDm->btStatus = BT_8723B_2ANT_BT_STATUS_ACL_BUSY;\r
4715                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), BT ACL busy!!!\n"));\r
4716         }\r
4717         else\r
4718         {\r
4719                 pCoexDm->btStatus = BT_8723B_2ANT_BT_STATUS_MAX;\r
4720                 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], BtInfoNotify(), BT Non-Defined state!!!\n"));\r
4721         }\r
4722         \r
4723         if( (BT_8723B_2ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus) ||\r
4724                 (BT_8723B_2ANT_BT_STATUS_SCO_BUSY == pCoexDm->btStatus) ||\r
4725                 (BT_8723B_2ANT_BT_STATUS_ACL_SCO_BUSY == pCoexDm->btStatus) )\r
4726         {\r
4727                 bBtBusy = TRUE;\r
4728                 bLimitedDig = TRUE;\r
4729         }\r
4730         else\r
4731         {\r
4732                 bBtBusy = FALSE;\r
4733                 bLimitedDig = FALSE;\r
4734         }\r
4735 \r
4736         pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_TRAFFIC_BUSY, &bBtBusy);\r
4737 \r
4738         pCoexDm->bLimitedDig = bLimitedDig;\r
4739         pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_LIMITED_DIG, &bLimitedDig);\r
4740 \r
4741         halbtc8723b2ant_RunCoexistMechanism(pBtCoexist);\r
4742 }\r
4743 \r
4744 VOID\r
4745 EXhalbtc8723b2ant_HaltNotify(\r
4746         IN      PBTC_COEXIST                    pBtCoexist\r
4747         )\r
4748 {\r
4749         BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Halt notify\n"));\r
4750 \r
4751         halbtc8723b2ant_WifiOffHwCfg(pBtCoexist);\r
4752         //remove due to interrupt is disabled that polling c2h will fail and delay 100ms.\r
4753         //pBtCoexist->fBtcSetBtReg(pBtCoexist, BTC_BT_REG_RF, 0x3c, 0x15); //BT goto standby while GNT_BT 1-->0\r
4754         halbtc8723b2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, TRUE);\r
4755         \r
4756         EXhalbtc8723b2ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_DISCONNECT);\r
4757 }\r
4758 \r
4759 VOID\r
4760 EXhalbtc8723b2ant_PnpNotify(\r
4761         IN      PBTC_COEXIST                    pBtCoexist,\r
4762         IN      u1Byte                          pnpState\r
4763         )\r
4764 {\r
4765         BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Pnp notify\n"));\r
4766 \r
4767         if(BTC_WIFI_PNP_SLEEP == pnpState)\r
4768         {\r
4769                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Pnp notify to SLEEP\n"));\r
4770         }\r
4771         else if(BTC_WIFI_PNP_WAKE_UP == pnpState)\r
4772         {\r
4773                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, ("[BTCoex], Pnp notify to WAKE UP\n"));\r
4774                 halbtc8723b2ant_InitHwConfig(pBtCoexist, FALSE);\r
4775                 halbtc8723b2ant_InitCoexDm(pBtCoexist);\r
4776                 halbtc8723b2ant_QueryBtInfo(pBtCoexist);\r
4777         }\r
4778 }\r
4779 \r
4780 VOID\r
4781 EXhalbtc8723b2ant_Periodical(\r
4782         IN      PBTC_COEXIST                    pBtCoexist\r
4783         )\r
4784 {\r
4785         //static u1Byte         disVerInfoCnt=0;\r
4786         u4Byte                          fwVer=0, btPatchVer=0;\r
4787         PBTC_BOARD_INFO         pBoardInfo=&pBtCoexist->boardInfo;\r
4788         PBTC_STACK_INFO         pStackInfo=&pBtCoexist->stackInfo;\r
4789 \r
4790         BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, ("[BTCoex], ==========================Periodical===========================\n"));\r
4791 \r
4792         if(pCoexSta->disVerInfoCnt <= 5)\r
4793         {\r
4794                 pCoexSta->disVerInfoCnt += 1;\r
4795                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], ****************************************************************\n"));\r
4796                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], Ant PG Num/ Ant Mech/ Ant Pos = %d/ %d/ %d\n", \\r
4797                         pBoardInfo->pgAntNum, pBoardInfo->btdmAntNum, pBoardInfo->btdmAntPos));\r
4798                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], BT stack/ hci ext ver = %s / %d\n", \\r
4799                         ((pStackInfo->bProfileNotified)? "Yes":"No"), pStackInfo->hciVersion));\r
4800                 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_BT_PATCH_VER, &btPatchVer);\r
4801                 pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);\r
4802                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], CoexVer/ FwVer/ PatchVer = %d_%x/ 0x%x/ 0x%x(%d)\n", \\r
4803                         GLCoexVerDate8723b2Ant, GLCoexVer8723b2Ant, fwVer, btPatchVer, btPatchVer));\r
4804                 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], ****************************************************************\n"));\r
4805 \r
4806                 if (pCoexSta->disVerInfoCnt == 3)\r
4807                 {\r
4808                         //Antenna config to set 0x765 = 0x0 (GNT_BT control by PTA) after initial \r
4809                         BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT, ("[BTCoex], Set GNT_BT control by PTA\n"));\r
4810                         halbtc8723b2ant_SetAntPath(pBtCoexist, BTC_ANT_WIFI_AT_MAIN, FALSE, FALSE);\r
4811                 }\r
4812         }\r
4813 \r
4814 #if(BT_AUTO_REPORT_ONLY_8723B_2ANT == 0)\r
4815         halbtc8723b2ant_QueryBtInfo(pBtCoexist);\r
4816         halbtc8723b2ant_MonitorBtEnableDisable(pBtCoexist);\r
4817 #else\r
4818         halbtc8723b2ant_MonitorBtCtr(pBtCoexist);\r
4819         halbtc8723b2ant_MonitorWiFiCtr(pBtCoexist);\r
4820         \r
4821         if( halbtc8723b2ant_IsWifiStatusChanged(pBtCoexist) ||\r
4822                 pCoexDm->bAutoTdmaAdjust)\r
4823         {\r
4824                 halbtc8723b2ant_RunCoexistMechanism(pBtCoexist);\r
4825         }\r
4826 #endif\r
4827 }\r
4828 \r
4829 \r
4830 #endif\r
4831 \r