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.
- 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.
- Exports symbols or registers init work; inspect boot/module ordering and who consumes the exported contract.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
debug.hefuse.hfw.hmac.hreg.h
Detected Declarations
function rtw89_mac_check_mac_en_befunction is_qta_pohfunction hfc_get_mix_info_befunction hfc_h2c_cfg_befunction hfc_mix_cfg_befunction hfc_func_en_befunction dle_func_en_befunction dle_clk_en_befunction dle_mix_cfg_befunction chk_dle_rdy_befunction wde_quota_cfg_befunction ple_quota_cfg_befunction rtw89_mac_hci_func_en_befunction rtw89_mac_dmac_func_pre_en_befunction rtw89_mac_write_xtal_si_befunction rtw89_mac_read_xtal_si_befunction rtw89_mac_reset_pwr_state_befunction rtw89_mac_disable_cpu_befunction rtw89_mac_fwdl_preconfig_befunction set_cpu_enfunction wcpu_onfunction rtw89_mac_fwdl_enable_wcpu_befunction fwdl_get_status_befunction rtw89_fwdl_check_path_ready_befunction dmac_func_en_befunction cmac_share_func_en_befunction cmac_pwr_en_befunction cmac_func_en_befunction chip_func_en_befunction sys_init_befunction mac_func_en_befunction sta_sch_init_befunction mpdu_proc_init_befunction sec_eng_init_befunction txpktctrl_init_befunction mlo_init_befunction dmac_init_befunction scheduler_init_befunction addr_cam_init_befunction rtw89_mac_typ_fltr_opt_befunction rx_fltr_init_befunction cca_ctrl_init_befunction nav_ctrl_init_befunction spatial_reuse_init_befunction tmac_init_befunction trxptcl_init_befunction rst_bacam_befunction rmac_init_be
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
- Immediate include surface: `debug.h`, `efuse.h`, `fw.h`, `mac.h`, `reg.h`.
- Detected declarations: `function rtw89_mac_check_mac_en_be`, `function is_qta_poh`, `function hfc_get_mix_info_be`, `function hfc_h2c_cfg_be`, `function hfc_mix_cfg_be`, `function hfc_func_en_be`, `function dle_func_en_be`, `function dle_clk_en_be`, `function dle_mix_cfg_be`, `function chk_dle_rdy_be`.
- Atlas domain: Driver Families / drivers/net.
- Implementation status: integration implementation candidate.
- Synchronization appears in or near this file; preserve lock ordering, sleepability, and interrupt-context constraints.
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.