Lines Matching +full:keep +full:- +full:power +full:- +full:in +full:- +full:suspend
1 // SPDX-License-Identifier: GPL-2.0
4 * Copyright (C) 2020-2021, 2023-2024 Intel Corporation
11 #include "driver-ops.h"
18 cfg80211_sched_scan_stopped_locked(local->hw.wiphy, 0); in ieee80211_sched_scan_cancel()
27 if (!local->open_count) in __ieee80211_suspend()
28 goto suspend; in __ieee80211_suspend()
30 local->suspending = true; in __ieee80211_suspend()
42 !(wowlan && wowlan->any)) { in __ieee80211_suspend()
43 lockdep_assert_wiphy(local->hw.wiphy); in __ieee80211_suspend()
44 list_for_each_entry(sta, &local->sta_list, list) { in __ieee80211_suspend()
51 /* keep sched_scan only in case of 'any' trigger */ in __ieee80211_suspend()
52 if (!(wowlan && wowlan->any)) in __ieee80211_suspend()
65 local->quiescing = true; in __ieee80211_suspend()
69 flush_workqueue(local->workqueue); in __ieee80211_suspend()
72 timer_delete_sync(&local->sta_cleanup); in __ieee80211_suspend()
78 wiphy_work_cancel(local->hw.wiphy, &local->dynamic_ps_enable_work); in __ieee80211_suspend()
79 timer_delete_sync(&local->dynamic_ps_timer); in __ieee80211_suspend()
81 local->wowlan = wowlan; in __ieee80211_suspend()
82 if (local->wowlan) { in __ieee80211_suspend()
85 /* Drivers don't expect to suspend while some operations like in __ieee80211_suspend()
86 * authenticating or associating are in progress. It doesn't in __ieee80211_suspend()
90 * Thus, clean up in-progress auth/assoc first. in __ieee80211_suspend()
92 list_for_each_entry(sdata, &local->interfaces, list) { in __ieee80211_suspend()
95 if (sdata->vif.type != NL80211_IFTYPE_STATION) in __ieee80211_suspend()
98 /* If suspended during TX in progress, and wowlan in __ieee80211_suspend()
101 * of power-save due to TX and during suspend in __ieee80211_suspend()
103 * is flushed, leaving the driver in ACTIVE even in __ieee80211_suspend()
105 * driver back in DOZE. in __ieee80211_suspend()
107 if (sdata->u.mgd.associated && in __ieee80211_suspend()
108 sdata->u.mgd.powersave && in __ieee80211_suspend()
109 !(local->hw.conf.flags & IEEE80211_CONF_PS)) { in __ieee80211_suspend()
110 local->hw.conf.flags |= IEEE80211_CONF_PS; in __ieee80211_suspend()
118 local->quiescing = false; in __ieee80211_suspend()
119 local->wowlan = false; in __ieee80211_suspend()
121 lockdep_assert_wiphy(local->hw.wiphy); in __ieee80211_suspend()
123 &local->sta_list, list) { in __ieee80211_suspend()
143 goto suspend; in __ieee80211_suspend()
147 /* remove all interfaces that were created in the driver */ in __ieee80211_suspend()
148 list_for_each_entry(sdata, &local->interfaces, list) { in __ieee80211_suspend()
151 switch (sdata->vif.type) { in __ieee80211_suspend()
162 wiphy_delayed_work_flush(local->hw.wiphy, in __ieee80211_suspend()
163 &sdata->dec_tailroom_needed_wk); in __ieee80211_suspend()
168 * We disconnected on all interfaces before suspend, all channel in __ieee80211_suspend()
171 WARN_ON(!list_empty(&local->chanctx_list)); in __ieee80211_suspend()
173 /* stop hardware - this must stop RX */ in __ieee80211_suspend()
176 suspend: in __ieee80211_suspend()
177 local->suspended = true; in __ieee80211_suspend()
180 local->quiescing = false; in __ieee80211_suspend()
181 local->suspending = false; in __ieee80211_suspend()
198 cfg80211_report_wowlan_wakeup(&sdata->wdev, wakeup, gfp); in ieee80211_report_wowlan_wakeup()