iwlwifi: mvm: BT Coex - update integration with rate control
Remove code that is not needed and always allow MIMO when in tight mode. In loose mode, we should avoid MIMO since BT can use the other antenna to Rx while we Tx. Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
e9fff7767e
commit
ffa6c7077c
|
@ -921,6 +921,24 @@ u16 iwl_mvm_bt_coex_agg_time_limit(struct iwl_mvm *mvm,
|
||||||
return LINK_QUAL_AGG_TIME_LIMIT_BT_ACT;
|
return LINK_QUAL_AGG_TIME_LIMIT_BT_ACT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool iwl_mvm_bt_coex_is_mimo_allowed(struct iwl_mvm *mvm,
|
||||||
|
struct ieee80211_sta *sta)
|
||||||
|
{
|
||||||
|
struct iwl_mvm_sta *mvmsta = (void *)sta->drv_priv;
|
||||||
|
|
||||||
|
if (le32_to_cpu(mvm->last_bt_notif.bt_activity_grading) <
|
||||||
|
BT_HIGH_TRAFFIC)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* In Tight, BT can't Rx while we Tx, so use both antennas since BT is
|
||||||
|
* already killed.
|
||||||
|
* In Loose, BT can Rx while we Tx, so forbid MIMO to let BT Rx while we
|
||||||
|
* Tx.
|
||||||
|
*/
|
||||||
|
return iwl_get_coex_type(mvm, mvmsta->vif) == BT_COEX_TIGHT_LUT;
|
||||||
|
}
|
||||||
|
|
||||||
void iwl_mvm_bt_coex_vif_change(struct iwl_mvm *mvm)
|
void iwl_mvm_bt_coex_vif_change(struct iwl_mvm *mvm)
|
||||||
{
|
{
|
||||||
if (!(mvm->fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_NEWBT_COEX))
|
if (!(mvm->fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_NEWBT_COEX))
|
||||||
|
|
|
@ -820,6 +820,9 @@ void iwl_mvm_bt_rssi_event(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
|
||||||
void iwl_mvm_bt_coex_vif_change(struct iwl_mvm *mvm);
|
void iwl_mvm_bt_coex_vif_change(struct iwl_mvm *mvm);
|
||||||
u16 iwl_mvm_bt_coex_agg_time_limit(struct iwl_mvm *mvm,
|
u16 iwl_mvm_bt_coex_agg_time_limit(struct iwl_mvm *mvm,
|
||||||
struct ieee80211_sta *sta);
|
struct ieee80211_sta *sta);
|
||||||
|
bool iwl_mvm_bt_coex_is_mimo_allowed(struct iwl_mvm *mvm,
|
||||||
|
struct ieee80211_sta *sta);
|
||||||
|
|
||||||
enum iwl_bt_kill_msk {
|
enum iwl_bt_kill_msk {
|
||||||
BT_KILL_MSK_DEFAULT,
|
BT_KILL_MSK_DEFAULT,
|
||||||
BT_KILL_MSK_SCO_HID_A2DP,
|
BT_KILL_MSK_SCO_HID_A2DP,
|
||||||
|
|
|
@ -1402,29 +1402,9 @@ static int rs_move_siso_to_other(struct iwl_mvm *mvm,
|
||||||
u8 update_search_tbl_counter = 0;
|
u8 update_search_tbl_counter = 0;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
switch (le32_to_cpu(mvm->last_bt_notif.bt_activity_grading)) {
|
if (tbl->action == IWL_SISO_SWITCH_MIMO2 &&
|
||||||
case IWL_BT_COEX_TRAFFIC_LOAD_NONE:
|
!iwl_mvm_bt_coex_is_mimo_allowed(mvm, sta))
|
||||||
/* nothing */
|
|
||||||
break;
|
|
||||||
case IWL_BT_COEX_TRAFFIC_LOAD_LOW:
|
|
||||||
/* avoid switching to antenna B but allow MIMO */
|
|
||||||
if (tbl->action == IWL_SISO_SWITCH_ANTENNA &&
|
|
||||||
tbl->ant_type == ANT_A)
|
|
||||||
tbl->action = IWL_SISO_SWITCH_MIMO2;
|
|
||||||
break;
|
|
||||||
case IWL_BT_COEX_TRAFFIC_LOAD_HIGH:
|
|
||||||
case IWL_BT_COEX_TRAFFIC_LOAD_CONTINUOUS:
|
|
||||||
/* A - avoid antenna B and MIMO. B - switch to A */
|
|
||||||
if (tbl->ant_type == ANT_A)
|
|
||||||
valid_tx_ant =
|
|
||||||
first_antenna(iwl_fw_valid_tx_ant(mvm->fw));
|
|
||||||
tbl->action = IWL_SISO_SWITCH_ANTENNA;
|
tbl->action = IWL_SISO_SWITCH_ANTENNA;
|
||||||
break;
|
|
||||||
default:
|
|
||||||
IWL_ERR(mvm, "Invalid BT load %d",
|
|
||||||
le32_to_cpu(mvm->last_bt_notif.bt_activity_grading));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
start_action = tbl->action;
|
start_action = tbl->action;
|
||||||
while (1) {
|
while (1) {
|
||||||
|
@ -1519,27 +1499,6 @@ static int rs_move_mimo2_to_other(struct iwl_mvm *mvm,
|
||||||
u8 update_search_tbl_counter = 0;
|
u8 update_search_tbl_counter = 0;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
switch (le32_to_cpu(mvm->last_bt_notif.bt_activity_grading)) {
|
|
||||||
case IWL_BT_COEX_TRAFFIC_LOAD_NONE:
|
|
||||||
/* nothing */
|
|
||||||
break;
|
|
||||||
case IWL_BT_COEX_TRAFFIC_LOAD_HIGH:
|
|
||||||
case IWL_BT_COEX_TRAFFIC_LOAD_CONTINUOUS:
|
|
||||||
/* avoid antenna B and MIMO */
|
|
||||||
if (tbl->action != IWL_MIMO2_SWITCH_SISO_A)
|
|
||||||
tbl->action = IWL_MIMO2_SWITCH_SISO_A;
|
|
||||||
break;
|
|
||||||
case IWL_BT_COEX_TRAFFIC_LOAD_LOW:
|
|
||||||
/* avoid antenna B unless MIMO */
|
|
||||||
if (tbl->action == IWL_MIMO2_SWITCH_SISO_B)
|
|
||||||
tbl->action = IWL_MIMO2_SWITCH_SISO_A;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
IWL_ERR(mvm, "Invalid BT load %d",
|
|
||||||
le32_to_cpu(mvm->last_bt_notif.bt_activity_grading));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
start_action = tbl->action;
|
start_action = tbl->action;
|
||||||
while (1) {
|
while (1) {
|
||||||
lq_sta->action_counter++;
|
lq_sta->action_counter++;
|
||||||
|
|
Loading…
Reference in New Issue