Lines Matching +full:local +full:- +full:timer +full:- +full:stop

1 // SPDX-License-Identifier: GPL-2.0
4 * Copyright (C) 2020-2021 Intel Corporation
11 #include "driver-ops.h"
14 static void ieee80211_sched_scan_cancel(struct ieee80211_local *local) in ieee80211_sched_scan_cancel() argument
16 if (ieee80211_request_sched_scan_stop(local)) in ieee80211_sched_scan_cancel()
18 cfg80211_sched_scan_stopped_locked(local->hw.wiphy, 0); in ieee80211_sched_scan_cancel()
23 struct ieee80211_local *local = hw_to_local(hw); in __ieee80211_suspend() local
27 if (!local->open_count) in __ieee80211_suspend()
30 ieee80211_scan_cancel(local); in __ieee80211_suspend()
32 ieee80211_dfs_cac_cancel(local); in __ieee80211_suspend()
34 ieee80211_roc_purge(local, NULL); in __ieee80211_suspend()
36 ieee80211_del_virtual_monitor(local); in __ieee80211_suspend()
39 !(wowlan && wowlan->any)) { in __ieee80211_suspend()
40 mutex_lock(&local->sta_mtx); in __ieee80211_suspend()
41 list_for_each_entry(sta, &local->sta_list, list) { in __ieee80211_suspend()
46 mutex_unlock(&local->sta_mtx); in __ieee80211_suspend()
50 if (!(wowlan && wowlan->any)) in __ieee80211_suspend()
51 ieee80211_sched_scan_cancel(local); in __ieee80211_suspend()
61 ieee80211_flush_queues(local, NULL, true); in __ieee80211_suspend()
63 local->quiescing = true; in __ieee80211_suspend()
67 flush_workqueue(local->workqueue); in __ieee80211_suspend()
70 del_timer_sync(&local->sta_cleanup); in __ieee80211_suspend()
73 * Note that this particular timer doesn't need to be in __ieee80211_suspend()
76 cancel_work_sync(&local->dynamic_ps_enable_work); in __ieee80211_suspend()
77 del_timer_sync(&local->dynamic_ps_timer); in __ieee80211_suspend()
79 local->wowlan = wowlan; in __ieee80211_suspend()
80 if (local->wowlan) { in __ieee80211_suspend()
88 * Thus, clean up in-progress auth/assoc first. in __ieee80211_suspend()
90 list_for_each_entry(sdata, &local->interfaces, list) { in __ieee80211_suspend()
93 if (sdata->vif.type != NL80211_IFTYPE_STATION) in __ieee80211_suspend()
99 * of power-save due to TX and during suspend in __ieee80211_suspend()
105 if (sdata->u.mgd.associated && in __ieee80211_suspend()
106 sdata->u.mgd.powersave && in __ieee80211_suspend()
107 !(local->hw.conf.flags & IEEE80211_CONF_PS)) { in __ieee80211_suspend()
108 local->hw.conf.flags |= IEEE80211_CONF_PS; in __ieee80211_suspend()
109 ieee80211_hw_config(local, in __ieee80211_suspend()
114 err = drv_suspend(local, wowlan); in __ieee80211_suspend()
116 local->quiescing = false; in __ieee80211_suspend()
117 local->wowlan = false; in __ieee80211_suspend()
119 mutex_lock(&local->sta_mtx); in __ieee80211_suspend()
121 &local->sta_list, list) { in __ieee80211_suspend()
124 mutex_unlock(&local->sta_mtx); in __ieee80211_suspend()
147 list_for_each_entry(sdata, &local->interfaces, list) { in __ieee80211_suspend()
150 switch (sdata->vif.type) { in __ieee80211_suspend()
161 flush_delayed_work(&sdata->dec_tailroom_needed_wk); in __ieee80211_suspend()
162 drv_remove_interface(local, sdata); in __ieee80211_suspend()
169 WARN_ON(!list_empty(&local->chanctx_list)); in __ieee80211_suspend()
171 /* stop hardware - this must stop RX */ in __ieee80211_suspend()
172 ieee80211_stop_device(local); in __ieee80211_suspend()
175 local->suspended = true; in __ieee80211_suspend()
178 local->quiescing = false; in __ieee80211_suspend()
195 cfg80211_report_wowlan_wakeup(&sdata->wdev, wakeup, gfp); in ieee80211_report_wowlan_wakeup()