drivers/net/wireless/ath/ath11k/hal_rx.c
Source file repositories/reference/linux-study-clean/drivers/net/wireless/ath/ath11k/hal_rx.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/net/wireless/ath/ath11k/hal_rx.c- Extension
.c- Size
- 54622 bytes
- Lines
- 1608
- 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
debug.hhal.hhal_tx.hhal_rx.hhal_desc.hhif.h
Detected Declarations
function Copyrightfunction ath11k_hal_reo_cmd_queue_statsfunction ath11k_hal_reo_cmd_flush_cachefunction ath11k_hal_reo_cmd_update_rx_queuefunction ath11k_hal_reo_cmd_sendfunction ath11k_hal_rx_buf_addr_info_setfunction ath11k_hal_rx_buf_addr_info_getfunction ath11k_hal_rx_msdu_link_info_getfunction ath11k_hal_desc_reo_parse_errfunction ath11k_hal_wbm_desc_parse_errfunction ath11k_hal_rx_reo_ent_paddr_getfunction ath11k_hal_rx_msdu_link_desc_setfunction ath11k_hal_reo_status_queue_statsfunction ath11k_hal_reo_process_statusfunction ath11k_hal_reo_flush_queue_statusfunction ath11k_hal_reo_flush_cache_statusfunction ath11k_hal_reo_unblk_cache_statusfunction ath11k_hal_reo_flush_timeout_list_statusfunction ath11k_hal_reo_desc_thresh_reached_statusfunction ath11k_hal_reo_update_rx_reo_queue_statusfunction ath11k_hal_reo_qdesc_sizefunction ath11k_hal_reo_qdesc_setupfunction ath11k_hal_reo_init_cmd_ringfunction ath11k_hal_rx_handle_ofdma_infofunction ath11k_hal_rx_populate_byte_countfunction ath11k_hal_rx_populate_mu_user_infofunction ath11k_hal_rx_mpduinfo_get_peeridfunction ath11k_hal_rx_parse_mon_status_tlvfunction ath11k_hal_rx_parse_mon_statusfunction ath11k_hal_rx_reo_ent_buf_paddr_getfunction ath11k_hal_rx_sw_mon_ring_buf_paddr_get
Annotated Snippet
switch (ppdu_info->preamble_type) {
case HAL_RX_PREAMBLE_11N:
ppdu_info->ht_flags = 1;
break;
case HAL_RX_PREAMBLE_11AC:
ppdu_info->vht_flags = 1;
break;
case HAL_RX_PREAMBLE_11AX:
ppdu_info->he_flags = 1;
break;
default:
break;
}
if (userid < HAL_MAX_UL_MU_USERS) {
struct hal_rx_user_status *rxuser_stats =
&ppdu_info->userstats;
ath11k_hal_rx_handle_ofdma_info(tlv_data, rxuser_stats);
ath11k_hal_rx_populate_mu_user_info(tlv_data, ppdu_info,
rxuser_stats);
}
ppdu_info->userstats.mpdu_fcs_ok_bitmap[0] =
__le32_to_cpu(eu_stats->rsvd1[0]);
ppdu_info->userstats.mpdu_fcs_ok_bitmap[1] =
__le32_to_cpu(eu_stats->rsvd1[1]);
break;
}
case HAL_RX_PPDU_END_USER_STATS_EXT: {
struct hal_rx_ppdu_end_user_stats_ext *eu_stats =
(struct hal_rx_ppdu_end_user_stats_ext *)tlv_data;
ppdu_info->userstats.mpdu_fcs_ok_bitmap[2] = eu_stats->info1;
ppdu_info->userstats.mpdu_fcs_ok_bitmap[3] = eu_stats->info2;
ppdu_info->userstats.mpdu_fcs_ok_bitmap[4] = eu_stats->info3;
ppdu_info->userstats.mpdu_fcs_ok_bitmap[5] = eu_stats->info4;
ppdu_info->userstats.mpdu_fcs_ok_bitmap[6] = eu_stats->info5;
ppdu_info->userstats.mpdu_fcs_ok_bitmap[7] = eu_stats->info6;
break;
}
case HAL_PHYRX_HT_SIG: {
struct hal_rx_ht_sig_info *ht_sig =
(struct hal_rx_ht_sig_info *)tlv_data;
info0 = __le32_to_cpu(ht_sig->info0);
info1 = __le32_to_cpu(ht_sig->info1);
ppdu_info->mcs = FIELD_GET(HAL_RX_HT_SIG_INFO_INFO0_MCS, info0);
ppdu_info->bw = FIELD_GET(HAL_RX_HT_SIG_INFO_INFO0_BW, info0);
ppdu_info->is_stbc = FIELD_GET(HAL_RX_HT_SIG_INFO_INFO1_STBC,
info1);
ppdu_info->ldpc = FIELD_GET(HAL_RX_HT_SIG_INFO_INFO1_FEC_CODING, info1);
ppdu_info->gi = info1 & HAL_RX_HT_SIG_INFO_INFO1_GI;
switch (ppdu_info->mcs) {
case 0 ... 7:
ppdu_info->nss = 1;
break;
case 8 ... 15:
ppdu_info->nss = 2;
break;
case 16 ... 23:
ppdu_info->nss = 3;
break;
case 24 ... 31:
ppdu_info->nss = 4;
break;
}
if (ppdu_info->nss > 1)
ppdu_info->mcs = ppdu_info->mcs % 8;
ppdu_info->reception_type = HAL_RX_RECEPTION_TYPE_SU;
break;
}
case HAL_PHYRX_L_SIG_B: {
struct hal_rx_lsig_b_info *lsigb =
(struct hal_rx_lsig_b_info *)tlv_data;
ppdu_info->rate = FIELD_GET(HAL_RX_LSIG_B_INFO_INFO0_RATE,
__le32_to_cpu(lsigb->info0));
ppdu_info->reception_type = HAL_RX_RECEPTION_TYPE_SU;
break;
}
case HAL_PHYRX_L_SIG_A: {
struct hal_rx_lsig_a_info *lsiga =
(struct hal_rx_lsig_a_info *)tlv_data;
ppdu_info->rate = FIELD_GET(HAL_RX_LSIG_A_INFO_INFO0_RATE,
__le32_to_cpu(lsiga->info0));
Annotation
- Immediate include surface: `debug.h`, `hal.h`, `hal_tx.h`, `hal_rx.h`, `hal_desc.h`, `hif.h`.
- Detected declarations: `function Copyright`, `function ath11k_hal_reo_cmd_queue_stats`, `function ath11k_hal_reo_cmd_flush_cache`, `function ath11k_hal_reo_cmd_update_rx_queue`, `function ath11k_hal_reo_cmd_send`, `function ath11k_hal_rx_buf_addr_info_set`, `function ath11k_hal_rx_buf_addr_info_get`, `function ath11k_hal_rx_msdu_link_info_get`, `function ath11k_hal_desc_reo_parse_err`, `function ath11k_hal_wbm_desc_parse_err`.
- 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.