1 /***************************************************************
4 * This file is for RTL8723B Co-exist mechanism
7 * 2012/11/15 Cosa first check in.
9 **************************************************************/
10 /**************************************************************
12 **************************************************************/
13 #include "halbt_precomp.h"
15 /**************************************************************
16 * Global variables, these are static variables
17 **************************************************************/
18 static struct coex_dm_8723b_2ant glcoex_dm_8723b_2ant;
19 static struct coex_dm_8723b_2ant *coex_dm = &glcoex_dm_8723b_2ant;
20 static struct coex_sta_8723b_2ant glcoex_sta_8723b_2ant;
21 static struct coex_sta_8723b_2ant *coex_sta = &glcoex_sta_8723b_2ant;
23 const char *const glbt_info_src_8723b_2ant[] = {
26 "BT Info[bt auto report]",
29 u32 glcoex_ver_date_8723b_2ant = 20131113;
30 u32 glcoex_ver_8723b_2ant = 0x3f;
32 /**************************************************************
33 * local function proto type if needed
34 **************************************************************/
35 /**************************************************************
36 * local function start with halbtc8723b2ant_
37 **************************************************************/
38 u8 halbtc8723b2ant_bt_rssi_state(u8 level_num, u8 rssi_thresh, u8 rssi_thresh1)
41 u8 bt_rssi_state = coex_sta->pre_bt_rssi_state;
43 bt_rssi = coex_sta->bt_rssi;
46 if ((coex_sta->pre_bt_rssi_state == BTC_RSSI_STATE_LOW) ||
47 (coex_sta->pre_bt_rssi_state == BTC_RSSI_STATE_STAY_LOW)) {
48 if (bt_rssi >= rssi_thresh +
49 BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT) {
50 bt_rssi_state = BTC_RSSI_STATE_HIGH;
51 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE,
52 "[BTCoex], BT Rssi state "
55 bt_rssi_state = BTC_RSSI_STATE_STAY_LOW;
56 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE,
57 "[BTCoex], BT Rssi state "
61 if (bt_rssi < rssi_thresh) {
62 bt_rssi_state = BTC_RSSI_STATE_LOW;
63 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE,
64 "[BTCoex], BT Rssi state "
67 bt_rssi_state = BTC_RSSI_STATE_STAY_HIGH;
68 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE,
69 "[BTCoex], BT Rssi state "
73 } else if (level_num == 3) {
74 if (rssi_thresh > rssi_thresh1) {
75 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE,
76 "[BTCoex], BT Rssi thresh error!!\n");
77 return coex_sta->pre_bt_rssi_state;
80 if ((coex_sta->pre_bt_rssi_state == BTC_RSSI_STATE_LOW) ||
81 (coex_sta->pre_bt_rssi_state == BTC_RSSI_STATE_STAY_LOW)) {
82 if (bt_rssi >= rssi_thresh +
83 BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT) {
84 bt_rssi_state = BTC_RSSI_STATE_MEDIUM;
85 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE,
86 "[BTCoex], BT Rssi state "
87 "switch to Medium\n");
89 bt_rssi_state = BTC_RSSI_STATE_STAY_LOW;
90 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE,
91 "[BTCoex], BT Rssi state "
94 } else if ((coex_sta->pre_bt_rssi_state ==
95 BTC_RSSI_STATE_MEDIUM) ||
96 (coex_sta->pre_bt_rssi_state ==
97 BTC_RSSI_STATE_STAY_MEDIUM)) {
98 if (bt_rssi >= rssi_thresh1 +
99 BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT) {
100 bt_rssi_state = BTC_RSSI_STATE_HIGH;
101 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE,
102 "[BTCoex], BT Rssi state "
104 } else if (bt_rssi < rssi_thresh) {
105 bt_rssi_state = BTC_RSSI_STATE_LOW;
106 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE,
107 "[BTCoex], BT Rssi state "
110 bt_rssi_state = BTC_RSSI_STATE_STAY_MEDIUM;
111 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE,
112 "[BTCoex], BT Rssi state "
116 if (bt_rssi < rssi_thresh1) {
117 bt_rssi_state = BTC_RSSI_STATE_MEDIUM;
118 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE,
119 "[BTCoex], BT Rssi state "
120 "switch to Medium\n");
122 bt_rssi_state = BTC_RSSI_STATE_STAY_HIGH;
123 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE,
124 "[BTCoex], BT Rssi state "
130 coex_sta->pre_bt_rssi_state = bt_rssi_state;
132 return bt_rssi_state;
135 u8 halbtc8723b2ant_wifi_rssi_state(struct btc_coexist *btcoexist,
136 u8 index, u8 level_num,
137 u8 rssi_thresh, u8 rssi_thresh1)
140 u8 wifi_rssi_state = coex_sta->pre_wifi_rssi_state[index];
142 btcoexist->btc_get(btcoexist, BTC_GET_S4_WIFI_RSSI, &wifi_rssi);
144 if (level_num == 2) {
145 if ((coex_sta->pre_wifi_rssi_state[index] ==
146 BTC_RSSI_STATE_LOW) ||
147 (coex_sta->pre_wifi_rssi_state[index] ==
148 BTC_RSSI_STATE_STAY_LOW)) {
149 if (wifi_rssi >= rssi_thresh +
150 BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT) {
151 wifi_rssi_state = BTC_RSSI_STATE_HIGH;
152 BTC_PRINT(BTC_MSG_ALGORITHM,
153 ALGO_WIFI_RSSI_STATE,
154 "[BTCoex], wifi RSSI state "
157 wifi_rssi_state = BTC_RSSI_STATE_STAY_LOW;
158 BTC_PRINT(BTC_MSG_ALGORITHM,
159 ALGO_WIFI_RSSI_STATE,
160 "[BTCoex], wifi RSSI state "
164 if (wifi_rssi < rssi_thresh) {
165 wifi_rssi_state = BTC_RSSI_STATE_LOW;
166 BTC_PRINT(BTC_MSG_ALGORITHM,
167 ALGO_WIFI_RSSI_STATE,
168 "[BTCoex], wifi RSSI state "
171 wifi_rssi_state = BTC_RSSI_STATE_STAY_HIGH;
172 BTC_PRINT(BTC_MSG_ALGORITHM,
173 ALGO_WIFI_RSSI_STATE,
174 "[BTCoex], wifi RSSI state "
178 } else if (level_num == 3) {
179 if (rssi_thresh > rssi_thresh1) {
180 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE,
181 "[BTCoex], wifi RSSI thresh error!!\n");
182 return coex_sta->pre_wifi_rssi_state[index];
185 if ((coex_sta->pre_wifi_rssi_state[index] ==
186 BTC_RSSI_STATE_LOW) ||
187 (coex_sta->pre_wifi_rssi_state[index] ==
188 BTC_RSSI_STATE_STAY_LOW)) {
189 if(wifi_rssi >= rssi_thresh +
190 BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT) {
191 wifi_rssi_state = BTC_RSSI_STATE_MEDIUM;
192 BTC_PRINT(BTC_MSG_ALGORITHM,
193 ALGO_WIFI_RSSI_STATE,
194 "[BTCoex], wifi RSSI state "
195 "switch to Medium\n");
197 wifi_rssi_state = BTC_RSSI_STATE_STAY_LOW;
198 BTC_PRINT(BTC_MSG_ALGORITHM,
199 ALGO_WIFI_RSSI_STATE,
200 "[BTCoex], wifi RSSI state "
203 } else if ((coex_sta->pre_wifi_rssi_state[index] ==
204 BTC_RSSI_STATE_MEDIUM) ||
205 (coex_sta->pre_wifi_rssi_state[index] ==
206 BTC_RSSI_STATE_STAY_MEDIUM)) {
207 if (wifi_rssi >= rssi_thresh1 +
208 BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT) {
209 wifi_rssi_state = BTC_RSSI_STATE_HIGH;
210 BTC_PRINT(BTC_MSG_ALGORITHM,
211 ALGO_WIFI_RSSI_STATE,
212 "[BTCoex], wifi RSSI state "
214 } else if (wifi_rssi < rssi_thresh) {
215 wifi_rssi_state = BTC_RSSI_STATE_LOW;
216 BTC_PRINT(BTC_MSG_ALGORITHM,
217 ALGO_WIFI_RSSI_STATE,
218 "[BTCoex], wifi RSSI state "
221 wifi_rssi_state = BTC_RSSI_STATE_STAY_MEDIUM;
222 BTC_PRINT(BTC_MSG_ALGORITHM,
223 ALGO_WIFI_RSSI_STATE,
224 "[BTCoex], wifi RSSI state "
228 if (wifi_rssi < rssi_thresh1) {
229 wifi_rssi_state = BTC_RSSI_STATE_MEDIUM;
230 BTC_PRINT(BTC_MSG_ALGORITHM,
231 ALGO_WIFI_RSSI_STATE,
232 "[BTCoex], wifi RSSI state "
233 "switch to Medium\n");
235 wifi_rssi_state = BTC_RSSI_STATE_STAY_HIGH;
236 BTC_PRINT(BTC_MSG_ALGORITHM,
237 ALGO_WIFI_RSSI_STATE,
238 "[BTCoex], wifi RSSI state "
244 coex_sta->pre_wifi_rssi_state[index] = wifi_rssi_state;
246 return wifi_rssi_state;
249 void halbtc8723b2ant_monitor_bt_enable_disable(struct btc_coexist *btcoexist)
251 static bool pre_bt_disabled = false;
252 static u32 bt_disable_cnt = 0;
253 bool bt_active = true, bt_disabled = false;
255 /* This function check if bt is disabled */
256 if (coex_sta->high_priority_tx == 0 &&
257 coex_sta->high_priority_rx == 0 &&
258 coex_sta->low_priority_tx == 0 &&
259 coex_sta->low_priority_rx == 0)
262 if (coex_sta->high_priority_tx == 0xffff &&
263 coex_sta->high_priority_rx == 0xffff &&
264 coex_sta->low_priority_tx == 0xffff &&
265 coex_sta->low_priority_rx == 0xffff)
271 btcoexist->btc_set(btcoexist, BTC_SET_BL_BT_DISABLE,
273 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR,
274 "[BTCoex], BT is enabled !!\n");
277 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR,
278 "[BTCoex], bt all counters=0, %d times!!\n",
280 if (bt_disable_cnt >= 2) {
282 btcoexist->btc_set(btcoexist, BTC_SET_BL_BT_DISABLE,
284 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR,
285 "[BTCoex], BT is disabled !!\n");
289 if (pre_bt_disabled != bt_disabled) {
290 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR,
291 "[BTCoex], BT is from %s to %s!!\n",
292 (pre_bt_disabled ? "disabled":"enabled"),
293 (bt_disabled ? "disabled":"enabled"));
295 pre_bt_disabled = bt_disabled;
302 void halbtc8723b2ant_monitor_bt_ctr(struct btc_coexist *btcoexist)
304 u32 reg_hp_txrx, reg_lp_txrx, u32tmp;
305 u32 reg_hp_tx = 0, reg_hp_rx = 0;
306 u32 reg_lp_tx = 0, reg_lp_rx = 0;
311 u32tmp = btcoexist->btc_read_4byte(btcoexist, reg_hp_txrx);
312 reg_hp_tx = u32tmp & MASKLWORD;
313 reg_hp_rx = (u32tmp & MASKHWORD) >> 16;
315 u32tmp = btcoexist->btc_read_4byte(btcoexist, reg_lp_txrx);
316 reg_lp_tx = u32tmp & MASKLWORD;
317 reg_lp_rx = (u32tmp & MASKHWORD) >> 16;
319 coex_sta->high_priority_tx = reg_hp_tx;
320 coex_sta->high_priority_rx = reg_hp_rx;
321 coex_sta->low_priority_tx = reg_lp_tx;
322 coex_sta->low_priority_rx = reg_lp_rx;
324 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR,
325 "[BTCoex], High Priority Tx/Rx(reg 0x%x)=0x%x(%d)/0x%x(%d)\n",
326 reg_hp_txrx, reg_hp_tx, reg_hp_tx, reg_hp_rx, reg_hp_rx);
327 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR,
328 "[BTCoex], Low Priority Tx/Rx(reg 0x%x)=0x%x(%d)/0x%x(%d)\n",
329 reg_lp_txrx, reg_lp_tx, reg_lp_tx, reg_lp_rx, reg_lp_rx);
332 btcoexist->btc_write_1byte(btcoexist, 0x76e, 0xc);
335 void halbtc8723b2ant_query_bt_info(struct btc_coexist *btcoexist)
337 u8 h2c_parameter[1] ={0};
339 coex_sta->c2h_bt_info_req_sent = true;
341 h2c_parameter[0] |= BIT0; /* trigger */
343 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC,
344 "[BTCoex], Query Bt Info, FW write 0x61=0x%x\n",
347 btcoexist->btc_fill_h2c(btcoexist, 0x61, 1, h2c_parameter);
350 bool halbtc8723b2ant_is_wifi_status_changed(struct btc_coexist *btcoexist)
352 static bool pre_wifi_busy = false;
353 static bool pre_under_4way = false;
354 static bool pre_bt_hs_on = false;
355 bool wifi_busy = false, under_4way = false, bt_hs_on = false;
356 bool wifi_connected = false;
358 btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_CONNECTED,
360 btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_BUSY, &wifi_busy);
361 btcoexist->btc_get(btcoexist, BTC_GET_BL_HS_OPERATION, &bt_hs_on);
362 btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_4_WAY_PROGRESS,
365 if (wifi_connected) {
366 if (wifi_busy != pre_wifi_busy) {
367 pre_wifi_busy = wifi_busy;
371 if (under_4way != pre_under_4way) {
372 pre_under_4way = under_4way;
376 if (bt_hs_on != pre_bt_hs_on) {
377 pre_bt_hs_on = bt_hs_on;
385 void halbtc8723b2ant_update_bt_link_info(struct btc_coexist *btcoexist)
387 /*struct btc_stack_info *stack_info = &btcoexist->stack_info;*/
388 struct btc_bt_link_info *bt_link_info = &btcoexist->bt_link_info;
389 bool bt_hs_on = false;
391 #if(BT_AUTO_REPORT_ONLY_8723B_2ANT == 1) /* profile from bt patch */
392 btcoexist->btc_get(btcoexist, BTC_GET_BL_HS_OPERATION, &bt_hs_on);
394 bt_link_info->bt_link_exist = coex_sta->bt_link_exist;
395 bt_link_info->sco_exist = coex_sta->sco_exist;
396 bt_link_info->a2dp_exist = coex_sta->a2dp_exist;
397 bt_link_info->pan_exist = coex_sta->pan_exist;
398 bt_link_info->hid_exist = coex_sta->hid_exist;
400 /* work around for HS mode. */
402 bt_link_info->pan_exist = true;
403 bt_link_info->bt_link_exist = true;
405 #else /* profile from bt stack */
406 bt_link_info->bt_link_exist = stack_info->bt_link_exist;
407 bt_link_info->sco_exist = stack_info->sco_exist;
408 bt_link_info->a2dp_exist = stack_info->a2dp_exist;
409 bt_link_info->pan_exist = stack_info->pan_exist;
410 bt_link_info->hid_exist = stack_info->hid_exist;
412 /*for win-8 stack HID report error*/
413 if (!stack_info->hid_exist)
414 stack_info->hid_exist = coex_sta->hid_exist;
415 /*sync BTInfo with BT firmware and stack*/
416 /* when stack HID report error, here we use the info from bt fw.*/
417 if (!stack_info->bt_link_exist)
418 stack_info->bt_link_exist = coex_sta->bt_link_exist;
420 /* check if Sco only */
421 if (bt_link_info->sco_exist && !bt_link_info->a2dp_exist &&
422 !bt_link_info->pan_exist && !bt_link_info->hid_exist)
423 bt_link_info->sco_only = true;
425 bt_link_info->sco_only = false;
427 /* check if A2dp only */
428 if (!bt_link_info->sco_exist && bt_link_info->a2dp_exist &&
429 !bt_link_info->pan_exist && !bt_link_info->hid_exist)
430 bt_link_info->a2dp_only = true;
432 bt_link_info->a2dp_only = false;
434 /* check if Pan only */
435 if (!bt_link_info->sco_exist && !bt_link_info->a2dp_exist &&
436 bt_link_info->pan_exist && !bt_link_info->hid_exist)
437 bt_link_info->pan_only = true;
439 bt_link_info->pan_only = false;
441 /* check if Hid only */
442 if (!bt_link_info->sco_exist && !bt_link_info->a2dp_exist &&
443 !bt_link_info->pan_exist && bt_link_info->hid_exist)
444 bt_link_info->hid_only = true;
446 bt_link_info->hid_only = false;
449 u8 halbtc8723b2ant_action_algorithm(struct btc_coexist *btcoexist)
451 struct btc_bt_link_info *bt_link_info=&btcoexist->bt_link_info;
452 bool bt_hs_on = false;
453 u8 algorithm = BT_8723B_2ANT_COEX_ALGO_UNDEFINED;
454 u8 num_of_diff_profile = 0;
456 btcoexist->btc_get(btcoexist, BTC_GET_BL_HS_OPERATION, &bt_hs_on);
458 if (!bt_link_info->bt_link_exist) {
459 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
460 "[BTCoex], No BT link exists!!!\n");
464 if (bt_link_info->sco_exist)
465 num_of_diff_profile++;
466 if (bt_link_info->hid_exist)
467 num_of_diff_profile++;
468 if (bt_link_info->pan_exist)
469 num_of_diff_profile++;
470 if (bt_link_info->a2dp_exist)
471 num_of_diff_profile++;
473 if (num_of_diff_profile == 1) {
474 if (bt_link_info->sco_exist) {
475 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
476 "[BTCoex], SCO only\n");
477 algorithm = BT_8723B_2ANT_COEX_ALGO_SCO;
479 if (bt_link_info->hid_exist) {
480 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
481 "[BTCoex], HID only\n");
482 algorithm = BT_8723B_2ANT_COEX_ALGO_HID;
483 } else if (bt_link_info->a2dp_exist) {
484 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
485 "[BTCoex], A2DP only\n");
486 algorithm = BT_8723B_2ANT_COEX_ALGO_A2DP;
487 } else if (bt_link_info->pan_exist) {
489 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
490 "[BTCoex], PAN(HS) only\n");
492 BT_8723B_2ANT_COEX_ALGO_PANHS;
494 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
495 "[BTCoex], PAN(EDR) only\n");
497 BT_8723B_2ANT_COEX_ALGO_PANEDR;
501 } else if (num_of_diff_profile == 2) {
502 if (bt_link_info->sco_exist) {
503 if (bt_link_info->hid_exist) {
504 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
505 "[BTCoex], SCO + HID\n");
506 algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
507 } else if (bt_link_info->a2dp_exist) {
508 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
509 "[BTCoex], SCO + A2DP ==> SCO\n");
510 algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
511 } else if (bt_link_info->pan_exist) {
513 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
514 "[BTCoex], SCO + PAN(HS)\n");
515 algorithm = BT_8723B_2ANT_COEX_ALGO_SCO;
517 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
518 "[BTCoex], SCO + PAN(EDR)\n");
520 BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
524 if (bt_link_info->hid_exist &&
525 bt_link_info->a2dp_exist) {
526 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
527 "[BTCoex], HID + A2DP\n");
528 algorithm = BT_8723B_2ANT_COEX_ALGO_HID_A2DP;
529 } else if (bt_link_info->hid_exist &&
530 bt_link_info->pan_exist) {
532 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
533 "[BTCoex], HID + PAN(HS)\n");
534 algorithm = BT_8723B_2ANT_COEX_ALGO_HID;
536 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
537 "[BTCoex], HID + PAN(EDR)\n");
539 BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
541 } else if (bt_link_info->pan_exist &&
542 bt_link_info->a2dp_exist) {
544 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
545 "[BTCoex], A2DP + PAN(HS)\n");
547 BT_8723B_2ANT_COEX_ALGO_A2DP_PANHS;
549 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
550 "[BTCoex],A2DP + PAN(EDR)\n");
552 BT_8723B_2ANT_COEX_ALGO_PANEDR_A2DP;
556 } else if (num_of_diff_profile == 3) {
557 if (bt_link_info->sco_exist) {
558 if (bt_link_info->hid_exist &&
559 bt_link_info->a2dp_exist) {
560 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
561 "[BTCoex], SCO + HID + A2DP"
563 algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
564 } else if (bt_link_info->hid_exist &&
565 bt_link_info->pan_exist) {
567 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
568 "[BTCoex], SCO + HID + "
571 BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
573 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
574 "[BTCoex], SCO + HID + "
577 BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
579 } else if (bt_link_info->pan_exist &&
580 bt_link_info->a2dp_exist) {
582 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
583 "[BTCoex], SCO + A2DP + "
586 BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
588 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
589 "[BTCoex], SCO + A2DP + "
590 "PAN(EDR) ==> HID\n");
592 BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
596 if (bt_link_info->hid_exist &&
597 bt_link_info->pan_exist &&
598 bt_link_info->a2dp_exist) {
600 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
601 "[BTCoex], HID + A2DP + "
604 BT_8723B_2ANT_COEX_ALGO_HID_A2DP;
606 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
607 "[BTCoex], HID + A2DP + "
610 BT_8723B_2ANT_COEX_ALGO_HID_A2DP_PANEDR;
614 } else if (num_of_diff_profile >= 3) {
615 if (bt_link_info->sco_exist) {
616 if (bt_link_info->hid_exist &&
617 bt_link_info->pan_exist &&
618 bt_link_info->a2dp_exist) {
620 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
621 "[BTCoex], Error!!! SCO + HID"
622 " + A2DP + PAN(HS)\n");
624 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
625 "[BTCoex], SCO + HID + A2DP +"
626 " PAN(EDR)==>PAN(EDR)+HID\n");
628 BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
637 bool halbtc8723b2ant_need_to_dec_bt_pwr(struct btc_coexist *btcoexist)
640 bool bt_hs_on = false, wifi_connected = false;
644 if (!btcoexist->btc_get(btcoexist,
645 BTC_GET_BL_HS_OPERATION, &bt_hs_on))
647 if (!btcoexist->btc_get(btcoexist,
648 BTC_GET_BL_WIFI_CONNECTED, &wifi_connected))
650 if (!btcoexist->btc_get(btcoexist,
651 BTC_GET_S4_HS_RSSI, &bt_hs_rssi))
654 bt_rssi_state = halbtc8723b2ant_bt_rssi_state(2, 29, 0);
656 if (wifi_connected) {
658 if (bt_hs_rssi > 37) {
659 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW,
660 "[BTCoex], Need to decrease bt "
661 "power for HS mode!!\n");
665 if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||
666 (bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
667 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW,
668 "[BTCoex], Need to decrease bt "
669 "power for Wifi is connected!!\n");
678 void halbtc8723b2ant_set_fw_dac_swing_level(struct btc_coexist *btcoexist,
681 u8 h2c_parameter[1] ={0};
683 /* There are several type of dacswing
684 * 0x18/ 0x10/ 0xc/ 0x8/ 0x4/ 0x6 */
685 h2c_parameter[0] = dac_swing_lvl;
687 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC,
688 "[BTCoex], Set Dac Swing Level=0x%x\n", dac_swing_lvl);
689 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC,
690 "[BTCoex], FW write 0x64=0x%x\n", h2c_parameter[0]);
692 btcoexist->btc_fill_h2c(btcoexist, 0x64, 1, h2c_parameter);
695 void halbtc8723b2ant_set_fw_dec_bt_pwr(struct btc_coexist *btcoexist,
698 u8 h2c_parameter[1] = {0};
700 h2c_parameter[0] = 0;
703 h2c_parameter[0] |= BIT1;
705 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC,
706 "[BTCoex], decrease Bt Power : %s, FW write 0x62=0x%x\n",
707 (dec_bt_pwr? "Yes!!":"No!!"), h2c_parameter[0]);
709 btcoexist->btc_fill_h2c(btcoexist, 0x62, 1, h2c_parameter);
712 void halbtc8723b2ant_dec_bt_pwr(struct btc_coexist *btcoexist,
713 bool force_exec, bool dec_bt_pwr)
715 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW,
716 "[BTCoex], %s Dec BT power = %s\n",
717 (force_exec? "force to":""), (dec_bt_pwr? "ON":"OFF"));
718 coex_dm->cur_dec_bt_pwr = dec_bt_pwr;
721 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL,
722 "[BTCoex], bPreDecBtPwr=%d, bCurDecBtPwr=%d\n",
723 coex_dm->pre_dec_bt_pwr, coex_dm->cur_dec_bt_pwr);
725 if (coex_dm->pre_dec_bt_pwr == coex_dm->cur_dec_bt_pwr)
728 halbtc8723b2ant_set_fw_dec_bt_pwr(btcoexist, coex_dm->cur_dec_bt_pwr);
730 coex_dm->pre_dec_bt_pwr = coex_dm->cur_dec_bt_pwr;
733 void halbtc8723b2ant_set_bt_auto_report(struct btc_coexist *btcoexist,
734 bool enable_auto_report)
736 u8 h2c_parameter[1] = {0};
737 h2c_parameter[0] = 0;
739 if (enable_auto_report)
740 h2c_parameter[0] |= BIT0;
742 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC,
743 "[BTCoex], BT FW auto report : %s, FW write 0x68=0x%x\n",
744 (enable_auto_report? "Enabled!!":"Disabled!!"),
747 btcoexist->btc_fill_h2c(btcoexist, 0x68, 1, h2c_parameter);
750 void halbtc8723b2ant_bt_auto_report(struct btc_coexist *btcoexist,
751 bool force_exec, bool enable_auto_report)
753 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW,
754 "[BTCoex], %s BT Auto report = %s\n",
755 (force_exec? "force to":""),
756 ((enable_auto_report)? "Enabled":"Disabled"));
757 coex_dm->cur_bt_auto_report = enable_auto_report;
760 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL,
761 "[BTCoex], bPreBtAutoReport=%d, "
762 "bCurBtAutoReport=%d\n",
763 coex_dm->pre_bt_auto_report,
764 coex_dm->cur_bt_auto_report);
766 if (coex_dm->pre_bt_auto_report == coex_dm->cur_bt_auto_report)
769 halbtc8723b2ant_set_bt_auto_report(btcoexist,
770 coex_dm->cur_bt_auto_report);
772 coex_dm->pre_bt_auto_report = coex_dm->cur_bt_auto_report;
775 void halbtc8723b2ant_fw_dac_swing_lvl(struct btc_coexist *btcoexist,
776 bool force_exec, u8 fw_dac_swing_lvl)
778 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW,
779 "[BTCoex], %s set FW Dac Swing level = %d\n",
780 (force_exec? "force to":""), fw_dac_swing_lvl);
781 coex_dm->cur_fw_dac_swing_lvl = fw_dac_swing_lvl;
784 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL,
785 "[BTCoex], preFwDacSwingLvl=%d, "
786 "curFwDacSwingLvl=%d\n",
787 coex_dm->pre_fw_dac_swing_lvl,
788 coex_dm->cur_fw_dac_swing_lvl);
790 if(coex_dm->pre_fw_dac_swing_lvl ==
791 coex_dm->cur_fw_dac_swing_lvl)
795 halbtc8723b2ant_set_fw_dac_swing_level(btcoexist,
796 coex_dm->cur_fw_dac_swing_lvl);
797 coex_dm->pre_fw_dac_swing_lvl = coex_dm->cur_fw_dac_swing_lvl;
800 void halbtc8723b2ant_set_sw_rf_rx_lpf_corner(struct btc_coexist *btcoexist,
801 bool rx_rf_shrink_on)
803 if (rx_rf_shrink_on) {
804 /* Shrink RF Rx LPF corner */
805 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC,
806 "[BTCoex], Shrink RF Rx LPF corner!!\n");
807 btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1e,
810 /* Resume RF Rx LPF corner */
811 /* After initialized, we can use coex_dm->btRf0x1eBackup */
812 if (btcoexist->initilized) {
813 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC,
814 "[BTCoex], Resume RF Rx LPF corner!!\n");
815 btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1e,
817 coex_dm->bt_rf0x1e_backup);
822 void halbtc8723b2ant_rf_shrink(struct btc_coexist *btcoexist,
823 bool force_exec, bool rx_rf_shrink_on)
825 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW,
826 "[BTCoex], %s turn Rx RF Shrink = %s\n",
827 (force_exec? "force to":""), (rx_rf_shrink_on? "ON":"OFF"));
828 coex_dm->cur_rf_rx_lpf_shrink = rx_rf_shrink_on;
831 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL,
832 "[BTCoex], bPreRfRxLpfShrink=%d, "
833 "bCurRfRxLpfShrink=%d\n",
834 coex_dm->pre_rf_rx_lpf_shrink,
835 coex_dm->cur_rf_rx_lpf_shrink);
837 if (coex_dm->pre_rf_rx_lpf_shrink ==
838 coex_dm->cur_rf_rx_lpf_shrink)
841 halbtc8723b2ant_set_sw_rf_rx_lpf_corner(btcoexist,
842 coex_dm->cur_rf_rx_lpf_shrink);
844 coex_dm->pre_rf_rx_lpf_shrink = coex_dm->cur_rf_rx_lpf_shrink;
847 void halbtc8723b2ant_set_sw_penalty_txrate_adaptive(
848 struct btc_coexist *btcoexist,
851 u8 h2c_parameter[6] ={0};
853 h2c_parameter[0] = 0x6; /* opCode, 0x6= Retry_Penalty*/
855 if (low_penalty_ra) {
856 h2c_parameter[1] |= BIT0;
857 /*normal rate except MCS7/6/5, OFDM54/48/36*/
858 h2c_parameter[2] = 0x00;
859 h2c_parameter[3] = 0xf7; /*MCS7 or OFDM54*/
860 h2c_parameter[4] = 0xf8; /*MCS6 or OFDM48*/
861 h2c_parameter[5] = 0xf9; /*MCS5 or OFDM36*/
864 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC,
865 "[BTCoex], set WiFi Low-Penalty Retry: %s",
866 (low_penalty_ra? "ON!!":"OFF!!"));
868 btcoexist->btc_fill_h2c(btcoexist, 0x69, 6, h2c_parameter);
871 void halbtc8723b2ant_low_penalty_ra(struct btc_coexist *btcoexist,
872 bool force_exec, bool low_penalty_ra)
875 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW,
876 "[BTCoex], %s turn LowPenaltyRA = %s\n",
877 (force_exec? "force to":""), (low_penalty_ra? "ON":"OFF"));
878 coex_dm->cur_low_penalty_ra = low_penalty_ra;
881 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL,
882 "[BTCoex], bPreLowPenaltyRa=%d, "
883 "bCurLowPenaltyRa=%d\n",
884 coex_dm->pre_low_penalty_ra,
885 coex_dm->cur_low_penalty_ra);
887 if (coex_dm->pre_low_penalty_ra == coex_dm->cur_low_penalty_ra)
890 halbtc8723b2ant_set_sw_penalty_txrate_adaptive(btcoexist,
891 coex_dm->cur_low_penalty_ra);
893 coex_dm->pre_low_penalty_ra = coex_dm->cur_low_penalty_ra;
896 void halbtc8723b2ant_set_dac_swing_reg(struct btc_coexist * btcoexist,
900 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC,
901 "[BTCoex], Write SwDacSwing = 0x%x\n", level);
902 btcoexist->btc_write_1byte_bitmask(btcoexist, 0x883, 0x3e, val);
905 void halbtc8723b2ant_set_sw_fulltime_dac_swing(struct btc_coexist *btcoexist,
906 bool sw_dac_swing_on,
907 u32 sw_dac_swing_lvl)
910 halbtc8723b2ant_set_dac_swing_reg(btcoexist, sw_dac_swing_lvl);
912 halbtc8723b2ant_set_dac_swing_reg(btcoexist, 0x18);
916 void halbtc8723b2ant_dac_swing(struct btc_coexist *btcoexist,
917 bool force_exec, bool dac_swing_on,
920 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW,
921 "[BTCoex], %s turn DacSwing=%s, dac_swing_lvl=0x%x\n",
922 (force_exec? "force to":""),
923 (dac_swing_on? "ON":"OFF"), dac_swing_lvl);
924 coex_dm->cur_dac_swing_on = dac_swing_on;
925 coex_dm->cur_dac_swing_lvl = dac_swing_lvl;
928 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL,
929 "[BTCoex], bPreDacSwingOn=%d, preDacSwingLvl=0x%x,"
930 " bCurDacSwingOn=%d, curDacSwingLvl=0x%x\n",
931 coex_dm->pre_dac_swing_on, coex_dm->pre_dac_swing_lvl,
932 coex_dm->cur_dac_swing_on,
933 coex_dm->cur_dac_swing_lvl);
935 if ((coex_dm->pre_dac_swing_on == coex_dm->cur_dac_swing_on) &&
936 (coex_dm->pre_dac_swing_lvl == coex_dm->cur_dac_swing_lvl))
940 halbtc8723b2ant_set_sw_fulltime_dac_swing(btcoexist, dac_swing_on,
943 coex_dm->pre_dac_swing_on = coex_dm->cur_dac_swing_on;
944 coex_dm->pre_dac_swing_lvl = coex_dm->cur_dac_swing_lvl;
947 void halbtc8723b2ant_set_adc_backoff(struct btc_coexist *btcoexist,
951 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC,
952 "[BTCoex], BB BackOff Level On!\n");
953 btcoexist->btc_write_1byte_bitmask(btcoexist, 0xc05, 0x30, 0x3);
955 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC,
956 "[BTCoex], BB BackOff Level Off!\n");
957 btcoexist->btc_write_1byte_bitmask(btcoexist, 0xc05, 0x30, 0x1);
961 void halbtc8723b2ant_adc_backoff(struct btc_coexist *btcoexist,
962 bool force_exec, bool adc_backoff)
964 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW,
965 "[BTCoex], %s turn AdcBackOff = %s\n",
966 (force_exec? "force to":""), (adc_backoff? "ON":"OFF"));
967 coex_dm->cur_adc_back_off = adc_backoff;
970 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL,
971 "[BTCoex], bPreAdcBackOff=%d, bCurAdcBackOff=%d\n",
972 coex_dm->pre_adc_back_off,
973 coex_dm->cur_adc_back_off);
975 if (coex_dm->pre_adc_back_off == coex_dm->cur_adc_back_off)
978 halbtc8723b2ant_set_adc_backoff(btcoexist, coex_dm->cur_adc_back_off);
980 coex_dm->pre_adc_back_off = coex_dm->cur_adc_back_off;
983 void halbtc8723b2ant_set_agc_table(struct btc_coexist *btcoexist,
986 u8 rssi_adjust_val = 0;
988 /* BB AGC Gain Table */
990 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC,
991 "[BTCoex], BB Agc Table On!\n");
992 btcoexist->btc_write_4byte(btcoexist, 0xc78, 0x6e1A0001);
993 btcoexist->btc_write_4byte(btcoexist, 0xc78, 0x6d1B0001);
994 btcoexist->btc_write_4byte(btcoexist, 0xc78, 0x6c1C0001);
995 btcoexist->btc_write_4byte(btcoexist, 0xc78, 0x6b1D0001);
996 btcoexist->btc_write_4byte(btcoexist, 0xc78, 0x6a1E0001);
997 btcoexist->btc_write_4byte(btcoexist, 0xc78, 0x691F0001);
998 btcoexist->btc_write_4byte(btcoexist, 0xc78, 0x68200001);
1000 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC,
1001 "[BTCoex], BB Agc Table Off!\n");
1002 btcoexist->btc_write_4byte(btcoexist, 0xc78, 0xaa1A0001);
1003 btcoexist->btc_write_4byte(btcoexist, 0xc78, 0xa91B0001);
1004 btcoexist->btc_write_4byte(btcoexist, 0xc78, 0xa81C0001);
1005 btcoexist->btc_write_4byte(btcoexist, 0xc78, 0xa71D0001);
1006 btcoexist->btc_write_4byte(btcoexist, 0xc78, 0xa61E0001);
1007 btcoexist->btc_write_4byte(btcoexist, 0xc78, 0xa51F0001);
1008 btcoexist->btc_write_4byte(btcoexist, 0xc78, 0xa4200001);
1013 btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0xef, 0xfffff, 0x02000);
1015 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC,
1016 "[BTCoex], Agc Table On!\n");
1017 btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x3b,
1019 btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x3b,
1022 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC,
1023 "[BTCoex], Agc Table Off!\n");
1024 btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x3b,
1026 btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x3b,
1029 btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0xef, 0xfffff, 0x0);
1031 btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0xed, 0xfffff, 0x1);
1034 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC,
1035 "[BTCoex], Agc Table On!\n");
1036 btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x40,
1038 btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x40,
1041 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC,
1042 "[BTCoex], Agc Table Off!\n");
1043 btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x40,
1045 btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x40,
1048 btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0xed, 0xfffff, 0x0);
1050 /* set rssiAdjustVal for wifi module. */
1052 rssi_adjust_val = 8;
1053 btcoexist->btc_set(btcoexist, BTC_SET_U1_RSSI_ADJ_VAL_FOR_AGC_TABLE_ON,
1057 void halbtc8723b2ant_agc_table(struct btc_coexist *btcoexist,
1058 bool force_exec, bool agc_table_en)
1060 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW,
1061 "[BTCoex], %s %s Agc Table\n",
1062 (force_exec? "force to":""),
1063 (agc_table_en? "Enable":"Disable"));
1064 coex_dm->cur_agc_table_en = agc_table_en;
1067 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL,
1068 "[BTCoex], bPreAgcTableEn=%d, bCurAgcTableEn=%d\n",
1069 coex_dm->pre_agc_table_en, coex_dm->cur_agc_table_en);
1071 if (coex_dm->pre_agc_table_en == coex_dm->cur_agc_table_en)
1074 halbtc8723b2ant_set_agc_table(btcoexist, agc_table_en);
1076 coex_dm->pre_agc_table_en = coex_dm->cur_agc_table_en;
1079 void halbtc8723b2ant_set_coex_table(struct btc_coexist *btcoexist,
1080 u32 val0x6c0, u32 val0x6c4,
1081 u32 val0x6c8, u8 val0x6cc)
1083 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC,
1084 "[BTCoex], set coex table, set 0x6c0=0x%x\n", val0x6c0);
1085 btcoexist->btc_write_4byte(btcoexist, 0x6c0, val0x6c0);
1087 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC,
1088 "[BTCoex], set coex table, set 0x6c4=0x%x\n", val0x6c4);
1089 btcoexist->btc_write_4byte(btcoexist, 0x6c4, val0x6c4);
1091 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC,
1092 "[BTCoex], set coex table, set 0x6c8=0x%x\n", val0x6c8);
1093 btcoexist->btc_write_4byte(btcoexist, 0x6c8, val0x6c8);
1095 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC,
1096 "[BTCoex], set coex table, set 0x6cc=0x%x\n", val0x6cc);
1097 btcoexist->btc_write_1byte(btcoexist, 0x6cc, val0x6cc);
1100 void halbtc8723b2ant_coex_table(struct btc_coexist *btcoexist,
1101 bool force_exec, u32 val0x6c0,
1102 u32 val0x6c4, u32 val0x6c8,
1105 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW,
1106 "[BTCoex], %s write Coex Table 0x6c0=0x%x,"
1107 " 0x6c4=0x%x, 0x6c8=0x%x, 0x6cc=0x%x\n",
1108 (force_exec? "force to":""), val0x6c0,
1109 val0x6c4, val0x6c8, val0x6cc);
1110 coex_dm->cur_val0x6c0 = val0x6c0;
1111 coex_dm->cur_val0x6c4 = val0x6c4;
1112 coex_dm->cur_val0x6c8 = val0x6c8;
1113 coex_dm->cur_val0x6cc = val0x6cc;
1116 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL,
1117 "[BTCoex], preVal0x6c0=0x%x, "
1118 "preVal0x6c4=0x%x, preVal0x6c8=0x%x, "
1119 "preVal0x6cc=0x%x !!\n",
1120 coex_dm->pre_val0x6c0, coex_dm->pre_val0x6c4,
1121 coex_dm->pre_val0x6c8, coex_dm->pre_val0x6cc);
1122 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL,
1123 "[BTCoex], curVal0x6c0=0x%x, "
1124 "curVal0x6c4=0x%x, curVal0x6c8=0x%x, "
1125 "curVal0x6cc=0x%x !!\n",
1126 coex_dm->cur_val0x6c0, coex_dm->cur_val0x6c4,
1127 coex_dm->cur_val0x6c8, coex_dm->cur_val0x6cc);
1129 if ((coex_dm->pre_val0x6c0 == coex_dm->cur_val0x6c0) &&
1130 (coex_dm->pre_val0x6c4 == coex_dm->cur_val0x6c4) &&
1131 (coex_dm->pre_val0x6c8 == coex_dm->cur_val0x6c8) &&
1132 (coex_dm->pre_val0x6cc == coex_dm->cur_val0x6cc))
1135 halbtc8723b2ant_set_coex_table(btcoexist, val0x6c0, val0x6c4,
1136 val0x6c8, val0x6cc);
1138 coex_dm->pre_val0x6c0 = coex_dm->cur_val0x6c0;
1139 coex_dm->pre_val0x6c4 = coex_dm->cur_val0x6c4;
1140 coex_dm->pre_val0x6c8 = coex_dm->cur_val0x6c8;
1141 coex_dm->pre_val0x6cc = coex_dm->cur_val0x6cc;
1144 void halbtc8723b2ant_coex_table_with_type(struct btc_coexist *btcoexist,
1145 bool force_exec, u8 type)
1149 halbtc8723b2ant_coex_table(btcoexist, force_exec, 0x55555555,
1150 0x55555555, 0xffff, 0x3);
1153 halbtc8723b2ant_coex_table(btcoexist, force_exec, 0x55555555,
1154 0x5afa5afa, 0xffff, 0x3);
1157 halbtc8723b2ant_coex_table(btcoexist, force_exec, 0x5a5a5a5a,
1158 0x5a5a5a5a, 0xffff, 0x3);
1161 halbtc8723b2ant_coex_table(btcoexist, force_exec, 0xaaaaaaaa,
1162 0xaaaaaaaa, 0xffff, 0x3);
1165 halbtc8723b2ant_coex_table(btcoexist, force_exec, 0xffffffff,
1166 0xffffffff, 0xffff, 0x3);
1169 halbtc8723b2ant_coex_table(btcoexist, force_exec, 0x5fff5fff,
1170 0x5fff5fff, 0xffff, 0x3);
1173 halbtc8723b2ant_coex_table(btcoexist, force_exec, 0x55ff55ff,
1174 0x5a5a5a5a, 0xffff, 0x3);
1177 halbtc8723b2ant_coex_table(btcoexist, force_exec, 0x55ff55ff,
1178 0x5afa5afa, 0xffff, 0x3);
1181 halbtc8723b2ant_coex_table(btcoexist, force_exec, 0x5aea5aea,
1182 0x5aea5aea, 0xffff, 0x3);
1185 halbtc8723b2ant_coex_table(btcoexist, force_exec, 0x55ff55ff,
1186 0x5aea5aea, 0xffff, 0x3);
1189 halbtc8723b2ant_coex_table(btcoexist, force_exec, 0x55ff55ff,
1190 0x5aff5aff, 0xffff, 0x3);
1193 halbtc8723b2ant_coex_table(btcoexist, force_exec, 0x55ff55ff,
1194 0x5a5f5a5f, 0xffff, 0x3);
1197 halbtc8723b2ant_coex_table(btcoexist, force_exec, 0x55ff55ff,
1198 0x5f5f5f5f, 0xffff, 0x3);
1205 void halbtc8723b2ant_set_fw_ignore_wlan_act(struct btc_coexist *btcoexist,
1208 u8 h2c_parameter[1] ={0};
1211 h2c_parameter[0] |= BIT0;/* function enable*/
1213 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC,
1214 "[BTCoex], set FW for BT Ignore Wlan_Act, "
1215 "FW write 0x63=0x%x\n", h2c_parameter[0]);
1217 btcoexist->btc_fill_h2c(btcoexist, 0x63, 1, h2c_parameter);
1220 void halbtc8723b2ant_ignore_wlan_act(struct btc_coexist *btcoexist,
1221 bool force_exec, bool enable)
1223 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW,
1224 "[BTCoex], %s turn Ignore WlanAct %s\n",
1225 (force_exec? "force to":""), (enable? "ON":"OFF"));
1226 coex_dm->cur_ignore_wlan_act = enable;
1229 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL,
1230 "[BTCoex], bPreIgnoreWlanAct = %d, "
1231 "bCurIgnoreWlanAct = %d!!\n",
1232 coex_dm->pre_ignore_wlan_act,
1233 coex_dm->cur_ignore_wlan_act);
1235 if (coex_dm->pre_ignore_wlan_act ==
1236 coex_dm->cur_ignore_wlan_act)
1239 halbtc8723b2ant_set_fw_ignore_wlan_act(btcoexist, enable);
1241 coex_dm->pre_ignore_wlan_act = coex_dm->cur_ignore_wlan_act;
1244 void halbtc8723b2ant_set_fw_ps_tdma(struct btc_coexist *btcoexist, u8 byte1,
1245 u8 byte2, u8 byte3, u8 byte4, u8 byte5)
1247 u8 h2c_parameter[5] ={0};
1249 h2c_parameter[0] = byte1;
1250 h2c_parameter[1] = byte2;
1251 h2c_parameter[2] = byte3;
1252 h2c_parameter[3] = byte4;
1253 h2c_parameter[4] = byte5;
1255 coex_dm->ps_tdma_para[0] = byte1;
1256 coex_dm->ps_tdma_para[1] = byte2;
1257 coex_dm->ps_tdma_para[2] = byte3;
1258 coex_dm->ps_tdma_para[3] = byte4;
1259 coex_dm->ps_tdma_para[4] = byte5;
1261 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC,
1262 "[BTCoex], FW write 0x60(5bytes)=0x%x%08x\n",
1264 h2c_parameter[1] << 24 | h2c_parameter[2] << 16 |
1265 h2c_parameter[3] << 8 | h2c_parameter[4]);
1267 btcoexist->btc_fill_h2c(btcoexist, 0x60, 5, h2c_parameter);
1270 void halbtc8723b2ant_sw_mechanism1(struct btc_coexist *btcoexist,
1271 bool shrink_rx_lpf, bool low_penalty_ra,
1272 bool limited_dig, bool bt_lna_constrain)
1277 btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
1279 if(BTC_WIFI_BW_HT40 != wifi_bw) //only shrink RF Rx LPF for HT40
1282 shrink_rx_lpf = false;
1286 halbtc8723b2ant_rf_shrink(btcoexist, NORMAL_EXEC, shrink_rx_lpf);
1287 halbtc8723b2ant_low_penalty_ra(btcoexist, NORMAL_EXEC, low_penalty_ra);
1290 void halbtc8723b2ant_sw_mechanism2(struct btc_coexist *btcoexist,
1291 bool agc_table_shift, bool adc_backoff,
1292 bool sw_dac_swing, u32 dac_swing_lvl)
1294 halbtc8723b2ant_agc_table(btcoexist, NORMAL_EXEC, agc_table_shift);
1295 /*halbtc8723b2ant_adc_backoff(btcoexist, NORMAL_EXEC, adc_backoff);*/
1296 halbtc8723b2ant_dac_swing(btcoexist, NORMAL_EXEC, sw_dac_swing,
1300 void halbtc8723b2ant_set_ant_path(struct btc_coexist *btcoexist,
1301 u8 antpos_type, bool init_hwcfg,
1304 struct btc_board_info *board_info = &btcoexist->board_info;
1305 u32 fw_ver = 0, u32tmp=0;
1306 bool pg_ext_switch = false;
1307 bool use_ext_switch = false;
1308 u8 h2c_parameter[2] ={0};
1310 btcoexist->btc_get(btcoexist, BTC_GET_BL_EXT_SWITCH, &pg_ext_switch);
1311 btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_FW_VER, &fw_ver);
1313 if ((fw_ver<0xc0000) || pg_ext_switch)
1314 use_ext_switch = true;
1317 /* 0x4c[23]=0, 0x4c[24]=1 Antenna control by WL/BT */
1318 u32tmp = btcoexist->btc_read_4byte(btcoexist, 0x4c);
1321 btcoexist->btc_write_4byte(btcoexist, 0x4c, u32tmp);
1323 btcoexist->btc_write_1byte(btcoexist, 0x974, 0xff);
1324 btcoexist->btc_write_1byte_bitmask(btcoexist, 0x944, 0x3, 0x3);
1325 btcoexist->btc_write_1byte(btcoexist, 0x930, 0x77);
1326 btcoexist->btc_write_1byte_bitmask(btcoexist, 0x67, 0x20, 0x1);
1328 /* Force GNT_BT to low */
1329 btcoexist->btc_write_1byte_bitmask(btcoexist, 0x765, 0x18, 0x0);
1330 btcoexist->btc_write_2byte(btcoexist, 0x948, 0x0);
1332 if (board_info->btdm_ant_pos == BTC_ANTENNA_AT_MAIN_PORT) {
1333 /* tell firmware "no antenna inverse" */
1334 h2c_parameter[0] = 0;
1335 h2c_parameter[1] = 1; /* ext switch type */
1336 btcoexist->btc_fill_h2c(btcoexist, 0x65, 2,
1339 /* tell firmware "antenna inverse" */
1340 h2c_parameter[0] = 1;
1341 h2c_parameter[1] = 1; /* ext switch type */
1342 btcoexist->btc_fill_h2c(btcoexist, 0x65, 2,
1347 /* ext switch setting */
1348 if (use_ext_switch) {
1349 /* fixed internal switch S1->WiFi, S0->BT */
1350 btcoexist->btc_write_2byte(btcoexist, 0x948, 0x0);
1351 switch (antpos_type) {
1352 case BTC_ANT_WIFI_AT_MAIN:
1353 /* ext switch main at wifi */
1354 btcoexist->btc_write_1byte_bitmask(btcoexist, 0x92c,
1357 case BTC_ANT_WIFI_AT_AUX:
1358 /* ext switch aux at wifi */
1359 btcoexist->btc_write_1byte_bitmask(btcoexist,
1363 } else { /* internal switch */
1364 /* fixed ext switch */
1365 btcoexist->btc_write_1byte_bitmask(btcoexist, 0x92c, 0x3, 0x1);
1366 switch (antpos_type) {
1367 case BTC_ANT_WIFI_AT_MAIN:
1368 /* fixed internal switch S1->WiFi, S0->BT */
1369 btcoexist->btc_write_2byte(btcoexist, 0x948, 0x0);
1371 case BTC_ANT_WIFI_AT_AUX:
1372 /* fixed internal switch S0->WiFi, S1->BT */
1373 btcoexist->btc_write_2byte(btcoexist, 0x948, 0x280);
1380 void halbtc8723b2ant_ps_tdma(struct btc_coexist *btcoexist, bool force_exec,
1381 bool turn_on, u8 type)
1384 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW,
1385 "[BTCoex], %s turn %s PS TDMA, type=%d\n",
1386 (force_exec? "force to":""), (turn_on? "ON":"OFF"), type);
1387 coex_dm->cur_ps_tdma_on = turn_on;
1388 coex_dm->cur_ps_tdma = type;
1391 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL,
1392 "[BTCoex], bPrePsTdmaOn = %d, bCurPsTdmaOn = %d!!\n",
1393 coex_dm->pre_ps_tdma_on, coex_dm->cur_ps_tdma_on);
1394 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL,
1395 "[BTCoex], prePsTdma = %d, curPsTdma = %d!!\n",
1396 coex_dm->pre_ps_tdma, coex_dm->cur_ps_tdma);
1398 if ((coex_dm->pre_ps_tdma_on == coex_dm->cur_ps_tdma_on) &&
1399 (coex_dm->pre_ps_tdma == coex_dm->cur_ps_tdma))
1406 halbtc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x1a,
1410 halbtc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x12,
1414 halbtc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x1c,
1418 halbtc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x10,
1422 halbtc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x1a,
1426 halbtc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x12,
1430 halbtc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x1c,
1434 halbtc8723b2ant_set_fw_ps_tdma(btcoexist, 0xa3, 0x10,
1438 halbtc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x1a,
1442 halbtc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x12,
1446 halbtc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0xa,
1450 halbtc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x5,
1454 halbtc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x1a,
1458 halbtc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x12,
1462 halbtc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0xa,
1466 halbtc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x5,
1470 halbtc8723b2ant_set_fw_ps_tdma(btcoexist, 0xa3, 0x2f,
1474 halbtc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x5,
1478 halbtc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x25,
1482 halbtc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x25,
1486 halbtc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x15,
1490 halbtc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x1a,
1495 /* disable PS tdma */
1498 halbtc8723b2ant_set_fw_ps_tdma(btcoexist, 0x0, 0x0, 0x0,
1502 halbtc8723b2ant_set_fw_ps_tdma(btcoexist, 0x0, 0x0, 0x0,
1506 halbtc8723b2ant_set_fw_ps_tdma(btcoexist, 0x0, 0x0, 0x0,
1512 /* update pre state */
1513 coex_dm->pre_ps_tdma_on = coex_dm->cur_ps_tdma_on;
1514 coex_dm->pre_ps_tdma = coex_dm->cur_ps_tdma;
1517 void halbtc8723b2ant_coex_alloff(struct btc_coexist *btcoexist)
1520 halbtc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);
1521 halbtc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
1522 halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false);
1525 halbtc8723b2ant_sw_mechanism1(btcoexist, false, false, false, false);
1526 halbtc8723b2ant_sw_mechanism2(btcoexist, false, false, false, 0x18);
1529 btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
1530 halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 0);
1533 void halbtc8723b2ant_init_coex_dm(struct btc_coexist *btcoexist)
1535 /* force to reset coex mechanism*/
1537 halbtc8723b2ant_ps_tdma(btcoexist, FORCE_EXEC, false, 1);
1538 halbtc8723b2ant_fw_dac_swing_lvl(btcoexist, FORCE_EXEC, 6);
1539 halbtc8723b2ant_dec_bt_pwr(btcoexist, FORCE_EXEC, false);
1541 halbtc8723b2ant_sw_mechanism1(btcoexist, false, false, false, false);
1542 halbtc8723b2ant_sw_mechanism2(btcoexist, false, false, false, 0x18);
1545 void halbtc8723b2ant_action_bt_inquiry(struct btc_coexist *btcoexist)
1547 bool wifi_connected = false;
1548 bool low_pwr_disable = true;
1550 btcoexist->btc_set(btcoexist, BTC_SET_ACT_DISABLE_LOW_POWER,
1552 btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_CONNECTED,
1555 if (wifi_connected) {
1556 halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 7);
1557 halbtc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 3);
1559 halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 0);
1560 halbtc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);
1562 halbtc8723b2ant_fw_dac_swing_lvl(btcoexist, FORCE_EXEC, 6);
1563 halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false);
1565 halbtc8723b2ant_sw_mechanism1(btcoexist, false, false, false, false);
1566 halbtc8723b2ant_sw_mechanism2(btcoexist, false, false, false, 0x18);
1568 coex_dm->need_recover_0x948 = true;
1569 coex_dm->backup_0x948 = btcoexist->btc_read_2byte(btcoexist, 0x948);
1571 halbtc8723b2ant_set_ant_path(btcoexist, BTC_ANT_WIFI_AT_AUX,
1575 bool halbtc8723b2ant_is_common_action(struct btc_coexist *btcoexist)
1577 bool bCommon = false, wifi_connected = false;
1578 bool wifi_busy = false;
1579 bool bt_hs_on = false, low_pwr_disable = false;
1581 btcoexist->btc_get(btcoexist, BTC_GET_BL_HS_OPERATION, &bt_hs_on);
1582 btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_CONNECTED,
1584 btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_BUSY, &wifi_busy);
1586 if (!wifi_connected) {
1587 low_pwr_disable = false;
1588 btcoexist->btc_set(btcoexist, BTC_SET_ACT_DISABLE_LOW_POWER,
1591 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
1592 "[BTCoex], Wifi non-connected idle!!\n");
1594 btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff,
1596 halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 0);
1597 halbtc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);
1598 halbtc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
1599 halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false);
1601 halbtc8723b2ant_sw_mechanism1(btcoexist, false, false, false,
1603 halbtc8723b2ant_sw_mechanism2(btcoexist, false, false, false,
1608 if (BT_8723B_2ANT_BT_STATUS_NON_CONNECTED_IDLE ==
1609 coex_dm->bt_status) {
1610 low_pwr_disable = false;
1611 btcoexist->btc_set(btcoexist,
1612 BTC_SET_ACT_DISABLE_LOW_POWER,
1615 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
1616 "[BTCoex], Wifi connected + "
1617 "BT non connected-idle!!\n");
1619 btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1,
1621 halbtc8723b2ant_coex_table_with_type(btcoexist,
1623 halbtc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false,
1625 halbtc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC,
1627 halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC,
1630 halbtc8723b2ant_sw_mechanism1(btcoexist, false, false,
1632 halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,
1636 } else if (BT_8723B_2ANT_BT_STATUS_CONNECTED_IDLE ==
1637 coex_dm->bt_status) {
1638 low_pwr_disable = true;
1639 btcoexist->btc_set(btcoexist,
1640 BTC_SET_ACT_DISABLE_LOW_POWER,
1645 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
1646 "[BTCoex], Wifi connected + "
1647 "BT connected-idle!!\n");
1649 btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1,
1651 halbtc8723b2ant_coex_table_with_type(btcoexist,
1653 halbtc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false,
1655 halbtc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC,
1657 halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC,
1660 halbtc8723b2ant_sw_mechanism1(btcoexist, true, false,
1662 halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,
1667 low_pwr_disable = true;
1668 btcoexist->btc_set(btcoexist,
1669 BTC_SET_ACT_DISABLE_LOW_POWER,
1673 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
1674 "[BTCoex], Wifi Connected-Busy + "
1681 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
1682 "[BTCoex], Wifi Connected-Idle + "
1685 btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A,
1687 halbtc8723b2ant_coex_table_with_type(btcoexist,
1690 halbtc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC,
1692 halbtc8723b2ant_fw_dac_swing_lvl(btcoexist,
1695 if (halbtc8723b2ant_need_to_dec_bt_pwr(btcoexist))
1696 halbtc8723b2ant_dec_bt_pwr(btcoexist,
1700 halbtc8723b2ant_dec_bt_pwr(btcoexist,
1703 halbtc8723b2ant_sw_mechanism1(btcoexist, false,
1706 halbtc8723b2ant_sw_mechanism2(btcoexist, false,
1716 void halbtc8723b2ant_tdma_duration_adjust(struct btc_coexist *btcoexist,
1717 bool sco_hid, bool tx_pause,
1720 static s32 up, dn, m, n, wait_count;
1721 /*0: no change, +1: increase WiFi duration, -1: decrease WiFi duration*/
1725 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW,
1726 "[BTCoex], TdmaDurationAdjust()\n");
1728 if (!coex_dm->auto_tdma_adjust) {
1729 coex_dm->auto_tdma_adjust = true;
1730 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL,
1731 "[BTCoex], first run TdmaDurationAdjust()!!\n");
1734 if (max_interval == 1) {
1735 halbtc8723b2ant_ps_tdma(btcoexist,
1738 coex_dm->ps_tdma_du_adj_type = 13;
1739 }else if (max_interval == 2) {
1740 halbtc8723b2ant_ps_tdma(btcoexist,
1743 coex_dm->ps_tdma_du_adj_type = 14;
1744 } else if (max_interval == 3) {
1745 halbtc8723b2ant_ps_tdma(btcoexist,
1748 coex_dm->ps_tdma_du_adj_type = 15;
1750 halbtc8723b2ant_ps_tdma(btcoexist,
1753 coex_dm->ps_tdma_du_adj_type = 15;
1756 if(max_interval == 1) {
1757 halbtc8723b2ant_ps_tdma(btcoexist,
1760 coex_dm->ps_tdma_du_adj_type = 9;
1761 } else if (max_interval == 2) {
1762 halbtc8723b2ant_ps_tdma(btcoexist,
1765 coex_dm->ps_tdma_du_adj_type = 10;
1766 } else if (max_interval == 3) {
1767 halbtc8723b2ant_ps_tdma(btcoexist,
1770 coex_dm->ps_tdma_du_adj_type = 11;
1772 halbtc8723b2ant_ps_tdma(btcoexist,
1775 coex_dm->ps_tdma_du_adj_type = 11;
1780 if (max_interval == 1) {
1781 halbtc8723b2ant_ps_tdma(btcoexist,
1784 coex_dm->ps_tdma_du_adj_type = 5;
1785 } else if (max_interval == 2) {
1786 halbtc8723b2ant_ps_tdma(btcoexist,
1789 coex_dm->ps_tdma_du_adj_type = 6;
1790 } else if (max_interval == 3) {
1791 halbtc8723b2ant_ps_tdma(btcoexist,
1794 coex_dm->ps_tdma_du_adj_type = 7;
1796 halbtc8723b2ant_ps_tdma(btcoexist,
1799 coex_dm->ps_tdma_du_adj_type = 7;
1802 if (max_interval == 1) {
1803 halbtc8723b2ant_ps_tdma(btcoexist,
1806 coex_dm->ps_tdma_du_adj_type = 1;
1807 } else if (max_interval == 2) {
1808 halbtc8723b2ant_ps_tdma(btcoexist,
1811 coex_dm->ps_tdma_du_adj_type = 2;
1812 } else if (max_interval == 3) {
1813 halbtc8723b2ant_ps_tdma(btcoexist,
1816 coex_dm->ps_tdma_du_adj_type = 3;
1818 halbtc8723b2ant_ps_tdma(btcoexist,
1821 coex_dm->ps_tdma_du_adj_type = 3;
1833 /*accquire the BT TRx retry count from BT_Info byte2*/
1834 retryCount = coex_sta->bt_retry_cnt;
1835 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL,
1836 "[BTCoex], retryCount = %d\n", retryCount);
1837 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL,
1838 "[BTCoex], up=%d, dn=%d, m=%d, n=%d, wait_count=%d\n",
1839 up, dn, m, n, wait_count);
1842 /* no retry in the last 2-second duration*/
1843 if (retryCount == 0) {
1856 BTC_PRINT(BTC_MSG_ALGORITHM,
1857 ALGO_TRACE_FW_DETAIL,
1858 "[BTCoex], Increase wifi "
1860 }/* <=3 retry in the last 2-second duration*/
1861 } else if (retryCount <= 3) {
1869 if (wait_count <= 2)
1882 BTC_PRINT(BTC_MSG_ALGORITHM,
1883 ALGO_TRACE_FW_DETAIL,
1884 "[BTCoex], Decrease wifi duration "
1885 "for retryCounter<3!!\n");
1888 if (wait_count == 1)
1901 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL,
1902 "[BTCoex], Decrease wifi duration "
1903 "for retryCounter>3!!\n");
1906 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL,
1907 "[BTCoex], max Interval = %d\n", max_interval);
1908 if (max_interval == 1) {
1910 BTC_PRINT(BTC_MSG_ALGORITHM,
1911 ALGO_TRACE_FW_DETAIL,
1912 "[BTCoex], TxPause = 1\n");
1914 if (coex_dm->cur_ps_tdma == 71) {
1915 halbtc8723b2ant_ps_tdma(btcoexist,
1918 coex_dm->ps_tdma_du_adj_type = 5;
1919 } else if (coex_dm->cur_ps_tdma == 1) {
1920 halbtc8723b2ant_ps_tdma(btcoexist,
1923 coex_dm->ps_tdma_du_adj_type = 5;
1924 } else if (coex_dm->cur_ps_tdma == 2) {
1925 halbtc8723b2ant_ps_tdma(btcoexist,
1928 coex_dm->ps_tdma_du_adj_type = 6;
1929 } else if (coex_dm->cur_ps_tdma == 3) {
1930 halbtc8723b2ant_ps_tdma(btcoexist,
1933 coex_dm->ps_tdma_du_adj_type = 7;
1934 } else if (coex_dm->cur_ps_tdma == 4) {
1935 halbtc8723b2ant_ps_tdma(btcoexist,
1938 coex_dm->ps_tdma_du_adj_type = 8;
1941 if (coex_dm->cur_ps_tdma == 9) {
1942 halbtc8723b2ant_ps_tdma(btcoexist,
1945 coex_dm->ps_tdma_du_adj_type = 13;
1946 } else if (coex_dm->cur_ps_tdma == 10) {
1947 halbtc8723b2ant_ps_tdma(btcoexist,
1950 coex_dm->ps_tdma_du_adj_type = 14;
1951 } else if (coex_dm->cur_ps_tdma == 11) {
1952 halbtc8723b2ant_ps_tdma(btcoexist,
1955 coex_dm->ps_tdma_du_adj_type = 15;
1956 } else if (coex_dm->cur_ps_tdma == 12) {
1957 halbtc8723b2ant_ps_tdma(btcoexist,
1960 coex_dm->ps_tdma_du_adj_type = 16;
1964 if (coex_dm->cur_ps_tdma == 5) {
1965 halbtc8723b2ant_ps_tdma(
1969 coex_dm->ps_tdma_du_adj_type =
1971 } else if (coex_dm->cur_ps_tdma == 6) {
1972 halbtc8723b2ant_ps_tdma(
1976 coex_dm->ps_tdma_du_adj_type =
1978 } else if (coex_dm->cur_ps_tdma == 7) {
1979 halbtc8723b2ant_ps_tdma(
1983 coex_dm->ps_tdma_du_adj_type =
1985 } else if (coex_dm->cur_ps_tdma == 13) {
1986 halbtc8723b2ant_ps_tdma(
1990 coex_dm->ps_tdma_du_adj_type =
1992 } else if(coex_dm->cur_ps_tdma == 14) {
1993 halbtc8723b2ant_ps_tdma(
1997 coex_dm->ps_tdma_du_adj_type =
1999 } else if(coex_dm->cur_ps_tdma == 15) {
2000 halbtc8723b2ant_ps_tdma(
2004 coex_dm->ps_tdma_du_adj_type =
2007 } else if (result == 1) {
2008 if (coex_dm->cur_ps_tdma == 8) {
2009 halbtc8723b2ant_ps_tdma(
2013 coex_dm->ps_tdma_du_adj_type =
2015 } else if (coex_dm->cur_ps_tdma == 7) {
2016 halbtc8723b2ant_ps_tdma(
2020 coex_dm->ps_tdma_du_adj_type =
2022 } else if(coex_dm->cur_ps_tdma == 6) {
2023 halbtc8723b2ant_ps_tdma(
2027 coex_dm->ps_tdma_du_adj_type =
2029 } else if(coex_dm->cur_ps_tdma == 16) {
2030 halbtc8723b2ant_ps_tdma(
2034 coex_dm->ps_tdma_du_adj_type =
2036 } else if(coex_dm->cur_ps_tdma == 15) {
2037 halbtc8723b2ant_ps_tdma(
2041 coex_dm->ps_tdma_du_adj_type =
2043 } else if(coex_dm->cur_ps_tdma == 14) {
2044 halbtc8723b2ant_ps_tdma(
2048 coex_dm->ps_tdma_du_adj_type =
2053 BTC_PRINT(BTC_MSG_ALGORITHM,
2054 ALGO_TRACE_FW_DETAIL,
2055 "[BTCoex], TxPause = 0\n");
2056 if (coex_dm->cur_ps_tdma == 5) {
2057 halbtc8723b2ant_ps_tdma(btcoexist,
2060 coex_dm->ps_tdma_du_adj_type = 71;
2061 } else if (coex_dm->cur_ps_tdma == 6) {
2062 halbtc8723b2ant_ps_tdma(btcoexist,
2065 coex_dm->ps_tdma_du_adj_type = 2;
2066 } else if (coex_dm->cur_ps_tdma == 7) {
2067 halbtc8723b2ant_ps_tdma(btcoexist,
2070 coex_dm->ps_tdma_du_adj_type = 3;
2071 } else if (coex_dm->cur_ps_tdma == 8) {
2072 halbtc8723b2ant_ps_tdma(btcoexist,
2075 coex_dm->ps_tdma_du_adj_type = 4;
2078 if (coex_dm->cur_ps_tdma == 13) {
2079 halbtc8723b2ant_ps_tdma(btcoexist,
2082 coex_dm->ps_tdma_du_adj_type = 9;
2083 } else if (coex_dm->cur_ps_tdma == 14) {
2084 halbtc8723b2ant_ps_tdma(btcoexist,
2087 coex_dm->ps_tdma_du_adj_type = 10;
2088 } else if (coex_dm->cur_ps_tdma == 15) {
2089 halbtc8723b2ant_ps_tdma(btcoexist,
2092 coex_dm->ps_tdma_du_adj_type = 11;
2093 } else if(coex_dm->cur_ps_tdma == 16) {
2094 halbtc8723b2ant_ps_tdma(btcoexist,
2097 coex_dm->ps_tdma_du_adj_type = 12;
2101 if (coex_dm->cur_ps_tdma == 71) {
2102 halbtc8723b2ant_ps_tdma(
2106 coex_dm->ps_tdma_du_adj_type =
2108 } else if (coex_dm->cur_ps_tdma == 1) {
2109 halbtc8723b2ant_ps_tdma(
2113 coex_dm->ps_tdma_du_adj_type =
2115 } else if (coex_dm->cur_ps_tdma == 2) {
2116 halbtc8723b2ant_ps_tdma(
2120 coex_dm->ps_tdma_du_adj_type =
2122 } else if(coex_dm->cur_ps_tdma == 3) {
2123 halbtc8723b2ant_ps_tdma(
2127 coex_dm->ps_tdma_du_adj_type =
2129 } else if(coex_dm->cur_ps_tdma == 9) {
2130 halbtc8723b2ant_ps_tdma(
2134 coex_dm->ps_tdma_du_adj_type =
2136 } else if (coex_dm->cur_ps_tdma == 10) {
2137 halbtc8723b2ant_ps_tdma(
2141 coex_dm->ps_tdma_du_adj_type =
2143 } else if (coex_dm->cur_ps_tdma == 11) {
2144 halbtc8723b2ant_ps_tdma(
2148 coex_dm->ps_tdma_du_adj_type =
2151 } else if (result == 1) {
2152 if (coex_dm->cur_ps_tdma == 4) {
2153 halbtc8723b2ant_ps_tdma(
2157 coex_dm->ps_tdma_du_adj_type =
2159 } else if (coex_dm->cur_ps_tdma == 3) {
2160 halbtc8723b2ant_ps_tdma(
2164 coex_dm->ps_tdma_du_adj_type =
2166 } else if (coex_dm->cur_ps_tdma == 2) {
2167 halbtc8723b2ant_ps_tdma(
2171 coex_dm->ps_tdma_du_adj_type =
2173 } else if (coex_dm->cur_ps_tdma == 1) {
2174 halbtc8723b2ant_ps_tdma(
2178 coex_dm->ps_tdma_du_adj_type =
2180 } else if (coex_dm->cur_ps_tdma == 12) {
2181 halbtc8723b2ant_ps_tdma(
2185 coex_dm->ps_tdma_du_adj_type =
2187 } else if (coex_dm->cur_ps_tdma == 11) {
2188 halbtc8723b2ant_ps_tdma(
2192 coex_dm->ps_tdma_du_adj_type =
2194 } else if (coex_dm->cur_ps_tdma == 10) {
2195 halbtc8723b2ant_ps_tdma(
2199 coex_dm->ps_tdma_du_adj_type =
2204 } else if(max_interval == 2) {
2206 BTC_PRINT(BTC_MSG_ALGORITHM,
2207 ALGO_TRACE_FW_DETAIL,
2208 "[BTCoex], TxPause = 1\n");
2209 if (coex_dm->cur_ps_tdma == 1) {
2210 halbtc8723b2ant_ps_tdma(btcoexist,
2213 coex_dm->ps_tdma_du_adj_type = 6;
2214 } else if (coex_dm->cur_ps_tdma == 2) {
2215 halbtc8723b2ant_ps_tdma(btcoexist,
2218 coex_dm->ps_tdma_du_adj_type = 6;
2219 } else if (coex_dm->cur_ps_tdma == 3) {
2220 halbtc8723b2ant_ps_tdma(btcoexist,
2223 coex_dm->ps_tdma_du_adj_type = 7;
2224 } else if (coex_dm->cur_ps_tdma == 4) {
2225 halbtc8723b2ant_ps_tdma(btcoexist,
2228 coex_dm->ps_tdma_du_adj_type = 8;
2230 if (coex_dm->cur_ps_tdma == 9) {
2231 halbtc8723b2ant_ps_tdma(btcoexist,
2234 coex_dm->ps_tdma_du_adj_type = 14;
2235 } else if (coex_dm->cur_ps_tdma == 10) {
2236 halbtc8723b2ant_ps_tdma(btcoexist,
2239 coex_dm->ps_tdma_du_adj_type = 14;
2240 } else if (coex_dm->cur_ps_tdma == 11) {
2241 halbtc8723b2ant_ps_tdma(btcoexist,
2244 coex_dm->ps_tdma_du_adj_type = 15;
2245 } else if (coex_dm->cur_ps_tdma == 12) {
2246 halbtc8723b2ant_ps_tdma(btcoexist,
2249 coex_dm->ps_tdma_du_adj_type = 16;
2252 if (coex_dm->cur_ps_tdma == 5) {
2253 halbtc8723b2ant_ps_tdma(
2257 coex_dm->ps_tdma_du_adj_type =
2259 } else if (coex_dm->cur_ps_tdma == 6) {
2260 halbtc8723b2ant_ps_tdma(
2264 coex_dm->ps_tdma_du_adj_type =
2266 } else if (coex_dm->cur_ps_tdma == 7) {
2267 halbtc8723b2ant_ps_tdma(
2271 coex_dm->ps_tdma_du_adj_type =
2273 } else if (coex_dm->cur_ps_tdma == 13) {
2274 halbtc8723b2ant_ps_tdma(
2278 coex_dm->ps_tdma_du_adj_type =
2280 } else if (coex_dm->cur_ps_tdma == 14) {
2281 halbtc8723b2ant_ps_tdma(
2285 coex_dm->ps_tdma_du_adj_type =
2287 } else if (coex_dm->cur_ps_tdma == 15) {
2288 halbtc8723b2ant_ps_tdma(
2292 coex_dm->ps_tdma_du_adj_type =
2295 } else if (result == 1) {
2296 if (coex_dm->cur_ps_tdma == 8) {
2297 halbtc8723b2ant_ps_tdma(
2301 coex_dm->ps_tdma_du_adj_type =
2303 } else if (coex_dm->cur_ps_tdma == 7) {
2304 halbtc8723b2ant_ps_tdma(
2308 coex_dm->ps_tdma_du_adj_type =
2310 } else if (coex_dm->cur_ps_tdma == 6) {
2311 halbtc8723b2ant_ps_tdma(
2315 coex_dm->ps_tdma_du_adj_type =
2317 } else if (coex_dm->cur_ps_tdma == 16) {
2318 halbtc8723b2ant_ps_tdma(
2322 coex_dm->ps_tdma_du_adj_type =
2324 } else if (coex_dm->cur_ps_tdma == 15) {
2325 halbtc8723b2ant_ps_tdma(
2329 coex_dm->ps_tdma_du_adj_type =
2331 } else if (coex_dm->cur_ps_tdma == 14) {
2332 halbtc8723b2ant_ps_tdma(
2336 coex_dm->ps_tdma_du_adj_type =
2341 BTC_PRINT(BTC_MSG_ALGORITHM,
2342 ALGO_TRACE_FW_DETAIL,
2343 "[BTCoex], TxPause = 0\n");
2344 if (coex_dm->cur_ps_tdma == 5) {
2345 halbtc8723b2ant_ps_tdma(btcoexist,
2348 coex_dm->ps_tdma_du_adj_type = 2;
2349 } else if (coex_dm->cur_ps_tdma == 6) {
2350 halbtc8723b2ant_ps_tdma(btcoexist,
2353 coex_dm->ps_tdma_du_adj_type = 2;
2354 } else if (coex_dm->cur_ps_tdma == 7) {
2355 halbtc8723b2ant_ps_tdma(btcoexist,
2358 coex_dm->ps_tdma_du_adj_type = 3;
2359 } else if (coex_dm->cur_ps_tdma == 8) {
2360 halbtc8723b2ant_ps_tdma(btcoexist,
2363 coex_dm->ps_tdma_du_adj_type = 4;
2365 if (coex_dm->cur_ps_tdma == 13) {
2366 halbtc8723b2ant_ps_tdma(btcoexist,
2369 coex_dm->ps_tdma_du_adj_type = 10;
2370 } else if (coex_dm->cur_ps_tdma == 14){
2371 halbtc8723b2ant_ps_tdma(btcoexist,
2374 coex_dm->ps_tdma_du_adj_type = 10;
2375 } else if (coex_dm->cur_ps_tdma == 15) {
2376 halbtc8723b2ant_ps_tdma(btcoexist,
2379 coex_dm->ps_tdma_du_adj_type = 11;
2380 } else if (coex_dm->cur_ps_tdma == 16) {
2381 halbtc8723b2ant_ps_tdma(btcoexist,
2384 coex_dm->ps_tdma_du_adj_type = 12;
2387 if (coex_dm->cur_ps_tdma == 1) {
2388 halbtc8723b2ant_ps_tdma(
2392 coex_dm->ps_tdma_du_adj_type =
2394 } else if (coex_dm->cur_ps_tdma == 2) {
2395 halbtc8723b2ant_ps_tdma(
2399 coex_dm->ps_tdma_du_adj_type =
2401 } else if (coex_dm->cur_ps_tdma == 3) {
2402 halbtc8723b2ant_ps_tdma(
2406 coex_dm->ps_tdma_du_adj_type =
2408 } else if (coex_dm->cur_ps_tdma == 9) {
2409 halbtc8723b2ant_ps_tdma(
2413 coex_dm->ps_tdma_du_adj_type =
2415 } else if (coex_dm->cur_ps_tdma == 10) {
2416 halbtc8723b2ant_ps_tdma(
2420 coex_dm->ps_tdma_du_adj_type =
2422 } else if (coex_dm->cur_ps_tdma == 11) {
2423 halbtc8723b2ant_ps_tdma(
2427 coex_dm->ps_tdma_du_adj_type =
2430 } else if (result == 1) {
2431 if (coex_dm->cur_ps_tdma == 4) {
2432 halbtc8723b2ant_ps_tdma(
2436 coex_dm->ps_tdma_du_adj_type =
2438 } else if (coex_dm->cur_ps_tdma == 3) {
2439 halbtc8723b2ant_ps_tdma(
2443 coex_dm->ps_tdma_du_adj_type =
2445 } else if (coex_dm->cur_ps_tdma == 2) {
2446 halbtc8723b2ant_ps_tdma(
2450 coex_dm->ps_tdma_du_adj_type =
2452 } else if (coex_dm->cur_ps_tdma == 12) {
2453 halbtc8723b2ant_ps_tdma(
2457 coex_dm->ps_tdma_du_adj_type =
2459 } else if (coex_dm->cur_ps_tdma == 11) {
2460 halbtc8723b2ant_ps_tdma(
2464 coex_dm->ps_tdma_du_adj_type =
2466 } else if (coex_dm->cur_ps_tdma == 10) {
2467 halbtc8723b2ant_ps_tdma(
2471 coex_dm->ps_tdma_du_adj_type =
2476 } else if (max_interval == 3) {
2478 BTC_PRINT(BTC_MSG_ALGORITHM,
2479 ALGO_TRACE_FW_DETAIL,
2480 "[BTCoex], TxPause = 1\n");
2481 if (coex_dm->cur_ps_tdma == 1) {
2482 halbtc8723b2ant_ps_tdma(btcoexist,
2485 coex_dm->ps_tdma_du_adj_type = 7;
2486 } else if (coex_dm->cur_ps_tdma == 2) {
2487 halbtc8723b2ant_ps_tdma(btcoexist,
2490 coex_dm->ps_tdma_du_adj_type = 7;
2491 } else if (coex_dm->cur_ps_tdma == 3) {
2492 halbtc8723b2ant_ps_tdma(btcoexist,
2495 coex_dm->ps_tdma_du_adj_type = 7;
2496 } else if (coex_dm->cur_ps_tdma == 4) {
2497 halbtc8723b2ant_ps_tdma(btcoexist,
2500 coex_dm->ps_tdma_du_adj_type = 8;
2502 if (coex_dm->cur_ps_tdma == 9) {
2503 halbtc8723b2ant_ps_tdma(btcoexist,
2506 coex_dm->ps_tdma_du_adj_type = 15;
2507 } else if (coex_dm->cur_ps_tdma == 10) {
2508 halbtc8723b2ant_ps_tdma(btcoexist,
2511 coex_dm->ps_tdma_du_adj_type = 15;
2512 } else if (coex_dm->cur_ps_tdma == 11) {
2513 halbtc8723b2ant_ps_tdma(btcoexist,
2516 coex_dm->ps_tdma_du_adj_type = 15;
2517 } else if (coex_dm->cur_ps_tdma == 12) {
2518 halbtc8723b2ant_ps_tdma(btcoexist,
2521 coex_dm->ps_tdma_du_adj_type = 16;
2524 if (coex_dm->cur_ps_tdma == 5) {
2525 halbtc8723b2ant_ps_tdma(
2529 coex_dm->ps_tdma_du_adj_type =
2531 } else if (coex_dm->cur_ps_tdma == 6) {
2532 halbtc8723b2ant_ps_tdma(
2536 coex_dm->ps_tdma_du_adj_type =
2538 } else if (coex_dm->cur_ps_tdma == 7) {
2539 halbtc8723b2ant_ps_tdma(
2543 coex_dm->ps_tdma_du_adj_type =
2545 } else if (coex_dm->cur_ps_tdma == 13) {
2546 halbtc8723b2ant_ps_tdma(
2550 coex_dm->ps_tdma_du_adj_type =
2552 } else if (coex_dm->cur_ps_tdma == 14) {
2553 halbtc8723b2ant_ps_tdma(
2557 coex_dm->ps_tdma_du_adj_type =
2559 } else if (coex_dm->cur_ps_tdma == 15) {
2560 halbtc8723b2ant_ps_tdma(
2564 coex_dm->ps_tdma_du_adj_type =
2567 } else if (result == 1) {
2568 if (coex_dm->cur_ps_tdma == 8) {
2569 halbtc8723b2ant_ps_tdma(
2573 coex_dm->ps_tdma_du_adj_type =
2575 } else if (coex_dm->cur_ps_tdma == 7) {
2576 halbtc8723b2ant_ps_tdma(
2580 coex_dm->ps_tdma_du_adj_type =
2582 } else if (coex_dm->cur_ps_tdma == 6) {
2583 halbtc8723b2ant_ps_tdma(
2587 coex_dm->ps_tdma_du_adj_type =
2589 } else if (coex_dm->cur_ps_tdma == 16) {
2590 halbtc8723b2ant_ps_tdma(
2594 coex_dm->ps_tdma_du_adj_type =
2596 } else if (coex_dm->cur_ps_tdma == 15) {
2597 halbtc8723b2ant_ps_tdma(
2601 coex_dm->ps_tdma_du_adj_type =
2603 } else if (coex_dm->cur_ps_tdma == 14) {
2604 halbtc8723b2ant_ps_tdma(
2608 coex_dm->ps_tdma_du_adj_type =
2613 BTC_PRINT(BTC_MSG_ALGORITHM,
2614 ALGO_TRACE_FW_DETAIL,
2615 "[BTCoex], TxPause = 0\n");
2616 if (coex_dm->cur_ps_tdma == 5) {
2617 halbtc8723b2ant_ps_tdma(btcoexist,
2620 coex_dm->ps_tdma_du_adj_type = 3;
2621 } else if (coex_dm->cur_ps_tdma == 6) {
2622 halbtc8723b2ant_ps_tdma(btcoexist,
2625 coex_dm->ps_tdma_du_adj_type = 3;
2626 } else if (coex_dm->cur_ps_tdma == 7) {
2627 halbtc8723b2ant_ps_tdma(btcoexist,
2630 coex_dm->ps_tdma_du_adj_type = 3;
2631 } else if (coex_dm->cur_ps_tdma == 8) {
2632 halbtc8723b2ant_ps_tdma(btcoexist,
2635 coex_dm->ps_tdma_du_adj_type = 4;
2637 if (coex_dm->cur_ps_tdma == 13) {
2638 halbtc8723b2ant_ps_tdma(btcoexist,
2641 coex_dm->ps_tdma_du_adj_type = 11;
2642 } else if (coex_dm->cur_ps_tdma == 14) {
2643 halbtc8723b2ant_ps_tdma(btcoexist,
2646 coex_dm->ps_tdma_du_adj_type = 11;
2647 } else if (coex_dm->cur_ps_tdma == 15) {
2648 halbtc8723b2ant_ps_tdma(btcoexist,
2651 coex_dm->ps_tdma_du_adj_type = 11;
2652 } else if (coex_dm->cur_ps_tdma == 16) {
2653 halbtc8723b2ant_ps_tdma(btcoexist,
2656 coex_dm->ps_tdma_du_adj_type = 12;
2659 if (coex_dm->cur_ps_tdma == 1) {
2660 halbtc8723b2ant_ps_tdma(
2664 coex_dm->ps_tdma_du_adj_type =
2666 } else if (coex_dm->cur_ps_tdma == 2) {
2667 halbtc8723b2ant_ps_tdma(
2671 coex_dm->ps_tdma_du_adj_type =
2673 } else if (coex_dm->cur_ps_tdma == 3) {
2674 halbtc8723b2ant_ps_tdma(
2678 coex_dm->ps_tdma_du_adj_type =
2680 } else if (coex_dm->cur_ps_tdma == 9) {
2681 halbtc8723b2ant_ps_tdma(
2685 coex_dm->ps_tdma_du_adj_type =
2687 } else if (coex_dm->cur_ps_tdma == 10) {
2688 halbtc8723b2ant_ps_tdma(
2692 coex_dm->ps_tdma_du_adj_type =
2694 } else if (coex_dm->cur_ps_tdma == 11) {
2695 halbtc8723b2ant_ps_tdma(
2699 coex_dm->ps_tdma_du_adj_type =
2702 } else if (result == 1) {
2703 if (coex_dm->cur_ps_tdma == 4) {
2704 halbtc8723b2ant_ps_tdma(
2708 coex_dm->ps_tdma_du_adj_type =
2710 } else if (coex_dm->cur_ps_tdma == 3) {
2711 halbtc8723b2ant_ps_tdma(
2715 coex_dm->ps_tdma_du_adj_type =
2717 } else if (coex_dm->cur_ps_tdma == 2) {
2718 halbtc8723b2ant_ps_tdma(
2722 coex_dm->ps_tdma_du_adj_type =
2724 } else if (coex_dm->cur_ps_tdma == 12) {
2725 halbtc8723b2ant_ps_tdma(
2729 coex_dm->ps_tdma_du_adj_type =
2731 } else if (coex_dm->cur_ps_tdma == 11) {
2732 halbtc8723b2ant_ps_tdma(
2736 coex_dm->ps_tdma_du_adj_type =
2738 } else if (coex_dm->cur_ps_tdma == 10) {
2739 halbtc8723b2ant_ps_tdma(
2743 coex_dm->ps_tdma_du_adj_type =
2751 /*if current PsTdma not match with the recorded one (when scan, dhcp..),
2752 *then we have to adjust it back to the previous record one.*/
2753 if (coex_dm->cur_ps_tdma != coex_dm->ps_tdma_du_adj_type) {
2754 bool scan = false, link = false, roam = false;
2755 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL,
2756 "[BTCoex], PsTdma type dismatch!!!, "
2757 "curPsTdma=%d, recordPsTdma=%d\n",
2758 coex_dm->cur_ps_tdma, coex_dm->ps_tdma_du_adj_type);
2760 btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_SCAN, &scan);
2761 btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_LINK, &link);
2762 btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_ROAM, &roam);
2764 if (!scan && !link && !roam)
2765 halbtc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, true,
2766 coex_dm->ps_tdma_du_adj_type);
2768 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL,
2769 "[BTCoex], roaming/link/scan is under"
2770 " progress, will adjust next time!!!\n");
2774 /* SCO only or SCO+PAN(HS) */
2775 void halbtc8723b2ant_action_sco(struct btc_coexist *btcoexist)
2780 wifi_rssi_state = halbtc8723b2ant_wifi_rssi_state(btcoexist,
2783 btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
2785 halbtc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 4);
2787 if (halbtc8723b2ant_need_to_dec_bt_pwr(btcoexist))
2788 halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, true);
2790 halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false);
2792 btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
2794 /*for SCO quality at 11b/g mode*/
2795 if (BTC_WIFI_BW_LEGACY == wifi_bw)
2796 halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 2);
2797 else /*for SCO quality & wifi performance balance at 11n mode*/
2798 halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 8);
2800 /*for voice quality */
2801 halbtc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 0);
2804 if (BTC_WIFI_BW_HT40 == wifi_bw) {
2805 if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
2806 (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
2807 halbtc8723b2ant_sw_mechanism1(btcoexist, true, true,
2809 halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,
2812 halbtc8723b2ant_sw_mechanism1(btcoexist, true, true,
2814 halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,
2818 if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
2819 (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
2820 halbtc8723b2ant_sw_mechanism1(btcoexist, false, true,
2822 halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,
2825 halbtc8723b2ant_sw_mechanism1(btcoexist, false, true,
2827 halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,
2834 void halbtc8723b2ant_action_hid(struct btc_coexist *btcoexist)
2836 u8 wifi_rssi_state, bt_rssi_state;
2839 wifi_rssi_state = halbtc8723b2ant_wifi_rssi_state(btcoexist,
2841 bt_rssi_state = halbtc8723b2ant_bt_rssi_state(2, 29, 0);
2843 btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
2845 halbtc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
2847 if (halbtc8723b2ant_need_to_dec_bt_pwr(btcoexist))
2848 halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, true);
2850 halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false);
2852 btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
2854 if (BTC_WIFI_BW_LEGACY == wifi_bw) /*/for HID at 11b/g mode*/
2855 halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 7);
2856 else /*for HID quality & wifi performance balance at 11n mode*/
2857 halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 9);
2859 if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||
2860 (bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH))
2861 halbtc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 9);
2863 halbtc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 13);
2866 if (BTC_WIFI_BW_HT40 == wifi_bw) {
2867 if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
2868 (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
2869 halbtc8723b2ant_sw_mechanism1(btcoexist, true, true,
2871 halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,
2874 halbtc8723b2ant_sw_mechanism1(btcoexist, true, true,
2876 halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,
2880 if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
2881 (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
2882 halbtc8723b2ant_sw_mechanism1(btcoexist, false, true,
2884 halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,
2887 halbtc8723b2ant_sw_mechanism1(btcoexist, false, true,
2889 halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,
2895 /*A2DP only / PAN(EDR) only/ A2DP+PAN(HS)*/
2896 void halbtc8723b2ant_action_a2dp(struct btc_coexist *btcoexist)
2898 u8 wifi_rssi_state, wifi_rssi_state1, bt_rssi_state;
2902 wifi_rssi_state = halbtc8723b2ant_wifi_rssi_state(btcoexist,
2904 wifi_rssi_state1 = halbtc8723b2ant_wifi_rssi_state(btcoexist,
2906 bt_rssi_state = halbtc8723b2ant_bt_rssi_state(2, 29, 0);
2908 btcoexist->btc_get(btcoexist, BTC_GET_U1_AP_NUM, &ap_num);
2910 /* define the office environment */
2911 /* driver don't know AP num in Linux, so we will never enter this if */
2912 if (ap_num >= 10 && BTC_RSSI_HIGH(wifi_rssi_state1)) {
2913 btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff,
2915 halbtc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
2916 halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false);
2917 halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 0);
2918 halbtc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);
2921 btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
2922 if (BTC_WIFI_BW_HT40 == wifi_bw) {
2923 halbtc8723b2ant_sw_mechanism1(btcoexist, true, false,
2925 halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,
2928 halbtc8723b2ant_sw_mechanism1(btcoexist, false, false,
2930 halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,
2936 btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
2938 halbtc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
2940 if (halbtc8723b2ant_need_to_dec_bt_pwr(btcoexist))
2941 halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, true);
2943 halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false);
2945 halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 7);
2947 if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||
2948 (bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH))
2949 halbtc8723b2ant_tdma_duration_adjust(btcoexist,false, false, 1);
2951 halbtc8723b2ant_tdma_duration_adjust(btcoexist,false, true, 1);
2954 btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
2955 if (BTC_WIFI_BW_HT40 == wifi_bw) {
2956 if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
2957 (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
2958 halbtc8723b2ant_sw_mechanism1(btcoexist, true, false,
2960 halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,
2963 halbtc8723b2ant_sw_mechanism1(btcoexist, true, false,
2965 halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,
2969 if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
2970 (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
2971 halbtc8723b2ant_sw_mechanism1(btcoexist, false, false,
2973 halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,
2976 halbtc8723b2ant_sw_mechanism1(btcoexist, false, false,
2978 halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,
2984 void halbtc8723b2ant_action_a2dp_pan_hs(struct btc_coexist *btcoexist)
2989 wifi_rssi_state = halbtc8723b2ant_wifi_rssi_state(btcoexist,
2992 btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
2994 halbtc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
2996 if (halbtc8723b2ant_need_to_dec_bt_pwr(btcoexist))
2997 halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, true);
2999 halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false);
3001 halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 7);
3003 halbtc8723b2ant_tdma_duration_adjust(btcoexist, false, true, 2);
3006 btcoexist->btc_get(btcoexist,
3007 BTC_GET_U4_WIFI_BW, &wifi_bw);
3008 if (BTC_WIFI_BW_HT40 == wifi_bw) {
3009 if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
3010 (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
3011 halbtc8723b2ant_sw_mechanism1(btcoexist, true, false,
3013 halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,
3016 halbtc8723b2ant_sw_mechanism1(btcoexist, true, false,
3018 halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,
3022 if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
3023 (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
3024 halbtc8723b2ant_sw_mechanism1(btcoexist, false, false,
3026 halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,
3029 halbtc8723b2ant_sw_mechanism1(btcoexist, false, false,
3031 halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,
3037 void halbtc8723b2ant_action_pan_edr(struct btc_coexist *btcoexist)
3039 u8 wifi_rssi_state, bt_rssi_state;
3042 wifi_rssi_state = halbtc8723b2ant_wifi_rssi_state(btcoexist,
3044 bt_rssi_state = halbtc8723b2ant_bt_rssi_state(2, 29, 0);
3046 btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
3048 halbtc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
3050 if (halbtc8723b2ant_need_to_dec_bt_pwr(btcoexist))
3051 halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, true);
3053 halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false);
3055 halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 10);
3057 if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||
3058 (bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH))
3059 halbtc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 1);
3061 halbtc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 5);
3064 btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
3065 if (BTC_WIFI_BW_HT40 == wifi_bw) {
3066 if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
3067 (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
3068 halbtc8723b2ant_sw_mechanism1(btcoexist, true, false,
3070 halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,
3073 halbtc8723b2ant_sw_mechanism1(btcoexist, true, false,
3075 halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,
3079 if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
3080 (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
3081 halbtc8723b2ant_sw_mechanism1(btcoexist, false, false,
3083 halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,
3086 halbtc8723b2ant_sw_mechanism1(btcoexist, false, false,
3088 halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,
3096 void halbtc8723b2ant_action_pan_hs(struct btc_coexist *btcoexist)
3101 wifi_rssi_state = halbtc8723b2ant_wifi_rssi_state(btcoexist,
3104 btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
3106 halbtc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
3108 if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
3109 (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH) )
3110 halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, true);
3112 halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false);
3114 halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 7);
3116 halbtc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);
3118 btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
3119 if (BTC_WIFI_BW_HT40 == wifi_bw) {
3120 if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
3121 (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
3122 halbtc8723b2ant_sw_mechanism1(btcoexist, true, false,
3124 halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,
3127 halbtc8723b2ant_sw_mechanism1(btcoexist, true, false,
3129 halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,
3133 if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
3134 (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
3135 halbtc8723b2ant_sw_mechanism1(btcoexist, false, false,
3137 halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,
3140 halbtc8723b2ant_sw_mechanism1(btcoexist, false, false,
3142 halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,
3149 void halbtc8723b2ant_action_pan_edr_a2dp(struct btc_coexist *btcoexist)
3151 u8 wifi_rssi_state, bt_rssi_state;
3154 wifi_rssi_state = halbtc8723b2ant_wifi_rssi_state(btcoexist,
3156 bt_rssi_state = halbtc8723b2ant_bt_rssi_state(2, 29, 0);
3158 btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
3160 halbtc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
3162 if (halbtc8723b2ant_need_to_dec_bt_pwr(btcoexist))
3163 halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, true);
3165 halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false);
3167 btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
3169 if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||
3170 (bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
3171 halbtc8723b2ant_coex_table_with_type(btcoexist,NORMAL_EXEC, 12);
3172 if (BTC_WIFI_BW_HT40 == wifi_bw)
3173 halbtc8723b2ant_tdma_duration_adjust(btcoexist, false,
3176 halbtc8723b2ant_tdma_duration_adjust(btcoexist, false,
3179 halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 7);
3180 halbtc8723b2ant_tdma_duration_adjust(btcoexist, false, true, 3);
3184 if (BTC_WIFI_BW_HT40 == wifi_bw) {
3185 if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
3186 (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
3187 halbtc8723b2ant_sw_mechanism1(btcoexist, true, false,
3189 halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,
3192 halbtc8723b2ant_sw_mechanism1(btcoexist, true, false,
3194 halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,
3198 if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
3199 (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
3200 halbtc8723b2ant_sw_mechanism1(btcoexist, false, false,
3202 halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,
3205 halbtc8723b2ant_sw_mechanism1(btcoexist, false, false,
3207 halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,
3213 void halbtc8723b2ant_action_pan_edr_hid(struct btc_coexist *btcoexist)
3215 u8 wifi_rssi_state, bt_rssi_state;
3218 wifi_rssi_state = halbtc8723b2ant_wifi_rssi_state(btcoexist,
3220 bt_rssi_state = halbtc8723b2ant_bt_rssi_state(2, 29, 0);
3221 btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
3223 if (halbtc8723b2ant_need_to_dec_bt_pwr(btcoexist))
3224 halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, true);
3226 halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false);
3228 if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||
3229 (bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
3230 if (BTC_WIFI_BW_HT40 == wifi_bw) {
3231 halbtc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC,
3233 halbtc8723b2ant_coex_table_with_type(btcoexist,
3235 btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1,
3238 halbtc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC,
3240 halbtc8723b2ant_coex_table_with_type(btcoexist,
3242 btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1,
3245 halbtc8723b2ant_tdma_duration_adjust(btcoexist, true, false, 2);
3247 halbtc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
3248 halbtc8723b2ant_coex_table_with_type(btcoexist,NORMAL_EXEC, 11);
3249 btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff,
3251 halbtc8723b2ant_tdma_duration_adjust(btcoexist, true, true, 2);
3255 if (BTC_WIFI_BW_HT40 == wifi_bw) {
3256 if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
3257 (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
3258 halbtc8723b2ant_sw_mechanism1(btcoexist, true, true,
3260 halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,
3263 halbtc8723b2ant_sw_mechanism1(btcoexist, true, true,
3265 halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,
3269 if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
3270 (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)){
3271 halbtc8723b2ant_sw_mechanism1(btcoexist, false, true,
3273 halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,
3276 halbtc8723b2ant_sw_mechanism1(btcoexist, false, true,
3278 halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,
3284 /* HID+A2DP+PAN(EDR) */
3285 void halbtc8723b2ant_action_hid_a2dp_pan_edr(struct btc_coexist *btcoexist)
3287 u8 wifi_rssi_state, bt_rssi_state;
3290 wifi_rssi_state = halbtc8723b2ant_wifi_rssi_state(btcoexist,
3292 bt_rssi_state = halbtc8723b2ant_bt_rssi_state(2, 29, 0);
3294 btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
3296 halbtc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
3298 if (halbtc8723b2ant_need_to_dec_bt_pwr(btcoexist))
3299 halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, true);
3301 halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false);
3303 btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
3305 halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 7);
3307 if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||
3308 (bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
3309 if (BTC_WIFI_BW_HT40 == wifi_bw)
3310 halbtc8723b2ant_tdma_duration_adjust(btcoexist, true,
3313 halbtc8723b2ant_tdma_duration_adjust(btcoexist, true,
3316 halbtc8723b2ant_tdma_duration_adjust(btcoexist, true, true, 3);
3320 if (BTC_WIFI_BW_HT40 == wifi_bw) {
3321 if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
3322 (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
3323 halbtc8723b2ant_sw_mechanism1(btcoexist, true, true,
3325 halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,
3328 halbtc8723b2ant_sw_mechanism1(btcoexist, true, true,
3330 halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,
3334 if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
3335 (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
3336 halbtc8723b2ant_sw_mechanism1(btcoexist, false, true,
3338 halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,
3341 halbtc8723b2ant_sw_mechanism1(btcoexist, false, true,
3343 halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,
3349 void halbtc8723b2ant_action_hid_a2dp(struct btc_coexist *btcoexist)
3351 u8 wifi_rssi_state, bt_rssi_state;
3354 wifi_rssi_state = halbtc8723b2ant_wifi_rssi_state(btcoexist,
3356 bt_rssi_state = halbtc8723b2ant_bt_rssi_state(2, 29, 0);
3358 btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
3360 halbtc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
3362 if (halbtc8723b2ant_need_to_dec_bt_pwr(btcoexist))
3363 halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, true);
3365 halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false);
3367 btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
3369 halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 7);
3371 if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||
3372 (bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH))
3373 halbtc8723b2ant_tdma_duration_adjust(btcoexist, true, false, 2);
3375 halbtc8723b2ant_tdma_duration_adjust(btcoexist, true, true, 2);
3378 if (BTC_WIFI_BW_HT40 == wifi_bw) {
3379 if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
3380 (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
3381 halbtc8723b2ant_sw_mechanism1(btcoexist, true, true,
3383 halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,
3386 halbtc8723b2ant_sw_mechanism1(btcoexist, true, true,
3388 halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,
3392 if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
3393 (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
3394 halbtc8723b2ant_sw_mechanism1(btcoexist, false, true,
3396 halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,
3399 halbtc8723b2ant_sw_mechanism1(btcoexist, false, true,
3401 halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,
3407 void halbtc8723b2ant_run_coexist_mechanism(struct btc_coexist *btcoexist)
3411 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
3412 "[BTCoex], RunCoexistMechanism()===>\n");
3414 if (btcoexist->manual_control) {
3415 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
3416 "[BTCoex], RunCoexistMechanism(), "
3417 "return for Manual CTRL <===\n");
3421 if (coex_sta->under_ips) {
3422 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
3423 "[BTCoex], wifi is under IPS !!!\n");
3427 algorithm = halbtc8723b2ant_action_algorithm(btcoexist);
3428 if (coex_sta->c2h_bt_inquiry_page &&
3429 (BT_8723B_2ANT_COEX_ALGO_PANHS != algorithm)) {
3430 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
3431 "[BTCoex], BT is under inquiry/page scan !!\n");
3432 halbtc8723b2ant_action_bt_inquiry(btcoexist);
3435 if (coex_dm->need_recover_0x948) {
3436 coex_dm->need_recover_0x948 = false;
3437 btcoexist->btc_write_2byte(btcoexist, 0x948,
3438 coex_dm->backup_0x948);
3442 coex_dm->cur_algorithm = algorithm;
3443 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE, "[BTCoex], Algorithm = %d \n",
3444 coex_dm->cur_algorithm);
3446 if (halbtc8723b2ant_is_common_action(btcoexist)) {
3447 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
3448 "[BTCoex], Action 2-Ant common.\n");
3449 coex_dm->auto_tdma_adjust = false;
3451 if (coex_dm->cur_algorithm != coex_dm->pre_algorithm) {
3452 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
3453 "[BTCoex], preAlgorithm=%d, "
3454 "curAlgorithm=%d\n", coex_dm->pre_algorithm,
3455 coex_dm->cur_algorithm);
3456 coex_dm->auto_tdma_adjust = false;
3458 switch (coex_dm->cur_algorithm) {
3459 case BT_8723B_2ANT_COEX_ALGO_SCO:
3460 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
3461 "[BTCoex], Action 2-Ant, algorithm = SCO.\n");
3462 halbtc8723b2ant_action_sco(btcoexist);
3464 case BT_8723B_2ANT_COEX_ALGO_HID:
3465 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
3466 "[BTCoex], Action 2-Ant, algorithm = HID.\n");
3467 halbtc8723b2ant_action_hid(btcoexist);
3469 case BT_8723B_2ANT_COEX_ALGO_A2DP:
3470 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
3471 "[BTCoex], Action 2-Ant, "
3472 "algorithm = A2DP.\n");
3473 halbtc8723b2ant_action_a2dp(btcoexist);
3475 case BT_8723B_2ANT_COEX_ALGO_A2DP_PANHS:
3476 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
3477 "[BTCoex], Action 2-Ant, "
3478 "algorithm = A2DP+PAN(HS).\n");
3479 halbtc8723b2ant_action_a2dp_pan_hs(btcoexist);
3481 case BT_8723B_2ANT_COEX_ALGO_PANEDR:
3482 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
3483 "[BTCoex], Action 2-Ant, "
3484 "algorithm = PAN(EDR).\n");
3485 halbtc8723b2ant_action_pan_edr(btcoexist);
3487 case BT_8723B_2ANT_COEX_ALGO_PANHS:
3488 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
3489 "[BTCoex], Action 2-Ant, "
3490 "algorithm = HS mode.\n");
3491 halbtc8723b2ant_action_pan_hs(btcoexist);
3493 case BT_8723B_2ANT_COEX_ALGO_PANEDR_A2DP:
3494 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
3495 "[BTCoex], Action 2-Ant, "
3496 "algorithm = PAN+A2DP.\n");
3497 halbtc8723b2ant_action_pan_edr_a2dp(btcoexist);
3499 case BT_8723B_2ANT_COEX_ALGO_PANEDR_HID:
3500 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
3501 "[BTCoex], Action 2-Ant, "
3502 "algorithm = PAN(EDR)+HID.\n");
3503 halbtc8723b2ant_action_pan_edr_hid(btcoexist);
3505 case BT_8723B_2ANT_COEX_ALGO_HID_A2DP_PANEDR:
3506 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
3507 "[BTCoex], Action 2-Ant, "
3508 "algorithm = HID+A2DP+PAN.\n");
3509 halbtc8723b2ant_action_hid_a2dp_pan_edr(btcoexist);
3511 case BT_8723B_2ANT_COEX_ALGO_HID_A2DP:
3512 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
3513 "[BTCoex], Action 2-Ant, "
3514 "algorithm = HID+A2DP.\n");
3515 halbtc8723b2ant_action_hid_a2dp(btcoexist);
3518 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
3519 "[BTCoex], Action 2-Ant, "
3520 "algorithm = coexist All Off!!\n");
3521 halbtc8723b2ant_coex_alloff(btcoexist);
3524 coex_dm->pre_algorithm = coex_dm->cur_algorithm;
3528 void halbtc8723b2ant_wifioff_hwcfg(struct btc_coexist *btcoexist)
3530 /* set wlan_act to low */
3531 btcoexist->btc_write_1byte(btcoexist, 0x76e, 0x4);
3532 /* Force GNT_BT to High */
3533 btcoexist->btc_write_1byte_bitmask(btcoexist, 0x765, 0x18, 0x3);
3534 /* BT select s0/s1 is controlled by BT */
3535 btcoexist->btc_write_1byte_bitmask(btcoexist, 0x67, 0x20, 0x0);
3538 /*********************************************************************
3539 * work around function start with wa_halbtc8723b2ant_
3540 *********************************************************************/
3541 /*********************************************************************
3542 * extern function start with EXhalbtc8723b2ant_
3543 *********************************************************************/
3544 void ex_halbtc8723b2ant_init_hwconfig(struct btc_coexist *btcoexist)
3548 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT,
3549 "[BTCoex], 2Ant Init HW Config!!\n");
3550 coex_dm->bt_rf0x1e_backup =
3551 btcoexist->btc_get_rf_reg(btcoexist, BTC_RF_A, 0x1e, 0xfffff);
3553 /* 0x790[5:0]=0x5 */
3554 u8tmp = btcoexist->btc_read_1byte(btcoexist, 0x790);
3557 btcoexist->btc_write_1byte(btcoexist, 0x790, u8tmp);
3561 halbtc8723b2ant_set_ant_path(btcoexist, BTC_ANT_WIFI_AT_MAIN,
3568 halbtc8723b2ant_coex_table_with_type(btcoexist, FORCE_EXEC, 0);
3570 /* Enable counter statistics */
3571 /*0x76e[3] =1, WLAN_Act control by PTA*/
3572 btcoexist->btc_write_1byte(btcoexist, 0x76e, 0xc);
3573 btcoexist->btc_write_1byte(btcoexist, 0x778, 0x3);
3574 btcoexist->btc_write_1byte_bitmask(btcoexist, 0x40, 0x20, 0x1);
3577 void ex_halbtc8723b2ant_init_coex_dm(struct btc_coexist *btcoexist)
3579 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT,
3580 "[BTCoex], Coex Mechanism Init!!\n");
3581 halbtc8723b2ant_init_coex_dm(btcoexist);
3584 void ex_halbtc8723b2ant_display_coex_info(struct btc_coexist *btcoexist)
3586 struct btc_board_info *board_info = &btcoexist->board_info;
3587 struct btc_stack_info *stack_info = &btcoexist->stack_info;
3588 struct btc_bt_link_info* bt_link_info = &btcoexist->bt_link_info;
3589 u8 *cli_buf = btcoexist->cli_buf;
3590 u8 u8tmp[4], i, bt_info_ext, ps_tdma_case=0;
3592 bool roam = false, scan = false;
3593 bool link = false, wifi_under_5g = false;
3594 bool bt_hs_on = false, wifi_busy = false;
3595 s32 wifi_rssi = 0, bt_hs_rssi = 0;
3596 u32 wifi_bw, wifi_traffic_dir, fa_ofdm, fa_cck;
3597 u8 wifi_dot11_chnl, wifi_hs_chnl;
3598 u32 fw_ver = 0, bt_patch_ver = 0;
3601 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE,
3602 "\r\n ============[BT Coexist info]============");
3605 if (btcoexist->manual_control) {
3606 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE,
3607 "\r\n ==========[Under Manual Control]============");
3609 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE,
3610 "\r\n ==========================================");
3614 if (!board_info->bt_exist) {
3615 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n BT not exists !!!");
3620 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d ",
3621 "Ant PG number/ Ant mechanism:",
3622 board_info->pg_ant_num, board_info->btdm_ant_num);
3625 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s / %d",
3626 "BT stack/ hci ext ver",
3627 ((stack_info->profile_notified)? "Yes":"No"),
3628 stack_info->hci_version);
3631 btcoexist->btc_get(btcoexist, BTC_GET_U4_BT_PATCH_VER, &bt_patch_ver);
3632 btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_FW_VER, &fw_ver);
3633 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE,
3634 "\r\n %-35s = %d_%x/ 0x%x/ 0x%x(%d)",
3635 "CoexVer/ fw_ver/ PatchVer",
3636 glcoex_ver_date_8723b_2ant, glcoex_ver_8723b_2ant,
3637 fw_ver, bt_patch_ver, bt_patch_ver);
3640 btcoexist->btc_get(btcoexist, BTC_GET_BL_HS_OPERATION, &bt_hs_on);
3641 btcoexist->btc_get(btcoexist, BTC_GET_U1_WIFI_DOT11_CHNL,
3643 btcoexist->btc_get(btcoexist, BTC_GET_U1_WIFI_HS_CHNL, &wifi_hs_chnl);
3645 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d(%d)",
3646 "Dot11 channel / HsChnl(HsMode)",
3647 wifi_dot11_chnl, wifi_hs_chnl, bt_hs_on);
3650 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = %02x %02x %02x ",
3651 "H2C Wifi inform bt chnl Info", coex_dm->wifi_chnl_info[0],
3652 coex_dm->wifi_chnl_info[1], coex_dm->wifi_chnl_info[2]);
3655 btcoexist->btc_get(btcoexist, BTC_GET_S4_WIFI_RSSI, &wifi_rssi);
3656 btcoexist->btc_get(btcoexist, BTC_GET_S4_HS_RSSI, &bt_hs_rssi);
3657 btcoexist->btc_get(btcoexist, BTC_GET_U1_AP_NUM, &ap_num);
3658 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d/ %d",
3659 "Wifi rssi/ HS rssi/ AP#", wifi_rssi, bt_hs_rssi, ap_num);
3662 btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_SCAN, &scan);
3663 btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_LINK, &link);
3664 btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_ROAM, &roam);
3665 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d/ %d ",
3666 "Wifi link/ roam/ scan", link, roam, scan);
3669 btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_UNDER_5G, &wifi_under_5g);
3670 btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
3671 btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_BUSY, &wifi_busy);
3672 btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_TRAFFIC_DIRECTION,
3674 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s / %s/ %s ",
3675 "Wifi status", (wifi_under_5g? "5G":"2.4G"),
3676 ((BTC_WIFI_BW_LEGACY == wifi_bw)? "Legacy":
3677 (((BTC_WIFI_BW_HT40 == wifi_bw)? "HT40":"HT20"))),
3678 ((!wifi_busy)? "idle":
3679 ((BTC_WIFI_TRAFFIC_TX ==wifi_traffic_dir)?\
3680 "uplink":"downlink")));
3686 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d / %d / %d",
3688 bt_link_info->sco_exist, bt_link_info->hid_exist,
3689 bt_link_info->pan_exist, bt_link_info->a2dp_exist);
3691 btcoexist->btc_disp_dbg_msg(btcoexist, BTC_DBG_DISP_BT_LINK_INFO);
3693 bt_info_ext = coex_sta->bt_info_ext;
3694 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s",
3695 "BT Info A2DP rate",
3696 (bt_info_ext&BIT0)? "Basic rate":"EDR rate");
3699 for (i=0; i<BT_INFO_SRC_8723B_2ANT_MAX; i++) {
3700 if (coex_sta->bt_info_c2h_cnt[i]) {
3701 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE,
3702 "\r\n %-35s = %02x %02x %02x "
3703 "%02x %02x %02x %02x(%d)",
3704 glbt_info_src_8723b_2ant[i], \
3705 coex_sta->bt_info_c2h[i][0],
3706 coex_sta->bt_info_c2h[i][1],
3707 coex_sta->bt_info_c2h[i][2],
3708 coex_sta->bt_info_c2h[i][3],
3709 coex_sta->bt_info_c2h[i][4],
3710 coex_sta->bt_info_c2h[i][5],
3711 coex_sta->bt_info_c2h[i][6],
3712 coex_sta->bt_info_c2h_cnt[i]);
3717 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s/%s",
3718 "PS state, IPS/LPS",
3719 ((coex_sta->under_ips? "IPS ON":"IPS OFF")),
3720 ((coex_sta->under_lps? "LPS ON":"LPS OFF")));
3722 btcoexist->btc_disp_dbg_msg(btcoexist, BTC_DBG_DISP_FW_PWR_MODE_CMD);
3725 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE,
3726 "\r\n %-35s", "============[Sw mechanism]============");
3728 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d/ %d ",
3729 "SM1[ShRf/ LpRA/ LimDig]", coex_dm->cur_rf_rx_lpf_shrink,
3730 coex_dm->cur_low_penalty_ra, coex_dm->limited_dig);
3732 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d/ %d(0x%x) ",
3733 "SM2[AgcT/ AdcB/ SwDacSwing(lvl)]",
3734 coex_dm->cur_agc_table_en, coex_dm->cur_adc_back_off,
3735 coex_dm->cur_dac_swing_on, coex_dm->cur_dac_swing_lvl);
3739 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s",
3740 "============[Fw mechanism]============");
3743 ps_tdma_case = coex_dm->cur_ps_tdma;
3744 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE,
3745 "\r\n %-35s = %02x %02x %02x %02x %02x case-%d (auto:%d)",
3746 "PS TDMA", coex_dm->ps_tdma_para[0],
3747 coex_dm->ps_tdma_para[1], coex_dm->ps_tdma_para[2],
3748 coex_dm->ps_tdma_para[3], coex_dm->ps_tdma_para[4],
3749 ps_tdma_case, coex_dm->auto_tdma_adjust);
3752 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d ",
3753 "DecBtPwr/ IgnWlanAct", coex_dm->cur_dec_bt_pwr,
3754 coex_dm->cur_ignore_wlan_act);
3758 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s",
3759 "============[Hw setting]============");
3762 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x",
3763 "RF-A, 0x1e initVal", coex_dm->bt_rf0x1e_backup);
3766 u8tmp[0] = btcoexist->btc_read_1byte(btcoexist, 0x778);
3767 u32tmp[0] = btcoexist->btc_read_4byte(btcoexist, 0x880);
3768 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x",
3769 "0x778/0x880[29:25]", u8tmp[0],
3770 (u32tmp[0]&0x3e000000) >> 25);
3774 u32tmp[0] = btcoexist->btc_read_4byte(btcoexist, 0x948);
3775 u8tmp[0] = btcoexist->btc_read_1byte(btcoexist, 0x67);
3776 u8tmp[1] = btcoexist->btc_read_1byte(btcoexist, 0x765);
3777 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x/ 0x%x",
3778 "0x948/ 0x67[5] / 0x765",
3779 u32tmp[0], ((u8tmp[0]&0x20)>> 5), u8tmp[1]);
3782 u32tmp[0] = btcoexist->btc_read_4byte(btcoexist, 0x92c);
3783 u32tmp[1] = btcoexist->btc_read_4byte(btcoexist, 0x930);
3784 u32tmp[2] = btcoexist->btc_read_4byte(btcoexist, 0x944);
3785 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x/ 0x%x",
3786 "0x92c[1:0]/ 0x930[7:0]/0x944[1:0]",
3787 u32tmp[0]&0x3, u32tmp[1]&0xff, u32tmp[2]&0x3);
3791 u8tmp[0] = btcoexist->btc_read_1byte(btcoexist, 0x39);
3792 u8tmp[1] = btcoexist->btc_read_1byte(btcoexist, 0x40);
3793 u32tmp[0] = btcoexist->btc_read_4byte(btcoexist, 0x4c);
3794 u8tmp[2] = btcoexist->btc_read_1byte(btcoexist, 0x64);
3795 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x/ 0x%x/ 0x%x",
3796 "0x38[11]/0x40/0x4c[24:23]/0x64[0]",
3797 ((u8tmp[0] & 0x8)>>3), u8tmp[1],
3798 ((u32tmp[0]&0x01800000)>>23), u8tmp[2]&0x1);
3801 u32tmp[0] = btcoexist->btc_read_4byte(btcoexist, 0x550);
3802 u8tmp[0] = btcoexist->btc_read_1byte(btcoexist, 0x522);
3803 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x",
3804 "0x550(bcn ctrl)/0x522", u32tmp[0], u8tmp[0]);
3807 u32tmp[0] = btcoexist->btc_read_4byte(btcoexist, 0xc50);
3808 u8tmp[0] = btcoexist->btc_read_1byte(btcoexist, 0x49c);
3809 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x",
3810 "0xc50(dig)/0x49c(null-drop)", u32tmp[0]&0xff, u8tmp[0]);
3813 u32tmp[0] = btcoexist->btc_read_4byte(btcoexist, 0xda0);
3814 u32tmp[1] = btcoexist->btc_read_4byte(btcoexist, 0xda4);
3815 u32tmp[2] = btcoexist->btc_read_4byte(btcoexist, 0xda8);
3816 u32tmp[3] = btcoexist->btc_read_4byte(btcoexist, 0xcf0);
3818 u8tmp[0] = btcoexist->btc_read_1byte(btcoexist, 0xa5b);
3819 u8tmp[1] = btcoexist->btc_read_1byte(btcoexist, 0xa5c);
3821 fa_ofdm = ((u32tmp[0]&0xffff0000) >> 16) +
3822 ((u32tmp[1]&0xffff0000) >> 16) +
3823 (u32tmp[1] & 0xffff) +
3824 (u32tmp[2] & 0xffff) +
3825 ((u32tmp[3]&0xffff0000) >> 16) +
3826 (u32tmp[3] & 0xffff) ;
3827 fa_cck = (u8tmp[0] << 8) + u8tmp[1];
3829 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x/ 0x%x",
3830 "OFDM-CCA/OFDM-FA/CCK-FA", \
3831 u32tmp[0]&0xffff, fa_ofdm, fa_cck);
3834 u32tmp[0] = btcoexist->btc_read_4byte(btcoexist, 0x6c0);
3835 u32tmp[1] = btcoexist->btc_read_4byte(btcoexist, 0x6c4);
3836 u32tmp[2] = btcoexist->btc_read_4byte(btcoexist, 0x6c8);
3837 u8tmp[0] = btcoexist->btc_read_1byte(btcoexist, 0x6cc);
3838 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE,
3839 "\r\n %-35s = 0x%x/ 0x%x/ 0x%x/ 0x%x",
3840 "0x6c0/0x6c4/0x6c8/0x6cc(coexTable)", \
3841 u32tmp[0], u32tmp[1], u32tmp[2], u8tmp[0]);
3844 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d",
3845 "0x770(high-pri rx/tx)",
3846 coex_sta->high_priority_rx, coex_sta->high_priority_tx);
3848 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d",
3849 "0x774(low-pri rx/tx)", coex_sta->low_priority_rx,
3850 coex_sta->low_priority_tx);
3852 #if(BT_AUTO_REPORT_ONLY_8723B_2ANT == 1)
3853 halbtc8723b2ant_monitor_bt_ctr(btcoexist);
3855 btcoexist->btc_disp_dbg_msg(btcoexist,
3856 BTC_DBG_DISP_COEX_STATISTICS);
3860 void ex_halbtc8723b2ant_ips_notify(struct btc_coexist *btcoexist, u8 type)
3862 if (BTC_IPS_ENTER == type) {
3863 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY,
3864 "[BTCoex], IPS ENTER notify\n");
3865 coex_sta->under_ips = true;
3866 halbtc8723b2ant_wifioff_hwcfg(btcoexist);
3867 halbtc8723b2ant_ignore_wlan_act(btcoexist, FORCE_EXEC, true);
3868 halbtc8723b2ant_coex_alloff(btcoexist);
3869 } else if (BTC_IPS_LEAVE == type) {
3870 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY,
3871 "[BTCoex], IPS LEAVE notify\n");
3872 coex_sta->under_ips = false;
3873 ex_halbtc8723b2ant_init_hwconfig(btcoexist);
3874 halbtc8723b2ant_init_coex_dm(btcoexist);
3875 halbtc8723b2ant_query_bt_info(btcoexist);
3879 void ex_halbtc8723b2ant_lps_notify(struct btc_coexist *btcoexist, u8 type)
3881 if (BTC_LPS_ENABLE == type) {
3882 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY,
3883 "[BTCoex], LPS ENABLE notify\n");
3884 coex_sta->under_lps = true;
3885 } else if (BTC_LPS_DISABLE == type) {
3886 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY,
3887 "[BTCoex], LPS DISABLE notify\n");
3888 coex_sta->under_lps = false;
3892 void ex_halbtc8723b2ant_scan_notify(struct btc_coexist *btcoexist, u8 type)
3894 if (BTC_SCAN_START == type)
3895 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY,
3896 "[BTCoex], SCAN START notify\n");
3897 else if (BTC_SCAN_FINISH == type)
3898 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY,
3899 "[BTCoex], SCAN FINISH notify\n");
3902 void ex_halbtc8723b2ant_connect_notify(struct btc_coexist *btcoexist, u8 type)
3904 if (BTC_ASSOCIATE_START == type)
3905 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY,
3906 "[BTCoex], CONNECT START notify\n");
3907 else if (BTC_ASSOCIATE_FINISH == type)
3908 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY,
3909 "[BTCoex], CONNECT FINISH notify\n");
3912 void ex_halbtc8723b2ant_media_status_notify(struct btc_coexist *btcoexist,
3915 u8 h2c_parameter[3] ={0};
3917 u8 wifi_central_chnl;
3919 if (BTC_MEDIA_CONNECT == type)
3920 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY,
3921 "[BTCoex], MEDIA connect notify\n");
3923 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY,
3924 "[BTCoex], MEDIA disconnect notify\n");
3926 /* only 2.4G we need to inform bt the chnl mask */
3927 btcoexist->btc_get(btcoexist,
3928 BTC_GET_U1_WIFI_CENTRAL_CHNL, &wifi_central_chnl);
3929 if ((BTC_MEDIA_CONNECT == type) &&
3930 (wifi_central_chnl <= 14)) {
3931 h2c_parameter[0] = 0x1;
3932 h2c_parameter[1] = wifi_central_chnl;
3933 btcoexist->btc_get(btcoexist,
3934 BTC_GET_U4_WIFI_BW, &wifi_bw);
3935 if (BTC_WIFI_BW_HT40 == wifi_bw)
3936 h2c_parameter[2] = 0x30;
3938 h2c_parameter[2] = 0x20;
3941 coex_dm->wifi_chnl_info[0] = h2c_parameter[0];
3942 coex_dm->wifi_chnl_info[1] = h2c_parameter[1];
3943 coex_dm->wifi_chnl_info[2] = h2c_parameter[2];
3945 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC,
3946 "[BTCoex], FW write 0x66=0x%x\n",
3947 h2c_parameter[0] << 16 | h2c_parameter[1] << 8 |
3950 btcoexist->btc_fill_h2c(btcoexist, 0x66, 3, h2c_parameter);
3953 void ex_halbtc8723b2ant_special_packet_notify(struct btc_coexist *btcoexist,
3956 if (type == BTC_PACKET_DHCP)
3957 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY,
3958 "[BTCoex], DHCP Packet notify\n");
3961 void ex_halbtc8723b2ant_bt_info_notify(struct btc_coexist *btcoexist,
3962 u8 *tmpbuf, u8 length)
3965 u8 i, rsp_source = 0;
3966 bool bt_busy = false, limited_dig = false;
3967 bool wifi_connected = false;
3969 coex_sta->c2h_bt_info_req_sent = false;
3971 rsp_source = tmpbuf[0]&0xf;
3972 if(rsp_source >= BT_INFO_SRC_8723B_2ANT_MAX)
3973 rsp_source = BT_INFO_SRC_8723B_2ANT_WIFI_FW;
3974 coex_sta->bt_info_c2h_cnt[rsp_source]++;
3976 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY,
3977 "[BTCoex], Bt info[%d], length=%d, hex data=[",
3978 rsp_source, length);
3979 for (i = 0; i < length; i++) {
3980 coex_sta->bt_info_c2h[rsp_source][i] = tmpbuf[i];
3984 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY,
3985 "0x%02x]\n", tmpbuf[i]);
3987 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY,
3988 "0x%02x, ", tmpbuf[i]);
3991 if (btcoexist->manual_control) {
3992 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
3993 "[BTCoex], BtInfoNotify(), "
3994 "return for Manual CTRL<===\n");
3998 if (BT_INFO_SRC_8723B_2ANT_WIFI_FW != rsp_source) {
3999 coex_sta->bt_retry_cnt = /* [3:0]*/
4000 coex_sta->bt_info_c2h[rsp_source][2] & 0xf;
4003 coex_sta->bt_info_c2h[rsp_source][3] * 2 + 10;
4005 coex_sta->bt_info_ext =
4006 coex_sta->bt_info_c2h[rsp_source][4];
4008 /* Here we need to resend some wifi info to BT
4009 because bt is reset and loss of the info.*/
4010 if ((coex_sta->bt_info_ext & BIT1)) {
4011 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
4012 "[BTCoex], BT ext info bit1 check,"
4013 " send wifi BW&Chnl to BT!!\n");
4014 btcoexist->btc_get(btcoexist,BTC_GET_BL_WIFI_CONNECTED,
4017 ex_halbtc8723b2ant_media_status_notify(
4021 ex_halbtc8723b2ant_media_status_notify(
4023 BTC_MEDIA_DISCONNECT);
4026 if ((coex_sta->bt_info_ext & BIT3)) {
4027 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
4028 "[BTCoex], BT ext info bit3 check, "
4029 "set BT NOT to ignore Wlan active!!\n");
4030 halbtc8723b2ant_ignore_wlan_act(btcoexist, FORCE_EXEC,
4033 /* BT already NOT ignore Wlan active, do nothing here.*/
4035 #if(BT_AUTO_REPORT_ONLY_8723B_2ANT == 0)
4036 if ((coex_sta->bt_info_ext & BIT4)) {
4037 /* BT auto report already enabled, do nothing*/
4039 halbtc8723b2ant_bt_auto_report(btcoexist, FORCE_EXEC,
4045 /* check BIT2 first ==> check if bt is under inquiry or page scan*/
4046 if (btInfo & BT_INFO_8723B_2ANT_B_INQ_PAGE)
4047 coex_sta->c2h_bt_inquiry_page = true;
4049 coex_sta->c2h_bt_inquiry_page = false;
4051 /* set link exist status*/
4052 if (!(btInfo & BT_INFO_8723B_2ANT_B_CONNECTION)) {
4053 coex_sta->bt_link_exist = false;
4054 coex_sta->pan_exist = false;
4055 coex_sta->a2dp_exist = false;
4056 coex_sta->hid_exist = false;
4057 coex_sta->sco_exist = false;
4058 } else {// connection exists
4059 coex_sta->bt_link_exist = true;
4060 if (btInfo & BT_INFO_8723B_2ANT_B_FTP)
4061 coex_sta->pan_exist = true;
4063 coex_sta->pan_exist = false;
4064 if (btInfo & BT_INFO_8723B_2ANT_B_A2DP)
4065 coex_sta->a2dp_exist = true;
4067 coex_sta->a2dp_exist = false;
4068 if (btInfo & BT_INFO_8723B_2ANT_B_HID)
4069 coex_sta->hid_exist = true;
4071 coex_sta->hid_exist = false;
4072 if (btInfo & BT_INFO_8723B_2ANT_B_SCO_ESCO)
4073 coex_sta->sco_exist = true;
4075 coex_sta->sco_exist = false;
4078 halbtc8723b2ant_update_bt_link_info(btcoexist);
4080 if (!(btInfo & BT_INFO_8723B_2ANT_B_CONNECTION)) {
4081 coex_dm->bt_status = BT_8723B_2ANT_BT_STATUS_NON_CONNECTED_IDLE;
4082 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
4083 "[BTCoex], BtInfoNotify(), "
4084 "BT Non-Connected idle!!!\n");
4085 /* connection exists but no busy */
4086 } else if (btInfo == BT_INFO_8723B_2ANT_B_CONNECTION) {
4087 coex_dm->bt_status = BT_8723B_2ANT_BT_STATUS_CONNECTED_IDLE;
4088 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
4089 "[BTCoex], BtInfoNotify(), BT Connected-idle!!!\n");
4090 } else if ((btInfo & BT_INFO_8723B_2ANT_B_SCO_ESCO) ||
4091 (btInfo & BT_INFO_8723B_2ANT_B_SCO_BUSY)) {
4092 coex_dm->bt_status =
4093 BT_8723B_2ANT_BT_STATUS_SCO_BUSY;
4094 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
4095 "[BTCoex], BtInfoNotify(), BT SCO busy!!!\n");
4096 } else if (btInfo&BT_INFO_8723B_2ANT_B_ACL_BUSY) {
4097 coex_dm->bt_status =
4098 BT_8723B_2ANT_BT_STATUS_ACL_BUSY;
4099 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
4100 "[BTCoex], BtInfoNotify(), BT ACL busy!!!\n");
4102 coex_dm->bt_status = BT_8723B_2ANT_BT_STATUS_MAX;
4103 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
4104 "[BTCoex], BtInfoNotify(), "
4105 "BT Non-Defined state!!!\n");
4108 if ((BT_8723B_2ANT_BT_STATUS_ACL_BUSY == coex_dm->bt_status) ||
4109 (BT_8723B_2ANT_BT_STATUS_SCO_BUSY == coex_dm->bt_status) ||
4110 (BT_8723B_2ANT_BT_STATUS_ACL_SCO_BUSY == coex_dm->bt_status)) {
4115 limited_dig = false;
4118 btcoexist->btc_set(btcoexist, BTC_SET_BL_BT_TRAFFIC_BUSY, &bt_busy);
4120 coex_dm->limited_dig = limited_dig;
4121 btcoexist->btc_set(btcoexist, BTC_SET_BL_BT_LIMITED_DIG, &limited_dig);
4123 halbtc8723b2ant_run_coexist_mechanism(btcoexist);
4126 void ex_halbtc8723b2ant_halt_notify(struct btc_coexist *btcoexist)
4128 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, "[BTCoex], Halt notify\n");
4130 halbtc8723b2ant_wifioff_hwcfg(btcoexist);
4131 halbtc8723b2ant_ignore_wlan_act(btcoexist, FORCE_EXEC, true);
4132 ex_halbtc8723b2ant_media_status_notify(btcoexist, BTC_MEDIA_DISCONNECT);
4135 void ex_halbtc8723b2ant_periodical(struct btc_coexist *btcoexist)
4137 struct btc_board_info *board_info = &btcoexist->board_info;
4138 struct btc_stack_info *stack_info = &btcoexist->stack_info;
4139 static u8 dis_ver_info_cnt = 0;
4140 u32 fw_ver = 0, bt_patch_ver = 0;
4142 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
4143 "[BTCoex], =========================="
4144 "Periodical===========================\n");
4146 if (dis_ver_info_cnt <= 5) {
4147 dis_ver_info_cnt += 1;
4148 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT,
4149 "[BTCoex], ****************************"
4150 "************************************\n");
4151 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT,
4152 "[BTCoex], Ant PG Num/ Ant Mech/ "
4153 "Ant Pos = %d/ %d/ %d\n", board_info->pg_ant_num,
4154 board_info->btdm_ant_num, board_info->btdm_ant_pos);
4155 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT,
4156 "[BTCoex], BT stack/ hci ext ver = %s / %d\n",
4157 ((stack_info->profile_notified)? "Yes":"No"),
4158 stack_info->hci_version);
4159 btcoexist->btc_get(btcoexist, BTC_GET_U4_BT_PATCH_VER,
4161 btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_FW_VER, &fw_ver);
4162 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT,
4163 "[BTCoex], CoexVer/ fw_ver/ PatchVer = "
4164 "%d_%x/ 0x%x/ 0x%x(%d)\n",
4165 glcoex_ver_date_8723b_2ant, glcoex_ver_8723b_2ant,
4166 fw_ver, bt_patch_ver, bt_patch_ver);
4167 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT,
4168 "[BTCoex], *****************************"
4169 "***********************************\n");
4172 #if(BT_AUTO_REPORT_ONLY_8723B_2ANT == 0)
4173 halbtc8723b2ant_query_bt_info(btcoexist);
4174 halbtc8723b2ant_monitor_bt_ctr(btcoexist);
4175 halbtc8723b2ant_monitor_bt_enable_disable(btcoexist);
4177 if (halbtc8723b2ant_is_wifi_status_changed(btcoexist) ||
4178 coex_dm->auto_tdma_adjust)
4179 halbtc8723b2ant_run_coexist_mechanism(btcoexist);