drivers/net/wireless/realtek/rtl8xxxu/core.c
Source file repositories/reference/linux-study-clean/drivers/net/wireless/realtek/rtl8xxxu/core.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/net/wireless/realtek/rtl8xxxu/core.c- Extension
.c- Size
- 237665 bytes
- Lines
- 8288
- 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
linux/firmware.hlinux/iopoll.hregs.hrtl8xxxu.h
Detected Declarations
struct rtl8xxxu_rx_update_rssi_datastruct rtl8xxxu_stas_entrystruct rtl8xxxu_iter_stas_datafunction rtl8xxxu_read8function rtl8xxxu_read16function rtl8xxxu_read32function rtl8xxxu_write8function rtl8xxxu_write16function rtl8xxxu_write32function rtl8xxxu_write8_setfunction rtl8xxxu_write8_clearfunction rtl8xxxu_write16_setfunction rtl8xxxu_write16_clearfunction rtl8xxxu_write32_setfunction rtl8xxxu_write32_clearfunction rtl8xxxu_write32_maskfunction rtl8xxxu_write_rfreg_maskfunction rtl8xxxu_writeNfunction rtl8xxxu_read_rfregfunction rtl8xxxu_write_rfregfunction rtl8xxxu_gen1_h2c_cmdfunction rtl8xxxu_gen2_h2c_cmdfunction rtl8xxxu_gen1_enable_rffunction rtl8xxxu_gen1_disable_rffunction rtl8xxxu_stop_tx_beaconfunction rtl8xxxu_start_tx_beaconfunction rtl8xxxu_gen1_channel_to_groupfunction rtl8xxxu_gen2_channel_to_groupfunction rtl8xxxu_gen1_config_channelfunction rtl8xxxu_gen2_config_channelfunction rtl8xxxu_gen1_set_tx_powerfunction rtl8xxxu_set_linktypefunction rtl8xxxu_set_retryfunction rtl8xxxu_set_spec_sifsfunction rtl8xxxu_print_chipinfofunction rtl8xxxu_identify_vendor_1bitfunction rtl8xxxu_identify_vendor_2bitsfunction rtl8xxxu_config_endpoints_siefunction rtl8xxxu_config_endpoints_no_siefunction rtl8xxxu_read_efuse8function rtl8xxxu_read_efusefunction rtl8xxxu_dump_efusefunction read_file_efusefunction rtl8xxxu_debugfs_initfunction rtl8xxxu_reset_8051function rtl8xxxu_start_firmwarefunction rtl8xxxu_download_firmwarefunction rtl8xxxu_load_firmware
Annotated Snippet
struct rtl8xxxu_rx_update_rssi_data {
struct rtl8xxxu_priv *priv;
struct ieee80211_hdr *hdr;
struct ieee80211_rx_status *rx_status;
u8 *bssid;
};
static void rtl8xxxu_rx_update_rssi_iter(void *data, u8 *mac,
struct ieee80211_vif *vif)
{
struct rtl8xxxu_rx_update_rssi_data *iter_data = data;
struct ieee80211_sta *sta;
struct ieee80211_hdr *hdr = iter_data->hdr;
struct rtl8xxxu_priv *priv = iter_data->priv;
struct rtl8xxxu_sta_info *sta_info;
struct ieee80211_rx_status *rx_status = iter_data->rx_status;
u8 *bssid = iter_data->bssid;
if (!ether_addr_equal(vif->bss_conf.bssid, bssid))
return;
if (!(ether_addr_equal(vif->addr, hdr->addr1) ||
ieee80211_is_beacon(hdr->frame_control)))
return;
sta = ieee80211_find_sta_by_ifaddr(priv->hw, hdr->addr2,
vif->addr);
if (!sta)
return;
sta_info = (struct rtl8xxxu_sta_info *)sta->drv_priv;
ewma_rssi_add(&sta_info->avg_rssi, -rx_status->signal);
}
static inline u8 *get_hdr_bssid(struct ieee80211_hdr *hdr)
{
__le16 fc = hdr->frame_control;
u8 *bssid;
if (ieee80211_has_tods(fc))
bssid = hdr->addr1;
else if (ieee80211_has_fromds(fc))
bssid = hdr->addr2;
else
bssid = hdr->addr3;
return bssid;
}
static void rtl8xxxu_rx_update_rssi(struct rtl8xxxu_priv *priv,
struct ieee80211_rx_status *rx_status,
struct ieee80211_hdr *hdr)
{
struct rtl8xxxu_rx_update_rssi_data data = {};
if (ieee80211_is_ctl(hdr->frame_control))
return;
data.priv = priv;
data.hdr = hdr;
data.rx_status = rx_status;
data.bssid = get_hdr_bssid(hdr);
rtl8xxxu_iterate_vifs_atomic(priv, rtl8xxxu_rx_update_rssi_iter, &data);
}
int rtl8xxxu_parse_rxdesc16(struct rtl8xxxu_priv *priv, struct sk_buff *skb)
{
struct ieee80211_hw *hw = priv->hw;
struct ieee80211_rx_status *rx_status;
struct rtl8xxxu_rxdesc16 *rx_desc;
struct rtl8723au_phy_stats *phy_stats;
struct sk_buff *next_skb = NULL;
__le32 *_rx_desc_le;
u32 *_rx_desc;
int drvinfo_sz, desc_shift;
int i, pkt_cnt, pkt_len, urb_len, pkt_offset;
urb_len = skb->len;
pkt_cnt = 0;
if (urb_len < sizeof(struct rtl8xxxu_rxdesc16)) {
kfree_skb(skb);
return RX_TYPE_ERROR;
}
do {
rx_desc = (struct rtl8xxxu_rxdesc16 *)skb->data;
_rx_desc_le = (__le32 *)skb->data;
_rx_desc = (u32 *)skb->data;
Annotation
- Immediate include surface: `linux/firmware.h`, `linux/iopoll.h`, `regs.h`, `rtl8xxxu.h`.
- Detected declarations: `struct rtl8xxxu_rx_update_rssi_data`, `struct rtl8xxxu_stas_entry`, `struct rtl8xxxu_iter_stas_data`, `function rtl8xxxu_read8`, `function rtl8xxxu_read16`, `function rtl8xxxu_read32`, `function rtl8xxxu_write8`, `function rtl8xxxu_write16`, `function rtl8xxxu_write32`, `function rtl8xxxu_write8_set`.
- 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.