aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Bondar <alexander.bondar@intel.com>2014-03-10 16:02:26 -0400
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>2014-03-16 02:59:27 -0400
commitc63722cfd441bd3a99c65fa4c40bc65d7776e772 (patch)
treeb1fdc3b12811dd63113c180b87bb1f3d588732e2
parent1f00c721391aaf9ba6ae52dd4cb54d668f1c5408 (diff)
iwlwifi: mvm: Change beacon filter enablement condition
Enable beacon filter only if at least one beacon from candidate AP is received before or after association. Check this condition before enabling BF upon secured association completion. Add BF enablement to mac80211 event that indicates beacon is received after association. Too early beacon filtering enablement can lead to disconnection due to missing AP's beacon after association. Signed-off-by: Alexander Bondar <alexander.bondar@intel.com> Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/mac80211.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/net/wireless/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
index de0e0df52314..66760e0b052e 100644
--- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c
+++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
@@ -1237,6 +1237,7 @@ static void iwl_mvm_bss_info_changed_station(struct iwl_mvm *mvm,
1237 */ 1237 */
1238 iwl_mvm_remove_time_event(mvm, mvmvif, 1238 iwl_mvm_remove_time_event(mvm, mvmvif,
1239 &mvmvif->time_event_data); 1239 &mvmvif->time_event_data);
1240 WARN_ON(iwl_mvm_enable_beacon_filter(mvm, vif, CMD_SYNC));
1240 } else if (changes & (BSS_CHANGED_PS | BSS_CHANGED_P2P_PS | 1241 } else if (changes & (BSS_CHANGED_PS | BSS_CHANGED_P2P_PS |
1241 BSS_CHANGED_QOS)) { 1242 BSS_CHANGED_QOS)) {
1242 ret = iwl_mvm_power_update_mac(mvm, vif); 1243 ret = iwl_mvm_power_update_mac(mvm, vif);
@@ -1611,7 +1612,9 @@ static int iwl_mvm_mac_sta_state(struct ieee80211_hw *hw,
1611 } else if (old_state == IEEE80211_STA_ASSOC && 1612 } else if (old_state == IEEE80211_STA_ASSOC &&
1612 new_state == IEEE80211_STA_AUTHORIZED) { 1613 new_state == IEEE80211_STA_AUTHORIZED) {
1613 /* enable beacon filtering */ 1614 /* enable beacon filtering */
1614 WARN_ON(iwl_mvm_enable_beacon_filter(mvm, vif, CMD_SYNC)); 1615 if (vif->bss_conf.dtim_period)
1616 WARN_ON(iwl_mvm_enable_beacon_filter(mvm, vif,
1617 CMD_SYNC));
1615 ret = 0; 1618 ret = 0;
1616 } else if (old_state == IEEE80211_STA_AUTHORIZED && 1619 } else if (old_state == IEEE80211_STA_AUTHORIZED &&
1617 new_state == IEEE80211_STA_ASSOC) { 1620 new_state == IEEE80211_STA_ASSOC) {