drivers/net/wireless/realtek/rtlwifi/rtl8192du/trx.c
Source file repositories/reference/linux-study-clean/drivers/net/wireless/realtek/rtlwifi/rtl8192du/trx.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/net/wireless/realtek/rtlwifi/rtl8192du/trx.c- Extension
.c- Size
- 10166 bytes
- Lines
- 373
- 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.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
../wifi.h../base.h../usb.h../rtl8192d/reg.h../rtl8192d/def.h../rtl8192d/trx_common.htrx.h
Detected Declarations
function rtl92du_tx_cleanupfunction _rtl92du_hwq_to_descqfunction _rtl92du_tx_desc_checksumfunction rtl92du_tx_fill_descfunction _rtl92du_config_out_epfunction _rtl92du_one_out_ep_mappingfunction _rtl92du_two_out_ep_mappingfunction _rtl92du_three_out_ep_mappingfunction _rtl92du_out_ep_mappingfunction rtl92du_endpoint_mappingfunction rtl92du_mq_to_hwq
Annotated Snippet
if (rate_flag & IEEE80211_TX_RC_DUP_DATA) {
set_tx_desc_data_bw(txdesc, 1);
set_tx_desc_tx_sub_carrier(txdesc, 3);
} else if (rate_flag & IEEE80211_TX_RC_40_MHZ_WIDTH) {
set_tx_desc_data_bw(txdesc, 1);
set_tx_desc_tx_sub_carrier(txdesc, mac->cur_40_prime_sc);
} else {
set_tx_desc_data_bw(txdesc, 0);
set_tx_desc_tx_sub_carrier(txdesc, 0);
}
} else {
set_tx_desc_data_bw(txdesc, 0);
set_tx_desc_tx_sub_carrier(txdesc, 0);
}
if (info->control.hw_key) {
struct ieee80211_key_conf *keyconf = info->control.hw_key;
switch (keyconf->cipher) {
case WLAN_CIPHER_SUITE_WEP40:
case WLAN_CIPHER_SUITE_WEP104:
case WLAN_CIPHER_SUITE_TKIP:
set_tx_desc_sec_type(txdesc, 0x1);
break;
case WLAN_CIPHER_SUITE_CCMP:
set_tx_desc_sec_type(txdesc, 0x3);
break;
default:
set_tx_desc_sec_type(txdesc, 0x0);
break;
}
}
set_tx_desc_pkt_id(txdesc, 0);
set_tx_desc_queue_sel(txdesc, _rtl92du_hwq_to_descq(queue_index));
set_tx_desc_data_rate_fb_limit(txdesc, 0x1F);
set_tx_desc_rts_rate_fb_limit(txdesc, 0xF);
set_tx_desc_disable_fb(txdesc, 0);
set_tx_desc_use_rate(txdesc, tcb_desc->use_driver_rate);
if (ieee80211_is_data_qos(fc)) {
if (mac->rdg_en) {
rtl_dbg(rtlpriv, COMP_SEND, DBG_TRACE,
"Enable RDG function\n");
set_tx_desc_rdg_enable(txdesc, 1);
set_tx_desc_htc(txdesc, 1);
}
set_tx_desc_qos(txdesc, 1);
}
if (rtlpriv->dm.useramask) {
set_tx_desc_rate_id(txdesc, tcb_desc->ratr_index);
set_tx_desc_macid(txdesc, tcb_desc->mac_id);
} else {
set_tx_desc_rate_id(txdesc, 0xC + tcb_desc->ratr_index);
set_tx_desc_macid(txdesc, tcb_desc->ratr_index);
}
if (!ieee80211_is_data_qos(fc) && ppsc->leisure_ps &&
ppsc->fwctrl_lps) {
set_tx_desc_hwseq_en(txdesc, 1);
set_tx_desc_pkt_id(txdesc, 8);
}
if (ieee80211_has_morefrags(fc))
set_tx_desc_more_frag(txdesc, 1);
if (is_multicast_ether_addr(ieee80211_get_DA(hdr)) ||
is_broadcast_ether_addr(ieee80211_get_DA(hdr)))
set_tx_desc_bmc(txdesc, 1);
set_tx_desc_own(txdesc, 1);
set_tx_desc_last_seg(txdesc, 1);
set_tx_desc_first_seg(txdesc, 1);
_rtl92du_tx_desc_checksum(txdesc);
rtl_dbg(rtlpriv, COMP_SEND, DBG_TRACE, "==>\n");
}
static void _rtl92du_config_out_ep(struct ieee80211_hw *hw, u8 num_out_pipe)
{
struct rtl_usb *rtlusb = rtl_usbdev(rtl_usbpriv(hw));
struct rtl_priv *rtlpriv = rtl_priv(hw);
struct rtl_hal *rtlhal = rtl_hal(rtlpriv);
u16 ep_cfg;
rtlusb->out_queue_sel = 0;
rtlusb->out_ep_nums = 0;
if (rtlhal->interfaceindex == 0)
ep_cfg = rtl_read_word(rtlpriv, REG_USB_Queue_Select_MAC0);
Annotation
- Immediate include surface: `../wifi.h`, `../base.h`, `../usb.h`, `../rtl8192d/reg.h`, `../rtl8192d/def.h`, `../rtl8192d/trx_common.h`, `trx.h`.
- Detected declarations: `function rtl92du_tx_cleanup`, `function _rtl92du_hwq_to_descq`, `function _rtl92du_tx_desc_checksum`, `function rtl92du_tx_fill_desc`, `function _rtl92du_config_out_ep`, `function _rtl92du_one_out_ep_mapping`, `function _rtl92du_two_out_ep_mapping`, `function _rtl92du_three_out_ep_mapping`, `function _rtl92du_out_ep_mapping`, `function rtl92du_endpoint_mapping`.
- Atlas domain: Driver Families / drivers/net.
- Implementation status: source implementation candidate.
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.