drivers/net/wireless/realtek/rtw89/mac_be.c

Source file repositories/reference/linux-study-clean/drivers/net/wireless/realtek/rtw89/mac_be.c

File Facts

System
Linux kernel
Corpus path
drivers/net/wireless/realtek/rtw89/mac_be.c
Extension
.c
Size
100211 bytes
Lines
3330
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

if (ret) {
			rtw89_err(rtwdev, "[ERR]Polling HAXI IO timeout= %X\n", val32);
			return ret;
		}

		rtw89_write32_clr(rtwdev, R_BE_HCI_OPT_CTRL, B_BE_HCI_WLAN_IO_EN);

		ret = read_poll_timeout(rtw89_read32_mask, val32, !val32,
					1000, 2000000, false,
					rtwdev, R_BE_HCI_OPT_CTRL, B_BE_HCI_WLAN_IO_ST);
		if (ret) {
			rtw89_err(rtwdev, "[ERR]Polling WLAN IO timeout= %X\n", val32);
			return ret;
		}

		rtw89_write32_clr(rtwdev, R_BE_SYS_PW_CTRL, B_BE_EN_WLON);
		rtw89_write32_clr(rtwdev, R_BE_SYS_PW_CTRL, B_BE_APFM_SWLPS);
	} else if (val32 == MAC_AX_MAC_ON) {
		rtw89_write32_clr(rtwdev, R_BE_HCI_OPT_CTRL, B_BE_HAXIDMA_IO_EN);

		ret = read_poll_timeout(rtw89_read32_mask, val32, !val32,
					1000, 2000000, false,
					rtwdev, R_BE_HCI_OPT_CTRL,
					B_BE_HAXIDMA_IO_ST | B_BE_HAXIDMA_BACKUP_RESTORE_ST);
		if (ret) {
			rtw89_err(rtwdev, "[ERR]Polling HAXI IO timeout= %X\n", val32);
			return ret;
		}

		rtw89_write32_clr(rtwdev, R_BE_HCI_OPT_CTRL, B_BE_HCI_WLAN_IO_EN);

		ret = read_poll_timeout(rtw89_read32_mask, val32, !val32,
					1000, 2000000, false,
					rtwdev, R_BE_HCI_OPT_CTRL, B_BE_HCI_WLAN_IO_ST);
		if (ret) {
			rtw89_err(rtwdev, "[ERR]Polling WLAN IO timeout= %X\n", val32);
			return ret;
		}

		rtw89_write32_set(rtwdev, R_BE_SYS_PW_CTRL, B_BE_EN_WLON);
		rtw89_write32_set(rtwdev, R_BE_SYS_PW_CTRL, B_BE_APFM_OFFMAC);

		ret = read_poll_timeout(rtw89_read32_mask, val32, val32 == MAC_AX_MAC_OFF,
					1000, 2000000, false,
					rtwdev, R_BE_SYS_PW_CTRL, B_BE_APFM_OFFMAC);
		if (ret) {
			rtw89_err(rtwdev, "[ERR]Polling MAC state timeout= %X\n", val32);
			return ret;
		}

		rtw89_write32_clr(rtwdev, R_BE_SYS_PW_CTRL, B_BE_EN_WLON);
		rtw89_write32_clr(rtwdev, R_BE_SYS_PW_CTRL, B_BE_APFM_SWLPS);
	} else if (val32 == MAC_AX_MAC_LPS) {
		rtw89_write32_clr(rtwdev, R_BE_HCI_OPT_CTRL, B_BE_HAXIDMA_IO_EN);

		ret = read_poll_timeout(rtw89_read32_mask, val32, !val32,
					1000, 2000000, false,
					rtwdev, R_BE_HCI_OPT_CTRL,
					B_BE_HAXIDMA_IO_ST | B_BE_HAXIDMA_BACKUP_RESTORE_ST);
		if (ret) {
			rtw89_err(rtwdev, "[ERR]Polling HAXI IO timeout= %X\n", val32);
			return ret;
		}

		rtw89_write32_clr(rtwdev, R_BE_HCI_OPT_CTRL, B_BE_HCI_WLAN_IO_EN);

		ret = read_poll_timeout(rtw89_read32_mask, val32, !val32,
					1000, 2000000, false,
					rtwdev, R_BE_HCI_OPT_CTRL, B_BE_HCI_WLAN_IO_ST);
		if (ret) {
			rtw89_err(rtwdev, "[ERR]Polling WLAN IO timeout= %X\n", val32);
			return ret;
		}

		rtw89_write32_set(rtwdev, R_BE_WLLPS_CTRL, B_BE_FORCE_LEAVE_LPS);

		ret = read_poll_timeout(rtw89_read32_mask, val32, val32 == MAC_AX_MAC_ON,
					1000, 2000000, false,
					rtwdev, R_BE_IC_PWR_STATE, B_BE_WLMAC_PWR_STE_MASK);
		if (ret) {
			rtw89_err(rtwdev, "[ERR]Polling MAC STS timeout= %X\n", val32);
			return ret;
		}

		rtw89_write32_set(rtwdev, R_BE_SYS_PW_CTRL, B_BE_EN_WLON);
		rtw89_write32_set(rtwdev, R_BE_SYS_PW_CTRL, B_BE_APFM_OFFMAC);

		ret = read_poll_timeout(rtw89_read32_mask, val32, val32 == MAC_AX_MAC_OFF,
					1000, 2000000, false,
					rtwdev, R_BE_SYS_PW_CTRL, B_BE_APFM_OFFMAC);

Annotation

Implementation Notes