drivers/net/wireless/realtek/rtlwifi/rtl8192cu/hw.c
Source file repositories/reference/linux-study-clean/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/hw.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/net/wireless/realtek/rtlwifi/rtl8192cu/hw.c- Extension
.c- Size
- 65428 bytes
- Lines
- 2172
- 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.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
../wifi.h../efuse.h../base.h../cam.h../ps.h../usb.hreg.hdef.hphy.h../rtl8192c/phy_common.hmac.hdm.h../rtl8192c/dm_common.h../rtl8192c/fw_common.hhw.h../rtl8192ce/hw.htrx.hled.htable.h
Detected Declarations
function _rtl92cu_phy_param_tab_initfunction _rtl92cu_read_txpower_info_from_hwpgfunction _rtl92cu_read_board_typefunction _rtl92cu_read_adapter_infofunction _rtl92cu_hal_customized_behaviorfunction rtl92cu_read_eeprom_infofunction _rtl92cu_init_power_onfunction _rtl92cu_init_queue_reserved_pagefunction _rtl92c_init_trx_bufferfunction _rtl92c_init_chipn_reg_priorityfunction _rtl92cu_init_chipn_one_out_ep_priorityfunction _rtl92cu_init_chipn_two_out_ep_priorityfunction _rtl92cu_init_chipn_three_out_ep_priorityfunction _rtl92cu_init_chipn_queue_priorityfunction _rtl92cu_init_chipt_queue_priorityfunction _rtl92cu_init_queue_priorityfunction _rtl92cu_init_wmac_settingfunction _rtl92cu_init_beacon_parametersfunction _rtl92cu_init_macfunction rtl92cu_enable_hw_security_configfunction _rtl92cu_hw_configurefunction _initpabiasfunction IS_92C_SERIALfunction rtl92cu_hw_initfunction disable_rfafeandresetbbfunction _resetdigitalprocedure1function _resetdigitalprocedure2function _disablegpiofunction disable_analogfunction carddisable_hwsmfunction carddisablewithout_hwsmfunction _rtl92cu_set_bcn_ctrl_regfunction _rtl92cu_stop_tx_beaconfunction _rtl92cu_resume_tx_beaconfunction _rtl92cu_enable_bcn_sub_funcfunction _rtl92cu_disable_bcn_sub_funcfunction _rtl92cu_set_media_statusfunction rtl92cu_card_disablefunction rtl92cu_set_check_bssidfunction rtl92cu_set_network_typefunction _beacon_function_enablefunction rtl92cu_set_beacon_related_registersfunction rtl92cu_set_beacon_intervalfunction rtl92cu_update_interrupt_maskfunction usb_cmd_send_packetfunction rtl92cu_set_hw_regfunction rtl92cu_update_hal_rate_tablefunction rtl92cu_update_hal_rate_mask
Annotated Snippet
if (!autoload_fail) {
rtlefuse->
eeprom_chnlarea_txpwr_cck[rf_path][i] =
hwinfo[EEPROM_TXPOWERCCK + rf_path * 3 + i];
rtlefuse->
eeprom_chnlarea_txpwr_ht40_1s[rf_path][i] =
hwinfo[EEPROM_TXPOWERHT40_1S + rf_path * 3 +
i];
} else {
rtlefuse->
eeprom_chnlarea_txpwr_cck[rf_path][i] =
EEPROM_DEFAULT_TXPOWERLEVEL;
rtlefuse->
eeprom_chnlarea_txpwr_ht40_1s[rf_path][i] =
EEPROM_DEFAULT_TXPOWERLEVEL;
}
}
}
for (i = 0; i < 3; i++) {
if (!autoload_fail)
tempval = hwinfo[EEPROM_TXPOWERHT40_2SDIFF + i];
else
tempval = EEPROM_DEFAULT_HT40_2SDIFF;
rtlefuse->eprom_chnl_txpwr_ht40_2sdf[RF90_PATH_A][i] =
(tempval & 0xf);
rtlefuse->eprom_chnl_txpwr_ht40_2sdf[RF90_PATH_B][i] =
((tempval & 0xf0) >> 4);
}
for (rf_path = 0; rf_path < 2; rf_path++)
for (i = 0; i < 3; i++)
RTPRINT(rtlpriv, FINIT, INIT_EEPROM,
"RF(%d) EEPROM CCK Area(%d) = 0x%x\n",
rf_path, i,
rtlefuse->
eeprom_chnlarea_txpwr_cck[rf_path][i]);
for (rf_path = 0; rf_path < 2; rf_path++)
for (i = 0; i < 3; i++)
RTPRINT(rtlpriv, FINIT, INIT_EEPROM,
"RF(%d) EEPROM HT40 1S Area(%d) = 0x%x\n",
rf_path, i,
rtlefuse->
eeprom_chnlarea_txpwr_ht40_1s[rf_path][i]);
for (rf_path = 0; rf_path < 2; rf_path++)
for (i = 0; i < 3; i++)
RTPRINT(rtlpriv, FINIT, INIT_EEPROM,
"RF(%d) EEPROM HT40 2S Diff Area(%d) = 0x%x\n",
rf_path, i,
rtlefuse->
eprom_chnl_txpwr_ht40_2sdf[rf_path][i]);
for (rf_path = 0; rf_path < 2; rf_path++) {
for (i = 0; i < 14; i++) {
index = rtl92c_get_chnl_group((u8)i);
rtlefuse->txpwrlevel_cck[rf_path][i] =
rtlefuse->eeprom_chnlarea_txpwr_cck[rf_path][index];
rtlefuse->txpwrlevel_ht40_1s[rf_path][i] =
rtlefuse->
eeprom_chnlarea_txpwr_ht40_1s[rf_path][index];
rtlefuse->txpwrlevel_ht40_2s[rf_path][i] =
max(rtlefuse->eeprom_chnlarea_txpwr_ht40_1s[rf_path][index] -
rtlefuse->eprom_chnl_txpwr_ht40_2sdf[rf_path][index], 0);
}
for (i = 0; i < 14; i++) {
RTPRINT(rtlpriv, FINIT, INIT_TXPOWER,
"RF(%d)-Ch(%d) [CCK / HT40_1S / HT40_2S] = [0x%x / 0x%x / 0x%x]\n", rf_path, i,
rtlefuse->txpwrlevel_cck[rf_path][i],
rtlefuse->txpwrlevel_ht40_1s[rf_path][i],
rtlefuse->txpwrlevel_ht40_2s[rf_path][i]);
}
}
for (i = 0; i < 3; i++) {
if (!autoload_fail) {
rtlefuse->eeprom_pwrlimit_ht40[i] =
hwinfo[EEPROM_TXPWR_GROUP + i];
rtlefuse->eeprom_pwrlimit_ht20[i] =
hwinfo[EEPROM_TXPWR_GROUP + 3 + i];
} else {
rtlefuse->eeprom_pwrlimit_ht40[i] = 0;
rtlefuse->eeprom_pwrlimit_ht20[i] = 0;
}
}
for (rf_path = 0; rf_path < 2; rf_path++) {
for (i = 0; i < 14; i++) {
index = rtl92c_get_chnl_group((u8)i);
if (rf_path == RF90_PATH_A) {
rtlefuse->pwrgroup_ht20[rf_path][i] =
(rtlefuse->eeprom_pwrlimit_ht20[index]
& 0xf);
rtlefuse->pwrgroup_ht40[rf_path][i] =
(rtlefuse->eeprom_pwrlimit_ht40[index]
& 0xf);
Annotation
- Immediate include surface: `../wifi.h`, `../efuse.h`, `../base.h`, `../cam.h`, `../ps.h`, `../usb.h`, `reg.h`, `def.h`.
- Detected declarations: `function _rtl92cu_phy_param_tab_init`, `function _rtl92cu_read_txpower_info_from_hwpg`, `function _rtl92cu_read_board_type`, `function _rtl92cu_read_adapter_info`, `function _rtl92cu_hal_customized_behavior`, `function rtl92cu_read_eeprom_info`, `function _rtl92cu_init_power_on`, `function _rtl92cu_init_queue_reserved_page`, `function _rtl92c_init_trx_buffer`, `function _rtl92c_init_chipn_reg_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.