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,
|
void iwl_mvm_update_smps(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
|
||||||
enum iwl_mvm_smps_type_request req_type,
|
enum iwl_mvm_smps_type_request req_type,
|
||||||
enum ieee80211_smps_mode smps_request);
|
enum ieee80211_smps_mode smps_request);
|
||||||
|
bool iwl_mvm_rx_diversity_allowed(struct iwl_mvm *mvm);
|
||||||
|
|
||||||
/* Low latency */
|
/* Low latency */
|
||||||
int iwl_mvm_update_low_latency(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
|
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
|
* between the two antennas is sufficiently different to impact
|
||||||
* performance.
|
* performance.
|
||||||
*/
|
*/
|
||||||
if (active_cnt == 1 && num_of_ant(mvm->fw->valid_rx_ant) > 1 &&
|
if (active_cnt == 1 && iwl_mvm_rx_diversity_allowed(mvm)) {
|
||||||
!mvm->cfg->rx_with_siso_diversity) {
|
|
||||||
idle_cnt = 2;
|
idle_cnt = 2;
|
||||||
active_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);
|
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,
|
int iwl_mvm_update_low_latency(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
|
||||||
bool value)
|
bool value)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user