iwlwifi: mvm: allow keeping connections in d3_test
authorEliad Peller <eliad@wizery.com>
Thu, 7 Nov 2013 12:13:30 +0000 (14:13 +0200)
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Mon, 9 Dec 2013 20:29:03 +0000 (22:29 +0200)
Keeping connection can be useful also when testing d3
using the debugfs file (d3_test).

Save the vif to keep connection on, and consider it
when iterating over the interfaces.

Signed-off-by: Eliad Peller <eliad@wizery.com>
Reviewed-by: Luciano Coelho <luciano.coelho@intel.com>
Reviewed-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
drivers/net/wireless/iwlwifi/mvm/d3.c
drivers/net/wireless/iwlwifi/mvm/mvm.h

index 96b09d9d706857206d05a2560463cc7f96442f1d..b9e1f30e33de29ca14c61ee08114c910b6753579 100644 (file)
@@ -1807,6 +1807,10 @@ static int __iwl_mvm_resume(struct iwl_mvm *mvm, bool test)
        iwl_mvm_read_d3_sram(mvm);
 
        keep = iwl_mvm_query_wakeup_reasons(mvm, vif);
+#ifdef CONFIG_IWLWIFI_DEBUGFS
+       if (keep)
+               mvm->keep_vif = vif;
+#endif
        /* has unlocked the mutex, so skip that */
        goto out;
 
@@ -1863,6 +1867,7 @@ static int iwl_mvm_d3_test_open(struct inode *inode, struct file *file)
                return err;
        }
        mvm->d3_test_active = true;
+       mvm->keep_vif = NULL;
        return 0;
 }
 
@@ -1891,6 +1896,10 @@ static ssize_t iwl_mvm_d3_test_read(struct file *file, char __user *user_buf,
 static void iwl_mvm_d3_test_disconn_work_iter(void *_data, u8 *mac,
                                              struct ieee80211_vif *vif)
 {
+       /* skip the one we keep connection on */
+       if (_data == vif)
+               return;
+
        if (vif->type == NL80211_IFTYPE_STATION)
                ieee80211_connection_loss(vif);
 }
@@ -1917,7 +1926,7 @@ static int iwl_mvm_d3_test_release(struct inode *inode, struct file *file)
 
        ieee80211_iterate_active_interfaces_atomic(
                mvm->hw, IEEE80211_IFACE_ITER_NORMAL,
-               iwl_mvm_d3_test_disconn_work_iter, NULL);
+               iwl_mvm_d3_test_disconn_work_iter, mvm->keep_vif);
 
        ieee80211_wake_queues(mvm->hw);
 
index 7992baabb882b9f9646d9266deacf69610f28dbc..c002b45e03c95726f9f8bd7f2701b37e9388339d 100644 (file)
@@ -531,6 +531,7 @@ struct iwl_mvm {
        bool store_d3_resume_sram;
        void *d3_resume_sram;
        u32 d3_test_pme_ptr;
+       struct ieee80211_vif *keep_vif;
 #endif
 #endif