aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/mvm/utils.c
diff options
context:
space:
mode:
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>2014-05-18 02:16:45 -0400
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>2014-05-19 09:38:21 -0400
commit5c90422439d62b574fd9e021fabaae2dc9a3065e (patch)
tree07aa1c5b8deab261bf06f40395853ca63078d912 /drivers/net/wireless/iwlwifi/mvm/utils.c
parent894981ed43fc5e706330469e27972f7c2dd046cb (diff)
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>
Diffstat (limited to 'drivers/net/wireless/iwlwifi/mvm/utils.c')
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/utils.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/drivers/net/wireless/iwlwifi/mvm/utils.c b/drivers/net/wireless/iwlwifi/mvm/utils.c
index b269f1e30e87..42cea32ac546 100644
--- a/drivers/net/wireless/iwlwifi/mvm/utils.c
+++ b/drivers/net/wireless/iwlwifi/mvm/utils.c
@@ -650,6 +650,39 @@ void iwl_mvm_update_smps(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
650 ieee80211_request_smps(vif, smps_mode); 650 ieee80211_request_smps(vif, smps_mode);
651} 651}
652 652
653static void iwl_mvm_diversity_iter(void *_data, u8 *mac,
654 struct ieee80211_vif *vif)
655{
656 struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif);
657 bool *result = _data;
658 int i;
659
660 for (i = 0; i < NUM_IWL_MVM_SMPS_REQ; i++) {
661 if (mvmvif->smps_requests[i] == IEEE80211_SMPS_STATIC ||
662 mvmvif->smps_requests[i] == IEEE80211_SMPS_DYNAMIC)
663 *result = false;
664 }
665}
666
667bool iwl_mvm_rx_diversity_allowed(struct iwl_mvm *mvm)
668{
669 bool result = true;
670
671 lockdep_assert_held(&mvm->mutex);
672
673 if (num_of_ant(mvm->fw->valid_rx_ant) == 1)
674 return false;
675
676 if (!mvm->cfg->rx_with_siso_diversity)
677 return false;
678
679 ieee80211_iterate_active_interfaces_atomic(
680 mvm->hw, IEEE80211_IFACE_ITER_NORMAL,
681 iwl_mvm_diversity_iter, &result);
682
683 return result;
684}
685
653int iwl_mvm_update_low_latency(struct iwl_mvm *mvm, struct ieee80211_vif *vif, 686int iwl_mvm_update_low_latency(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
654 bool value) 687 bool value)
655{ 688{