drivers/net/wireless/realtek/rtw88/ps.c

Source file repositories/reference/linux-study-clean/drivers/net/wireless/realtek/rtw88/ps.c

File Facts

System
Linux kernel
Corpus path
drivers/net/wireless/realtek/rtw88/ps.c
Extension
.c
Size
8078 bytes
Lines
344
Domain
Driver Families
Bucket
drivers/net
Inferred role
Driver Families: exported/initcall integration point
Status
integration implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

struct rtw_vif_recalc_lps_iter_data {
	struct rtw_dev *rtwdev;
	struct ieee80211_vif *found_vif;
	int count;
};

static void __rtw_vif_recalc_lps(struct rtw_vif_recalc_lps_iter_data *data,
				 struct ieee80211_vif *vif)
{
	if (data->count < 0)
		return;

	if (vif->type != NL80211_IFTYPE_STATION) {
		data->count = -1;
		return;
	}

	data->count++;
	data->found_vif = vif;
}

static void rtw_vif_recalc_lps_iter(void *data, struct ieee80211_vif *vif)
{
	__rtw_vif_recalc_lps(data, vif);
}

void rtw_recalc_lps(struct rtw_dev *rtwdev, struct ieee80211_vif *new_vif)
{
	struct rtw_vif_recalc_lps_iter_data data = { .rtwdev = rtwdev };

	if (new_vif)
		__rtw_vif_recalc_lps(&data, new_vif);
	rtw_iterate_vifs(rtwdev, rtw_vif_recalc_lps_iter, &data);

	if (data.count == 1 && data.found_vif->cfg.ps) {
		rtwdev->ps_enabled = true;
	} else {
		rtwdev->ps_enabled = false;
		rtw_leave_lps(rtwdev);
	}
}

Annotation

Implementation Notes