aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/intel/iwlwifi/mvm/scan.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2016-07-14 19:27:42 -0400
committerDavid S. Miller <davem@davemloft.net>2016-07-14 19:32:27 -0400
commit88b3ec527416f95ac4eae3cd458249143105deb8 (patch)
tree601973e8ccc882145068c77ef6be013307a18a36 /drivers/net/wireless/intel/iwlwifi/mvm/scan.c
parentd8c62a91f7fd4239576d105b741140434e5368a0 (diff)
parent25f700ef0653d7644ed273f8770230e734cae726 (diff)
Merge tag 'wireless-drivers-next-for-davem-2016-07-13' of git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers-next
Kalle Valo says: ==================== wireless-drivers-next patches for 4.8 Major changes: iwlwifi * more work on the RX path for the 9000 device series * some more dynamic queue allocation work * SAR BIOS implementation * some work on debugging capabilities * added support for GCMP encryption * data path rework in preparation for new HW * some cleanup to remove transport dependency on mac80211 * support for MSIx in preparation for new HW * lots of work in preparation for HW support (9000 and a000 series) mwifiex * implement get_tx_power and get_antenna cfg80211 operation callbacks wl18xx * add support for 64bit clock rtl8xxxu * aggregation support (optional for now) Also wireless-drivers is merged to fix some conflicts. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/wireless/intel/iwlwifi/mvm/scan.c')
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/scan.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/scan.c b/drivers/net/wireless/intel/iwlwifi/mvm/scan.c
index 1cac10c5d818..dac120f8861b 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/scan.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/scan.c
@@ -402,7 +402,7 @@ void iwl_mvm_rx_lmac_scan_complete_notif(struct iwl_mvm *mvm,
402 mvm->scan_status &= ~IWL_MVM_SCAN_REGULAR; 402 mvm->scan_status &= ~IWL_MVM_SCAN_REGULAR;
403 ieee80211_scan_completed(mvm->hw, &info); 403 ieee80211_scan_completed(mvm->hw, &info);
404 iwl_mvm_unref(mvm, IWL_MVM_REF_SCAN); 404 iwl_mvm_unref(mvm, IWL_MVM_REF_SCAN);
405 del_timer(&mvm->scan_timer); 405 cancel_delayed_work(&mvm->scan_timeout_dwork);
406 } else { 406 } else {
407 IWL_ERR(mvm, 407 IWL_ERR(mvm,
408 "got scan complete notification but no scan is running\n"); 408 "got scan complete notification but no scan is running\n");
@@ -1225,15 +1225,16 @@ static int iwl_mvm_check_running_scans(struct iwl_mvm *mvm, int type)
1225 return -EIO; 1225 return -EIO;
1226} 1226}
1227 1227
1228#define SCAN_TIMEOUT (20 * HZ) 1228#define SCAN_TIMEOUT 20000
1229 1229
1230void iwl_mvm_scan_timeout(unsigned long data) 1230void iwl_mvm_scan_timeout_wk(struct work_struct *work)
1231{ 1231{
1232 struct iwl_mvm *mvm = (struct iwl_mvm *)data; 1232 struct delayed_work *delayed_work = to_delayed_work(work);
1233 struct iwl_mvm *mvm = container_of(delayed_work, struct iwl_mvm,
1234 scan_timeout_dwork);
1233 1235
1234 IWL_ERR(mvm, "regular scan timed out\n"); 1236 IWL_ERR(mvm, "regular scan timed out\n");
1235 1237
1236 del_timer(&mvm->scan_timer);
1237 iwl_force_nmi(mvm->trans); 1238 iwl_force_nmi(mvm->trans);
1238} 1239}
1239 1240
@@ -1316,7 +1317,8 @@ int iwl_mvm_reg_scan_start(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
1316 mvm->scan_status |= IWL_MVM_SCAN_REGULAR; 1317 mvm->scan_status |= IWL_MVM_SCAN_REGULAR;
1317 iwl_mvm_ref(mvm, IWL_MVM_REF_SCAN); 1318 iwl_mvm_ref(mvm, IWL_MVM_REF_SCAN);
1318 1319
1319 mod_timer(&mvm->scan_timer, jiffies + SCAN_TIMEOUT); 1320 queue_delayed_work(system_wq, &mvm->scan_timeout_dwork,
1321 msecs_to_jiffies(SCAN_TIMEOUT));
1320 1322
1321 return 0; 1323 return 0;
1322} 1324}
@@ -1439,7 +1441,7 @@ void iwl_mvm_rx_umac_scan_complete_notif(struct iwl_mvm *mvm,
1439 1441
1440 ieee80211_scan_completed(mvm->hw, &info); 1442 ieee80211_scan_completed(mvm->hw, &info);
1441 iwl_mvm_unref(mvm, IWL_MVM_REF_SCAN); 1443 iwl_mvm_unref(mvm, IWL_MVM_REF_SCAN);
1442 del_timer(&mvm->scan_timer); 1444 cancel_delayed_work(&mvm->scan_timeout_dwork);
1443 } else if (mvm->scan_uid_status[uid] == IWL_MVM_SCAN_SCHED) { 1445 } else if (mvm->scan_uid_status[uid] == IWL_MVM_SCAN_SCHED) {
1444 ieee80211_sched_scan_stopped(mvm->hw); 1446 ieee80211_sched_scan_stopped(mvm->hw);
1445 mvm->sched_scan_pass_all = SCHED_SCAN_PASS_ALL_DISABLED; 1447 mvm->sched_scan_pass_all = SCHED_SCAN_PASS_ALL_DISABLED;
@@ -1644,7 +1646,7 @@ out:
1644 * to release the scan reference here. 1646 * to release the scan reference here.
1645 */ 1647 */
1646 iwl_mvm_unref(mvm, IWL_MVM_REF_SCAN); 1648 iwl_mvm_unref(mvm, IWL_MVM_REF_SCAN);
1647 del_timer(&mvm->scan_timer); 1649 cancel_delayed_work(&mvm->scan_timeout_dwork);
1648 if (notify) { 1650 if (notify) {
1649 struct cfg80211_scan_info info = { 1651 struct cfg80211_scan_info info = {
1650 .aborted = true, 1652 .aborted = true,