aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/mvm/mac80211.c
diff options
context:
space:
mode:
authorEliad Peller <eliad@wizery.com>2013-12-05 10:19:39 -0500
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>2014-02-03 15:23:41 -0500
commit37577fe2499a4d83c39910702959832baf589bab (patch)
treed97c34db553b0793ba44ab24ef35bb8525a1d8ce /drivers/net/wireless/iwlwifi/mvm/mac80211.c
parentb77f06d9eccb2edb1ef78c30eb6d38632ed4f196 (diff)
iwlwifi: mvm: get status on D0i3 exit
Schedule work to query the wakeup reasons, and disconnect in some cases (e.g. beacon loss). Signed-off-by: Eliad Peller <eliadx.peller@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/mac80211.c')
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/mac80211.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/net/wireless/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
index 827510ea7eab..59b5b7a80d12 100644
--- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c
+++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
@@ -547,6 +547,7 @@ static void iwl_mvm_restart_cleanup(struct iwl_mvm *mvm)
547 iwl_mvm_cleanup_iterator, mvm); 547 iwl_mvm_cleanup_iterator, mvm);
548 548
549 mvm->p2p_device_vif = NULL; 549 mvm->p2p_device_vif = NULL;
550 mvm->d0i3_ap_sta_id = IWL_MVM_STATION_COUNT;
550 551
551 iwl_mvm_reset_phy_ctxts(mvm); 552 iwl_mvm_reset_phy_ctxts(mvm);
552 memset(mvm->fw_key_table, 0, sizeof(mvm->fw_key_table)); 553 memset(mvm->fw_key_table, 0, sizeof(mvm->fw_key_table));
@@ -602,6 +603,7 @@ static void iwl_mvm_mac_stop(struct ieee80211_hw *hw)
602{ 603{
603 struct iwl_mvm *mvm = IWL_MAC80211_GET_MVM(hw); 604 struct iwl_mvm *mvm = IWL_MAC80211_GET_MVM(hw);
604 605
606 flush_work(&mvm->d0i3_exit_work);
605 flush_work(&mvm->async_handlers_wk); 607 flush_work(&mvm->async_handlers_wk);
606 608
607 mutex_lock(&mvm->mutex); 609 mutex_lock(&mvm->mutex);
@@ -1216,6 +1218,9 @@ static void iwl_mvm_bss_info_changed_station(struct iwl_mvm *mvm,
1216 ret = iwl_mvm_rm_sta_id(mvm, vif, mvmvif->ap_sta_id); 1218 ret = iwl_mvm_rm_sta_id(mvm, vif, mvmvif->ap_sta_id);
1217 if (ret) 1219 if (ret)
1218 IWL_ERR(mvm, "failed to remove AP station\n"); 1220 IWL_ERR(mvm, "failed to remove AP station\n");
1221
1222 if (mvm->d0i3_ap_sta_id == mvmvif->ap_sta_id)
1223 mvm->d0i3_ap_sta_id = IWL_MVM_STATION_COUNT;
1219 mvmvif->ap_sta_id = IWL_MVM_STATION_COUNT; 1224 mvmvif->ap_sta_id = IWL_MVM_STATION_COUNT;
1220 /* remove quota for this interface */ 1225 /* remove quota for this interface */
1221 ret = iwl_mvm_update_quotas(mvm, NULL); 1226 ret = iwl_mvm_update_quotas(mvm, NULL);