[PATCH v5 6/9] wifi: ath12k: fix the ampdu id fetch in the HAL_RX_MPDU_START TLV

Vasanthakumar Thiagarajan quic_vthiagar at quicinc.com
Tue Jan 28 21:48:51 PST 2025



On 1/27/2025 4:17 PM, Karthikeyan Periyasamy wrote:
> From: P Praneesh <quic_ppranees at quicinc.com>
> 
> Currently, ampdu id is update with peer id mask which is incorrect.
> Therefore, update the ampdu id with PPDU id mask value. Also move
> the ampdu_id field inside the user stats since it is a user id based
> statistics.
> 
> Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1
> Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3
> 
> Signed-off-by: P Praneesh <quic_ppranees at quicinc.com>
> Signed-off-by: Karthikeyan Periyasamy <quic_periyasa at quicinc.com>
> ---
>   drivers/net/wireless/ath/ath12k/dp_mon.c | 16 ++++++++++------
>   drivers/net/wireless/ath/ath12k/hal_rx.h |  3 ++-
>   2 files changed, 12 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/net/wireless/ath/ath12k/dp_mon.c b/drivers/net/wireless/ath/ath12k/dp_mon.c
> index 8c283e7c7dde..6ba2f0fa39c1 100644
> --- a/drivers/net/wireless/ath/ath12k/dp_mon.c
> +++ b/drivers/net/wireless/ath/ath12k/dp_mon.c
> @@ -1,7 +1,7 @@
>   // SPDX-License-Identifier: BSD-3-Clause-Clear
>   /*
>    * Copyright (c) 2019-2021 The Linux Foundation. All rights reserved.
> - * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
> + * Copyright (c) 2021-2025 Qualcomm Innovation Center, Inc. All rights reserved.
>    */
>   
>   #include "dp_mon.h"
> @@ -1558,6 +1558,11 @@ ath12k_dp_mon_rx_parse_status_tlv(struct ath12k *ar,
>   		if (userid < HAL_MAX_UL_MU_USERS) {
>   			struct hal_rx_user_status *rxuser_stats =
>   				&ppdu_info->userstats[userid];
> +
> +			if (ppdu_info->num_mpdu_fcs_ok > 1 ||
> +			    ppdu_info->num_mpdu_fcs_err > 1)
> +				ppdu_info->userstats[userid].ampdu_present = true;
> +
>   			ppdu_info->num_users += 1;
>   
>   			ath12k_dp_mon_rx_handle_ofdma_info(eu_stats, rxuser_stats);
> @@ -1669,8 +1674,8 @@ ath12k_dp_mon_rx_parse_status_tlv(struct ath12k *ar,
>   		if (userid < HAL_MAX_UL_MU_USERS) {
>   			info[0] = __le32_to_cpu(mpdu_start->info0);
>   			ppdu_info->userid = userid;
> -			ppdu_info->ampdu_id[userid] =
> -				u32_get_bits(info[0], HAL_RX_MPDU_START_INFO1_PEERID);
> +			ppdu_info->userstats[userid].ampdu_id =
> +				u32_get_bits(info[0], HAL_RX_MPDU_START_INFO0_PPDU_ID);
>   		}
>   
>   		break;
> @@ -1888,15 +1893,14 @@ static void ath12k_dp_mon_update_radiotap(struct ath12k *ar,
>   {
>   	struct ieee80211_supported_band *sband;
>   	u8 *ptr = NULL;
> -	u16 ampdu_id = ppduinfo->ampdu_id[ppduinfo->userid];
>   
>   	rxs->flag |= RX_FLAG_MACTIME_START;
>   	rxs->signal = ppduinfo->rssi_comb + ATH12K_DEFAULT_NOISE_FLOOR;
>   	rxs->nss = ppduinfo->nss + 1;
>   
> -	if (ampdu_id) {
> +	if (ppduinfo->userstats[ppduinfo->userid].ampdu_present) {
>   		rxs->flag |= RX_FLAG_AMPDU_DETAILS;
> -		rxs->ampdu_reference = ampdu_id;
> +		rxs->ampdu_reference = ppduinfo->userstats[ppduinfo->userid].ampdu_id;
>   	}
>   
>   	if (ppduinfo->is_eht || ppduinfo->eht_usig) {
> diff --git a/drivers/net/wireless/ath/ath12k/hal_rx.h b/drivers/net/wireless/ath/ath12k/hal_rx.h
> index 445d1c33b41f..163f9235fcf0 100644
> --- a/drivers/net/wireless/ath/ath12k/hal_rx.h
> +++ b/drivers/net/wireless/ath/ath12k/hal_rx.h
> @@ -148,6 +148,8 @@ struct hal_rx_user_status {
>   	u32 mpdu_fcs_ok_bitmap[HAL_RX_NUM_WORDS_PER_PPDU_BITMAP];
>   	u32 mpdu_ok_byte_count;
>   	u32 mpdu_err_byte_count;
> +	bool ampdu_present;
> +	u16 ampdu_id;
>   };
>   
>   #define HAL_MAX_UL_MU_USERS	37
> @@ -263,7 +265,6 @@ struct hal_rx_mon_ppdu_info {
>   	u8 addr4[ETH_ALEN];
>   	struct hal_rx_user_status userstats[HAL_MAX_UL_MU_USERS];
>   	u8 userid;
> -	u16 ampdu_id[HAL_MAX_UL_MU_USERS];
>   	bool first_msdu_in_mpdu;
>   	bool is_ampdu;
>   	u8 medium_prot_type;

Reviewed-by: Vasanthakumar Thiagarajan <vasanthakumar.thiagarajan at oss.qualcomm.com>



More information about the ath12k mailing list