iwlwifi: mvm: don't allow diversity if BT Coex / TT forbid it
We should not allow diversity when BT Coex needs the second antenna. Thermal Throttling can also request to stop using the second antenna. Honour those requests. Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Reviewed-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
This commit is contained in:
parent
894981ed43
commit
5c90422439
@ -1008,6 +1008,7 @@ int iwl_mvm_update_beacon_filter(struct iwl_mvm *mvm,
|
||||
void iwl_mvm_update_smps(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
|
||||
enum iwl_mvm_smps_type_request req_type,
|
||||
enum ieee80211_smps_mode smps_request);
|
||||
bool iwl_mvm_rx_diversity_allowed(struct iwl_mvm *mvm);
|
||||
|
||||
/* Low latency */
|
||||
int iwl_mvm_update_low_latency(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
|
||||
|
@ -163,8 +163,7 @@ static void iwl_mvm_phy_ctxt_cmd_data(struct iwl_mvm *mvm,
|
||||
* between the two antennas is sufficiently different to impact
|
||||
* performance.
|
||||
*/
|
||||
if (active_cnt == 1 && num_of_ant(mvm->fw->valid_rx_ant) > 1 &&
|
||||
!mvm->cfg->rx_with_siso_diversity) {
|
||||
if (active_cnt == 1 && iwl_mvm_rx_diversity_allowed(mvm)) {
|
||||
idle_cnt = 2;
|
||||
active_cnt = 2;
|
||||
}
|
||||
|
@ -650,6 +650,39 @@ void iwl_mvm_update_smps(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
|
||||
ieee80211_request_smps(vif, smps_mode);
|
||||
}
|
||||
|
||||
static void iwl_mvm_diversity_iter(void *_data, u8 *mac,
|
||||
struct ieee80211_vif *vif)
|
||||
{
|
||||
struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif);
|
||||
bool *result = _data;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < NUM_IWL_MVM_SMPS_REQ; i++) {
|
||||
if (mvmvif->smps_requests[i] == IEEE80211_SMPS_STATIC ||
|
||||
mvmvif->smps_requests[i] == IEEE80211_SMPS_DYNAMIC)
|
||||
*result = false;
|
||||
}
|
||||
}
|
||||
|
||||
bool iwl_mvm_rx_diversity_allowed(struct iwl_mvm *mvm)
|
||||
{
|
||||
bool result = true;
|
||||
|
||||
lockdep_assert_held(&mvm->mutex);
|
||||
|
||||
if (num_of_ant(mvm->fw->valid_rx_ant) == 1)
|
||||
return false;
|
||||
|
||||
if (!mvm->cfg->rx_with_siso_diversity)
|
||||
return false;
|
||||
|
||||
ieee80211_iterate_active_interfaces_atomic(
|
||||
mvm->hw, IEEE80211_IFACE_ITER_NORMAL,
|
||||
iwl_mvm_diversity_iter, &result);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
int iwl_mvm_update_low_latency(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
|
||||
bool value)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user