net/mac80211/pm.c
Source file repositories/reference/linux-study-clean/net/mac80211/pm.c
File Facts
- System
- Linux kernel
- Corpus path
net/mac80211/pm.c- Extension
.c- Size
- 5391 bytes
- Lines
- 201
- Domain
- Networking Core
- Bucket
- Sockets, Protocols, Packet Path, And Network Policy
- Inferred role
- Networking Core: exported/initcall integration point
- Status
- integration implementation candidate
Why This File Exists
Networking stack implementation surface: socket APIs, protocol dispatch, packet flow, routing, filtering, and network namespaces.
- Networking stack implementation surface: socket APIs, protocol dispatch, packet flow, routing, filtering, and network namespaces.
- Exports symbols or registers init work; inspect boot/module ordering and who consumes the exported contract.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
net/mac80211.hnet/rtnetlink.hieee80211_i.hmesh.hdriver-ops.hled.h
Detected Declarations
function Copyrightfunction __ieee80211_suspendfunction list_for_each_entryfunction list_for_each_entryfunction enabledfunction list_for_each_entryfunction __ieee80211_resumeexport ieee80211_report_wowlan_wakeup
Annotated Snippet
list_for_each_entry(sta, &local->sta_list, list) {
set_sta_flag(sta, WLAN_STA_BLOCK_BA);
ieee80211_sta_tear_down_BA_sessions(
sta, AGG_STOP_LOCAL_REQUEST);
}
}
/* keep sched_scan only in case of 'any' trigger */
if (!(wowlan && wowlan->any))
ieee80211_sched_scan_cancel(local);
ieee80211_stop_queues_by_reason(hw,
IEEE80211_MAX_QUEUE_MAP,
IEEE80211_QUEUE_STOP_REASON_SUSPEND,
false);
/* flush out all packets */
synchronize_net();
ieee80211_flush_queues(local, NULL, true);
local->quiescing = true;
/* make quiescing visible to timers everywhere */
mb();
flush_workqueue(local->workqueue);
/* Don't try to run timers while suspended. */
timer_delete_sync(&local->sta_cleanup);
/*
* Note that this particular timer doesn't need to be
* restarted at resume.
*/
wiphy_work_cancel(local->hw.wiphy, &local->dynamic_ps_enable_work);
timer_delete_sync(&local->dynamic_ps_timer);
local->wowlan = wowlan;
if (local->wowlan) {
int err;
/* Drivers don't expect to suspend while some operations like
* authenticating or associating are in progress. It doesn't
* make sense anyway to accept that, since the authentication
* or association would never finish since the driver can't do
* that on its own.
* Thus, clean up in-progress auth/assoc first.
*/
list_for_each_entry(sdata, &local->interfaces, list) {
if (!ieee80211_sdata_running(sdata))
continue;
if (sdata->vif.type != NL80211_IFTYPE_STATION)
continue;
ieee80211_mgd_quiesce(sdata);
/* If suspended during TX in progress, and wowlan
* is enabled (connection will be active) there
* can be a race where the driver is put out
* of power-save due to TX and during suspend
* dynamic_ps_timer is cancelled and TX packet
* is flushed, leaving the driver in ACTIVE even
* after resuming until dynamic_ps_timer puts
* driver back in DOZE.
*/
if (sdata->u.mgd.associated &&
sdata->u.mgd.powersave &&
!(local->hw.conf.flags & IEEE80211_CONF_PS)) {
local->hw.conf.flags |= IEEE80211_CONF_PS;
ieee80211_hw_config(local, -1,
IEEE80211_CONF_CHANGE_PS);
}
}
err = drv_suspend(local, wowlan);
if (err < 0) {
local->quiescing = false;
local->wowlan = false;
if (ieee80211_hw_check(hw, AMPDU_AGGREGATION)) {
lockdep_assert_wiphy(local->hw.wiphy);
list_for_each_entry(sta,
&local->sta_list, list) {
clear_sta_flag(sta, WLAN_STA_BLOCK_BA);
}
}
ieee80211_wake_queues_by_reason(hw,
IEEE80211_MAX_QUEUE_MAP,
IEEE80211_QUEUE_STOP_REASON_SUSPEND,
false);
return err;
} else if (err > 0) {
WARN_ON(err != 1);
Annotation
- Immediate include surface: `net/mac80211.h`, `net/rtnetlink.h`, `ieee80211_i.h`, `mesh.h`, `driver-ops.h`, `led.h`.
- Detected declarations: `function Copyright`, `function __ieee80211_suspend`, `function list_for_each_entry`, `function list_for_each_entry`, `function enabled`, `function list_for_each_entry`, `function __ieee80211_resume`, `export ieee80211_report_wowlan_wakeup`.
- Atlas domain: Networking Core / Sockets, Protocols, Packet Path, And Network Policy.
- Implementation status: integration implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.