[PATCH v5 8/9] wifi: ath12k: Refactor the format of peer rate table information
Vasanthakumar Thiagarajan
quic_vthiagar at quicinc.com
Tue Jan 28 21:51:49 PST 2025
On 1/27/2025 4:17 PM, Karthikeyan Periyasamy wrote:
> From: Balamurugan Mahalingam <quic_bmahalin at quicinc.com>
>
> Currently, peer rate table information involves complex computation for
> the rate index to update the rate table. To simplify this process, avoid
> the rate index calculation by defining the rate table with bandwidth, GI,
> NSS, MCS. Therefore, update the rate information based on the bandwidth,
> GI, NSS and MCS information from the TLV data of monitor status Rx path.
>
> 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: Balamurugan Mahalingam <quic_bmahalin at quicinc.com>
> Signed-off-by: Karthikeyan Periyasamy <quic_periyasa at quicinc.com>
> ---
> drivers/net/wireless/ath/ath12k/core.h | 6 +----
> drivers/net/wireless/ath/ath12k/dp_mon.c | 29 +++++++++++-------------
> 2 files changed, 14 insertions(+), 21 deletions(-)
>
> diff --git a/drivers/net/wireless/ath/ath12k/core.h b/drivers/net/wireless/ath/ath12k/core.h
> index 2c9c62cb1af5..50e81d6aa280 100644
> --- a/drivers/net/wireless/ath/ath12k/core.h
> +++ b/drivers/net/wireless/ath/ath12k/core.h
> @@ -52,8 +52,6 @@
>
> #define ATH12K_INVALID_HW_MAC_ID 0xFF
> #define ATH12K_CONNECTION_LOSS_HZ (3 * HZ)
> -#define ATH12K_RX_RATE_TABLE_NUM 320
> -#define ATH12K_RX_RATE_TABLE_11AX_NUM 576
>
> #define ATH12K_MON_TIMER_INTERVAL 10
> #define ATH12K_RESET_TIMEOUT_HZ (20 * HZ)
> @@ -360,8 +358,6 @@ struct ath12k_vif_iter {
> #define HAL_RX_MAX_MCS_BE 15
> #define HAL_RX_MAX_NSS 8
> #define HAL_RX_MAX_NUM_LEGACY_RATES 12
> -#define ATH12K_RX_RATE_TABLE_11AX_NUM 576
> -#define ATH12K_RX_RATE_TABLE_NUM 320
>
> struct ath12k_rx_peer_rate_stats {
> u64 ht_mcs_count[HAL_RX_MAX_MCS_HT + 1];
> @@ -372,7 +368,7 @@ struct ath12k_rx_peer_rate_stats {
> u64 bw_count[HAL_RX_BW_MAX];
> u64 gi_count[HAL_RX_GI_MAX];
> u64 legacy_count[HAL_RX_MAX_NUM_LEGACY_RATES];
> - u64 rx_rate[ATH12K_RX_RATE_TABLE_11AX_NUM];
> + u64 rx_rate[HAL_RX_BW_MAX][HAL_RX_GI_MAX][HAL_RX_MAX_NSS][HAL_RX_MAX_MCS_HT + 1];
> };
>
> struct ath12k_rx_peer_stats {
> diff --git a/drivers/net/wireless/ath/ath12k/dp_mon.c b/drivers/net/wireless/ath/ath12k/dp_mon.c
> index dae430ee3c19..7e679ce177d3 100644
> --- a/drivers/net/wireless/ath/ath12k/dp_mon.c
> +++ b/drivers/net/wireless/ath/ath12k/dp_mon.c
> @@ -2946,34 +2946,31 @@ ath12k_dp_mon_rx_update_peer_rate_table_stats(struct ath12k_rx_peer_stats *rx_st
> struct hal_rx_user_status *user_stats,
> u32 num_msdu)
> {
> - u32 rate_idx = 0;
> + struct ath12k_rx_peer_rate_stats *stats;
> u32 mcs_idx = (user_stats) ? user_stats->mcs : ppdu_info->mcs;
> u32 nss_idx = (user_stats) ? user_stats->nss - 1 : ppdu_info->nss - 1;
> u32 bw_idx = ppdu_info->bw;
> u32 gi_idx = ppdu_info->gi;
> + u32 len;
>
> - if ((mcs_idx > HAL_RX_MAX_MCS_HE) || (nss_idx >= HAL_RX_MAX_NSS) ||
> - (bw_idx >= HAL_RX_BW_MAX) || (gi_idx >= HAL_RX_GI_MAX)) {
> + if (mcs_idx > HAL_RX_MAX_MCS_HT || nss_idx >= HAL_RX_MAX_NSS ||
> + bw_idx >= HAL_RX_BW_MAX || gi_idx >= HAL_RX_GI_MAX) {
> return;
> }
>
> - if (ppdu_info->preamble_type == HAL_RX_PREAMBLE_11N ||
> - ppdu_info->preamble_type == HAL_RX_PREAMBLE_11AC) {
> - rate_idx = mcs_idx * 8 + 8 * 10 * nss_idx;
> - rate_idx += bw_idx * 2 + gi_idx;
> - } else if (ppdu_info->preamble_type == HAL_RX_PREAMBLE_11AX) {
> + if (ppdu_info->preamble_type == HAL_RX_PREAMBLE_11AX ||
> + ppdu_info->preamble_type == HAL_RX_PREAMBLE_11BE)
> gi_idx = ath12k_he_gi_to_nl80211_he_gi(ppdu_info->gi);
> - rate_idx = mcs_idx * 12 + 12 * 12 * nss_idx;
> - rate_idx += bw_idx * 3 + gi_idx;
> - } else {
> - return;
> - }
>
> - rx_stats->pkt_stats.rx_rate[rate_idx] += num_msdu;
> + rx_stats->pkt_stats.rx_rate[bw_idx][gi_idx][nss_idx][mcs_idx] += num_msdu;
> + stats = &rx_stats->byte_stats;
> +
> if (user_stats)
> - rx_stats->byte_stats.rx_rate[rate_idx] += user_stats->mpdu_ok_byte_count;
> + len = user_stats->mpdu_ok_byte_count;
> else
> - rx_stats->byte_stats.rx_rate[rate_idx] += ppdu_info->mpdu_len;
> + len = ppdu_info->mpdu_len;
> +
> + stats->rx_rate[bw_idx][gi_idx][nss_idx][mcs_idx] += len;
> }
>
> static void ath12k_dp_mon_rx_update_peer_su_stats(struct ath12k *ar,
Reviewed-by: Vasanthakumar Thiagarajan <vasanthakumar.thiagarajan at oss.qualcomm.com>
More information about the ath12k
mailing list