aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Spinadel <david.spinadel@intel.com>2014-05-13 07:29:36 -0400
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>2014-05-13 08:05:32 -0400
commitb538b8ce76f69f7fa225bc0817bbb361b877ea23 (patch)
tree4dc23349b6f940a43520f64972e0da35d272fb4a
parent64793110ad4d82e18d88a33307749c6562a6dd04 (diff)
iwlwifi: mvm: prevent sched scan while not idle
Prevent sched scan while not idle (including during association or in AP mode) instead of while associated only. This fixes my previous commit which was incomplete: commit bd5e4744a6ca64299b57a2682c720d00a475a734 Author: David Spinadel <david.spinadel@intel.com> Date: Thu Apr 24 13:15:29 2014 +0300 iwlwifi: mvm: do no sched scan while associated Currently the FW doesn't support sched scan while associated, Prevent it. Signed-off-by: David Spinadel <david.spinadel@intel.com> Reviewed-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/mac80211.c2
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/mvm.h2
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/utils.c16
3 files changed, 10 insertions, 10 deletions
diff --git a/drivers/net/wireless/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
index 4b0b8b6571ee..b41dc84e9431 100644
--- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c
+++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
@@ -1807,7 +1807,7 @@ static int iwl_mvm_mac_sched_scan_start(struct ieee80211_hw *hw,
1807 1807
1808 mutex_lock(&mvm->mutex); 1808 mutex_lock(&mvm->mutex);
1809 1809
1810 if (iwl_mvm_is_associated(mvm)) { 1810 if (!iwl_mvm_is_idle(mvm)) {
1811 ret = -EBUSY; 1811 ret = -EBUSY;
1812 goto out; 1812 goto out;
1813 } 1813 }
diff --git a/drivers/net/wireless/iwlwifi/mvm/mvm.h b/drivers/net/wireless/iwlwifi/mvm/mvm.h
index 84c75a1b267e..f1ec0986c3c9 100644
--- a/drivers/net/wireless/iwlwifi/mvm/mvm.h
+++ b/drivers/net/wireless/iwlwifi/mvm/mvm.h
@@ -1004,7 +1004,7 @@ static inline bool iwl_mvm_vif_low_latency(struct iwl_mvm_vif *mvmvif)
1004} 1004}
1005 1005
1006/* Assoc status */ 1006/* Assoc status */
1007bool iwl_mvm_is_associated(struct iwl_mvm *mvm); 1007bool iwl_mvm_is_idle(struct iwl_mvm *mvm);
1008 1008
1009/* Thermal management and CT-kill */ 1009/* Thermal management and CT-kill */
1010void iwl_mvm_tt_tx_backoff(struct iwl_mvm *mvm, u32 backoff); 1010void iwl_mvm_tt_tx_backoff(struct iwl_mvm *mvm, u32 backoff);
diff --git a/drivers/net/wireless/iwlwifi/mvm/utils.c b/drivers/net/wireless/iwlwifi/mvm/utils.c
index 6fdbef9696d8..2180902266ae 100644
--- a/drivers/net/wireless/iwlwifi/mvm/utils.c
+++ b/drivers/net/wireless/iwlwifi/mvm/utils.c
@@ -645,21 +645,21 @@ bool iwl_mvm_low_latency(struct iwl_mvm *mvm)
645 return result; 645 return result;
646} 646}
647 647
648static void iwl_mvm_assoc_iter(void *_data, u8 *mac, struct ieee80211_vif *vif) 648static void iwl_mvm_idle_iter(void *_data, u8 *mac, struct ieee80211_vif *vif)
649{ 649{
650 bool *assoc = _data; 650 bool *idle = _data;
651 651
652 if (vif->bss_conf.assoc) 652 if (!vif->bss_conf.idle)
653 *assoc = true; 653 *idle = false;
654} 654}
655 655
656bool iwl_mvm_is_associated(struct iwl_mvm *mvm) 656bool iwl_mvm_is_idle(struct iwl_mvm *mvm)
657{ 657{
658 bool assoc = false; 658 bool idle = true;
659 659
660 ieee80211_iterate_active_interfaces_atomic( 660 ieee80211_iterate_active_interfaces_atomic(
661 mvm->hw, IEEE80211_IFACE_ITER_NORMAL, 661 mvm->hw, IEEE80211_IFACE_ITER_NORMAL,
662 iwl_mvm_assoc_iter, &assoc); 662 iwl_mvm_idle_iter, &idle);
663 663
664 return assoc; 664 return idle;
665} 665}