Commit c6821613 authored by Yan-Hsuan Chuang's avatar Yan-Hsuan Chuang Committed by Kalle Valo

rtlwifi: btcoex: follow linux coding style

Fix a number of checkpatch.pl warnings. In addition, some variable and
function names are shortened, and/or renamed to be more consistent.
Signed-off-by: default avatarYan-Hsuan Chuang <yhchuang@realtek.com>
Signed-off-by: default avatarLarry Finger <Larry.Finger@lwfinger.net>
Cc: Pkshih <pkshih@realtek.com>
Cc: Birming Chiu <birming@realtek.com>
Cc: Shaofu <shaofu@realtek.com>
Cc: Steven Ting <steventing@realtek.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent 27a31a60
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -116,7 +116,7 @@ struct coex_dm_8192e_2ant { ...@@ -116,7 +116,7 @@ struct coex_dm_8192e_2ant {
u32 backup_arfr_cnt1; /* Auto Rate Fallback Retry cnt */ u32 backup_arfr_cnt1; /* Auto Rate Fallback Retry cnt */
u32 backup_arfr_cnt2; /* Auto Rate Fallback Retry cnt */ u32 backup_arfr_cnt2; /* Auto Rate Fallback Retry cnt */
u16 backup_retrylimit; u16 backup_retry_limit;
u8 backup_ampdu_maxtime; u8 backup_ampdu_maxtime;
/* algorithm related */ /* algorithm related */
...@@ -125,18 +125,18 @@ struct coex_dm_8192e_2ant { ...@@ -125,18 +125,18 @@ struct coex_dm_8192e_2ant {
u8 bt_status; u8 bt_status;
u8 wifi_chnl_info[3]; u8 wifi_chnl_info[3];
u8 pre_sstype; u8 pre_ss_type;
u8 cur_sstype; u8 cur_ss_type;
u32 prera_mask; u32 pre_ra_mask;
u32 curra_mask; u32 cur_ra_mask;
u8 curra_masktype; u8 cur_ra_mask_type;
u8 pre_arfrtype; u8 pre_arfr_type;
u8 cur_arfrtype; u8 cur_arfr_type;
u8 pre_retrylimit_type; u8 pre_retry_limit_type;
u8 cur_retrylimit_type; u8 cur_retry_limit_type;
u8 pre_ampdutime_type; u8 pre_ampdu_time_type;
u8 cur_ampdutime_type; u8 cur_ampdu_time_type;
}; };
struct coex_sta_8192e_2ant { struct coex_sta_8192e_2ant {
......
...@@ -45,7 +45,7 @@ static struct coex_dm_8723b_1ant *coex_dm = &glcoex_dm_8723b_1ant; ...@@ -45,7 +45,7 @@ static struct coex_dm_8723b_1ant *coex_dm = &glcoex_dm_8723b_1ant;
static struct coex_sta_8723b_1ant glcoex_sta_8723b_1ant; static struct coex_sta_8723b_1ant glcoex_sta_8723b_1ant;
static struct coex_sta_8723b_1ant *coex_sta = &glcoex_sta_8723b_1ant; static struct coex_sta_8723b_1ant *coex_sta = &glcoex_sta_8723b_1ant;
static const char *const GLBtInfoSrc8723b1Ant[] = { static const char *const glbt_info_src_8723b_1ant[] = {
"BT Info[wifi fw]", "BT Info[wifi fw]",
"BT Info[bt rsp]", "BT Info[bt rsp]",
"BT Info[bt auto report]", "BT Info[bt auto report]",
...@@ -67,7 +67,7 @@ static void halbtc8723b1ant_updatera_mask(struct btc_coexist *btcoexist, ...@@ -67,7 +67,7 @@ static void halbtc8723b1ant_updatera_mask(struct btc_coexist *btcoexist,
coex_dm->curra_mask = dis_rate_mask; coex_dm->curra_mask = dis_rate_mask;
if (force_exec || (coex_dm->prera_mask != coex_dm->curra_mask)) if (force_exec || (coex_dm->prera_mask != coex_dm->curra_mask))
btcoexist->btc_set(btcoexist, BTC_SET_ACT_UPDATE_ra_mask, btcoexist->btc_set(btcoexist, BTC_SET_ACT_UPDATE_RAMASK,
&coex_dm->curra_mask); &coex_dm->curra_mask);
coex_dm->prera_mask = coex_dm->curra_mask; coex_dm->prera_mask = coex_dm->curra_mask;
...@@ -148,8 +148,7 @@ static void halbtc8723b1ant_ampdu_maxtime(struct btc_coexist *btcoexist, ...@@ -148,8 +148,7 @@ static void halbtc8723b1ant_ampdu_maxtime(struct btc_coexist *btcoexist,
coex_dm->backup_ampdu_max_time); coex_dm->backup_ampdu_max_time);
break; break;
case 1: /* AMPDU timw = 0x38 * 32us */ case 1: /* AMPDU timw = 0x38 * 32us */
btcoexist->btc_write_1byte(btcoexist, btcoexist->btc_write_1byte(btcoexist, 0x456, 0x38);
0x456, 0x38);
break; break;
default: default:
break; break;
...@@ -172,7 +171,7 @@ static void halbtc8723b1ant_limited_tx(struct btc_coexist *btcoexist, ...@@ -172,7 +171,7 @@ static void halbtc8723b1ant_limited_tx(struct btc_coexist *btcoexist,
halbtc8723b1ant_updatera_mask(btcoexist, force_exec, halbtc8723b1ant_updatera_mask(btcoexist, force_exec,
0x00000003); 0x00000003);
break; break;
/* disable cck 1/2/5.5, ofdm 6/9/12/18/24, mcs 0/1/2/3/4*/ /* disable cck 1/2/5.5, ofdm 6/9/12/18/24, mcs 0/1/2/3/4 */
case 2: case 2:
halbtc8723b1ant_updatera_mask(btcoexist, force_exec, halbtc8723b1ant_updatera_mask(btcoexist, force_exec,
0x0001f1f7); 0x0001f1f7);
...@@ -244,7 +243,8 @@ static void halbtc8723b1ant_query_bt_info(struct btc_coexist *btcoexist) ...@@ -244,7 +243,8 @@ static void halbtc8723b1ant_query_bt_info(struct btc_coexist *btcoexist)
coex_sta->c2h_bt_info_req_sent = true; coex_sta->c2h_bt_info_req_sent = true;
h2c_parameter[0] |= BIT0; /* trigger*/ /* trigger */
h2c_parameter[0] |= BIT0;
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Query Bt Info, FW write 0x61 = 0x%x\n", "[BTCoex], Query Bt Info, FW write 0x61 = 0x%x\n",
...@@ -343,11 +343,11 @@ static void btc8723b1ant_set_sw_pen_tx_rate_adapt(struct btc_coexist *btcoexist, ...@@ -343,11 +343,11 @@ static void btc8723b1ant_set_sw_pen_tx_rate_adapt(struct btc_coexist *btcoexist,
if (low_penalty_ra) { if (low_penalty_ra) {
h2c_parameter[1] |= BIT0; h2c_parameter[1] |= BIT0;
/*normal rate except MCS7/6/5, OFDM54/48/36 */ /* normal rate except MCS7/6/5, OFDM54/48/36 */
h2c_parameter[2] = 0x00; h2c_parameter[2] = 0x00;
h2c_parameter[3] = 0xf7; /*MCS7 or OFDM54 */ h2c_parameter[3] = 0xf7; /* MCS7 or OFDM54 */
h2c_parameter[4] = 0xf8; /*MCS6 or OFDM48 */ h2c_parameter[4] = 0xf8; /* MCS6 or OFDM48 */
h2c_parameter[5] = 0xf9; /*MCS5 or OFDM36 */ h2c_parameter[5] = 0xf9; /* MCS5 or OFDM36 */
} }
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
...@@ -468,7 +468,8 @@ static void halbtc8723b1ant_coex_table_with_type(struct btc_coexist *btcoexist, ...@@ -468,7 +468,8 @@ static void halbtc8723b1ant_coex_table_with_type(struct btc_coexist *btcoexist,
} }
} }
static void halbtc8723b1ant_SetFwIgnoreWlanAct(struct btc_coexist *btcoexist, static void
halbtc8723b1ant_set_fw_ignore_wlan_act(struct btc_coexist *btcoexist,
bool enable) bool enable)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
...@@ -504,7 +505,7 @@ static void halbtc8723b1ant_ignore_wlan_act(struct btc_coexist *btcoexist, ...@@ -504,7 +505,7 @@ static void halbtc8723b1ant_ignore_wlan_act(struct btc_coexist *btcoexist,
coex_dm->cur_ignore_wlan_act) coex_dm->cur_ignore_wlan_act)
return; return;
} }
halbtc8723b1ant_SetFwIgnoreWlanAct(btcoexist, enable); halbtc8723b1ant_set_fw_ignore_wlan_act(btcoexist, enable);
coex_dm->pre_ignore_wlan_act = coex_dm->cur_ignore_wlan_act; coex_dm->pre_ignore_wlan_act = coex_dm->cur_ignore_wlan_act;
} }
...@@ -566,7 +567,7 @@ static void halbtc8723b1ant_set_lps_rpwm(struct btc_coexist *btcoexist, ...@@ -566,7 +567,7 @@ static void halbtc8723b1ant_set_lps_rpwm(struct btc_coexist *btcoexist,
btcoexist->btc_set(btcoexist, BTC_SET_U1_RPWM_VAL, &rpwm); btcoexist->btc_set(btcoexist, BTC_SET_U1_RPWM_VAL, &rpwm);
} }
static void halbtc8723b1ant_LpsRpwm(struct btc_coexist *btcoexist, static void halbtc8723b1ant_lps_rpwm(struct btc_coexist *btcoexist,
bool force_exec, bool force_exec,
u8 lps_val, u8 rpwm_val) u8 lps_val, u8 rpwm_val)
{ {
...@@ -609,7 +610,7 @@ static void halbtc8723b1ant_sw_mechanism(struct btc_coexist *btcoexist, ...@@ -609,7 +610,7 @@ static void halbtc8723b1ant_sw_mechanism(struct btc_coexist *btcoexist,
halbtc8723b1ant_low_penalty_ra(btcoexist, NORMAL_EXEC, low_penalty_ra); halbtc8723b1ant_low_penalty_ra(btcoexist, NORMAL_EXEC, low_penalty_ra);
} }
static void halbtc8723b1ant_SetAntPath(struct btc_coexist *btcoexist, static void halbtc8723b1ant_set_ant_path(struct btc_coexist *btcoexist,
u8 ant_pos_type, bool init_hw_cfg, u8 ant_pos_type, bool init_hw_cfg,
bool wifi_off) bool wifi_off)
{ {
...@@ -664,30 +665,31 @@ static void halbtc8723b1ant_SetAntPath(struct btc_coexist *btcoexist, ...@@ -664,30 +665,31 @@ static void halbtc8723b1ant_SetAntPath(struct btc_coexist *btcoexist,
0x64, 0x1, 0x64, 0x1,
0x1); 0x1);
/*tell firmware "no antenna inverse"*/ /* tell firmware "no antenna inverse" */
h2c_parameter[0] = 0; h2c_parameter[0] = 0;
h2c_parameter[1] = 1; /*ext switch type*/ h2c_parameter[1] = 1; /*ext switch type*/
btcoexist->btc_fill_h2c(btcoexist, 0x65, 2, btcoexist->btc_fill_h2c(btcoexist, 0x65, 2,
h2c_parameter); h2c_parameter);
} else { } else {
/*Aux Ant to BT for IPS case 0x4c[23] = 1 */ /* Aux Ant to BT for IPS case 0x4c[23] = 1 */
btcoexist->btc_write_1byte_bitmask(btcoexist, btcoexist->btc_write_1byte_bitmask(btcoexist,
0x64, 0x1, 0x64, 0x1,
0x0); 0x0);
/*tell firmware "antenna inverse"*/ /* tell firmware "antenna inverse" */
h2c_parameter[0] = 1; h2c_parameter[0] = 1;
h2c_parameter[1] = 1; /*ext switch type*/ h2c_parameter[1] = 1; /* ext switch type */
btcoexist->btc_fill_h2c(btcoexist, 0x65, 2, btcoexist->btc_fill_h2c(btcoexist, 0x65, 2,
h2c_parameter); h2c_parameter);
} }
} }
/* fixed internal switch first*/ /* fixed internal switch first
/* fixed internal switch S1->WiFi, S0->BT*/ * fixed internal switch S1->WiFi, S0->BT
*/
if (board_info->btdm_ant_pos == BTC_ANTENNA_AT_MAIN_PORT) if (board_info->btdm_ant_pos == BTC_ANTENNA_AT_MAIN_PORT)
btcoexist->btc_write_2byte(btcoexist, 0x948, 0x0); btcoexist->btc_write_2byte(btcoexist, 0x948, 0x0);
else/* fixed internal switch S0->WiFi, S1->BT*/ else /* fixed internal switch S0->WiFi, S1->BT */
btcoexist->btc_write_2byte(btcoexist, 0x948, 0x280); btcoexist->btc_write_2byte(btcoexist, 0x948, 0x280);
/* ext switch setting */ /* ext switch setting */
...@@ -730,7 +732,7 @@ static void halbtc8723b1ant_SetAntPath(struct btc_coexist *btcoexist, ...@@ -730,7 +732,7 @@ static void halbtc8723b1ant_SetAntPath(struct btc_coexist *btcoexist,
} else { } else {
if (init_hw_cfg) { if (init_hw_cfg) {
/* 0x4c[23] = 1, 0x4c[24] = 0 Antenna control by 0x64*/ /* 0x4c[23] = 1, 0x4c[24] = 0 Antenna control by 0x64 */
u32tmp = btcoexist->btc_read_4byte(btcoexist, 0x4c); u32tmp = btcoexist->btc_read_4byte(btcoexist, 0x4c);
u32tmp |= BIT23; u32tmp |= BIT23;
u32tmp &= ~BIT24; u32tmp &= ~BIT24;
...@@ -738,41 +740,42 @@ static void halbtc8723b1ant_SetAntPath(struct btc_coexist *btcoexist, ...@@ -738,41 +740,42 @@ static void halbtc8723b1ant_SetAntPath(struct btc_coexist *btcoexist,
if (board_info->btdm_ant_pos == if (board_info->btdm_ant_pos ==
BTC_ANTENNA_AT_MAIN_PORT) { BTC_ANTENNA_AT_MAIN_PORT) {
/*Main Ant to WiFi for IPS case 0x4c[23] = 1*/ /* Main Ant to WiFi for IPS case 0x4c[23] = 1 */
btcoexist->btc_write_1byte_bitmask(btcoexist, btcoexist->btc_write_1byte_bitmask(btcoexist,
0x64, 0x1, 0x64, 0x1,
0x0); 0x0);
/*tell firmware "no antenna inverse"*/ /* tell firmware "no antenna inverse" */
h2c_parameter[0] = 0; h2c_parameter[0] = 0;
h2c_parameter[1] = 0; /*internal switch type*/ h2c_parameter[1] = 0; /* internal switch type */
btcoexist->btc_fill_h2c(btcoexist, 0x65, 2, btcoexist->btc_fill_h2c(btcoexist, 0x65, 2,
h2c_parameter); h2c_parameter);
} else { } else {
/*Aux Ant to BT for IPS case 0x4c[23] = 1*/ /* Aux Ant to BT for IPS case 0x4c[23] = 1 */
btcoexist->btc_write_1byte_bitmask(btcoexist, btcoexist->btc_write_1byte_bitmask(btcoexist,
0x64, 0x1, 0x64, 0x1,
0x1); 0x1);
/*tell firmware "antenna inverse"*/ /* tell firmware "antenna inverse" */
h2c_parameter[0] = 1; h2c_parameter[0] = 1;
h2c_parameter[1] = 0; /*internal switch type*/ h2c_parameter[1] = 0; /* internal switch type */
btcoexist->btc_fill_h2c(btcoexist, 0x65, 2, btcoexist->btc_fill_h2c(btcoexist, 0x65, 2,
h2c_parameter); h2c_parameter);
} }
} }
/* fixed external switch first*/ /* fixed external switch first
/*Main->WiFi, Aux->BT*/ * Main->WiFi, Aux->BT
*/
if (board_info->btdm_ant_pos == if (board_info->btdm_ant_pos ==
BTC_ANTENNA_AT_MAIN_PORT) BTC_ANTENNA_AT_MAIN_PORT)
btcoexist->btc_write_1byte_bitmask(btcoexist, 0x92c, btcoexist->btc_write_1byte_bitmask(btcoexist, 0x92c,
0x3, 0x1); 0x3, 0x1);
else/*Main->BT, Aux->WiFi */ else /* Main->BT, Aux->WiFi */
btcoexist->btc_write_1byte_bitmask(btcoexist, 0x92c, btcoexist->btc_write_1byte_bitmask(btcoexist, 0x92c,
0x3, 0x2); 0x3, 0x2);
/* internal switch setting*/ /* internal switch setting */
switch (ant_pos_type) { switch (ant_pos_type) {
case BTC_ANT_PATH_WIFI: case BTC_ANT_PATH_WIFI:
if (board_info->btdm_ant_pos == if (board_info->btdm_ant_pos ==
...@@ -987,7 +990,7 @@ static void halbtc8723b1ant_ps_tdma(struct btc_coexist *btcoexist, ...@@ -987,7 +990,7 @@ static void halbtc8723b1ant_ps_tdma(struct btc_coexist *btcoexist,
halbtc8723b1ant_set_fw_ps_tdma(btcoexist, 0xd3, 0x12, halbtc8723b1ant_set_fw_ps_tdma(btcoexist, 0xd3, 0x12,
0x3, 0x14, 0x50); 0x3, 0x14, 0x50);
break; break;
/* SoftAP only with no sta associated,BT disable , /* SoftAP only with no sta associated, BT disable,
* TDMA mode for power saving * TDMA mode for power saving
* here softap mode screen off will cost 70-80mA for phone * here softap mode screen off will cost 70-80mA for phone
*/ */
...@@ -998,23 +1001,28 @@ static void halbtc8723b1ant_ps_tdma(struct btc_coexist *btcoexist, ...@@ -998,23 +1001,28 @@ static void halbtc8723b1ant_ps_tdma(struct btc_coexist *btcoexist,
} }
} else { } else {
switch (type) { switch (type) {
case 8: /*PTA Control */ case 8: /* PTA Control */
halbtc8723b1ant_set_fw_ps_tdma(btcoexist, 0x8, 0x0, halbtc8723b1ant_set_fw_ps_tdma(btcoexist, 0x8, 0x0,
0x0, 0x0, 0x0); 0x0, 0x0, 0x0);
halbtc8723b1ant_SetAntPath(btcoexist, BTC_ANT_PATH_PTA, halbtc8723b1ant_set_ant_path(btcoexist,
BTC_ANT_PATH_PTA,
false, false); false, false);
break; break;
case 0: case 0:
default: /*Software control, Antenna at BT side */ default:
/* Software control, Antenna at BT side */
halbtc8723b1ant_set_fw_ps_tdma(btcoexist, 0x0, 0x0, halbtc8723b1ant_set_fw_ps_tdma(btcoexist, 0x0, 0x0,
0x0, 0x0, 0x0); 0x0, 0x0, 0x0);
halbtc8723b1ant_SetAntPath(btcoexist, BTC_ANT_PATH_BT, halbtc8723b1ant_set_ant_path(btcoexist,
BTC_ANT_PATH_BT,
false, false); false, false);
break; break;
case 9: /*Software control, Antenna at WiFi side */ case 9:
/* Software control, Antenna at WiFi side */
halbtc8723b1ant_set_fw_ps_tdma(btcoexist, 0x0, 0x0, halbtc8723b1ant_set_fw_ps_tdma(btcoexist, 0x0, 0x0,
0x0, 0x0, 0x0); 0x0, 0x0, 0x0);
halbtc8723b1ant_SetAntPath(btcoexist, BTC_ANT_PATH_WIFI, halbtc8723b1ant_set_ant_path(btcoexist,
BTC_ANT_PATH_WIFI,
false, false); false, false);
break; break;
} }
...@@ -1029,189 +1037,15 @@ static void halbtc8723b1ant_ps_tdma(struct btc_coexist *btcoexist, ...@@ -1029,189 +1037,15 @@ static void halbtc8723b1ant_ps_tdma(struct btc_coexist *btcoexist,
coex_dm->pre_ps_tdma = coex_dm->cur_ps_tdma; coex_dm->pre_ps_tdma = coex_dm->cur_ps_tdma;
} }
static void btc8723b1ant_tdma_dur_adj_for_acl(struct btc_coexist *btcoexist, static void halbtc8723b1ant_ps_tdma_chk_pwr_save(struct btc_coexist *btcoexist,
u8 wifi_status)
{
struct rtl_priv *rtlpriv = btcoexist->adapter;
static s32 up, dn, m, n, wait_count;
/* 0: no change, +1: increase WiFi duration,
* -1: decrease WiFi duration
*/
s32 result;
u8 retry_count = 0, bt_info_ext;
bool wifi_busy = false;
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], TdmaDurationAdjustForAcl()\n");
if (BT_8723B_1ANT_WIFI_STATUS_CONNECTED_BUSY == wifi_status)
wifi_busy = true;
else
wifi_busy = false;
if ((BT_8723B_1ANT_WIFI_STATUS_NON_CONNECTED_ASSO_AUTH_SCAN ==
wifi_status) ||
(BT_8723B_1ANT_WIFI_STATUS_CONNECTED_SCAN == wifi_status) ||
(BT_8723B_1ANT_WIFI_STATUS_CONNECTED_SPECIAL_PKT == wifi_status)) {
if (coex_dm->cur_ps_tdma != 1 && coex_dm->cur_ps_tdma != 2 &&
coex_dm->cur_ps_tdma != 3 && coex_dm->cur_ps_tdma != 9) {
halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC,
true, 9);
coex_dm->tdma_adj_type = 9;
up = 0;
dn = 0;
m = 1;
n = 3;
result = 0;
wait_count = 0;
}
return;
}
if (!coex_dm->auto_tdma_adjust) {
coex_dm->auto_tdma_adjust = true;
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], first run TdmaDurationAdjust()!!\n");
halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 2);
coex_dm->tdma_adj_type = 2;
up = 0;
dn = 0;
m = 1;
n = 3;
result = 0;
wait_count = 0;
} else {
/*accquire the BT TRx retry count from BT_Info byte2 */
retry_count = coex_sta->bt_retry_cnt;
bt_info_ext = coex_sta->bt_info_ext;
result = 0;
wait_count++;
/* no retry in the last 2-second duration */
if (retry_count == 0) {
up++;
dn--;
if (dn <= 0)
dn = 0;
if (up >= n) {
wait_count = 0;
n = 3;
up = 0;
dn = 0;
result = 1;
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Increase wifi duration!!\n");
}
} else if (retry_count <= 3) {
up--;
dn++;
if (up <= 0)
up = 0;
if (dn == 2) {
if (wait_count <= 2)
m++;
else
m = 1;
if (m >= 20)
m = 20;
n = 3 * m;
up = 0;
dn = 0;
wait_count = 0;
result = -1;
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Decrease wifi duration for retryCounter<3!!\n");
}
} else {
if (wait_count == 1)
m++;
else
m = 1;
if (m >= 20)
m = 20;
n = 3 * m;
up = 0;
dn = 0;
wait_count = 0;
result = -1;
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Decrease wifi duration for retryCounter>3!!\n");
}
if (result == -1) {
if ((BT_INFO_8723B_1ANT_A2DP_BASIC_RATE(bt_info_ext)) &&
((coex_dm->cur_ps_tdma == 1) ||
(coex_dm->cur_ps_tdma == 2))) {
halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC,
true, 9);
coex_dm->tdma_adj_type = 9;
} else if (coex_dm->cur_ps_tdma == 1) {
halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC,
true, 2);
coex_dm->tdma_adj_type = 2;
} else if (coex_dm->cur_ps_tdma == 2) {
halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC,
true, 9);
coex_dm->tdma_adj_type = 9;
} else if (coex_dm->cur_ps_tdma == 9) {
halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC,
true, 11);
coex_dm->tdma_adj_type = 11;
}
} else if (result == 1) {
if ((BT_INFO_8723B_1ANT_A2DP_BASIC_RATE(bt_info_ext)) &&
((coex_dm->cur_ps_tdma == 1) ||
(coex_dm->cur_ps_tdma == 2))) {
halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC,
true, 9);
coex_dm->tdma_adj_type = 9;
} else if (coex_dm->cur_ps_tdma == 11) {
halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC,
true, 9);
coex_dm->tdma_adj_type = 9;
} else if (coex_dm->cur_ps_tdma == 9) {
halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC,
true, 2);
coex_dm->tdma_adj_type = 2;
} else if (coex_dm->cur_ps_tdma == 2) {
halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC,
true, 1);
coex_dm->tdma_adj_type = 1;
}
} else { /*no change */
/*if busy / idle change */
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex],********* TDMA(on, %d) ********\n",
coex_dm->cur_ps_tdma);
}
if (coex_dm->cur_ps_tdma != 1 && coex_dm->cur_ps_tdma != 2 &&
coex_dm->cur_ps_tdma != 9 && coex_dm->cur_ps_tdma != 11) {
/* recover to previous adjust type */
halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC, true,
coex_dm->tdma_adj_type);
}
}
}
static void btc8723b1ant_pstdmachkpwrsave(struct btc_coexist *btcoexist,
bool new_ps_state) bool new_ps_state)
{ {
u8 lps_mode = 0x0; u8 lps_mode = 0x0;
btcoexist->btc_get(btcoexist, BTC_GET_U1_LPS_MODE, &lps_mode); btcoexist->btc_get(btcoexist, BTC_GET_U1_LPS_MODE, &lps_mode);
if (lps_mode) { /* already under LPS state */ if (lps_mode) {
/* already under LPS state */
if (new_ps_state) { if (new_ps_state) {
/* keep state under LPS, do nothing. */ /* keep state under LPS, do nothing. */
} else { } else {
...@@ -1219,7 +1053,8 @@ static void btc8723b1ant_pstdmachkpwrsave(struct btc_coexist *btcoexist, ...@@ -1219,7 +1053,8 @@ static void btc8723b1ant_pstdmachkpwrsave(struct btc_coexist *btcoexist,
halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC, halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC,
false, 0); false, 0);
} }
} else { /* NO PS state */ } else {
/* NO PS state */
if (new_ps_state) { if (new_ps_state) {
/* will enter LPS state, turn off psTdma first */ /* will enter LPS state, turn off psTdma first */
halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC, halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC,
...@@ -1245,18 +1080,18 @@ static void halbtc8723b1ant_power_save_state(struct btc_coexist *btcoexist, ...@@ -1245,18 +1080,18 @@ static void halbtc8723b1ant_power_save_state(struct btc_coexist *btcoexist,
btcoexist->btc_set(btcoexist, BTC_SET_ACT_NORMAL_LPS, NULL); btcoexist->btc_set(btcoexist, BTC_SET_ACT_NORMAL_LPS, NULL);
break; break;
case BTC_PS_LPS_ON: case BTC_PS_LPS_ON:
btc8723b1ant_pstdmachkpwrsave(btcoexist, true); halbtc8723b1ant_ps_tdma_chk_pwr_save(btcoexist, true);
halbtc8723b1ant_LpsRpwm(btcoexist, NORMAL_EXEC, lps_val, halbtc8723b1ant_lps_rpwm(btcoexist, NORMAL_EXEC, lps_val,
rpwm_val); rpwm_val);
/* when coex force to enter LPS, do not enter 32k low power. */ /* when coex force to enter LPS, do not enter 32k low power */
low_pwr_disable = true; low_pwr_disable = true;
btcoexist->btc_set(btcoexist, BTC_SET_ACT_DISABLE_LOW_POWER, btcoexist->btc_set(btcoexist, BTC_SET_ACT_DISABLE_LOW_POWER,
&low_pwr_disable); &low_pwr_disable);
/* power save must executed before psTdma. */ /* power save must executed before psTdma */
btcoexist->btc_set(btcoexist, BTC_SET_ACT_ENTER_LPS, NULL); btcoexist->btc_set(btcoexist, BTC_SET_ACT_ENTER_LPS, NULL);
break; break;
case BTC_PS_LPS_OFF: case BTC_PS_LPS_OFF:
btc8723b1ant_pstdmachkpwrsave(btcoexist, false); halbtc8723b1ant_ps_tdma_chk_pwr_save(btcoexist, false);
btcoexist->btc_set(btcoexist, BTC_SET_ACT_LEAVE_LPS, NULL); btcoexist->btc_set(btcoexist, BTC_SET_ACT_LEAVE_LPS, NULL);
break; break;
default: default:
...@@ -1330,11 +1165,11 @@ static void btc8723b1ant_act_bt_sco_hid_only_busy(struct btc_coexist *btcoexist, ...@@ -1330,11 +1165,11 @@ static void btc8723b1ant_act_bt_sco_hid_only_busy(struct btc_coexist *btcoexist,
&wifi_connected); &wifi_connected);
/* tdma and coex table */ /* tdma and coex table */
if (bt_link_info->sco_exist) { if (bt_link_info->sco_exist) {
halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 5); halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 5);
halbtc8723b1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 2); halbtc8723b1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 2);
} else { /* HID */ } else {
/* HID */
halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 6); halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 6);
halbtc8723b1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 5); halbtc8723b1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 5);
} }
...@@ -1347,18 +1182,18 @@ static void halbtc8723b1ant_action_wifi_connected_bt_acl_busy( ...@@ -1347,18 +1182,18 @@ static void halbtc8723b1ant_action_wifi_connected_bt_acl_busy(
struct btc_bt_link_info *bt_link_info = &btcoexist->bt_link_info; struct btc_bt_link_info *bt_link_info = &btcoexist->bt_link_info;
if (bt_link_info->hid_only) { /*HID */ if (bt_link_info->hid_only) { /* HID */
btc8723b1ant_act_bt_sco_hid_only_busy(btcoexist, wifi_status); btc8723b1ant_act_bt_sco_hid_only_busy(btcoexist, wifi_status);
coex_dm->auto_tdma_adjust = false; coex_dm->auto_tdma_adjust = false;
return; return;
} else if (bt_link_info->a2dp_only) { /*A2DP */ } else if (bt_link_info->a2dp_only) { /* A2DP */
if (BT_8723B_1ANT_WIFI_STATUS_CONNECTED_IDLE == wifi_status) { if (wifi_status == BT_8723B_1ANT_WIFI_STATUS_CONNECTED_IDLE) {
halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC, halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC,
false, 8); false, 8);
halbtc8723b1ant_coex_table_with_type(btcoexist, halbtc8723b1ant_coex_table_with_type(btcoexist,
NORMAL_EXEC, 2); NORMAL_EXEC, 2);
coex_dm->auto_tdma_adjust = false; coex_dm->auto_tdma_adjust = false;
} else { /*for low BT RSSI */ } else { /* for low BT RSSI */
halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC, halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC,
true, 11); true, 11);
halbtc8723b1ant_coex_table_with_type(btcoexist, halbtc8723b1ant_coex_table_with_type(btcoexist,
...@@ -1366,18 +1201,18 @@ static void halbtc8723b1ant_action_wifi_connected_bt_acl_busy( ...@@ -1366,18 +1201,18 @@ static void halbtc8723b1ant_action_wifi_connected_bt_acl_busy(
coex_dm->auto_tdma_adjust = false; coex_dm->auto_tdma_adjust = false;
} }
} else if (bt_link_info->hid_exist && } else if (bt_link_info->hid_exist &&
bt_link_info->a2dp_exist) { /*HID+A2DP */ bt_link_info->a2dp_exist) { /* HID + A2DP */
halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 14); halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 14);
coex_dm->auto_tdma_adjust = false; coex_dm->auto_tdma_adjust = false;
halbtc8723b1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 6); halbtc8723b1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 6);
/*PAN(OPP,FTP), HID+PAN(OPP,FTP) */ /* PAN(OPP,FTP), HID + PAN(OPP,FTP) */
} else if (bt_link_info->pan_only || } else if (bt_link_info->pan_only ||
(bt_link_info->hid_exist && bt_link_info->pan_exist)) { (bt_link_info->hid_exist && bt_link_info->pan_exist)) {
halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 3); halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 3);
halbtc8723b1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 6); halbtc8723b1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 6);
coex_dm->auto_tdma_adjust = false; coex_dm->auto_tdma_adjust = false;
/*A2DP+PAN(OPP,FTP), HID+A2DP+PAN(OPP,FTP)*/ /* A2DP + PAN(OPP,FTP), HID + A2DP + PAN(OPP,FTP) */
} else if ((bt_link_info->a2dp_exist && bt_link_info->pan_exist) || } else if ((bt_link_info->a2dp_exist && bt_link_info->pan_exist) ||
(bt_link_info->hid_exist && bt_link_info->a2dp_exist && (bt_link_info->hid_exist && bt_link_info->a2dp_exist &&
bt_link_info->pan_exist)) { bt_link_info->pan_exist)) {
...@@ -1402,57 +1237,59 @@ static void btc8723b1ant_action_wifi_not_conn(struct btc_coexist *btcoexist) ...@@ -1402,57 +1237,59 @@ static void btc8723b1ant_action_wifi_not_conn(struct btc_coexist *btcoexist)
halbtc8723b1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 0); halbtc8723b1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 0);
} }
static void btc8723b1ant_action_wifi_not_conn_scan(struct btc_coexist *btcoex) static void
btc8723b1ant_action_wifi_not_conn_scan(struct btc_coexist *btcoexist)
{ {
struct btc_bt_link_info *bt_link_info = &btcoex->bt_link_info; struct btc_bt_link_info *bt_link_info = &btcoexist->bt_link_info;
halbtc8723b1ant_power_save_state(btcoex, BTC_PS_WIFI_NATIVE, halbtc8723b1ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE,
0x0, 0x0); 0x0, 0x0);
/* tdma and coex table */ /* tdma and coex table */
if (BT_8723B_1ANT_BT_STATUS_ACL_BUSY == coex_dm->bt_status) { if (BT_8723B_1ANT_BT_STATUS_ACL_BUSY == coex_dm->bt_status) {
if (bt_link_info->a2dp_exist && bt_link_info->pan_exist) { if (bt_link_info->a2dp_exist && bt_link_info->pan_exist) {
halbtc8723b1ant_ps_tdma(btcoex, NORMAL_EXEC, halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC,
true, 22); true, 22);
halbtc8723b1ant_coex_table_with_type(btcoex, halbtc8723b1ant_coex_table_with_type(btcoexist,
NORMAL_EXEC, 1); NORMAL_EXEC, 1);
} else if (bt_link_info->pan_only) { } else if (bt_link_info->pan_only) {
halbtc8723b1ant_ps_tdma(btcoex, NORMAL_EXEC, halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC,
true, 20); true, 20);
halbtc8723b1ant_coex_table_with_type(btcoex, halbtc8723b1ant_coex_table_with_type(btcoexist,
NORMAL_EXEC, 2); NORMAL_EXEC, 2);
} else { } else {
halbtc8723b1ant_ps_tdma(btcoex, NORMAL_EXEC, halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC,
true, 20); true, 20);
halbtc8723b1ant_coex_table_with_type(btcoex, halbtc8723b1ant_coex_table_with_type(btcoexist,
NORMAL_EXEC, 1); NORMAL_EXEC, 1);
} }
} else if ((BT_8723B_1ANT_BT_STATUS_SCO_BUSY == coex_dm->bt_status) || } else if ((BT_8723B_1ANT_BT_STATUS_SCO_BUSY == coex_dm->bt_status) ||
(BT_8723B_1ANT_BT_STATUS_ACL_SCO_BUSY == (BT_8723B_1ANT_BT_STATUS_ACL_SCO_BUSY ==
coex_dm->bt_status)){ coex_dm->bt_status)){
btc8723b1ant_act_bt_sco_hid_only_busy(btcoex, btc8723b1ant_act_bt_sco_hid_only_busy(btcoexist,
BT_8723B_1ANT_WIFI_STATUS_CONNECTED_SCAN); BT_8723B_1ANT_WIFI_STATUS_CONNECTED_SCAN);
} else { } else {
halbtc8723b1ant_ps_tdma(btcoex, NORMAL_EXEC, false, 8); halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 8);
halbtc8723b1ant_coex_table_with_type(btcoex, NORMAL_EXEC, 2); halbtc8723b1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 2);
} }
} }
static void btc8723b1ant_act_wifi_not_conn_asso_auth(struct btc_coexist *btcoex) static void
btc8723b1ant_act_wifi_not_conn_asso_auth(struct btc_coexist *btcoexist)
{ {
struct btc_bt_link_info *bt_link_info = &btcoex->bt_link_info; struct btc_bt_link_info *bt_link_info = &btcoexist->bt_link_info;
halbtc8723b1ant_power_save_state(btcoex, BTC_PS_WIFI_NATIVE, halbtc8723b1ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE,
0x0, 0x0); 0x0, 0x0);
if ((BT_8723B_1ANT_BT_STATUS_CONNECTED_IDLE == coex_dm->bt_status) || if ((BT_8723B_1ANT_BT_STATUS_CONNECTED_IDLE == coex_dm->bt_status) ||
(bt_link_info->sco_exist) || (bt_link_info->hid_only) || (bt_link_info->sco_exist) || (bt_link_info->hid_only) ||
(bt_link_info->a2dp_only) || (bt_link_info->pan_only)) { (bt_link_info->a2dp_only) || (bt_link_info->pan_only)) {
halbtc8723b1ant_ps_tdma(btcoex, NORMAL_EXEC, false, 8); halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 8);
halbtc8723b1ant_coex_table_with_type(btcoex, NORMAL_EXEC, 7); halbtc8723b1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 7);
} else { } else {
halbtc8723b1ant_ps_tdma(btcoex, NORMAL_EXEC, true, 20); halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 20);
halbtc8723b1ant_coex_table_with_type(btcoex, NORMAL_EXEC, 1); halbtc8723b1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 1);
} }
} }
...@@ -1663,14 +1500,13 @@ static void halbtc8723b1ant_run_coexist_mechanism(struct btc_coexist *btcoexist) ...@@ -1663,14 +1500,13 @@ static void halbtc8723b1ant_run_coexist_mechanism(struct btc_coexist *btcoexist)
if (!bt_link_info->sco_exist && !bt_link_info->hid_exist) { if (!bt_link_info->sco_exist && !bt_link_info->hid_exist) {
halbtc8723b1ant_limited_tx(btcoexist, NORMAL_EXEC, 0, 0, 0, 0); halbtc8723b1ant_limited_tx(btcoexist, NORMAL_EXEC, 0, 0, 0, 0);
} else { } else {
if (wifi_connected) { if (wifi_connected)
halbtc8723b1ant_limited_tx(btcoexist, halbtc8723b1ant_limited_tx(btcoexist,
NORMAL_EXEC, 1, 1, 1, 1); NORMAL_EXEC, 1, 1, 1, 1);
} else { else
halbtc8723b1ant_limited_tx(btcoexist, NORMAL_EXEC, halbtc8723b1ant_limited_tx(btcoexist, NORMAL_EXEC,
0, 0, 0, 0); 0, 0, 0, 0);
} }
}
if (bt_link_info->sco_exist) { if (bt_link_info->sco_exist) {
bt_ctrl_agg_buf_size = true; bt_ctrl_agg_buf_size = true;
...@@ -1784,22 +1620,19 @@ static void halbtc8723b1ant_init_hw_config(struct btc_coexist *btcoexist, ...@@ -1784,22 +1620,19 @@ static void halbtc8723b1ant_init_hw_config(struct btc_coexist *btcoexist,
btcoexist->btc_write_1byte(btcoexist, 0x790, u8tmp); btcoexist->btc_write_1byte(btcoexist, 0x790, u8tmp);
/* Enable counter statistics */ /* Enable counter statistics */
/*0x76e[3] =1, WLAN_Act control by PTA */ /*0x76e[3] = 1, WLAN_Act control by PTA */
btcoexist->btc_write_1byte(btcoexist, 0x76e, 0xc); btcoexist->btc_write_1byte(btcoexist, 0x76e, 0xc);
btcoexist->btc_write_1byte(btcoexist, 0x778, 0x1); btcoexist->btc_write_1byte(btcoexist, 0x778, 0x1);
btcoexist->btc_write_1byte_bitmask(btcoexist, 0x40, 0x20, 0x1); btcoexist->btc_write_1byte_bitmask(btcoexist, 0x40, 0x20, 0x1);
/*Antenna config */ /* Antenna config */
halbtc8723b1ant_SetAntPath(btcoexist, BTC_ANT_PATH_PTA, true, false); halbtc8723b1ant_set_ant_path(btcoexist, BTC_ANT_PATH_PTA, true, false);
/* PTA parameter */ /* PTA parameter */
halbtc8723b1ant_coex_table_with_type(btcoexist, FORCE_EXEC, 0); halbtc8723b1ant_coex_table_with_type(btcoexist, FORCE_EXEC, 0);
} }
/************************************************************** /**************************************************************
* work around function start with wa_halbtc8723b1ant_ * extern function start with ex_halbtc8723b1ant_
**************************************************************/
/**************************************************************
* extern function start with EXhalbtc8723b1ant_
**************************************************************/ **************************************************************/
void ex_halbtc8723b1ant_init_hwconfig(struct btc_coexist *btcoexist) void ex_halbtc8723b1ant_init_hwconfig(struct btc_coexist *btcoexist)
...@@ -1953,7 +1786,7 @@ void ex_halbtc8723b1ant_display_coex_info(struct btc_coexist *btcoexist) ...@@ -1953,7 +1786,7 @@ void ex_halbtc8723b1ant_display_coex_info(struct btc_coexist *btcoexist)
if (coex_sta->bt_info_c2h_cnt[i]) { if (coex_sta->bt_info_c2h_cnt[i]) {
RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG, RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG,
"\r\n %-35s = %7ph(%d)", "\r\n %-35s = %7ph(%d)",
GLBtInfoSrc8723b1Ant[i], glbt_info_src_8723b_1ant[i],
coex_sta->bt_info_c2h[i], coex_sta->bt_info_c2h[i],
coex_sta->bt_info_c2h_cnt[i]); coex_sta->bt_info_c2h_cnt[i]);
} }
...@@ -2111,7 +1944,7 @@ void ex_halbtc8723b1ant_ips_notify(struct btc_coexist *btcoexist, u8 type) ...@@ -2111,7 +1944,7 @@ void ex_halbtc8723b1ant_ips_notify(struct btc_coexist *btcoexist, u8 type)
"[BTCoex], IPS ENTER notify\n"); "[BTCoex], IPS ENTER notify\n");
coex_sta->under_ips = true; coex_sta->under_ips = true;
halbtc8723b1ant_SetAntPath(btcoexist, BTC_ANT_PATH_BT, halbtc8723b1ant_set_ant_path(btcoexist, BTC_ANT_PATH_BT,
false, true); false, true);
/* set PTA control */ /* set PTA control */
halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 0); halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 0);
...@@ -2187,14 +2020,17 @@ void ex_halbtc8723b1ant_scan_notify(struct btc_coexist *btcoexist, u8 type) ...@@ -2187,14 +2020,17 @@ void ex_halbtc8723b1ant_scan_notify(struct btc_coexist *btcoexist, u8 type)
if (BTC_SCAN_START == type) { if (BTC_SCAN_START == type) {
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], SCAN START notify\n"); "[BTCoex], SCAN START notify\n");
if (!wifi_connected) /* non-connected scan */ if (!wifi_connected)
/* non-connected scan */
btc8723b1ant_action_wifi_not_conn_scan(btcoexist); btc8723b1ant_action_wifi_not_conn_scan(btcoexist);
else /* wifi is connected */ else
/* wifi is connected */
btc8723b1ant_action_wifi_conn_scan(btcoexist); btc8723b1ant_action_wifi_conn_scan(btcoexist);
} else if (BTC_SCAN_FINISH == type) { } else if (BTC_SCAN_FINISH == type) {
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], SCAN FINISH notify\n"); "[BTCoex], SCAN FINISH notify\n");
if (!wifi_connected) /* non-connected scan */ if (!wifi_connected)
/* non-connected scan */
btc8723b1ant_action_wifi_not_conn(btcoexist); btc8723b1ant_action_wifi_not_conn(btcoexist);
else else
halbtc8723b1ant_action_wifi_connected(btcoexist); halbtc8723b1ant_action_wifi_connected(btcoexist);
...@@ -2244,7 +2080,8 @@ void ex_halbtc8723b1ant_connect_notify(struct btc_coexist *btcoexist, u8 type) ...@@ -2244,7 +2080,8 @@ void ex_halbtc8723b1ant_connect_notify(struct btc_coexist *btcoexist, u8 type)
btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_CONNECTED, btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_CONNECTED,
&wifi_connected); &wifi_connected);
if (!wifi_connected) /* non-connected scan */ if (!wifi_connected)
/* non-connected scan */
btc8723b1ant_action_wifi_not_conn(btcoexist); btc8723b1ant_action_wifi_not_conn(btcoexist);
else else
halbtc8723b1ant_action_wifi_connected(btcoexist); halbtc8723b1ant_action_wifi_connected(btcoexist);
...@@ -2433,7 +2270,8 @@ void ex_halbtc8723b1ant_bt_info_notify(struct btc_coexist *btcoexist, ...@@ -2433,7 +2270,8 @@ void ex_halbtc8723b1ant_bt_info_notify(struct btc_coexist *btcoexist,
coex_sta->a2dp_exist = false; coex_sta->a2dp_exist = false;
coex_sta->hid_exist = false; coex_sta->hid_exist = false;
coex_sta->sco_exist = false; coex_sta->sco_exist = false;
} else { /* connection exists */ } else {
/* connection exists */
coex_sta->bt_link_exist = true; coex_sta->bt_link_exist = true;
if (bt_info & BT_INFO_8723B_1ANT_B_FTP) if (bt_info & BT_INFO_8723B_1ANT_B_FTP)
coex_sta->pan_exist = true; coex_sta->pan_exist = true;
...@@ -2502,7 +2340,7 @@ void ex_halbtc8723b1ant_halt_notify(struct btc_coexist *btcoexist) ...@@ -2502,7 +2340,7 @@ void ex_halbtc8723b1ant_halt_notify(struct btc_coexist *btcoexist)
btcoexist->stop_coex_dm = true; btcoexist->stop_coex_dm = true;
halbtc8723b1ant_SetAntPath(btcoexist, BTC_ANT_PATH_BT, false, true); halbtc8723b1ant_set_ant_path(btcoexist, BTC_ANT_PATH_BT, false, true);
halbtc8723b1ant_ignore_wlan_act(btcoexist, FORCE_EXEC, true); halbtc8723b1ant_ignore_wlan_act(btcoexist, FORCE_EXEC, true);
...@@ -2523,7 +2361,7 @@ void ex_halbtc8723b1ant_pnp_notify(struct btc_coexist *btcoexist, u8 pnp_state) ...@@ -2523,7 +2361,7 @@ void ex_halbtc8723b1ant_pnp_notify(struct btc_coexist *btcoexist, u8 pnp_state)
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Pnp notify to SLEEP\n"); "[BTCoex], Pnp notify to SLEEP\n");
btcoexist->stop_coex_dm = true; btcoexist->stop_coex_dm = true;
halbtc8723b1ant_SetAntPath(btcoexist, BTC_ANT_PATH_BT, false, halbtc8723b1ant_set_ant_path(btcoexist, BTC_ANT_PATH_BT, false,
true); true);
halbtc8723b1ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE, halbtc8723b1ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE,
0x0, 0x0); 0x0, 0x0);
......
...@@ -676,15 +676,15 @@ static void btc8723b_set_penalty_txrate(struct btc_coexist *btcoexist, ...@@ -676,15 +676,15 @@ static void btc8723b_set_penalty_txrate(struct btc_coexist *btcoexist,
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
u8 h2c_parameter[6] = {0}; u8 h2c_parameter[6] = {0};
h2c_parameter[0] = 0x6; /* opCode, 0x6= Retry_Penalty*/ h2c_parameter[0] = 0x6; /* op_code, 0x6 = Retry_Penalty */
if (low_penalty_ra) { if (low_penalty_ra) {
h2c_parameter[1] |= BIT0; h2c_parameter[1] |= BIT0;
/*normal rate except MCS7/6/5, OFDM54/48/36*/ /* normal rate except MCS7/6/5, OFDM54/48/36 */
h2c_parameter[2] = 0x00; h2c_parameter[2] = 0x00;
h2c_parameter[3] = 0xf7; /*MCS7 or OFDM54*/ h2c_parameter[3] = 0xf7; /* MCS7 or OFDM54 */
h2c_parameter[4] = 0xf8; /*MCS6 or OFDM48*/ h2c_parameter[4] = 0xf8; /* MCS6 or OFDM48 */
h2c_parameter[5] = 0xf9; /*MCS5 or OFDM36*/ h2c_parameter[5] = 0xf9; /* MCS5 or OFDM36 */
} }
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
...@@ -699,7 +699,6 @@ static void btc8723b2ant_low_penalty_ra(struct btc_coexist *btcoexist, ...@@ -699,7 +699,6 @@ static void btc8723b2ant_low_penalty_ra(struct btc_coexist *btcoexist,
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
/*return; */
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], %s turn LowPenaltyRA = %s\n", "[BTCoex], %s turn LowPenaltyRA = %s\n",
(force_exec ? "force to" : ""), (low_penalty_ra ? (force_exec ? "force to" : ""), (low_penalty_ra ?
...@@ -741,7 +740,7 @@ static void btc8723b2ant_set_sw_fulltime_dac_swing(struct btc_coexist *btcoex, ...@@ -741,7 +740,7 @@ static void btc8723b2ant_set_sw_fulltime_dac_swing(struct btc_coexist *btcoex,
btc8723b2ant_set_dac_swing_reg(btcoex, 0x18); btc8723b2ant_set_dac_swing_reg(btcoex, 0x18);
} }
static void btc8723b2ant_dac_swing(struct btc_coexist *btcoexist, void btc8723b2ant_dac_swing(struct btc_coexist *btcoexist,
bool force_exec, bool dac_swing_on, bool force_exec, bool dac_swing_on,
u32 dac_swing_lvl) u32 dac_swing_lvl)
{ {
...@@ -838,7 +837,7 @@ static void btc8723b2ant_coex_table(struct btc_coexist *btcoexist, ...@@ -838,7 +837,7 @@ static void btc8723b2ant_coex_table(struct btc_coexist *btcoexist,
coex_dm->pre_val0x6cc = coex_dm->cur_val0x6cc; coex_dm->pre_val0x6cc = coex_dm->cur_val0x6cc;
} }
static void btc8723b_coex_tbl_type(struct btc_coexist *btcoexist, static void btc8723b2ant_coex_table_with_type(struct btc_coexist *btcoexist,
bool force_exec, u8 type) bool force_exec, u8 type)
{ {
switch (type) { switch (type) {
...@@ -906,7 +905,7 @@ static void btc8723b2ant_set_fw_ignore_wlan_act(struct btc_coexist *btcoexist, ...@@ -906,7 +905,7 @@ static void btc8723b2ant_set_fw_ignore_wlan_act(struct btc_coexist *btcoexist,
u8 h2c_parameter[1] = {0}; u8 h2c_parameter[1] = {0};
if (enable) if (enable)
h2c_parameter[0] |= BIT0;/* function enable*/ h2c_parameter[0] |= BIT0; /* function enable */
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], set FW for BT Ignore Wlan_Act, FW write 0x63=0x%x\n", "[BTCoex], set FW for BT Ignore Wlan_Act, FW write 0x63=0x%x\n",
...@@ -967,7 +966,7 @@ static void btc8723b2ant_set_fw_ps_tdma(struct btc_coexist *btcoexist, u8 byte1, ...@@ -967,7 +966,7 @@ static void btc8723b2ant_set_fw_ps_tdma(struct btc_coexist *btcoexist, u8 byte1,
btcoexist->btc_fill_h2c(btcoexist, 0x60, 5, h2c_parameter); btcoexist->btc_fill_h2c(btcoexist, 0x60, 5, h2c_parameter);
} }
static void btc8723b2ant_sw_mechanism1(struct btc_coexist *btcoexist, static void btc8723b2ant_sw_mechanism(struct btc_coexist *btcoexist,
bool shrink_rx_lpf, bool low_penalty_ra, bool shrink_rx_lpf, bool low_penalty_ra,
bool limited_dig, bool bt_lna_constrain) bool limited_dig, bool bt_lna_constrain)
{ {
...@@ -1208,11 +1207,11 @@ static void btc8723b2ant_coex_alloff(struct btc_coexist *btcoexist) ...@@ -1208,11 +1207,11 @@ static void btc8723b2ant_coex_alloff(struct btc_coexist *btcoexist)
btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false); btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false);
/* sw all off */ /* sw all off */
btc8723b2ant_sw_mechanism1(btcoexist, false, false, false, false); btc8723b2ant_sw_mechanism(btcoexist, false, false, false, false);
/* hw all off */ /* hw all off */
btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff, 0x0); btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
btc8723b_coex_tbl_type(btcoexist, NORMAL_EXEC, 0); btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 0);
} }
static void btc8723b2ant_init_coex_dm(struct btc_coexist *btcoexist) static void btc8723b2ant_init_coex_dm(struct btc_coexist *btcoexist)
...@@ -1223,7 +1222,9 @@ static void btc8723b2ant_init_coex_dm(struct btc_coexist *btcoexist) ...@@ -1223,7 +1222,9 @@ static void btc8723b2ant_init_coex_dm(struct btc_coexist *btcoexist)
btc8723b2ant_fw_dac_swing_lvl(btcoexist, FORCE_EXEC, 6); btc8723b2ant_fw_dac_swing_lvl(btcoexist, FORCE_EXEC, 6);
btc8723b2ant_dec_bt_pwr(btcoexist, FORCE_EXEC, false); btc8723b2ant_dec_bt_pwr(btcoexist, FORCE_EXEC, false);
btc8723b2ant_sw_mechanism1(btcoexist, false, false, false, false); btc8723b2ant_sw_mechanism(btcoexist, false, false, false, false);
coex_sta->pop_event_cnt = 0;
} }
static void btc8723b2ant_action_bt_inquiry(struct btc_coexist *btcoexist) static void btc8723b2ant_action_bt_inquiry(struct btc_coexist *btcoexist)
...@@ -1237,22 +1238,16 @@ static void btc8723b2ant_action_bt_inquiry(struct btc_coexist *btcoexist) ...@@ -1237,22 +1238,16 @@ static void btc8723b2ant_action_bt_inquiry(struct btc_coexist *btcoexist)
&wifi_connected); &wifi_connected);
if (wifi_connected) { if (wifi_connected) {
btc8723b_coex_tbl_type(btcoexist, NORMAL_EXEC, 7); btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 7);
btc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 3); btc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 3);
} else { } else {
btc8723b_coex_tbl_type(btcoexist, NORMAL_EXEC, 0); btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 0);
btc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1); btc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);
} }
btc8723b2ant_fw_dac_swing_lvl(btcoexist, FORCE_EXEC, 6); btc8723b2ant_fw_dac_swing_lvl(btcoexist, FORCE_EXEC, 6);
btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false); btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false);
btc8723b2ant_sw_mechanism1(btcoexist, false, false, false, false); btc8723b2ant_sw_mechanism(btcoexist, false, false, false, false);
coex_dm->need_recover_0x948 = true;
coex_dm->backup_0x948 = btcoexist->btc_read_2byte(btcoexist, 0x948);
btc8723b2ant_set_ant_path(btcoexist, BTC_ANT_WIFI_AT_AUX,
false, false);
} }
static bool btc8723b2ant_is_common_action(struct btc_coexist *btcoexist) static bool btc8723b2ant_is_common_action(struct btc_coexist *btcoexist)
...@@ -1277,12 +1272,12 @@ static bool btc8723b2ant_is_common_action(struct btc_coexist *btcoexist) ...@@ -1277,12 +1272,12 @@ static bool btc8723b2ant_is_common_action(struct btc_coexist *btcoexist)
btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff, btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff,
0x0); 0x0);
btc8723b_coex_tbl_type(btcoexist, NORMAL_EXEC, 0); btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 0);
btc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1); btc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);
btc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6); btc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false); btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false);
btc8723b2ant_sw_mechanism1(btcoexist, false, false, false, btc8723b2ant_sw_mechanism(btcoexist, false, false, false,
false); false);
common = true; common = true;
...@@ -1299,14 +1294,15 @@ static bool btc8723b2ant_is_common_action(struct btc_coexist *btcoexist) ...@@ -1299,14 +1294,15 @@ static bool btc8723b2ant_is_common_action(struct btc_coexist *btcoexist)
btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1,
0xfffff, 0x0); 0xfffff, 0x0);
btc8723b_coex_tbl_type(btcoexist, NORMAL_EXEC, 0); btc8723b2ant_coex_table_with_type(btcoexist,
NORMAL_EXEC, 0);
btc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1); btc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);
btc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, btc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC,
0xb); 0xb);
btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC,
false); false);
btc8723b2ant_sw_mechanism1(btcoexist, false, false, btc8723b2ant_sw_mechanism(btcoexist, false, false,
false, false); false, false);
common = true; common = true;
...@@ -1324,14 +1320,15 @@ static bool btc8723b2ant_is_common_action(struct btc_coexist *btcoexist) ...@@ -1324,14 +1320,15 @@ static bool btc8723b2ant_is_common_action(struct btc_coexist *btcoexist)
btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1,
0xfffff, 0x0); 0xfffff, 0x0);
btc8723b_coex_tbl_type(btcoexist, NORMAL_EXEC, 0); btc8723b2ant_coex_table_with_type(btcoexist,
NORMAL_EXEC, 0);
btc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1); btc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);
btc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, btc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC,
0xb); 0xb);
btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC,
false); false);
btc8723b2ant_sw_mechanism1(btcoexist, true, false, btc8723b2ant_sw_mechanism(btcoexist, true, false,
false, false); false, false);
common = true; common = true;
...@@ -1354,14 +1351,15 @@ static bool btc8723b2ant_is_common_action(struct btc_coexist *btcoexist) ...@@ -1354,14 +1351,15 @@ static bool btc8723b2ant_is_common_action(struct btc_coexist *btcoexist)
btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A,
0x1, 0xfffff, 0x0); 0x1, 0xfffff, 0x0);
btc8723b_coex_tbl_type(btcoexist, NORMAL_EXEC, btc8723b2ant_coex_table_with_type(btcoexist,
NORMAL_EXEC,
7); 7);
btc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, btc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC,
true, 21); true, 21);
btc8723b2ant_fw_dac_swing_lvl(btcoexist, btc8723b2ant_fw_dac_swing_lvl(btcoexist,
NORMAL_EXEC, NORMAL_EXEC,
0xb); 0xb);
btc8723b2ant_sw_mechanism1(btcoexist, false, btc8723b2ant_sw_mechanism(btcoexist, false,
false, false, false, false,
false); false);
common = true; common = true;
...@@ -1542,8 +1540,11 @@ static void btc8723b2ant_tdma_duration_adjust(struct btc_coexist *btcoexist, ...@@ -1542,8 +1540,11 @@ static void btc8723b2ant_tdma_duration_adjust(struct btc_coexist *btcoexist,
"[BTCoex], max Interval = %d\n", max_interval); "[BTCoex], max Interval = %d\n", max_interval);
} }
/*if current PsTdma not match with the recorded one (when scan, dhcp..), RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
*then we have to adjust it back to the previous recorded one. "[BTCoex], max Interval = %d\n", max_interval);
/* if current PsTdma not match with the recorded one (scan, dhcp, ...),
* then we have to adjust it back to the previous recorded one.
*/ */
if (coex_dm->cur_ps_tdma != coex_dm->tdma_adj_type) { if (coex_dm->cur_ps_tdma != coex_dm->tdma_adj_type) {
bool scan = false, link = false, roam = false; bool scan = false, link = false, roam = false;
...@@ -1579,32 +1580,33 @@ static void btc8723b2ant_action_sco(struct btc_coexist *btcoexist) ...@@ -1579,32 +1580,33 @@ static void btc8723b2ant_action_sco(struct btc_coexist *btcoexist)
btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw); btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
/*for SCO quality at 11b/g mode*/
if (BTC_WIFI_BW_LEGACY == wifi_bw) if (BTC_WIFI_BW_LEGACY == wifi_bw)
btc8723b_coex_tbl_type(btcoexist, NORMAL_EXEC, 2); /* for SCO quality at 11b/g mode */
else /*for SCO quality & wifi performance balance at 11n mode*/ btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 2);
btc8723b_coex_tbl_type(btcoexist, NORMAL_EXEC, 8); else
/* for SCO quality & wifi performance balance at 11n mode */
btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 8);
/*for voice quality */ /* for voice quality */
btc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 0); btc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 0);
/* sw mechanism */ /* sw mechanism */
if (BTC_WIFI_BW_HT40 == wifi_bw) { if (BTC_WIFI_BW_HT40 == wifi_bw) {
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8723b2ant_sw_mechanism1(btcoexist, true, true, btc8723b2ant_sw_mechanism(btcoexist, true, true,
false, false); false, false);
} else { } else {
btc8723b2ant_sw_mechanism1(btcoexist, true, true, btc8723b2ant_sw_mechanism(btcoexist, true, true,
false, false); false, false);
} }
} else { } else {
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8723b2ant_sw_mechanism1(btcoexist, false, true, btc8723b2ant_sw_mechanism(btcoexist, false, true,
false, false); false, false);
} else { } else {
btc8723b2ant_sw_mechanism1(btcoexist, false, true, btc8723b2ant_sw_mechanism(btcoexist, false, true,
false, false); false, false);
} }
} }
...@@ -1625,10 +1627,13 @@ static void btc8723b2ant_action_hid(struct btc_coexist *btcoexist) ...@@ -1625,10 +1627,13 @@ static void btc8723b2ant_action_hid(struct btc_coexist *btcoexist)
btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw); btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
if (BTC_WIFI_BW_LEGACY == wifi_bw) /*/for HID at 11b/g mode*/ if (wifi_bw == BTC_WIFI_BW_LEGACY)
btc8723b_coex_tbl_type(btcoexist, NORMAL_EXEC, 7); /* for HID at 11b/g mode */
else /*for HID quality & wifi performance balance at 11n mode*/ btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 7);
btc8723b_coex_tbl_type(btcoexist, NORMAL_EXEC, 9); else
/* for HID quality & wifi performance balance at 11n mode */
btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 9);
if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) || if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||
(bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) (bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH))
...@@ -1640,25 +1645,25 @@ static void btc8723b2ant_action_hid(struct btc_coexist *btcoexist) ...@@ -1640,25 +1645,25 @@ static void btc8723b2ant_action_hid(struct btc_coexist *btcoexist)
if (BTC_WIFI_BW_HT40 == wifi_bw) { if (BTC_WIFI_BW_HT40 == wifi_bw) {
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8723b2ant_sw_mechanism1(btcoexist, true, true, btc8723b2ant_sw_mechanism(btcoexist, true, true,
false, false); false, false);
} else { } else {
btc8723b2ant_sw_mechanism1(btcoexist, true, true, btc8723b2ant_sw_mechanism(btcoexist, true, true,
false, false); false, false);
} }
} else { } else {
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8723b2ant_sw_mechanism1(btcoexist, false, true, btc8723b2ant_sw_mechanism(btcoexist, false, true,
false, false); false, false);
} else { } else {
btc8723b2ant_sw_mechanism1(btcoexist, false, true, btc8723b2ant_sw_mechanism(btcoexist, false, true,
false, false); false, false);
} }
} }
} }
/*A2DP only / PAN(EDR) only/ A2DP+PAN(HS)*/ /* A2DP only / PAN(EDR) only/ A2DP+PAN(HS) */
static void btc8723b2ant_action_a2dp(struct btc_coexist *btcoexist) static void btc8723b2ant_action_a2dp(struct btc_coexist *btcoexist)
{ {
u8 wifi_rssi_state, wifi_rssi_state1, bt_rssi_state; u8 wifi_rssi_state, wifi_rssi_state1, bt_rssi_state;
...@@ -1680,16 +1685,16 @@ static void btc8723b2ant_action_a2dp(struct btc_coexist *btcoexist) ...@@ -1680,16 +1685,16 @@ static void btc8723b2ant_action_a2dp(struct btc_coexist *btcoexist)
0x0); 0x0);
btc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6); btc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false); btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false);
btc8723b_coex_tbl_type(btcoexist, NORMAL_EXEC, 0); btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 0);
btc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1); btc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);
/* sw mechanism */ /* sw mechanism */
btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw); btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
if (BTC_WIFI_BW_HT40 == wifi_bw) { if (BTC_WIFI_BW_HT40 == wifi_bw) {
btc8723b2ant_sw_mechanism1(btcoexist, true, false, btc8723b2ant_sw_mechanism(btcoexist, true, false,
false, false); false, false);
} else { } else {
btc8723b2ant_sw_mechanism1(btcoexist, false, false, btc8723b2ant_sw_mechanism(btcoexist, false, false,
false, false); false, false);
} }
return; return;
...@@ -1699,7 +1704,7 @@ static void btc8723b2ant_action_a2dp(struct btc_coexist *btcoexist) ...@@ -1699,7 +1704,7 @@ static void btc8723b2ant_action_a2dp(struct btc_coexist *btcoexist)
btc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6); btc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
btc8723b_coex_tbl_type(btcoexist, NORMAL_EXEC, 7); btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 7);
if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) || if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||
(bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) (bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH))
...@@ -1713,19 +1718,19 @@ static void btc8723b2ant_action_a2dp(struct btc_coexist *btcoexist) ...@@ -1713,19 +1718,19 @@ static void btc8723b2ant_action_a2dp(struct btc_coexist *btcoexist)
if (BTC_WIFI_BW_HT40 == wifi_bw) { if (BTC_WIFI_BW_HT40 == wifi_bw) {
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8723b2ant_sw_mechanism1(btcoexist, true, false, btc8723b2ant_sw_mechanism(btcoexist, true, false,
false, false); false, false);
} else { } else {
btc8723b2ant_sw_mechanism1(btcoexist, true, false, btc8723b2ant_sw_mechanism(btcoexist, true, false,
false, false); false, false);
} }
} else { } else {
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8723b2ant_sw_mechanism1(btcoexist, false, false, btc8723b2ant_sw_mechanism(btcoexist, false, false,
false, false); false, false);
} else { } else {
btc8723b2ant_sw_mechanism1(btcoexist, false, false, btc8723b2ant_sw_mechanism(btcoexist, false, false,
false, false); false, false);
} }
} }
...@@ -1743,29 +1748,28 @@ static void btc8723b2ant_action_a2dp_pan_hs(struct btc_coexist *btcoexist) ...@@ -1743,29 +1748,28 @@ static void btc8723b2ant_action_a2dp_pan_hs(struct btc_coexist *btcoexist)
btc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6); btc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
btc8723b_coex_tbl_type(btcoexist, NORMAL_EXEC, 7); btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 7);
btc8723b2ant_tdma_duration_adjust(btcoexist, false, true, 2); btc8723b2ant_tdma_duration_adjust(btcoexist, false, true, 2);
/* sw mechanism */ /* sw mechanism */
btcoexist->btc_get(btcoexist, btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
BTC_GET_U4_WIFI_BW, &wifi_bw);
if (BTC_WIFI_BW_HT40 == wifi_bw) { if (BTC_WIFI_BW_HT40 == wifi_bw) {
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8723b2ant_sw_mechanism1(btcoexist, true, false, btc8723b2ant_sw_mechanism(btcoexist, true, false,
false, false); false, false);
} else { } else {
btc8723b2ant_sw_mechanism1(btcoexist, true, false, btc8723b2ant_sw_mechanism(btcoexist, true, false,
false, false); false, false);
} }
} else { } else {
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8723b2ant_sw_mechanism1(btcoexist, false, false, btc8723b2ant_sw_mechanism(btcoexist, false, false,
false, false); false, false);
} else { } else {
btc8723b2ant_sw_mechanism1(btcoexist, false, false, btc8723b2ant_sw_mechanism(btcoexist, false, false,
false, false); false, false);
} }
} }
...@@ -1789,7 +1793,7 @@ static void btc8723b2ant_action_pan_edr(struct btc_coexist *btcoexist) ...@@ -1789,7 +1793,7 @@ static void btc8723b2ant_action_pan_edr(struct btc_coexist *btcoexist)
else else
btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0); btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0);
btc8723b_coex_tbl_type(btcoexist, NORMAL_EXEC, 10); btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 10);
if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) || if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||
(bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) (bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH))
...@@ -1802,25 +1806,25 @@ static void btc8723b2ant_action_pan_edr(struct btc_coexist *btcoexist) ...@@ -1802,25 +1806,25 @@ static void btc8723b2ant_action_pan_edr(struct btc_coexist *btcoexist)
if (BTC_WIFI_BW_HT40 == wifi_bw) { if (BTC_WIFI_BW_HT40 == wifi_bw) {
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8723b2ant_sw_mechanism1(btcoexist, true, false, btc8723b2ant_sw_mechanism(btcoexist, true, false,
false, false); false, false);
} else { } else {
btc8723b2ant_sw_mechanism1(btcoexist, true, false, btc8723b2ant_sw_mechanism(btcoexist, true, false,
false, false); false, false);
} }
} else { } else {
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8723b2ant_sw_mechanism1(btcoexist, false, false, btc8723b2ant_sw_mechanism(btcoexist, false, false,
false, false); false, false);
} else { } else {
btc8723b2ant_sw_mechanism1(btcoexist, false, false, btc8723b2ant_sw_mechanism(btcoexist, false, false,
false, false); false, false);
} }
} }
} }
/*PAN(HS) only*/ /* PAN(HS) only */
static void btc8723b2ant_action_pan_hs(struct btc_coexist *btcoexist) static void btc8723b2ant_action_pan_hs(struct btc_coexist *btcoexist)
{ {
u8 wifi_rssi_state; u8 wifi_rssi_state;
...@@ -1839,33 +1843,32 @@ static void btc8723b2ant_action_pan_hs(struct btc_coexist *btcoexist) ...@@ -1839,33 +1843,32 @@ static void btc8723b2ant_action_pan_hs(struct btc_coexist *btcoexist)
else else
btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false); btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false);
btc8723b_coex_tbl_type(btcoexist, NORMAL_EXEC, 7); btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 7);
btc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1); btc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);
btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw); btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
if (BTC_WIFI_BW_HT40 == wifi_bw) { if (BTC_WIFI_BW_HT40 == wifi_bw) {
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8723b2ant_sw_mechanism1(btcoexist, true, false, btc8723b2ant_sw_mechanism(btcoexist, true, false,
false, false); false, false);
} else { } else {
btc8723b2ant_sw_mechanism1(btcoexist, true, false, btc8723b2ant_sw_mechanism(btcoexist, true, false,
false, false); false, false);
} }
} else { } else {
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8723b2ant_sw_mechanism1(btcoexist, false, false, btc8723b2ant_sw_mechanism(btcoexist, false, false,
false, false); false, false);
} else { } else {
btc8723b2ant_sw_mechanism1(btcoexist, false, false, btc8723b2ant_sw_mechanism(btcoexist, false, false,
false, false); false, false);
} }
} }
} }
/*PAN(EDR)+A2DP*/ /* PAN(EDR) + A2DP */
static void btc8723b2ant_action_pan_edr_a2dp(struct btc_coexist *btcoexist) static void btc8723b2ant_action_pan_edr_a2dp(struct btc_coexist *btcoexist)
{ {
u8 wifi_rssi_state, bt_rssi_state; u8 wifi_rssi_state, bt_rssi_state;
...@@ -1888,7 +1891,7 @@ static void btc8723b2ant_action_pan_edr_a2dp(struct btc_coexist *btcoexist) ...@@ -1888,7 +1891,7 @@ static void btc8723b2ant_action_pan_edr_a2dp(struct btc_coexist *btcoexist)
if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) || if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||
(bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8723b_coex_tbl_type(btcoexist, NORMAL_EXEC, 12); btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 12);
if (BTC_WIFI_BW_HT40 == wifi_bw) if (BTC_WIFI_BW_HT40 == wifi_bw)
btc8723b2ant_tdma_duration_adjust(btcoexist, false, btc8723b2ant_tdma_duration_adjust(btcoexist, false,
true, 3); true, 3);
...@@ -1896,7 +1899,7 @@ static void btc8723b2ant_action_pan_edr_a2dp(struct btc_coexist *btcoexist) ...@@ -1896,7 +1899,7 @@ static void btc8723b2ant_action_pan_edr_a2dp(struct btc_coexist *btcoexist)
btc8723b2ant_tdma_duration_adjust(btcoexist, false, btc8723b2ant_tdma_duration_adjust(btcoexist, false,
false, 3); false, 3);
} else { } else {
btc8723b_coex_tbl_type(btcoexist, NORMAL_EXEC, 7); btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 7);
btc8723b2ant_tdma_duration_adjust(btcoexist, false, true, 3); btc8723b2ant_tdma_duration_adjust(btcoexist, false, true, 3);
} }
...@@ -1904,19 +1907,19 @@ static void btc8723b2ant_action_pan_edr_a2dp(struct btc_coexist *btcoexist) ...@@ -1904,19 +1907,19 @@ static void btc8723b2ant_action_pan_edr_a2dp(struct btc_coexist *btcoexist)
if (BTC_WIFI_BW_HT40 == wifi_bw) { if (BTC_WIFI_BW_HT40 == wifi_bw) {
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8723b2ant_sw_mechanism1(btcoexist, true, false, btc8723b2ant_sw_mechanism(btcoexist, true, false,
false, false); false, false);
} else { } else {
btc8723b2ant_sw_mechanism1(btcoexist, true, false, btc8723b2ant_sw_mechanism(btcoexist, true, false,
false, false); false, false);
} }
} else { } else {
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8723b2ant_sw_mechanism1(btcoexist, false, false, btc8723b2ant_sw_mechanism(btcoexist, false, false,
false, false); false, false);
} else { } else {
btc8723b2ant_sw_mechanism1(btcoexist, false, false, btc8723b2ant_sw_mechanism(btcoexist, false, false,
false, false); false, false);
} }
} }
...@@ -1942,20 +1945,22 @@ static void btc8723b2ant_action_pan_edr_hid(struct btc_coexist *btcoexist) ...@@ -1942,20 +1945,22 @@ static void btc8723b2ant_action_pan_edr_hid(struct btc_coexist *btcoexist)
if (BTC_WIFI_BW_HT40 == wifi_bw) { if (BTC_WIFI_BW_HT40 == wifi_bw) {
btc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, btc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC,
3); 3);
btc8723b_coex_tbl_type(btcoexist, NORMAL_EXEC, 11); btc8723b2ant_coex_table_with_type(btcoexist,
NORMAL_EXEC, 11);
btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1,
0xfffff, 0x780); 0xfffff, 0x780);
} else { } else {
btc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, btc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC,
6); 6);
btc8723b_coex_tbl_type(btcoexist, NORMAL_EXEC, 7); btc8723b2ant_coex_table_with_type(btcoexist,
NORMAL_EXEC, 7);
btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1,
0xfffff, 0x0); 0xfffff, 0x0);
} }
btc8723b2ant_tdma_duration_adjust(btcoexist, true, false, 2); btc8723b2ant_tdma_duration_adjust(btcoexist, true, false, 2);
} else { } else {
btc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6); btc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
btc8723b_coex_tbl_type(btcoexist, NORMAL_EXEC, 11); btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 11);
btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff, btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff,
0x0); 0x0);
btc8723b2ant_tdma_duration_adjust(btcoexist, true, true, 2); btc8723b2ant_tdma_duration_adjust(btcoexist, true, true, 2);
...@@ -1965,25 +1970,25 @@ static void btc8723b2ant_action_pan_edr_hid(struct btc_coexist *btcoexist) ...@@ -1965,25 +1970,25 @@ static void btc8723b2ant_action_pan_edr_hid(struct btc_coexist *btcoexist)
if (BTC_WIFI_BW_HT40 == wifi_bw) { if (BTC_WIFI_BW_HT40 == wifi_bw) {
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8723b2ant_sw_mechanism1(btcoexist, true, true, btc8723b2ant_sw_mechanism(btcoexist, true, true,
false, false); false, false);
} else { } else {
btc8723b2ant_sw_mechanism1(btcoexist, true, true, btc8723b2ant_sw_mechanism(btcoexist, true, true,
false, false); false, false);
} }
} else { } else {
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8723b2ant_sw_mechanism1(btcoexist, false, true, btc8723b2ant_sw_mechanism(btcoexist, false, true,
false, false); false, false);
} else { } else {
btc8723b2ant_sw_mechanism1(btcoexist, false, true, btc8723b2ant_sw_mechanism(btcoexist, false, true,
false, false); false, false);
} }
} }
} }
/* HID+A2DP+PAN(EDR) */ /* HID + A2DP + PAN(EDR) */
static void btc8723b2ant_action_hid_a2dp_pan_edr(struct btc_coexist *btcoexist) static void btc8723b2ant_action_hid_a2dp_pan_edr(struct btc_coexist *btcoexist)
{ {
u8 wifi_rssi_state, bt_rssi_state; u8 wifi_rssi_state, bt_rssi_state;
...@@ -2004,7 +2009,7 @@ static void btc8723b2ant_action_hid_a2dp_pan_edr(struct btc_coexist *btcoexist) ...@@ -2004,7 +2009,7 @@ static void btc8723b2ant_action_hid_a2dp_pan_edr(struct btc_coexist *btcoexist)
btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw); btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
btc8723b_coex_tbl_type(btcoexist, NORMAL_EXEC, 7); btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 7);
if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) || if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||
(bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
...@@ -2022,19 +2027,19 @@ static void btc8723b2ant_action_hid_a2dp_pan_edr(struct btc_coexist *btcoexist) ...@@ -2022,19 +2027,19 @@ static void btc8723b2ant_action_hid_a2dp_pan_edr(struct btc_coexist *btcoexist)
if (BTC_WIFI_BW_HT40 == wifi_bw) { if (BTC_WIFI_BW_HT40 == wifi_bw) {
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8723b2ant_sw_mechanism1(btcoexist, true, true, btc8723b2ant_sw_mechanism(btcoexist, true, true,
false, false); false, false);
} else { } else {
btc8723b2ant_sw_mechanism1(btcoexist, true, true, btc8723b2ant_sw_mechanism(btcoexist, true, true,
false, false); false, false);
} }
} else { } else {
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8723b2ant_sw_mechanism1(btcoexist, false, true, btc8723b2ant_sw_mechanism(btcoexist, false, true,
false, false); false, false);
} else { } else {
btc8723b2ant_sw_mechanism1(btcoexist, false, true, btc8723b2ant_sw_mechanism(btcoexist, false, true,
false, false); false, false);
} }
} }
...@@ -2055,7 +2060,7 @@ static void btc8723b2ant_action_hid_a2dp(struct btc_coexist *btcoexist) ...@@ -2055,7 +2060,7 @@ static void btc8723b2ant_action_hid_a2dp(struct btc_coexist *btcoexist)
btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw); btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
btc8723b_coex_tbl_type(btcoexist, NORMAL_EXEC, 7); btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 7);
if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) || if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||
(bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) (bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH))
...@@ -2067,19 +2072,19 @@ static void btc8723b2ant_action_hid_a2dp(struct btc_coexist *btcoexist) ...@@ -2067,19 +2072,19 @@ static void btc8723b2ant_action_hid_a2dp(struct btc_coexist *btcoexist)
if (BTC_WIFI_BW_HT40 == wifi_bw) { if (BTC_WIFI_BW_HT40 == wifi_bw) {
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8723b2ant_sw_mechanism1(btcoexist, true, true, btc8723b2ant_sw_mechanism(btcoexist, true, true,
false, false); false, false);
} else { } else {
btc8723b2ant_sw_mechanism1(btcoexist, true, true, btc8723b2ant_sw_mechanism(btcoexist, true, true,
false, false); false, false);
} }
} else { } else {
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8723b2ant_sw_mechanism1(btcoexist, false, true, btc8723b2ant_sw_mechanism(btcoexist, false, true,
false, false); false, false);
} else { } else {
btc8723b2ant_sw_mechanism1(btcoexist, false, true, btc8723b2ant_sw_mechanism(btcoexist, false, true,
false, false); false, false);
} }
} }
...@@ -2209,10 +2214,7 @@ static void btc8723b2ant_wifioff_hwcfg(struct btc_coexist *btcoexist) ...@@ -2209,10 +2214,7 @@ static void btc8723b2ant_wifioff_hwcfg(struct btc_coexist *btcoexist)
} }
/********************************************************************* /*********************************************************************
* work around function start with wa_btc8723b2ant_ * extern function start with ex_btc8723b2ant_
*********************************************************************/
/*********************************************************************
* extern function start with EXbtc8723b2ant_
*********************************************************************/ *********************************************************************/
void ex_btc8723b2ant_init_hwconfig(struct btc_coexist *btcoexist) void ex_btc8723b2ant_init_hwconfig(struct btc_coexist *btcoexist)
{ {
...@@ -2230,14 +2232,14 @@ void ex_btc8723b2ant_init_hwconfig(struct btc_coexist *btcoexist) ...@@ -2230,14 +2232,14 @@ void ex_btc8723b2ant_init_hwconfig(struct btc_coexist *btcoexist)
u8tmp |= 0x5; u8tmp |= 0x5;
btcoexist->btc_write_1byte(btcoexist, 0x790, u8tmp); btcoexist->btc_write_1byte(btcoexist, 0x790, u8tmp);
/*Antenna config */ /* Antenna config */
btc8723b2ant_set_ant_path(btcoexist, BTC_ANT_WIFI_AT_MAIN, btc8723b2ant_set_ant_path(btcoexist, BTC_ANT_WIFI_AT_MAIN,
true, false); true, false);
/* PTA parameter */ /* PTA parameter */
btc8723b_coex_tbl_type(btcoexist, FORCE_EXEC, 0); btc8723b2ant_coex_table_with_type(btcoexist, FORCE_EXEC, 0);
/* Enable counter statistics */ /* Enable counter statistics */
/*0x76e[3] =1, WLAN_Act control by PTA*/ /* 0x76e[3] = 1, WLAN_ACT controlled by PTA */
btcoexist->btc_write_1byte(btcoexist, 0x76e, 0xc); btcoexist->btc_write_1byte(btcoexist, 0x76e, 0xc);
btcoexist->btc_write_1byte(btcoexist, 0x778, 0x3); btcoexist->btc_write_1byte(btcoexist, 0x778, 0x3);
btcoexist->btc_write_1byte_bitmask(btcoexist, 0x40, 0x20, 0x1); btcoexist->btc_write_1byte_bitmask(btcoexist, 0x40, 0x20, 0x1);
...@@ -2615,7 +2617,7 @@ void ex_btc8723b2ant_bt_info_notify(struct btc_coexist *btcoexist, ...@@ -2615,7 +2617,7 @@ void ex_btc8723b2ant_bt_info_notify(struct btc_coexist *btcoexist,
coex_sta->bt_info_c2h[rsp_source][i] = tmpbuf[i]; coex_sta->bt_info_c2h[rsp_source][i] = tmpbuf[i];
if (i == 1) if (i == 1)
bt_info = tmpbuf[i]; bt_info = tmpbuf[i];
if (i == length-1) if (i == length - 1)
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"0x%02x]\n", tmpbuf[i]); "0x%02x]\n", tmpbuf[i]);
else else
...@@ -2630,7 +2632,7 @@ void ex_btc8723b2ant_bt_info_notify(struct btc_coexist *btcoexist, ...@@ -2630,7 +2632,7 @@ void ex_btc8723b2ant_bt_info_notify(struct btc_coexist *btcoexist,
} }
if (BT_INFO_SRC_8723B_2ANT_WIFI_FW != rsp_source) { if (BT_INFO_SRC_8723B_2ANT_WIFI_FW != rsp_source) {
coex_sta->bt_retry_cnt = /* [3:0]*/ coex_sta->bt_retry_cnt =
coex_sta->bt_info_c2h[rsp_source][2] & 0xf; coex_sta->bt_info_c2h[rsp_source][2] & 0xf;
coex_sta->bt_rssi = coex_sta->bt_rssi =
...@@ -2640,7 +2642,7 @@ void ex_btc8723b2ant_bt_info_notify(struct btc_coexist *btcoexist, ...@@ -2640,7 +2642,7 @@ void ex_btc8723b2ant_bt_info_notify(struct btc_coexist *btcoexist,
coex_sta->bt_info_c2h[rsp_source][4]; coex_sta->bt_info_c2h[rsp_source][4];
/* Here we need to resend some wifi info to BT /* Here we need to resend some wifi info to BT
because bt is reset and loss of the info. * because BT is reset and loss of the info.
*/ */
if ((coex_sta->bt_info_ext & BIT1)) { if ((coex_sta->bt_info_ext & BIT1)) {
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
...@@ -2675,20 +2677,21 @@ void ex_btc8723b2ant_bt_info_notify(struct btc_coexist *btcoexist, ...@@ -2675,20 +2677,21 @@ void ex_btc8723b2ant_bt_info_notify(struct btc_coexist *btcoexist,
#endif #endif
} }
/* check BIT2 first ==> check if bt is under inquiry or page scan*/ /* check BIT2 first ==> check if bt is under inquiry or page scan */
if (bt_info & BT_INFO_8723B_2ANT_B_INQ_PAGE) if (bt_info & BT_INFO_8723B_2ANT_B_INQ_PAGE)
coex_sta->c2h_bt_inquiry_page = true; coex_sta->c2h_bt_inquiry_page = true;
else else
coex_sta->c2h_bt_inquiry_page = false; coex_sta->c2h_bt_inquiry_page = false;
/* set link exist status*/
if (!(bt_info & BT_INFO_8723B_2ANT_B_CONNECTION)) { if (!(bt_info & BT_INFO_8723B_2ANT_B_CONNECTION)) {
/* set link exist status */
coex_sta->bt_link_exist = false; coex_sta->bt_link_exist = false;
coex_sta->pan_exist = false; coex_sta->pan_exist = false;
coex_sta->a2dp_exist = false; coex_sta->a2dp_exist = false;
coex_sta->hid_exist = false; coex_sta->hid_exist = false;
coex_sta->sco_exist = false; coex_sta->sco_exist = false;
} else { /* connection exists */ } else {
/* connection exists */
coex_sta->bt_link_exist = true; coex_sta->bt_link_exist = true;
if (bt_info & BT_INFO_8723B_2ANT_B_FTP) if (bt_info & BT_INFO_8723B_2ANT_B_FTP)
coex_sta->pan_exist = true; coex_sta->pan_exist = true;
......
...@@ -148,6 +148,7 @@ struct coex_sta_8723b_2ant { ...@@ -148,6 +148,7 @@ struct coex_sta_8723b_2ant {
bool c2h_bt_inquiry_page; bool c2h_bt_inquiry_page;
u8 bt_retry_cnt; u8 bt_retry_cnt;
u8 bt_info_ext; u8 bt_info_ext;
u32 pop_event_cnt;
}; };
/********************************************************************* /*********************************************************************
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
* *
*****************************************************************************/ *****************************************************************************/
/*============================================================ /**************************************************************
* Description: * Description:
* *
* This file is for RTL8821A Co-exist mechanism * This file is for RTL8821A Co-exist mechanism
...@@ -31,17 +31,15 @@ ...@@ -31,17 +31,15 @@
* History * History
* 2012/11/15 Cosa first check in. * 2012/11/15 Cosa first check in.
* *
*============================================================ **************************************************************/
*/
/*============================================================ /**************************************************************
* include files * include files
*============================================================ **************************************************************/
*/
#include "halbt_precomp.h" #include "halbt_precomp.h"
/*============================================================ /**************************************************************
* Global variables, these are static variables * Global variables, these are static variables
*============================================================ **************************************************************/
*/
static struct coex_dm_8821a_1ant glcoex_dm_8821a_1ant; static struct coex_dm_8821a_1ant glcoex_dm_8821a_1ant;
static struct coex_dm_8821a_1ant *coex_dm = &glcoex_dm_8821a_1ant; static struct coex_dm_8821a_1ant *coex_dm = &glcoex_dm_8821a_1ant;
static struct coex_sta_8821a_1ant glcoex_sta_8821a_1ant; static struct coex_sta_8821a_1ant glcoex_sta_8821a_1ant;
...@@ -56,13 +54,12 @@ static const char *const glbt_info_src_8821a_1ant[] = { ...@@ -56,13 +54,12 @@ static const char *const glbt_info_src_8821a_1ant[] = {
static u32 glcoex_ver_date_8821a_1ant = 20130816; static u32 glcoex_ver_date_8821a_1ant = 20130816;
static u32 glcoex_ver_8821a_1ant = 0x41; static u32 glcoex_ver_8821a_1ant = 0x41;
/*============================================================ /**************************************************************
* local function proto type if needed * local function proto type if needed
* *
* local function start with halbtc8821a1ant_ * local function start with btc8821a1ant_
*============================================================ **************************************************************/
*/ static u8 btc8821a1ant_bt_rssi_state(struct btc_coexist *btcoexist,
static u8 halbtc8821a1ant_bt_rssi_state(struct btc_coexist *btcoexist,
u8 level_num, u8 rssi_thresh, u8 level_num, u8 rssi_thresh,
u8 rssi_thresh1) u8 rssi_thresh1)
{ {
...@@ -150,7 +147,7 @@ static u8 halbtc8821a1ant_bt_rssi_state(struct btc_coexist *btcoexist, ...@@ -150,7 +147,7 @@ static u8 halbtc8821a1ant_bt_rssi_state(struct btc_coexist *btcoexist,
return bt_rssi_state; return bt_rssi_state;
} }
static u8 halbtc8821a1ant_WifiRssiState(struct btc_coexist *btcoexist, static u8 btc8821a1ant_wifi_rssi_state(struct btc_coexist *btcoexist,
u8 index, u8 level_num, u8 rssi_thresh, u8 index, u8 level_num, u8 rssi_thresh,
u8 rssi_thresh1) u8 rssi_thresh1)
{ {
...@@ -165,8 +162,8 @@ static u8 halbtc8821a1ant_WifiRssiState(struct btc_coexist *btcoexist, ...@@ -165,8 +162,8 @@ static u8 halbtc8821a1ant_WifiRssiState(struct btc_coexist *btcoexist,
BTC_RSSI_STATE_LOW) || BTC_RSSI_STATE_LOW) ||
(coex_sta->pre_wifi_rssi_state[index] == (coex_sta->pre_wifi_rssi_state[index] ==
BTC_RSSI_STATE_STAY_LOW)) { BTC_RSSI_STATE_STAY_LOW)) {
if (wifi_rssi >= if (wifi_rssi >= (rssi_thresh +
(rssi_thresh+BTC_RSSI_COEX_THRESH_TOL_8821A_1ANT)) { BTC_RSSI_COEX_THRESH_TOL_8821A_1ANT)) {
wifi_rssi_state = BTC_RSSI_STATE_HIGH; wifi_rssi_state = BTC_RSSI_STATE_HIGH;
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], wifi RSSI state switch to High\n"); "[BTCoex], wifi RSSI state switch to High\n");
...@@ -197,8 +194,8 @@ static u8 halbtc8821a1ant_WifiRssiState(struct btc_coexist *btcoexist, ...@@ -197,8 +194,8 @@ static u8 halbtc8821a1ant_WifiRssiState(struct btc_coexist *btcoexist,
BTC_RSSI_STATE_LOW) || BTC_RSSI_STATE_LOW) ||
(coex_sta->pre_wifi_rssi_state[index] == (coex_sta->pre_wifi_rssi_state[index] ==
BTC_RSSI_STATE_STAY_LOW)) { BTC_RSSI_STATE_STAY_LOW)) {
if (wifi_rssi >= if (wifi_rssi >= (rssi_thresh +
(rssi_thresh+BTC_RSSI_COEX_THRESH_TOL_8821A_1ANT)) { BTC_RSSI_COEX_THRESH_TOL_8821A_1ANT)) {
wifi_rssi_state = BTC_RSSI_STATE_MEDIUM; wifi_rssi_state = BTC_RSSI_STATE_MEDIUM;
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], wifi RSSI state switch to Medium\n"); "[BTCoex], wifi RSSI state switch to Medium\n");
...@@ -211,8 +208,7 @@ static u8 halbtc8821a1ant_WifiRssiState(struct btc_coexist *btcoexist, ...@@ -211,8 +208,7 @@ static u8 halbtc8821a1ant_WifiRssiState(struct btc_coexist *btcoexist,
BTC_RSSI_STATE_MEDIUM) || BTC_RSSI_STATE_MEDIUM) ||
(coex_sta->pre_wifi_rssi_state[index] == (coex_sta->pre_wifi_rssi_state[index] ==
BTC_RSSI_STATE_STAY_MEDIUM)) { BTC_RSSI_STATE_STAY_MEDIUM)) {
if (wifi_rssi >= if (wifi_rssi >= (rssi_thresh1 +
(rssi_thresh1 +
BTC_RSSI_COEX_THRESH_TOL_8821A_1ANT)) { BTC_RSSI_COEX_THRESH_TOL_8821A_1ANT)) {
wifi_rssi_state = BTC_RSSI_STATE_HIGH; wifi_rssi_state = BTC_RSSI_STATE_HIGH;
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
...@@ -243,14 +239,14 @@ static u8 halbtc8821a1ant_WifiRssiState(struct btc_coexist *btcoexist, ...@@ -243,14 +239,14 @@ static u8 halbtc8821a1ant_WifiRssiState(struct btc_coexist *btcoexist,
return wifi_rssi_state; return wifi_rssi_state;
} }
static void halbtc8821a1ant_update_ra_mask(struct btc_coexist *btcoexist, static void btc8821a1ant_update_ra_mask(struct btc_coexist *btcoexist,
bool force_exec, u32 dis_rate_mask) bool force_exec, u32 dis_rate_mask)
{ {
coex_dm->cur_ra_mask = dis_rate_mask; coex_dm->cur_ra_mask = dis_rate_mask;
if (force_exec || if (force_exec ||
(coex_dm->pre_ra_mask != coex_dm->cur_ra_mask)) { (coex_dm->pre_ra_mask != coex_dm->cur_ra_mask)) {
btcoexist->btc_set(btcoexist, BTC_SET_ACT_UPDATE_ra_mask, btcoexist->btc_set(btcoexist, BTC_SET_ACT_UPDATE_RAMASK,
&coex_dm->cur_ra_mask); &coex_dm->cur_ra_mask);
} }
coex_dm->pre_ra_mask = coex_dm->cur_ra_mask; coex_dm->pre_ra_mask = coex_dm->cur_ra_mask;
...@@ -266,7 +262,7 @@ static void btc8821a1ant_auto_rate_fb_retry(struct btc_coexist *btcoexist, ...@@ -266,7 +262,7 @@ static void btc8821a1ant_auto_rate_fb_retry(struct btc_coexist *btcoexist,
if (force_exec || if (force_exec ||
(coex_dm->pre_arfr_type != coex_dm->cur_arfr_type)) { (coex_dm->pre_arfr_type != coex_dm->cur_arfr_type)) {
switch (coex_dm->cur_arfr_type) { switch (coex_dm->cur_arfr_type) {
case 0: /* normal mode*/ case 0: /* normal mode */
btcoexist->btc_write_4byte(btcoexist, 0x430, btcoexist->btc_write_4byte(btcoexist, 0x430,
coex_dm->backup_arfr_cnt1); coex_dm->backup_arfr_cnt1);
btcoexist->btc_write_4byte(btcoexist, 0x434, btcoexist->btc_write_4byte(btcoexist, 0x434,
...@@ -296,7 +292,7 @@ static void btc8821a1ant_auto_rate_fb_retry(struct btc_coexist *btcoexist, ...@@ -296,7 +292,7 @@ static void btc8821a1ant_auto_rate_fb_retry(struct btc_coexist *btcoexist,
coex_dm->pre_arfr_type = coex_dm->cur_arfr_type; coex_dm->pre_arfr_type = coex_dm->cur_arfr_type;
} }
static void halbtc8821a1ant_retry_limit(struct btc_coexist *btcoexist, static void btc8821a1ant_retry_limit(struct btc_coexist *btcoexist,
bool force_exec, u8 type) bool force_exec, u8 type)
{ {
coex_dm->cur_retry_limit_type = type; coex_dm->cur_retry_limit_type = type;
...@@ -304,11 +300,11 @@ static void halbtc8821a1ant_retry_limit(struct btc_coexist *btcoexist, ...@@ -304,11 +300,11 @@ static void halbtc8821a1ant_retry_limit(struct btc_coexist *btcoexist,
if (force_exec || if (force_exec ||
(coex_dm->pre_retry_limit_type != coex_dm->cur_retry_limit_type)) { (coex_dm->pre_retry_limit_type != coex_dm->cur_retry_limit_type)) {
switch (coex_dm->cur_retry_limit_type) { switch (coex_dm->cur_retry_limit_type) {
case 0: /* normal mode*/ case 0: /* normal mode */
btcoexist->btc_write_2byte(btcoexist, 0x42a, btcoexist->btc_write_2byte(btcoexist, 0x42a,
coex_dm->backup_retry_limit); coex_dm->backup_retry_limit);
break; break;
case 1: /* retry limit = 8*/ case 1: /* retry limit = 8 */
btcoexist->btc_write_2byte(btcoexist, 0x42a, 0x0808); btcoexist->btc_write_2byte(btcoexist, 0x42a, 0x0808);
break; break;
default: default:
...@@ -318,7 +314,7 @@ static void halbtc8821a1ant_retry_limit(struct btc_coexist *btcoexist, ...@@ -318,7 +314,7 @@ static void halbtc8821a1ant_retry_limit(struct btc_coexist *btcoexist,
coex_dm->pre_retry_limit_type = coex_dm->cur_retry_limit_type; coex_dm->pre_retry_limit_type = coex_dm->cur_retry_limit_type;
} }
static void halbtc8821a1ant_ampdu_max_time(struct btc_coexist *btcoexist, static void btc8821a1ant_ampdu_max_time(struct btc_coexist *btcoexist,
bool force_exec, u8 type) bool force_exec, u8 type)
{ {
coex_dm->cur_ampdu_time_type = type; coex_dm->cur_ampdu_time_type = type;
...@@ -326,11 +322,11 @@ static void halbtc8821a1ant_ampdu_max_time(struct btc_coexist *btcoexist, ...@@ -326,11 +322,11 @@ static void halbtc8821a1ant_ampdu_max_time(struct btc_coexist *btcoexist,
if (force_exec || if (force_exec ||
(coex_dm->pre_ampdu_time_type != coex_dm->cur_ampdu_time_type)) { (coex_dm->pre_ampdu_time_type != coex_dm->cur_ampdu_time_type)) {
switch (coex_dm->cur_ampdu_time_type) { switch (coex_dm->cur_ampdu_time_type) {
case 0: /* normal mode*/ case 0: /* normal mode */
btcoexist->btc_write_1byte(btcoexist, 0x456, btcoexist->btc_write_1byte(btcoexist, 0x456,
coex_dm->backup_ampdu_max_time); coex_dm->backup_ampdu_max_time);
break; break;
case 1: /* AMPDU timw = 0x38 * 32us*/ case 1: /* AMPDU time = 0x38 * 32us */
btcoexist->btc_write_1byte(btcoexist, 0x456, 0x38); btcoexist->btc_write_1byte(btcoexist, 0x456, 0x38);
break; break;
default: default:
...@@ -341,21 +337,21 @@ static void halbtc8821a1ant_ampdu_max_time(struct btc_coexist *btcoexist, ...@@ -341,21 +337,21 @@ static void halbtc8821a1ant_ampdu_max_time(struct btc_coexist *btcoexist,
coex_dm->pre_ampdu_time_type = coex_dm->cur_ampdu_time_type; coex_dm->pre_ampdu_time_type = coex_dm->cur_ampdu_time_type;
} }
static void halbtc8821a1ant_limited_tx(struct btc_coexist *btcoexist, static void btc8821a1ant_limited_tx(struct btc_coexist *btcoexist,
bool force_exec, u8 ra_mask_type, bool force_exec, u8 ra_mask_type,
u8 arfr_type, u8 retry_limit_type, u8 arfr_type, u8 retry_limit_type,
u8 ampdu_time_type) u8 ampdu_time_type)
{ {
switch (ra_mask_type) { switch (ra_mask_type) {
case 0: /* normal mode*/ case 0: /* normal mode */
halbtc8821a1ant_update_ra_mask(btcoexist, force_exec, 0x0); btc8821a1ant_update_ra_mask(btcoexist, force_exec, 0x0);
break; break;
case 1: /* disable cck 1/2*/ case 1: /* disable cck 1/2 */
halbtc8821a1ant_update_ra_mask(btcoexist, force_exec, btc8821a1ant_update_ra_mask(btcoexist, force_exec,
0x00000003); 0x00000003);
break; break;
case 2: /* disable cck 1/2/5.5, ofdm 6/9/12/18/24, mcs 0/1/2/3/4*/ case 2: /* disable cck 1/2/5.5, ofdm 6/9/12/18/24, mcs 0/1/2/3/4 */
halbtc8821a1ant_update_ra_mask(btcoexist, force_exec, btc8821a1ant_update_ra_mask(btcoexist, force_exec,
0x0001f1f7); 0x0001f1f7);
break; break;
default: default:
...@@ -363,34 +359,31 @@ static void halbtc8821a1ant_limited_tx(struct btc_coexist *btcoexist, ...@@ -363,34 +359,31 @@ static void halbtc8821a1ant_limited_tx(struct btc_coexist *btcoexist,
} }
btc8821a1ant_auto_rate_fb_retry(btcoexist, force_exec, arfr_type); btc8821a1ant_auto_rate_fb_retry(btcoexist, force_exec, arfr_type);
halbtc8821a1ant_retry_limit(btcoexist, force_exec, retry_limit_type); btc8821a1ant_retry_limit(btcoexist, force_exec, retry_limit_type);
halbtc8821a1ant_ampdu_max_time(btcoexist, force_exec, ampdu_time_type); btc8821a1ant_ampdu_max_time(btcoexist, force_exec, ampdu_time_type);
} }
static void halbtc8821a1ant_limited_rx(struct btc_coexist *btcoexist, static void btc8821a1ant_limited_rx(struct btc_coexist *btcoexist,
bool force_exec, bool rej_ap_agg_pkt, bool force_exec, bool rej_ap_agg_pkt,
bool bt_ctrl_agg_buf_size, bool bt_ctrl_agg_buf_size, u8 agg_buf_size)
u8 agg_buf_size)
{ {
bool reject_rx_agg = rej_ap_agg_pkt; bool reject_rx_agg = rej_ap_agg_pkt;
bool bt_ctrl_rx_agg_size = bt_ctrl_agg_buf_size; bool bt_ctrl_rx_agg_size = bt_ctrl_agg_buf_size;
u8 rx_agg_size = agg_buf_size; u8 rx_agg_size = agg_buf_size;
/*============================================*/ /* Rx Aggregation related setting */
/* Rx Aggregation related setting*/
/*============================================*/
btcoexist->btc_set(btcoexist, btcoexist->btc_set(btcoexist,
BTC_SET_BL_TO_REJ_AP_AGG_PKT, &reject_rx_agg); BTC_SET_BL_TO_REJ_AP_AGG_PKT, &reject_rx_agg);
/* decide BT control aggregation buf size or not*/ /* decide BT control aggregation buf size or not */
btcoexist->btc_set(btcoexist, BTC_SET_BL_BT_CTRL_AGG_SIZE, btcoexist->btc_set(btcoexist, BTC_SET_BL_BT_CTRL_AGG_SIZE,
&bt_ctrl_rx_agg_size); &bt_ctrl_rx_agg_size);
/* aggregation buf size, only work when BT control Rx agg size.*/ /* aggregation buf size, only work when BT control Rx agg size */
btcoexist->btc_set(btcoexist, BTC_SET_U1_AGG_BUF_SIZE, &rx_agg_size); btcoexist->btc_set(btcoexist, BTC_SET_U1_AGG_BUF_SIZE, &rx_agg_size);
/* real update aggregation setting*/ /* real update aggregation setting */
btcoexist->btc_set(btcoexist, BTC_SET_ACT_AGGREGATE_CTRL, NULL); btcoexist->btc_set(btcoexist, BTC_SET_ACT_AGGREGATE_CTRL, NULL);
} }
static void halbtc8821a1ant_monitor_bt_ctr(struct btc_coexist *btcoexist) static void btc8821a1ant_monitor_bt_ctr(struct btc_coexist *btcoexist)
{ {
u32 reg_hp_tx_rx, reg_lp_tx_rx, u4_tmp; u32 reg_hp_tx_rx, reg_lp_tx_rx, u4_tmp;
u32 reg_hp_tx = 0, reg_hp_rx = 0, reg_lp_tx = 0, reg_lp_rx = 0; u32 reg_hp_tx = 0, reg_hp_rx = 0, reg_lp_tx = 0, reg_lp_rx = 0;
...@@ -400,29 +393,29 @@ static void halbtc8821a1ant_monitor_bt_ctr(struct btc_coexist *btcoexist) ...@@ -400,29 +393,29 @@ static void halbtc8821a1ant_monitor_bt_ctr(struct btc_coexist *btcoexist)
u4_tmp = btcoexist->btc_read_4byte(btcoexist, reg_hp_tx_rx); u4_tmp = btcoexist->btc_read_4byte(btcoexist, reg_hp_tx_rx);
reg_hp_tx = u4_tmp & MASKLWORD; reg_hp_tx = u4_tmp & MASKLWORD;
reg_hp_rx = (u4_tmp & MASKHWORD)>>16; reg_hp_rx = (u4_tmp & MASKHWORD) >> 16;
u4_tmp = btcoexist->btc_read_4byte(btcoexist, reg_lp_tx_rx); u4_tmp = btcoexist->btc_read_4byte(btcoexist, reg_lp_tx_rx);
reg_lp_tx = u4_tmp & MASKLWORD; reg_lp_tx = u4_tmp & MASKLWORD;
reg_lp_rx = (u4_tmp & MASKHWORD)>>16; reg_lp_rx = (u4_tmp & MASKHWORD) >> 16;
coex_sta->high_priority_tx = reg_hp_tx; coex_sta->high_priority_tx = reg_hp_tx;
coex_sta->high_priority_rx = reg_hp_rx; coex_sta->high_priority_rx = reg_hp_rx;
coex_sta->low_priority_tx = reg_lp_tx; coex_sta->low_priority_tx = reg_lp_tx;
coex_sta->low_priority_rx = reg_lp_rx; coex_sta->low_priority_rx = reg_lp_rx;
/* reset counter*/ /* reset counter */
btcoexist->btc_write_1byte(btcoexist, 0x76e, 0xc); btcoexist->btc_write_1byte(btcoexist, 0x76e, 0xc);
} }
static void halbtc8821a1ant_query_bt_info(struct btc_coexist *btcoexist) static void btc8821a1ant_query_bt_info(struct btc_coexist *btcoexist)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
u8 h2c_parameter[1] = {0}; u8 h2c_parameter[1] = {0};
coex_sta->c2h_bt_info_req_sent = true; coex_sta->c2h_bt_info_req_sent = true;
h2c_parameter[0] |= BIT0; /* trigger*/ h2c_parameter[0] |= BIT0; /* trigger */
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Query Bt Info, FW write 0x61 = 0x%x\n", "[BTCoex], Query Bt Info, FW write 0x61 = 0x%x\n",
...@@ -431,7 +424,7 @@ static void halbtc8821a1ant_query_bt_info(struct btc_coexist *btcoexist) ...@@ -431,7 +424,7 @@ static void halbtc8821a1ant_query_bt_info(struct btc_coexist *btcoexist)
btcoexist->btc_fill_h2c(btcoexist, 0x61, 1, h2c_parameter); btcoexist->btc_fill_h2c(btcoexist, 0x61, 1, h2c_parameter);
} }
static void halbtc8821a1ant_update_bt_link_info(struct btc_coexist *btcoexist) static void btc8821a1ant_update_bt_link_info(struct btc_coexist *btcoexist)
{ {
struct btc_bt_link_info *bt_link_info = &btcoexist->bt_link_info; struct btc_bt_link_info *bt_link_info = &btcoexist->bt_link_info;
bool bt_hs_on = false; bool bt_hs_on = false;
...@@ -444,13 +437,13 @@ static void halbtc8821a1ant_update_bt_link_info(struct btc_coexist *btcoexist) ...@@ -444,13 +437,13 @@ static void halbtc8821a1ant_update_bt_link_info(struct btc_coexist *btcoexist)
bt_link_info->pan_exist = coex_sta->pan_exist; bt_link_info->pan_exist = coex_sta->pan_exist;
bt_link_info->hid_exist = coex_sta->hid_exist; bt_link_info->hid_exist = coex_sta->hid_exist;
/* work around for HS mode.*/ /* work around for HS mode */
if (bt_hs_on) { if (bt_hs_on) {
bt_link_info->pan_exist = true; bt_link_info->pan_exist = true;
bt_link_info->bt_link_exist = true; bt_link_info->bt_link_exist = true;
} }
/* check if Sco only*/ /* check if Sco only */
if (bt_link_info->sco_exist && if (bt_link_info->sco_exist &&
!bt_link_info->a2dp_exist && !bt_link_info->a2dp_exist &&
!bt_link_info->pan_exist && !bt_link_info->pan_exist &&
...@@ -459,7 +452,7 @@ static void halbtc8821a1ant_update_bt_link_info(struct btc_coexist *btcoexist) ...@@ -459,7 +452,7 @@ static void halbtc8821a1ant_update_bt_link_info(struct btc_coexist *btcoexist)
else else
bt_link_info->sco_only = false; bt_link_info->sco_only = false;
/* check if A2dp only*/ /* check if A2dp only */
if (!bt_link_info->sco_exist && if (!bt_link_info->sco_exist &&
bt_link_info->a2dp_exist && bt_link_info->a2dp_exist &&
!bt_link_info->pan_exist && !bt_link_info->pan_exist &&
...@@ -468,7 +461,7 @@ static void halbtc8821a1ant_update_bt_link_info(struct btc_coexist *btcoexist) ...@@ -468,7 +461,7 @@ static void halbtc8821a1ant_update_bt_link_info(struct btc_coexist *btcoexist)
else else
bt_link_info->a2dp_only = false; bt_link_info->a2dp_only = false;
/* check if Pan only*/ /* check if Pan only */
if (!bt_link_info->sco_exist && if (!bt_link_info->sco_exist &&
!bt_link_info->a2dp_exist && !bt_link_info->a2dp_exist &&
bt_link_info->pan_exist && bt_link_info->pan_exist &&
...@@ -477,7 +470,7 @@ static void halbtc8821a1ant_update_bt_link_info(struct btc_coexist *btcoexist) ...@@ -477,7 +470,7 @@ static void halbtc8821a1ant_update_bt_link_info(struct btc_coexist *btcoexist)
else else
bt_link_info->pan_only = false; bt_link_info->pan_only = false;
/* check if Hid only*/ /* check if Hid only */
if (!bt_link_info->sco_exist && if (!bt_link_info->sco_exist &&
!bt_link_info->a2dp_exist && !bt_link_info->a2dp_exist &&
!bt_link_info->pan_exist && !bt_link_info->pan_exist &&
...@@ -487,7 +480,7 @@ static void halbtc8821a1ant_update_bt_link_info(struct btc_coexist *btcoexist) ...@@ -487,7 +480,7 @@ static void halbtc8821a1ant_update_bt_link_info(struct btc_coexist *btcoexist)
bt_link_info->hid_only = false; bt_link_info->hid_only = false;
} }
static u8 halbtc8821a1ant_action_algorithm(struct btc_coexist *btcoexist) static u8 btc8821a1ant_action_algorithm(struct btc_coexist *btcoexist)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
struct btc_bt_link_info *bt_link_info = &btcoexist->bt_link_info; struct btc_bt_link_info *bt_link_info = &btcoexist->bt_link_info;
...@@ -670,7 +663,7 @@ static u8 halbtc8821a1ant_action_algorithm(struct btc_coexist *btcoexist) ...@@ -670,7 +663,7 @@ static u8 halbtc8821a1ant_action_algorithm(struct btc_coexist *btcoexist)
return algorithm; return algorithm;
} }
static void btc8821a1ant_set_sw_pen_tx_rate(struct btc_coexist *btcoexist, static void btc8821a1ant_set_sw_penalty_tx_rate(struct btc_coexist *btcoexist,
bool low_penalty_ra) bool low_penalty_ra)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
...@@ -680,11 +673,11 @@ static void btc8821a1ant_set_sw_pen_tx_rate(struct btc_coexist *btcoexist, ...@@ -680,11 +673,11 @@ static void btc8821a1ant_set_sw_pen_tx_rate(struct btc_coexist *btcoexist,
if (low_penalty_ra) { if (low_penalty_ra) {
h2c_parameter[1] |= BIT0; h2c_parameter[1] |= BIT0;
/*normal rate except MCS7/6/5, OFDM54/48/36*/ /* normal rate except MCS7/6/5, OFDM54/48/36 */
h2c_parameter[2] = 0x00; h2c_parameter[2] = 0x00;
h2c_parameter[3] = 0xf7; /*MCS7 or OFDM54*/ h2c_parameter[3] = 0xf7; /* MCS7 or OFDM54 */
h2c_parameter[4] = 0xf8; /*MCS6 or OFDM48*/ h2c_parameter[4] = 0xf8; /* MCS6 or OFDM48 */
h2c_parameter[5] = 0xf9; /*MCS5 or OFDM36*/ h2c_parameter[5] = 0xf9; /* MCS5 or OFDM36 */
} }
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
...@@ -694,7 +687,7 @@ static void btc8821a1ant_set_sw_pen_tx_rate(struct btc_coexist *btcoexist, ...@@ -694,7 +687,7 @@ static void btc8821a1ant_set_sw_pen_tx_rate(struct btc_coexist *btcoexist,
btcoexist->btc_fill_h2c(btcoexist, 0x69, 6, h2c_parameter); btcoexist->btc_fill_h2c(btcoexist, 0x69, 6, h2c_parameter);
} }
static void halbtc8821a1ant_low_penalty_ra(struct btc_coexist *btcoexist, static void btc8821a1ant_low_penalty_ra(struct btc_coexist *btcoexist,
bool force_exec, bool low_penalty_ra) bool force_exec, bool low_penalty_ra)
{ {
coex_dm->cur_low_penalty_ra = low_penalty_ra; coex_dm->cur_low_penalty_ra = low_penalty_ra;
...@@ -703,12 +696,13 @@ static void halbtc8821a1ant_low_penalty_ra(struct btc_coexist *btcoexist, ...@@ -703,12 +696,13 @@ static void halbtc8821a1ant_low_penalty_ra(struct btc_coexist *btcoexist,
if (coex_dm->pre_low_penalty_ra == coex_dm->cur_low_penalty_ra) if (coex_dm->pre_low_penalty_ra == coex_dm->cur_low_penalty_ra)
return; return;
} }
btc8821a1ant_set_sw_pen_tx_rate(btcoexist, coex_dm->cur_low_penalty_ra); btc8821a1ant_set_sw_penalty_tx_rate(btcoexist,
coex_dm->cur_low_penalty_ra);
coex_dm->pre_low_penalty_ra = coex_dm->cur_low_penalty_ra; coex_dm->pre_low_penalty_ra = coex_dm->cur_low_penalty_ra;
} }
static void halbtc8821a1ant_set_coex_table(struct btc_coexist *btcoexist, static void btc8821a1ant_set_coex_table(struct btc_coexist *btcoexist,
u32 val0x6c0, u32 val0x6c4, u32 val0x6c0, u32 val0x6c4,
u32 val0x6c8, u8 val0x6cc) u32 val0x6c8, u8 val0x6cc)
{ {
...@@ -731,9 +725,9 @@ static void halbtc8821a1ant_set_coex_table(struct btc_coexist *btcoexist, ...@@ -731,9 +725,9 @@ static void halbtc8821a1ant_set_coex_table(struct btc_coexist *btcoexist,
btcoexist->btc_write_1byte(btcoexist, 0x6cc, val0x6cc); btcoexist->btc_write_1byte(btcoexist, 0x6cc, val0x6cc);
} }
static void halbtc8821a1ant_coex_table(struct btc_coexist *btcoexist, static void btc8821a1ant_coex_table(struct btc_coexist *btcoexist,
bool force_exec, u32 val0x6c0, bool force_exec, u32 val0x6c0, u32 val0x6c4,
u32 val0x6c4, u32 val0x6c8, u8 val0x6cc) u32 val0x6c8, u8 val0x6cc)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
...@@ -753,7 +747,7 @@ static void halbtc8821a1ant_coex_table(struct btc_coexist *btcoexist, ...@@ -753,7 +747,7 @@ static void halbtc8821a1ant_coex_table(struct btc_coexist *btcoexist,
(coex_dm->pre_val_0x6cc == coex_dm->cur_val_0x6cc)) (coex_dm->pre_val_0x6cc == coex_dm->cur_val_0x6cc))
return; return;
} }
halbtc8821a1ant_set_coex_table(btcoexist, val0x6c0, val0x6c4, btc8821a1ant_set_coex_table(btcoexist, val0x6c0, val0x6c4,
val0x6c8, val0x6cc); val0x6c8, val0x6cc);
coex_dm->pre_val_0x6c0 = coex_dm->cur_val_0x6c0; coex_dm->pre_val_0x6c0 = coex_dm->cur_val_0x6c0;
...@@ -762,41 +756,40 @@ static void halbtc8821a1ant_coex_table(struct btc_coexist *btcoexist, ...@@ -762,41 +756,40 @@ static void halbtc8821a1ant_coex_table(struct btc_coexist *btcoexist,
coex_dm->pre_val_0x6cc = coex_dm->cur_val_0x6cc; coex_dm->pre_val_0x6cc = coex_dm->cur_val_0x6cc;
} }
static void halbtc8821a1ant_coex_table_with_type(struct btc_coexist *btcoexist, static void btc8821a1ant_coex_table_with_type(struct btc_coexist *btcoexist,
bool force_exec, u8 type) bool force_exec, u8 type)
{ {
switch (type) { switch (type) {
case 0: case 0:
halbtc8821a1ant_coex_table(btcoexist, force_exec, 0x55555555, btc8821a1ant_coex_table(btcoexist, force_exec, 0x55555555,
0x55555555, 0xffffff, 0x3); 0x55555555, 0xffffff, 0x3);
break; break;
case 1: case 1:
halbtc8821a1ant_coex_table(btcoexist, force_exec, btc8821a1ant_coex_table(btcoexist, force_exec, 0x55555555,
0x55555555, 0x5a5a5a5a, 0x5a5a5a5a, 0xffffff, 0x3);
0xffffff, 0x3);
break; break;
case 2: case 2:
halbtc8821a1ant_coex_table(btcoexist, force_exec, 0x5a5a5a5a, btc8821a1ant_coex_table(btcoexist, force_exec, 0x5a5a5a5a,
0x5a5a5a5a, 0xffffff, 0x3); 0x5a5a5a5a, 0xffffff, 0x3);
break; break;
case 3: case 3:
halbtc8821a1ant_coex_table(btcoexist, force_exec, 0x55555555, btc8821a1ant_coex_table(btcoexist, force_exec, 0x55555555,
0xaaaaaaaa, 0xffffff, 0x3); 0xaaaaaaaa, 0xffffff, 0x3);
break; break;
case 4: case 4:
halbtc8821a1ant_coex_table(btcoexist, force_exec, 0xffffffff, btc8821a1ant_coex_table(btcoexist, force_exec, 0xffffffff,
0xffffffff, 0xffffff, 0x3); 0xffffffff, 0xffffff, 0x3);
break; break;
case 5: case 5:
halbtc8821a1ant_coex_table(btcoexist, force_exec, 0x5fff5fff, btc8821a1ant_coex_table(btcoexist, force_exec, 0x5fff5fff,
0x5fff5fff, 0xffffff, 0x3); 0x5fff5fff, 0xffffff, 0x3);
break; break;
case 6: case 6:
halbtc8821a1ant_coex_table(btcoexist, force_exec, 0x55ff55ff, btc8821a1ant_coex_table(btcoexist, force_exec, 0x55ff55ff,
0x5a5a5a5a, 0xffffff, 0x3); 0x5a5a5a5a, 0xffffff, 0x3);
break; break;
case 7: case 7:
halbtc8821a1ant_coex_table(btcoexist, force_exec, 0x5afa5afa, btc8821a1ant_coex_table(btcoexist, force_exec, 0x5afa5afa,
0x5afa5afa, 0xffffff, 0x3); 0x5afa5afa, 0xffffff, 0x3);
break; break;
default: default:
...@@ -811,7 +804,7 @@ static void btc8821a1ant_set_fw_ignore_wlan_act(struct btc_coexist *btcoexist, ...@@ -811,7 +804,7 @@ static void btc8821a1ant_set_fw_ignore_wlan_act(struct btc_coexist *btcoexist,
u8 h2c_parameter[1] = {0}; u8 h2c_parameter[1] = {0};
if (enable) if (enable)
h2c_parameter[0] |= BIT0; /* function enable*/ h2c_parameter[0] |= BIT0; /* function enable */
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], set FW for BT Ignore Wlan_Act, FW write 0x63 = 0x%x\n", "[BTCoex], set FW for BT Ignore Wlan_Act, FW write 0x63 = 0x%x\n",
...@@ -820,7 +813,7 @@ static void btc8821a1ant_set_fw_ignore_wlan_act(struct btc_coexist *btcoexist, ...@@ -820,7 +813,7 @@ static void btc8821a1ant_set_fw_ignore_wlan_act(struct btc_coexist *btcoexist,
btcoexist->btc_fill_h2c(btcoexist, 0x63, 1, h2c_parameter); btcoexist->btc_fill_h2c(btcoexist, 0x63, 1, h2c_parameter);
} }
static void halbtc8821a1ant_ignore_wlan_act(struct btc_coexist *btcoexist, static void btc8821a1ant_ignore_wlan_act(struct btc_coexist *btcoexist,
bool force_exec, bool enable) bool force_exec, bool enable)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
...@@ -845,9 +838,8 @@ static void halbtc8821a1ant_ignore_wlan_act(struct btc_coexist *btcoexist, ...@@ -845,9 +838,8 @@ static void halbtc8821a1ant_ignore_wlan_act(struct btc_coexist *btcoexist,
coex_dm->pre_ignore_wlan_act = coex_dm->cur_ignore_wlan_act; coex_dm->pre_ignore_wlan_act = coex_dm->cur_ignore_wlan_act;
} }
static void halbtc8821a1ant_set_fw_pstdma(struct btc_coexist *btcoexist, static void btc8821a1ant_set_fw_ps_tdma(struct btc_coexist *btcoexist, u8 byte1,
u8 byte1, u8 byte2, u8 byte3, u8 byte2, u8 byte3, u8 byte4, u8 byte5)
u8 byte4, u8 byte5)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
u8 h2c_parameter[5] = {0}; u8 h2c_parameter[5] = {0};
...@@ -874,7 +866,7 @@ static void halbtc8821a1ant_set_fw_pstdma(struct btc_coexist *btcoexist, ...@@ -874,7 +866,7 @@ static void halbtc8821a1ant_set_fw_pstdma(struct btc_coexist *btcoexist,
btcoexist->btc_fill_h2c(btcoexist, 0x60, 5, h2c_parameter); btcoexist->btc_fill_h2c(btcoexist, 0x60, 5, h2c_parameter);
} }
static void halbtc8821a1ant_set_lps_rpwm(struct btc_coexist *btcoexist, static void btc8821a1ant_set_lps_rpwm(struct btc_coexist *btcoexist,
u8 lps_val, u8 rpwm_val) u8 lps_val, u8 rpwm_val)
{ {
u8 lps = lps_val; u8 lps = lps_val;
...@@ -884,7 +876,7 @@ static void halbtc8821a1ant_set_lps_rpwm(struct btc_coexist *btcoexist, ...@@ -884,7 +876,7 @@ static void halbtc8821a1ant_set_lps_rpwm(struct btc_coexist *btcoexist,
btcoexist->btc_set(btcoexist, BTC_SET_U1_RPWM_VAL, &rpwm); btcoexist->btc_set(btcoexist, BTC_SET_U1_RPWM_VAL, &rpwm);
} }
static void halbtc8821a1ant_lps_rpwm(struct btc_coexist *btcoexist, static void btc8821a1ant_lps_rpwm(struct btc_coexist *btcoexist,
bool force_exec, u8 lps_val, u8 rpwm_val) bool force_exec, u8 lps_val, u8 rpwm_val)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
...@@ -909,13 +901,13 @@ static void halbtc8821a1ant_lps_rpwm(struct btc_coexist *btcoexist, ...@@ -909,13 +901,13 @@ static void halbtc8821a1ant_lps_rpwm(struct btc_coexist *btcoexist,
return; return;
} }
} }
halbtc8821a1ant_set_lps_rpwm(btcoexist, lps_val, rpwm_val); btc8821a1ant_set_lps_rpwm(btcoexist, lps_val, rpwm_val);
coex_dm->pre_lps = coex_dm->cur_lps; coex_dm->pre_lps = coex_dm->cur_lps;
coex_dm->pre_rpwm = coex_dm->cur_rpwm; coex_dm->pre_rpwm = coex_dm->cur_rpwm;
} }
static void halbtc8821a1ant_sw_mechanism(struct btc_coexist *btcoexist, static void btc8821a1ant_sw_mechanism(struct btc_coexist *btcoexist,
bool low_penalty_ra) bool low_penalty_ra)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
...@@ -923,10 +915,10 @@ static void halbtc8821a1ant_sw_mechanism(struct btc_coexist *btcoexist, ...@@ -923,10 +915,10 @@ static void halbtc8821a1ant_sw_mechanism(struct btc_coexist *btcoexist,
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], SM[LpRA] = %d\n", low_penalty_ra); "[BTCoex], SM[LpRA] = %d\n", low_penalty_ra);
halbtc8821a1ant_low_penalty_ra(btcoexist, NORMAL_EXEC, low_penalty_ra); btc8821a1ant_low_penalty_ra(btcoexist, NORMAL_EXEC, low_penalty_ra);
} }
static void halbtc8821a1ant_set_ant_path(struct btc_coexist *btcoexist, static void btc8821a1ant_set_ant_path(struct btc_coexist *btcoexist,
u8 ant_pos_type, bool init_hw_cfg, u8 ant_pos_type, bool init_hw_cfg,
bool wifi_off) bool wifi_off)
{ {
...@@ -935,7 +927,7 @@ static void halbtc8821a1ant_set_ant_path(struct btc_coexist *btcoexist, ...@@ -935,7 +927,7 @@ static void halbtc8821a1ant_set_ant_path(struct btc_coexist *btcoexist,
u8 h2c_parameter[2] = {0}; u8 h2c_parameter[2] = {0};
if (init_hw_cfg) { if (init_hw_cfg) {
/* 0x4c[23] = 0, 0x4c[24] = 1 Antenna control by WL/BT*/ /* 0x4c[23] = 0, 0x4c[24] = 1 Antenna control by WL/BT */
u4_tmp = btcoexist->btc_read_4byte(btcoexist, 0x4c); u4_tmp = btcoexist->btc_read_4byte(btcoexist, 0x4c);
u4_tmp &= ~BIT23; u4_tmp &= ~BIT23;
u4_tmp |= BIT24; u4_tmp |= BIT24;
...@@ -945,25 +937,25 @@ static void halbtc8821a1ant_set_ant_path(struct btc_coexist *btcoexist, ...@@ -945,25 +937,25 @@ static void halbtc8821a1ant_set_ant_path(struct btc_coexist *btcoexist,
btcoexist->btc_write_1byte(btcoexist, 0xcb4, 0x77); btcoexist->btc_write_1byte(btcoexist, 0xcb4, 0x77);
if (board_info->btdm_ant_pos == BTC_ANTENNA_AT_MAIN_PORT) { if (board_info->btdm_ant_pos == BTC_ANTENNA_AT_MAIN_PORT) {
/*tell firmware "antenna inverse" ==> /* tell firmware "antenna inverse"
* WRONG firmware antenna control code.==>need fw to fix * WRONG firmware antenna control code, need fw to fix
*/ */
h2c_parameter[0] = 1; h2c_parameter[0] = 1;
h2c_parameter[1] = 1; h2c_parameter[1] = 1;
btcoexist->btc_fill_h2c(btcoexist, 0x65, 2, btcoexist->btc_fill_h2c(btcoexist, 0x65, 2,
h2c_parameter); h2c_parameter);
/*Main Ant to BT for IPS case 0x4c[23] = 1*/ /* Main Ant to BT for IPS case 0x4c[23] = 1 */
btcoexist->btc_write_1byte_bitmask(btcoexist, 0x64, btcoexist->btc_write_1byte_bitmask(btcoexist, 0x64,
0x1, 0x1); 0x1, 0x1);
} else { } else {
/*tell firmware "no antenna inverse" ==> /* tell firmware "no antenna inverse"
* WRONG firmware antenna control code.==>need fw to fix * WRONG firmware antenna control code, need fw to fix
*/ */
h2c_parameter[0] = 0; h2c_parameter[0] = 0;
h2c_parameter[1] = 1; h2c_parameter[1] = 1;
btcoexist->btc_fill_h2c(btcoexist, 0x65, 2, btcoexist->btc_fill_h2c(btcoexist, 0x65, 2,
h2c_parameter); h2c_parameter);
/*Aux Ant to BT for IPS case 0x4c[23] = 1*/ /* Aux Ant to BT for IPS case 0x4c[23] = 1 */
btcoexist->btc_write_1byte_bitmask(btcoexist, 0x64, btcoexist->btc_write_1byte_bitmask(btcoexist, 0x64,
0x1, 0x0); 0x1, 0x0);
} }
...@@ -977,7 +969,7 @@ static void halbtc8821a1ant_set_ant_path(struct btc_coexist *btcoexist, ...@@ -977,7 +969,7 @@ static void halbtc8821a1ant_set_ant_path(struct btc_coexist *btcoexist,
btcoexist->btc_write_4byte(btcoexist, 0x4c, u4_tmp); btcoexist->btc_write_4byte(btcoexist, 0x4c, u4_tmp);
} }
/* ext switch setting*/ /* ext switch setting */
switch (ant_pos_type) { switch (ant_pos_type) {
case BTC_ANT_PATH_WIFI: case BTC_ANT_PATH_WIFI:
if (board_info->btdm_ant_pos == BTC_ANTENNA_AT_MAIN_PORT) if (board_info->btdm_ant_pos == BTC_ANTENNA_AT_MAIN_PORT)
...@@ -1007,7 +999,7 @@ static void halbtc8821a1ant_set_ant_path(struct btc_coexist *btcoexist, ...@@ -1007,7 +999,7 @@ static void halbtc8821a1ant_set_ant_path(struct btc_coexist *btcoexist,
} }
} }
static void halbtc8821a1ant_ps_tdma(struct btc_coexist *btcoexist, static void btc8821a1ant_ps_tdma(struct btc_coexist *btcoexist,
bool force_exec, bool turn_on, u8 type) bool force_exec, bool turn_on, u8 type)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
...@@ -1033,184 +1025,188 @@ static void halbtc8821a1ant_ps_tdma(struct btc_coexist *btcoexist, ...@@ -1033,184 +1025,188 @@ static void halbtc8821a1ant_ps_tdma(struct btc_coexist *btcoexist,
if (turn_on) { if (turn_on) {
switch (type) { switch (type) {
default: default:
halbtc8821a1ant_set_fw_pstdma(btcoexist, 0x51, 0x1a, btc8821a1ant_set_fw_ps_tdma(btcoexist, 0x51, 0x1a,
0x1a, 0x0, 0x50); 0x1a, 0x0, 0x50);
break; break;
case 1: case 1:
halbtc8821a1ant_set_fw_pstdma(btcoexist, 0x51, 0x3a, btc8821a1ant_set_fw_ps_tdma(btcoexist, 0x51, 0x3a,
0x03, 0x10, 0x50); 0x03, 0x10, 0x50);
rssi_adjust_val = 11; rssi_adjust_val = 11;
break; break;
case 2: case 2:
halbtc8821a1ant_set_fw_pstdma(btcoexist, 0x51, 0x2b, btc8821a1ant_set_fw_ps_tdma(btcoexist, 0x51, 0x2b,
0x03, 0x10, 0x50); 0x03, 0x10, 0x50);
rssi_adjust_val = 14; rssi_adjust_val = 14;
break; break;
case 3: case 3:
halbtc8821a1ant_set_fw_pstdma(btcoexist, 0x51, 0x1d, btc8821a1ant_set_fw_ps_tdma(btcoexist, 0x51, 0x1d,
0x1d, 0x0, 0x10); 0x1d, 0x0, 0x10);
break; break;
case 4: case 4:
halbtc8821a1ant_set_fw_pstdma(btcoexist, 0x93, 0x15, btc8821a1ant_set_fw_ps_tdma(btcoexist, 0x93, 0x15,
0x3, 0x14, 0x0); 0x3, 0x14, 0x0);
rssi_adjust_val = 17; rssi_adjust_val = 17;
break; break;
case 5: case 5:
halbtc8821a1ant_set_fw_pstdma(btcoexist, 0x61, 0x15, btc8821a1ant_set_fw_ps_tdma(btcoexist, 0x61, 0x15,
0x3, 0x11, 0x10); 0x3, 0x11, 0x10);
break; break;
case 6: case 6:
halbtc8821a1ant_set_fw_pstdma(btcoexist, 0x13, 0xa, btc8821a1ant_set_fw_ps_tdma(btcoexist, 0x13, 0xa,
0x3, 0x0, 0x0); 0x3, 0x0, 0x0);
break; break;
case 7: case 7:
halbtc8821a1ant_set_fw_pstdma(btcoexist, 0x13, 0xc, btc8821a1ant_set_fw_ps_tdma(btcoexist, 0x13, 0xc,
0x5, 0x0, 0x0); 0x5, 0x0, 0x0);
break; break;
case 8: case 8:
halbtc8821a1ant_set_fw_pstdma(btcoexist, 0x93, 0x25, btc8821a1ant_set_fw_ps_tdma(btcoexist, 0x93, 0x25,
0x3, 0x10, 0x0); 0x3, 0x10, 0x0);
break; break;
case 9: case 9:
halbtc8821a1ant_set_fw_pstdma(btcoexist, 0x51, 0x21, btc8821a1ant_set_fw_ps_tdma(btcoexist, 0x51, 0x21,
0x3, 0x10, 0x50); 0x3, 0x10, 0x50);
rssi_adjust_val = 18; rssi_adjust_val = 18;
break; break;
case 10: case 10:
halbtc8821a1ant_set_fw_pstdma(btcoexist, 0x13, 0xa, btc8821a1ant_set_fw_ps_tdma(btcoexist, 0x13, 0xa,
0xa, 0x0, 0x40); 0xa, 0x0, 0x40);
break; break;
case 11: case 11:
halbtc8821a1ant_set_fw_pstdma(btcoexist, 0x51, 0x14, btc8821a1ant_set_fw_ps_tdma(btcoexist, 0x51, 0x14,
0x03, 0x10, 0x10); 0x03, 0x10, 0x10);
rssi_adjust_val = 20; rssi_adjust_val = 20;
break; break;
case 12: case 12:
halbtc8821a1ant_set_fw_pstdma(btcoexist, 0x51, 0x0a, btc8821a1ant_set_fw_ps_tdma(btcoexist, 0x51, 0x0a,
0x0a, 0x0, 0x50); 0x0a, 0x0, 0x50);
break; break;
case 13: case 13:
halbtc8821a1ant_set_fw_pstdma(btcoexist, 0x51, 0x18, btc8821a1ant_set_fw_ps_tdma(btcoexist, 0x51, 0x18,
0x18, 0x0, 0x10); 0x18, 0x0, 0x10);
break; break;
case 14: case 14:
halbtc8821a1ant_set_fw_pstdma(btcoexist, 0x51, 0x21, btc8821a1ant_set_fw_ps_tdma(btcoexist, 0x51, 0x21,
0x3, 0x10, 0x10); 0x3, 0x10, 0x10);
break; break;
case 15: case 15:
halbtc8821a1ant_set_fw_pstdma(btcoexist, 0x13, 0xa, btc8821a1ant_set_fw_ps_tdma(btcoexist, 0x13, 0xa,
0x3, 0x8, 0x0); 0x3, 0x8, 0x0);
break; break;
case 16: case 16:
halbtc8821a1ant_set_fw_pstdma(btcoexist, 0x93, 0x15, btc8821a1ant_set_fw_ps_tdma(btcoexist, 0x93, 0x15,
0x3, 0x10, 0x0); 0x3, 0x10, 0x0);
rssi_adjust_val = 18; rssi_adjust_val = 18;
break; break;
case 18: case 18:
halbtc8821a1ant_set_fw_pstdma(btcoexist, 0x93, 0x25, btc8821a1ant_set_fw_ps_tdma(btcoexist, 0x93, 0x25,
0x3, 0x10, 0x0); 0x3, 0x10, 0x0);
rssi_adjust_val = 14; rssi_adjust_val = 14;
break; break;
case 20: case 20:
halbtc8821a1ant_set_fw_pstdma(btcoexist, 0x61, 0x35, btc8821a1ant_set_fw_ps_tdma(btcoexist, 0x61, 0x35,
0x03, 0x11, 0x10); 0x03, 0x11, 0x10);
break; break;
case 21: case 21:
halbtc8821a1ant_set_fw_pstdma(btcoexist, 0x61, 0x15, btc8821a1ant_set_fw_ps_tdma(btcoexist, 0x61, 0x15,
0x03, 0x11, 0x10); 0x03, 0x11, 0x10);
break; break;
case 22: case 22:
halbtc8821a1ant_set_fw_pstdma(btcoexist, 0x61, 0x25, btc8821a1ant_set_fw_ps_tdma(btcoexist, 0x61, 0x25,
0x03, 0x11, 0x10); 0x03, 0x11, 0x10);
break; break;
case 23: case 23:
halbtc8821a1ant_set_fw_pstdma(btcoexist, 0xe3, 0x25, btc8821a1ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x25,
0x3, 0x31, 0x18); 0x3, 0x31, 0x18);
rssi_adjust_val = 22; rssi_adjust_val = 22;
break; break;
case 24: case 24:
halbtc8821a1ant_set_fw_pstdma(btcoexist, 0xe3, 0x15, btc8821a1ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x15,
0x3, 0x31, 0x18); 0x3, 0x31, 0x18);
rssi_adjust_val = 22; rssi_adjust_val = 22;
break; break;
case 25: case 25:
halbtc8821a1ant_set_fw_pstdma(btcoexist, 0xe3, 0xa, btc8821a1ant_set_fw_ps_tdma(btcoexist, 0xe3, 0xa,
0x3, 0x31, 0x18); 0x3, 0x31, 0x18);
rssi_adjust_val = 22; rssi_adjust_val = 22;
break; break;
case 26: case 26:
halbtc8821a1ant_set_fw_pstdma(btcoexist, 0xe3, 0xa, btc8821a1ant_set_fw_ps_tdma(btcoexist, 0xe3, 0xa,
0x3, 0x31, 0x18); 0x3, 0x31, 0x18);
rssi_adjust_val = 22; rssi_adjust_val = 22;
break; break;
case 27: case 27:
halbtc8821a1ant_set_fw_pstdma(btcoexist, 0xe3, 0x25, btc8821a1ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x25,
0x3, 0x31, 0x98); 0x3, 0x31, 0x98);
rssi_adjust_val = 22; rssi_adjust_val = 22;
break; break;
case 28: case 28:
halbtc8821a1ant_set_fw_pstdma(btcoexist, 0x69, 0x25, btc8821a1ant_set_fw_ps_tdma(btcoexist, 0x69, 0x25,
0x3, 0x31, 0x0); 0x3, 0x31, 0x0);
break; break;
case 29: case 29:
halbtc8821a1ant_set_fw_pstdma(btcoexist, 0xab, 0x1a, btc8821a1ant_set_fw_ps_tdma(btcoexist, 0xab, 0x1a,
0x1a, 0x1, 0x10); 0x1a, 0x1, 0x10);
break; break;
case 30: case 30:
halbtc8821a1ant_set_fw_pstdma(btcoexist, 0x51, 0x14, btc8821a1ant_set_fw_ps_tdma(btcoexist, 0x51, 0x14,
0x3, 0x10, 0x50); 0x3, 0x10, 0x50);
break; break;
case 31: case 31:
halbtc8821a1ant_set_fw_pstdma(btcoexist, 0xd3, 0x1a, btc8821a1ant_set_fw_ps_tdma(btcoexist, 0xd3, 0x1a,
0x1a, 0, 0x58); 0x1a, 0, 0x58);
break; break;
case 32: case 32:
halbtc8821a1ant_set_fw_pstdma(btcoexist, 0x61, 0xa, btc8821a1ant_set_fw_ps_tdma(btcoexist, 0x61, 0xa,
0x3, 0x10, 0x0); 0x3, 0x10, 0x0);
break; break;
case 33: case 33:
halbtc8821a1ant_set_fw_pstdma(btcoexist, 0xa3, 0x25, btc8821a1ant_set_fw_ps_tdma(btcoexist, 0xa3, 0x25,
0x3, 0x30, 0x90); 0x3, 0x30, 0x90);
break; break;
case 34: case 34:
halbtc8821a1ant_set_fw_pstdma(btcoexist, 0x53, 0x1a, btc8821a1ant_set_fw_ps_tdma(btcoexist, 0x53, 0x1a,
0x1a, 0x0, 0x10); 0x1a, 0x0, 0x10);
break; break;
case 35: case 35:
halbtc8821a1ant_set_fw_pstdma(btcoexist, 0x63, 0x1a, btc8821a1ant_set_fw_ps_tdma(btcoexist, 0x63, 0x1a,
0x1a, 0x0, 0x10); 0x1a, 0x0, 0x10);
break; break;
case 36: case 36:
halbtc8821a1ant_set_fw_pstdma(btcoexist, 0xd3, 0x12, btc8821a1ant_set_fw_ps_tdma(btcoexist, 0xd3, 0x12,
0x3, 0x14, 0x50); 0x3, 0x14, 0x50);
break; break;
} }
} else { } else {
/* disable PS tdma*/ /* disable PS tdma */
switch (type) { switch (type) {
case 8: /*PTA Control*/ case 8:
halbtc8821a1ant_set_fw_pstdma(btcoexist, 0x8, 0x0, 0x0, /* PTA Control */
btc8821a1ant_set_fw_ps_tdma(btcoexist, 0x8, 0x0, 0x0,
0x0, 0x0); 0x0, 0x0);
halbtc8821a1ant_set_ant_path(btcoexist, BTC_ANT_PATH_PTA, btc8821a1ant_set_ant_path(btcoexist, BTC_ANT_PATH_PTA,
false, false); false, false);
break; break;
case 0: case 0:
default: /*Software control, Antenna at BT side*/ default:
halbtc8821a1ant_set_fw_pstdma(btcoexist, 0x0, 0x0, 0x0, /* Software control, Antenna at BT side */
btc8821a1ant_set_fw_ps_tdma(btcoexist, 0x0, 0x0, 0x0,
0x0, 0x0); 0x0, 0x0);
halbtc8821a1ant_set_ant_path(btcoexist, BTC_ANT_PATH_BT, btc8821a1ant_set_ant_path(btcoexist, BTC_ANT_PATH_BT,
false, false); false, false);
break; break;
case 9: /*Software control, Antenna at WiFi side*/ case 9:
halbtc8821a1ant_set_fw_pstdma(btcoexist, 0x0, 0x0, 0x0, /* Software control, Antenna at WiFi side */
btc8821a1ant_set_fw_ps_tdma(btcoexist, 0x0, 0x0, 0x0,
0x0, 0x0); 0x0, 0x0);
halbtc8821a1ant_set_ant_path(btcoexist, BTC_ANT_PATH_WIFI, btc8821a1ant_set_ant_path(btcoexist, BTC_ANT_PATH_WIFI,
false, false); false, false);
break; break;
case 10: /* under 5G*/ case 10:
halbtc8821a1ant_set_fw_pstdma(btcoexist, 0x0, 0x0, 0x0, /* under 5G */
btc8821a1ant_set_fw_ps_tdma(btcoexist, 0x0, 0x0, 0x0,
0x8, 0x0); 0x8, 0x0);
halbtc8821a1ant_set_ant_path(btcoexist, BTC_ANT_PATH_BT, btc8821a1ant_set_ant_path(btcoexist, BTC_ANT_PATH_BT,
false, false); false, false);
break; break;
} }
...@@ -1219,12 +1215,12 @@ static void halbtc8821a1ant_ps_tdma(struct btc_coexist *btcoexist, ...@@ -1219,12 +1215,12 @@ static void halbtc8821a1ant_ps_tdma(struct btc_coexist *btcoexist,
btcoexist->btc_set(btcoexist, btcoexist->btc_set(btcoexist,
BTC_SET_U1_RSSI_ADJ_VAL_FOR_1ANT_COEX_TYPE, &rssi_adjust_val); BTC_SET_U1_RSSI_ADJ_VAL_FOR_1ANT_COEX_TYPE, &rssi_adjust_val);
/* update pre state*/ /* update pre state */
coex_dm->pre_ps_tdma_on = coex_dm->cur_ps_tdma_on; coex_dm->pre_ps_tdma_on = coex_dm->cur_ps_tdma_on;
coex_dm->pre_ps_tdma = coex_dm->cur_ps_tdma; coex_dm->pre_ps_tdma = coex_dm->cur_ps_tdma;
} }
static bool halbtc8821a1ant_is_common_action(struct btc_coexist *btcoexist) static bool btc8821a1ant_is_common_action(struct btc_coexist *btcoexist)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
bool common = false, wifi_connected = false, wifi_busy = false; bool common = false, wifi_connected = false, wifi_busy = false;
...@@ -1238,7 +1234,7 @@ static bool halbtc8821a1ant_is_common_action(struct btc_coexist *btcoexist) ...@@ -1238,7 +1234,7 @@ static bool halbtc8821a1ant_is_common_action(struct btc_coexist *btcoexist)
coex_dm->bt_status) { coex_dm->bt_status) {
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Wifi non connected-idle + BT non connected-idle!!\n"); "[BTCoex], Wifi non connected-idle + BT non connected-idle!!\n");
halbtc8821a1ant_sw_mechanism(btcoexist, false); btc8821a1ant_sw_mechanism(btcoexist, false);
common = true; common = true;
} else if (wifi_connected && } else if (wifi_connected &&
...@@ -1246,7 +1242,7 @@ static bool halbtc8821a1ant_is_common_action(struct btc_coexist *btcoexist) ...@@ -1246,7 +1242,7 @@ static bool halbtc8821a1ant_is_common_action(struct btc_coexist *btcoexist)
coex_dm->bt_status)) { coex_dm->bt_status)) {
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Wifi connected + BT non connected-idle!!\n"); "[BTCoex], Wifi connected + BT non connected-idle!!\n");
halbtc8821a1ant_sw_mechanism(btcoexist, false); btc8821a1ant_sw_mechanism(btcoexist, false);
common = true; common = true;
} else if (!wifi_connected && } else if (!wifi_connected &&
...@@ -1254,7 +1250,7 @@ static bool halbtc8821a1ant_is_common_action(struct btc_coexist *btcoexist) ...@@ -1254,7 +1250,7 @@ static bool halbtc8821a1ant_is_common_action(struct btc_coexist *btcoexist)
coex_dm->bt_status)) { coex_dm->bt_status)) {
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Wifi non connected-idle + BT connected-idle!!\n"); "[BTCoex], Wifi non connected-idle + BT connected-idle!!\n");
halbtc8821a1ant_sw_mechanism(btcoexist, false); btc8821a1ant_sw_mechanism(btcoexist, false);
common = true; common = true;
} else if (wifi_connected && } else if (wifi_connected &&
...@@ -1262,7 +1258,7 @@ static bool halbtc8821a1ant_is_common_action(struct btc_coexist *btcoexist) ...@@ -1262,7 +1258,7 @@ static bool halbtc8821a1ant_is_common_action(struct btc_coexist *btcoexist)
coex_dm->bt_status)) { coex_dm->bt_status)) {
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Wifi connected + BT connected-idle!!\n"); "[BTCoex], Wifi connected + BT connected-idle!!\n");
halbtc8821a1ant_sw_mechanism(btcoexist, false); btc8821a1ant_sw_mechanism(btcoexist, false);
common = true; common = true;
} else if (!wifi_connected && } else if (!wifi_connected &&
...@@ -1270,7 +1266,7 @@ static bool halbtc8821a1ant_is_common_action(struct btc_coexist *btcoexist) ...@@ -1270,7 +1266,7 @@ static bool halbtc8821a1ant_is_common_action(struct btc_coexist *btcoexist)
coex_dm->bt_status)) { coex_dm->bt_status)) {
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Wifi non connected-idle + BT Busy!!\n"); "[BTCoex], Wifi non connected-idle + BT Busy!!\n");
halbtc8821a1ant_sw_mechanism(btcoexist, false); btc8821a1ant_sw_mechanism(btcoexist, false);
common = true; common = true;
} else { } else {
...@@ -1296,33 +1292,32 @@ static void btc8821a1ant_ps_tdma_check_for_pwr_save(struct btc_coexist *btcoex, ...@@ -1296,33 +1292,32 @@ static void btc8821a1ant_ps_tdma_check_for_pwr_save(struct btc_coexist *btcoex,
btcoex->btc_get(btcoex, BTC_GET_U1_LPS_MODE, &lps_mode); btcoex->btc_get(btcoex, BTC_GET_U1_LPS_MODE, &lps_mode);
if (lps_mode) { if (lps_mode) {
/* already under LPS state*/ /* already under LPS state */
if (new_ps_state) { if (new_ps_state) {
/* keep state under LPS, do nothing.*/ /* keep state under LPS, do nothing */
} else { } else {
/* will leave LPS state, turn off psTdma first*/ /* will leave LPS state, turn off psTdma first */
halbtc8821a1ant_ps_tdma(btcoex, NORMAL_EXEC, false, 0); btc8821a1ant_ps_tdma(btcoex, NORMAL_EXEC, false, 0);
} }
} else { } else {
/* NO PS state*/ /* NO PS state*/
if (new_ps_state) { if (new_ps_state) {
/* will enter LPS state, turn off psTdma first*/ /* will enter LPS state, turn off psTdma first */
halbtc8821a1ant_ps_tdma(btcoex, NORMAL_EXEC, false, 0); btc8821a1ant_ps_tdma(btcoex, NORMAL_EXEC, false, 0);
} else { } else {
/* keep state under NO PS state, do nothing.*/ /* keep state under NO PS state, do nothing */
} }
} }
} }
static void halbtc8821a1ant_power_save_state(struct btc_coexist *btcoexist, static void btc8821a1ant_power_save_state(struct btc_coexist *btcoexist,
u8 ps_type, u8 lps_val, u8 ps_type, u8 lps_val, u8 rpwm_val)
u8 rpwm_val)
{ {
bool low_pwr_disable = false; bool low_pwr_disable = false;
switch (ps_type) { switch (ps_type) {
case BTC_PS_WIFI_NATIVE: case BTC_PS_WIFI_NATIVE:
/* recover to original 32k low power setting*/ /* recover to original 32k low power setting */
low_pwr_disable = false; low_pwr_disable = false;
btcoexist->btc_set(btcoexist, BTC_SET_ACT_DISABLE_LOW_POWER, btcoexist->btc_set(btcoexist, BTC_SET_ACT_DISABLE_LOW_POWER,
&low_pwr_disable); &low_pwr_disable);
...@@ -1331,13 +1326,13 @@ static void halbtc8821a1ant_power_save_state(struct btc_coexist *btcoexist, ...@@ -1331,13 +1326,13 @@ static void halbtc8821a1ant_power_save_state(struct btc_coexist *btcoexist,
case BTC_PS_LPS_ON: case BTC_PS_LPS_ON:
btc8821a1ant_ps_tdma_check_for_pwr_save(btcoexist, btc8821a1ant_ps_tdma_check_for_pwr_save(btcoexist,
true); true);
halbtc8821a1ant_lps_rpwm(btcoexist, btc8821a1ant_lps_rpwm(btcoexist, NORMAL_EXEC, lps_val,
NORMAL_EXEC, lps_val, rpwm_val); rpwm_val);
/* when coex force to enter LPS, do not enter 32k low power.*/ /* when coex force to enter LPS, do not enter 32k low power */
low_pwr_disable = true; low_pwr_disable = true;
btcoexist->btc_set(btcoexist, BTC_SET_ACT_DISABLE_LOW_POWER, btcoexist->btc_set(btcoexist, BTC_SET_ACT_DISABLE_LOW_POWER,
&low_pwr_disable); &low_pwr_disable);
/* power save must executed before psTdma.*/ /* power save must executed before psTdma */
btcoexist->btc_set(btcoexist, BTC_SET_ACT_ENTER_LPS, NULL); btcoexist->btc_set(btcoexist, BTC_SET_ACT_ENTER_LPS, NULL);
break; break;
case BTC_PS_LPS_OFF: case BTC_PS_LPS_OFF:
...@@ -1349,19 +1344,19 @@ static void halbtc8821a1ant_power_save_state(struct btc_coexist *btcoexist, ...@@ -1349,19 +1344,19 @@ static void halbtc8821a1ant_power_save_state(struct btc_coexist *btcoexist,
} }
} }
static void halbtc8821a1ant_coex_under_5g(struct btc_coexist *btcoexist) static void btc8821a1ant_coex_under_5g(struct btc_coexist *btcoexist)
{ {
halbtc8821a1ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE, btc8821a1ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE,
0x0, 0x0); 0x0, 0x0);
halbtc8821a1ant_ignore_wlan_act(btcoexist, NORMAL_EXEC, true); btc8821a1ant_ignore_wlan_act(btcoexist, NORMAL_EXEC, true);
halbtc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 10); btc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 10);
halbtc8821a1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 0); btc8821a1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 0);
halbtc8821a1ant_limited_tx(btcoexist, NORMAL_EXEC, 0, 0, 0, 0); btc8821a1ant_limited_tx(btcoexist, NORMAL_EXEC, 0, 0, 0, 0);
halbtc8821a1ant_limited_rx(btcoexist, NORMAL_EXEC, false, false, 5); btc8821a1ant_limited_rx(btcoexist, NORMAL_EXEC, false, false, 5);
} }
/*********************************************** /***********************************************
...@@ -1370,74 +1365,74 @@ static void halbtc8821a1ant_coex_under_5g(struct btc_coexist *btcoexist) ...@@ -1370,74 +1365,74 @@ static void halbtc8821a1ant_coex_under_5g(struct btc_coexist *btcoexist)
* *
***********************************************/ ***********************************************/
/* SCO only or SCO+PAN(HS)*/ /* SCO only or SCO+PAN(HS) */
static void halbtc8821a1ant_action_sco(struct btc_coexist *btcoexist) static void btc8821a1ant_action_sco(struct btc_coexist *btcoexist)
{ {
halbtc8821a1ant_sw_mechanism(btcoexist, true); btc8821a1ant_sw_mechanism(btcoexist, true);
} }
static void halbtc8821a1ant_action_hid(struct btc_coexist *btcoexist) static void btc8821a1ant_action_hid(struct btc_coexist *btcoexist)
{ {
halbtc8821a1ant_sw_mechanism(btcoexist, true); btc8821a1ant_sw_mechanism(btcoexist, true);
} }
/*A2DP only / PAN(EDR) only/ A2DP+PAN(HS)*/ /* A2DP only / PAN(EDR) only/ A2DP+PAN(HS) */
static void halbtc8821a1ant_action_a2dp(struct btc_coexist *btcoexist) static void btc8821a1ant_action_a2dp(struct btc_coexist *btcoexist)
{ {
halbtc8821a1ant_sw_mechanism(btcoexist, false); btc8821a1ant_sw_mechanism(btcoexist, false);
} }
static void halbtc8821a1ant_action_a2dp_pan_hs(struct btc_coexist *btcoexist) static void btc8821a1ant_action_a2dp_pan_hs(struct btc_coexist *btcoexist)
{ {
halbtc8821a1ant_sw_mechanism(btcoexist, false); btc8821a1ant_sw_mechanism(btcoexist, false);
} }
static void halbtc8821a1ant_action_pan_edr(struct btc_coexist *btcoexist) static void btc8821a1ant_action_pan_edr(struct btc_coexist *btcoexist)
{ {
halbtc8821a1ant_sw_mechanism(btcoexist, false); btc8821a1ant_sw_mechanism(btcoexist, false);
} }
/*PAN(HS) only*/ /* PAN(HS) only */
static void halbtc8821a1ant_action_pan_hs(struct btc_coexist *btcoexist) static void btc8821a1ant_action_pan_hs(struct btc_coexist *btcoexist)
{ {
halbtc8821a1ant_sw_mechanism(btcoexist, false); btc8821a1ant_sw_mechanism(btcoexist, false);
} }
/*PAN(EDR)+A2DP*/ /* PAN(EDR)+A2DP */
static void halbtc8821a1ant_action_pan_edr_a2dp(struct btc_coexist *btcoexist) static void btc8821a1ant_action_pan_edr_a2dp(struct btc_coexist *btcoexist)
{ {
halbtc8821a1ant_sw_mechanism(btcoexist, false); btc8821a1ant_sw_mechanism(btcoexist, false);
} }
static void halbtc8821a1ant_action_pan_edr_hid(struct btc_coexist *btcoexist) static void btc8821a1ant_action_pan_edr_hid(struct btc_coexist *btcoexist)
{ {
halbtc8821a1ant_sw_mechanism(btcoexist, true); btc8821a1ant_sw_mechanism(btcoexist, true);
} }
/* HID+A2DP+PAN(EDR)*/ /* HID+A2DP+PAN(EDR) */
static void btc8821a1ant_action_hid_a2dp_pan_edr(struct btc_coexist *btcoexist) static void btc8821a1ant_action_hid_a2dp_pan_edr(struct btc_coexist *btcoexist)
{ {
halbtc8821a1ant_sw_mechanism(btcoexist, true); btc8821a1ant_sw_mechanism(btcoexist, true);
} }
static void halbtc8821a1ant_action_hid_a2dp(struct btc_coexist *btcoexist) static void btc8821a1ant_action_hid_a2dp(struct btc_coexist *btcoexist)
{ {
halbtc8821a1ant_sw_mechanism(btcoexist, true); btc8821a1ant_sw_mechanism(btcoexist, true);
} }
/*=============================================*/ /***********************************************
/**/ *
/* Non-Software Coex Mechanism start*/ * Non-Software Coex Mechanism start
/**/ *
/*=============================================*/ ***********************************************/
static void halbtc8821a1ant_action_hs(struct btc_coexist *btcoexist) static void btc8821a1ant_action_hs(struct btc_coexist *btcoexist)
{ {
halbtc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 5); btc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 5);
halbtc8821a1ant_coex_table_with_type(btcoexist, FORCE_EXEC, 2); btc8821a1ant_coex_table_with_type(btcoexist, FORCE_EXEC, 2);
} }
static void halbtc8821a1ant_action_bt_inquiry(struct btc_coexist *btcoexist) static void btc8821a1ant_action_bt_inquiry(struct btc_coexist *btcoexist)
{ {
struct btc_bt_link_info *bt_link_info = &btcoexist->bt_link_info; struct btc_bt_link_info *bt_link_info = &btcoexist->bt_link_info;
bool wifi_connected = false; bool wifi_connected = false;
...@@ -1446,31 +1441,35 @@ static void halbtc8821a1ant_action_bt_inquiry(struct btc_coexist *btcoexist) ...@@ -1446,31 +1441,35 @@ static void halbtc8821a1ant_action_bt_inquiry(struct btc_coexist *btcoexist)
BTC_GET_BL_WIFI_CONNECTED, &wifi_connected); BTC_GET_BL_WIFI_CONNECTED, &wifi_connected);
if (!wifi_connected) { if (!wifi_connected) {
halbtc8821a1ant_power_save_state(btcoexist, btc8821a1ant_power_save_state(btcoexist,
BTC_PS_WIFI_NATIVE, 0x0, 0x0); BTC_PS_WIFI_NATIVE, 0x0, 0x0);
halbtc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 5); btc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 5);
halbtc8821a1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 1); btc8821a1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 1);
} else if ((bt_link_info->sco_exist) || } else if ((bt_link_info->sco_exist) ||
(bt_link_info->hid_only)) { (bt_link_info->hid_only)) {
/* SCO/HID-only busy*/ /* SCO/HID-only busy */
halbtc8821a1ant_power_save_state(btcoexist, btc8821a1ant_power_save_state(btcoexist,
BTC_PS_WIFI_NATIVE, 0x0, 0x0); BTC_PS_WIFI_NATIVE, 0x0, 0x0);
halbtc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 32); btc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 32);
halbtc8821a1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 1); btc8821a1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 1);
} else { } else {
halbtc8821a1ant_power_save_state(btcoexist, BTC_PS_LPS_ON, btc8821a1ant_power_save_state(btcoexist, BTC_PS_LPS_ON,
0x50, 0x4); 0x50, 0x4);
halbtc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 30); btc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 30);
halbtc8821a1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 1); btc8821a1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 1);
} }
} }
static void btc8821a1ant_act_bt_sco_hid_only_busy(struct btc_coexist *btcoexist, static void btc8821a1ant_act_bt_sco_hid_only_busy(struct btc_coexist *btcoexist,
u8 wifi_status) { u8 wifi_status) {
/* tdma and coex table*/ /* tdma and coex table */
halbtc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 5); btc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 5);
halbtc8821a1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 1); if (BT_8821A_1ANT_WIFI_STATUS_NON_CONNECTED_ASSO_AUTH_SCAN ==
wifi_status)
btc8821a1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 1);
else
btc8821a1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 1);
} }
static void btc8821a1ant_act_wifi_con_bt_acl_busy(struct btc_coexist *btcoexist, static void btc8821a1ant_act_wifi_con_bt_acl_busy(struct btc_coexist *btcoexist,
...@@ -1480,99 +1479,98 @@ static void btc8821a1ant_act_wifi_con_bt_acl_busy(struct btc_coexist *btcoexist, ...@@ -1480,99 +1479,98 @@ static void btc8821a1ant_act_wifi_con_bt_acl_busy(struct btc_coexist *btcoexist,
struct btc_bt_link_info *bt_link_info = &btcoexist->bt_link_info; struct btc_bt_link_info *bt_link_info = &btcoexist->bt_link_info;
bt_rssi_state = halbtc8821a1ant_bt_rssi_state(btcoexist, 2, 28, 0); bt_rssi_state = btc8821a1ant_bt_rssi_state(btcoexist, 2, 28, 0);
if (bt_link_info->hid_only) { if (bt_link_info->hid_only) {
/*HID*/ /* HID */
btc8821a1ant_act_bt_sco_hid_only_busy(btcoexist, btc8821a1ant_act_bt_sco_hid_only_busy(btcoexist,
wifi_status); wifi_status);
coex_dm->auto_tdma_adjust = false; coex_dm->auto_tdma_adjust = false;
return; return;
} else if (bt_link_info->a2dp_only) { } else if (bt_link_info->a2dp_only) {
/*A2DP*/ /* A2DP */
if ((bt_rssi_state != BTC_RSSI_STATE_HIGH) && if ((bt_rssi_state != BTC_RSSI_STATE_HIGH) &&
(bt_rssi_state != BTC_RSSI_STATE_STAY_HIGH)) { (bt_rssi_state != BTC_RSSI_STATE_STAY_HIGH)) {
/*for low BT RSSI*/ /* for low BT RSSI */
halbtc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, btc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC,
true, 11); true, 11);
coex_dm->auto_tdma_adjust = false; coex_dm->auto_tdma_adjust = false;
} }
halbtc8821a1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 1); btc8821a1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 1);
} else if (bt_link_info->hid_exist && bt_link_info->a2dp_exist) { } else if (bt_link_info->hid_exist && bt_link_info->a2dp_exist) {
/*HID+A2DP*/ /* HID+A2DP */
if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) || if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||
(bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
halbtc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, btc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC,
true, 14); true, 14);
coex_dm->auto_tdma_adjust = false; coex_dm->auto_tdma_adjust = false;
} else { } else {
/*for low BT RSSI*/ /*for low BT RSSI*/
halbtc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, btc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC,
true, 11); true, 11);
coex_dm->auto_tdma_adjust = false; coex_dm->auto_tdma_adjust = false;
} }
halbtc8821a1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 1); btc8821a1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 1);
} else if ((bt_link_info->pan_only) || } else if ((bt_link_info->pan_only) ||
(bt_link_info->hid_exist && bt_link_info->pan_exist)) { (bt_link_info->hid_exist && bt_link_info->pan_exist)) {
/*PAN(OPP, FTP), HID+PAN(OPP, FTP)*/ /* PAN(OPP, FTP), HID+PAN(OPP, FTP) */
halbtc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 3); btc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 3);
halbtc8821a1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 1); btc8821a1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 1);
coex_dm->auto_tdma_adjust = false; coex_dm->auto_tdma_adjust = false;
} else if (((bt_link_info->a2dp_exist) && (bt_link_info->pan_exist)) || } else if (((bt_link_info->a2dp_exist) && (bt_link_info->pan_exist)) ||
(bt_link_info->hid_exist && bt_link_info->a2dp_exist && (bt_link_info->hid_exist && bt_link_info->a2dp_exist &&
bt_link_info->pan_exist)) { bt_link_info->pan_exist)) {
/*A2DP+PAN(OPP, FTP), HID+A2DP+PAN(OPP, FTP)*/ /* A2DP+PAN(OPP, FTP), HID+A2DP+PAN(OPP, FTP) */
halbtc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 13); btc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 13);
halbtc8821a1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 1); btc8821a1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 1);
coex_dm->auto_tdma_adjust = false; coex_dm->auto_tdma_adjust = false;
} else { } else {
halbtc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 11); btc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 11);
halbtc8821a1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 1); btc8821a1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 1);
coex_dm->auto_tdma_adjust = false; coex_dm->auto_tdma_adjust = false;
} }
} }
static void halbtc8821a1ant_action_wifi_not_connected( static
struct btc_coexist *btcoexist) void btc8821a1ant_action_wifi_not_connected(struct btc_coexist *btcoexist)
{ {
/* power save state*/ /* power save state */
halbtc8821a1ant_power_save_state(btcoexist, btc8821a1ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
BTC_PS_WIFI_NATIVE, 0x0, 0x0);
/* tdma and coex table*/ /* tdma and coex table */
halbtc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 8); btc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 8);
halbtc8821a1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 0); btc8821a1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 0);
} }
static void btc8821a1ant_act_wifi_not_conn_scan(struct btc_coexist *btcoexist) static void btc8821a1ant_act_wifi_not_conn_scan(struct btc_coexist *btcoexist)
{ {
halbtc8821a1ant_power_save_state(btcoexist, btc8821a1ant_power_save_state(btcoexist,
BTC_PS_WIFI_NATIVE, 0x0, 0x0); BTC_PS_WIFI_NATIVE, 0x0, 0x0);
halbtc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 22); btc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 22);
halbtc8821a1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 1); btc8821a1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 1);
} }
static void halbtc8821a1ant_action_wifi_connected_scan( static
struct btc_coexist *btcoexist) { void btc8821a1ant_action_wifi_connected_scan(struct btc_coexist *btcoexist)
{
struct btc_bt_link_info *bt_link_info = &btcoexist->bt_link_info; struct btc_bt_link_info *bt_link_info = &btcoexist->bt_link_info;
/* power save state*/ /* power save state */
halbtc8821a1ant_power_save_state(btcoexist, btc8821a1ant_power_save_state(btcoexist,
BTC_PS_WIFI_NATIVE, 0x0, 0x0); BTC_PS_WIFI_NATIVE, 0x0, 0x0);
/* tdma and coex table*/ /* tdma and coex table */
if (BT_8821A_1ANT_BT_STATUS_ACL_BUSY == coex_dm->bt_status) { if (BT_8821A_1ANT_BT_STATUS_ACL_BUSY == coex_dm->bt_status) {
if (bt_link_info->a2dp_exist && bt_link_info->pan_exist) { if (bt_link_info->a2dp_exist && bt_link_info->pan_exist) {
halbtc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, btc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 22);
true, 22); btc8821a1ant_coex_table_with_type(btcoexist,
halbtc8821a1ant_coex_table_with_type(btcoexist,
NORMAL_EXEC, 1); NORMAL_EXEC, 1);
} else { } else {
halbtc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 20); btc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 20);
halbtc8821a1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 1); btc8821a1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 1);
} }
} else if ((BT_8821A_1ANT_BT_STATUS_SCO_BUSY == } else if ((BT_8821A_1ANT_BT_STATUS_SCO_BUSY ==
coex_dm->bt_status) || coex_dm->bt_status) ||
...@@ -1581,8 +1579,8 @@ static void halbtc8821a1ant_action_wifi_connected_scan( ...@@ -1581,8 +1579,8 @@ static void halbtc8821a1ant_action_wifi_connected_scan(
btc8821a1ant_act_bt_sco_hid_only_busy(btcoexist, btc8821a1ant_act_bt_sco_hid_only_busy(btcoexist,
BT_8821A_1ANT_WIFI_STATUS_CONNECTED_SCAN); BT_8821A_1ANT_WIFI_STATUS_CONNECTED_SCAN);
} else { } else {
halbtc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 20); btc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 20);
halbtc8821a1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 1); btc8821a1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 1);
} }
} }
...@@ -1593,29 +1591,29 @@ static void btc8821a1ant_act_wifi_conn_sp_pkt(struct btc_coexist *btcoexist) ...@@ -1593,29 +1591,29 @@ static void btc8821a1ant_act_wifi_conn_sp_pkt(struct btc_coexist *btcoexist)
btcoexist->btc_get(btcoexist, BTC_GET_BL_HS_CONNECTING, &hs_connecting); btcoexist->btc_get(btcoexist, BTC_GET_BL_HS_CONNECTING, &hs_connecting);
halbtc8821a1ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE, btc8821a1ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE,
0x0, 0x0); 0x0, 0x0);
/* tdma and coex table*/ /* tdma and coex table */
if (BT_8821A_1ANT_BT_STATUS_ACL_BUSY == coex_dm->bt_status) { if (coex_dm->bt_status == BT_8821A_1ANT_BT_STATUS_ACL_BUSY) {
if (bt_link_info->a2dp_exist && bt_link_info->pan_exist) { if (bt_link_info->a2dp_exist && bt_link_info->pan_exist) {
halbtc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, btc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC,
true, 22); true, 22);
halbtc8821a1ant_coex_table_with_type(btcoexist, btc8821a1ant_coex_table_with_type(btcoexist,
NORMAL_EXEC, 1); NORMAL_EXEC, 1);
} else { } else {
halbtc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, btc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC,
true, 20); true, 20);
halbtc8821a1ant_coex_table_with_type(btcoexist, btc8821a1ant_coex_table_with_type(btcoexist,
NORMAL_EXEC, 1); NORMAL_EXEC, 1);
} }
} else { } else {
halbtc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 20); btc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 20);
halbtc8821a1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 1); btc8821a1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 1);
} }
} }
static void halbtc8821a1ant_action_wifi_connected(struct btc_coexist *btcoexist) static void btc8821a1ant_action_wifi_connected(struct btc_coexist *btcoexist)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
bool wifi_busy = false; bool wifi_busy = false;
...@@ -1625,8 +1623,8 @@ static void halbtc8821a1ant_action_wifi_connected(struct btc_coexist *btcoexist) ...@@ -1625,8 +1623,8 @@ static void halbtc8821a1ant_action_wifi_connected(struct btc_coexist *btcoexist)
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], CoexForWifiConnect()===>\n"); "[BTCoex], CoexForWifiConnect()===>\n");
btcoexist->btc_get(btcoexist, btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_4_WAY_PROGRESS,
BTC_GET_BL_WIFI_4_WAY_PROGRESS, &under_4way); &under_4way);
if (under_4way) { if (under_4way) {
btc8821a1ant_act_wifi_conn_sp_pkt(btcoexist); btc8821a1ant_act_wifi_conn_sp_pkt(btcoexist);
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
...@@ -1638,7 +1636,7 @@ static void halbtc8821a1ant_action_wifi_connected(struct btc_coexist *btcoexist) ...@@ -1638,7 +1636,7 @@ static void halbtc8821a1ant_action_wifi_connected(struct btc_coexist *btcoexist)
btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_LINK, &link); btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_LINK, &link);
btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_ROAM, &roam); btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_ROAM, &roam);
if (scan || link || roam) { if (scan || link || roam) {
halbtc8821a1ant_action_wifi_connected_scan(btcoexist); btc8821a1ant_action_wifi_connected_scan(btcoexist);
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], CoexForWifiConnect(), return for wifi is under scan<===\n"); "[BTCoex], CoexForWifiConnect(), return for wifi is under scan<===\n");
return; return;
...@@ -1647,14 +1645,14 @@ static void halbtc8821a1ant_action_wifi_connected(struct btc_coexist *btcoexist) ...@@ -1647,14 +1645,14 @@ static void halbtc8821a1ant_action_wifi_connected(struct btc_coexist *btcoexist)
/* power save state*/ /* power save state*/
if (BT_8821A_1ANT_BT_STATUS_ACL_BUSY == if (BT_8821A_1ANT_BT_STATUS_ACL_BUSY ==
coex_dm->bt_status && !btcoexist->bt_link_info.hid_only) coex_dm->bt_status && !btcoexist->bt_link_info.hid_only)
halbtc8821a1ant_power_save_state(btcoexist, btc8821a1ant_power_save_state(btcoexist,
BTC_PS_LPS_ON, 0x50, 0x4); BTC_PS_LPS_ON, 0x50, 0x4);
else else
halbtc8821a1ant_power_save_state(btcoexist, btc8821a1ant_power_save_state(btcoexist,
BTC_PS_WIFI_NATIVE, BTC_PS_WIFI_NATIVE,
0x0, 0x0); 0x0, 0x0);
/* tdma and coex table*/ /* tdma and coex table */
btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_BUSY, &wifi_busy); btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_BUSY, &wifi_busy);
if (!wifi_busy) { if (!wifi_busy) {
if (BT_8821A_1ANT_BT_STATUS_ACL_BUSY == coex_dm->bt_status) { if (BT_8821A_1ANT_BT_STATUS_ACL_BUSY == coex_dm->bt_status) {
...@@ -1667,9 +1665,9 @@ static void halbtc8821a1ant_action_wifi_connected(struct btc_coexist *btcoexist) ...@@ -1667,9 +1665,9 @@ static void halbtc8821a1ant_action_wifi_connected(struct btc_coexist *btcoexist)
btc8821a1ant_act_bt_sco_hid_only_busy(btcoexist, btc8821a1ant_act_bt_sco_hid_only_busy(btcoexist,
BT_8821A_1ANT_WIFI_STATUS_CONNECTED_IDLE); BT_8821A_1ANT_WIFI_STATUS_CONNECTED_IDLE);
} else { } else {
halbtc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, btc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC,
true, 5); true, 5);
halbtc8821a1ant_coex_table_with_type(btcoexist, btc8821a1ant_coex_table_with_type(btcoexist,
NORMAL_EXEC, 2); NORMAL_EXEC, 2);
} }
} else { } else {
...@@ -1683,9 +1681,8 @@ static void halbtc8821a1ant_action_wifi_connected(struct btc_coexist *btcoexist) ...@@ -1683,9 +1681,8 @@ static void halbtc8821a1ant_action_wifi_connected(struct btc_coexist *btcoexist)
btc8821a1ant_act_bt_sco_hid_only_busy(btcoexist, btc8821a1ant_act_bt_sco_hid_only_busy(btcoexist,
BT_8821A_1ANT_WIFI_STATUS_CONNECTED_BUSY); BT_8821A_1ANT_WIFI_STATUS_CONNECTED_BUSY);
} else { } else {
halbtc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, btc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 5);
true, 5); btc8821a1ant_coex_table_with_type(btcoexist,
halbtc8821a1ant_coex_table_with_type(btcoexist,
NORMAL_EXEC, 2); NORMAL_EXEC, 2);
} }
} }
...@@ -1696,50 +1693,50 @@ static void btc8821a1ant_run_sw_coex_mech(struct btc_coexist *btcoexist) ...@@ -1696,50 +1693,50 @@ static void btc8821a1ant_run_sw_coex_mech(struct btc_coexist *btcoexist)
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
u8 algorithm = 0; u8 algorithm = 0;
algorithm = halbtc8821a1ant_action_algorithm(btcoexist); algorithm = btc8821a1ant_action_algorithm(btcoexist);
coex_dm->cur_algorithm = algorithm; coex_dm->cur_algorithm = algorithm;
if (!halbtc8821a1ant_is_common_action(btcoexist)) { if (!btc8821a1ant_is_common_action(btcoexist)) {
switch (coex_dm->cur_algorithm) { switch (coex_dm->cur_algorithm) {
case BT_8821A_1ANT_COEX_ALGO_SCO: case BT_8821A_1ANT_COEX_ALGO_SCO:
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Action algorithm = SCO\n"); "[BTCoex], Action algorithm = SCO\n");
halbtc8821a1ant_action_sco(btcoexist); btc8821a1ant_action_sco(btcoexist);
break; break;
case BT_8821A_1ANT_COEX_ALGO_HID: case BT_8821A_1ANT_COEX_ALGO_HID:
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Action algorithm = HID\n"); "[BTCoex], Action algorithm = HID\n");
halbtc8821a1ant_action_hid(btcoexist); btc8821a1ant_action_hid(btcoexist);
break; break;
case BT_8821A_1ANT_COEX_ALGO_A2DP: case BT_8821A_1ANT_COEX_ALGO_A2DP:
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Action algorithm = A2DP\n"); "[BTCoex], Action algorithm = A2DP\n");
halbtc8821a1ant_action_a2dp(btcoexist); btc8821a1ant_action_a2dp(btcoexist);
break; break;
case BT_8821A_1ANT_COEX_ALGO_A2DP_PANHS: case BT_8821A_1ANT_COEX_ALGO_A2DP_PANHS:
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Action algorithm = A2DP+PAN(HS)\n"); "[BTCoex], Action algorithm = A2DP+PAN(HS)\n");
halbtc8821a1ant_action_a2dp_pan_hs(btcoexist); btc8821a1ant_action_a2dp_pan_hs(btcoexist);
break; break;
case BT_8821A_1ANT_COEX_ALGO_PANEDR: case BT_8821A_1ANT_COEX_ALGO_PANEDR:
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Action algorithm = PAN(EDR)\n"); "[BTCoex], Action algorithm = PAN(EDR)\n");
halbtc8821a1ant_action_pan_edr(btcoexist); btc8821a1ant_action_pan_edr(btcoexist);
break; break;
case BT_8821A_1ANT_COEX_ALGO_PANHS: case BT_8821A_1ANT_COEX_ALGO_PANHS:
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Action algorithm = HS mode\n"); "[BTCoex], Action algorithm = HS mode\n");
halbtc8821a1ant_action_pan_hs(btcoexist); btc8821a1ant_action_pan_hs(btcoexist);
break; break;
case BT_8821A_1ANT_COEX_ALGO_PANEDR_A2DP: case BT_8821A_1ANT_COEX_ALGO_PANEDR_A2DP:
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Action algorithm = PAN+A2DP\n"); "[BTCoex], Action algorithm = PAN+A2DP\n");
halbtc8821a1ant_action_pan_edr_a2dp(btcoexist); btc8821a1ant_action_pan_edr_a2dp(btcoexist);
break; break;
case BT_8821A_1ANT_COEX_ALGO_PANEDR_HID: case BT_8821A_1ANT_COEX_ALGO_PANEDR_HID:
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Action algorithm = PAN(EDR)+HID\n"); "[BTCoex], Action algorithm = PAN(EDR)+HID\n");
halbtc8821a1ant_action_pan_edr_hid(btcoexist); btc8821a1ant_action_pan_edr_hid(btcoexist);
break; break;
case BT_8821A_1ANT_COEX_ALGO_HID_A2DP_PANEDR: case BT_8821A_1ANT_COEX_ALGO_HID_A2DP_PANEDR:
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
...@@ -1749,19 +1746,19 @@ static void btc8821a1ant_run_sw_coex_mech(struct btc_coexist *btcoexist) ...@@ -1749,19 +1746,19 @@ static void btc8821a1ant_run_sw_coex_mech(struct btc_coexist *btcoexist)
case BT_8821A_1ANT_COEX_ALGO_HID_A2DP: case BT_8821A_1ANT_COEX_ALGO_HID_A2DP:
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Action algorithm = HID+A2DP\n"); "[BTCoex], Action algorithm = HID+A2DP\n");
halbtc8821a1ant_action_hid_a2dp(btcoexist); btc8821a1ant_action_hid_a2dp(btcoexist);
break; break;
default: default:
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Action algorithm = coexist All Off!!\n"); "[BTCoex], Action algorithm = coexist All Off!!\n");
/*halbtc8821a1ant_coex_all_off(btcoexist);*/ /*btc8821a1ant_coex_all_off(btcoexist);*/
break; break;
} }
coex_dm->pre_algorithm = coex_dm->cur_algorithm; coex_dm->pre_algorithm = coex_dm->cur_algorithm;
} }
} }
static void halbtc8821a1ant_run_coexist_mechanism(struct btc_coexist *btcoexist) static void btc8821a1ant_run_coexist_mechanism(struct btc_coexist *btcoexist)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
struct btc_bt_link_info *bt_link_info = &btcoexist->bt_link_info; struct btc_bt_link_info *bt_link_info = &btcoexist->bt_link_info;
...@@ -1797,7 +1794,7 @@ static void halbtc8821a1ant_run_coexist_mechanism(struct btc_coexist *btcoexist) ...@@ -1797,7 +1794,7 @@ static void halbtc8821a1ant_run_coexist_mechanism(struct btc_coexist *btcoexist)
if (wifi_under_5g) { if (wifi_under_5g) {
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], RunCoexistMechanism(), return for 5G <===\n"); "[BTCoex], RunCoexistMechanism(), return for 5G <===\n");
halbtc8821a1ant_coex_under_5g(btcoexist); btc8821a1ant_coex_under_5g(btcoexist);
return; return;
} }
...@@ -1809,20 +1806,28 @@ static void halbtc8821a1ant_run_coexist_mechanism(struct btc_coexist *btcoexist) ...@@ -1809,20 +1806,28 @@ static void halbtc8821a1ant_run_coexist_mechanism(struct btc_coexist *btcoexist)
btcoexist->btc_set(btcoexist, BTC_SET_BL_INC_SCAN_DEV_NUM, btcoexist->btc_set(btcoexist, BTC_SET_BL_INC_SCAN_DEV_NUM,
&increase_scan_dev_num); &increase_scan_dev_num);
btcoexist->btc_get(btcoexist, btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_CONNECTED,
BTC_GET_BL_WIFI_CONNECTED, &wifi_connected); &wifi_connected);
if (!bt_link_info->sco_exist && !bt_link_info->hid_exist) { if (!bt_link_info->sco_exist && !bt_link_info->hid_exist) {
halbtc8821a1ant_limited_tx(btcoexist, NORMAL_EXEC, 0, 0, 0, 0); btc8821a1ant_limited_tx(btcoexist, NORMAL_EXEC, 0, 0, 0, 0);
} else { } else {
if (wifi_connected) { if (wifi_connected) {
wifi_rssi_state = wifi_rssi_state =
halbtc8821a1ant_WifiRssiState(btcoexist, 1, 2, btc8821a1ant_wifi_rssi_state(btcoexist, 1, 2,
30, 0); 30, 0);
halbtc8821a1ant_limited_tx(btcoexist, if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
NORMAL_EXEC, 1, 1, 1, 1); (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8821a1ant_limited_tx(btcoexist,
NORMAL_EXEC, 1, 1,
1, 1);
} else { } else {
halbtc8821a1ant_limited_tx(btcoexist, NORMAL_EXEC, btc8821a1ant_limited_tx(btcoexist,
NORMAL_EXEC, 1, 1,
1, 1);
}
} else {
btc8821a1ant_limited_tx(btcoexist, NORMAL_EXEC,
0, 0, 0, 0); 0, 0, 0, 0);
} }
} }
...@@ -1837,17 +1842,17 @@ static void halbtc8821a1ant_run_coexist_mechanism(struct btc_coexist *btcoexist) ...@@ -1837,17 +1842,17 @@ static void halbtc8821a1ant_run_coexist_mechanism(struct btc_coexist *btcoexist)
bt_ctrl_agg_buf_size = true; bt_ctrl_agg_buf_size = true;
agg_buf_size = 0x8; agg_buf_size = 0x8;
} }
halbtc8821a1ant_limited_rx(btcoexist, NORMAL_EXEC, false, btc8821a1ant_limited_rx(btcoexist, NORMAL_EXEC, false,
bt_ctrl_agg_buf_size, agg_buf_size); bt_ctrl_agg_buf_size, agg_buf_size);
btc8821a1ant_run_sw_coex_mech(btcoexist); btc8821a1ant_run_sw_coex_mech(btcoexist);
btcoexist->btc_get(btcoexist, BTC_GET_BL_HS_OPERATION, &bt_hs_on); btcoexist->btc_get(btcoexist, BTC_GET_BL_HS_OPERATION, &bt_hs_on);
if (coex_sta->c2h_bt_inquiry_page) { if (coex_sta->c2h_bt_inquiry_page) {
halbtc8821a1ant_action_bt_inquiry(btcoexist); btc8821a1ant_action_bt_inquiry(btcoexist);
return; return;
} else if (bt_hs_on) { } else if (bt_hs_on) {
halbtc8821a1ant_action_hs(btcoexist); btc8821a1ant_action_hs(btcoexist);
return; return;
} }
...@@ -1864,24 +1869,25 @@ static void halbtc8821a1ant_run_coexist_mechanism(struct btc_coexist *btcoexist) ...@@ -1864,24 +1869,25 @@ static void halbtc8821a1ant_run_coexist_mechanism(struct btc_coexist *btcoexist)
if (scan || link || roam) if (scan || link || roam)
btc8821a1ant_act_wifi_not_conn_scan(btcoexist); btc8821a1ant_act_wifi_not_conn_scan(btcoexist);
else else
halbtc8821a1ant_action_wifi_not_connected(btcoexist); btc8821a1ant_action_wifi_not_connected(btcoexist);
} else { } else {
/* wifi LPS/Busy*/ /* wifi LPS/Busy */
halbtc8821a1ant_action_wifi_connected(btcoexist); btc8821a1ant_action_wifi_connected(btcoexist);
} }
} }
static void halbtc8821a1ant_init_coex_dm(struct btc_coexist *btcoexist) static void btc8821a1ant_init_coex_dm(struct btc_coexist *btcoexist)
{ {
/* force to reset coex mechanism*/ /* force to reset coex mechanism
/* sw all off*/ * sw all off
halbtc8821a1ant_sw_mechanism(btcoexist, false); */
btc8821a1ant_sw_mechanism(btcoexist, false);
halbtc8821a1ant_ps_tdma(btcoexist, FORCE_EXEC, false, 8); btc8821a1ant_ps_tdma(btcoexist, FORCE_EXEC, false, 8);
halbtc8821a1ant_coex_table_with_type(btcoexist, FORCE_EXEC, 0); btc8821a1ant_coex_table_with_type(btcoexist, FORCE_EXEC, 0);
} }
static void halbtc8821a1ant_init_hw_config(struct btc_coexist *btcoexist, static void btc8821a1ant_init_hw_config(struct btc_coexist *btcoexist,
bool back_up) bool back_up)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
...@@ -1902,7 +1908,7 @@ static void halbtc8821a1ant_init_hw_config(struct btc_coexist *btcoexist, ...@@ -1902,7 +1908,7 @@ static void halbtc8821a1ant_init_hw_config(struct btc_coexist *btcoexist,
btcoexist->btc_read_1byte(btcoexist, 0x456); btcoexist->btc_read_1byte(btcoexist, 0x456);
} }
/* 0x790[5:0] = 0x5*/ /* 0x790[5:0] = 0x5 */
u1_tmp = btcoexist->btc_read_1byte(btcoexist, 0x790); u1_tmp = btcoexist->btc_read_1byte(btcoexist, 0x790);
u1_tmp &= 0xc0; u1_tmp &= 0xc0;
u1_tmp |= 0x5; u1_tmp |= 0x5;
...@@ -1910,35 +1916,33 @@ static void halbtc8821a1ant_init_hw_config(struct btc_coexist *btcoexist, ...@@ -1910,35 +1916,33 @@ static void halbtc8821a1ant_init_hw_config(struct btc_coexist *btcoexist,
btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_UNDER_5G, &wifi_under_5g); btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_UNDER_5G, &wifi_under_5g);
/*Antenna config*/ /* Antenna config */
if (wifi_under_5g) if (wifi_under_5g)
halbtc8821a1ant_set_ant_path(btcoexist, BTC_ANT_PATH_BT, btc8821a1ant_set_ant_path(btcoexist, BTC_ANT_PATH_BT,
true, false); true, false);
else else
halbtc8821a1ant_set_ant_path(btcoexist, BTC_ANT_PATH_PTA, btc8821a1ant_set_ant_path(btcoexist, BTC_ANT_PATH_PTA,
true, false); true, false);
/* PTA parameter*/ /* PTA parameter */
halbtc8821a1ant_coex_table_with_type(btcoexist, FORCE_EXEC, 0); btc8821a1ant_coex_table_with_type(btcoexist, FORCE_EXEC, 0);
/* Enable counter statistics*/ /* Enable counter statistics
/*0x76e[3] =1, WLAN_Act control by PTA*/ * 0x76e[3] =1, WLAN_Act control by PTA
*/
btcoexist->btc_write_1byte(btcoexist, 0x76e, 0xc); btcoexist->btc_write_1byte(btcoexist, 0x76e, 0xc);
btcoexist->btc_write_1byte(btcoexist, 0x778, 0x3); btcoexist->btc_write_1byte(btcoexist, 0x778, 0x3);
btcoexist->btc_write_1byte_bitmask(btcoexist, 0x40, 0x20, 0x1); btcoexist->btc_write_1byte_bitmask(btcoexist, 0x40, 0x20, 0x1);
} }
/*============================================================*/ /**************************************************************
/* work around function start with wa_halbtc8821a1ant_*/ * extern function start with ex_btc8821a1ant_
/*============================================================*/ **************************************************************/
/*============================================================*/ void ex_btc8821a1ant_init_hwconfig(struct btc_coexist *btcoexist)
/* extern function start with EXhalbtc8821a1ant_*/
/*============================================================*/
void ex_halbtc8821a1ant_init_hwconfig(struct btc_coexist *btcoexist)
{ {
halbtc8821a1ant_init_hw_config(btcoexist, true); btc8821a1ant_init_hw_config(btcoexist, true);
} }
void ex_halbtc8821a1ant_init_coex_dm(struct btc_coexist *btcoexist) void ex_btc8821a1ant_init_coex_dm(struct btc_coexist *btcoexist)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
...@@ -1947,12 +1951,12 @@ void ex_halbtc8821a1ant_init_coex_dm(struct btc_coexist *btcoexist) ...@@ -1947,12 +1951,12 @@ void ex_halbtc8821a1ant_init_coex_dm(struct btc_coexist *btcoexist)
btcoexist->stop_coex_dm = false; btcoexist->stop_coex_dm = false;
halbtc8821a1ant_init_coex_dm(btcoexist); btc8821a1ant_init_coex_dm(btcoexist);
halbtc8821a1ant_query_bt_info(btcoexist); btc8821a1ant_query_bt_info(btcoexist);
} }
void ex_halbtc8821a1ant_display_coex_info(struct btc_coexist *btcoexist) void ex_btc8821a1ant_display_coex_info(struct btc_coexist *btcoexist)
{ {
struct btc_board_info *board_info = &btcoexist->board_info; struct btc_board_info *board_info = &btcoexist->board_info;
struct btc_stack_info *stack_info = &btcoexist->stack_info; struct btc_stack_info *stack_info = &btcoexist->stack_info;
...@@ -2097,7 +2101,7 @@ void ex_halbtc8821a1ant_display_coex_info(struct btc_coexist *btcoexist) ...@@ -2097,7 +2101,7 @@ void ex_halbtc8821a1ant_display_coex_info(struct btc_coexist *btcoexist)
"\r\n %-35s = %s/%s, (0x%x/0x%x)", "\r\n %-35s = %s/%s, (0x%x/0x%x)",
"PS state, IPS/LPS, (lps/rpwm)", "PS state, IPS/LPS, (lps/rpwm)",
((coex_sta->under_ips ? "IPS ON" : "IPS OFF")), ((coex_sta->under_ips ? "IPS ON" : "IPS OFF")),
((coex_sta->under_Lps ? "LPS ON" : "LPS OFF")), ((coex_sta->under_lps ? "LPS ON" : "LPS OFF")),
btcoexist->bt_info.lps_val, btcoexist->bt_info.lps_val,
btcoexist->bt_info.rpwm_val); btcoexist->bt_info.rpwm_val);
btcoexist->btc_disp_dbg_msg(btcoexist, BTC_DBG_DISP_FW_PWR_MODE_CMD); btcoexist->btc_disp_dbg_msg(btcoexist, BTC_DBG_DISP_FW_PWR_MODE_CMD);
...@@ -2122,7 +2126,7 @@ void ex_halbtc8821a1ant_display_coex_info(struct btc_coexist *btcoexist) ...@@ -2122,7 +2126,7 @@ void ex_halbtc8821a1ant_display_coex_info(struct btc_coexist *btcoexist)
"\r\n %-35s = 0x%x ", "Rate Mask", "\r\n %-35s = 0x%x ", "Rate Mask",
btcoexist->bt_info.ra_mask); btcoexist->bt_info.ra_mask);
/* Fw mechanism*/ /* Fw mechanism */
RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG, "\r\n %-35s", RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG, "\r\n %-35s",
"============[Fw mechanism]============"); "============[Fw mechanism]============");
...@@ -2144,7 +2148,7 @@ void ex_halbtc8821a1ant_display_coex_info(struct btc_coexist *btcoexist) ...@@ -2144,7 +2148,7 @@ void ex_halbtc8821a1ant_display_coex_info(struct btc_coexist *btcoexist)
coex_dm->cur_ignore_wlan_act); coex_dm->cur_ignore_wlan_act);
} }
/* Hw setting*/ /* Hw setting */
RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG, RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG,
"\r\n %-35s", "============[Hw setting]============"); "\r\n %-35s", "============[Hw setting]============");
...@@ -2227,12 +2231,12 @@ void ex_halbtc8821a1ant_display_coex_info(struct btc_coexist *btcoexist) ...@@ -2227,12 +2231,12 @@ void ex_halbtc8821a1ant_display_coex_info(struct btc_coexist *btcoexist)
"\r\n %-35s = %d/ %d", "0x774(low-pri rx/tx)", "\r\n %-35s = %d/ %d", "0x774(low-pri rx/tx)",
coex_sta->low_priority_rx, coex_sta->low_priority_tx); coex_sta->low_priority_rx, coex_sta->low_priority_tx);
#if (BT_AUTO_REPORT_ONLY_8821A_1ANT == 1) #if (BT_AUTO_REPORT_ONLY_8821A_1ANT == 1)
halbtc8821a1ant_monitor_bt_ctr(btcoexist); btc8821a1ant_monitor_bt_ctr(btcoexist);
#endif #endif
btcoexist->btc_disp_dbg_msg(btcoexist, BTC_DBG_DISP_COEX_STATISTICS); btcoexist->btc_disp_dbg_msg(btcoexist, BTC_DBG_DISP_COEX_STATISTICS);
} }
void ex_halbtc8821a1ant_ips_notify(struct btc_coexist *btcoexist, u8 type) void ex_btc8821a1ant_ips_notify(struct btc_coexist *btcoexist, u8 type)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
...@@ -2243,22 +2247,22 @@ void ex_halbtc8821a1ant_ips_notify(struct btc_coexist *btcoexist, u8 type) ...@@ -2243,22 +2247,22 @@ void ex_halbtc8821a1ant_ips_notify(struct btc_coexist *btcoexist, u8 type)
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], IPS ENTER notify\n"); "[BTCoex], IPS ENTER notify\n");
coex_sta->under_ips = true; coex_sta->under_ips = true;
halbtc8821a1ant_set_ant_path(btcoexist, btc8821a1ant_set_ant_path(btcoexist,
BTC_ANT_PATH_BT, false, true); BTC_ANT_PATH_BT, false, true);
/*set PTA control*/ /* set PTA control */
halbtc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 8); btc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 8);
halbtc8821a1ant_coex_table_with_type(btcoexist, btc8821a1ant_coex_table_with_type(btcoexist,
NORMAL_EXEC, 0); NORMAL_EXEC, 0);
} else if (BTC_IPS_LEAVE == type) { } else if (BTC_IPS_LEAVE == type) {
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], IPS LEAVE notify\n"); "[BTCoex], IPS LEAVE notify\n");
coex_sta->under_ips = false; coex_sta->under_ips = false;
halbtc8821a1ant_run_coexist_mechanism(btcoexist); btc8821a1ant_run_coexist_mechanism(btcoexist);
} }
} }
void ex_halbtc8821a1ant_lps_notify(struct btc_coexist *btcoexist, u8 type) void ex_btc8821a1ant_lps_notify(struct btc_coexist *btcoexist, u8 type)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
...@@ -2268,15 +2272,15 @@ void ex_halbtc8821a1ant_lps_notify(struct btc_coexist *btcoexist, u8 type) ...@@ -2268,15 +2272,15 @@ void ex_halbtc8821a1ant_lps_notify(struct btc_coexist *btcoexist, u8 type)
if (BTC_LPS_ENABLE == type) { if (BTC_LPS_ENABLE == type) {
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], LPS ENABLE notify\n"); "[BTCoex], LPS ENABLE notify\n");
coex_sta->under_Lps = true; coex_sta->under_lps = true;
} else if (BTC_LPS_DISABLE == type) { } else if (BTC_LPS_DISABLE == type) {
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], LPS DISABLE notify\n"); "[BTCoex], LPS DISABLE notify\n");
coex_sta->under_Lps = false; coex_sta->under_lps = false;
} }
} }
void ex_halbtc8821a1ant_scan_notify(struct btc_coexist *btcoexist, u8 type) void ex_btc8821a1ant_scan_notify(struct btc_coexist *btcoexist, u8 type)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
bool wifi_connected = false, bt_hs_on = false; bool wifi_connected = false, bt_hs_on = false;
...@@ -2291,13 +2295,13 @@ void ex_halbtc8821a1ant_scan_notify(struct btc_coexist *btcoexist, u8 type) ...@@ -2291,13 +2295,13 @@ void ex_halbtc8821a1ant_scan_notify(struct btc_coexist *btcoexist, u8 type)
btcoexist->btc_get(btcoexist, btcoexist->btc_get(btcoexist,
BTC_GET_BL_WIFI_CONNECTED, &wifi_connected); BTC_GET_BL_WIFI_CONNECTED, &wifi_connected);
halbtc8821a1ant_query_bt_info(btcoexist); btc8821a1ant_query_bt_info(btcoexist);
if (coex_sta->c2h_bt_inquiry_page) { if (coex_sta->c2h_bt_inquiry_page) {
halbtc8821a1ant_action_bt_inquiry(btcoexist); btc8821a1ant_action_bt_inquiry(btcoexist);
return; return;
} else if (bt_hs_on) { } else if (bt_hs_on) {
halbtc8821a1ant_action_hs(btcoexist); btc8821a1ant_action_hs(btcoexist);
return; return;
} }
...@@ -2305,25 +2309,25 @@ void ex_halbtc8821a1ant_scan_notify(struct btc_coexist *btcoexist, u8 type) ...@@ -2305,25 +2309,25 @@ void ex_halbtc8821a1ant_scan_notify(struct btc_coexist *btcoexist, u8 type)
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], SCAN START notify\n"); "[BTCoex], SCAN START notify\n");
if (!wifi_connected) { if (!wifi_connected) {
/* non-connected scan*/ /* non-connected scan */
btc8821a1ant_act_wifi_not_conn_scan(btcoexist); btc8821a1ant_act_wifi_not_conn_scan(btcoexist);
} else { } else {
/* wifi is connected*/ /* wifi is connected */
halbtc8821a1ant_action_wifi_connected_scan(btcoexist); btc8821a1ant_action_wifi_connected_scan(btcoexist);
} }
} else if (BTC_SCAN_FINISH == type) { } else if (BTC_SCAN_FINISH == type) {
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], SCAN FINISH notify\n"); "[BTCoex], SCAN FINISH notify\n");
if (!wifi_connected) { if (!wifi_connected) {
/* non-connected scan*/ /* non-connected scan */
halbtc8821a1ant_action_wifi_not_connected(btcoexist); btc8821a1ant_action_wifi_not_connected(btcoexist);
} else { } else {
halbtc8821a1ant_action_wifi_connected(btcoexist); btc8821a1ant_action_wifi_connected(btcoexist);
} }
} }
} }
void ex_halbtc8821a1ant_connect_notify(struct btc_coexist *btcoexist, u8 type) void ex_btc8821a1ant_connect_notify(struct btc_coexist *btcoexist, u8 type)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
bool wifi_connected = false, bt_hs_on = false; bool wifi_connected = false, bt_hs_on = false;
...@@ -2335,10 +2339,10 @@ void ex_halbtc8821a1ant_connect_notify(struct btc_coexist *btcoexist, u8 type) ...@@ -2335,10 +2339,10 @@ void ex_halbtc8821a1ant_connect_notify(struct btc_coexist *btcoexist, u8 type)
btcoexist->btc_get(btcoexist, BTC_GET_BL_HS_OPERATION, &bt_hs_on); btcoexist->btc_get(btcoexist, BTC_GET_BL_HS_OPERATION, &bt_hs_on);
if (coex_sta->c2h_bt_inquiry_page) { if (coex_sta->c2h_bt_inquiry_page) {
halbtc8821a1ant_action_bt_inquiry(btcoexist); btc8821a1ant_action_bt_inquiry(btcoexist);
return; return;
} else if (bt_hs_on) { } else if (bt_hs_on) {
halbtc8821a1ant_action_hs(btcoexist); btc8821a1ant_action_hs(btcoexist);
return; return;
} }
...@@ -2353,15 +2357,15 @@ void ex_halbtc8821a1ant_connect_notify(struct btc_coexist *btcoexist, u8 type) ...@@ -2353,15 +2357,15 @@ void ex_halbtc8821a1ant_connect_notify(struct btc_coexist *btcoexist, u8 type)
btcoexist->btc_get(btcoexist, btcoexist->btc_get(btcoexist,
BTC_GET_BL_WIFI_CONNECTED, &wifi_connected); BTC_GET_BL_WIFI_CONNECTED, &wifi_connected);
if (!wifi_connected) { if (!wifi_connected) {
/* non-connected scan*/ /* non-connected scan */
halbtc8821a1ant_action_wifi_not_connected(btcoexist); btc8821a1ant_action_wifi_not_connected(btcoexist);
} else { } else {
halbtc8821a1ant_action_wifi_connected(btcoexist); btc8821a1ant_action_wifi_connected(btcoexist);
} }
} }
} }
void ex_halbtc8821a1ant_media_status_notify(struct btc_coexist *btcoexist, void ex_btc8821a1ant_media_status_notify(struct btc_coexist *btcoexist,
u8 type) u8 type)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
...@@ -2382,17 +2386,16 @@ void ex_halbtc8821a1ant_media_status_notify(struct btc_coexist *btcoexist, ...@@ -2382,17 +2386,16 @@ void ex_halbtc8821a1ant_media_status_notify(struct btc_coexist *btcoexist,
"[BTCoex], MEDIA disconnect notify\n"); "[BTCoex], MEDIA disconnect notify\n");
} }
/* only 2.4G we need to inform bt the chnl mask*/ /* only 2.4G we need to inform bt the chnl mask */
btcoexist->btc_get(btcoexist, btcoexist->btc_get(btcoexist,
BTC_GET_U1_WIFI_CENTRAL_CHNL, BTC_GET_U1_WIFI_CENTRAL_CHNL,
&wifi_central_chnl); &wifi_central_chnl);
if ((BTC_MEDIA_CONNECT == type) && if ((type == BTC_MEDIA_CONNECT) &&
(wifi_central_chnl <= 14)) { (wifi_central_chnl <= 14)) {
/*h2c_parameter[0] = 0x1;*/
h2c_parameter[0] = 0x0; h2c_parameter[0] = 0x0;
h2c_parameter[1] = wifi_central_chnl; h2c_parameter[1] = wifi_central_chnl;
btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw); btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
if (BTC_WIFI_BW_HT40 == wifi_bw) if (wifi_bw == BTC_WIFI_BW_HT40)
h2c_parameter[2] = 0x30; h2c_parameter[2] = 0x30;
else else
h2c_parameter[2] = 0x20; h2c_parameter[2] = 0x20;
...@@ -2411,7 +2414,7 @@ void ex_halbtc8821a1ant_media_status_notify(struct btc_coexist *btcoexist, ...@@ -2411,7 +2414,7 @@ void ex_halbtc8821a1ant_media_status_notify(struct btc_coexist *btcoexist,
btcoexist->btc_fill_h2c(btcoexist, 0x66, 3, h2c_parameter); btcoexist->btc_fill_h2c(btcoexist, 0x66, 3, h2c_parameter);
} }
void ex_halbtc8821a1ant_special_packet_notify(struct btc_coexist *btcoexist, void ex_btc8821a1ant_special_packet_notify(struct btc_coexist *btcoexist,
u8 type) u8 type)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
...@@ -2426,10 +2429,10 @@ void ex_halbtc8821a1ant_special_packet_notify(struct btc_coexist *btcoexist, ...@@ -2426,10 +2429,10 @@ void ex_halbtc8821a1ant_special_packet_notify(struct btc_coexist *btcoexist,
btcoexist->btc_get(btcoexist, BTC_GET_BL_HS_OPERATION, &bt_hs_on); btcoexist->btc_get(btcoexist, BTC_GET_BL_HS_OPERATION, &bt_hs_on);
if (coex_sta->c2h_bt_inquiry_page) { if (coex_sta->c2h_bt_inquiry_page) {
halbtc8821a1ant_action_bt_inquiry(btcoexist); btc8821a1ant_action_bt_inquiry(btcoexist);
return; return;
} else if (bt_hs_on) { } else if (bt_hs_on) {
halbtc8821a1ant_action_hs(btcoexist); btc8821a1ant_action_hs(btcoexist);
return; return;
} }
...@@ -2441,12 +2444,13 @@ void ex_halbtc8821a1ant_special_packet_notify(struct btc_coexist *btcoexist, ...@@ -2441,12 +2444,13 @@ void ex_halbtc8821a1ant_special_packet_notify(struct btc_coexist *btcoexist,
} }
} }
void ex_halbtc8821a1ant_bt_info_notify(struct btc_coexist *btcoexist, void ex_btc8821a1ant_bt_info_notify(struct btc_coexist *btcoexist,
u8 *tmp_buf, u8 length) u8 *tmp_buf, u8 length)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
u8 i;
u8 bt_info = 0; u8 bt_info = 0;
u8 i, rsp_source = 0; u8 rsp_source = 0;
bool wifi_connected = false; bool wifi_connected = false;
bool bt_busy = false; bool bt_busy = false;
bool wifi_under_5g = false; bool wifi_under_5g = false;
...@@ -2456,7 +2460,7 @@ void ex_halbtc8821a1ant_bt_info_notify(struct btc_coexist *btcoexist, ...@@ -2456,7 +2460,7 @@ void ex_halbtc8821a1ant_bt_info_notify(struct btc_coexist *btcoexist,
btcoexist->btc_get(btcoexist, btcoexist->btc_get(btcoexist,
BTC_GET_BL_WIFI_UNDER_5G, &wifi_under_5g); BTC_GET_BL_WIFI_UNDER_5G, &wifi_under_5g);
rsp_source = tmp_buf[0]&0xf; rsp_source = tmp_buf[0] & 0xf;
if (rsp_source >= BT_INFO_SRC_8821A_1ANT_MAX) if (rsp_source >= BT_INFO_SRC_8821A_1ANT_MAX)
rsp_source = BT_INFO_SRC_8821A_1ANT_WIFI_FW; rsp_source = BT_INFO_SRC_8821A_1ANT_WIFI_FW;
coex_sta->bt_info_c2h_cnt[rsp_source]++; coex_sta->bt_info_c2h_cnt[rsp_source]++;
...@@ -2468,7 +2472,7 @@ void ex_halbtc8821a1ant_bt_info_notify(struct btc_coexist *btcoexist, ...@@ -2468,7 +2472,7 @@ void ex_halbtc8821a1ant_bt_info_notify(struct btc_coexist *btcoexist,
coex_sta->bt_info_c2h[rsp_source][i] = tmp_buf[i]; coex_sta->bt_info_c2h[rsp_source][i] = tmp_buf[i];
if (i == 1) if (i == 1)
bt_info = tmp_buf[i]; bt_info = tmp_buf[i];
if (i == length-1) { if (i == length - 1) {
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"0x%02x]\n", tmp_buf[i]); "0x%02x]\n", tmp_buf[i]);
} else { } else {
...@@ -2487,19 +2491,19 @@ void ex_halbtc8821a1ant_bt_info_notify(struct btc_coexist *btcoexist, ...@@ -2487,19 +2491,19 @@ void ex_halbtc8821a1ant_bt_info_notify(struct btc_coexist *btcoexist,
coex_sta->bt_info_ext = coex_sta->bt_info_ext =
coex_sta->bt_info_c2h[rsp_source][4]; coex_sta->bt_info_c2h[rsp_source][4];
/* Here we need to resend some wifi info to BT*/ /* Here we need to resend some wifi info to BT
/* because bt is reset and loss of the info.*/ * because bt is reset and lost the info
*/
if (coex_sta->bt_info_ext & BIT1) { if (coex_sta->bt_info_ext & BIT1) {
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], BT ext info bit1 check, send wifi BW&Chnl to BT!!\n"); "[BTCoex], BT ext info bit1 check, send wifi BW&Chnl to BT!!\n");
btcoexist->btc_get(btcoexist, btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_CONNECTED,
BTC_GET_BL_WIFI_CONNECTED,
&wifi_connected); &wifi_connected);
if (wifi_connected) { if (wifi_connected) {
ex_halbtc8821a1ant_media_status_notify(btcoexist, ex_btc8821a1ant_media_status_notify(btcoexist,
BTC_MEDIA_CONNECT); BTC_MEDIA_CONNECT);
} else { } else {
ex_halbtc8821a1ant_media_status_notify(btcoexist, ex_btc8821a1ant_media_status_notify(btcoexist,
BTC_MEDIA_DISCONNECT); BTC_MEDIA_DISCONNECT);
} }
} }
...@@ -2509,28 +2513,28 @@ void ex_halbtc8821a1ant_bt_info_notify(struct btc_coexist *btcoexist, ...@@ -2509,28 +2513,28 @@ void ex_halbtc8821a1ant_bt_info_notify(struct btc_coexist *btcoexist,
!btcoexist->stop_coex_dm) { !btcoexist->stop_coex_dm) {
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], BT ext info bit3 check, set BT NOT to ignore Wlan active!!\n"); "[BTCoex], BT ext info bit3 check, set BT NOT to ignore Wlan active!!\n");
halbtc8821a1ant_ignore_wlan_act(btcoexist, btc8821a1ant_ignore_wlan_act(btcoexist,
FORCE_EXEC, FORCE_EXEC,
false); false);
} }
} }
} }
/* check BIT2 first ==> check if bt is under inquiry or page scan*/ /* check BIT2 first ==> check if bt is under inquiry or page scan */
if (bt_info & BT_INFO_8821A_1ANT_B_INQ_PAGE) if (bt_info & BT_INFO_8821A_1ANT_B_INQ_PAGE)
coex_sta->c2h_bt_inquiry_page = true; coex_sta->c2h_bt_inquiry_page = true;
else else
coex_sta->c2h_bt_inquiry_page = false; coex_sta->c2h_bt_inquiry_page = false;
/* set link exist status*/ /* set link exist status */
if (!(bt_info&BT_INFO_8821A_1ANT_B_CONNECTION)) { if (!(bt_info & BT_INFO_8821A_1ANT_B_CONNECTION)) {
coex_sta->bt_link_exist = false; coex_sta->bt_link_exist = false;
coex_sta->pan_exist = false; coex_sta->pan_exist = false;
coex_sta->a2dp_exist = false; coex_sta->a2dp_exist = false;
coex_sta->hid_exist = false; coex_sta->hid_exist = false;
coex_sta->sco_exist = false; coex_sta->sco_exist = false;
} else { } else {
/* connection exists*/ /* connection exists */
coex_sta->bt_link_exist = true; coex_sta->bt_link_exist = true;
if (bt_info & BT_INFO_8821A_1ANT_B_FTP) if (bt_info & BT_INFO_8821A_1ANT_B_FTP)
coex_sta->pan_exist = true; coex_sta->pan_exist = true;
...@@ -2550,14 +2554,14 @@ void ex_halbtc8821a1ant_bt_info_notify(struct btc_coexist *btcoexist, ...@@ -2550,14 +2554,14 @@ void ex_halbtc8821a1ant_bt_info_notify(struct btc_coexist *btcoexist,
coex_sta->sco_exist = false; coex_sta->sco_exist = false;
} }
halbtc8821a1ant_update_bt_link_info(btcoexist); btc8821a1ant_update_bt_link_info(btcoexist);
if (!(bt_info&BT_INFO_8821A_1ANT_B_CONNECTION)) { if (!(bt_info&BT_INFO_8821A_1ANT_B_CONNECTION)) {
coex_dm->bt_status = BT_8821A_1ANT_BT_STATUS_NON_CONNECTED_IDLE; coex_dm->bt_status = BT_8821A_1ANT_BT_STATUS_NON_CONNECTED_IDLE;
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], BtInfoNotify(), BT Non-Connected idle!!!\n"); "[BTCoex], BtInfoNotify(), BT Non-Connected idle!!!\n");
} else if (bt_info == BT_INFO_8821A_1ANT_B_CONNECTION) { } else if (bt_info == BT_INFO_8821A_1ANT_B_CONNECTION) {
/* connection exists but no busy*/ /* connection exists but no busy */
coex_dm->bt_status = BT_8821A_1ANT_BT_STATUS_CONNECTED_IDLE; coex_dm->bt_status = BT_8821A_1ANT_BT_STATUS_CONNECTED_IDLE;
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], BtInfoNotify(), BT Connected-idle!!!\n"); "[BTCoex], BtInfoNotify(), BT Connected-idle!!!\n");
...@@ -2587,10 +2591,10 @@ void ex_halbtc8821a1ant_bt_info_notify(struct btc_coexist *btcoexist, ...@@ -2587,10 +2591,10 @@ void ex_halbtc8821a1ant_bt_info_notify(struct btc_coexist *btcoexist,
btcoexist->btc_set(btcoexist, btcoexist->btc_set(btcoexist,
BTC_SET_BL_BT_TRAFFIC_BUSY, &bt_busy); BTC_SET_BL_BT_TRAFFIC_BUSY, &bt_busy);
halbtc8821a1ant_run_coexist_mechanism(btcoexist); btc8821a1ant_run_coexist_mechanism(btcoexist);
} }
void ex_halbtc8821a1ant_halt_notify(struct btc_coexist *btcoexist) void ex_btc8821a1ant_halt_notify(struct btc_coexist *btcoexist)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
...@@ -2599,19 +2603,16 @@ void ex_halbtc8821a1ant_halt_notify(struct btc_coexist *btcoexist) ...@@ -2599,19 +2603,16 @@ void ex_halbtc8821a1ant_halt_notify(struct btc_coexist *btcoexist)
btcoexist->stop_coex_dm = true; btcoexist->stop_coex_dm = true;
halbtc8821a1ant_set_ant_path(btcoexist, btc8821a1ant_set_ant_path(btcoexist, BTC_ANT_PATH_BT, false, true);
BTC_ANT_PATH_BT, false, true); btc8821a1ant_ignore_wlan_act(btcoexist, FORCE_EXEC, true);
halbtc8821a1ant_ignore_wlan_act(btcoexist, FORCE_EXEC, true);
halbtc8821a1ant_power_save_state(btcoexist, btc8821a1ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
BTC_PS_WIFI_NATIVE, 0x0, 0x0); btc8821a1ant_ps_tdma(btcoexist, FORCE_EXEC, false, 0);
halbtc8821a1ant_ps_tdma(btcoexist, FORCE_EXEC, false, 0);
ex_halbtc8821a1ant_media_status_notify(btcoexist, ex_btc8821a1ant_media_status_notify(btcoexist, BTC_MEDIA_DISCONNECT);
BTC_MEDIA_DISCONNECT);
} }
void ex_halbtc8821a1ant_pnp_notify(struct btc_coexist *btcoexist, u8 pnp_state) void ex_btc8821a1ant_pnp_notify(struct btc_coexist *btcoexist, u8 pnp_state)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
...@@ -2622,21 +2623,21 @@ void ex_halbtc8821a1ant_pnp_notify(struct btc_coexist *btcoexist, u8 pnp_state) ...@@ -2622,21 +2623,21 @@ void ex_halbtc8821a1ant_pnp_notify(struct btc_coexist *btcoexist, u8 pnp_state)
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Pnp notify to SLEEP\n"); "[BTCoex], Pnp notify to SLEEP\n");
btcoexist->stop_coex_dm = true; btcoexist->stop_coex_dm = true;
halbtc8821a1ant_ignore_wlan_act(btcoexist, FORCE_EXEC, true); btc8821a1ant_ignore_wlan_act(btcoexist, FORCE_EXEC, true);
halbtc8821a1ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE, btc8821a1ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE,
0x0, 0x0); 0x0, 0x0);
halbtc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 9); btc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 9);
} else if (BTC_WIFI_PNP_WAKE_UP == pnp_state) { } else if (BTC_WIFI_PNP_WAKE_UP == pnp_state) {
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Pnp notify to WAKE UP\n"); "[BTCoex], Pnp notify to WAKE UP\n");
btcoexist->stop_coex_dm = false; btcoexist->stop_coex_dm = false;
halbtc8821a1ant_init_hw_config(btcoexist, false); btc8821a1ant_init_hw_config(btcoexist, false);
halbtc8821a1ant_init_coex_dm(btcoexist); btc8821a1ant_init_coex_dm(btcoexist);
halbtc8821a1ant_query_bt_info(btcoexist); btc8821a1ant_query_bt_info(btcoexist);
} }
} }
void ex_halbtc8821a1ant_periodical(struct btc_coexist *btcoexist) void ex_btc8821a1ant_periodical(struct btc_coexist *btcoexist)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
static u8 dis_ver_info_cnt; static u8 dis_ver_info_cnt;
...@@ -2674,8 +2675,8 @@ void ex_halbtc8821a1ant_periodical(struct btc_coexist *btcoexist) ...@@ -2674,8 +2675,8 @@ void ex_halbtc8821a1ant_periodical(struct btc_coexist *btcoexist)
} }
#if (BT_AUTO_REPORT_ONLY_8821A_1ANT == 0) #if (BT_AUTO_REPORT_ONLY_8821A_1ANT == 0)
halbtc8821a1ant_query_bt_info(btcoexist); btc8821a1ant_query_bt_info(btcoexist);
halbtc8821a1ant_monitor_bt_ctr(btcoexist); btc8821a1ant_monitor_bt_ctr(btcoexist);
#else #else
coex_sta->special_pkt_period_cnt++; coex_sta->special_pkt_period_cnt++;
#endif #endif
......
...@@ -146,7 +146,7 @@ struct coex_sta_8821a_1ant { ...@@ -146,7 +146,7 @@ struct coex_sta_8821a_1ant {
bool hid_exist; bool hid_exist;
bool pan_exist; bool pan_exist;
bool under_Lps; bool under_lps;
bool under_ips; bool under_ips;
u32 special_pkt_period_cnt; u32 special_pkt_period_cnt;
u32 high_priority_tx; u32 high_priority_tx;
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
* *
*****************************************************************************/ *****************************************************************************/
/*============================================================ /************************************************************
* Description: * Description:
* *
* This file is for RTL8821A Co-exist mechanism * This file is for RTL8821A Co-exist mechanism
...@@ -32,18 +32,15 @@ ...@@ -32,18 +32,15 @@
* 2012/08/22 Cosa first check in. * 2012/08/22 Cosa first check in.
* 2012/11/14 Cosa Revise for 8821A 2Ant out sourcing. * 2012/11/14 Cosa Revise for 8821A 2Ant out sourcing.
* *
*============================================================ ************************************************************/
*/
/*============================================================ /************************************************************
* include files * include files
*============================================================ ************************************************************/
*/
#include "halbt_precomp.h" #include "halbt_precomp.h"
/*============================================================ /************************************************************
* Global variables, these are static variables * Global variables, these are static variables
*============================================================ ************************************************************/
*/
static struct coex_dm_8821a_2ant glcoex_dm_8821a_2ant; static struct coex_dm_8821a_2ant glcoex_dm_8821a_2ant;
static struct coex_dm_8821a_2ant *coex_dm = &glcoex_dm_8821a_2ant; static struct coex_dm_8821a_2ant *coex_dm = &glcoex_dm_8821a_2ant;
static struct coex_sta_8821a_2ant glcoex_sta_8821a_2ant; static struct coex_sta_8821a_2ant glcoex_sta_8821a_2ant;
...@@ -58,14 +55,12 @@ static const char *const glbt_info_src_8821a_2ant[] = { ...@@ -58,14 +55,12 @@ static const char *const glbt_info_src_8821a_2ant[] = {
static u32 glcoex_ver_date_8821a_2ant = 20130618; static u32 glcoex_ver_date_8821a_2ant = 20130618;
static u32 glcoex_ver_8821a_2ant = 0x5050; static u32 glcoex_ver_8821a_2ant = 0x5050;
/*============================================================ /************************************************************
* local function proto type if needed * local function proto type if needed
*============================================================ *
*============================================================ * local function start with btc8821a2ant_
* local function start with halbtc8821a2ant_ ************************************************************/
*============================================================ static u8 btc8821a2ant_bt_rssi_state(struct btc_coexist *btcoexist,
*/
static u8 halbtc8821a2ant_bt_rssi_state(struct btc_coexist *btcoexist,
u8 level_num, u8 rssi_thresh, u8 level_num, u8 rssi_thresh,
u8 rssi_thresh1) u8 rssi_thresh1)
{ {
...@@ -78,9 +73,8 @@ static u8 halbtc8821a2ant_bt_rssi_state(struct btc_coexist *btcoexist, ...@@ -78,9 +73,8 @@ static u8 halbtc8821a2ant_bt_rssi_state(struct btc_coexist *btcoexist,
if (level_num == 2) { if (level_num == 2) {
if ((coex_sta->pre_bt_rssi_state == BTC_RSSI_STATE_LOW) || if ((coex_sta->pre_bt_rssi_state == BTC_RSSI_STATE_LOW) ||
(coex_sta->pre_bt_rssi_state == BTC_RSSI_STATE_STAY_LOW)) { (coex_sta->pre_bt_rssi_state == BTC_RSSI_STATE_STAY_LOW)) {
long tmp = rssi_thresh + if (bt_rssi >=
BTC_RSSI_COEX_THRESH_TOL_8821A_2ANT; rssi_thresh + BTC_RSSI_COEX_THRESH_TOL_8821A_2ANT) {
if (bt_rssi >= tmp) {
bt_rssi_state = BTC_RSSI_STATE_HIGH; bt_rssi_state = BTC_RSSI_STATE_HIGH;
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], BT Rssi state switch to High\n"); "[BTCoex], BT Rssi state switch to High\n");
...@@ -110,7 +104,8 @@ static u8 halbtc8821a2ant_bt_rssi_state(struct btc_coexist *btcoexist, ...@@ -110,7 +104,8 @@ static u8 halbtc8821a2ant_bt_rssi_state(struct btc_coexist *btcoexist,
if ((coex_sta->pre_bt_rssi_state == BTC_RSSI_STATE_LOW) || if ((coex_sta->pre_bt_rssi_state == BTC_RSSI_STATE_LOW) ||
(coex_sta->pre_bt_rssi_state == BTC_RSSI_STATE_STAY_LOW)) { (coex_sta->pre_bt_rssi_state == BTC_RSSI_STATE_STAY_LOW)) {
if (bt_rssi >= if (bt_rssi >=
(rssi_thresh+BTC_RSSI_COEX_THRESH_TOL_8821A_2ANT)) { (rssi_thresh +
BTC_RSSI_COEX_THRESH_TOL_8821A_2ANT)) {
bt_rssi_state = BTC_RSSI_STATE_MEDIUM; bt_rssi_state = BTC_RSSI_STATE_MEDIUM;
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], BT Rssi state switch to Medium\n"); "[BTCoex], BT Rssi state switch to Medium\n");
...@@ -156,7 +151,7 @@ static u8 halbtc8821a2ant_bt_rssi_state(struct btc_coexist *btcoexist, ...@@ -156,7 +151,7 @@ static u8 halbtc8821a2ant_bt_rssi_state(struct btc_coexist *btcoexist,
return bt_rssi_state; return bt_rssi_state;
} }
static u8 halbtc8821a2ant_wifi_rssi_state(struct btc_coexist *btcoexist, static u8 btc8821a2ant_wifi_rssi_state(struct btc_coexist *btcoexist,
u8 index, u8 level_num, u8 index, u8 level_num,
u8 rssi_thresh, u8 rssi_thresh1) u8 rssi_thresh, u8 rssi_thresh1)
{ {
...@@ -204,7 +199,8 @@ static u8 halbtc8821a2ant_wifi_rssi_state(struct btc_coexist *btcoexist, ...@@ -204,7 +199,8 @@ static u8 halbtc8821a2ant_wifi_rssi_state(struct btc_coexist *btcoexist,
(coex_sta->pre_wifi_rssi_state[index] == (coex_sta->pre_wifi_rssi_state[index] ==
BTC_RSSI_STATE_STAY_LOW)) { BTC_RSSI_STATE_STAY_LOW)) {
if (wifi_rssi >= if (wifi_rssi >=
(rssi_thresh+BTC_RSSI_COEX_THRESH_TOL_8821A_2ANT)) { (rssi_thresh +
BTC_RSSI_COEX_THRESH_TOL_8821A_2ANT)) {
wifi_rssi_state = BTC_RSSI_STATE_MEDIUM; wifi_rssi_state = BTC_RSSI_STATE_MEDIUM;
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], wifi RSSI state switch to Medium\n"); "[BTCoex], wifi RSSI state switch to Medium\n");
...@@ -248,7 +244,7 @@ static u8 halbtc8821a2ant_wifi_rssi_state(struct btc_coexist *btcoexist, ...@@ -248,7 +244,7 @@ static u8 halbtc8821a2ant_wifi_rssi_state(struct btc_coexist *btcoexist,
return wifi_rssi_state; return wifi_rssi_state;
} }
static void halbtc8821a2ant_monitor_bt_ctr(struct btc_coexist *btcoexist) static void btc8821a2ant_monitor_bt_ctr(struct btc_coexist *btcoexist)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
u32 reg_hp_txrx, reg_lp_txrx, u4tmp; u32 reg_hp_txrx, reg_lp_txrx, u4tmp;
...@@ -259,11 +255,11 @@ static void halbtc8821a2ant_monitor_bt_ctr(struct btc_coexist *btcoexist) ...@@ -259,11 +255,11 @@ static void halbtc8821a2ant_monitor_bt_ctr(struct btc_coexist *btcoexist)
u4tmp = btcoexist->btc_read_4byte(btcoexist, reg_hp_txrx); u4tmp = btcoexist->btc_read_4byte(btcoexist, reg_hp_txrx);
reg_hp_tx = u4tmp & MASKLWORD; reg_hp_tx = u4tmp & MASKLWORD;
reg_hp_rx = (u4tmp & MASKHWORD)>>16; reg_hp_rx = (u4tmp & MASKHWORD) >> 16;
u4tmp = btcoexist->btc_read_4byte(btcoexist, reg_lp_txrx); u4tmp = btcoexist->btc_read_4byte(btcoexist, reg_lp_txrx);
reg_lp_tx = u4tmp & MASKLWORD; reg_lp_tx = u4tmp & MASKLWORD;
reg_lp_rx = (u4tmp & MASKHWORD)>>16; reg_lp_rx = (u4tmp & MASKHWORD) >> 16;
coex_sta->high_priority_tx = reg_hp_tx; coex_sta->high_priority_tx = reg_hp_tx;
coex_sta->high_priority_rx = reg_hp_rx; coex_sta->high_priority_rx = reg_hp_rx;
...@@ -281,7 +277,7 @@ static void halbtc8821a2ant_monitor_bt_ctr(struct btc_coexist *btcoexist) ...@@ -281,7 +277,7 @@ static void halbtc8821a2ant_monitor_bt_ctr(struct btc_coexist *btcoexist)
btcoexist->btc_write_1byte(btcoexist, 0x76e, 0xc); btcoexist->btc_write_1byte(btcoexist, 0x76e, 0xc);
} }
static void halbtc8821a2ant_query_bt_info(struct btc_coexist *btcoexist) static void btc8821a2ant_query_bt_info(struct btc_coexist *btcoexist)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
u8 h2c_parameter[1] = {0}; u8 h2c_parameter[1] = {0};
...@@ -297,7 +293,7 @@ static void halbtc8821a2ant_query_bt_info(struct btc_coexist *btcoexist) ...@@ -297,7 +293,7 @@ static void halbtc8821a2ant_query_bt_info(struct btc_coexist *btcoexist)
btcoexist->btc_fill_h2c(btcoexist, 0x61, 1, h2c_parameter); btcoexist->btc_fill_h2c(btcoexist, 0x61, 1, h2c_parameter);
} }
static u8 halbtc8821a2ant_action_algorithm(struct btc_coexist *btcoexist) static u8 btc8821a2ant_action_algorithm(struct btc_coexist *btcoexist)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
struct btc_stack_info *stack_info = &btcoexist->stack_info; struct btc_stack_info *stack_info = &btcoexist->stack_info;
...@@ -307,7 +303,6 @@ static u8 halbtc8821a2ant_action_algorithm(struct btc_coexist *btcoexist) ...@@ -307,7 +303,6 @@ static u8 halbtc8821a2ant_action_algorithm(struct btc_coexist *btcoexist)
btcoexist->btc_get(btcoexist, BTC_GET_BL_HS_OPERATION, &bt_hs_on); btcoexist->btc_get(btcoexist, BTC_GET_BL_HS_OPERATION, &bt_hs_on);
/*for win-8 stack HID report error*/
/* sync BTInfo with BT firmware and stack */ /* sync BTInfo with BT firmware and stack */
if (!stack_info->hid_exist) if (!stack_info->hid_exist)
stack_info->hid_exist = coex_sta->hid_exist; stack_info->hid_exist = coex_sta->hid_exist;
...@@ -488,7 +483,7 @@ static u8 halbtc8821a2ant_action_algorithm(struct btc_coexist *btcoexist) ...@@ -488,7 +483,7 @@ static u8 halbtc8821a2ant_action_algorithm(struct btc_coexist *btcoexist)
return algorithm; return algorithm;
} }
static void btc8821a2ant_set_fw_dac_swing_lev(struct btc_coexist *btcoexist, static void btc8821a2ant_set_fw_dac_swing_lvl(struct btc_coexist *btcoexist,
u8 dac_swing_lvl) u8 dac_swing_lvl)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
...@@ -507,7 +502,7 @@ static void btc8821a2ant_set_fw_dac_swing_lev(struct btc_coexist *btcoexist, ...@@ -507,7 +502,7 @@ static void btc8821a2ant_set_fw_dac_swing_lev(struct btc_coexist *btcoexist,
btcoexist->btc_fill_h2c(btcoexist, 0x64, 1, h2c_parameter); btcoexist->btc_fill_h2c(btcoexist, 0x64, 1, h2c_parameter);
} }
static void halbtc8821a2ant_set_fw_dec_bt_pwr(struct btc_coexist *btcoexist, static void btc8821a2ant_set_fw_dec_bt_pwr(struct btc_coexist *btcoexist,
bool dec_bt_pwr) bool dec_bt_pwr)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
...@@ -525,7 +520,7 @@ static void halbtc8821a2ant_set_fw_dec_bt_pwr(struct btc_coexist *btcoexist, ...@@ -525,7 +520,7 @@ static void halbtc8821a2ant_set_fw_dec_bt_pwr(struct btc_coexist *btcoexist,
btcoexist->btc_fill_h2c(btcoexist, 0x62, 1, h2c_parameter); btcoexist->btc_fill_h2c(btcoexist, 0x62, 1, h2c_parameter);
} }
static void halbtc8821a2ant_dec_bt_pwr(struct btc_coexist *btcoexist, static void btc8821a2ant_dec_bt_pwr(struct btc_coexist *btcoexist,
bool force_exec, bool dec_bt_pwr) bool force_exec, bool dec_bt_pwr)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
...@@ -544,14 +539,13 @@ static void halbtc8821a2ant_dec_bt_pwr(struct btc_coexist *btcoexist, ...@@ -544,14 +539,13 @@ static void halbtc8821a2ant_dec_bt_pwr(struct btc_coexist *btcoexist,
if (coex_dm->pre_dec_bt_pwr == coex_dm->cur_dec_bt_pwr) if (coex_dm->pre_dec_bt_pwr == coex_dm->cur_dec_bt_pwr)
return; return;
} }
halbtc8821a2ant_set_fw_dec_bt_pwr(btcoexist, coex_dm->cur_dec_bt_pwr); btc8821a2ant_set_fw_dec_bt_pwr(btcoexist, coex_dm->cur_dec_bt_pwr);
coex_dm->pre_dec_bt_pwr = coex_dm->cur_dec_bt_pwr; coex_dm->pre_dec_bt_pwr = coex_dm->cur_dec_bt_pwr;
} }
static void halbtc8821a2ant_fw_dac_swing_lvl(struct btc_coexist *btcoexist, static void btc8821a2ant_fw_dac_swing_lvl(struct btc_coexist *btcoexist,
bool force_exec, bool force_exec, u8 fw_dac_swing_lvl)
u8 fw_dac_swing_lvl)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
...@@ -571,14 +565,14 @@ static void halbtc8821a2ant_fw_dac_swing_lvl(struct btc_coexist *btcoexist, ...@@ -571,14 +565,14 @@ static void halbtc8821a2ant_fw_dac_swing_lvl(struct btc_coexist *btcoexist,
return; return;
} }
btc8821a2ant_set_fw_dac_swing_lev(btcoexist, btc8821a2ant_set_fw_dac_swing_lvl(btcoexist,
coex_dm->cur_fw_dac_swing_lvl); coex_dm->cur_fw_dac_swing_lvl);
coex_dm->pre_fw_dac_swing_lvl = coex_dm->cur_fw_dac_swing_lvl; coex_dm->pre_fw_dac_swing_lvl = coex_dm->cur_fw_dac_swing_lvl;
} }
static void btc8821a2ant_SetSwPenTxRateAdapt(struct btc_coexist *btcoexist, static void btc8821a2ant_set_sw_penalty_tx_rate_adaptive(
bool low_penalty_ra) struct btc_coexist *btcoexist, bool low_penalty_ra)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
u8 h2c_parameter[6] = {0}; u8 h2c_parameter[6] = {0};
...@@ -587,13 +581,13 @@ static void btc8821a2ant_SetSwPenTxRateAdapt(struct btc_coexist *btcoexist, ...@@ -587,13 +581,13 @@ static void btc8821a2ant_SetSwPenTxRateAdapt(struct btc_coexist *btcoexist,
if (low_penalty_ra) { if (low_penalty_ra) {
h2c_parameter[1] |= BIT0; h2c_parameter[1] |= BIT0;
/*normal rate except MCS7/6/5, OFDM54/48/36 */ /* normal rate except MCS7/6/5, OFDM54/48/36 */
h2c_parameter[2] = 0x00; h2c_parameter[2] = 0x00;
/*MCS7 or OFDM54 */ /* MCS7 or OFDM54 */
h2c_parameter[3] = 0xf7; h2c_parameter[3] = 0xf7;
/*MCS6 or OFDM48 */ /* MCS6 or OFDM48 */
h2c_parameter[4] = 0xf8; h2c_parameter[4] = 0xf8;
/*MCS5 or OFDM36 */ /* MCS5 or OFDM36 */
h2c_parameter[5] = 0xf9; h2c_parameter[5] = 0xf9;
} }
...@@ -604,12 +598,11 @@ static void btc8821a2ant_SetSwPenTxRateAdapt(struct btc_coexist *btcoexist, ...@@ -604,12 +598,11 @@ static void btc8821a2ant_SetSwPenTxRateAdapt(struct btc_coexist *btcoexist,
btcoexist->btc_fill_h2c(btcoexist, 0x69, 6, h2c_parameter); btcoexist->btc_fill_h2c(btcoexist, 0x69, 6, h2c_parameter);
} }
static void halbtc8821a2ant_low_penalty_ra(struct btc_coexist *btcoexist, static void btc8821a2ant_low_penalty_ra(struct btc_coexist *btcoexist,
bool force_exec, bool low_penalty_ra) bool force_exec, bool low_penalty_ra)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
/*return;*/
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], %s turn LowPenaltyRA = %s\n", "[BTCoex], %s turn LowPenaltyRA = %s\n",
(force_exec ? "force to" : ""), (force_exec ? "force to" : ""),
...@@ -625,13 +618,13 @@ static void halbtc8821a2ant_low_penalty_ra(struct btc_coexist *btcoexist, ...@@ -625,13 +618,13 @@ static void halbtc8821a2ant_low_penalty_ra(struct btc_coexist *btcoexist,
if (coex_dm->pre_low_penalty_ra == coex_dm->cur_low_penalty_ra) if (coex_dm->pre_low_penalty_ra == coex_dm->cur_low_penalty_ra)
return; return;
} }
btc8821a2ant_SetSwPenTxRateAdapt(btcoexist, btc8821a2ant_set_sw_penalty_tx_rate_adaptive(btcoexist,
coex_dm->cur_low_penalty_ra); coex_dm->cur_low_penalty_ra);
coex_dm->pre_low_penalty_ra = coex_dm->cur_low_penalty_ra; coex_dm->pre_low_penalty_ra = coex_dm->cur_low_penalty_ra;
} }
static void halbtc8821a2ant_set_dac_swing_reg(struct btc_coexist *btcoexist, static void btc8821a2ant_set_dac_swing_reg(struct btc_coexist *btcoexist,
u32 level) u32 level)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
...@@ -647,12 +640,12 @@ static void btc8821a2ant_set_sw_full_dac_swing(struct btc_coexist *btcoexist, ...@@ -647,12 +640,12 @@ static void btc8821a2ant_set_sw_full_dac_swing(struct btc_coexist *btcoexist,
u32 sw_dac_swing_lvl) u32 sw_dac_swing_lvl)
{ {
if (sw_dac_swing_on) if (sw_dac_swing_on)
halbtc8821a2ant_set_dac_swing_reg(btcoexist, sw_dac_swing_lvl); btc8821a2ant_set_dac_swing_reg(btcoexist, sw_dac_swing_lvl);
else else
halbtc8821a2ant_set_dac_swing_reg(btcoexist, 0x18); btc8821a2ant_set_dac_swing_reg(btcoexist, 0x18);
} }
static void halbtc8821a2ant_dac_swing(struct btc_coexist *btcoexist, static void btc8821a2ant_dac_swing(struct btc_coexist *btcoexist,
bool force_exec, bool dac_swing_on, bool force_exec, bool dac_swing_on,
u32 dac_swing_lvl) u32 dac_swing_lvl)
{ {
...@@ -687,7 +680,7 @@ static void halbtc8821a2ant_dac_swing(struct btc_coexist *btcoexist, ...@@ -687,7 +680,7 @@ static void halbtc8821a2ant_dac_swing(struct btc_coexist *btcoexist,
coex_dm->pre_dac_swing_lvl = coex_dm->cur_dac_swing_lvl; coex_dm->pre_dac_swing_lvl = coex_dm->cur_dac_swing_lvl;
} }
static void halbtc8821a2ant_set_coex_table(struct btc_coexist *btcoexist, static void btc8821a2ant_set_coex_table(struct btc_coexist *btcoexist,
u32 val0x6c0, u32 val0x6c4, u32 val0x6c0, u32 val0x6c4,
u32 val0x6c8, u8 val0x6cc) u32 val0x6c8, u8 val0x6cc)
{ {
...@@ -710,7 +703,7 @@ static void halbtc8821a2ant_set_coex_table(struct btc_coexist *btcoexist, ...@@ -710,7 +703,7 @@ static void halbtc8821a2ant_set_coex_table(struct btc_coexist *btcoexist,
btcoexist->btc_write_1byte(btcoexist, 0x6cc, val0x6cc); btcoexist->btc_write_1byte(btcoexist, 0x6cc, val0x6cc);
} }
static void halbtc8821a2ant_coex_table(struct btc_coexist *btcoexist, static void btc8821a2ant_coex_table(struct btc_coexist *btcoexist,
bool force_exec, u32 val0x6c0, bool force_exec, u32 val0x6c0,
u32 val0x6c4, u32 val0x6c8, u8 val0x6cc) u32 val0x6c4, u32 val0x6c8, u8 val0x6cc)
{ {
...@@ -745,7 +738,7 @@ static void halbtc8821a2ant_coex_table(struct btc_coexist *btcoexist, ...@@ -745,7 +738,7 @@ static void halbtc8821a2ant_coex_table(struct btc_coexist *btcoexist,
(coex_dm->pre_val0x6cc == coex_dm->cur_val0x6cc)) (coex_dm->pre_val0x6cc == coex_dm->cur_val0x6cc))
return; return;
} }
halbtc8821a2ant_set_coex_table(btcoexist, val0x6c0, val0x6c4, val0x6c8, btc8821a2ant_set_coex_table(btcoexist, val0x6c0, val0x6c4, val0x6c8,
val0x6cc); val0x6cc);
coex_dm->pre_val0x6c0 = coex_dm->cur_val0x6c0; coex_dm->pre_val0x6c0 = coex_dm->cur_val0x6c0;
...@@ -754,14 +747,14 @@ static void halbtc8821a2ant_coex_table(struct btc_coexist *btcoexist, ...@@ -754,14 +747,14 @@ static void halbtc8821a2ant_coex_table(struct btc_coexist *btcoexist,
coex_dm->pre_val0x6cc = coex_dm->cur_val0x6cc; coex_dm->pre_val0x6cc = coex_dm->cur_val0x6cc;
} }
static void halbtc8821a2ant_set_fw_ignore_wlan_act(struct btc_coexist *btcoex, static void btc8821a2ant_set_fw_ignore_wlan_act(struct btc_coexist *btcoex,
bool enable) bool enable)
{ {
struct rtl_priv *rtlpriv = btcoex->adapter; struct rtl_priv *rtlpriv = btcoex->adapter;
u8 h2c_parameter[1] = {0}; u8 h2c_parameter[1] = {0};
if (enable) if (enable)
h2c_parameter[0] |= BIT0;/* function enable */ h2c_parameter[0] |= BIT0; /* function enable */
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], set FW for BT Ignore Wlan_Act, FW write 0x63 = 0x%x\n", "[BTCoex], set FW for BT Ignore Wlan_Act, FW write 0x63 = 0x%x\n",
...@@ -770,7 +763,7 @@ static void halbtc8821a2ant_set_fw_ignore_wlan_act(struct btc_coexist *btcoex, ...@@ -770,7 +763,7 @@ static void halbtc8821a2ant_set_fw_ignore_wlan_act(struct btc_coexist *btcoex,
btcoex->btc_fill_h2c(btcoex, 0x63, 1, h2c_parameter); btcoex->btc_fill_h2c(btcoex, 0x63, 1, h2c_parameter);
} }
static void halbtc8821a2ant_ignore_wlan_act(struct btc_coexist *btcoexist, static void btc8821a2ant_ignore_wlan_act(struct btc_coexist *btcoexist,
bool force_exec, bool enable) bool force_exec, bool enable)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
...@@ -790,12 +783,12 @@ static void halbtc8821a2ant_ignore_wlan_act(struct btc_coexist *btcoexist, ...@@ -790,12 +783,12 @@ static void halbtc8821a2ant_ignore_wlan_act(struct btc_coexist *btcoexist,
coex_dm->cur_ignore_wlan_act) coex_dm->cur_ignore_wlan_act)
return; return;
} }
halbtc8821a2ant_set_fw_ignore_wlan_act(btcoexist, enable); btc8821a2ant_set_fw_ignore_wlan_act(btcoexist, enable);
coex_dm->pre_ignore_wlan_act = coex_dm->cur_ignore_wlan_act; coex_dm->pre_ignore_wlan_act = coex_dm->cur_ignore_wlan_act;
} }
static void halbtc8821a2ant_set_fw_pstdma(struct btc_coexist *btcoexist, static void btc8821a2ant_set_fw_ps_tdma(struct btc_coexist *btcoexist,
u8 byte1, u8 byte2, u8 byte3, u8 byte1, u8 byte2, u8 byte3,
u8 byte4, u8 byte5) u8 byte4, u8 byte5)
{ {
...@@ -825,10 +818,9 @@ static void halbtc8821a2ant_set_fw_pstdma(struct btc_coexist *btcoexist, ...@@ -825,10 +818,9 @@ static void halbtc8821a2ant_set_fw_pstdma(struct btc_coexist *btcoexist,
btcoexist->btc_fill_h2c(btcoexist, 0x60, 5, h2c_parameter); btcoexist->btc_fill_h2c(btcoexist, 0x60, 5, h2c_parameter);
} }
static void btc8821a2ant_sw_mech1(struct btc_coexist *btcoexist, static void btc8821a2ant_sw_mechanism1(struct btc_coexist *btcoexist,
bool shrink_rx_lpf, bool shrink_rx_lpf, bool low_penalty_ra,
bool low_penalty_ra, bool limited_dig, bool limited_dig, bool bt_lna_constrain)
bool bt_lna_constrain)
{ {
u32 wifi_bw; u32 wifi_bw;
...@@ -840,20 +832,18 @@ static void btc8821a2ant_sw_mech1(struct btc_coexist *btcoexist, ...@@ -840,20 +832,18 @@ static void btc8821a2ant_sw_mech1(struct btc_coexist *btcoexist,
shrink_rx_lpf = false; shrink_rx_lpf = false;
} }
halbtc8821a2ant_low_penalty_ra(btcoexist, btc8821a2ant_low_penalty_ra(btcoexist, NORMAL_EXEC, low_penalty_ra);
NORMAL_EXEC, low_penalty_ra);
} }
static void btc8821a2ant_sw_mech2(struct btc_coexist *btcoexist, static void btc8821a2ant_sw_mechanism2(struct btc_coexist *btcoexist,
bool agc_table_shift, bool agc_table_shift, bool adc_back_off,
bool adc_back_off, bool sw_dac_swing, bool sw_dac_swing, u32 dac_swing_lvl)
u32 dac_swing_lvl)
{ {
halbtc8821a2ant_dac_swing(btcoexist, NORMAL_EXEC, sw_dac_swing, btc8821a2ant_dac_swing(btcoexist, NORMAL_EXEC, sw_dac_swing,
sw_dac_swing); sw_dac_swing);
} }
static void halbtc8821a2ant_set_ant_path(struct btc_coexist *btcoexist, static void btc8821a2ant_set_ant_path(struct btc_coexist *btcoexist,
u8 ant_pos_type, bool init_hw_cfg, u8 ant_pos_type, bool init_hw_cfg,
bool wifi_off) bool wifi_off)
{ {
...@@ -872,18 +862,16 @@ static void halbtc8821a2ant_set_ant_path(struct btc_coexist *btcoexist, ...@@ -872,18 +862,16 @@ static void halbtc8821a2ant_set_ant_path(struct btc_coexist *btcoexist,
btcoexist->btc_write_1byte(btcoexist, 0xcb4, 0x77); btcoexist->btc_write_1byte(btcoexist, 0xcb4, 0x77);
if (board_info->btdm_ant_pos == BTC_ANTENNA_AT_MAIN_PORT) { if (board_info->btdm_ant_pos == BTC_ANTENNA_AT_MAIN_PORT) {
/* tell firmware "antenna inverse" ==> /* tell firmware "antenna inverse" ==> WRONG firmware
* WRONG firmware antenna control code. * antenna control code ==>need fw to fix
* ==>need fw to fix
*/ */
h2c_parameter[0] = 1; h2c_parameter[0] = 1;
h2c_parameter[1] = 1; h2c_parameter[1] = 1;
btcoexist->btc_fill_h2c(btcoexist, 0x65, 2, btcoexist->btc_fill_h2c(btcoexist, 0x65, 2,
h2c_parameter); h2c_parameter);
} else { } else {
/* tell firmware "no antenna inverse" /* tell firmware "no antenna inverse" ==> WRONG firmware
* ==> WRONG firmware antenna control code. * antenna control code ==>need fw to fix
* ==>need fw to fix
*/ */
h2c_parameter[0] = 0; h2c_parameter[0] = 0;
h2c_parameter[1] = 1; h2c_parameter[1] = 1;
...@@ -903,7 +891,7 @@ static void halbtc8821a2ant_set_ant_path(struct btc_coexist *btcoexist, ...@@ -903,7 +891,7 @@ static void halbtc8821a2ant_set_ant_path(struct btc_coexist *btcoexist,
} }
} }
static void halbtc8821a2ant_ps_tdma(struct btc_coexist *btcoexist, static void btc8821a2ant_ps_tdma(struct btc_coexist *btcoexist,
bool force_exec, bool turn_on, u8 type) bool force_exec, bool turn_on, u8 type)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
...@@ -931,91 +919,91 @@ static void halbtc8821a2ant_ps_tdma(struct btc_coexist *btcoexist, ...@@ -931,91 +919,91 @@ static void halbtc8821a2ant_ps_tdma(struct btc_coexist *btcoexist,
switch (type) { switch (type) {
case 1: case 1:
default: default:
halbtc8821a2ant_set_fw_pstdma(btcoexist, 0xe3, 0x1a, btc8821a2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x1a,
0x1a, 0xe1, 0x90); 0x1a, 0xe1, 0x90);
break; break;
case 2: case 2:
halbtc8821a2ant_set_fw_pstdma(btcoexist, 0xe3, 0x12, btc8821a2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x12,
0x12, 0xe1, 0x90); 0x12, 0xe1, 0x90);
break; break;
case 3: case 3:
halbtc8821a2ant_set_fw_pstdma(btcoexist, 0xe3, 0x1c, btc8821a2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x1c,
0x3, 0xf1, 0x90); 0x3, 0xf1, 0x90);
break; break;
case 4: case 4:
halbtc8821a2ant_set_fw_pstdma(btcoexist, 0xe3, 0x10, btc8821a2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x10,
0x03, 0xf1, 0x90); 0x03, 0xf1, 0x90);
break; break;
case 5: case 5:
halbtc8821a2ant_set_fw_pstdma(btcoexist, 0xe3, 0x1a, btc8821a2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x1a,
0x1a, 0x60, 0x90); 0x1a, 0x60, 0x90);
break; break;
case 6: case 6:
halbtc8821a2ant_set_fw_pstdma(btcoexist, 0xe3, 0x12, btc8821a2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x12,
0x12, 0x60, 0x90); 0x12, 0x60, 0x90);
break; break;
case 7: case 7:
halbtc8821a2ant_set_fw_pstdma(btcoexist, 0xe3, 0x1c, btc8821a2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x1c,
0x3, 0x70, 0x90); 0x3, 0x70, 0x90);
break; break;
case 8: case 8:
halbtc8821a2ant_set_fw_pstdma(btcoexist, 0xa3, 0x10, btc8821a2ant_set_fw_ps_tdma(btcoexist, 0xa3, 0x10,
0x3, 0x70, 0x90); 0x3, 0x70, 0x90);
break; break;
case 9: case 9:
halbtc8821a2ant_set_fw_pstdma(btcoexist, 0xe3, 0x1a, btc8821a2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x1a,
0x1a, 0xe1, 0x90); 0x1a, 0xe1, 0x90);
break; break;
case 10: case 10:
halbtc8821a2ant_set_fw_pstdma(btcoexist, 0xe3, 0x12, btc8821a2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x12,
0x12, 0xe1, 0x90); 0x12, 0xe1, 0x90);
break; break;
case 11: case 11:
halbtc8821a2ant_set_fw_pstdma(btcoexist, 0xe3, 0xa, btc8821a2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0xa,
0xa, 0xe1, 0x90); 0xa, 0xe1, 0x90);
break; break;
case 12: case 12:
halbtc8821a2ant_set_fw_pstdma(btcoexist, 0xe3, 0x5, btc8821a2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x5,
0x5, 0xe1, 0x90); 0x5, 0xe1, 0x90);
break; break;
case 13: case 13:
halbtc8821a2ant_set_fw_pstdma(btcoexist, 0xe3, 0x1a, btc8821a2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x1a,
0x1a, 0x60, 0x90); 0x1a, 0x60, 0x90);
break; break;
case 14: case 14:
halbtc8821a2ant_set_fw_pstdma(btcoexist, 0xe3, btc8821a2ant_set_fw_ps_tdma(btcoexist, 0xe3,
0x12, 0x12, 0x60, 0x90); 0x12, 0x12, 0x60, 0x90);
break; break;
case 15: case 15:
halbtc8821a2ant_set_fw_pstdma(btcoexist, 0xe3, 0xa, btc8821a2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0xa,
0xa, 0x60, 0x90); 0xa, 0x60, 0x90);
break; break;
case 16: case 16:
halbtc8821a2ant_set_fw_pstdma(btcoexist, 0xe3, 0x5, btc8821a2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x5,
0x5, 0x60, 0x90); 0x5, 0x60, 0x90);
break; break;
case 17: case 17:
halbtc8821a2ant_set_fw_pstdma(btcoexist, 0xa3, 0x2f, btc8821a2ant_set_fw_ps_tdma(btcoexist, 0xa3, 0x2f,
0x2f, 0x60, 0x90); 0x2f, 0x60, 0x90);
break; break;
case 18: case 18:
halbtc8821a2ant_set_fw_pstdma(btcoexist, 0xe3, 0x5, btc8821a2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x5,
0x5, 0xe1, 0x90); 0x5, 0xe1, 0x90);
break; break;
case 19: case 19:
halbtc8821a2ant_set_fw_pstdma(btcoexist, 0xe3, 0x25, btc8821a2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x25,
0x25, 0xe1, 0x90); 0x25, 0xe1, 0x90);
break; break;
case 20: case 20:
halbtc8821a2ant_set_fw_pstdma(btcoexist, 0xe3, 0x25, btc8821a2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x25,
0x25, 0x60, 0x90); 0x25, 0x60, 0x90);
break; break;
case 21: case 21:
halbtc8821a2ant_set_fw_pstdma(btcoexist, 0xe3, 0x15, btc8821a2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x15,
0x03, 0x70, 0x90); 0x03, 0x70, 0x90);
break; break;
case 71: case 71:
halbtc8821a2ant_set_fw_pstdma(btcoexist, 0xe3, 0x1a, btc8821a2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x1a,
0x1a, 0xe1, 0x90); 0x1a, 0xe1, 0x90);
break; break;
} }
...@@ -1023,15 +1011,15 @@ static void halbtc8821a2ant_ps_tdma(struct btc_coexist *btcoexist, ...@@ -1023,15 +1011,15 @@ static void halbtc8821a2ant_ps_tdma(struct btc_coexist *btcoexist,
/* disable PS tdma */ /* disable PS tdma */
switch (type) { switch (type) {
case 0: case 0:
halbtc8821a2ant_set_fw_pstdma(btcoexist, 0x0, 0x0, 0x0, btc8821a2ant_set_fw_ps_tdma(btcoexist, 0x0, 0x0, 0x0,
0x40, 0x0); 0x40, 0x0);
break; break;
case 1: case 1:
halbtc8821a2ant_set_fw_pstdma(btcoexist, 0x0, 0x0, 0x0, btc8821a2ant_set_fw_ps_tdma(btcoexist, 0x0, 0x0, 0x0,
0x48, 0x0); 0x48, 0x0);
break; break;
default: default:
halbtc8821a2ant_set_fw_pstdma(btcoexist, 0x0, 0x0, 0x0, btc8821a2ant_set_fw_ps_tdma(btcoexist, 0x0, 0x0, 0x0,
0x40, 0x0); 0x40, 0x0);
break; break;
} }
...@@ -1042,54 +1030,54 @@ static void halbtc8821a2ant_ps_tdma(struct btc_coexist *btcoexist, ...@@ -1042,54 +1030,54 @@ static void halbtc8821a2ant_ps_tdma(struct btc_coexist *btcoexist,
coex_dm->pre_ps_tdma = coex_dm->cur_ps_tdma; coex_dm->pre_ps_tdma = coex_dm->cur_ps_tdma;
} }
static void halbtc8821a2ant_coex_all_off(struct btc_coexist *btcoexist) static void btc8821a2ant_coex_all_off(struct btc_coexist *btcoexist)
{ {
/* fw all off */ /* fw all off */
halbtc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1); btc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);
halbtc8821a2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6); btc8821a2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
halbtc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false); btc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false);
/* sw all off */ /* sw all off */
btc8821a2ant_sw_mech1(btcoexist, false, false, false, false); btc8821a2ant_sw_mechanism1(btcoexist, false, false, false, false);
btc8821a2ant_sw_mech2(btcoexist, false, false, false, 0x18); btc8821a2ant_sw_mechanism2(btcoexist, false, false, false, 0x18);
/* hw all off */ /* hw all off */
halbtc8821a2ant_coex_table(btcoexist, NORMAL_EXEC, btc8821a2ant_coex_table(btcoexist, NORMAL_EXEC,
0x55555555, 0x55555555, 0xffff, 0x3); 0x55555555, 0x55555555, 0xffff, 0x3);
} }
static void halbtc8821a2ant_coex_under_5g(struct btc_coexist *btcoexist) static void btc8821a2ant_coex_under_5g(struct btc_coexist *btcoexist)
{ {
halbtc8821a2ant_coex_all_off(btcoexist); btc8821a2ant_coex_all_off(btcoexist);
} }
static void halbtc8821a2ant_init_coex_dm(struct btc_coexist *btcoexist) static void btc8821a2ant_init_coex_dm(struct btc_coexist *btcoexist)
{ {
/* force to reset coex mechanism */ /* force to reset coex mechanism */
halbtc8821a2ant_coex_table(btcoexist, FORCE_EXEC, 0x55555555, btc8821a2ant_coex_table(btcoexist, FORCE_EXEC, 0x55555555,
0x55555555, 0xffff, 0x3); 0x55555555, 0xffff, 0x3);
halbtc8821a2ant_ps_tdma(btcoexist, FORCE_EXEC, false, 1); btc8821a2ant_ps_tdma(btcoexist, FORCE_EXEC, false, 1);
halbtc8821a2ant_fw_dac_swing_lvl(btcoexist, FORCE_EXEC, 6); btc8821a2ant_fw_dac_swing_lvl(btcoexist, FORCE_EXEC, 6);
halbtc8821a2ant_dec_bt_pwr(btcoexist, FORCE_EXEC, false); btc8821a2ant_dec_bt_pwr(btcoexist, FORCE_EXEC, false);
btc8821a2ant_sw_mech1(btcoexist, false, false, false, false); btc8821a2ant_sw_mechanism1(btcoexist, false, false, false, false);
btc8821a2ant_sw_mech2(btcoexist, false, false, false, 0x18); btc8821a2ant_sw_mechanism2(btcoexist, false, false, false, 0x18);
} }
static void halbtc8821a2ant_bt_inquiry_page(struct btc_coexist *btcoexist) static void btc8821a2ant_bt_inquiry_page(struct btc_coexist *btcoexist)
{ {
bool low_pwr_disable = true; bool low_pwr_disable = true;
btcoexist->btc_set(btcoexist, BTC_SET_ACT_DISABLE_LOW_POWER, btcoexist->btc_set(btcoexist, BTC_SET_ACT_DISABLE_LOW_POWER,
&low_pwr_disable); &low_pwr_disable);
halbtc8821a2ant_coex_table(btcoexist, NORMAL_EXEC, 0x55ff55ff, btc8821a2ant_coex_table(btcoexist, NORMAL_EXEC, 0x55ff55ff,
0x5afa5afa, 0xffff, 0x3); 0x5afa5afa, 0xffff, 0x3);
halbtc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 3); btc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 3);
} }
static bool halbtc8821a2ant_is_common_action(struct btc_coexist *btcoexist) static bool btc8821a2ant_is_common_action(struct btc_coexist *btcoexist)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
bool common = false, wifi_connected = false, wifi_busy = false; bool common = false, wifi_connected = false, wifi_busy = false;
...@@ -1099,7 +1087,7 @@ static bool halbtc8821a2ant_is_common_action(struct btc_coexist *btcoexist) ...@@ -1099,7 +1087,7 @@ static bool halbtc8821a2ant_is_common_action(struct btc_coexist *btcoexist)
&wifi_connected); &wifi_connected);
btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_BUSY, &wifi_busy); btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_BUSY, &wifi_busy);
halbtc8821a2ant_coex_table(btcoexist, NORMAL_EXEC, 0x55ff55ff, btc8821a2ant_coex_table(btcoexist, NORMAL_EXEC, 0x55ff55ff,
0x5afa5afa, 0xffff, 0x3); 0x5afa5afa, 0xffff, 0x3);
if (!wifi_connected && if (!wifi_connected &&
...@@ -1111,12 +1099,14 @@ static bool halbtc8821a2ant_is_common_action(struct btc_coexist *btcoexist) ...@@ -1111,12 +1099,14 @@ static bool halbtc8821a2ant_is_common_action(struct btc_coexist *btcoexist)
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Wifi IPS + BT IPS!!\n"); "[BTCoex], Wifi IPS + BT IPS!!\n");
halbtc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1); btc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);
halbtc8821a2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6); btc8821a2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
halbtc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false); btc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false);
btc8821a2ant_sw_mech1(btcoexist, false, false, false, false); btc8821a2ant_sw_mechanism1(btcoexist, false, false, false,
btc8821a2ant_sw_mech2(btcoexist, false, false, false, 0x18); false);
btc8821a2ant_sw_mechanism2(btcoexist, false, false, false,
0x18);
common = true; common = true;
} else if (wifi_connected && } else if (wifi_connected &&
...@@ -1128,20 +1118,22 @@ static bool halbtc8821a2ant_is_common_action(struct btc_coexist *btcoexist) ...@@ -1128,20 +1118,22 @@ static bool halbtc8821a2ant_is_common_action(struct btc_coexist *btcoexist)
if (wifi_busy) { if (wifi_busy) {
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Wifi Busy + BT IPS!!\n"); "[BTCoex], Wifi Busy + BT IPS!!\n");
halbtc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, btc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC,
false, 1); false, 1);
} else { } else {
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Wifi LPS + BT IPS!!\n"); "[BTCoex], Wifi LPS + BT IPS!!\n");
halbtc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, btc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC,
false, 1); false, 1);
} }
halbtc8821a2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6); btc8821a2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
halbtc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false); btc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false);
btc8821a2ant_sw_mech1(btcoexist, false, false, false, false); btc8821a2ant_sw_mechanism1(btcoexist, false, false, false,
btc8821a2ant_sw_mech2(btcoexist, false, false, false, 0x18); false);
btc8821a2ant_sw_mechanism2(btcoexist, false, false, false,
0x18);
common = true; common = true;
} else if (!wifi_connected && } else if (!wifi_connected &&
...@@ -1153,12 +1145,14 @@ static bool halbtc8821a2ant_is_common_action(struct btc_coexist *btcoexist) ...@@ -1153,12 +1145,14 @@ static bool halbtc8821a2ant_is_common_action(struct btc_coexist *btcoexist)
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Wifi IPS + BT LPS!!\n"); "[BTCoex], Wifi IPS + BT LPS!!\n");
halbtc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1); btc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);
halbtc8821a2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6); btc8821a2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
halbtc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false); btc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false);
btc8821a2ant_sw_mech1(btcoexist, false, false, false, false); btc8821a2ant_sw_mechanism1(btcoexist, false, false, false,
btc8821a2ant_sw_mech2(btcoexist, false, false, false, 0x18); false);
btc8821a2ant_sw_mechanism2(btcoexist, false, false, false,
0x18);
common = true; common = true;
} else if (wifi_connected && } else if (wifi_connected &&
(BT_8821A_2ANT_BT_STATUS_CON_IDLE == coex_dm->bt_status)) { (BT_8821A_2ANT_BT_STATUS_CON_IDLE == coex_dm->bt_status)) {
...@@ -1169,39 +1163,39 @@ static bool halbtc8821a2ant_is_common_action(struct btc_coexist *btcoexist) ...@@ -1169,39 +1163,39 @@ static bool halbtc8821a2ant_is_common_action(struct btc_coexist *btcoexist)
if (wifi_busy) { if (wifi_busy) {
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Wifi Busy + BT LPS!!\n"); "[BTCoex], Wifi Busy + BT LPS!!\n");
halbtc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, btc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC,
false, 1); false, 1);
} else { } else {
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Wifi LPS + BT LPS!!\n"); "[BTCoex], Wifi LPS + BT LPS!!\n");
halbtc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, btc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC,
false, 1); false, 1);
} }
halbtc8821a2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6); btc8821a2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
halbtc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false); btc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false);
btc8821a2ant_sw_mech1(btcoexist, true, true, true, true); btc8821a2ant_sw_mechanism1(btcoexist, true, true, true, true);
btc8821a2ant_sw_mech2(btcoexist, false, false, false, 0x18); btc8821a2ant_sw_mechanism2(btcoexist, false, false, false,
0x18);
common = true; common = true;
} else if (!wifi_connected && } else if (!wifi_connected &&
(BT_8821A_2ANT_BT_STATUS_NON_IDLE == (coex_dm->bt_status == BT_8821A_2ANT_BT_STATUS_NON_IDLE)) {
coex_dm->bt_status)) {
low_pwr_disable = false; low_pwr_disable = false;
btcoexist->btc_set(btcoexist, btcoexist->btc_set(btcoexist, BTC_SET_ACT_DISABLE_LOW_POWER,
BTC_SET_ACT_DISABLE_LOW_POWER, &low_pwr_disable); &low_pwr_disable);
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Wifi IPS + BT Busy!!\n"); "[BTCoex], Wifi IPS + BT Busy!!\n");
halbtc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1); btc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);
halbtc8821a2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6); btc8821a2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
halbtc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false); btc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false);
btc8821a2ant_sw_mech1(btcoexist, false, false, btc8821a2ant_sw_mechanism1(btcoexist, false, false,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, false, false, btc8821a2ant_sw_mechanism2(btcoexist, false, false,
false, 0x18); false, 0x18);
common = true; common = true;
...@@ -1218,13 +1212,12 @@ static bool halbtc8821a2ant_is_common_action(struct btc_coexist *btcoexist) ...@@ -1218,13 +1212,12 @@ static bool halbtc8821a2ant_is_common_action(struct btc_coexist *btcoexist)
} else { } else {
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Wifi LPS + BT Busy!!\n"); "[BTCoex], Wifi LPS + BT Busy!!\n");
halbtc8821a2ant_ps_tdma(btcoexist, btc8821a2ant_ps_tdma(btcoexist,
NORMAL_EXEC, true, 21); NORMAL_EXEC, true, 21);
common = true; common = true;
} }
btc8821a2ant_sw_mech1(btcoexist, true, true, true, true); btc8821a2ant_sw_mechanism1(btcoexist, true, true, true, true);
} }
return common; return common;
} }
...@@ -1235,7 +1228,8 @@ static void btc8821a2ant_tdma_dur_adj(struct btc_coexist *btcoexist, ...@@ -1235,7 +1228,8 @@ static void btc8821a2ant_tdma_dur_adj(struct btc_coexist *btcoexist,
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
static long up, dn, m, n, wait_count; static long up, dn, m, n, wait_count;
/* 0: no change, +1: increase WiFi duration, /* 0 : no change
* +1: increase WiFi duration
* -1: decrease WiFi duration * -1: decrease WiFi duration
*/ */
int result; int result;
...@@ -1251,34 +1245,34 @@ static void btc8821a2ant_tdma_dur_adj(struct btc_coexist *btcoexist, ...@@ -1251,34 +1245,34 @@ static void btc8821a2ant_tdma_dur_adj(struct btc_coexist *btcoexist,
if (sco_hid) { if (sco_hid) {
if (tx_pause) { if (tx_pause) {
if (max_interval == 1) { if (max_interval == 1) {
halbtc8821a2ant_ps_tdma(btcoexist, btc8821a2ant_ps_tdma(btcoexist,
NORMAL_EXEC, NORMAL_EXEC,
true, 13); true, 13);
coex_dm->tdma_adj_type = 13; coex_dm->tdma_adj_type = 13;
} else if (max_interval == 2) { } else if (max_interval == 2) {
halbtc8821a2ant_ps_tdma(btcoexist, btc8821a2ant_ps_tdma(btcoexist,
NORMAL_EXEC, NORMAL_EXEC,
true, 14); true, 14);
coex_dm->tdma_adj_type = 14; coex_dm->tdma_adj_type = 14;
} else { } else {
halbtc8821a2ant_ps_tdma(btcoexist, btc8821a2ant_ps_tdma(btcoexist,
NORMAL_EXEC, NORMAL_EXEC,
true, 15); true, 15);
coex_dm->tdma_adj_type = 15; coex_dm->tdma_adj_type = 15;
} }
} else { } else {
if (max_interval == 1) { if (max_interval == 1) {
halbtc8821a2ant_ps_tdma(btcoexist, btc8821a2ant_ps_tdma(btcoexist,
NORMAL_EXEC, NORMAL_EXEC,
true, 9); true, 9);
coex_dm->tdma_adj_type = 9; coex_dm->tdma_adj_type = 9;
} else if (max_interval == 2) { } else if (max_interval == 2) {
halbtc8821a2ant_ps_tdma(btcoexist, btc8821a2ant_ps_tdma(btcoexist,
NORMAL_EXEC, NORMAL_EXEC,
true, 10); true, 10);
coex_dm->tdma_adj_type = 10; coex_dm->tdma_adj_type = 10;
} else { } else {
halbtc8821a2ant_ps_tdma(btcoexist, btc8821a2ant_ps_tdma(btcoexist,
NORMAL_EXEC, NORMAL_EXEC,
true, 11); true, 11);
coex_dm->tdma_adj_type = 11; coex_dm->tdma_adj_type = 11;
...@@ -1287,34 +1281,34 @@ static void btc8821a2ant_tdma_dur_adj(struct btc_coexist *btcoexist, ...@@ -1287,34 +1281,34 @@ static void btc8821a2ant_tdma_dur_adj(struct btc_coexist *btcoexist,
} else { } else {
if (tx_pause) { if (tx_pause) {
if (max_interval == 1) { if (max_interval == 1) {
halbtc8821a2ant_ps_tdma(btcoexist, btc8821a2ant_ps_tdma(btcoexist,
NORMAL_EXEC, NORMAL_EXEC,
true, 5); true, 5);
coex_dm->tdma_adj_type = 5; coex_dm->tdma_adj_type = 5;
} else if (max_interval == 2) { } else if (max_interval == 2) {
halbtc8821a2ant_ps_tdma(btcoexist, btc8821a2ant_ps_tdma(btcoexist,
NORMAL_EXEC, NORMAL_EXEC,
true, 6); true, 6);
coex_dm->tdma_adj_type = 6; coex_dm->tdma_adj_type = 6;
} else { } else {
halbtc8821a2ant_ps_tdma(btcoexist, btc8821a2ant_ps_tdma(btcoexist,
NORMAL_EXEC, NORMAL_EXEC,
true, 7); true, 7);
coex_dm->tdma_adj_type = 7; coex_dm->tdma_adj_type = 7;
} }
} else { } else {
if (max_interval == 1) { if (max_interval == 1) {
halbtc8821a2ant_ps_tdma(btcoexist, btc8821a2ant_ps_tdma(btcoexist,
NORMAL_EXEC, NORMAL_EXEC,
true, 1); true, 1);
coex_dm->tdma_adj_type = 1; coex_dm->tdma_adj_type = 1;
} else if (max_interval == 2) { } else if (max_interval == 2) {
halbtc8821a2ant_ps_tdma(btcoexist, btc8821a2ant_ps_tdma(btcoexist,
NORMAL_EXEC, NORMAL_EXEC,
true, 2); true, 2);
coex_dm->tdma_adj_type = 2; coex_dm->tdma_adj_type = 2;
} else { } else {
halbtc8821a2ant_ps_tdma(btcoexist, btc8821a2ant_ps_tdma(btcoexist,
NORMAL_EXEC, NORMAL_EXEC,
true, 3); true, 3);
coex_dm->tdma_adj_type = 3; coex_dm->tdma_adj_type = 3;
...@@ -1368,7 +1362,7 @@ static void btc8821a2ant_tdma_dur_adj(struct btc_coexist *btcoexist, ...@@ -1368,7 +1362,7 @@ static void btc8821a2ant_tdma_dur_adj(struct btc_coexist *btcoexist,
up = 0; up = 0;
if (dn == 2) { if (dn == 2) {
/* if retry count< 3 for 2*2 seconds, /* if retry count < 3 for 2*2 seconds,
* shrink wifi duration * shrink wifi duration
*/ */
if (wait_count <= 2) if (wait_count <= 2)
...@@ -1381,7 +1375,7 @@ static void btc8821a2ant_tdma_dur_adj(struct btc_coexist *btcoexist, ...@@ -1381,7 +1375,7 @@ static void btc8821a2ant_tdma_dur_adj(struct btc_coexist *btcoexist,
if (m >= 20) if (m >= 20)
m = 20; m = 20;
n = 3*m; n = 3 * m;
up = 0; up = 0;
dn = 0; dn = 0;
wait_count = 0; wait_count = 0;
...@@ -1403,7 +1397,7 @@ static void btc8821a2ant_tdma_dur_adj(struct btc_coexist *btcoexist, ...@@ -1403,7 +1397,7 @@ static void btc8821a2ant_tdma_dur_adj(struct btc_coexist *btcoexist,
if (m >= 20) if (m >= 20)
m = 20; m = 20;
n = 3*m; n = 3 * m;
up = 0; up = 0;
dn = 0; dn = 0;
wait_count = 0; wait_count = 0;
...@@ -1432,7 +1426,7 @@ static void btc8821a2ant_tdma_dur_adj(struct btc_coexist *btcoexist, ...@@ -1432,7 +1426,7 @@ static void btc8821a2ant_tdma_dur_adj(struct btc_coexist *btcoexist,
btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_ROAM, &roam); btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_ROAM, &roam);
if (!scan && !link && !roam) { if (!scan && !link && !roam) {
halbtc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, btc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, true,
coex_dm->tdma_adj_type); coex_dm->tdma_adj_type);
} else { } else {
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
...@@ -1440,185 +1434,186 @@ static void btc8821a2ant_tdma_dur_adj(struct btc_coexist *btcoexist, ...@@ -1440,185 +1434,186 @@ static void btc8821a2ant_tdma_dur_adj(struct btc_coexist *btcoexist,
} }
} }
halbtc8821a2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 0x6); btc8821a2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 0x6);
} }
/* SCO only or SCO+PAN(HS)*/ /* SCO only or SCO+PAN(HS)*/
static void halbtc8821a2ant_action_sco(struct btc_coexist *btcoexist) static void btc8821a2ant_action_sco(struct btc_coexist *btcoexist)
{ {
u8 wifi_rssi_state, bt_rssi_state; u8 wifi_rssi_state, bt_rssi_state;
u32 wifi_bw; u32 wifi_bw;
wifi_rssi_state = halbtc8821a2ant_wifi_rssi_state(btcoexist, 0, 2, wifi_rssi_state = btc8821a2ant_wifi_rssi_state(btcoexist, 0, 2,
15, 0); 15, 0);
bt_rssi_state = halbtc8821a2ant_bt_rssi_state(btcoexist, 2, 35, 0); bt_rssi_state = btc8821a2ant_bt_rssi_state(btcoexist, 2, 35, 0);
halbtc8821a2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 4); btc8821a2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 4);
if (BTC_RSSI_HIGH(bt_rssi_state)) if (BTC_RSSI_HIGH(bt_rssi_state))
halbtc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, true); btc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, true);
else else
halbtc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false); btc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false);
btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw); btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
if (BTC_WIFI_BW_LEGACY == wifi_bw) { if (wifi_bw == BTC_WIFI_BW_LEGACY) {
/* for SCO quality at 11b/g mode */ /* for SCO quality at 11b/g mode */
halbtc8821a2ant_coex_table(btcoexist, NORMAL_EXEC, btc8821a2ant_coex_table(btcoexist, NORMAL_EXEC,
0x5a5a5a5a, 0x5a5a5a5a, 0xffff, 0x3); 0x5a5a5a5a, 0x5a5a5a5a, 0xffff, 0x3);
} else { } else {
/* for SCO quality & wifi performance balance at 11n mode */ /* for SCO quality & wifi performance balance at 11n mode */
halbtc8821a2ant_coex_table(btcoexist, NORMAL_EXEC, btc8821a2ant_coex_table(btcoexist, NORMAL_EXEC,
0x5aea5aea, 0x5aea5aea, 0xffff, 0x3); 0x5aea5aea, 0x5aea5aea, 0xffff, 0x3);
} }
if (BTC_WIFI_BW_HT40 == wifi_bw) { if (wifi_bw == BTC_WIFI_BW_HT40) {
/* fw mechanism
* halbtc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 5);
*/
halbtc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||
false, 0); /*for voice quality*/ (bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
/* for voice quality */
btc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC,
false, 0);
} else {
/* for voice quality */
btc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC,
false, 0);
}
/* sw mechanism */ /* sw mechanism */
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8821a2ant_sw_mech1(btcoexist, true, true, btc8821a2ant_sw_mechanism1(btcoexist, true, true,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, true, false, btc8821a2ant_sw_mechanism2(btcoexist, true, false,
false, 0x18); false, 0x18);
} else { } else {
btc8821a2ant_sw_mech1(btcoexist, true, true, btc8821a2ant_sw_mechanism1(btcoexist, true, true,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, false, false, btc8821a2ant_sw_mechanism2(btcoexist, false, false,
false, 0x18); false, 0x18);
} }
} else { } else {
/* fw mechanism
* halbtc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 5);
*/
if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) || if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||
(bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
halbtc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, /* for voice quality */
false, 0); /*for voice quality*/ btc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 0);
} else { } else {
halbtc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, /* for voice quality */
false, 0); /*for voice quality*/ btc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 0);
} }
/* sw mechanism */ /* sw mechanism */
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8821a2ant_sw_mech1(btcoexist, false, true, btc8821a2ant_sw_mechanism1(btcoexist, false, true,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, true, false, btc8821a2ant_sw_mechanism2(btcoexist, true, false,
false, 0x18); false, 0x18);
} else { } else {
btc8821a2ant_sw_mech1(btcoexist, false, true, btc8821a2ant_sw_mechanism1(btcoexist, false, true,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, false, false, btc8821a2ant_sw_mechanism2(btcoexist, false, false,
false, 0x18); false, 0x18);
} }
} }
} }
static void halbtc8821a2ant_action_hid(struct btc_coexist *btcoexist) static void btc8821a2ant_action_hid(struct btc_coexist *btcoexist)
{ {
u8 wifi_rssi_state, bt_rssi_state; u8 wifi_rssi_state, bt_rssi_state;
u32 wifi_bw; u32 wifi_bw;
wifi_rssi_state = halbtc8821a2ant_wifi_rssi_state(btcoexist, wifi_rssi_state = btc8821a2ant_wifi_rssi_state(btcoexist, 0, 2, 15, 0);
0, 2, 15, 0); bt_rssi_state = btc8821a2ant_bt_rssi_state(btcoexist, 2, 35, 0);
bt_rssi_state = halbtc8821a2ant_bt_rssi_state(btcoexist, 2, 35, 0);
halbtc8821a2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6); btc8821a2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
if (BTC_RSSI_HIGH(bt_rssi_state)) if (BTC_RSSI_HIGH(bt_rssi_state))
halbtc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, true); btc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, true);
else else
halbtc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false); btc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false);
btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw); btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
if (BTC_WIFI_BW_LEGACY == wifi_bw) { if (wifi_bw == BTC_WIFI_BW_LEGACY) {
/* for HID at 11b/g mode */ /* for HID at 11b/g mode */
halbtc8821a2ant_coex_table(btcoexist, NORMAL_EXEC, 0x55ff55ff, btc8821a2ant_coex_table(btcoexist, NORMAL_EXEC, 0x55ff55ff,
0x5a5a5a5a, 0xffff, 0x3); 0x5a5a5a5a, 0xffff, 0x3);
} else { } else {
/* for HID quality & wifi performance balance at 11n mode */ /* for HID quality & wifi performance balance at 11n mode */
halbtc8821a2ant_coex_table(btcoexist, NORMAL_EXEC, 0x55ff55ff, btc8821a2ant_coex_table(btcoexist, NORMAL_EXEC, 0x55ff55ff,
0x5aea5aea, 0xffff, 0x3); 0x5aea5aea, 0xffff, 0x3);
} }
if (BTC_WIFI_BW_HT40 == wifi_bw) { if (wifi_bw == BTC_WIFI_BW_HT40) {
/* fw mechanism */ /* fw mechanism */
if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) || if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||
(bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
halbtc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, btc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC,
true, 9); true, 9);
} else { } else {
halbtc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, btc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC,
true, 13); true, 13);
} }
/* sw mechanism */ /* sw mechanism */
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8821a2ant_sw_mech1(btcoexist, true, true, btc8821a2ant_sw_mechanism1(btcoexist, true, true,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, true, false, btc8821a2ant_sw_mechanism2(btcoexist, true, false,
false, 0x18); false, 0x18);
} else { } else {
btc8821a2ant_sw_mech1(btcoexist, true, true, btc8821a2ant_sw_mechanism1(btcoexist, true, true,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, false, false, btc8821a2ant_sw_mechanism2(btcoexist, false, false,
false, 0x18); false, 0x18);
} }
} else { } else {
/* fw mechanism */ /* fw mechanism */
if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) || if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||
(bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
halbtc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, btc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC,
true, 9); true, 9);
} else { } else {
halbtc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, btc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC,
true, 13); true, 13);
} }
/* sw mechanism */ /* sw mechanism */
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8821a2ant_sw_mech1(btcoexist, false, true, btc8821a2ant_sw_mechanism1(btcoexist, false, true,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, true, false, btc8821a2ant_sw_mechanism2(btcoexist, true, false,
false, 0x18); false, 0x18);
} else { } else {
btc8821a2ant_sw_mech1(btcoexist, false, true, btc8821a2ant_sw_mechanism1(btcoexist, false, true,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, false, false, btc8821a2ant_sw_mechanism2(btcoexist, false, false,
false, 0x18); false, 0x18);
} }
} }
} }
/* A2DP only / PAN(EDR) only/ A2DP+PAN(HS) */ /* A2DP only / PAN(EDR) only/ A2DP+PAN(HS) */
static void halbtc8821a2ant_action_a2dp(struct btc_coexist *btcoexist) static void btc8821a2ant_action_a2dp(struct btc_coexist *btcoexist)
{ {
u8 wifi_rssi_state, bt_rssi_state; u8 wifi_rssi_state, bt_rssi_state;
u32 wifi_bw; u32 wifi_bw;
wifi_rssi_state = halbtc8821a2ant_wifi_rssi_state(btcoexist, 0, 2, wifi_rssi_state = btc8821a2ant_wifi_rssi_state(btcoexist, 0, 2,
15, 0); 15, 0);
bt_rssi_state = halbtc8821a2ant_bt_rssi_state(btcoexist, 2, 35, 0); bt_rssi_state = btc8821a2ant_bt_rssi_state(btcoexist, 2, 35, 0);
/* fw dac swing is called in btc8821a2ant_tdma_dur_adj() /* fw dac swing is called in btc8821a2ant_tdma_dur_adj()
* halbtc8821a2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6); * btc8821a2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
*/ */
if (BTC_RSSI_HIGH(bt_rssi_state)) if (BTC_RSSI_HIGH(bt_rssi_state))
halbtc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, true); btc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, true);
else else
halbtc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false); btc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false);
btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw); btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
...@@ -1634,14 +1629,14 @@ static void halbtc8821a2ant_action_a2dp(struct btc_coexist *btcoexist) ...@@ -1634,14 +1629,14 @@ static void halbtc8821a2ant_action_a2dp(struct btc_coexist *btcoexist)
/* sw mechanism */ /* sw mechanism */
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8821a2ant_sw_mech1(btcoexist, true, false, btc8821a2ant_sw_mechanism1(btcoexist, true, false,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, true, false, btc8821a2ant_sw_mechanism2(btcoexist, true, false,
false, 0x18); false, 0x18);
} else { } else {
btc8821a2ant_sw_mech1(btcoexist, true, false, btc8821a2ant_sw_mechanism1(btcoexist, true, false,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, false, false, btc8821a2ant_sw_mechanism2(btcoexist, false, false,
false, 0x18); false, 0x18);
} }
} else { } else {
...@@ -1656,61 +1651,56 @@ static void halbtc8821a2ant_action_a2dp(struct btc_coexist *btcoexist) ...@@ -1656,61 +1651,56 @@ static void halbtc8821a2ant_action_a2dp(struct btc_coexist *btcoexist)
/* sw mechanism */ /* sw mechanism */
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8821a2ant_sw_mech1(btcoexist, false, false, btc8821a2ant_sw_mechanism1(btcoexist, false, false,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, true, false, btc8821a2ant_sw_mechanism2(btcoexist, true, false,
false, 0x18); false, 0x18);
} else { } else {
btc8821a2ant_sw_mech1(btcoexist, false, false, btc8821a2ant_sw_mechanism1(btcoexist, false, false,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, false, false, btc8821a2ant_sw_mechanism2(btcoexist, false, false,
false, 0x18); false, 0x18);
} }
} }
} }
static void halbtc8821a2ant_action_a2dp_pan_hs(struct btc_coexist *btcoexist) static void btc8821a2ant_action_a2dp_pan_hs(struct btc_coexist *btcoexist)
{ {
u8 wifi_rssi_state, bt_rssi_state, bt_info_ext; u8 wifi_rssi_state, bt_rssi_state, bt_info_ext;
u32 wifi_bw; u32 wifi_bw;
bt_info_ext = coex_sta->bt_info_ext; bt_info_ext = coex_sta->bt_info_ext;
wifi_rssi_state = halbtc8821a2ant_wifi_rssi_state(btcoexist, 0, 2, wifi_rssi_state = btc8821a2ant_wifi_rssi_state(btcoexist, 0, 2, 15, 0);
15, 0); bt_rssi_state = btc8821a2ant_bt_rssi_state(btcoexist, 2, 35, 0);
bt_rssi_state = halbtc8821a2ant_bt_rssi_state(btcoexist, 2, 35, 0);
/*fw dac swing is called in btc8821a2ant_tdma_dur_adj()
*halbtc8821a2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
*/
if (BTC_RSSI_HIGH(bt_rssi_state)) if (BTC_RSSI_HIGH(bt_rssi_state))
halbtc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, true); btc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, true);
else else
halbtc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false); btc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false);
btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw); btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
if (BTC_WIFI_BW_HT40 == wifi_bw) { if (wifi_bw == BTC_WIFI_BW_HT40) {
/* fw mechanism */ /* fw mechanism */
if (bt_info_ext&BIT0) { if (bt_info_ext&BIT0) {
/*a2dp basic rate*/ /* a2dp basic rate */
btc8821a2ant_tdma_dur_adj(btcoexist, false, true, 2); btc8821a2ant_tdma_dur_adj(btcoexist, false, true, 2);
} else { } else {
/*a2dp edr rate*/ /* a2dp edr rate */
btc8821a2ant_tdma_dur_adj(btcoexist, false, true, 1); btc8821a2ant_tdma_dur_adj(btcoexist, false, true, 1);
} }
/* sw mechanism */ /* sw mechanism */
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8821a2ant_sw_mech1(btcoexist, true, false, btc8821a2ant_sw_mechanism1(btcoexist, true, false,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, true, false, btc8821a2ant_sw_mechanism2(btcoexist, true, false,
false, 0x18); false, 0x18);
} else { } else {
btc8821a2ant_sw_mech1(btcoexist, true, false, btc8821a2ant_sw_mechanism1(btcoexist, true, false,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, false, false, btc8821a2ant_sw_mechanism2(btcoexist, false, false,
false, 0x18); false, 0x18);
} }
} else { } else {
...@@ -1726,44 +1716,43 @@ static void halbtc8821a2ant_action_a2dp_pan_hs(struct btc_coexist *btcoexist) ...@@ -1726,44 +1716,43 @@ static void halbtc8821a2ant_action_a2dp_pan_hs(struct btc_coexist *btcoexist)
/* sw mechanism */ /* sw mechanism */
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8821a2ant_sw_mech1(btcoexist, false, false, btc8821a2ant_sw_mechanism1(btcoexist, false, false,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, true, false, btc8821a2ant_sw_mechanism2(btcoexist, true, false,
false, 0x18); false, 0x18);
} else { } else {
btc8821a2ant_sw_mech1(btcoexist, false, false, btc8821a2ant_sw_mechanism1(btcoexist, false, false,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, false, false, btc8821a2ant_sw_mechanism2(btcoexist, false, false,
false, 0x18); false, 0x18);
} }
} }
} }
static void halbtc8821a2ant_action_pan_edr(struct btc_coexist *btcoexist) static void btc8821a2ant_action_pan_edr(struct btc_coexist *btcoexist)
{ {
u8 wifi_rssi_state, bt_rssi_state; u8 wifi_rssi_state, bt_rssi_state;
u32 wifi_bw; u32 wifi_bw;
wifi_rssi_state = halbtc8821a2ant_wifi_rssi_state(btcoexist, 0, 2, wifi_rssi_state = btc8821a2ant_wifi_rssi_state(btcoexist, 0, 2, 15, 0);
15, 0); bt_rssi_state = btc8821a2ant_bt_rssi_state(btcoexist, 2, 35, 0);
bt_rssi_state = halbtc8821a2ant_bt_rssi_state(btcoexist, 2, 35, 0);
halbtc8821a2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6); btc8821a2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
if (BTC_RSSI_HIGH(bt_rssi_state)) if (BTC_RSSI_HIGH(bt_rssi_state))
halbtc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, true); btc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, true);
else else
halbtc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false); btc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false);
btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw); btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
if (BTC_WIFI_BW_LEGACY == wifi_bw) { if (BTC_WIFI_BW_LEGACY == wifi_bw) {
/* for HID at 11b/g mode */ /* for HID at 11b/g mode */
halbtc8821a2ant_coex_table(btcoexist, NORMAL_EXEC, 0x55ff55ff, btc8821a2ant_coex_table(btcoexist, NORMAL_EXEC, 0x55ff55ff,
0x5aff5aff, 0xffff, 0x3); 0x5aff5aff, 0xffff, 0x3);
} else { } else {
/* for HID quality & wifi performance balance at 11n mode */ /* for HID quality & wifi performance balance at 11n mode */
halbtc8821a2ant_coex_table(btcoexist, NORMAL_EXEC, 0x55ff55ff, btc8821a2ant_coex_table(btcoexist, NORMAL_EXEC, 0x55ff55ff,
0x5aff5aff, 0xffff, 0x3); 0x5aff5aff, 0xffff, 0x3);
} }
...@@ -1771,64 +1760,63 @@ static void halbtc8821a2ant_action_pan_edr(struct btc_coexist *btcoexist) ...@@ -1771,64 +1760,63 @@ static void halbtc8821a2ant_action_pan_edr(struct btc_coexist *btcoexist)
/* fw mechanism */ /* fw mechanism */
if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) || if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||
(bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
halbtc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, btc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC,
true, 1); true, 1);
} else { } else {
halbtc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, btc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC,
true, 5); true, 5);
} }
/* sw mechanism */ /* sw mechanism */
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8821a2ant_sw_mech1(btcoexist, true, false, btc8821a2ant_sw_mechanism1(btcoexist, true, false,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, true, false, btc8821a2ant_sw_mechanism2(btcoexist, true, false,
false, 0x18); false, 0x18);
} else { } else {
btc8821a2ant_sw_mech1(btcoexist, true, false, btc8821a2ant_sw_mechanism1(btcoexist, true, false,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, false, false, btc8821a2ant_sw_mechanism2(btcoexist, false, false,
false, 0x18); false, 0x18);
} }
} else { } else {
/* fw mechanism */ /* fw mechanism */
if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) || if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||
(bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
halbtc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, btc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC,
true, 1); true, 1);
} else { } else {
halbtc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, btc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC,
true, 5); true, 5);
} }
/* sw mechanism */ /* sw mechanism */
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8821a2ant_sw_mech1(btcoexist, false, false, btc8821a2ant_sw_mechanism1(btcoexist, false, false,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, true, false, btc8821a2ant_sw_mechanism2(btcoexist, true, false,
false, 0x18); false, 0x18);
} else { } else {
btc8821a2ant_sw_mech1(btcoexist, false, false, btc8821a2ant_sw_mechanism1(btcoexist, false, false,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, false, false, btc8821a2ant_sw_mechanism2(btcoexist, false, false,
false, 0x18); false, 0x18);
} }
} }
} }
/* PAN(HS) only */ /* PAN(HS) only */
static void halbtc8821a2ant_action_pan_hs(struct btc_coexist *btcoexist) static void btc8821a2ant_action_pan_hs(struct btc_coexist *btcoexist)
{ {
u8 wifi_rssi_state, bt_rssi_state; u8 wifi_rssi_state, bt_rssi_state;
u32 wifi_bw; u32 wifi_bw;
wifi_rssi_state = halbtc8821a2ant_wifi_rssi_state(btcoexist, wifi_rssi_state = btc8821a2ant_wifi_rssi_state(btcoexist, 0, 2, 15, 0);
0, 2, 15, 0); bt_rssi_state = btc8821a2ant_bt_rssi_state(btcoexist, 2, 35, 0);
bt_rssi_state = halbtc8821a2ant_bt_rssi_state(btcoexist, 2, 35, 0);
halbtc8821a2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6); btc8821a2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw); btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
...@@ -1836,78 +1824,85 @@ static void halbtc8821a2ant_action_pan_hs(struct btc_coexist *btcoexist) ...@@ -1836,78 +1824,85 @@ static void halbtc8821a2ant_action_pan_hs(struct btc_coexist *btcoexist)
/* fw mechanism */ /* fw mechanism */
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
halbtc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, btc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, true);
true);
} else { } else {
halbtc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, btc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false);
false);
} }
halbtc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1); btc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);
/* sw mechanism */ /* sw mechanism */
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8821a2ant_sw_mech1(btcoexist, true, false, btc8821a2ant_sw_mechanism1(btcoexist, true, false,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, true, false, btc8821a2ant_sw_mechanism2(btcoexist, true, false,
false, 0x18); false, 0x18);
} else { } else {
btc8821a2ant_sw_mech1(btcoexist, true, false, btc8821a2ant_sw_mechanism1(btcoexist, true, false,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, false, false, btc8821a2ant_sw_mechanism2(btcoexist, false, false,
false, 0x18); false, 0x18);
} }
} else { } else {
/* fw mechanism */ /* fw mechanism */
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
halbtc8821a2ant_dec_bt_pwr(btcoexist, btc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, true);
NORMAL_EXEC, true);
} else { } else {
halbtc8821a2ant_dec_bt_pwr(btcoexist, btc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false);
NORMAL_EXEC, false);
} }
halbtc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1); if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||
(bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);
} else {
btc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);
}
/* sw mechanism */ /* sw mechanism */
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8821a2ant_sw_mech1(btcoexist, false, false, btc8821a2ant_sw_mechanism1(btcoexist, false, false,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, true, false, btc8821a2ant_sw_mechanism2(btcoexist, true, false,
false, 0x18); false, 0x18);
} else { } else {
btc8821a2ant_sw_mech1(btcoexist, false, false, btc8821a2ant_sw_mechanism1(btcoexist, false, false,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, false, false, btc8821a2ant_sw_mechanism2(btcoexist, false, false,
false, 0x18); false, 0x18);
} }
} }
} }
/* PAN(EDR)+A2DP */ /* PAN(EDR)+A2DP */
static void halbtc8821a2ant_action_pan_edr_a2dp(struct btc_coexist *btcoexist) static void btc8821a2ant_action_pan_edr_a2dp(struct btc_coexist *btcoexist)
{ {
u8 wifi_rssi_state, bt_rssi_state, bt_info_ext; u8 wifi_rssi_state, bt_rssi_state, bt_info_ext;
u32 wifi_bw; u32 wifi_bw;
bt_info_ext = coex_sta->bt_info_ext; bt_info_ext = coex_sta->bt_info_ext;
wifi_rssi_state = halbtc8821a2ant_wifi_rssi_state(btcoexist, 0, 2, wifi_rssi_state = btc8821a2ant_wifi_rssi_state(btcoexist, 0, 2, 15, 0);
15, 0); bt_rssi_state = btc8821a2ant_bt_rssi_state(btcoexist, 2, 35, 0);
bt_rssi_state = halbtc8821a2ant_bt_rssi_state(btcoexist, 2, 35, 0);
halbtc8821a2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6); btc8821a2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
if (BTC_RSSI_HIGH(bt_rssi_state)) if (BTC_RSSI_HIGH(bt_rssi_state))
halbtc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, true); btc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, true);
else else
halbtc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false); btc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false);
btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw); btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
halbtc8821a2ant_coex_table(btcoexist, NORMAL_EXEC, 0x55ff55ff, if (wifi_bw == BTC_WIFI_BW_LEGACY) {
/* for HID at 11b/g mode */
btc8821a2ant_coex_table(btcoexist, NORMAL_EXEC, 0x55ff55ff,
0x5afa5afa, 0xffff, 0x3); 0x5afa5afa, 0xffff, 0x3);
} else {
/* for HID quality & wifi performance balance at 11n mode */
btc8821a2ant_coex_table(btcoexist, NORMAL_EXEC, 0x55ff55ff,
0x5afa5afa, 0xffff, 0x3);
}
if (BTC_WIFI_BW_HT40 == wifi_bw) { if (BTC_WIFI_BW_HT40 == wifi_bw) {
/* fw mechanism */ /* fw mechanism */
...@@ -1922,16 +1917,16 @@ static void halbtc8821a2ant_action_pan_edr_a2dp(struct btc_coexist *btcoexist) ...@@ -1922,16 +1917,16 @@ static void halbtc8821a2ant_action_pan_edr_a2dp(struct btc_coexist *btcoexist)
/* sw mechanism */ /* sw mechanism */
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8821a2ant_sw_mech1(btcoexist, true, false, btc8821a2ant_sw_mechanism1(btcoexist, true, false,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, true, false, btc8821a2ant_sw_mechanism2(btcoexist, true, false,
false, 0x18); false, 0x18);
} else { } else {
btc8821a2ant_sw_mech1(btcoexist, true, false, btc8821a2ant_sw_mechanism1(btcoexist, true, false,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, false, false, btc8821a2ant_sw_mechanism2(btcoexist, false, false,
false, 0x18); false, 0x18);
} };
} else { } else {
/* fw mechanism */ /* fw mechanism */
if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) || if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||
...@@ -1943,88 +1938,91 @@ static void halbtc8821a2ant_action_pan_edr_a2dp(struct btc_coexist *btcoexist) ...@@ -1943,88 +1938,91 @@ static void halbtc8821a2ant_action_pan_edr_a2dp(struct btc_coexist *btcoexist)
/* sw mechanism */ /* sw mechanism */
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8821a2ant_sw_mech1(btcoexist, false, false, btc8821a2ant_sw_mechanism1(btcoexist, false, false,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, true, false, btc8821a2ant_sw_mechanism2(btcoexist, true, false,
false, 0x18); false, 0x18);
} else { } else {
btc8821a2ant_sw_mech1(btcoexist, false, false, btc8821a2ant_sw_mechanism1(btcoexist, false, false,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, false, false, btc8821a2ant_sw_mechanism2(btcoexist, false, false,
false, 0x18); false, 0x18);
} }
} }
} }
static void halbtc8821a2ant_action_pan_edr_hid(struct btc_coexist *btcoexist) static void btc8821a2ant_action_pan_edr_hid(struct btc_coexist *btcoexist)
{ {
u8 wifi_rssi_state, bt_rssi_state; u8 wifi_rssi_state, bt_rssi_state;
u32 wifi_bw; u32 wifi_bw;
wifi_rssi_state = halbtc8821a2ant_wifi_rssi_state(btcoexist, 0, 2, wifi_rssi_state = btc8821a2ant_wifi_rssi_state(btcoexist, 0, 2, 15, 0);
15, 0); bt_rssi_state = btc8821a2ant_bt_rssi_state(btcoexist, 2, 35, 0);
bt_rssi_state = halbtc8821a2ant_bt_rssi_state(btcoexist, 2, 35, 0);
halbtc8821a2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6); btc8821a2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
if (BTC_RSSI_HIGH(bt_rssi_state)) if (BTC_RSSI_HIGH(bt_rssi_state))
halbtc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, true); btc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, true);
else else
halbtc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false); btc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false);
btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw); btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
halbtc8821a2ant_coex_table(btcoexist, NORMAL_EXEC, 0x55ff55ff, if (wifi_bw == BTC_WIFI_BW_LEGACY) {
/* for HID at 11b/g mode */
btc8821a2ant_coex_table(btcoexist, NORMAL_EXEC, 0x55ff55ff,
0x5a5f5a5f, 0xffff, 0x3);
} else {
/* for HID quality & wifi performance balance at 11n mode */
btc8821a2ant_coex_table(btcoexist, NORMAL_EXEC, 0x55ff55ff,
0x5a5f5a5f, 0xffff, 0x3); 0x5a5f5a5f, 0xffff, 0x3);
}
if (BTC_WIFI_BW_HT40 == wifi_bw) { if (wifi_bw == BTC_WIFI_BW_HT40) {
halbtc8821a2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 3); btc8821a2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 3);
/* fw mechanism */ /* fw mechanism */
if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) || if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||
(bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
halbtc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, btc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC,
true, 10); true, 10);
} else { } else {
halbtc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, btc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 14);
true, 14);
} }
/* sw mechanism */ /* sw mechanism */
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8821a2ant_sw_mech1(btcoexist, true, true, btc8821a2ant_sw_mechanism1(btcoexist, true, true,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, true, false, btc8821a2ant_sw_mechanism2(btcoexist, true, false,
false, 0x18); false, 0x18);
} else { } else {
btc8821a2ant_sw_mech1(btcoexist, true, true, btc8821a2ant_sw_mechanism1(btcoexist, true, true,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, false, false, btc8821a2ant_sw_mechanism2(btcoexist, false, false,
false, 0x18); false, 0x18);
} }
} else { } else {
halbtc8821a2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6); btc8821a2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
/* fw mechanism */ /* fw mechanism */
if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) || if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||
(bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
halbtc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, btc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 10);
true, 10);
} else { } else {
halbtc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, btc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 14);
true, 14);
} }
/* sw mechanism */ /* sw mechanism */
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8821a2ant_sw_mech1(btcoexist, false, true, btc8821a2ant_sw_mechanism1(btcoexist, false, true,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, true, false, btc8821a2ant_sw_mechanism2(btcoexist, true, false,
false, 0x18); false, 0x18);
} else { } else {
btc8821a2ant_sw_mech1(btcoexist, false, true, btc8821a2ant_sw_mechanism1(btcoexist, false, true,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, false, false, btc8821a2ant_sw_mechanism2(btcoexist, false, false,
false, 0x18); false, 0x18);
} }
} }
...@@ -2037,21 +2035,27 @@ static void btc8821a2ant_act_hid_a2dp_pan_edr(struct btc_coexist *btcoexist) ...@@ -2037,21 +2035,27 @@ static void btc8821a2ant_act_hid_a2dp_pan_edr(struct btc_coexist *btcoexist)
u32 wifi_bw; u32 wifi_bw;
bt_info_ext = coex_sta->bt_info_ext; bt_info_ext = coex_sta->bt_info_ext;
wifi_rssi_state = halbtc8821a2ant_wifi_rssi_state(btcoexist, wifi_rssi_state = btc8821a2ant_wifi_rssi_state(btcoexist, 0, 2, 15, 0);
0, 2, 15, 0); bt_rssi_state = btc8821a2ant_bt_rssi_state(btcoexist, 2, 35, 0);
bt_rssi_state = halbtc8821a2ant_bt_rssi_state(btcoexist, 2, 35, 0);
halbtc8821a2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6); btc8821a2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
if (BTC_RSSI_HIGH(bt_rssi_state)) if (BTC_RSSI_HIGH(bt_rssi_state))
halbtc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, true); btc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, true);
else else
halbtc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false); btc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false);
btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw); btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
halbtc8821a2ant_coex_table(btcoexist, NORMAL_EXEC, 0x55ff55ff, if (wifi_bw == BTC_WIFI_BW_LEGACY) {
/* for HID at 11b/g mode */
btc8821a2ant_coex_table(btcoexist, NORMAL_EXEC, 0x55ff55ff,
0x5a5a5a5a, 0xffff, 0x3);
} else {
/* for HID quality & wifi performance balance at 11n mode */
btc8821a2ant_coex_table(btcoexist, NORMAL_EXEC, 0x55ff55ff,
0x5a5a5a5a, 0xffff, 0x3); 0x5a5a5a5a, 0xffff, 0x3);
}
if (BTC_WIFI_BW_HT40 == wifi_bw) { if (BTC_WIFI_BW_HT40 == wifi_bw) {
/* fw mechanism */ /* fw mechanism */
...@@ -2060,14 +2064,14 @@ static void btc8821a2ant_act_hid_a2dp_pan_edr(struct btc_coexist *btcoexist) ...@@ -2060,14 +2064,14 @@ static void btc8821a2ant_act_hid_a2dp_pan_edr(struct btc_coexist *btcoexist)
/* sw mechanism */ /* sw mechanism */
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8821a2ant_sw_mech1(btcoexist, true, true, btc8821a2ant_sw_mechanism1(btcoexist, true, true,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, true, false, btc8821a2ant_sw_mechanism2(btcoexist, true, false,
false, 0x18); false, 0x18);
} else { } else {
btc8821a2ant_sw_mech1(btcoexist, true, true, btc8821a2ant_sw_mechanism1(btcoexist, true, true,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, false, false, btc8821a2ant_sw_mechanism2(btcoexist, false, false,
false, 0x18); false, 0x18);
} }
} else { } else {
...@@ -2098,38 +2102,44 @@ static void btc8821a2ant_act_hid_a2dp_pan_edr(struct btc_coexist *btcoexist) ...@@ -2098,38 +2102,44 @@ static void btc8821a2ant_act_hid_a2dp_pan_edr(struct btc_coexist *btcoexist)
/* sw mechanism */ /* sw mechanism */
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8821a2ant_sw_mech1(btcoexist, false, true, btc8821a2ant_sw_mechanism1(btcoexist, false, true,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, true, false, btc8821a2ant_sw_mechanism2(btcoexist, true, false,
false, 0x18); false, 0x18);
} else { } else {
btc8821a2ant_sw_mech1(btcoexist, false, true, btc8821a2ant_sw_mechanism1(btcoexist, false, true,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, false, false, btc8821a2ant_sw_mechanism2(btcoexist, false, false,
false, 0x18); false, 0x18);
} }
} }
} }
static void halbtc8821a2ant_action_hid_a2dp(struct btc_coexist *btcoexist) static void btc8821a2ant_action_hid_a2dp(struct btc_coexist *btcoexist)
{ {
u8 wifi_rssi_state, bt_rssi_state, bt_info_ext; u8 wifi_rssi_state, bt_rssi_state, bt_info_ext;
u32 wifi_bw; u32 wifi_bw;
bt_info_ext = coex_sta->bt_info_ext; bt_info_ext = coex_sta->bt_info_ext;
wifi_rssi_state = halbtc8821a2ant_wifi_rssi_state(btcoexist, 0, 2, wifi_rssi_state = btc8821a2ant_wifi_rssi_state(btcoexist, 0, 2, 15, 0);
15, 0); bt_rssi_state = btc8821a2ant_bt_rssi_state(btcoexist, 2, 35, 0);
bt_rssi_state = halbtc8821a2ant_bt_rssi_state(btcoexist, 2, 35, 0);
if (BTC_RSSI_HIGH(bt_rssi_state)) if (BTC_RSSI_HIGH(bt_rssi_state))
halbtc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, true); btc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, true);
else else
halbtc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false); btc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false);
btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw); btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
halbtc8821a2ant_coex_table(btcoexist, NORMAL_EXEC, 0x55ff55ff, if (wifi_bw == BTC_WIFI_BW_LEGACY) {
/* for HID at 11b/g mode */
btc8821a2ant_coex_table(btcoexist, NORMAL_EXEC, 0x55ff55ff,
0x5f5b5f5b, 0xffffff, 0x3);
} else {
/* for HID quality & wifi performance balance at 11n mode */
btc8821a2ant_coex_table(btcoexist, NORMAL_EXEC, 0x55ff55ff,
0x5f5b5f5b, 0xffffff, 0x3); 0x5f5b5f5b, 0xffffff, 0x3);
}
if (BTC_WIFI_BW_HT40 == wifi_bw) { if (BTC_WIFI_BW_HT40 == wifi_bw) {
/* fw mechanism */ /* fw mechanism */
...@@ -2138,14 +2148,14 @@ static void halbtc8821a2ant_action_hid_a2dp(struct btc_coexist *btcoexist) ...@@ -2138,14 +2148,14 @@ static void halbtc8821a2ant_action_hid_a2dp(struct btc_coexist *btcoexist)
/* sw mechanism */ /* sw mechanism */
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8821a2ant_sw_mech1(btcoexist, true, true, btc8821a2ant_sw_mechanism1(btcoexist, true, true,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, true, false, btc8821a2ant_sw_mechanism2(btcoexist, true, false,
false, 0x18); false, 0x18);
} else { } else {
btc8821a2ant_sw_mech1(btcoexist, true, true, btc8821a2ant_sw_mechanism1(btcoexist, true, true,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, false, false, btc8821a2ant_sw_mechanism2(btcoexist, false, false,
false, 0x18); false, 0x18);
} }
} else { } else {
...@@ -2155,20 +2165,20 @@ static void halbtc8821a2ant_action_hid_a2dp(struct btc_coexist *btcoexist) ...@@ -2155,20 +2165,20 @@ static void halbtc8821a2ant_action_hid_a2dp(struct btc_coexist *btcoexist)
/* sw mechanism */ /* sw mechanism */
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8821a2ant_sw_mech1(btcoexist, false, true, btc8821a2ant_sw_mechanism1(btcoexist, false, true,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, true, false, btc8821a2ant_sw_mechanism2(btcoexist, true, false,
false, 0x18); false, 0x18);
} else { } else {
btc8821a2ant_sw_mech1(btcoexist, false, true, btc8821a2ant_sw_mechanism1(btcoexist, false, true,
false, false); false, false);
btc8821a2ant_sw_mech2(btcoexist, false, false, btc8821a2ant_sw_mechanism2(btcoexist, false, false,
false, 0x18); false, 0x18);
} }
} }
} }
static void halbtc8821a2ant_run_coexist_mechanism(struct btc_coexist *btcoexist) static void btc8821a2ant_run_coexist_mechanism(struct btc_coexist *btcoexist)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
bool wifi_under_5g = false; bool wifi_under_5g = false;
...@@ -2186,16 +2196,16 @@ static void halbtc8821a2ant_run_coexist_mechanism(struct btc_coexist *btcoexist) ...@@ -2186,16 +2196,16 @@ static void halbtc8821a2ant_run_coexist_mechanism(struct btc_coexist *btcoexist)
if (wifi_under_5g) { if (wifi_under_5g) {
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], RunCoexistMechanism(), run 5G coex setting!!<===\n"); "[BTCoex], RunCoexistMechanism(), run 5G coex setting!!<===\n");
halbtc8821a2ant_coex_under_5g(btcoexist); btc8821a2ant_coex_under_5g(btcoexist);
return; return;
} }
algorithm = halbtc8821a2ant_action_algorithm(btcoexist); algorithm = btc8821a2ant_action_algorithm(btcoexist);
if (coex_sta->c2h_bt_inquiry_page && if (coex_sta->c2h_bt_inquiry_page &&
(BT_8821A_2ANT_COEX_ALGO_PANHS != algorithm)) { (BT_8821A_2ANT_COEX_ALGO_PANHS != algorithm)) {
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], BT is under inquiry/page scan !!\n"); "[BTCoex], BT is under inquiry/page scan !!\n");
halbtc8821a2ant_bt_inquiry_page(btcoexist); btc8821a2ant_bt_inquiry_page(btcoexist);
return; return;
} }
...@@ -2203,7 +2213,7 @@ static void halbtc8821a2ant_run_coexist_mechanism(struct btc_coexist *btcoexist) ...@@ -2203,7 +2213,7 @@ static void halbtc8821a2ant_run_coexist_mechanism(struct btc_coexist *btcoexist)
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Algorithm = %d\n", coex_dm->cur_algorithm); "[BTCoex], Algorithm = %d\n", coex_dm->cur_algorithm);
if (halbtc8821a2ant_is_common_action(btcoexist)) { if (btc8821a2ant_is_common_action(btcoexist)) {
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Action 2-Ant common\n"); "[BTCoex], Action 2-Ant common\n");
coex_dm->reset_tdma_adjust = true; coex_dm->reset_tdma_adjust = true;
...@@ -2219,42 +2229,42 @@ static void halbtc8821a2ant_run_coexist_mechanism(struct btc_coexist *btcoexist) ...@@ -2219,42 +2229,42 @@ static void halbtc8821a2ant_run_coexist_mechanism(struct btc_coexist *btcoexist)
case BT_8821A_2ANT_COEX_ALGO_SCO: case BT_8821A_2ANT_COEX_ALGO_SCO:
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Action 2-Ant, algorithm = SCO\n"); "[BTCoex], Action 2-Ant, algorithm = SCO\n");
halbtc8821a2ant_action_sco(btcoexist); btc8821a2ant_action_sco(btcoexist);
break; break;
case BT_8821A_2ANT_COEX_ALGO_HID: case BT_8821A_2ANT_COEX_ALGO_HID:
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Action 2-Ant, algorithm = HID\n"); "[BTCoex], Action 2-Ant, algorithm = HID\n");
halbtc8821a2ant_action_hid(btcoexist); btc8821a2ant_action_hid(btcoexist);
break; break;
case BT_8821A_2ANT_COEX_ALGO_A2DP: case BT_8821A_2ANT_COEX_ALGO_A2DP:
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Action 2-Ant, algorithm = A2DP\n"); "[BTCoex], Action 2-Ant, algorithm = A2DP\n");
halbtc8821a2ant_action_a2dp(btcoexist); btc8821a2ant_action_a2dp(btcoexist);
break; break;
case BT_8821A_2ANT_COEX_ALGO_A2DP_PANHS: case BT_8821A_2ANT_COEX_ALGO_A2DP_PANHS:
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Action 2-Ant, algorithm = A2DP+PAN(HS)\n"); "[BTCoex], Action 2-Ant, algorithm = A2DP+PAN(HS)\n");
halbtc8821a2ant_action_a2dp_pan_hs(btcoexist); btc8821a2ant_action_a2dp_pan_hs(btcoexist);
break; break;
case BT_8821A_2ANT_COEX_ALGO_PANEDR: case BT_8821A_2ANT_COEX_ALGO_PANEDR:
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Action 2-Ant, algorithm = PAN(EDR)\n"); "[BTCoex], Action 2-Ant, algorithm = PAN(EDR)\n");
halbtc8821a2ant_action_pan_edr(btcoexist); btc8821a2ant_action_pan_edr(btcoexist);
break; break;
case BT_8821A_2ANT_COEX_ALGO_PANHS: case BT_8821A_2ANT_COEX_ALGO_PANHS:
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Action 2-Ant, algorithm = HS mode\n"); "[BTCoex], Action 2-Ant, algorithm = HS mode\n");
halbtc8821a2ant_action_pan_hs(btcoexist); btc8821a2ant_action_pan_hs(btcoexist);
break; break;
case BT_8821A_2ANT_COEX_ALGO_PANEDR_A2DP: case BT_8821A_2ANT_COEX_ALGO_PANEDR_A2DP:
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Action 2-Ant, algorithm = PAN+A2DP\n"); "[BTCoex], Action 2-Ant, algorithm = PAN+A2DP\n");
halbtc8821a2ant_action_pan_edr_a2dp(btcoexist); btc8821a2ant_action_pan_edr_a2dp(btcoexist);
break; break;
case BT_8821A_2ANT_COEX_ALGO_PANEDR_HID: case BT_8821A_2ANT_COEX_ALGO_PANEDR_HID:
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Action 2-Ant, algorithm = PAN(EDR)+HID\n"); "[BTCoex], Action 2-Ant, algorithm = PAN(EDR)+HID\n");
halbtc8821a2ant_action_pan_edr_hid(btcoexist); btc8821a2ant_action_pan_edr_hid(btcoexist);
break; break;
case BT_8821A_2ANT_COEX_ALGO_HID_A2DP_PANEDR: case BT_8821A_2ANT_COEX_ALGO_HID_A2DP_PANEDR:
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
...@@ -2264,26 +2274,22 @@ static void halbtc8821a2ant_run_coexist_mechanism(struct btc_coexist *btcoexist) ...@@ -2264,26 +2274,22 @@ static void halbtc8821a2ant_run_coexist_mechanism(struct btc_coexist *btcoexist)
case BT_8821A_2ANT_COEX_ALGO_HID_A2DP: case BT_8821A_2ANT_COEX_ALGO_HID_A2DP:
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Action 2-Ant, algorithm = HID+A2DP\n"); "[BTCoex], Action 2-Ant, algorithm = HID+A2DP\n");
halbtc8821a2ant_action_hid_a2dp(btcoexist); btc8821a2ant_action_hid_a2dp(btcoexist);
break; break;
default: default:
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Action 2-Ant, algorithm = coexist All Off!!\n"); "[BTCoex], Action 2-Ant, algorithm = coexist All Off!!\n");
halbtc8821a2ant_coex_all_off(btcoexist); btc8821a2ant_coex_all_off(btcoexist);
break; break;
} }
coex_dm->pre_algorithm = coex_dm->cur_algorithm; coex_dm->pre_algorithm = coex_dm->cur_algorithm;
} }
} }
/*============================================================ /**************************************************************
*work around function start with wa_halbtc8821a2ant_ * extern function start with ex_btc8821a2ant_
*============================================================ **************************************************************/
*============================================================ void ex_btc8821a2ant_init_hwconfig(struct btc_coexist *btcoexist)
* extern function start with EXhalbtc8821a2ant_
*============================================================
*/
void ex_halbtc8821a2ant_init_hwconfig(struct btc_coexist *btcoexist)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
u8 u1tmp = 0; u8 u1tmp = 0;
...@@ -2302,12 +2308,10 @@ void ex_halbtc8821a2ant_init_hwconfig(struct btc_coexist *btcoexist) ...@@ -2302,12 +2308,10 @@ void ex_halbtc8821a2ant_init_hwconfig(struct btc_coexist *btcoexist)
btcoexist->btc_write_1byte(btcoexist, 0x790, u1tmp); btcoexist->btc_write_1byte(btcoexist, 0x790, u1tmp);
/*Antenna config */ /*Antenna config */
halbtc8821a2ant_set_ant_path(btcoexist, btc8821a2ant_set_ant_path(btcoexist, BTC_ANT_WIFI_AT_MAIN, true, false);
BTC_ANT_WIFI_AT_MAIN, true, false);
/* PTA parameter */ /* PTA parameter */
halbtc8821a2ant_coex_table(btcoexist, btc8821a2ant_coex_table(btcoexist, FORCE_EXEC, 0x55555555, 0x55555555,
FORCE_EXEC, 0x55555555, 0x55555555,
0xffff, 0x3); 0xffff, 0x3);
/* Enable counter statistics */ /* Enable counter statistics */
...@@ -2317,20 +2321,17 @@ void ex_halbtc8821a2ant_init_hwconfig(struct btc_coexist *btcoexist) ...@@ -2317,20 +2321,17 @@ void ex_halbtc8821a2ant_init_hwconfig(struct btc_coexist *btcoexist)
btcoexist->btc_write_1byte_bitmask(btcoexist, 0x40, 0x20, 0x1); btcoexist->btc_write_1byte_bitmask(btcoexist, 0x40, 0x20, 0x1);
} }
void ex_halbtc8821a2ant_init_coex_dm(struct btc_coexist *btcoexist) void ex_btc8821a2ant_init_coex_dm(struct btc_coexist *btcoexist)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Coex Mechanism Init!!\n"); "[BTCoex], Coex Mechanism Init!!\n");
halbtc8821a2ant_init_coex_dm(btcoexist); btc8821a2ant_init_coex_dm(btcoexist);
} }
void void ex_btc8821a2ant_display_coex_info(struct btc_coexist *btcoexist)
ex_halbtc8821a2ant_display_coex_info(
struct btc_coexist *btcoexist
)
{ {
struct btc_board_info *board_info = &btcoexist->board_info; struct btc_board_info *board_info = &btcoexist->board_info;
struct btc_stack_info *stack_info = &btcoexist->stack_info; struct btc_stack_info *stack_info = &btcoexist->stack_info;
...@@ -2564,7 +2565,7 @@ ex_halbtc8821a2ant_display_coex_info( ...@@ -2564,7 +2565,7 @@ ex_halbtc8821a2ant_display_coex_info(
btcoexist->btc_disp_dbg_msg(btcoexist, BTC_DBG_DISP_COEX_STATISTICS); btcoexist->btc_disp_dbg_msg(btcoexist, BTC_DBG_DISP_COEX_STATISTICS);
} }
void ex_halbtc8821a2ant_ips_notify(struct btc_coexist *btcoexist, u8 type) void ex_btc8821a2ant_ips_notify(struct btc_coexist *btcoexist, u8 type)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
...@@ -2572,16 +2573,15 @@ void ex_halbtc8821a2ant_ips_notify(struct btc_coexist *btcoexist, u8 type) ...@@ -2572,16 +2573,15 @@ void ex_halbtc8821a2ant_ips_notify(struct btc_coexist *btcoexist, u8 type)
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], IPS ENTER notify\n"); "[BTCoex], IPS ENTER notify\n");
coex_sta->under_ips = true; coex_sta->under_ips = true;
halbtc8821a2ant_coex_all_off(btcoexist); btc8821a2ant_coex_all_off(btcoexist);
} else if (BTC_IPS_LEAVE == type) { } else if (BTC_IPS_LEAVE == type) {
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], IPS LEAVE notify\n"); "[BTCoex], IPS LEAVE notify\n");
coex_sta->under_ips = false; coex_sta->under_ips = false;
/*halbtc8821a2ant_init_coex_dm(btcoexist);*/
} }
} }
void ex_halbtc8821a2ant_lps_notify(struct btc_coexist *btcoexist, u8 type) void ex_btc8821a2ant_lps_notify(struct btc_coexist *btcoexist, u8 type)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
...@@ -2596,7 +2596,7 @@ void ex_halbtc8821a2ant_lps_notify(struct btc_coexist *btcoexist, u8 type) ...@@ -2596,7 +2596,7 @@ void ex_halbtc8821a2ant_lps_notify(struct btc_coexist *btcoexist, u8 type)
} }
} }
void ex_halbtc8821a2ant_scan_notify(struct btc_coexist *btcoexist, u8 type) void ex_btc8821a2ant_scan_notify(struct btc_coexist *btcoexist, u8 type)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
...@@ -2609,7 +2609,7 @@ void ex_halbtc8821a2ant_scan_notify(struct btc_coexist *btcoexist, u8 type) ...@@ -2609,7 +2609,7 @@ void ex_halbtc8821a2ant_scan_notify(struct btc_coexist *btcoexist, u8 type)
} }
} }
void ex_halbtc8821a2ant_connect_notify(struct btc_coexist *btcoexist, u8 type) void ex_btc8821a2ant_connect_notify(struct btc_coexist *btcoexist, u8 type)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
...@@ -2622,7 +2622,7 @@ void ex_halbtc8821a2ant_connect_notify(struct btc_coexist *btcoexist, u8 type) ...@@ -2622,7 +2622,7 @@ void ex_halbtc8821a2ant_connect_notify(struct btc_coexist *btcoexist, u8 type)
} }
} }
void ex_halbtc8821a2ant_media_status_notify(struct btc_coexist *btcoexist, void ex_btc8821a2ant_media_status_notify(struct btc_coexist *btcoexist,
u8 type) u8 type)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
...@@ -2638,7 +2638,7 @@ void ex_halbtc8821a2ant_media_status_notify(struct btc_coexist *btcoexist, ...@@ -2638,7 +2638,7 @@ void ex_halbtc8821a2ant_media_status_notify(struct btc_coexist *btcoexist,
"[BTCoex], MEDIA disconnect notify\n"); "[BTCoex], MEDIA disconnect notify\n");
} }
/* only 2.4G we need to inform bt the chnl mask*/ /* only 2.4G we need to inform bt the chnl mask */
btcoexist->btc_get(btcoexist, BTC_GET_U1_WIFI_CENTRAL_CHNL, btcoexist->btc_get(btcoexist, BTC_GET_U1_WIFI_CENTRAL_CHNL,
&wifi_central_chnl); &wifi_central_chnl);
if ((BTC_MEDIA_CONNECT == type) && if ((BTC_MEDIA_CONNECT == type) &&
...@@ -2665,8 +2665,9 @@ void ex_halbtc8821a2ant_media_status_notify(struct btc_coexist *btcoexist, ...@@ -2665,8 +2665,9 @@ void ex_halbtc8821a2ant_media_status_notify(struct btc_coexist *btcoexist,
btcoexist->btc_fill_h2c(btcoexist, 0x66, 3, h2c_parameter); btcoexist->btc_fill_h2c(btcoexist, 0x66, 3, h2c_parameter);
} }
void ex_halbtc8821a2ant_special_packet_notify(struct btc_coexist *btcoexist, void ex_btc8821a2ant_special_packet_notify(struct btc_coexist *btcoexist,
u8 type) { u8 type)
{
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
if (type == BTC_PACKET_DHCP) { if (type == BTC_PACKET_DHCP) {
...@@ -2675,7 +2676,7 @@ void ex_halbtc8821a2ant_special_packet_notify(struct btc_coexist *btcoexist, ...@@ -2675,7 +2676,7 @@ void ex_halbtc8821a2ant_special_packet_notify(struct btc_coexist *btcoexist,
} }
} }
void ex_halbtc8821a2ant_bt_info_notify(struct btc_coexist *btcoexist, void ex_btc8821a2ant_bt_info_notify(struct btc_coexist *btcoexist,
u8 *tmp_buf, u8 length) u8 *tmp_buf, u8 length)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
...@@ -2686,7 +2687,7 @@ void ex_halbtc8821a2ant_bt_info_notify(struct btc_coexist *btcoexist, ...@@ -2686,7 +2687,7 @@ void ex_halbtc8821a2ant_bt_info_notify(struct btc_coexist *btcoexist,
coex_sta->c2h_bt_info_req_sent = false; coex_sta->c2h_bt_info_req_sent = false;
rsp_source = tmp_buf[0]&0xf; rsp_source = tmp_buf[0] & 0xf;
if (rsp_source >= BT_INFO_SRC_8821A_2ANT_MAX) if (rsp_source >= BT_INFO_SRC_8821A_2ANT_MAX)
rsp_source = BT_INFO_SRC_8821A_2ANT_WIFI_FW; rsp_source = BT_INFO_SRC_8821A_2ANT_WIFI_FW;
coex_sta->bt_info_c2h_cnt[rsp_source]++; coex_sta->bt_info_c2h_cnt[rsp_source]++;
...@@ -2698,7 +2699,7 @@ void ex_halbtc8821a2ant_bt_info_notify(struct btc_coexist *btcoexist, ...@@ -2698,7 +2699,7 @@ void ex_halbtc8821a2ant_bt_info_notify(struct btc_coexist *btcoexist,
coex_sta->bt_info_c2h[rsp_source][i] = tmp_buf[i]; coex_sta->bt_info_c2h[rsp_source][i] = tmp_buf[i];
if (i == 1) if (i == 1)
bt_info = tmp_buf[i]; bt_info = tmp_buf[i];
if (i == length-1) { if (i == length - 1) {
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"0x%02x]\n", tmp_buf[i]); "0x%02x]\n", tmp_buf[i]);
} else { } else {
...@@ -2708,7 +2709,8 @@ void ex_halbtc8821a2ant_bt_info_notify(struct btc_coexist *btcoexist, ...@@ -2708,7 +2709,8 @@ void ex_halbtc8821a2ant_bt_info_notify(struct btc_coexist *btcoexist,
} }
if (BT_INFO_SRC_8821A_2ANT_WIFI_FW != rsp_source) { if (BT_INFO_SRC_8821A_2ANT_WIFI_FW != rsp_source) {
coex_sta->bt_retry_cnt = /* [3:0]*/ /* [3:0] */
coex_sta->bt_retry_cnt =
coex_sta->bt_info_c2h[rsp_source][2]&0xf; coex_sta->bt_info_c2h[rsp_source][2]&0xf;
coex_sta->bt_rssi = coex_sta->bt_rssi =
...@@ -2717,23 +2719,24 @@ void ex_halbtc8821a2ant_bt_info_notify(struct btc_coexist *btcoexist, ...@@ -2717,23 +2719,24 @@ void ex_halbtc8821a2ant_bt_info_notify(struct btc_coexist *btcoexist,
coex_sta->bt_info_ext = coex_sta->bt_info_ext =
coex_sta->bt_info_c2h[rsp_source][4]; coex_sta->bt_info_c2h[rsp_source][4];
/* Here we need to resend some wifi info to BT*/ /* Here we need to resend some wifi info to BT
/* because bt is reset and loss of the info.*/ * because bt is reset and loss of the info
*/
if ((coex_sta->bt_info_ext & BIT1)) { if ((coex_sta->bt_info_ext & BIT1)) {
btcoexist->btc_get(btcoexist, btcoexist->btc_get(btcoexist,
BTC_GET_BL_WIFI_CONNECTED, &wifi_connected); BTC_GET_BL_WIFI_CONNECTED, &wifi_connected);
if (wifi_connected) { if (wifi_connected) {
ex_halbtc8821a2ant_media_status_notify(btcoexist, ex_btc8821a2ant_media_status_notify(btcoexist,
BTC_MEDIA_CONNECT); BTC_MEDIA_CONNECT);
} else { } else {
ex_halbtc8821a2ant_media_status_notify(btcoexist, ex_btc8821a2ant_media_status_notify(btcoexist,
BTC_MEDIA_DISCONNECT); BTC_MEDIA_DISCONNECT);
} }
} }
if ((coex_sta->bt_info_ext & BIT3)) { if ((coex_sta->bt_info_ext & BIT3)) {
halbtc8821a2ant_ignore_wlan_act(btcoexist, btc8821a2ant_ignore_wlan_act(btcoexist,
FORCE_EXEC, false); FORCE_EXEC, false);
} else { } else {
/* BT already NOT ignore Wlan active, do nothing here.*/ /* BT already NOT ignore Wlan active, do nothing here.*/
...@@ -2798,27 +2801,27 @@ void ex_halbtc8821a2ant_bt_info_notify(struct btc_coexist *btcoexist, ...@@ -2798,27 +2801,27 @@ void ex_halbtc8821a2ant_bt_info_notify(struct btc_coexist *btcoexist,
btcoexist->btc_set(btcoexist, btcoexist->btc_set(btcoexist,
BTC_SET_BL_BT_LIMITED_DIG, &limited_dig); BTC_SET_BL_BT_LIMITED_DIG, &limited_dig);
halbtc8821a2ant_run_coexist_mechanism(btcoexist); btc8821a2ant_run_coexist_mechanism(btcoexist);
} }
void ex_halbtc8821a2ant_halt_notify(struct btc_coexist *btcoexist) void ex_btc8821a2ant_halt_notify(struct btc_coexist *btcoexist)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], Halt notify\n"); "[BTCoex], Halt notify\n");
halbtc8821a2ant_ignore_wlan_act(btcoexist, FORCE_EXEC, true); btc8821a2ant_ignore_wlan_act(btcoexist, FORCE_EXEC, true);
ex_halbtc8821a2ant_media_status_notify(btcoexist, BTC_MEDIA_DISCONNECT); ex_btc8821a2ant_media_status_notify(btcoexist, BTC_MEDIA_DISCONNECT);
} }
void ex_halbtc8821a2ant_periodical(struct btc_coexist *btcoexist) void ex_btc8821a2ant_periodical(struct btc_coexist *btcoexist)
{ {
struct rtl_priv *rtlpriv = btcoexist->adapter; struct rtl_priv *rtlpriv = btcoexist->adapter;
static u8 dis_ver_info_cnt; static u8 dis_ver_info_cnt;
u32 fw_ver = 0, bt_patch_ver = 0;
struct btc_board_info *board_info = &btcoexist->board_info; struct btc_board_info *board_info = &btcoexist->board_info;
struct btc_stack_info *stack_info = &btcoexist->stack_info; struct btc_stack_info *stack_info = &btcoexist->stack_info;
u32 fw_ver = 0, bt_patch_ver = 0;
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex], ==========================Periodical===========================\n"); "[BTCoex], ==========================Periodical===========================\n");
...@@ -2847,6 +2850,6 @@ void ex_halbtc8821a2ant_periodical(struct btc_coexist *btcoexist) ...@@ -2847,6 +2850,6 @@ void ex_halbtc8821a2ant_periodical(struct btc_coexist *btcoexist)
"[BTCoex], ****************************************************************\n"); "[BTCoex], ****************************************************************\n");
} }
halbtc8821a2ant_query_bt_info(btcoexist); btc8821a2ant_query_bt_info(btcoexist);
halbtc8821a2ant_monitor_bt_ctr(btcoexist); btc8821a2ant_monitor_bt_ctr(btcoexist);
} }
...@@ -466,7 +466,7 @@ static bool halbtc_set(void *void_btcoexist, u8 set_type, void *in_buf) ...@@ -466,7 +466,7 @@ static bool halbtc_set(void *void_btcoexist, u8 set_type, void *in_buf)
case BTC_SET_ACT_DISABLE_LOW_POWER: case BTC_SET_ACT_DISABLE_LOW_POWER:
halbtc_disable_low_power(); halbtc_disable_low_power();
break; break;
case BTC_SET_ACT_UPDATE_ra_mask: case BTC_SET_ACT_UPDATE_RAMASK:
btcoexist->bt_info.ra_mask = *u32_tmp; btcoexist->bt_info.ra_mask = *u32_tmp;
break; break;
case BTC_SET_ACT_SEND_MIMO_PS: case BTC_SET_ACT_SEND_MIMO_PS:
......
...@@ -275,7 +275,7 @@ enum btc_set_type { ...@@ -275,7 +275,7 @@ enum btc_set_type {
BTC_SET_ACT_NORMAL_LPS, BTC_SET_ACT_NORMAL_LPS,
BTC_SET_ACT_INC_FORCE_EXEC_PWR_CMD_CNT, BTC_SET_ACT_INC_FORCE_EXEC_PWR_CMD_CNT,
BTC_SET_ACT_DISABLE_LOW_POWER, BTC_SET_ACT_DISABLE_LOW_POWER,
BTC_SET_ACT_UPDATE_ra_mask, BTC_SET_ACT_UPDATE_RAMASK,
BTC_SET_ACT_SEND_MIMO_PS, BTC_SET_ACT_SEND_MIMO_PS,
/* BT Coex related */ /* BT Coex related */
BTC_SET_ACT_CTRL_BT_INFO, BTC_SET_ACT_CTRL_BT_INFO,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment