53 lines
2.2 KiB
Diff
53 lines
2.2 KiB
Diff
|
From 784c4f0b18f89922ddc0fe21e5ec64cc370bb3f2 Mon Sep 17 00:00:00 2001
|
||
|
From: Johannes Berg <johannes.berg@intel.com>
|
||
|
Date: Wed, 19 Mar 2014 18:36:39 +0100
|
||
|
Subject: [PATCH 10/10] iwlwifi: mvm: delay enabling smart FIFO until after
|
||
|
beacon RX
|
||
|
|
||
|
If we have no beacon data before association, delay smart FIFO
|
||
|
enablement until after we have this data.
|
||
|
|
||
|
Not doing so can cause association failures in extremely silent
|
||
|
environments (usually only a shielded box/room) as beacon RX is
|
||
|
not sent to the host immediately, and then the association time
|
||
|
event ends without the host receiving any beacon even though it
|
||
|
was on the air - it's just stuck on the FIFO.
|
||
|
|
||
|
Cc: <stable@vger.kernel.org> [3.14]
|
||
|
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||
|
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
|
||
|
---
|
||
|
drivers/net/wireless/iwlwifi/mvm/mac80211.c | 1 +
|
||
|
drivers/net/wireless/iwlwifi/mvm/sf.c | 3 ++-
|
||
|
2 files changed, 3 insertions(+), 1 deletion(-)
|
||
|
|
||
|
diff --git a/drivers/net/wireless/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
|
||
|
index c35b866..45e861e 100644
|
||
|
--- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c
|
||
|
+++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
|
||
|
@@ -971,6 +971,7 @@ static void iwl_mvm_bss_info_changed_station(struct iwl_mvm *mvm,
|
||
|
*/
|
||
|
iwl_mvm_remove_time_event(mvm, mvmvif,
|
||
|
&mvmvif->time_event_data);
|
||
|
+ iwl_mvm_sf_update(mvm, vif, false);
|
||
|
} else if (changes & (BSS_CHANGED_PS | BSS_CHANGED_P2P_PS |
|
||
|
BSS_CHANGED_QOS)) {
|
||
|
ret = iwl_mvm_power_update_mode(mvm, vif);
|
||
|
diff --git a/drivers/net/wireless/iwlwifi/mvm/sf.c b/drivers/net/wireless/iwlwifi/mvm/sf.c
|
||
|
index 8401627..88809b2 100644
|
||
|
--- a/drivers/net/wireless/iwlwifi/mvm/sf.c
|
||
|
+++ b/drivers/net/wireless/iwlwifi/mvm/sf.c
|
||
|
@@ -274,7 +274,8 @@ int iwl_mvm_sf_update(struct iwl_mvm *mvm, struct ieee80211_vif *changed_vif,
|
||
|
return -EINVAL;
|
||
|
if (changed_vif->type != NL80211_IFTYPE_STATION) {
|
||
|
new_state = SF_UNINIT;
|
||
|
- } else if (changed_vif->bss_conf.assoc) {
|
||
|
+ } else if (changed_vif->bss_conf.assoc &&
|
||
|
+ changed_vif->bss_conf.dtim_period) {
|
||
|
mvmvif = iwl_mvm_vif_from_mac80211(changed_vif);
|
||
|
sta_id = mvmvif->ap_sta_id;
|
||
|
new_state = SF_FULL_ON;
|
||
|
--
|
||
|
1.9.2
|
||
|
|