Message ID | 20250127104738.4174862-9-quic_periyasa@quicinc.com |
---|---|
State | Superseded |
Headers | show |
Series | wifi: ath12k: Add peer extended Rx statistics debugfs support | expand |
On 1/27/2025 4:17 PM, Karthikeyan Periyasamy wrote: > From: Balamurugan Mahalingam <quic_bmahalin@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@quicinc.com> > Signed-off-by: Karthikeyan Periyasamy <quic_periyasa@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@oss.qualcomm.com>
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,