1 /**************************************************************
4 * This file is for RTL8192E Co-exist mechanism
7 * 2012/11/15 Cosa first check in.
9 **************************************************************/
11 /**************************************************************
13 **************************************************************/
14 #include "halbt_precomp.h"
16 /**************************************************************
17 * Global variables, these are static variables
18 **************************************************************/
19 static struct coex_dm_8192e_2ant glcoex_dm_8192e_2ant;
20 static struct coex_dm_8192e_2ant *coex_dm = &glcoex_dm_8192e_2ant;
21 static struct coex_sta_8192e_2ant glcoex_sta_8192e_2ant;
22 static struct coex_sta_8192e_2ant *coex_sta = &glcoex_sta_8192e_2ant;
24 static const char *const GLBtInfoSrc8192e2Ant[]={
27 "BT Info[bt auto report]",
30 static u32 glcoex_ver_date_8192e_2ant = 20130902;
31 static u32 glcoex_ver_8192e_2ant = 0x34;
33 /**************************************************************
34 * local function proto type if needed
35 **************************************************************/
36 /**************************************************************
37 * local function start with halbtc8192e2ant_
38 **************************************************************/
39 static u8 halbtc8192e2ant_btrssi_state(u8 level_num, u8 rssi_thresh,
43 u8 btrssi_state = coex_sta->pre_bt_rssi_state;
45 btrssi = coex_sta->bt_rssi;
48 if ((coex_sta->pre_bt_rssi_state == BTC_RSSI_STATE_LOW) ||
49 (coex_sta->pre_bt_rssi_state == BTC_RSSI_STATE_STAY_LOW)) {
50 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE,
51 "BT Rssi pre state=LOW\n");
52 if (btrssi >= (rssi_thresh +
53 BTC_RSSI_COEX_THRESH_TOL_8192E_2ANT)) {
54 btrssi_state = BTC_RSSI_STATE_HIGH;
55 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE,
56 "BT Rssi state switch to High\n");
58 btrssi_state = BTC_RSSI_STATE_STAY_LOW;
59 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE,
60 "BT Rssi state stay at Low\n");
63 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE,
64 "BT Rssi pre state=HIGH\n");
65 if (btrssi < rssi_thresh) {
66 btrssi_state = BTC_RSSI_STATE_LOW;
67 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE,
68 "BT Rssi state switch to Low\n");
70 btrssi_state = BTC_RSSI_STATE_STAY_HIGH;
71 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE,
72 "BT Rssi state stay at High\n");
75 } else if (level_num == 3) {
76 if (rssi_thresh > rssi_thresh1) {
77 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE,
78 "BT Rssi thresh error!!\n");
79 return coex_sta->pre_bt_rssi_state;
82 if ((coex_sta->pre_bt_rssi_state == BTC_RSSI_STATE_LOW) ||
83 (coex_sta->pre_bt_rssi_state == BTC_RSSI_STATE_STAY_LOW)) {
84 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE,
85 "BT Rssi pre state=LOW\n");
86 if(btrssi >= (rssi_thresh +
87 BTC_RSSI_COEX_THRESH_TOL_8192E_2ANT)) {
88 btrssi_state = BTC_RSSI_STATE_MEDIUM;
89 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE,
90 "BT Rssi state switch to Medium\n");
92 btrssi_state = BTC_RSSI_STATE_STAY_LOW;
93 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE,
94 "BT Rssi state stay at Low\n");
96 } else if ((coex_sta->pre_bt_rssi_state ==
97 BTC_RSSI_STATE_MEDIUM) ||
98 (coex_sta->pre_bt_rssi_state ==
99 BTC_RSSI_STATE_STAY_MEDIUM)) {
100 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE,
101 "[BTCoex], BT Rssi pre state=MEDIUM\n");
102 if (btrssi >= (rssi_thresh1 +
103 BTC_RSSI_COEX_THRESH_TOL_8192E_2ANT)) {
104 btrssi_state = BTC_RSSI_STATE_HIGH;
105 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE,
106 "BT Rssi state switch to High\n");
107 } else if (btrssi < rssi_thresh) {
108 btrssi_state = BTC_RSSI_STATE_LOW;
109 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE,
110 "BT Rssi state switch to Low\n");
112 btrssi_state = BTC_RSSI_STATE_STAY_MEDIUM;
113 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE,
114 "BT Rssi state stay at Medium\n");
117 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE,
118 "BT Rssi pre state=HIGH\n");
119 if (btrssi < rssi_thresh1) {
120 btrssi_state = BTC_RSSI_STATE_MEDIUM;
121 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE,
122 "BT Rssi state switch to Medium\n");
124 btrssi_state = BTC_RSSI_STATE_STAY_HIGH;
125 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_RSSI_STATE,
126 "BT Rssi state stay at High\n");
131 coex_sta->pre_bt_rssi_state = btrssi_state;
136 static u8 halbtc8192e2ant_wifirssi_state(struct btc_coexist * btcoexist,
137 u8 index, u8 level_num,
138 u8 rssi_thresh, u8 rssi_thresh1)
141 u8 wifirssi_state = coex_sta->pre_wifi_rssi_state[index];
143 btcoexist->btc_get(btcoexist, BTC_GET_S4_WIFI_RSSI, &wifirssi);
145 if (level_num == 2) {
146 if ((coex_sta->pre_wifi_rssi_state[index] ==
147 BTC_RSSI_STATE_LOW) ||
148 (coex_sta->pre_wifi_rssi_state[index] ==
149 BTC_RSSI_STATE_STAY_LOW)) {
150 if (wifirssi >= (rssi_thresh +
151 BTC_RSSI_COEX_THRESH_TOL_8192E_2ANT)) {
152 wifirssi_state = BTC_RSSI_STATE_HIGH;
153 BTC_PRINT(BTC_MSG_ALGORITHM,
154 ALGO_WIFI_RSSI_STATE,
155 "wifi RSSI state switch to High\n");
157 wifirssi_state = BTC_RSSI_STATE_STAY_LOW;
158 BTC_PRINT(BTC_MSG_ALGORITHM,
159 ALGO_WIFI_RSSI_STATE,
160 "wifi RSSI state stay at Low\n");
163 if (wifirssi < rssi_thresh) {
164 wifirssi_state = BTC_RSSI_STATE_LOW;
165 BTC_PRINT(BTC_MSG_ALGORITHM,
166 ALGO_WIFI_RSSI_STATE,
167 "wifi RSSI state switch to Low\n");
169 wifirssi_state = BTC_RSSI_STATE_STAY_HIGH;
170 BTC_PRINT(BTC_MSG_ALGORITHM,
171 ALGO_WIFI_RSSI_STATE,
172 "wifi RSSI state stay at High\n");
175 } else if (level_num == 3) {
176 if (rssi_thresh > rssi_thresh1) {
177 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_WIFI_RSSI_STATE,
178 "wifi RSSI thresh error!!\n");
179 return coex_sta->pre_wifi_rssi_state[index];
182 if ((coex_sta->pre_wifi_rssi_state[index] ==
183 BTC_RSSI_STATE_LOW) ||
184 (coex_sta->pre_wifi_rssi_state[index] ==
185 BTC_RSSI_STATE_STAY_LOW)) {
186 if (wifirssi >= (rssi_thresh +
187 BTC_RSSI_COEX_THRESH_TOL_8192E_2ANT)) {
188 wifirssi_state = BTC_RSSI_STATE_MEDIUM;
189 BTC_PRINT(BTC_MSG_ALGORITHM,
190 ALGO_WIFI_RSSI_STATE,
191 "wifi RSSI state switch to Medium\n");
193 wifirssi_state = BTC_RSSI_STATE_STAY_LOW;
194 BTC_PRINT(BTC_MSG_ALGORITHM,
195 ALGO_WIFI_RSSI_STATE,
196 "wifi RSSI state stay at Low\n");
198 } else if ((coex_sta->pre_wifi_rssi_state[index] ==
199 BTC_RSSI_STATE_MEDIUM) ||
200 (coex_sta->pre_wifi_rssi_state[index] ==
201 BTC_RSSI_STATE_STAY_MEDIUM)) {
202 if (wifirssi >= (rssi_thresh1 +
203 BTC_RSSI_COEX_THRESH_TOL_8192E_2ANT)) {
204 wifirssi_state = BTC_RSSI_STATE_HIGH;
205 BTC_PRINT(BTC_MSG_ALGORITHM,
206 ALGO_WIFI_RSSI_STATE,
207 "wifi RSSI state switch to High\n");
208 } else if (wifirssi < rssi_thresh) {
209 wifirssi_state = BTC_RSSI_STATE_LOW;
210 BTC_PRINT(BTC_MSG_ALGORITHM,
211 ALGO_WIFI_RSSI_STATE,
212 "wifi RSSI state switch to Low\n");
214 wifirssi_state = BTC_RSSI_STATE_STAY_MEDIUM;
215 BTC_PRINT(BTC_MSG_ALGORITHM,
216 ALGO_WIFI_RSSI_STATE,
217 "wifi RSSI state stay at Medium\n");
220 if (wifirssi < rssi_thresh1) {
221 wifirssi_state = BTC_RSSI_STATE_MEDIUM;
222 BTC_PRINT(BTC_MSG_ALGORITHM,
223 ALGO_WIFI_RSSI_STATE,
224 "wifi RSSI state switch to Medium\n");
226 wifirssi_state = BTC_RSSI_STATE_STAY_HIGH;
227 BTC_PRINT(BTC_MSG_ALGORITHM,
228 ALGO_WIFI_RSSI_STATE,
229 "wifi RSSI state stay at High\n");
234 coex_sta->pre_wifi_rssi_state[index] = wifirssi_state;
236 return wifirssi_state;
239 static void halbtc8192e2ant_monitor_bt_enable_disable(struct btc_coexist *btcoexist)
241 static bool pre_bt_disabled = false;
242 static u32 bt_disable_cnt = 0;
243 bool bt_active = true, bt_disabled = false;
245 /* This function check if bt is disabled */
247 if (coex_sta->high_priority_tx == 0 &&
248 coex_sta->high_priority_rx == 0 &&
249 coex_sta->low_priority_tx == 0 &&
250 coex_sta->low_priority_rx == 0)
253 if (coex_sta->high_priority_tx == 0xffff &&
254 coex_sta->high_priority_rx == 0xffff &&
255 coex_sta->low_priority_tx == 0xffff &&
256 coex_sta->low_priority_rx == 0xffff)
262 btcoexist->btc_set(btcoexist, BTC_SET_BL_BT_DISABLE,
264 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR,
265 "[BTCoex], BT is enabled !!\n");
268 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR,
269 "[BTCoex], bt all counters=0, %d times!!\n",
271 if (bt_disable_cnt >= 2) {
273 btcoexist->btc_set(btcoexist, BTC_SET_BL_BT_DISABLE,
275 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR,
276 "[BTCoex], BT is disabled !!\n");
279 if (pre_bt_disabled != bt_disabled) {
280 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR,
281 "[BTCoex], BT is from %s to %s!!\n",
282 (pre_bt_disabled ? "disabled":"enabled"),
283 (bt_disabled ? "disabled":"enabled"));
284 pre_bt_disabled = bt_disabled;
288 static u32 halbtc8192e2ant_decidera_mask(struct btc_coexist *btcoexist,
289 u8 sstype, u32 ra_masktype)
291 u32 disra_mask = 0x0;
293 switch (ra_masktype) {
294 case 0: /* normal mode */
296 disra_mask = 0x0; /* enable 2ss */
298 disra_mask = 0xfff00000;/* disable 2ss */
300 case 1: /* disable cck 1/2 */
302 disra_mask = 0x00000003;/* enable 2ss */
304 disra_mask = 0xfff00003;/* disable 2ss */
306 case 2: /* disable cck 1/2/5.5, ofdm 6/9/12/18/24, mcs 0/1/2/3/4 */
308 disra_mask = 0x0001f1f7;/* enable 2ss */
310 disra_mask = 0xfff1f1f7;/* disable 2ss */
319 static void halbtc8192e2ant_Updatera_mask(struct btc_coexist *btcoexist,
320 bool force_exec, u32 dis_ratemask)
322 coex_dm->curra_mask = dis_ratemask;
324 if (force_exec || (coex_dm->prera_mask != coex_dm->curra_mask))
325 btcoexist->btc_set(btcoexist, BTC_SET_ACT_UPDATE_ra_mask,
326 &coex_dm->curra_mask);
327 coex_dm->prera_mask = coex_dm->curra_mask;
330 static void halbtc8192e2ant_autorate_fallback_retry(struct btc_coexist *btcoexist,
331 bool force_exec, u8 type)
333 bool wifi_under_bmode = false;
335 coex_dm->cur_arfrtype = type;
337 if (force_exec || (coex_dm->pre_arfrtype != coex_dm->cur_arfrtype)) {
338 switch (coex_dm->cur_arfrtype) {
339 case 0: /* normal mode */
340 btcoexist->btc_write_4byte(btcoexist, 0x430,
341 coex_dm->backup_arfr_cnt1);
342 btcoexist->btc_write_4byte(btcoexist, 0x434,
343 coex_dm->backup_arfr_cnt2);
346 btcoexist->btc_get(btcoexist,
347 BTC_GET_BL_WIFI_UNDER_B_MODE,
349 if (wifi_under_bmode) {
350 btcoexist->btc_write_4byte(btcoexist, 0x430,
352 btcoexist->btc_write_4byte(btcoexist, 0x434,
355 btcoexist->btc_write_4byte(btcoexist, 0x430,
357 btcoexist->btc_write_4byte(btcoexist, 0x434,
366 coex_dm->pre_arfrtype = coex_dm->cur_arfrtype;
369 static void halbtc8192e2ant_retrylimit(struct btc_coexist *btcoexist,
370 bool force_exec, u8 type)
372 coex_dm->cur_retrylimit_type = type;
374 if (force_exec || (coex_dm->pre_retrylimit_type !=
375 coex_dm->cur_retrylimit_type)) {
376 switch (coex_dm->cur_retrylimit_type) {
377 case 0: /* normal mode */
378 btcoexist->btc_write_2byte(btcoexist, 0x42a,
379 coex_dm->backup_retrylimit);
381 case 1: /* retry limit=8 */
382 btcoexist->btc_write_2byte(btcoexist, 0x42a,
390 coex_dm->pre_retrylimit_type = coex_dm->cur_retrylimit_type;
393 static void halbtc8192e2ant_ampdu_maxtime(struct btc_coexist *btcoexist,
394 bool force_exec, u8 type)
396 coex_dm->cur_ampdutime_type = type;
398 if (force_exec || (coex_dm->pre_ampdutime_type !=
399 coex_dm->cur_ampdutime_type)) {
400 switch (coex_dm->cur_ampdutime_type) {
401 case 0: /* normal mode */
402 btcoexist->btc_write_1byte(btcoexist, 0x456,
403 coex_dm->backup_ampdu_maxtime);
405 case 1: /* AMPDU timw = 0x38 * 32us */
406 btcoexist->btc_write_1byte(btcoexist, 0x456, 0x38);
413 coex_dm->pre_ampdutime_type = coex_dm->cur_ampdutime_type;
416 static void halbtc8192e2ant_limited_tx(struct btc_coexist *btcoexist,
417 bool force_exec, u8 ra_masktype,
418 u8 arfr_type, u8 retrylimit_type,
421 u32 disra_mask = 0x0;
423 coex_dm->curra_masktype = ra_masktype;
424 disra_mask = halbtc8192e2ant_decidera_mask(btcoexist,
427 halbtc8192e2ant_Updatera_mask(btcoexist, force_exec, disra_mask);
429 halbtc8192e2ant_autorate_fallback_retry(btcoexist, force_exec,
431 halbtc8192e2ant_retrylimit(btcoexist, force_exec, retrylimit_type);
432 halbtc8192e2ant_ampdu_maxtime(btcoexist, force_exec, ampdutime_type);
435 static void halbtc8192e2ant_limited_rx(struct btc_coexist *btcoexist,
436 bool force_exec, bool rej_ap_agg_pkt,
437 bool b_bt_ctrl_agg_buf_size,
440 bool reject_rx_agg = rej_ap_agg_pkt;
441 bool bt_ctrl_rx_agg_size = b_bt_ctrl_agg_buf_size;
442 u8 rx_agg_size = agg_buf_size;
444 /*********************************************
445 * Rx Aggregation related setting
446 *********************************************/
447 btcoexist->btc_set(btcoexist, BTC_SET_BL_TO_REJ_AP_AGG_PKT,
449 /* decide BT control aggregation buf size or not */
450 btcoexist->btc_set(btcoexist, BTC_SET_BL_BT_CTRL_AGG_SIZE,
451 &bt_ctrl_rx_agg_size);
452 /* aggregation buf size, only work
453 * when BT control Rx aggregation size. */
454 btcoexist->btc_set(btcoexist, BTC_SET_U1_AGG_BUF_SIZE, &rx_agg_size);
455 /* real update aggregation setting */
456 btcoexist->btc_set(btcoexist, BTC_SET_ACT_AGGREGATE_CTRL, NULL);
461 static void halbtc8192e2ant_monitor_bt_ctr(struct btc_coexist *btcoexist)
463 u32 reg_hp_txrx, reg_lp_txrx, u32tmp;
464 u32 reg_hp_tx = 0, reg_hp_rx = 0, reg_lp_tx = 0, reg_lp_rx = 0;
469 u32tmp = btcoexist->btc_read_4byte(btcoexist, reg_hp_txrx);
470 reg_hp_tx = u32tmp & MASKLWORD;
471 reg_hp_rx = (u32tmp & MASKHWORD)>>16;
473 u32tmp = btcoexist->btc_read_4byte(btcoexist, reg_lp_txrx);
474 reg_lp_tx = u32tmp & MASKLWORD;
475 reg_lp_rx = (u32tmp & MASKHWORD)>>16;
477 coex_sta->high_priority_tx = reg_hp_tx;
478 coex_sta->high_priority_rx = reg_hp_rx;
479 coex_sta->low_priority_tx = reg_lp_tx;
480 coex_sta->low_priority_rx = reg_lp_rx;
482 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR,
483 "[BTCoex] High Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n",
484 reg_hp_txrx, reg_hp_tx, reg_hp_tx, reg_hp_rx, reg_hp_rx);
485 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_BT_MONITOR,
486 "[BTCoex] Low Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n",
487 reg_lp_txrx, reg_lp_tx, reg_lp_tx, reg_lp_rx, reg_lp_rx);
490 btcoexist->btc_write_1byte(btcoexist, 0x76e, 0xc);
493 static void halbtc8192e2ant_querybt_info(struct btc_coexist *btcoexist)
495 u8 h2c_parameter[1] ={0};
497 coex_sta->c2h_bt_info_req_sent = true;
499 h2c_parameter[0] |= BIT0; /* trigger */
501 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC,
502 "[BTCoex], Query Bt Info, FW write 0x61=0x%x\n",
505 btcoexist->btc_fill_h2c(btcoexist, 0x61, 1, h2c_parameter);
508 static bool halbtc8192e2ant_iswifi_status_changed(struct btc_coexist *btcoexist)
510 static bool pre_wifi_busy = false;
511 static bool pre_under_4way = false, pre_bt_hson = false;
512 bool wifi_busy = false, under_4way = false, bt_hson = false;
513 bool wifi_connected = false;
515 btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_CONNECTED,
517 btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_BUSY, &wifi_busy);
518 btcoexist->btc_get(btcoexist, BTC_GET_BL_HS_OPERATION, &bt_hson);
519 btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_4_WAY_PROGRESS,
522 if (wifi_connected) {
523 if (wifi_busy != pre_wifi_busy) {
524 pre_wifi_busy = wifi_busy;
527 if (under_4way != pre_under_4way) {
528 pre_under_4way = under_4way;
531 if (bt_hson != pre_bt_hson) {
532 pre_bt_hson = bt_hson;
540 static void halbtc8192e2ant_update_btlink_info(struct btc_coexist *btcoexist)
542 struct btc_bt_link_info *bt_link_info = &btcoexist->bt_link_info;
543 bool bt_hson = false;
545 btcoexist->btc_get(btcoexist, BTC_GET_BL_HS_OPERATION, &bt_hson);
547 bt_link_info->bt_link_exist = coex_sta->bt_link_exist;
548 bt_link_info->sco_exist = coex_sta->sco_exist;
549 bt_link_info->a2dp_exist = coex_sta->a2dp_exist;
550 bt_link_info->pan_exist = coex_sta->pan_exist;
551 bt_link_info->hid_exist = coex_sta->hid_exist;
553 /* work around for HS mode. */
555 bt_link_info->pan_exist = true;
556 bt_link_info->bt_link_exist = true;
559 /* check if Sco only */
560 if (bt_link_info->sco_exist &&
561 !bt_link_info->a2dp_exist &&
562 !bt_link_info->pan_exist &&
563 !bt_link_info->hid_exist)
564 bt_link_info->sco_only = true;
566 bt_link_info->sco_only = false;
568 /* check if A2dp only */
569 if (!bt_link_info->sco_exist &&
570 bt_link_info->a2dp_exist &&
571 !bt_link_info->pan_exist &&
572 !bt_link_info->hid_exist)
573 bt_link_info->a2dp_only = true;
575 bt_link_info->a2dp_only = false;
577 /* check if Pan only */
578 if (!bt_link_info->sco_exist &&
579 !bt_link_info->a2dp_exist &&
580 bt_link_info->pan_exist &&
581 !bt_link_info->hid_exist)
582 bt_link_info->pan_only = true;
584 bt_link_info->pan_only = false;
586 /* check if Hid only */
587 if (!bt_link_info->sco_exist &&
588 !bt_link_info->a2dp_exist &&
589 !bt_link_info->pan_exist &&
590 bt_link_info->hid_exist)
591 bt_link_info->hid_only = true;
593 bt_link_info->hid_only = false;
596 static u8 halbtc8192e2ant_action_algorithm(struct btc_coexist *btcoexist)
598 struct btc_bt_link_info *bt_link_info = &btcoexist->bt_link_info;
599 struct btc_stack_info *stack_info = &btcoexist->stack_info;
601 u8 algorithm = BT_8192E_2ANT_COEX_ALGO_UNDEFINED;
602 u8 numOfDiffProfile = 0;
604 btcoexist->btc_get(btcoexist, BTC_GET_BL_HS_OPERATION, &bt_hson);
606 if (!bt_link_info->bt_link_exist) {
607 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
608 "No BT link exists!!!\n");
612 if (bt_link_info->sco_exist)
614 if (bt_link_info->hid_exist)
616 if (bt_link_info->pan_exist)
618 if (bt_link_info->a2dp_exist)
621 if (numOfDiffProfile == 1) {
622 if (bt_link_info->sco_exist) {
623 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
625 algorithm = BT_8192E_2ANT_COEX_ALGO_SCO;
627 if (bt_link_info->hid_exist) {
628 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
630 algorithm = BT_8192E_2ANT_COEX_ALGO_HID;
631 } else if (bt_link_info->a2dp_exist) {
632 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
634 algorithm = BT_8192E_2ANT_COEX_ALGO_A2DP;
635 } else if (bt_link_info->pan_exist) {
637 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
640 BT_8192E_2ANT_COEX_ALGO_PANHS;
642 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
645 BT_8192E_2ANT_COEX_ALGO_PANEDR;
649 } else if (numOfDiffProfile == 2) {
650 if (bt_link_info->sco_exist) {
651 if (bt_link_info->hid_exist) {
652 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
654 algorithm = BT_8192E_2ANT_COEX_ALGO_SCO;
655 } else if (bt_link_info->a2dp_exist) {
656 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
657 "SCO + A2DP ==> SCO\n");
658 algorithm = BT_8192E_2ANT_COEX_ALGO_PANEDR_HID;
659 } else if (bt_link_info->pan_exist) {
661 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
663 algorithm = BT_8192E_2ANT_COEX_ALGO_SCO;
665 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
668 BT_8192E_2ANT_COEX_ALGO_SCO_PAN;
672 if (bt_link_info->hid_exist &&
673 bt_link_info->a2dp_exist) {
674 if (stack_info->num_of_hid >= 2) {
675 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
678 BT_8192E_2ANT_COEX_ALGO_HID_A2DP_PANEDR;
680 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
683 BT_8192E_2ANT_COEX_ALGO_HID_A2DP;
685 } else if (bt_link_info->hid_exist &&
686 bt_link_info->pan_exist) {
688 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
690 algorithm = BT_8192E_2ANT_COEX_ALGO_HID;
692 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
695 BT_8192E_2ANT_COEX_ALGO_PANEDR_HID;
697 } else if (bt_link_info->pan_exist &&
698 bt_link_info->a2dp_exist) {
700 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
703 BT_8192E_2ANT_COEX_ALGO_A2DP_PANHS;
705 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
706 "A2DP + PAN(EDR)\n");
708 BT_8192E_2ANT_COEX_ALGO_PANEDR_A2DP;
712 } else if (numOfDiffProfile == 3) {
713 if (bt_link_info->sco_exist) {
714 if (bt_link_info->hid_exist &&
715 bt_link_info->a2dp_exist) {
716 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
717 "SCO + HID + A2DP ==> HID\n");
718 algorithm = BT_8192E_2ANT_COEX_ALGO_PANEDR_HID;
719 } else if (bt_link_info->hid_exist &&
720 bt_link_info->pan_exist) {
722 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
723 "SCO + HID + PAN(HS)\n");
724 algorithm = BT_8192E_2ANT_COEX_ALGO_SCO;
726 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
727 "SCO + HID + PAN(EDR)\n");
729 BT_8192E_2ANT_COEX_ALGO_SCO_PAN;
731 } else if (bt_link_info->pan_exist &&
732 bt_link_info->a2dp_exist) {
734 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
735 "SCO + A2DP + PAN(HS)\n");
736 algorithm = BT_8192E_2ANT_COEX_ALGO_SCO;
738 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
739 "SCO + A2DP + PAN(EDR)\n");
741 BT_8192E_2ANT_COEX_ALGO_PANEDR_HID;
745 if (bt_link_info->hid_exist &&
746 bt_link_info->pan_exist &&
747 bt_link_info->a2dp_exist) {
749 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
750 "HID + A2DP + PAN(HS)\n");
752 BT_8192E_2ANT_COEX_ALGO_HID_A2DP;
754 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
755 "HID + A2DP + PAN(EDR)\n");
757 BT_8192E_2ANT_COEX_ALGO_HID_A2DP_PANEDR;
761 } else if (numOfDiffProfile >= 3) {
762 if (bt_link_info->sco_exist) {
763 if (bt_link_info->hid_exist &&
764 bt_link_info->pan_exist &&
765 bt_link_info->a2dp_exist) {
767 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
768 "ErrorSCO+HID+A2DP+PAN(HS)\n");
771 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
772 "SCO+HID+A2DP+PAN(EDR)\n");
774 BT_8192E_2ANT_COEX_ALGO_PANEDR_HID;
783 static void halbtc8192e2ant_setfw_dac_swinglevel(struct btc_coexist *btcoexist,
786 u8 h2c_parameter[1] ={0};
788 /* There are several type of dacswing
789 * 0x18/ 0x10/ 0xc/ 0x8/ 0x4/ 0x6 */
790 h2c_parameter[0] = dac_swinglvl;
792 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC,
793 "[BTCoex], Set Dac Swing Level=0x%x\n", dac_swinglvl);
794 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC,
795 "[BTCoex], FW write 0x64=0x%x\n", h2c_parameter[0]);
797 btcoexist->btc_fill_h2c(btcoexist, 0x64, 1, h2c_parameter);
800 static void halbtc8192e2ant_set_fwdec_btpwr(struct btc_coexist *btcoexist,
803 u8 h2c_parameter[1] ={0};
805 h2c_parameter[0] = dec_btpwr_lvl;
807 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC,
808 "[BTCoex] decrease Bt Power level = %d, FW write 0x62=0x%x\n",
809 dec_btpwr_lvl, h2c_parameter[0]);
811 btcoexist->btc_fill_h2c(btcoexist, 0x62, 1, h2c_parameter);
814 static void halbtc8192e2ant_dec_btpwr(struct btc_coexist *btcoexist,
815 bool force_exec, u8 dec_btpwr_lvl)
817 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW,
818 "[BTCoex], %s Dec BT power level = %d\n",
819 (force_exec? "force to":""), dec_btpwr_lvl);
820 coex_dm->cur_dec_bt_pwr = dec_btpwr_lvl;
823 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL,
824 "[BTCoex], preBtDecPwrLvl=%d, curBtDecPwrLvl=%d\n",
825 coex_dm->pre_dec_bt_pwr, coex_dm->cur_dec_bt_pwr);
827 halbtc8192e2ant_set_fwdec_btpwr(btcoexist, coex_dm->cur_dec_bt_pwr);
829 coex_dm->pre_dec_bt_pwr = coex_dm->cur_dec_bt_pwr;
832 static void halbtc8192e2ant_set_bt_autoreport(struct btc_coexist *btcoexist,
833 bool enable_autoreport)
835 u8 h2c_parameter[1] ={0};
837 h2c_parameter[0] = 0;
839 if (enable_autoreport)
840 h2c_parameter[0] |= BIT0;
842 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC,
843 "[BTCoex], BT FW auto report : %s, FW write 0x68=0x%x\n",
844 (enable_autoreport? "Enabled!!":"Disabled!!"),
847 btcoexist->btc_fill_h2c(btcoexist, 0x68, 1, h2c_parameter);
850 static void halbtc8192e2ant_bt_autoreport(struct btc_coexist *btcoexist,
852 bool enable_autoreport)
854 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW,
855 "[BTCoex], %s BT Auto report = %s\n",
856 (force_exec? "force to":""),
857 ((enable_autoreport)? "Enabled":"Disabled"));
858 coex_dm->cur_bt_auto_report = enable_autoreport;
861 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL,
862 "[BTCoex] bPreBtAutoReport=%d, bCurBtAutoReport=%d\n",
863 coex_dm->pre_bt_auto_report,
864 coex_dm->cur_bt_auto_report);
866 if (coex_dm->pre_bt_auto_report == coex_dm->cur_bt_auto_report)
869 halbtc8192e2ant_set_bt_autoreport(btcoexist,
870 coex_dm->cur_bt_auto_report);
872 coex_dm->pre_bt_auto_report = coex_dm->cur_bt_auto_report;
875 static void halbtc8192e2ant_fw_dac_swinglvl(struct btc_coexist *btcoexist,
876 bool force_exec, u8 fw_dac_swinglvl)
878 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW,
879 "[BTCoex], %s set FW Dac Swing level = %d\n",
880 (force_exec? "force to":""), fw_dac_swinglvl);
881 coex_dm->cur_fw_dac_swing_lvl = fw_dac_swinglvl;
884 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL,
885 "[BTCoex] preFwDacSwingLvl=%d, curFwDacSwingLvl=%d\n",
886 coex_dm->pre_fw_dac_swing_lvl,
887 coex_dm->cur_fw_dac_swing_lvl);
889 if (coex_dm->pre_fw_dac_swing_lvl ==
890 coex_dm->cur_fw_dac_swing_lvl)
894 halbtc8192e2ant_setfw_dac_swinglevel(btcoexist,
895 coex_dm->cur_fw_dac_swing_lvl);
897 coex_dm->pre_fw_dac_swing_lvl = coex_dm->cur_fw_dac_swing_lvl;
900 static void halbtc8192e2ant_set_sw_rf_rx_lpf_corner(struct btc_coexist *btcoexist,
901 bool rx_rf_shrink_on)
903 if (rx_rf_shrink_on) {
904 /* Shrink RF Rx LPF corner */
905 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC,
906 "[BTCoex], Shrink RF Rx LPF corner!!\n");
907 btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1e,
910 /* Resume RF Rx LPF corner
911 * After initialized, we can use coex_dm->btRf0x1eBackup */
912 if (btcoexist->initilized) {
913 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC,
914 "[BTCoex], Resume RF Rx LPF corner!!\n");
915 btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1e,
917 coex_dm->bt_rf0x1e_backup);
922 static void halbtc8192e2ant_rf_shrink(struct btc_coexist *btcoexist,
923 bool force_exec, bool rx_rf_shrink_on)
925 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW,
926 "[BTCoex], %s turn Rx RF Shrink = %s\n",
927 (force_exec? "force to":""), ((rx_rf_shrink_on)? "ON":"OFF"));
928 coex_dm->cur_rf_rx_lpf_shrink = rx_rf_shrink_on;
931 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL,
932 "[BTCoex]bPreRfRxLpfShrink=%d,bCurRfRxLpfShrink=%d\n",
933 coex_dm->pre_rf_rx_lpf_shrink,
934 coex_dm->cur_rf_rx_lpf_shrink);
936 if (coex_dm->pre_rf_rx_lpf_shrink ==
937 coex_dm->cur_rf_rx_lpf_shrink)
940 halbtc8192e2ant_set_sw_rf_rx_lpf_corner(btcoexist,
941 coex_dm->cur_rf_rx_lpf_shrink);
943 coex_dm->pre_rf_rx_lpf_shrink = coex_dm->cur_rf_rx_lpf_shrink;
946 static void halbtc8192e2ant_set_dac_swingreg(struct btc_coexist *btcoexist,
951 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC,
952 "[BTCoex], Write SwDacSwing = 0x%x\n", level);
953 btcoexist->btc_write_1byte_bitmask(btcoexist, 0x883, 0x3e, val);
956 static void halbtc8192e2ant_setsw_fulltime_dacswing(struct btc_coexist *btcoexist,
961 halbtc8192e2ant_set_dac_swingreg(btcoexist, sw_dac_swinglvl);
963 halbtc8192e2ant_set_dac_swingreg(btcoexist, 0x18);
966 static void halbtc8192e2ant_DacSwing(struct btc_coexist *btcoexist,
967 bool force_exec, bool dac_swingon,
970 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW,
971 "[BTCoex], %s turn DacSwing=%s, dac_swinglvl=0x%x\n",
972 (force_exec? "force to":""),
973 ((dac_swingon)? "ON":"OFF"), dac_swinglvl);
974 coex_dm->cur_dac_swing_on = dac_swingon;
975 coex_dm->cur_dac_swing_lvl = dac_swinglvl;
978 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL,
979 "[BTCoex], bPreDacSwingOn=%d, preDacSwingLvl=0x%x, ",
980 coex_dm->pre_dac_swing_on,
981 coex_dm->pre_dac_swing_lvl);
982 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL,
983 "bCurDacSwingOn=%d, curDacSwingLvl=0x%x\n",
984 coex_dm->cur_dac_swing_on,
985 coex_dm->cur_dac_swing_lvl);
987 if ((coex_dm->pre_dac_swing_on == coex_dm->cur_dac_swing_on) &&
988 (coex_dm->pre_dac_swing_lvl == coex_dm->cur_dac_swing_lvl))
992 halbtc8192e2ant_setsw_fulltime_dacswing(btcoexist, dac_swingon,
995 coex_dm->pre_dac_swing_on = coex_dm->cur_dac_swing_on;
996 coex_dm->pre_dac_swing_lvl = coex_dm->cur_dac_swing_lvl;
999 static void halbtc8192e2ant_set_agc_table(struct btc_coexist *btcoexist,
1003 /* BB AGC Gain Table */
1005 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC,
1006 "[BTCoex], BB Agc Table On!\n");
1007 btcoexist->btc_write_4byte(btcoexist, 0xc78, 0x0a1A0001);
1008 btcoexist->btc_write_4byte(btcoexist, 0xc78, 0x091B0001);
1009 btcoexist->btc_write_4byte(btcoexist, 0xc78, 0x081C0001);
1010 btcoexist->btc_write_4byte(btcoexist, 0xc78, 0x071D0001);
1011 btcoexist->btc_write_4byte(btcoexist, 0xc78, 0x061E0001);
1012 btcoexist->btc_write_4byte(btcoexist, 0xc78, 0x051F0001);
1014 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC,
1015 "[BTCoex], BB Agc Table Off!\n");
1016 btcoexist->btc_write_4byte(btcoexist, 0xc78, 0xaa1A0001);
1017 btcoexist->btc_write_4byte(btcoexist, 0xc78, 0xa91B0001);
1018 btcoexist->btc_write_4byte(btcoexist, 0xc78, 0xa81C0001);
1019 btcoexist->btc_write_4byte(btcoexist, 0xc78, 0xa71D0001);
1020 btcoexist->btc_write_4byte(btcoexist, 0xc78, 0xa61E0001);
1021 btcoexist->btc_write_4byte(btcoexist, 0xc78, 0xa51F0001);
1025 static void halbtc8192e2ant_AgcTable(struct btc_coexist *btcoexist,
1026 bool force_exec, bool agc_table_en)
1028 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW,
1029 "[BTCoex], %s %s Agc Table\n",
1030 (force_exec? "force to":""),
1031 ((agc_table_en)? "Enable":"Disable"));
1032 coex_dm->cur_agc_table_en = agc_table_en;
1035 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL,
1036 "[BTCoex], bPreAgcTableEn=%d, bCurAgcTableEn=%d\n",
1037 coex_dm->pre_agc_table_en, coex_dm->cur_agc_table_en);
1039 if (coex_dm->pre_agc_table_en == coex_dm->cur_agc_table_en)
1042 halbtc8192e2ant_set_agc_table(btcoexist, agc_table_en);
1044 coex_dm->pre_agc_table_en = coex_dm->cur_agc_table_en;
1047 static void halbtc8192e2ant_set_coex_table(struct btc_coexist *btcoexist,
1048 u32 val0x6c0, u32 val0x6c4,
1049 u32 val0x6c8, u8 val0x6cc)
1051 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC,
1052 "[BTCoex], set coex table, set 0x6c0=0x%x\n", val0x6c0);
1053 btcoexist->btc_write_4byte(btcoexist, 0x6c0, val0x6c0);
1055 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC,
1056 "[BTCoex], set coex table, set 0x6c4=0x%x\n", val0x6c4);
1057 btcoexist->btc_write_4byte(btcoexist, 0x6c4, val0x6c4);
1059 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC,
1060 "[BTCoex], set coex table, set 0x6c8=0x%x\n", val0x6c8);
1061 btcoexist->btc_write_4byte(btcoexist, 0x6c8, val0x6c8);
1063 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_EXEC,
1064 "[BTCoex], set coex table, set 0x6cc=0x%x\n", val0x6cc);
1065 btcoexist->btc_write_1byte(btcoexist, 0x6cc, val0x6cc);
1068 static void halbtc8192e2ant_coex_table(struct btc_coexist *btcoexist,
1070 u32 val0x6c0, u32 val0x6c4,
1071 u32 val0x6c8, u8 val0x6cc)
1073 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW,
1074 "[BTCoex], %s write Coex Table 0x6c0=0x%x, ",
1075 (force_exec? "force to":""), val0x6c0);
1076 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW,
1077 "0x6c4=0x%x, 0x6c8=0x%x, 0x6cc=0x%x\n",
1078 val0x6c4, val0x6c8, val0x6cc);
1079 coex_dm->cur_val0x6c0 = val0x6c0;
1080 coex_dm->cur_val0x6c4 = val0x6c4;
1081 coex_dm->cur_val0x6c8 = val0x6c8;
1082 coex_dm->cur_val0x6cc = val0x6cc;
1085 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL,
1086 "[BTCoex], preVal0x6c0=0x%x, preVal0x6c4=0x%x, ",
1087 coex_dm->pre_val0x6c0, coex_dm->pre_val0x6c4);
1088 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL,
1089 "preVal0x6c8=0x%x, preVal0x6cc=0x%x !!\n",
1090 coex_dm->pre_val0x6c8, coex_dm->pre_val0x6cc);
1091 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL,
1092 "[BTCoex], curVal0x6c0=0x%x, curVal0x6c4=0x%x, \n",
1093 coex_dm->cur_val0x6c0, coex_dm->cur_val0x6c4);
1094 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_SW_DETAIL,
1095 "curVal0x6c8=0x%x, curVal0x6cc=0x%x !!\n",
1096 coex_dm->cur_val0x6c8, coex_dm->cur_val0x6cc);
1098 if ((coex_dm->pre_val0x6c0 == coex_dm->cur_val0x6c0) &&
1099 (coex_dm->pre_val0x6c4 == coex_dm->cur_val0x6c4) &&
1100 (coex_dm->pre_val0x6c8 == coex_dm->cur_val0x6c8) &&
1101 (coex_dm->pre_val0x6cc == coex_dm->cur_val0x6cc))
1104 halbtc8192e2ant_set_coex_table(btcoexist, val0x6c0, val0x6c4,
1105 val0x6c8, val0x6cc);
1107 coex_dm->pre_val0x6c0 = coex_dm->cur_val0x6c0;
1108 coex_dm->pre_val0x6c4 = coex_dm->cur_val0x6c4;
1109 coex_dm->pre_val0x6c8 = coex_dm->cur_val0x6c8;
1110 coex_dm->pre_val0x6cc = coex_dm->cur_val0x6cc;
1113 static void halbtc8192e2ant_coex_table_with_type(struct btc_coexist *btcoexist,
1114 bool force_exec, u8 type)
1118 halbtc8192e2ant_coex_table(btcoexist, force_exec, 0x55555555,
1119 0x5a5a5a5a, 0xffffff, 0x3);
1122 halbtc8192e2ant_coex_table(btcoexist, force_exec, 0x5a5a5a5a,
1123 0x5a5a5a5a, 0xffffff, 0x3);
1126 halbtc8192e2ant_coex_table(btcoexist, force_exec, 0x55555555,
1127 0x5ffb5ffb, 0xffffff, 0x3);
1130 halbtc8192e2ant_coex_table(btcoexist, force_exec, 0xdfffdfff,
1131 0x5fdb5fdb, 0xffffff, 0x3);
1134 halbtc8192e2ant_coex_table(btcoexist, force_exec, 0xdfffdfff,
1135 0x5ffb5ffb, 0xffffff, 0x3);
1142 static void halbtc8192e2ant_set_fw_ignore_wlanact(struct btc_coexist *btcoexist,
1145 u8 h2c_parameter[1] ={0};
1148 h2c_parameter[0] |= BIT0; /* function enable */
1150 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC,
1151 "[BTCoex]set FW for BT Ignore Wlan_Act, FW write 0x63=0x%x\n",
1154 btcoexist->btc_fill_h2c(btcoexist, 0x63, 1, h2c_parameter);
1157 static void halbtc8192e2ant_IgnoreWlanAct(struct btc_coexist *btcoexist,
1158 bool force_exec, bool enable)
1160 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW,
1161 "[BTCoex], %s turn Ignore WlanAct %s\n",
1162 (force_exec? "force to":""), (enable? "ON":"OFF"));
1163 coex_dm->cur_ignore_wlan_act = enable;
1166 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL,
1167 "[BTCoex], bPreIgnoreWlanAct = %d ",
1168 coex_dm->pre_ignore_wlan_act);
1169 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL,
1170 "bCurIgnoreWlanAct = %d!!\n",
1171 coex_dm->cur_ignore_wlan_act);
1173 if (coex_dm->pre_ignore_wlan_act ==
1174 coex_dm->cur_ignore_wlan_act)
1177 halbtc8192e2ant_set_fw_ignore_wlanact(btcoexist, enable);
1179 coex_dm->pre_ignore_wlan_act = coex_dm->cur_ignore_wlan_act;
1182 static void halbtc8192e2ant_SetFwPstdma(struct btc_coexist *btcoexist, u8 byte1,
1183 u8 byte2, u8 byte3, u8 byte4, u8 byte5)
1185 u8 h2c_parameter[5] ={0};
1187 h2c_parameter[0] = byte1;
1188 h2c_parameter[1] = byte2;
1189 h2c_parameter[2] = byte3;
1190 h2c_parameter[3] = byte4;
1191 h2c_parameter[4] = byte5;
1193 coex_dm->ps_tdma_para[0] = byte1;
1194 coex_dm->ps_tdma_para[1] = byte2;
1195 coex_dm->ps_tdma_para[2] = byte3;
1196 coex_dm->ps_tdma_para[3] = byte4;
1197 coex_dm->ps_tdma_para[4] = byte5;
1199 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC,
1200 "[BTCoex], FW write 0x60(5bytes)=0x%x%08x\n",
1202 h2c_parameter[1] << 24 | h2c_parameter[2] << 16 |
1203 h2c_parameter[3] << 8 | h2c_parameter[4]);
1205 btcoexist->btc_fill_h2c(btcoexist, 0x60, 5, h2c_parameter);
1208 static void halbtc8192e2ant_sw_mechanism1(struct btc_coexist *btcoexist,
1210 bool low_penalty_ra,
1212 bool btlan_constrain)
1214 halbtc8192e2ant_rf_shrink(btcoexist, NORMAL_EXEC, shrink_rx_lpf);
1217 static void halbtc8192e2ant_sw_mechanism2(struct btc_coexist *btcoexist,
1218 bool agc_table_shift,
1223 halbtc8192e2ant_AgcTable(btcoexist, NORMAL_EXEC, agc_table_shift);
1224 halbtc8192e2ant_DacSwing(btcoexist, NORMAL_EXEC, sw_dac_swing,
1228 static void halbtc8192e2ant_ps_tdma(struct btc_coexist *btcoexist,
1229 bool force_exec, bool turn_on, u8 type)
1232 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW,
1233 "[BTCoex], %s turn %s PS TDMA, type=%d\n",
1234 (force_exec? "force to":""), (turn_on? "ON":"OFF"), type);
1235 coex_dm->cur_ps_tdma_on = turn_on;
1236 coex_dm->cur_ps_tdma = type;
1239 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL,
1240 "[BTCoex], bPrePsTdmaOn = %d, bCurPsTdmaOn = %d!!\n",
1241 coex_dm->pre_ps_tdma_on, coex_dm->cur_ps_tdma_on);
1242 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL,
1243 "[BTCoex], prePsTdma = %d, curPsTdma = %d!!\n",
1244 coex_dm->pre_ps_tdma, coex_dm->cur_ps_tdma);
1246 if ((coex_dm->pre_ps_tdma_on == coex_dm->cur_ps_tdma_on) &&
1247 (coex_dm->pre_ps_tdma == coex_dm->cur_ps_tdma))
1254 halbtc8192e2ant_SetFwPstdma(btcoexist, 0xe3, 0x1a,
1258 halbtc8192e2ant_SetFwPstdma(btcoexist, 0xe3, 0x12,
1262 halbtc8192e2ant_SetFwPstdma(btcoexist, 0xe3, 0x1c,
1266 halbtc8192e2ant_SetFwPstdma(btcoexist, 0xe3, 0x10,
1270 halbtc8192e2ant_SetFwPstdma(btcoexist, 0xe3, 0x1a,
1274 halbtc8192e2ant_SetFwPstdma(btcoexist, 0xe3, 0x12,
1278 halbtc8192e2ant_SetFwPstdma(btcoexist, 0xe3, 0x1c,
1282 halbtc8192e2ant_SetFwPstdma(btcoexist, 0xa3, 0x10,
1286 halbtc8192e2ant_SetFwPstdma(btcoexist, 0xe3, 0x1a,
1290 halbtc8192e2ant_SetFwPstdma(btcoexist, 0xe3, 0x12,
1294 halbtc8192e2ant_SetFwPstdma(btcoexist, 0xe3, 0x1c,
1298 halbtc8192e2ant_SetFwPstdma(btcoexist, 0xe3, 0x10,
1302 halbtc8192e2ant_SetFwPstdma(btcoexist, 0xe3, 0x1a,
1306 halbtc8192e2ant_SetFwPstdma(btcoexist, 0xe3, 0x12,
1310 halbtc8192e2ant_SetFwPstdma(btcoexist, 0xe3, 0x1c,
1314 halbtc8192e2ant_SetFwPstdma(btcoexist, 0xe3, 0x12,
1318 halbtc8192e2ant_SetFwPstdma(btcoexist, 0x61, 0x20,
1322 halbtc8192e2ant_SetFwPstdma(btcoexist, 0xe3, 0x5,
1326 halbtc8192e2ant_SetFwPstdma(btcoexist, 0xe3, 0x25,
1330 halbtc8192e2ant_SetFwPstdma(btcoexist, 0xe3, 0x25,
1334 halbtc8192e2ant_SetFwPstdma(btcoexist, 0xe3, 0x15,
1338 halbtc8192e2ant_SetFwPstdma(btcoexist, 0xe3, 0x1a,
1343 /* disable PS tdma */
1347 halbtc8192e2ant_SetFwPstdma(btcoexist, 0x8, 0x0, 0x0,
1349 btcoexist->btc_write_1byte(btcoexist, 0x92c, 0x4);
1352 halbtc8192e2ant_SetFwPstdma(btcoexist, 0x0, 0x0, 0x0,
1355 btcoexist->btc_write_1byte(btcoexist, 0x92c, 0x20);
1360 /* update pre state */
1361 coex_dm->pre_ps_tdma_on = coex_dm->cur_ps_tdma_on;
1362 coex_dm->pre_ps_tdma = coex_dm->cur_ps_tdma;
1365 static void halbtc8192e2ant_set_switch_sstype(struct btc_coexist *btcoexist,
1368 u8 mimops = BTC_MIMO_PS_DYNAMIC;
1369 u32 disra_mask = 0x0;
1371 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
1372 "[BTCoex], REAL set SS Type = %d\n", sstype);
1374 disra_mask = halbtc8192e2ant_decidera_mask(btcoexist, sstype,
1375 coex_dm->curra_masktype);
1376 halbtc8192e2ant_Updatera_mask(btcoexist, FORCE_EXEC, disra_mask);
1379 halbtc8192e2ant_ps_tdma(btcoexist, FORCE_EXEC, false, 1);
1380 /* switch ofdm path */
1381 btcoexist->btc_write_1byte(btcoexist, 0xc04, 0x11);
1382 btcoexist->btc_write_1byte(btcoexist, 0xd04, 0x1);
1383 btcoexist->btc_write_4byte(btcoexist, 0x90c, 0x81111111);
1384 /* switch cck patch */
1385 btcoexist->btc_write_1byte_bitmask(btcoexist, 0xe77, 0x4, 0x1);
1386 btcoexist->btc_write_1byte(btcoexist, 0xa07, 0x81);
1387 mimops=BTC_MIMO_PS_STATIC;
1388 } else if (sstype == 2) {
1389 halbtc8192e2ant_ps_tdma(btcoexist, FORCE_EXEC, false, 0);
1390 btcoexist->btc_write_1byte(btcoexist, 0xc04, 0x33);
1391 btcoexist->btc_write_1byte(btcoexist, 0xd04, 0x3);
1392 btcoexist->btc_write_4byte(btcoexist, 0x90c, 0x81121313);
1393 btcoexist->btc_write_1byte_bitmask(btcoexist, 0xe77, 0x4, 0x0);
1394 btcoexist->btc_write_1byte(btcoexist, 0xa07, 0x41);
1395 mimops=BTC_MIMO_PS_DYNAMIC;
1397 /* set rx 1ss or 2ss */
1398 btcoexist->btc_set(btcoexist, BTC_SET_ACT_SEND_MIMO_PS, &mimops);
1401 static void halbtc8192e2ant_switch_sstype(struct btc_coexist *btcoexist,
1402 bool force_exec, u8 new_sstype)
1404 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
1405 "[BTCoex], %s Switch SS Type = %d\n",
1406 (force_exec? "force to":""), new_sstype);
1407 coex_dm->cur_sstype = new_sstype;
1410 if (coex_dm->pre_sstype == coex_dm->cur_sstype)
1413 halbtc8192e2ant_set_switch_sstype(btcoexist, coex_dm->cur_sstype);
1415 coex_dm->pre_sstype = coex_dm->cur_sstype;
1418 static void halbtc8192e2ant_coex_alloff(struct btc_coexist *btcoexist)
1421 halbtc8192e2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);
1422 halbtc8192e2ant_fw_dac_swinglvl(btcoexist, NORMAL_EXEC, 6);
1423 halbtc8192e2ant_dec_btpwr(btcoexist, NORMAL_EXEC, 0);
1426 halbtc8192e2ant_sw_mechanism1(btcoexist, false, false, false, false);
1427 halbtc8192e2ant_sw_mechanism2(btcoexist, false, false, false, 0x18);
1430 halbtc8192e2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 0);
1433 static void halbtc8192e2ant_init_coex_dm(struct btc_coexist *btcoexist)
1435 /* force to reset coex mechanism */
1437 halbtc8192e2ant_ps_tdma(btcoexist, FORCE_EXEC, false, 1);
1438 halbtc8192e2ant_fw_dac_swinglvl(btcoexist, FORCE_EXEC, 6);
1439 halbtc8192e2ant_dec_btpwr(btcoexist, FORCE_EXEC, 0);
1441 halbtc8192e2ant_coex_table_with_type(btcoexist, FORCE_EXEC, 0);
1442 halbtc8192e2ant_switch_sstype(btcoexist, FORCE_EXEC, 2);
1444 halbtc8192e2ant_sw_mechanism1(btcoexist, false, false, false, false);
1445 halbtc8192e2ant_sw_mechanism2(btcoexist, false, false, false, 0x18);
1448 static void halbtc8192e2ant_action_bt_inquiry(struct btc_coexist *btcoexist)
1450 bool low_pwr_disable = true;
1452 btcoexist->btc_set(btcoexist, BTC_SET_ACT_DISABLE_LOW_POWER,
1455 halbtc8192e2ant_switch_sstype(btcoexist, NORMAL_EXEC, 1);
1457 halbtc8192e2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 2);
1458 halbtc8192e2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 3);
1459 halbtc8192e2ant_fw_dac_swinglvl(btcoexist, NORMAL_EXEC, 6);
1460 halbtc8192e2ant_dec_btpwr(btcoexist, NORMAL_EXEC, 0);
1462 halbtc8192e2ant_sw_mechanism1(btcoexist, false, false, false, false);
1463 halbtc8192e2ant_sw_mechanism2(btcoexist, false, false, false, 0x18);
1466 static bool halbtc8192e2ant_is_common_action(struct btc_coexist *btcoexist)
1468 struct btc_bt_link_info *bt_link_info = &btcoexist->bt_link_info;
1469 bool common = false, wifi_connected = false, wifi_busy = false;
1470 bool bt_hson = false, low_pwr_disable = false;
1472 btcoexist->btc_get(btcoexist, BTC_GET_BL_HS_OPERATION, &bt_hson);
1473 btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_CONNECTED,
1475 btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_BUSY, &wifi_busy);
1477 if (bt_link_info->sco_exist || bt_link_info->hid_exist)
1478 halbtc8192e2ant_limited_tx(btcoexist, NORMAL_EXEC, 1, 0, 0, 0);
1480 halbtc8192e2ant_limited_tx(btcoexist, NORMAL_EXEC, 0, 0, 0, 0);
1482 if (!wifi_connected) {
1483 low_pwr_disable = false;
1484 btcoexist->btc_set(btcoexist, BTC_SET_ACT_DISABLE_LOW_POWER,
1487 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
1488 "[BTCoex], Wifi non-connected idle!!\n");
1490 if ((BT_8192E_2ANT_BT_STATUS_NON_CONNECTED_IDLE ==
1491 coex_dm->bt_status) ||
1492 (BT_8192E_2ANT_BT_STATUS_CONNECTED_IDLE ==
1493 coex_dm->bt_status)) {
1494 halbtc8192e2ant_switch_sstype(btcoexist, NORMAL_EXEC,
1496 halbtc8192e2ant_coex_table_with_type(btcoexist,
1498 halbtc8192e2ant_ps_tdma(btcoexist, NORMAL_EXEC, false,
1501 halbtc8192e2ant_switch_sstype(btcoexist, NORMAL_EXEC,
1503 halbtc8192e2ant_coex_table_with_type(btcoexist,
1505 halbtc8192e2ant_ps_tdma(btcoexist, NORMAL_EXEC, false,
1509 halbtc8192e2ant_fw_dac_swinglvl(btcoexist, NORMAL_EXEC, 6);
1510 halbtc8192e2ant_dec_btpwr(btcoexist, NORMAL_EXEC, 0);
1512 halbtc8192e2ant_sw_mechanism1(btcoexist, false, false, false,
1514 halbtc8192e2ant_sw_mechanism2(btcoexist, false, false, false,
1519 if (BT_8192E_2ANT_BT_STATUS_NON_CONNECTED_IDLE ==
1520 coex_dm->bt_status) {
1521 low_pwr_disable = false;
1522 btcoexist->btc_set(btcoexist,
1523 BTC_SET_ACT_DISABLE_LOW_POWER,
1526 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
1527 "Wifi connected + BT non connected-idle!!\n");
1529 halbtc8192e2ant_switch_sstype(btcoexist, NORMAL_EXEC,
1531 halbtc8192e2ant_coex_table_with_type(btcoexist,
1533 halbtc8192e2ant_ps_tdma(btcoexist, NORMAL_EXEC, false,
1535 halbtc8192e2ant_fw_dac_swinglvl(btcoexist, NORMAL_EXEC,
1537 halbtc8192e2ant_dec_btpwr(btcoexist, NORMAL_EXEC, 0);
1539 halbtc8192e2ant_sw_mechanism1(btcoexist, false, false,
1541 halbtc8192e2ant_sw_mechanism2(btcoexist, false, false,
1545 } else if (BT_8192E_2ANT_BT_STATUS_CONNECTED_IDLE ==
1546 coex_dm->bt_status) {
1547 low_pwr_disable = true;
1548 btcoexist->btc_set(btcoexist,
1549 BTC_SET_ACT_DISABLE_LOW_POWER,
1554 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
1555 "Wifi connected + BT connected-idle!!\n");
1557 halbtc8192e2ant_switch_sstype(btcoexist, NORMAL_EXEC,
1559 halbtc8192e2ant_coex_table_with_type(btcoexist,
1561 halbtc8192e2ant_ps_tdma(btcoexist, NORMAL_EXEC, false,
1563 halbtc8192e2ant_fw_dac_swinglvl(btcoexist, NORMAL_EXEC,
1565 halbtc8192e2ant_dec_btpwr(btcoexist, NORMAL_EXEC, 0);
1567 halbtc8192e2ant_sw_mechanism1(btcoexist, true, false,
1569 halbtc8192e2ant_sw_mechanism2(btcoexist, false, false,
1574 low_pwr_disable = true;
1575 btcoexist->btc_set(btcoexist,
1576 BTC_SET_ACT_DISABLE_LOW_POWER,
1580 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
1581 "Wifi Connected-Busy + BT Busy!!\n");
1584 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
1585 "Wifi Connected-Idle + BT Busy!!\n");
1587 halbtc8192e2ant_switch_sstype(btcoexist,
1589 halbtc8192e2ant_coex_table_with_type(btcoexist,
1592 halbtc8192e2ant_ps_tdma(btcoexist, NORMAL_EXEC,
1594 halbtc8192e2ant_fw_dac_swinglvl(btcoexist,
1596 halbtc8192e2ant_dec_btpwr(btcoexist,
1598 halbtc8192e2ant_sw_mechanism1(btcoexist, false,
1601 halbtc8192e2ant_sw_mechanism2(btcoexist, false,
1611 static void halbtc8192e2ant_tdma_duration_adjust(struct btc_coexist *btcoexist,
1612 bool sco_hid, bool tx_pause,
1615 static int up, dn, m, n, wait_cnt;
1616 /* 0: no change, +1: increase WiFi duration,
1617 * -1: decrease WiFi duration */
1621 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW,
1622 "[BTCoex], TdmaDurationAdjust()\n");
1624 if (!coex_dm->auto_tdma_adjust) {
1625 coex_dm->auto_tdma_adjust = true;
1626 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL,
1627 "[BTCoex], first run TdmaDurationAdjust()!!\n");
1630 if (max_interval == 1) {
1631 halbtc8192e2ant_ps_tdma(btcoexist,
1634 coex_dm->ps_tdma_du_adj_type = 13;
1635 } else if (max_interval == 2) {
1636 halbtc8192e2ant_ps_tdma(btcoexist,
1639 coex_dm->ps_tdma_du_adj_type = 14;
1640 } else if (max_interval == 3) {
1641 halbtc8192e2ant_ps_tdma(btcoexist,
1644 coex_dm->ps_tdma_du_adj_type = 15;
1646 halbtc8192e2ant_ps_tdma(btcoexist,
1649 coex_dm->ps_tdma_du_adj_type = 15;
1652 if (max_interval == 1) {
1653 halbtc8192e2ant_ps_tdma(btcoexist,
1656 coex_dm->ps_tdma_du_adj_type = 9;
1657 } else if (max_interval == 2) {
1658 halbtc8192e2ant_ps_tdma(btcoexist,
1661 coex_dm->ps_tdma_du_adj_type = 10;
1662 } else if (max_interval == 3) {
1663 halbtc8192e2ant_ps_tdma(btcoexist,
1666 coex_dm->ps_tdma_du_adj_type = 11;
1668 halbtc8192e2ant_ps_tdma(btcoexist,
1671 coex_dm->ps_tdma_du_adj_type = 11;
1676 if (max_interval == 1) {
1677 halbtc8192e2ant_ps_tdma(btcoexist,
1680 coex_dm->ps_tdma_du_adj_type = 5;
1681 } else if (max_interval == 2) {
1682 halbtc8192e2ant_ps_tdma(btcoexist,
1685 coex_dm->ps_tdma_du_adj_type = 6;
1686 } else if (max_interval == 3) {
1687 halbtc8192e2ant_ps_tdma(btcoexist,
1690 coex_dm->ps_tdma_du_adj_type = 7;
1692 halbtc8192e2ant_ps_tdma(btcoexist,
1695 coex_dm->ps_tdma_du_adj_type = 7;
1698 if (max_interval == 1) {
1699 halbtc8192e2ant_ps_tdma(btcoexist,
1702 coex_dm->ps_tdma_du_adj_type = 1;
1703 } else if (max_interval == 2) {
1704 halbtc8192e2ant_ps_tdma(btcoexist,
1707 coex_dm->ps_tdma_du_adj_type = 2;
1708 } else if (max_interval == 3) {
1709 halbtc8192e2ant_ps_tdma(btcoexist,
1712 coex_dm->ps_tdma_du_adj_type = 3;
1714 halbtc8192e2ant_ps_tdma(btcoexist,
1717 coex_dm->ps_tdma_du_adj_type = 3;
1729 /* acquire the BT TRx retry count from BT_Info byte2 */
1730 retry_cnt = coex_sta->bt_retry_cnt;
1731 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL,
1732 "[BTCoex], retry_cnt = %d\n", retry_cnt);
1733 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL,
1734 "[BTCoex], up=%d, dn=%d, m=%d, n=%d, wait_cnt=%d\n",
1735 up, dn, m, n, wait_cnt);
1738 /* no retry in the last 2-second duration */
1739 if (retry_cnt == 0) {
1752 BTC_PRINT(BTC_MSG_ALGORITHM,
1753 ALGO_TRACE_FW_DETAIL,
1754 "[BTCoex]Increase wifi duration!!\n");
1756 } else if (retry_cnt <= 3) {
1777 BTC_PRINT(BTC_MSG_ALGORITHM,
1778 ALGO_TRACE_FW_DETAIL,
1779 "Reduce wifi duration for retry<3\n");
1795 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL,
1796 "Decrease wifi duration for retryCounter>3!!\n");
1799 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL,
1800 "[BTCoex], max Interval = %d\n", max_interval);
1801 if (max_interval == 1) {
1803 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL,
1804 "[BTCoex], TxPause = 1\n");
1806 if (coex_dm->cur_ps_tdma == 71) {
1807 halbtc8192e2ant_ps_tdma(btcoexist,
1810 coex_dm->ps_tdma_du_adj_type = 5;
1811 } else if (coex_dm->cur_ps_tdma == 1) {
1812 halbtc8192e2ant_ps_tdma(btcoexist,
1815 coex_dm->ps_tdma_du_adj_type = 5;
1816 } else if (coex_dm->cur_ps_tdma == 2) {
1817 halbtc8192e2ant_ps_tdma(btcoexist,
1820 coex_dm->ps_tdma_du_adj_type = 6;
1821 } else if (coex_dm->cur_ps_tdma == 3) {
1822 halbtc8192e2ant_ps_tdma(btcoexist,
1825 coex_dm->ps_tdma_du_adj_type = 7;
1826 } else if (coex_dm->cur_ps_tdma == 4) {
1827 halbtc8192e2ant_ps_tdma(btcoexist,
1830 coex_dm->ps_tdma_du_adj_type = 8;
1832 if (coex_dm->cur_ps_tdma == 9) {
1833 halbtc8192e2ant_ps_tdma(btcoexist,
1836 coex_dm->ps_tdma_du_adj_type = 13;
1837 } else if (coex_dm->cur_ps_tdma == 10) {
1838 halbtc8192e2ant_ps_tdma(btcoexist,
1841 coex_dm->ps_tdma_du_adj_type = 14;
1842 } else if (coex_dm->cur_ps_tdma == 11) {
1843 halbtc8192e2ant_ps_tdma(btcoexist,
1846 coex_dm->ps_tdma_du_adj_type = 15;
1847 } else if (coex_dm->cur_ps_tdma == 12) {
1848 halbtc8192e2ant_ps_tdma(btcoexist,
1851 coex_dm->ps_tdma_du_adj_type = 16;
1855 if (coex_dm->cur_ps_tdma == 5) {
1856 halbtc8192e2ant_ps_tdma(
1860 coex_dm->ps_tdma_du_adj_type =
1862 } else if (coex_dm->cur_ps_tdma == 6) {
1863 halbtc8192e2ant_ps_tdma(
1867 coex_dm->ps_tdma_du_adj_type =
1869 } else if (coex_dm->cur_ps_tdma == 7) {
1870 halbtc8192e2ant_ps_tdma(
1874 coex_dm->ps_tdma_du_adj_type =
1876 } else if (coex_dm->cur_ps_tdma == 13) {
1877 halbtc8192e2ant_ps_tdma(
1881 coex_dm->ps_tdma_du_adj_type =
1883 } else if (coex_dm->cur_ps_tdma == 14) {
1884 halbtc8192e2ant_ps_tdma(
1888 coex_dm->ps_tdma_du_adj_type =
1890 } else if (coex_dm->cur_ps_tdma == 15) {
1891 halbtc8192e2ant_ps_tdma(
1895 coex_dm->ps_tdma_du_adj_type =
1898 } else if (result == 1) {
1899 if (coex_dm->cur_ps_tdma == 8) {
1900 halbtc8192e2ant_ps_tdma(
1904 coex_dm->ps_tdma_du_adj_type =
1906 } else if (coex_dm->cur_ps_tdma == 7) {
1907 halbtc8192e2ant_ps_tdma(
1911 coex_dm->ps_tdma_du_adj_type =
1913 } else if (coex_dm->cur_ps_tdma == 6) {
1914 halbtc8192e2ant_ps_tdma(
1918 coex_dm->ps_tdma_du_adj_type =
1920 } else if (coex_dm->cur_ps_tdma == 16) {
1921 halbtc8192e2ant_ps_tdma(
1925 coex_dm->ps_tdma_du_adj_type =
1927 } else if (coex_dm->cur_ps_tdma == 15) {
1928 halbtc8192e2ant_ps_tdma(
1932 coex_dm->ps_tdma_du_adj_type =
1934 } else if (coex_dm->cur_ps_tdma == 14) {
1935 halbtc8192e2ant_ps_tdma(
1939 coex_dm->ps_tdma_du_adj_type =
1944 BTC_PRINT(BTC_MSG_ALGORITHM,
1945 ALGO_TRACE_FW_DETAIL,
1946 "[BTCoex], TxPause = 0\n");
1947 if (coex_dm->cur_ps_tdma == 5) {
1948 halbtc8192e2ant_ps_tdma(btcoexist,
1951 coex_dm->ps_tdma_du_adj_type = 71;
1952 } else if (coex_dm->cur_ps_tdma == 6) {
1953 halbtc8192e2ant_ps_tdma(btcoexist,
1956 coex_dm->ps_tdma_du_adj_type = 2;
1957 } else if (coex_dm->cur_ps_tdma == 7) {
1958 halbtc8192e2ant_ps_tdma(btcoexist,
1961 coex_dm->ps_tdma_du_adj_type = 3;
1962 } else if (coex_dm->cur_ps_tdma == 8) {
1963 halbtc8192e2ant_ps_tdma(btcoexist,
1966 coex_dm->ps_tdma_du_adj_type = 4;
1968 if (coex_dm->cur_ps_tdma == 13) {
1969 halbtc8192e2ant_ps_tdma(btcoexist,
1972 coex_dm->ps_tdma_du_adj_type = 9;
1973 } else if (coex_dm->cur_ps_tdma == 14) {
1974 halbtc8192e2ant_ps_tdma(btcoexist,
1977 coex_dm->ps_tdma_du_adj_type = 10;
1978 } else if (coex_dm->cur_ps_tdma == 15) {
1979 halbtc8192e2ant_ps_tdma(btcoexist,
1982 coex_dm->ps_tdma_du_adj_type = 11;
1983 } else if (coex_dm->cur_ps_tdma == 16) {
1984 halbtc8192e2ant_ps_tdma(btcoexist,
1987 coex_dm->ps_tdma_du_adj_type = 12;
1991 if (coex_dm->cur_ps_tdma == 71) {
1992 halbtc8192e2ant_ps_tdma(
1996 coex_dm->ps_tdma_du_adj_type =
1998 } else if (coex_dm->cur_ps_tdma == 1) {
1999 halbtc8192e2ant_ps_tdma(
2003 coex_dm->ps_tdma_du_adj_type =
2005 } else if (coex_dm->cur_ps_tdma == 2) {
2006 halbtc8192e2ant_ps_tdma(
2010 coex_dm->ps_tdma_du_adj_type =
2012 } else if (coex_dm->cur_ps_tdma == 3) {
2013 halbtc8192e2ant_ps_tdma(
2017 coex_dm->ps_tdma_du_adj_type =
2019 } else if (coex_dm->cur_ps_tdma == 9) {
2020 halbtc8192e2ant_ps_tdma(
2024 coex_dm->ps_tdma_du_adj_type =
2026 } else if (coex_dm->cur_ps_tdma == 10) {
2027 halbtc8192e2ant_ps_tdma(
2031 coex_dm->ps_tdma_du_adj_type =
2033 } else if (coex_dm->cur_ps_tdma == 11) {
2034 halbtc8192e2ant_ps_tdma(
2038 coex_dm->ps_tdma_du_adj_type =
2041 } else if (result == 1) {
2042 if (coex_dm->cur_ps_tdma == 4) {
2043 halbtc8192e2ant_ps_tdma(
2047 coex_dm->ps_tdma_du_adj_type =
2049 } else if (coex_dm->cur_ps_tdma == 3) {
2050 halbtc8192e2ant_ps_tdma(
2054 coex_dm->ps_tdma_du_adj_type =
2056 } else if (coex_dm->cur_ps_tdma == 2) {
2057 halbtc8192e2ant_ps_tdma(
2061 coex_dm->ps_tdma_du_adj_type =
2063 } else if (coex_dm->cur_ps_tdma == 1) {
2064 halbtc8192e2ant_ps_tdma(
2068 coex_dm->ps_tdma_du_adj_type =
2070 } else if (coex_dm->cur_ps_tdma == 12) {
2071 halbtc8192e2ant_ps_tdma(
2075 coex_dm->ps_tdma_du_adj_type =
2077 } else if (coex_dm->cur_ps_tdma == 11) {
2078 halbtc8192e2ant_ps_tdma(
2082 coex_dm->ps_tdma_du_adj_type =
2084 } else if (coex_dm->cur_ps_tdma == 10) {
2085 halbtc8192e2ant_ps_tdma(
2089 coex_dm->ps_tdma_du_adj_type =
2094 } else if (max_interval == 2) {
2096 BTC_PRINT(BTC_MSG_ALGORITHM,
2097 ALGO_TRACE_FW_DETAIL,
2098 "[BTCoex], TxPause = 1\n");
2099 if (coex_dm->cur_ps_tdma == 1) {
2100 halbtc8192e2ant_ps_tdma(btcoexist,
2103 coex_dm->ps_tdma_du_adj_type = 6;
2104 } else if (coex_dm->cur_ps_tdma == 2) {
2105 halbtc8192e2ant_ps_tdma(btcoexist,
2108 coex_dm->ps_tdma_du_adj_type = 6;
2109 } else if (coex_dm->cur_ps_tdma == 3) {
2110 halbtc8192e2ant_ps_tdma(btcoexist,
2113 coex_dm->ps_tdma_du_adj_type = 7;
2114 } else if (coex_dm->cur_ps_tdma == 4) {
2115 halbtc8192e2ant_ps_tdma(btcoexist,
2118 coex_dm->ps_tdma_du_adj_type = 8;
2120 if (coex_dm->cur_ps_tdma == 9) {
2121 halbtc8192e2ant_ps_tdma(btcoexist,
2124 coex_dm->ps_tdma_du_adj_type = 14;
2125 } else if (coex_dm->cur_ps_tdma == 10) {
2126 halbtc8192e2ant_ps_tdma(btcoexist,
2129 coex_dm->ps_tdma_du_adj_type = 14;
2130 } else if (coex_dm->cur_ps_tdma == 11) {
2131 halbtc8192e2ant_ps_tdma(btcoexist,
2134 coex_dm->ps_tdma_du_adj_type = 15;
2135 } else if (coex_dm->cur_ps_tdma == 12) {
2136 halbtc8192e2ant_ps_tdma(btcoexist,
2139 coex_dm->ps_tdma_du_adj_type = 16;
2142 if (coex_dm->cur_ps_tdma == 5) {
2143 halbtc8192e2ant_ps_tdma(
2147 coex_dm->ps_tdma_du_adj_type =
2149 } else if (coex_dm->cur_ps_tdma == 6) {
2150 halbtc8192e2ant_ps_tdma(
2154 coex_dm->ps_tdma_du_adj_type =
2156 } else if (coex_dm->cur_ps_tdma == 7) {
2157 halbtc8192e2ant_ps_tdma(
2161 coex_dm->ps_tdma_du_adj_type =
2163 } else if (coex_dm->cur_ps_tdma == 13) {
2164 halbtc8192e2ant_ps_tdma(
2168 coex_dm->ps_tdma_du_adj_type =
2170 } else if (coex_dm->cur_ps_tdma == 14) {
2171 halbtc8192e2ant_ps_tdma(
2175 coex_dm->ps_tdma_du_adj_type =
2177 } else if (coex_dm->cur_ps_tdma == 15) {
2178 halbtc8192e2ant_ps_tdma(
2182 coex_dm->ps_tdma_du_adj_type =
2185 } else if (result == 1) {
2186 if (coex_dm->cur_ps_tdma == 8) {
2187 halbtc8192e2ant_ps_tdma(
2191 coex_dm->ps_tdma_du_adj_type =
2193 } else if (coex_dm->cur_ps_tdma == 7) {
2194 halbtc8192e2ant_ps_tdma(
2198 coex_dm->ps_tdma_du_adj_type =
2200 } else if (coex_dm->cur_ps_tdma == 6) {
2201 halbtc8192e2ant_ps_tdma(
2205 coex_dm->ps_tdma_du_adj_type =
2207 } else if (coex_dm->cur_ps_tdma == 16) {
2208 halbtc8192e2ant_ps_tdma(
2212 coex_dm->ps_tdma_du_adj_type =
2214 } else if (coex_dm->cur_ps_tdma == 15) {
2215 halbtc8192e2ant_ps_tdma(
2219 coex_dm->ps_tdma_du_adj_type =
2221 } else if (coex_dm->cur_ps_tdma == 14) {
2222 halbtc8192e2ant_ps_tdma(
2226 coex_dm->ps_tdma_du_adj_type =
2231 BTC_PRINT(BTC_MSG_ALGORITHM,
2232 ALGO_TRACE_FW_DETAIL,
2233 "[BTCoex], TxPause = 0\n");
2234 if (coex_dm->cur_ps_tdma == 5) {
2235 halbtc8192e2ant_ps_tdma(btcoexist,
2238 coex_dm->ps_tdma_du_adj_type = 2;
2239 } else if (coex_dm->cur_ps_tdma == 6) {
2240 halbtc8192e2ant_ps_tdma(btcoexist,
2243 coex_dm->ps_tdma_du_adj_type = 2;
2244 } else if (coex_dm->cur_ps_tdma == 7) {
2245 halbtc8192e2ant_ps_tdma(btcoexist,
2248 coex_dm->ps_tdma_du_adj_type = 3;
2249 } else if (coex_dm->cur_ps_tdma == 8) {
2250 halbtc8192e2ant_ps_tdma(btcoexist,
2253 coex_dm->ps_tdma_du_adj_type = 4;
2255 if (coex_dm->cur_ps_tdma == 13) {
2256 halbtc8192e2ant_ps_tdma(btcoexist,
2259 coex_dm->ps_tdma_du_adj_type = 10;
2260 } else if (coex_dm->cur_ps_tdma == 14) {
2261 halbtc8192e2ant_ps_tdma(btcoexist,
2264 coex_dm->ps_tdma_du_adj_type = 10;
2265 } else if (coex_dm->cur_ps_tdma == 15) {
2266 halbtc8192e2ant_ps_tdma(btcoexist,
2269 coex_dm->ps_tdma_du_adj_type = 11;
2270 } else if (coex_dm->cur_ps_tdma == 16) {
2271 halbtc8192e2ant_ps_tdma(btcoexist,
2274 coex_dm->ps_tdma_du_adj_type = 12;
2277 if (coex_dm->cur_ps_tdma == 1) {
2278 halbtc8192e2ant_ps_tdma(
2282 coex_dm->ps_tdma_du_adj_type =
2284 } else if (coex_dm->cur_ps_tdma == 2) {
2285 halbtc8192e2ant_ps_tdma(
2289 coex_dm->ps_tdma_du_adj_type =
2291 } else if (coex_dm->cur_ps_tdma == 3) {
2292 halbtc8192e2ant_ps_tdma(
2296 coex_dm->ps_tdma_du_adj_type =
2298 } else if (coex_dm->cur_ps_tdma == 9) {
2299 halbtc8192e2ant_ps_tdma(
2303 coex_dm->ps_tdma_du_adj_type =
2305 } else if (coex_dm->cur_ps_tdma == 10) {
2306 halbtc8192e2ant_ps_tdma(
2310 coex_dm->ps_tdma_du_adj_type =
2312 } else if (coex_dm->cur_ps_tdma == 11) {
2313 halbtc8192e2ant_ps_tdma(
2317 coex_dm->ps_tdma_du_adj_type =
2320 } else if (result == 1) {
2321 if (coex_dm->cur_ps_tdma == 4) {
2322 halbtc8192e2ant_ps_tdma(
2326 coex_dm->ps_tdma_du_adj_type =
2328 } else if (coex_dm->cur_ps_tdma == 3) {
2329 halbtc8192e2ant_ps_tdma(
2333 coex_dm->ps_tdma_du_adj_type =
2335 } else if (coex_dm->cur_ps_tdma == 2) {
2336 halbtc8192e2ant_ps_tdma(
2340 coex_dm->ps_tdma_du_adj_type =
2342 } else if(coex_dm->cur_ps_tdma == 12) {
2343 halbtc8192e2ant_ps_tdma(
2347 coex_dm->ps_tdma_du_adj_type =
2349 } else if(coex_dm->cur_ps_tdma == 11) {
2350 halbtc8192e2ant_ps_tdma(
2354 coex_dm->ps_tdma_du_adj_type =
2356 } else if(coex_dm->cur_ps_tdma == 10) {
2357 halbtc8192e2ant_ps_tdma(
2361 coex_dm->ps_tdma_du_adj_type =
2366 } else if (max_interval == 3) {
2368 BTC_PRINT(BTC_MSG_ALGORITHM,
2369 ALGO_TRACE_FW_DETAIL,
2370 "[BTCoex], TxPause = 1\n");
2371 if (coex_dm->cur_ps_tdma == 1) {
2372 halbtc8192e2ant_ps_tdma(btcoexist,
2375 coex_dm->ps_tdma_du_adj_type = 7;
2376 } else if (coex_dm->cur_ps_tdma == 2) {
2377 halbtc8192e2ant_ps_tdma(btcoexist,
2380 coex_dm->ps_tdma_du_adj_type = 7;
2381 } else if (coex_dm->cur_ps_tdma == 3) {
2382 halbtc8192e2ant_ps_tdma(btcoexist,
2385 coex_dm->ps_tdma_du_adj_type = 7;
2386 } else if (coex_dm->cur_ps_tdma == 4) {
2387 halbtc8192e2ant_ps_tdma(btcoexist,
2390 coex_dm->ps_tdma_du_adj_type = 8;
2392 if (coex_dm->cur_ps_tdma == 9) {
2393 halbtc8192e2ant_ps_tdma(btcoexist,
2396 coex_dm->ps_tdma_du_adj_type = 15;
2397 } else if (coex_dm->cur_ps_tdma == 10) {
2398 halbtc8192e2ant_ps_tdma(btcoexist,
2401 coex_dm->ps_tdma_du_adj_type = 15;
2402 } else if (coex_dm->cur_ps_tdma == 11) {
2403 halbtc8192e2ant_ps_tdma(btcoexist,
2406 coex_dm->ps_tdma_du_adj_type = 15;
2407 } else if (coex_dm->cur_ps_tdma == 12) {
2408 halbtc8192e2ant_ps_tdma(btcoexist,
2411 coex_dm->ps_tdma_du_adj_type = 16;
2414 if (coex_dm->cur_ps_tdma == 5) {
2415 halbtc8192e2ant_ps_tdma(
2419 coex_dm->ps_tdma_du_adj_type =
2421 } else if (coex_dm->cur_ps_tdma == 6) {
2422 halbtc8192e2ant_ps_tdma(
2426 coex_dm->ps_tdma_du_adj_type =
2428 } else if (coex_dm->cur_ps_tdma == 7) {
2429 halbtc8192e2ant_ps_tdma(
2433 coex_dm->ps_tdma_du_adj_type =
2435 } else if (coex_dm->cur_ps_tdma == 13) {
2436 halbtc8192e2ant_ps_tdma(
2440 coex_dm->ps_tdma_du_adj_type =
2442 } else if (coex_dm->cur_ps_tdma == 14) {
2443 halbtc8192e2ant_ps_tdma(
2447 coex_dm->ps_tdma_du_adj_type =
2449 } else if (coex_dm->cur_ps_tdma == 15) {
2450 halbtc8192e2ant_ps_tdma(
2454 coex_dm->ps_tdma_du_adj_type =
2457 } else if (result == 1) {
2458 if (coex_dm->cur_ps_tdma == 8) {
2459 halbtc8192e2ant_ps_tdma(
2463 coex_dm->ps_tdma_du_adj_type =
2465 } else if (coex_dm->cur_ps_tdma == 7) {
2466 halbtc8192e2ant_ps_tdma(
2470 coex_dm->ps_tdma_du_adj_type =
2472 } else if (coex_dm->cur_ps_tdma == 6) {
2473 halbtc8192e2ant_ps_tdma(
2477 coex_dm->ps_tdma_du_adj_type =
2479 } else if (coex_dm->cur_ps_tdma == 16) {
2480 halbtc8192e2ant_ps_tdma(
2484 coex_dm->ps_tdma_du_adj_type =
2486 } else if (coex_dm->cur_ps_tdma == 15) {
2487 halbtc8192e2ant_ps_tdma(
2491 coex_dm->ps_tdma_du_adj_type =
2493 } else if (coex_dm->cur_ps_tdma == 14) {
2494 halbtc8192e2ant_ps_tdma(
2498 coex_dm->ps_tdma_du_adj_type =
2503 BTC_PRINT(BTC_MSG_ALGORITHM,
2504 ALGO_TRACE_FW_DETAIL,
2505 "[BTCoex], TxPause = 0\n");
2506 if (coex_dm->cur_ps_tdma == 5) {
2507 halbtc8192e2ant_ps_tdma(btcoexist,
2510 coex_dm->ps_tdma_du_adj_type = 3;
2511 } else if (coex_dm->cur_ps_tdma == 6) {
2512 halbtc8192e2ant_ps_tdma(btcoexist,
2515 coex_dm->ps_tdma_du_adj_type = 3;
2516 } else if (coex_dm->cur_ps_tdma == 7) {
2517 halbtc8192e2ant_ps_tdma(btcoexist,
2520 coex_dm->ps_tdma_du_adj_type = 3;
2521 } else if (coex_dm->cur_ps_tdma == 8) {
2522 halbtc8192e2ant_ps_tdma(btcoexist,
2525 coex_dm->ps_tdma_du_adj_type = 4;
2527 if (coex_dm->cur_ps_tdma == 13) {
2528 halbtc8192e2ant_ps_tdma(btcoexist,
2531 coex_dm->ps_tdma_du_adj_type = 11;
2532 } else if (coex_dm->cur_ps_tdma == 14) {
2533 halbtc8192e2ant_ps_tdma(btcoexist,
2536 coex_dm->ps_tdma_du_adj_type = 11;
2537 } else if (coex_dm->cur_ps_tdma == 15) {
2538 halbtc8192e2ant_ps_tdma(btcoexist,
2541 coex_dm->ps_tdma_du_adj_type = 11;
2542 } else if (coex_dm->cur_ps_tdma == 16) {
2543 halbtc8192e2ant_ps_tdma(btcoexist,
2546 coex_dm->ps_tdma_du_adj_type = 12;
2549 if (coex_dm->cur_ps_tdma == 1) {
2550 halbtc8192e2ant_ps_tdma(
2554 coex_dm->ps_tdma_du_adj_type =
2556 } else if (coex_dm->cur_ps_tdma == 2) {
2557 halbtc8192e2ant_ps_tdma(
2561 coex_dm->ps_tdma_du_adj_type =
2563 } else if (coex_dm->cur_ps_tdma == 3) {
2564 halbtc8192e2ant_ps_tdma(
2568 coex_dm->ps_tdma_du_adj_type =
2570 } else if (coex_dm->cur_ps_tdma == 9) {
2571 halbtc8192e2ant_ps_tdma(
2575 coex_dm->ps_tdma_du_adj_type =
2577 } else if (coex_dm->cur_ps_tdma == 10) {
2578 halbtc8192e2ant_ps_tdma(
2582 coex_dm->ps_tdma_du_adj_type =
2584 } else if (coex_dm->cur_ps_tdma == 11) {
2585 halbtc8192e2ant_ps_tdma(
2589 coex_dm->ps_tdma_du_adj_type =
2592 } else if (result == 1) {
2593 if (coex_dm->cur_ps_tdma == 4) {
2594 halbtc8192e2ant_ps_tdma(
2598 coex_dm->ps_tdma_du_adj_type =
2600 } else if (coex_dm->cur_ps_tdma == 3) {
2601 halbtc8192e2ant_ps_tdma(
2605 coex_dm->ps_tdma_du_adj_type =
2607 } else if (coex_dm->cur_ps_tdma == 2) {
2608 halbtc8192e2ant_ps_tdma(
2612 coex_dm->ps_tdma_du_adj_type =
2614 } else if (coex_dm->cur_ps_tdma == 12) {
2615 halbtc8192e2ant_ps_tdma(
2619 coex_dm->ps_tdma_du_adj_type =
2621 } else if (coex_dm->cur_ps_tdma == 11) {
2622 halbtc8192e2ant_ps_tdma(
2626 coex_dm->ps_tdma_du_adj_type =
2628 } else if (coex_dm->cur_ps_tdma == 10) {
2629 halbtc8192e2ant_ps_tdma(
2633 coex_dm->ps_tdma_du_adj_type =
2641 /* if current PsTdma not match with
2642 * the recorded one (when scan, dhcp...),
2643 * then we have to adjust it back to the previous record one. */
2644 if (coex_dm->cur_ps_tdma != coex_dm->ps_tdma_du_adj_type) {
2645 bool scan = false, link = false, roam = false;
2646 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL,
2647 "[BTCoex], PsTdma type dismatch!!!, " );
2648 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_DETAIL,
2649 "curPsTdma=%d, recordPsTdma=%d\n",
2650 coex_dm->cur_ps_tdma, coex_dm->ps_tdma_du_adj_type);
2652 btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_SCAN, &scan);
2653 btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_LINK, &link);
2654 btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_ROAM, &roam);
2656 if ( !scan && !link && !roam)
2657 halbtc8192e2ant_ps_tdma(btcoexist, NORMAL_EXEC,
2659 coex_dm->ps_tdma_du_adj_type);
2661 BTC_PRINT(BTC_MSG_ALGORITHM,
2662 ALGO_TRACE_FW_DETAIL,
2663 "[BTCoex], roaming/link/scan is under progress, will adjust next time!!!\n");
2667 /* SCO only or SCO+PAN(HS) */
2668 static void halbtc8192e2ant_action_sco(struct btc_coexist *btcoexist)
2670 u8 wifirssi_state, btrssi_state = BTC_RSSI_STATE_STAY_LOW;
2673 wifirssi_state = halbtc8192e2ant_wifirssi_state(btcoexist, 0, 2, 15, 0);
2675 halbtc8192e2ant_switch_sstype(btcoexist, NORMAL_EXEC, 1);
2676 halbtc8192e2ant_limited_rx(btcoexist, NORMAL_EXEC, false, false, 0x8);
2678 halbtc8192e2ant_fw_dac_swinglvl(btcoexist, NORMAL_EXEC, 6);
2680 halbtc8192e2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 4);
2682 btrssi_state = halbtc8192e2ant_btrssi_state(3, 34, 42);
2684 if ((btrssi_state == BTC_RSSI_STATE_LOW) ||
2685 (btrssi_state == BTC_RSSI_STATE_STAY_LOW)) {
2686 halbtc8192e2ant_dec_btpwr(btcoexist, NORMAL_EXEC, 0);
2687 halbtc8192e2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 13);
2688 } else if ((btrssi_state == BTC_RSSI_STATE_MEDIUM) ||
2689 (btrssi_state == BTC_RSSI_STATE_STAY_MEDIUM)) {
2690 halbtc8192e2ant_dec_btpwr(btcoexist, NORMAL_EXEC, 2);
2691 halbtc8192e2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 9);
2692 } else if ((btrssi_state == BTC_RSSI_STATE_HIGH) ||
2693 (btrssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
2694 halbtc8192e2ant_dec_btpwr(btcoexist, NORMAL_EXEC, 4);
2695 halbtc8192e2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 9);
2698 btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
2701 if (BTC_WIFI_BW_HT40 == wifi_bw) {
2702 if ((wifirssi_state == BTC_RSSI_STATE_HIGH) ||
2703 (wifirssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
2704 halbtc8192e2ant_sw_mechanism1(btcoexist, true, true,
2706 halbtc8192e2ant_sw_mechanism2(btcoexist, true, false,
2709 halbtc8192e2ant_sw_mechanism1(btcoexist, true, true,
2711 halbtc8192e2ant_sw_mechanism2(btcoexist, false, false,
2715 if ((wifirssi_state == BTC_RSSI_STATE_HIGH) ||
2716 (wifirssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
2717 halbtc8192e2ant_sw_mechanism1(btcoexist, false, true,
2719 halbtc8192e2ant_sw_mechanism2(btcoexist, true, false,
2722 halbtc8192e2ant_sw_mechanism1(btcoexist, false, true,
2724 halbtc8192e2ant_sw_mechanism2(btcoexist, false, false,
2730 static void halbtc8192e2ant_action_sco_pan(struct btc_coexist *btcoexist)
2732 u8 wifirssi_state, btrssi_state = BTC_RSSI_STATE_STAY_LOW;
2735 wifirssi_state = halbtc8192e2ant_wifirssi_state(btcoexist, 0, 2, 15, 0);
2737 halbtc8192e2ant_switch_sstype(btcoexist, NORMAL_EXEC, 1);
2738 halbtc8192e2ant_limited_rx(btcoexist, NORMAL_EXEC, false, false, 0x8);
2740 halbtc8192e2ant_fw_dac_swinglvl(btcoexist, NORMAL_EXEC, 6);
2742 halbtc8192e2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 4);
2744 btrssi_state = halbtc8192e2ant_btrssi_state(3, 34, 42);
2746 if ((btrssi_state == BTC_RSSI_STATE_LOW) ||
2747 (btrssi_state == BTC_RSSI_STATE_STAY_LOW)) {
2748 halbtc8192e2ant_dec_btpwr(btcoexist, NORMAL_EXEC, 0);
2749 halbtc8192e2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 14);
2750 } else if ((btrssi_state == BTC_RSSI_STATE_MEDIUM) ||
2751 (btrssi_state == BTC_RSSI_STATE_STAY_MEDIUM)) {
2752 halbtc8192e2ant_dec_btpwr(btcoexist, NORMAL_EXEC, 2);
2753 halbtc8192e2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 10);
2754 } else if ((btrssi_state == BTC_RSSI_STATE_HIGH) ||
2755 (btrssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
2756 halbtc8192e2ant_dec_btpwr(btcoexist, NORMAL_EXEC, 4);
2757 halbtc8192e2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 10);
2760 btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
2763 if (BTC_WIFI_BW_HT40 == wifi_bw) {
2764 if ((wifirssi_state == BTC_RSSI_STATE_HIGH) ||
2765 (wifirssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
2766 halbtc8192e2ant_sw_mechanism1(btcoexist, true, true,
2768 halbtc8192e2ant_sw_mechanism2(btcoexist, true, false,
2771 halbtc8192e2ant_sw_mechanism1(btcoexist, true, true,
2773 halbtc8192e2ant_sw_mechanism2(btcoexist, false, false,
2777 if ((wifirssi_state == BTC_RSSI_STATE_HIGH) ||
2778 (wifirssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
2779 halbtc8192e2ant_sw_mechanism1(btcoexist, false, true,
2781 halbtc8192e2ant_sw_mechanism2(btcoexist, true, false,
2784 halbtc8192e2ant_sw_mechanism1(btcoexist, false, true,
2786 halbtc8192e2ant_sw_mechanism2(btcoexist, false, false,
2792 static void halbtc8192e2ant_action_hid(struct btc_coexist *btcoexist)
2794 u8 wifirssi_state, btrssi_state=BTC_RSSI_STATE_HIGH;
2797 wifirssi_state = halbtc8192e2ant_wifirssi_state(btcoexist, 0, 2, 15, 0);
2798 btrssi_state = halbtc8192e2ant_btrssi_state(3, 34, 42);
2800 halbtc8192e2ant_switch_sstype(btcoexist, NORMAL_EXEC, 1);
2801 halbtc8192e2ant_limited_rx(btcoexist, NORMAL_EXEC, false, false, 0x8);
2803 halbtc8192e2ant_fw_dac_swinglvl(btcoexist, NORMAL_EXEC, 6);
2805 btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
2807 halbtc8192e2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 3);
2809 if ((btrssi_state == BTC_RSSI_STATE_LOW) ||
2810 (btrssi_state == BTC_RSSI_STATE_STAY_LOW)) {
2811 halbtc8192e2ant_dec_btpwr(btcoexist, NORMAL_EXEC, 0);
2812 halbtc8192e2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 13);
2813 } else if ((btrssi_state == BTC_RSSI_STATE_MEDIUM) ||
2814 (btrssi_state == BTC_RSSI_STATE_STAY_MEDIUM)) {
2815 halbtc8192e2ant_dec_btpwr(btcoexist, NORMAL_EXEC, 2);
2816 halbtc8192e2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 9);
2817 } else if ((btrssi_state == BTC_RSSI_STATE_HIGH) ||
2818 (btrssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
2819 halbtc8192e2ant_dec_btpwr(btcoexist, NORMAL_EXEC, 4);
2820 halbtc8192e2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 9);
2824 if (BTC_WIFI_BW_HT40 == wifi_bw) {
2825 if ((wifirssi_state == BTC_RSSI_STATE_HIGH) ||
2826 (wifirssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
2827 halbtc8192e2ant_sw_mechanism1(btcoexist, true, true,
2829 halbtc8192e2ant_sw_mechanism2(btcoexist, true, false,
2832 halbtc8192e2ant_sw_mechanism1(btcoexist, true, true,
2834 halbtc8192e2ant_sw_mechanism2(btcoexist, false, false,
2838 if ((wifirssi_state == BTC_RSSI_STATE_HIGH) ||
2839 (wifirssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
2840 halbtc8192e2ant_sw_mechanism1(btcoexist, false, true,
2842 halbtc8192e2ant_sw_mechanism2(btcoexist, true, false,
2845 halbtc8192e2ant_sw_mechanism1(btcoexist, false, true,
2847 halbtc8192e2ant_sw_mechanism2(btcoexist, false, false,
2853 /* A2DP only / PAN(EDR) only/ A2DP+PAN(HS) */
2854 static void halbtc8192e2ant_action_a2dp(struct btc_coexist *btcoexist)
2856 u8 wifirssi_state, btrssi_state = BTC_RSSI_STATE_HIGH;
2858 bool long_dist = false;
2860 wifirssi_state = halbtc8192e2ant_wifirssi_state(btcoexist, 0, 2, 15, 0);
2861 btrssi_state = halbtc8192e2ant_btrssi_state(3, 34, 42);
2863 if ((btrssi_state == BTC_RSSI_STATE_LOW ||
2864 btrssi_state == BTC_RSSI_STATE_STAY_LOW) &&
2865 (wifirssi_state == BTC_RSSI_STATE_LOW ||
2866 wifirssi_state == BTC_RSSI_STATE_STAY_LOW)) {
2867 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
2868 "[BTCoex], A2dp, wifi/bt rssi both LOW!!\n");
2872 halbtc8192e2ant_switch_sstype(btcoexist, NORMAL_EXEC, 2);
2873 halbtc8192e2ant_limited_rx(btcoexist, NORMAL_EXEC, false, true,
2876 halbtc8192e2ant_switch_sstype(btcoexist, NORMAL_EXEC, 1);
2877 halbtc8192e2ant_limited_rx(btcoexist, NORMAL_EXEC, false, false,
2881 halbtc8192e2ant_fw_dac_swinglvl(btcoexist, NORMAL_EXEC, 6);
2884 halbtc8192e2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 0);
2886 halbtc8192e2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 2);
2890 halbtc8192e2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 17);
2891 coex_dm->auto_tdma_adjust = false;
2892 halbtc8192e2ant_dec_btpwr(btcoexist, NORMAL_EXEC, 0);
2894 if ((btrssi_state == BTC_RSSI_STATE_LOW) ||
2895 (btrssi_state == BTC_RSSI_STATE_STAY_LOW)) {
2896 halbtc8192e2ant_tdma_duration_adjust(btcoexist, false,
2898 halbtc8192e2ant_dec_btpwr(btcoexist, NORMAL_EXEC, 0);
2899 } else if ((btrssi_state == BTC_RSSI_STATE_MEDIUM) ||
2900 (btrssi_state == BTC_RSSI_STATE_STAY_MEDIUM)) {
2901 halbtc8192e2ant_tdma_duration_adjust(btcoexist, false,
2903 halbtc8192e2ant_dec_btpwr(btcoexist, NORMAL_EXEC, 2);
2904 } else if ((btrssi_state == BTC_RSSI_STATE_HIGH) ||
2905 (btrssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
2906 halbtc8192e2ant_tdma_duration_adjust(btcoexist, false,
2908 halbtc8192e2ant_dec_btpwr(btcoexist, NORMAL_EXEC, 4);
2913 btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
2914 if (BTC_WIFI_BW_HT40 == wifi_bw) {
2915 if ((wifirssi_state == BTC_RSSI_STATE_HIGH) ||
2916 (wifirssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
2917 halbtc8192e2ant_sw_mechanism1(btcoexist, true, false,
2919 halbtc8192e2ant_sw_mechanism2(btcoexist, true, false,
2922 halbtc8192e2ant_sw_mechanism1(btcoexist, true, false,
2924 halbtc8192e2ant_sw_mechanism2(btcoexist, false, false,
2928 if ((wifirssi_state == BTC_RSSI_STATE_HIGH) ||
2929 (wifirssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
2930 halbtc8192e2ant_sw_mechanism1(btcoexist, false, false,
2932 halbtc8192e2ant_sw_mechanism2(btcoexist, true, false,
2935 halbtc8192e2ant_sw_mechanism1(btcoexist, false, false,
2937 halbtc8192e2ant_sw_mechanism2(btcoexist, false, false,
2943 static void halbtc8192e2ant_action_a2dp_pan_hs(struct btc_coexist *btcoexist)
2945 u8 wifirssi_state, btrssi_state = BTC_RSSI_STATE_HIGH;
2948 wifirssi_state = halbtc8192e2ant_wifirssi_state(btcoexist, 0, 2, 15, 0);
2949 btrssi_state = halbtc8192e2ant_btrssi_state(3, 34, 42);
2951 halbtc8192e2ant_switch_sstype(btcoexist, NORMAL_EXEC, 1);
2952 halbtc8192e2ant_limited_rx(btcoexist, NORMAL_EXEC, false, false, 0x8);
2954 halbtc8192e2ant_fw_dac_swinglvl(btcoexist, NORMAL_EXEC, 6);
2955 halbtc8192e2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 2);
2957 if ((btrssi_state == BTC_RSSI_STATE_LOW) ||
2958 (btrssi_state == BTC_RSSI_STATE_STAY_LOW)) {
2959 halbtc8192e2ant_tdma_duration_adjust(btcoexist, false, true, 2);
2960 halbtc8192e2ant_dec_btpwr(btcoexist, NORMAL_EXEC, 0);
2961 } else if ((btrssi_state == BTC_RSSI_STATE_MEDIUM) ||
2962 (btrssi_state == BTC_RSSI_STATE_STAY_MEDIUM)) {
2963 halbtc8192e2ant_tdma_duration_adjust(btcoexist, false, false,
2965 halbtc8192e2ant_dec_btpwr(btcoexist, NORMAL_EXEC, 2);
2966 } else if ((btrssi_state == BTC_RSSI_STATE_HIGH) ||
2967 (btrssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
2968 halbtc8192e2ant_tdma_duration_adjust(btcoexist, false, false,
2970 halbtc8192e2ant_dec_btpwr(btcoexist, NORMAL_EXEC, 4);
2974 btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
2975 if (BTC_WIFI_BW_HT40 == wifi_bw) {
2976 if ((wifirssi_state == BTC_RSSI_STATE_HIGH) ||
2977 (wifirssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
2978 halbtc8192e2ant_sw_mechanism1(btcoexist, true, false,
2980 halbtc8192e2ant_sw_mechanism2(btcoexist, true, false,
2983 halbtc8192e2ant_sw_mechanism1(btcoexist, true, false,
2985 halbtc8192e2ant_sw_mechanism2(btcoexist, false, false,
2989 if ((wifirssi_state == BTC_RSSI_STATE_HIGH) ||
2990 (wifirssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
2991 halbtc8192e2ant_sw_mechanism1(btcoexist, false, false,
2993 halbtc8192e2ant_sw_mechanism2(btcoexist, true, false,
2996 halbtc8192e2ant_sw_mechanism1(btcoexist, false, false,
2998 halbtc8192e2ant_sw_mechanism2(btcoexist, false, false,
3004 static void halbtc8192e2ant_action_pan_edr(struct btc_coexist *btcoexist)
3006 u8 wifirssi_state, btrssi_state = BTC_RSSI_STATE_HIGH;
3009 wifirssi_state = halbtc8192e2ant_wifirssi_state(btcoexist, 0, 2, 15, 0);
3010 btrssi_state = halbtc8192e2ant_btrssi_state(3, 34, 42);
3012 halbtc8192e2ant_switch_sstype(btcoexist, NORMAL_EXEC, 1);
3013 halbtc8192e2ant_limited_rx(btcoexist, NORMAL_EXEC, false, false, 0x8);
3015 halbtc8192e2ant_fw_dac_swinglvl(btcoexist, NORMAL_EXEC, 6);
3017 halbtc8192e2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 2);
3019 if ((btrssi_state == BTC_RSSI_STATE_LOW) ||
3020 (btrssi_state == BTC_RSSI_STATE_STAY_LOW)) {
3021 halbtc8192e2ant_dec_btpwr(btcoexist, NORMAL_EXEC, 0);
3022 halbtc8192e2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 5);
3023 } else if ((btrssi_state == BTC_RSSI_STATE_MEDIUM) ||
3024 (btrssi_state == BTC_RSSI_STATE_STAY_MEDIUM)) {
3025 halbtc8192e2ant_dec_btpwr(btcoexist, NORMAL_EXEC, 2);
3026 halbtc8192e2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 1);
3027 } else if ((btrssi_state == BTC_RSSI_STATE_HIGH) ||
3028 (btrssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
3029 halbtc8192e2ant_dec_btpwr(btcoexist, NORMAL_EXEC, 4);
3030 halbtc8192e2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 1);
3034 btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
3035 if (BTC_WIFI_BW_HT40 == wifi_bw) {
3036 if ((wifirssi_state == BTC_RSSI_STATE_HIGH) ||
3037 (wifirssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
3038 halbtc8192e2ant_sw_mechanism1(btcoexist, true, false,
3040 halbtc8192e2ant_sw_mechanism2(btcoexist, true, false,
3043 halbtc8192e2ant_sw_mechanism1(btcoexist, true, false,
3045 halbtc8192e2ant_sw_mechanism2(btcoexist, false, false,
3049 if ((wifirssi_state == BTC_RSSI_STATE_HIGH) ||
3050 (wifirssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
3051 halbtc8192e2ant_sw_mechanism1(btcoexist, false, false,
3053 halbtc8192e2ant_sw_mechanism2(btcoexist, true, false,
3056 halbtc8192e2ant_sw_mechanism1(btcoexist, false, false,
3058 halbtc8192e2ant_sw_mechanism2(btcoexist, false, false,
3065 static void halbtc8192e2ant_action_pan_hs(struct btc_coexist *btcoexist)
3067 u8 wifirssi_state, btrssi_state = BTC_RSSI_STATE_HIGH;
3070 wifirssi_state = halbtc8192e2ant_wifirssi_state(btcoexist, 0, 2, 15, 0);
3071 btrssi_state = halbtc8192e2ant_btrssi_state(3, 34, 42);
3073 halbtc8192e2ant_switch_sstype(btcoexist, NORMAL_EXEC, 1);
3074 halbtc8192e2ant_limited_rx(btcoexist, NORMAL_EXEC, false, false, 0x8);
3076 halbtc8192e2ant_fw_dac_swinglvl(btcoexist, NORMAL_EXEC, 6);
3078 halbtc8192e2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 2);
3080 if ((btrssi_state == BTC_RSSI_STATE_LOW) ||
3081 (btrssi_state == BTC_RSSI_STATE_STAY_LOW)) {
3082 halbtc8192e2ant_dec_btpwr(btcoexist, NORMAL_EXEC, 0);
3083 } else if ((btrssi_state == BTC_RSSI_STATE_MEDIUM) ||
3084 (btrssi_state == BTC_RSSI_STATE_STAY_MEDIUM)) {
3085 halbtc8192e2ant_dec_btpwr(btcoexist, NORMAL_EXEC, 2);
3086 } else if ((btrssi_state == BTC_RSSI_STATE_HIGH) ||
3087 (btrssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
3088 halbtc8192e2ant_dec_btpwr(btcoexist, NORMAL_EXEC, 4);
3090 halbtc8192e2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);
3092 btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
3093 if (BTC_WIFI_BW_HT40 == wifi_bw) {
3094 if ((wifirssi_state == BTC_RSSI_STATE_HIGH) ||
3095 (wifirssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
3096 halbtc8192e2ant_sw_mechanism1(btcoexist, true, false,
3098 halbtc8192e2ant_sw_mechanism2(btcoexist, true, false,
3101 halbtc8192e2ant_sw_mechanism1(btcoexist, true, false,
3103 halbtc8192e2ant_sw_mechanism2(btcoexist, false, false,
3107 if ((wifirssi_state == BTC_RSSI_STATE_HIGH) ||
3108 (wifirssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
3109 halbtc8192e2ant_sw_mechanism1(btcoexist, false, false,
3111 halbtc8192e2ant_sw_mechanism2(btcoexist, true, false,
3114 halbtc8192e2ant_sw_mechanism1(btcoexist, false, false,
3116 halbtc8192e2ant_sw_mechanism2(btcoexist, false, false,
3123 static void halbtc8192e2ant_action_pan_edr_a2dp(struct btc_coexist *btcoexist)
3125 u8 wifirssi_state, btrssi_state=BTC_RSSI_STATE_HIGH;
3128 wifirssi_state = halbtc8192e2ant_wifirssi_state(btcoexist, 0, 2, 15, 0);
3129 btrssi_state = halbtc8192e2ant_btrssi_state(3, 34, 42);
3131 halbtc8192e2ant_switch_sstype(btcoexist, NORMAL_EXEC, 1);
3132 halbtc8192e2ant_limited_rx(btcoexist, NORMAL_EXEC, false, false, 0x8);
3134 halbtc8192e2ant_fw_dac_swinglvl(btcoexist, NORMAL_EXEC, 6);
3136 halbtc8192e2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 2);
3138 btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
3140 if ((btrssi_state == BTC_RSSI_STATE_LOW) ||
3141 (btrssi_state == BTC_RSSI_STATE_STAY_LOW)) {
3142 halbtc8192e2ant_dec_btpwr(btcoexist, NORMAL_EXEC, 0);
3143 halbtc8192e2ant_tdma_duration_adjust(btcoexist, false, true, 3);
3144 } else if ((btrssi_state == BTC_RSSI_STATE_MEDIUM) ||
3145 (btrssi_state == BTC_RSSI_STATE_STAY_MEDIUM)) {
3146 halbtc8192e2ant_dec_btpwr(btcoexist, NORMAL_EXEC, 2);
3147 halbtc8192e2ant_tdma_duration_adjust(btcoexist, false, false,
3149 } else if ((btrssi_state == BTC_RSSI_STATE_HIGH) ||
3150 (btrssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
3151 halbtc8192e2ant_dec_btpwr(btcoexist, NORMAL_EXEC, 4);
3152 halbtc8192e2ant_tdma_duration_adjust(btcoexist, false, false,
3157 if (BTC_WIFI_BW_HT40 == wifi_bw) {
3158 if ((wifirssi_state == BTC_RSSI_STATE_HIGH) ||
3159 (wifirssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
3160 halbtc8192e2ant_sw_mechanism1(btcoexist, true, false,
3162 halbtc8192e2ant_sw_mechanism2(btcoexist, true, false,
3165 halbtc8192e2ant_sw_mechanism1(btcoexist, true, false,
3167 halbtc8192e2ant_sw_mechanism2(btcoexist, false, false,
3171 if ((wifirssi_state == BTC_RSSI_STATE_HIGH) ||
3172 (wifirssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
3173 halbtc8192e2ant_sw_mechanism1(btcoexist, false, false,
3175 halbtc8192e2ant_sw_mechanism2(btcoexist, true, false,
3178 halbtc8192e2ant_sw_mechanism1(btcoexist, false, false,
3180 halbtc8192e2ant_sw_mechanism2(btcoexist, false, false,
3186 static void halbtc8192e2ant_action_pan_edr_hid(struct btc_coexist *btcoexist)
3188 u8 wifirssi_state, btrssi_state = BTC_RSSI_STATE_HIGH;
3191 wifirssi_state = halbtc8192e2ant_wifirssi_state(btcoexist, 0, 2, 15, 0);
3192 btrssi_state = halbtc8192e2ant_btrssi_state(3, 34, 42);
3194 btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
3196 halbtc8192e2ant_switch_sstype(btcoexist, NORMAL_EXEC, 1);
3197 halbtc8192e2ant_limited_rx(btcoexist, NORMAL_EXEC, false, false, 0x8);
3199 halbtc8192e2ant_fw_dac_swinglvl(btcoexist, NORMAL_EXEC, 6);
3201 halbtc8192e2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 3);
3203 if ((btrssi_state == BTC_RSSI_STATE_LOW) ||
3204 (btrssi_state == BTC_RSSI_STATE_STAY_LOW)) {
3205 halbtc8192e2ant_dec_btpwr(btcoexist, NORMAL_EXEC, 0);
3206 halbtc8192e2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 14);
3207 } else if ((btrssi_state == BTC_RSSI_STATE_MEDIUM) ||
3208 (btrssi_state == BTC_RSSI_STATE_STAY_MEDIUM)) {
3209 halbtc8192e2ant_dec_btpwr(btcoexist, NORMAL_EXEC, 2);
3210 halbtc8192e2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 10);
3211 } else if ((btrssi_state == BTC_RSSI_STATE_HIGH) ||
3212 (btrssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
3213 halbtc8192e2ant_dec_btpwr(btcoexist, NORMAL_EXEC, 4);
3214 halbtc8192e2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 10);
3218 if (BTC_WIFI_BW_HT40 == wifi_bw) {
3219 if ((wifirssi_state == BTC_RSSI_STATE_HIGH) ||
3220 (wifirssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
3221 halbtc8192e2ant_sw_mechanism1(btcoexist, true, true,
3223 halbtc8192e2ant_sw_mechanism2(btcoexist, true, false,
3226 halbtc8192e2ant_sw_mechanism1(btcoexist, true, true,
3228 halbtc8192e2ant_sw_mechanism2(btcoexist, false, false,
3232 if ((wifirssi_state == BTC_RSSI_STATE_HIGH) ||
3233 (wifirssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
3234 halbtc8192e2ant_sw_mechanism1(btcoexist, false, true,
3236 halbtc8192e2ant_sw_mechanism2(btcoexist, true, false,
3239 halbtc8192e2ant_sw_mechanism1(btcoexist, false, true,
3241 halbtc8192e2ant_sw_mechanism2(btcoexist, false, false,
3247 /* HID+A2DP+PAN(EDR) */
3248 static void halbtc8192e2ant_action_hid_a2dp_pan_edr(struct btc_coexist *btcoexist)
3250 u8 wifirssi_state, btrssi_state = BTC_RSSI_STATE_HIGH;
3253 wifirssi_state = halbtc8192e2ant_wifirssi_state(btcoexist, 0, 2, 15, 0);
3254 btrssi_state = halbtc8192e2ant_btrssi_state(3, 34, 42);
3256 halbtc8192e2ant_switch_sstype(btcoexist, NORMAL_EXEC, 1);
3257 halbtc8192e2ant_limited_rx(btcoexist, NORMAL_EXEC, false, false, 0x8);
3259 halbtc8192e2ant_fw_dac_swinglvl(btcoexist, NORMAL_EXEC, 6);
3261 btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
3263 halbtc8192e2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 3);
3265 if ((btrssi_state == BTC_RSSI_STATE_LOW) ||
3266 (btrssi_state == BTC_RSSI_STATE_STAY_LOW)) {
3267 halbtc8192e2ant_dec_btpwr(btcoexist, NORMAL_EXEC, 0);
3268 halbtc8192e2ant_tdma_duration_adjust(btcoexist, true, true, 3);
3269 } else if ((btrssi_state == BTC_RSSI_STATE_MEDIUM) ||
3270 (btrssi_state == BTC_RSSI_STATE_STAY_MEDIUM)) {
3271 halbtc8192e2ant_dec_btpwr(btcoexist, NORMAL_EXEC, 2);
3272 halbtc8192e2ant_tdma_duration_adjust(btcoexist, true, false, 3);
3273 } else if ((btrssi_state == BTC_RSSI_STATE_HIGH) ||
3274 (btrssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
3275 halbtc8192e2ant_dec_btpwr(btcoexist, NORMAL_EXEC, 4);
3276 halbtc8192e2ant_tdma_duration_adjust(btcoexist, true, false, 3);
3280 if (BTC_WIFI_BW_HT40 == wifi_bw) {
3281 if ((wifirssi_state == BTC_RSSI_STATE_HIGH) ||
3282 (wifirssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
3283 halbtc8192e2ant_sw_mechanism1(btcoexist, true, true,
3285 halbtc8192e2ant_sw_mechanism2(btcoexist, true, false,
3288 halbtc8192e2ant_sw_mechanism1(btcoexist, true, true,
3290 halbtc8192e2ant_sw_mechanism2(btcoexist, false, false,
3294 if ((wifirssi_state == BTC_RSSI_STATE_HIGH) ||
3295 (wifirssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
3296 halbtc8192e2ant_sw_mechanism1(btcoexist, false, true,
3298 halbtc8192e2ant_sw_mechanism2(btcoexist, true, false,
3301 halbtc8192e2ant_sw_mechanism1(btcoexist, false, true,
3303 halbtc8192e2ant_sw_mechanism2(btcoexist, false, false,
3309 static void halbtc8192e2ant_action_hid_a2dp(struct btc_coexist *btcoexist)
3311 u8 wifirssi_state, btrssi_state = BTC_RSSI_STATE_HIGH;
3314 wifirssi_state = halbtc8192e2ant_wifirssi_state(btcoexist, 0, 2, 15, 0);
3315 btrssi_state = halbtc8192e2ant_btrssi_state(3, 34, 42);
3317 halbtc8192e2ant_switch_sstype(btcoexist, NORMAL_EXEC, 1);
3318 halbtc8192e2ant_limited_rx(btcoexist, NORMAL_EXEC, false, false, 0x8);
3320 btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
3322 halbtc8192e2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 3);
3324 if ((btrssi_state == BTC_RSSI_STATE_LOW) ||
3325 (btrssi_state == BTC_RSSI_STATE_STAY_LOW)) {
3326 halbtc8192e2ant_dec_btpwr(btcoexist, NORMAL_EXEC, 0);
3327 halbtc8192e2ant_tdma_duration_adjust(btcoexist, true, true, 2);
3328 } else if ((btrssi_state == BTC_RSSI_STATE_MEDIUM) ||
3329 (btrssi_state == BTC_RSSI_STATE_STAY_MEDIUM)) {
3330 halbtc8192e2ant_dec_btpwr(btcoexist, NORMAL_EXEC, 2);
3331 halbtc8192e2ant_tdma_duration_adjust(btcoexist, true, false, 2);
3332 } else if ((btrssi_state == BTC_RSSI_STATE_HIGH) ||
3333 (btrssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
3334 halbtc8192e2ant_dec_btpwr(btcoexist, NORMAL_EXEC, 4);
3335 halbtc8192e2ant_tdma_duration_adjust(btcoexist, true, false, 2);
3339 if (BTC_WIFI_BW_HT40 == wifi_bw) {
3340 if ((wifirssi_state == BTC_RSSI_STATE_HIGH) ||
3341 (wifirssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
3342 halbtc8192e2ant_sw_mechanism1(btcoexist, true, true,
3344 halbtc8192e2ant_sw_mechanism2(btcoexist, true, false,
3347 halbtc8192e2ant_sw_mechanism1(btcoexist, true, true,
3349 halbtc8192e2ant_sw_mechanism2(btcoexist, false, false,
3353 if ((wifirssi_state == BTC_RSSI_STATE_HIGH) ||
3354 (wifirssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
3355 halbtc8192e2ant_sw_mechanism1(btcoexist, false, true,
3357 halbtc8192e2ant_sw_mechanism2(btcoexist, true, false,
3360 halbtc8192e2ant_sw_mechanism1(btcoexist, false, true,
3362 halbtc8192e2ant_sw_mechanism2(btcoexist, false, false,
3368 static void halbtc8192e2ant_run_coexist_mechanism(struct btc_coexist *btcoexist)
3372 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
3373 "[BTCoex], RunCoexistMechanism()===>\n");
3375 if (btcoexist->manual_control) {
3376 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
3377 "[BTCoex], return for Manual CTRL <===\n");
3381 if (coex_sta->under_ips) {
3382 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
3383 "[BTCoex], wifi is under IPS !!!\n");
3387 algorithm = halbtc8192e2ant_action_algorithm(btcoexist);
3388 if (coex_sta->c2h_bt_inquiry_page &&
3389 (BT_8192E_2ANT_COEX_ALGO_PANHS != algorithm)) {
3390 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
3391 "[BTCoex], BT is under inquiry/page scan !!\n");
3392 halbtc8192e2ant_action_bt_inquiry(btcoexist);
3396 coex_dm->cur_algorithm = algorithm;
3397 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
3398 "[BTCoex], Algorithm = %d \n", coex_dm->cur_algorithm);
3400 if (halbtc8192e2ant_is_common_action(btcoexist)) {
3401 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
3402 "[BTCoex], Action 2-Ant common.\n");
3403 coex_dm->auto_tdma_adjust = false;
3405 if (coex_dm->cur_algorithm != coex_dm->pre_algorithm) {
3406 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
3407 "[BTCoex] preAlgorithm=%d, curAlgorithm=%d\n",
3408 coex_dm->pre_algorithm,
3409 coex_dm->cur_algorithm);
3410 coex_dm->auto_tdma_adjust = false;
3412 switch (coex_dm->cur_algorithm) {
3413 case BT_8192E_2ANT_COEX_ALGO_SCO:
3414 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
3415 "Action 2-Ant, algorithm = SCO.\n");
3416 halbtc8192e2ant_action_sco(btcoexist);
3418 case BT_8192E_2ANT_COEX_ALGO_SCO_PAN:
3419 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
3420 "Action 2-Ant, algorithm = SCO+PAN(EDR).\n");
3421 halbtc8192e2ant_action_sco_pan(btcoexist);
3423 case BT_8192E_2ANT_COEX_ALGO_HID:
3424 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
3425 "Action 2-Ant, algorithm = HID.\n");
3426 halbtc8192e2ant_action_hid(btcoexist);
3428 case BT_8192E_2ANT_COEX_ALGO_A2DP:
3429 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
3430 "Action 2-Ant, algorithm = A2DP.\n");
3431 halbtc8192e2ant_action_a2dp(btcoexist);
3433 case BT_8192E_2ANT_COEX_ALGO_A2DP_PANHS:
3434 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
3435 "Action 2-Ant, algorithm = A2DP+PAN(HS).\n");
3436 halbtc8192e2ant_action_a2dp_pan_hs(btcoexist);
3438 case BT_8192E_2ANT_COEX_ALGO_PANEDR:
3439 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
3440 "Action 2-Ant, algorithm = PAN(EDR).\n");
3441 halbtc8192e2ant_action_pan_edr(btcoexist);
3443 case BT_8192E_2ANT_COEX_ALGO_PANHS:
3444 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
3445 "Action 2-Ant, algorithm = HS mode.\n");
3446 halbtc8192e2ant_action_pan_hs(btcoexist);
3448 case BT_8192E_2ANT_COEX_ALGO_PANEDR_A2DP:
3449 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
3450 "Action 2-Ant, algorithm = PAN+A2DP.\n");
3451 halbtc8192e2ant_action_pan_edr_a2dp(btcoexist);
3453 case BT_8192E_2ANT_COEX_ALGO_PANEDR_HID:
3454 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
3455 "Action 2-Ant, algorithm = PAN(EDR)+HID.\n");
3456 halbtc8192e2ant_action_pan_edr_hid(btcoexist);
3458 case BT_8192E_2ANT_COEX_ALGO_HID_A2DP_PANEDR:
3459 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
3460 "Action 2-Ant, algorithm = HID+A2DP+PAN.\n");
3461 halbtc8192e2ant_action_hid_a2dp_pan_edr(btcoexist);
3463 case BT_8192E_2ANT_COEX_ALGO_HID_A2DP:
3464 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
3465 "Action 2-Ant, algorithm = HID+A2DP.\n");
3466 halbtc8192e2ant_action_hid_a2dp(btcoexist);
3469 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
3470 "Action 2-Ant, algorithm = unknown!!\n");
3471 /* halbtc8192e2ant_coex_alloff(btcoexist); */
3474 coex_dm->pre_algorithm = coex_dm->cur_algorithm;
3478 static void halbtc8192e2ant_init_hwconfig(struct btc_coexist *btcoexist,
3484 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT,
3485 "[BTCoex], 2Ant Init HW Config!!\n");
3488 /* backup rf 0x1e value */
3489 coex_dm->bt_rf0x1e_backup =
3490 btcoexist->btc_get_rf_reg(btcoexist, BTC_RF_A,
3493 coex_dm->backup_arfr_cnt1 = btcoexist->btc_read_4byte(btcoexist,
3495 coex_dm->backup_arfr_cnt2 = btcoexist->btc_read_4byte(btcoexist,
3497 coex_dm->backup_retrylimit = btcoexist->btc_read_2byte(
3500 coex_dm->backup_ampdu_maxtime = btcoexist->btc_read_1byte(
3505 /* antenna sw ctrl to bt */
3506 btcoexist->btc_write_1byte(btcoexist, 0x4f, 0x6);
3507 btcoexist->btc_write_1byte(btcoexist, 0x944, 0x24);
3508 btcoexist->btc_write_4byte(btcoexist, 0x930, 0x700700);
3509 btcoexist->btc_write_1byte(btcoexist, 0x92c, 0x20);
3510 if (btcoexist->chip_interface == BTC_INTF_USB)
3511 btcoexist->btc_write_4byte(btcoexist, 0x64, 0x30430004);
3513 btcoexist->btc_write_4byte(btcoexist, 0x64, 0x30030004);
3515 halbtc8192e2ant_coex_table_with_type(btcoexist, FORCE_EXEC, 0);
3517 /* antenna switch control parameter */
3518 btcoexist->btc_write_4byte(btcoexist, 0x858, 0x55555555);
3520 /* coex parameters */
3521 btcoexist->btc_write_1byte(btcoexist, 0x778, 0x3);
3522 /* 0x790[5:0]=0x5 */
3523 u8tmp = btcoexist->btc_read_1byte(btcoexist, 0x790);
3526 btcoexist->btc_write_1byte(btcoexist, 0x790, u8tmp);
3528 /* enable counter statistics */
3529 btcoexist->btc_write_1byte(btcoexist, 0x76e, 0x4);
3532 btcoexist->btc_write_1byte(btcoexist, 0x40, 0x20);
3533 /* enable mailbox interface */
3534 u16tmp = btcoexist->btc_read_2byte(btcoexist, 0x40);
3536 btcoexist->btc_write_2byte(btcoexist, 0x40, u16tmp);
3538 /* enable PTA I2C mailbox */
3539 u8tmp = btcoexist->btc_read_1byte(btcoexist, 0x101);
3541 btcoexist->btc_write_1byte(btcoexist, 0x101, u8tmp);
3543 /* enable bt clock when wifi is disabled. */
3544 u8tmp = btcoexist->btc_read_1byte(btcoexist, 0x93);
3546 btcoexist->btc_write_1byte(btcoexist, 0x93, u8tmp);
3547 /* enable bt clock when suspend. */
3548 u8tmp = btcoexist->btc_read_1byte(btcoexist, 0x7);
3550 btcoexist->btc_write_1byte(btcoexist, 0x7, u8tmp);
3553 /*************************************************************
3554 * work around function start with wa_halbtc8192e2ant_
3555 *************************************************************/
3557 /************************************************************
3558 * extern function start with EXhalbtc8192e2ant_
3559 ************************************************************/
3561 void ex_halbtc8192e2ant_init_hwconfig(struct btc_coexist *btcoexist)
3563 halbtc8192e2ant_init_hwconfig(btcoexist, true);
3566 void ex_halbtc8192e2ant_init_coex_dm(struct btc_coexist *btcoexist)
3568 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT,
3569 "[BTCoex], Coex Mechanism Init!!\n");
3570 halbtc8192e2ant_init_coex_dm(btcoexist);
3573 void ex_halbtc8192e2ant_display_coex_info(struct btc_coexist *btcoexist)
3575 struct btc_board_info *board_info = &btcoexist->board_info;
3576 struct btc_stack_info*stack_info = &btcoexist->stack_info;
3577 u8 *cli_buf = btcoexist->cli_buf;
3578 u8 u8tmp[4], i, bt_info_ext, ps_tdma_case = 0;
3581 bool roam = false, scan = false, link = false, wifi_under_5g = false;
3582 bool bt_hson = false, wifi_busy = false;
3583 int wifirssi = 0, bt_hs_rssi = 0;
3584 u32 wifi_bw, wifi_traffic_dir;
3585 u8 wifi_dot11_chnl, wifi_hs_chnl;
3586 u32 fw_ver = 0, bt_patch_ver = 0;
3588 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE,
3589 "\r\n ============[BT Coexist info]============");
3592 if (btcoexist->manual_control) {
3593 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE,
3594 "\r\n ===========[Under Manual Control]===========");
3596 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE,
3597 "\r\n ==========================================");
3601 if (!board_info->bt_exist) {
3602 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n BT not exists !!!");
3607 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE,
3608 "\r\n %-35s = %d/ %d ", "Ant PG number/ Ant mechanism:",
3609 board_info->pg_ant_num, board_info->btdm_ant_num);
3612 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s / %d",
3613 "BT stack/ hci ext ver",
3614 ((stack_info->profile_notified) ? "Yes" : "No"),
3615 stack_info->hci_version);
3618 btcoexist->btc_get(btcoexist, BTC_GET_U4_BT_PATCH_VER, &bt_patch_ver);
3619 btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_FW_VER, &fw_ver);
3620 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE,
3621 "\r\n %-35s = %d_%d/ 0x%x/ 0x%x(%d)",
3622 "CoexVer/ FwVer/ PatchVer",
3623 glcoex_ver_date_8192e_2ant, glcoex_ver_8192e_2ant,
3624 fw_ver, bt_patch_ver, bt_patch_ver);
3627 btcoexist->btc_get(btcoexist, BTC_GET_BL_HS_OPERATION, &bt_hson);
3628 btcoexist->btc_get(btcoexist, BTC_GET_U1_WIFI_DOT11_CHNL,
3630 btcoexist->btc_get(btcoexist, BTC_GET_U1_WIFI_HS_CHNL, &wifi_hs_chnl);
3631 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d(%d)",
3632 "Dot11 channel / HsMode(HsChnl)",
3633 wifi_dot11_chnl, bt_hson, wifi_hs_chnl);
3636 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = %02x %02x %02x ",
3637 "H2C Wifi inform bt chnl Info", coex_dm->wifi_chnl_info[0],
3638 coex_dm->wifi_chnl_info[1], coex_dm->wifi_chnl_info[2]);
3641 btcoexist->btc_get(btcoexist, BTC_GET_S4_WIFI_RSSI, &wifirssi);
3642 btcoexist->btc_get(btcoexist, BTC_GET_S4_HS_RSSI, &bt_hs_rssi);
3643 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d",
3644 "Wifi rssi/ HS rssi", wifirssi, bt_hs_rssi);
3647 btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_SCAN, &scan);
3648 btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_LINK, &link);
3649 btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_ROAM, &roam);
3650 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d/ %d ",
3651 "Wifi link/ roam/ scan", link, roam, scan);
3654 btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_UNDER_5G, &wifi_under_5g);
3655 btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
3656 btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_BUSY, &wifi_busy);
3657 btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_TRAFFIC_DIRECTION,
3659 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s / %s/ %s ",
3660 "Wifi status", (wifi_under_5g ? "5G" : "2.4G"),
3661 ((BTC_WIFI_BW_LEGACY == wifi_bw) ? "Legacy" :
3662 (((BTC_WIFI_BW_HT40 == wifi_bw) ? "HT40" : "HT20"))),
3663 ((!wifi_busy) ? "idle" :
3664 ((BTC_WIFI_TRAFFIC_TX == wifi_traffic_dir) ?
3665 "uplink" : "downlink")));
3668 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = [%s/ %d/ %d] ",
3669 "BT [status/ rssi/ retryCnt]",
3670 ((btcoexist->bt_info.bt_disabled) ? ("disabled") :
3671 ((coex_sta->c2h_bt_inquiry_page) ?
3672 ("inquiry/page scan") :
3673 ((BT_8192E_2ANT_BT_STATUS_NON_CONNECTED_IDLE ==
3674 coex_dm->bt_status) ? "non-connected idle" :
3675 ((BT_8192E_2ANT_BT_STATUS_CONNECTED_IDLE ==
3676 coex_dm->bt_status) ? "connected-idle" : "busy")))),
3677 coex_sta->bt_rssi, coex_sta->bt_retry_cnt);
3680 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d / %d / %d",
3681 "SCO/HID/PAN/A2DP", stack_info->sco_exist,
3682 stack_info->hid_exist, stack_info->pan_exist,
3683 stack_info->a2dp_exist);
3685 btcoexist->btc_disp_dbg_msg(btcoexist, BTC_DBG_DISP_BT_LINK_INFO);
3687 bt_info_ext = coex_sta->bt_info_ext;
3688 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s",
3689 "BT Info A2DP rate",
3690 (bt_info_ext&BIT0) ? "Basic rate" : "EDR rate");
3693 for (i=0; i<BT_INFO_SRC_8192E_2ANT_MAX; i++) {
3694 if (coex_sta->bt_info_c2h_cnt[i]) {
3695 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE,
3696 "\r\n %-35s = %02x %02x %02x %02x ",
3697 GLBtInfoSrc8192e2Ant[i],
3698 coex_sta->bt_info_c2h[i][0],
3699 coex_sta->bt_info_c2h[i][1],
3700 coex_sta->bt_info_c2h[i][2],
3701 coex_sta->bt_info_c2h[i][3]);
3703 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE,
3704 "%02x %02x %02x(%d)",
3705 coex_sta->bt_info_c2h[i][4],
3706 coex_sta->bt_info_c2h[i][5],
3707 coex_sta->bt_info_c2h[i][6],
3708 coex_sta->bt_info_c2h_cnt[i]);
3713 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s/%s",
3714 "PS state, IPS/LPS",
3715 ((coex_sta->under_ips ? "IPS ON" : "IPS OFF")),
3716 ((coex_sta->under_lps ? "LPS ON" : "LPS OFF")));
3718 btcoexist->btc_disp_dbg_msg(btcoexist, BTC_DBG_DISP_FW_PWR_MODE_CMD);
3720 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x ", "SS Type",
3721 coex_dm->cur_sstype);
3725 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s",
3726 "============[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);
3738 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x ", "Rate Mask",
3739 btcoexist->bt_info.ra_mask);
3743 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s",
3744 "============[Fw mechanism]============");
3747 ps_tdma_case = coex_dm->cur_ps_tdma;
3748 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE,
3749 "\r\n %-35s = %02x %02x %02x %02x %02x case-%d (auto:%d)",
3750 "PS TDMA", coex_dm->ps_tdma_para[0],
3751 coex_dm->ps_tdma_para[1], coex_dm->ps_tdma_para[2],
3752 coex_dm->ps_tdma_para[3], coex_dm->ps_tdma_para[4],
3753 ps_tdma_case, coex_dm->auto_tdma_adjust);
3756 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d ",
3757 "DecBtPwr/ IgnWlanAct",
3758 coex_dm->cur_dec_bt_pwr, coex_dm->cur_ignore_wlan_act);
3762 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s",
3763 "============[Hw setting]============");
3766 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x",
3767 "RF-A, 0x1e initVal", coex_dm->bt_rf0x1e_backup);
3770 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/0x%x/0x%x/0x%x",
3771 "backup ARFR1/ARFR2/RL/AMaxTime", coex_dm->backup_arfr_cnt1,
3772 coex_dm->backup_arfr_cnt2, coex_dm->backup_retrylimit,
3773 coex_dm->backup_ampdu_maxtime);
3776 u32tmp[0] = btcoexist->btc_read_4byte(btcoexist, 0x430);
3777 u32tmp[1] = btcoexist->btc_read_4byte(btcoexist, 0x434);
3778 u16tmp[0] = btcoexist->btc_read_2byte(btcoexist, 0x42a);
3779 u8tmp[0] = btcoexist->btc_read_1byte(btcoexist, 0x456);
3780 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/0x%x/0x%x/0x%x",
3781 "0x430/0x434/0x42a/0x456",
3782 u32tmp[0], u32tmp[1], u16tmp[0], u8tmp[0]);
3785 u32tmp[0] = btcoexist->btc_read_4byte(btcoexist, 0xc04);
3786 u32tmp[1] = btcoexist->btc_read_4byte(btcoexist, 0xd04);
3787 u32tmp[2] = btcoexist->btc_read_4byte(btcoexist, 0x90c);
3788 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x/ 0x%x",
3789 "0xc04/ 0xd04/ 0x90c", u32tmp[0], u32tmp[1], u32tmp[2]);
3792 u8tmp[0] = btcoexist->btc_read_1byte(btcoexist, 0x778);
3793 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "0x778",
3797 u8tmp[0] = btcoexist->btc_read_1byte(btcoexist, 0x92c);
3798 u32tmp[0] = btcoexist->btc_read_4byte(btcoexist, 0x930);
3799 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x",
3800 "0x92c/ 0x930", (u8tmp[0]), u32tmp[0]);
3803 u8tmp[0] = btcoexist->btc_read_1byte(btcoexist, 0x40);
3804 u8tmp[1] = btcoexist->btc_read_1byte(btcoexist, 0x4f);
3805 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x",
3806 "0x40/ 0x4f", u8tmp[0], u8tmp[1]);
3809 u32tmp[0] = btcoexist->btc_read_4byte(btcoexist, 0x550);
3810 u8tmp[0] = btcoexist->btc_read_1byte(btcoexist, 0x522);
3811 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x",
3812 "0x550(bcn ctrl)/0x522", u32tmp[0], u8tmp[0]);
3815 u32tmp[0] = btcoexist->btc_read_4byte(btcoexist, 0xc50);
3816 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "0xc50(dig)",
3820 u32tmp[0] = btcoexist->btc_read_4byte(btcoexist, 0x6c0);
3821 u32tmp[1] = btcoexist->btc_read_4byte(btcoexist, 0x6c4);
3822 u32tmp[2] = btcoexist->btc_read_4byte(btcoexist, 0x6c8);
3823 u8tmp[0] = btcoexist->btc_read_1byte(btcoexist, 0x6cc);
3824 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE,
3825 "\r\n %-35s = 0x%x/ 0x%x/ 0x%x/ 0x%x",
3826 "0x6c0/0x6c4/0x6c8/0x6cc(coexTable)",
3827 u32tmp[0], u32tmp[1], u32tmp[2], u8tmp[0]);
3830 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d",
3831 "0x770(hp rx[31:16]/tx[15:0])",
3832 coex_sta->high_priority_rx, coex_sta->high_priority_tx);
3834 CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d",
3835 "0x774(lp rx[31:16]/tx[15:0])",
3836 coex_sta->low_priority_rx, coex_sta->low_priority_tx);
3838 #if(BT_AUTO_REPORT_ONLY_8192E_2ANT == 1)
3839 halbtc8192e2ant_monitor_bt_ctr(btcoexist);
3841 btcoexist->btc_disp_dbg_msg(btcoexist, BTC_DBG_DISP_COEX_STATISTICS);
3845 void ex_halbtc8192e2ant_ips_notify(struct btc_coexist *btcoexist, u8 type)
3847 if (BTC_IPS_ENTER == type) {
3848 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY,
3849 "[BTCoex], IPS ENTER notify\n");
3850 coex_sta->under_ips = true;
3851 halbtc8192e2ant_coex_alloff(btcoexist);
3852 } else if (BTC_IPS_LEAVE == type) {
3853 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY,
3854 "[BTCoex], IPS LEAVE notify\n");
3855 coex_sta->under_ips = false;
3859 void ex_halbtc8192e2ant_lps_notify(struct btc_coexist *btcoexist, u8 type)
3861 if (BTC_LPS_ENABLE == type) {
3862 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY,
3863 "[BTCoex], LPS ENABLE notify\n");
3864 coex_sta->under_lps = true;
3865 } else if (BTC_LPS_DISABLE == type) {
3866 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY,
3867 "[BTCoex], LPS DISABLE notify\n");
3868 coex_sta->under_lps = false;
3872 void ex_halbtc8192e2ant_scan_notify(struct btc_coexist *btcoexist, u8 type)
3874 if (BTC_SCAN_START == type)
3875 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY,
3876 "[BTCoex], SCAN START notify\n");
3877 else if(BTC_SCAN_FINISH == type)
3878 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY,
3879 "[BTCoex], SCAN FINISH notify\n");
3882 void ex_halbtc8192e2ant_connect_notify(struct btc_coexist *btcoexist, u8 type)
3884 if (BTC_ASSOCIATE_START == type)
3885 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY,
3886 "[BTCoex], CONNECT START notify\n");
3887 else if(BTC_ASSOCIATE_FINISH == type)
3888 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY,
3889 "[BTCoex], CONNECT FINISH notify\n");
3892 void ex_halbtc8192e2ant_media_status_notify(struct btc_coexist *btcoexist,
3895 u8 h2c_parameter[3] ={0};
3897 u8 wifi_center_chnl;
3899 if (btcoexist->manual_control ||
3900 btcoexist->stop_coex_dm ||
3901 btcoexist->bt_info.bt_disabled)
3904 if (BTC_MEDIA_CONNECT == type)
3905 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY,
3906 "[BTCoex], MEDIA connect notify\n");
3908 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY,
3909 "[BTCoex], MEDIA disconnect notify\n");
3911 /* only 2.4G we need to inform bt the chnl mask */
3912 btcoexist->btc_get(btcoexist, BTC_GET_U1_WIFI_CENTRAL_CHNL,
3914 if ((BTC_MEDIA_CONNECT == type) &&
3915 (wifi_center_chnl <= 14)) {
3916 h2c_parameter[0] = 0x1;
3917 h2c_parameter[1] = wifi_center_chnl;
3918 btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
3919 if (BTC_WIFI_BW_HT40 == wifi_bw)
3920 h2c_parameter[2] = 0x30;
3922 h2c_parameter[2] = 0x20;
3925 coex_dm->wifi_chnl_info[0] = h2c_parameter[0];
3926 coex_dm->wifi_chnl_info[1] = h2c_parameter[1];
3927 coex_dm->wifi_chnl_info[2] = h2c_parameter[2];
3929 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE_FW_EXEC,
3930 "[BTCoex], FW write 0x66=0x%x\n",
3931 h2c_parameter[0] << 16 | h2c_parameter[1] << 8 |
3934 btcoexist->btc_fill_h2c(btcoexist, 0x66, 3, h2c_parameter);
3937 void ex_halbtc8192e2ant_special_packet_notify(struct btc_coexist *btcoexist,
3940 if (type == BTC_PACKET_DHCP)
3941 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY,
3942 "[BTCoex], DHCP Packet notify\n");
3945 void ex_halbtc8192e2ant_bt_info_notify(struct btc_coexist *btcoexist,
3946 u8 *tmp_buf, u8 length )
3949 u8 i, rspSource = 0;
3950 bool bt_busy = false, limited_dig = false;
3951 bool wifi_connected = false;
3953 coex_sta->c2h_bt_info_req_sent = false;
3955 rspSource = tmp_buf[0] & 0xf;
3956 if (rspSource >= BT_INFO_SRC_8192E_2ANT_MAX)
3957 rspSource = BT_INFO_SRC_8192E_2ANT_WIFI_FW;
3958 coex_sta->bt_info_c2h_cnt[rspSource]++;
3960 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY,
3961 "[BTCoex], Bt info[%d], length=%d, hex data=[",
3963 for (i = 0; i < length; i++) {
3964 coex_sta->bt_info_c2h[rspSource][i] = tmp_buf[i];
3966 bt_info = tmp_buf[i];
3968 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY,
3969 "0x%02x]\n", tmp_buf[i]);
3971 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY,
3972 "0x%02x, ", tmp_buf[i]);
3975 if (BT_INFO_SRC_8192E_2ANT_WIFI_FW != rspSource) {
3976 coex_sta->bt_retry_cnt = /* [3:0] */
3977 coex_sta->bt_info_c2h[rspSource][2] & 0xf;
3980 coex_sta->bt_info_c2h[rspSource][3] * 2 + 10;
3982 coex_sta->bt_info_ext =
3983 coex_sta->bt_info_c2h[rspSource][4];
3985 /* Here we need to resend some wifi info to BT
3986 * because bt is reset and loss of the info. */
3987 if ((coex_sta->bt_info_ext & BIT1)) {
3988 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
3989 "bit1, send wifi BW&Chnl to BT!!\n");
3990 btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_CONNECTED,
3993 ex_halbtc8192e2ant_media_status_notify(
3997 ex_halbtc8192e2ant_media_status_notify(
3999 BTC_MEDIA_DISCONNECT);
4002 if ((coex_sta->bt_info_ext & BIT3)) {
4003 if (!btcoexist->manual_control &&
4004 !btcoexist->stop_coex_dm) {
4005 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
4006 "bit3, BT NOT ignore Wlan active!\n");
4007 halbtc8192e2ant_IgnoreWlanAct(btcoexist,
4012 /* BT already NOT ignore Wlan active,
4013 * do nothing here. */
4016 #if(BT_AUTO_REPORT_ONLY_8192E_2ANT == 0)
4017 if ((coex_sta->bt_info_ext & BIT4)) {
4018 /* BT auto report already enabled, do nothing */
4020 halbtc8192e2ant_bt_autoreport(btcoexist, FORCE_EXEC,
4026 /* check BIT2 first ==> check if bt is under inquiry or page scan */
4027 if(bt_info & BT_INFO_8192E_2ANT_B_INQ_PAGE)
4028 coex_sta->c2h_bt_inquiry_page = true;
4030 coex_sta->c2h_bt_inquiry_page = false;
4032 /* set link exist status */
4033 if (!(bt_info&BT_INFO_8192E_2ANT_B_CONNECTION)) {
4034 coex_sta->bt_link_exist = false;
4035 coex_sta->pan_exist = false;
4036 coex_sta->a2dp_exist = false;
4037 coex_sta->hid_exist = false;
4038 coex_sta->sco_exist = false;
4039 } else {/* connection exists */
4040 coex_sta->bt_link_exist = true;
4041 if (bt_info & BT_INFO_8192E_2ANT_B_FTP)
4042 coex_sta->pan_exist = true;
4044 coex_sta->pan_exist = false;
4045 if (bt_info & BT_INFO_8192E_2ANT_B_A2DP)
4046 coex_sta->a2dp_exist = true;
4048 coex_sta->a2dp_exist = false;
4049 if (bt_info & BT_INFO_8192E_2ANT_B_HID)
4050 coex_sta->hid_exist = true;
4052 coex_sta->hid_exist = false;
4053 if (bt_info & BT_INFO_8192E_2ANT_B_SCO_ESCO)
4054 coex_sta->sco_exist = true;
4056 coex_sta->sco_exist = false;
4059 halbtc8192e2ant_update_btlink_info(btcoexist);
4061 if (!(bt_info&BT_INFO_8192E_2ANT_B_CONNECTION)) {
4062 coex_dm->bt_status = BT_8192E_2ANT_BT_STATUS_NON_CONNECTED_IDLE;
4063 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
4064 "[BTCoex], BT Non-Connected idle!!!\n");
4065 } else if (bt_info == BT_INFO_8192E_2ANT_B_CONNECTION) {
4066 coex_dm->bt_status = BT_8192E_2ANT_BT_STATUS_CONNECTED_IDLE;
4067 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
4068 "[BTCoex], bt_infoNotify(), BT Connected-idle!!!\n");
4069 } else if ((bt_info&BT_INFO_8192E_2ANT_B_SCO_ESCO) ||
4070 (bt_info&BT_INFO_8192E_2ANT_B_SCO_BUSY)) {
4071 coex_dm->bt_status = BT_8192E_2ANT_BT_STATUS_SCO_BUSY;
4072 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
4073 "[BTCoex], bt_infoNotify(), BT SCO busy!!!\n");
4074 } else if (bt_info&BT_INFO_8192E_2ANT_B_ACL_BUSY) {
4075 coex_dm->bt_status = BT_8192E_2ANT_BT_STATUS_ACL_BUSY;
4076 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
4077 "[BTCoex], bt_infoNotify(), BT ACL busy!!!\n");
4079 coex_dm->bt_status = BT_8192E_2ANT_BT_STATUS_MAX;
4080 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
4081 "[BTCoex]bt_infoNotify(), BT Non-Defined state!!!\n");
4084 if ((BT_8192E_2ANT_BT_STATUS_ACL_BUSY == coex_dm->bt_status) ||
4085 (BT_8192E_2ANT_BT_STATUS_SCO_BUSY == coex_dm->bt_status) ||
4086 (BT_8192E_2ANT_BT_STATUS_ACL_SCO_BUSY == coex_dm->bt_status)) {
4091 limited_dig = false;
4094 btcoexist->btc_set(btcoexist, BTC_SET_BL_BT_TRAFFIC_BUSY, &bt_busy);
4096 coex_dm->limited_dig = limited_dig;
4097 btcoexist->btc_set(btcoexist, BTC_SET_BL_BT_LIMITED_DIG, &limited_dig);
4099 halbtc8192e2ant_run_coexist_mechanism(btcoexist);
4102 void ex_halbtc8192e2ant_stack_operation_notify(struct btc_coexist *btcoexist,
4105 if (BTC_STACK_OP_INQ_PAGE_PAIR_START == type)
4106 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY,
4107 "[BTCoex] StackOP Inquiry/page/pair start notify\n");
4108 else if(BTC_STACK_OP_INQ_PAGE_PAIR_FINISH == type)
4109 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY,
4110 "[BTCoex] StackOP Inquiry/page/pair finish notify\n");
4113 void ex_halbtc8192e2ant_halt_notify(struct btc_coexist *btcoexist)
4115 BTC_PRINT(BTC_MSG_INTERFACE, INTF_NOTIFY, "[BTCoex], Halt notify\n");
4117 halbtc8192e2ant_IgnoreWlanAct(btcoexist, FORCE_EXEC, true);
4118 ex_halbtc8192e2ant_media_status_notify(btcoexist, BTC_MEDIA_DISCONNECT);
4121 void ex_halbtc8192e2ant_periodical(struct btc_coexist *btcoexist)
4123 static u8 dis_ver_info_cnt = 0;
4124 u32 fw_ver = 0, bt_patch_ver = 0;
4125 struct btc_board_info *board_info=&btcoexist->board_info;
4126 struct btc_stack_info *stack_info=&btcoexist->stack_info;
4128 BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
4129 "=======================Periodical=======================\n");
4130 if (dis_ver_info_cnt <= 5) {
4131 dis_ver_info_cnt += 1;
4132 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT,
4133 "************************************************\n");
4134 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT,
4135 "Ant PG Num/ Ant Mech/ Ant Pos = %d/ %d/ %d\n",
4136 board_info->pg_ant_num, board_info->btdm_ant_num,
4137 board_info->btdm_ant_pos);
4138 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT,
4139 "BT stack/ hci ext ver = %s / %d\n",
4140 ((stack_info->profile_notified) ? "Yes" : "No"),
4141 stack_info->hci_version);
4142 btcoexist->btc_get(btcoexist, BTC_GET_U4_BT_PATCH_VER,
4144 btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_FW_VER, &fw_ver);
4145 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT,
4146 "CoexVer/ FwVer/ PatchVer = %d_%x/ 0x%x/ 0x%x(%d)\n",
4147 glcoex_ver_date_8192e_2ant, glcoex_ver_8192e_2ant,
4148 fw_ver, bt_patch_ver, bt_patch_ver);
4149 BTC_PRINT(BTC_MSG_INTERFACE, INTF_INIT,
4150 "************************************************\n");
4153 #if(BT_AUTO_REPORT_ONLY_8192E_2ANT == 0)
4154 halbtc8192e2ant_querybt_info(btcoexist);
4155 halbtc8192e2ant_monitor_bt_ctr(btcoexist);
4156 halbtc8192e2ant_monitor_bt_enable_disable(btcoexist);
4158 if (halbtc8192e2ant_iswifi_status_changed(btcoexist) ||
4159 coex_dm->auto_tdma_adjust)
4160 halbtc8192e2ant_run_coexist_mechanism(btcoexist);