drivers/net/wireless/realtek/rtlwifi/rtl8192du/hw.c
Source file repositories/reference/linux-study-clean/drivers/net/wireless/realtek/rtlwifi/rtl8192du/hw.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/net/wireless/realtek/rtlwifi/rtl8192du/hw.c- Extension
.c- Size
- 32937 bytes
- Lines
- 1213
- Domain
- Driver Families
- Bucket
- drivers/net
- Inferred role
- Driver Families: implementation source
- Status
- source 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.
- 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
../wifi.h../cam.h../usb.h../rtl8192d/reg.h../rtl8192d/def.h../rtl8192d/dm_common.h../rtl8192d/fw_common.h../rtl8192d/hw_common.h../rtl8192d/phy_common.hphy.hdm.hfw.hhw.htrx.h
Detected Declarations
function _rtl92du_set_bcn_ctrl_regfunction _rtl92du_enable_bcn_sub_funcfunction _rtl92du_disable_bcn_sub_funcfunction rtl92du_get_hw_regfunction rtl92du_set_hw_regfunction _rtl92du_init_queue_reserved_pagefunction _rtl92du_init_tx_buffer_boundaryfunction _rtl92du_llt_table_initfunction _rtl92du_init_chipn_reg_priorityfunction _rtl92du_init_chipn_one_out_ep_priorityfunction _rtl92du_init_chipn_two_out_ep_priorityfunction _rtl92du_init_chipn_three_out_ep_priorityfunction _rtl92du_init_queue_priorityfunction _rtl92du_init_wmac_settingfunction _rtl92du_init_adaptive_ctrlfunction _rtl92du_init_edcafunction _rtl92du_init_retry_functionfunction _rtl92du_init_operation_modefunction _rtl92du_init_beacon_parametersfunction _rtl92du_init_ampdu_aggregationfunction _rtl92du_init_power_onfunction _rtl92du_init_macfunction rtl92du_hw_initfunction _rtl92du_set_media_statusfunction rtl92du_set_check_bssidfunction rtl92du_set_network_typefunction rtl92du_linked_set_regfunction rtl92du_enable_interruptfunction rtl92du_card_disablefunction rtl92du_set_beacon_related_registersfunction rtl92du_set_beacon_intervalfunction rtl92du_update_interrupt_mask
Annotated Snippet
if (acm) {
switch (e_aci) {
case AC0_BE:
acm_ctrl |= ACMHW_BEQEN;
break;
case AC2_VI:
acm_ctrl |= ACMHW_VIQEN;
break;
case AC3_VO:
acm_ctrl |= ACMHW_VOQEN;
break;
default:
rtl_dbg(rtlpriv, COMP_ERR, DBG_WARNING,
"HW_VAR_ACM_CTRL acm set failed: eACI is %d\n",
acm);
break;
}
} else {
switch (e_aci) {
case AC0_BE:
acm_ctrl &= (~ACMHW_BEQEN);
break;
case AC2_VI:
acm_ctrl &= (~ACMHW_VIQEN);
break;
case AC3_VO:
acm_ctrl &= (~ACMHW_VOQEN);
break;
default:
pr_err("%s:%d switch case %#x not processed\n",
__func__, __LINE__, e_aci);
break;
}
}
rtl_dbg(rtlpriv, COMP_QOS, DBG_TRACE,
"SetHwReg8190pci(): [HW_VAR_ACM_CTRL] Write 0x%X\n",
acm_ctrl);
rtl_write_byte(rtlpriv, REG_ACMHWCTRL, acm_ctrl);
break;
}
case HW_VAR_RCR:
mac->rx_conf = ((u32 *)val)[0];
rtl_write_dword(rtlpriv, REG_RCR, mac->rx_conf);
break;
case HW_VAR_H2C_FW_JOINBSSRPT: {
u8 tmp_regcr, tmp_reg422;
bool recover = false;
u8 mstatus = *val;
if (mstatus == RT_MEDIA_CONNECT) {
rtlpriv->cfg->ops->set_hw_reg(hw,
HW_VAR_AID, NULL);
tmp_regcr = rtl_read_byte(rtlpriv, REG_CR + 1);
rtl_write_byte(rtlpriv, REG_CR + 1,
tmp_regcr | ENSWBCN);
_rtl92du_set_bcn_ctrl_reg(hw, 0, EN_BCN_FUNCTION);
_rtl92du_set_bcn_ctrl_reg(hw, DIS_TSF_UDT, 0);
tmp_reg422 = rtl_read_byte(rtlpriv,
REG_FWHW_TXQ_CTRL + 2);
if (tmp_reg422 & (EN_BCNQ_DL >> 16))
recover = true;
rtl_write_byte(rtlpriv, REG_FWHW_TXQ_CTRL + 2,
tmp_reg422 & ~(EN_BCNQ_DL >> 16));
/* We don't implement FW LPS so this is not needed. */
/* rtl92d_set_fw_rsvdpagepkt(hw, 0); */
_rtl92du_set_bcn_ctrl_reg(hw, EN_BCN_FUNCTION, 0);
_rtl92du_set_bcn_ctrl_reg(hw, 0, DIS_TSF_UDT);
if (recover)
rtl_write_byte(rtlpriv,
REG_FWHW_TXQ_CTRL + 2,
tmp_reg422);
rtl_write_byte(rtlpriv, REG_CR + 1,
tmp_regcr & ~ENSWBCN);
}
rtl92d_set_fw_joinbss_report_cmd(hw, (*val));
break;
}
case HW_VAR_CORRECT_TSF: {
u8 btype_ibss = val[0];
if (btype_ibss)
rtl92d_stop_tx_beacon(hw);
_rtl92du_set_bcn_ctrl_reg(hw, 0, EN_BCN_FUNCTION);
rtl_write_dword(rtlpriv, REG_TSFTR,
(u32)(mac->tsf & 0xffffffff));
rtl_write_dword(rtlpriv, REG_TSFTR + 4,
(u32)((mac->tsf >> 32) & 0xffffffff));
_rtl92du_set_bcn_ctrl_reg(hw, EN_BCN_FUNCTION, 0);
Annotation
- Immediate include surface: `../wifi.h`, `../cam.h`, `../usb.h`, `../rtl8192d/reg.h`, `../rtl8192d/def.h`, `../rtl8192d/dm_common.h`, `../rtl8192d/fw_common.h`, `../rtl8192d/hw_common.h`.
- Detected declarations: `function _rtl92du_set_bcn_ctrl_reg`, `function _rtl92du_enable_bcn_sub_func`, `function _rtl92du_disable_bcn_sub_func`, `function rtl92du_get_hw_reg`, `function rtl92du_set_hw_reg`, `function _rtl92du_init_queue_reserved_page`, `function _rtl92du_init_tx_buffer_boundary`, `function _rtl92du_llt_table_init`, `function _rtl92du_init_chipn_reg_priority`, `function _rtl92du_init_chipn_one_out_ep_priority`.
- Atlas domain: Driver Families / drivers/net.
- Implementation status: source 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.