qcacmn: Add MSDU counters to account for 11BE puncturing BW stats

Add MSDU counters to account for 11BE puncturing BW stats.

Change-Id: I2c1d420b8d8b4533dcbf64f206783c07555cac99
CRs-Fixed: 3171770
This commit is contained in:
Harsh Kumar Bijlani
2022-04-12 02:25:54 +05:30
gecommit door Madan Koyyalamudi
bovenliggende 4ccecd0b01
commit 484198b257
9 gewijzigde bestanden met toevoegingen van 58 en 9 verwijderingen

Bestand weergeven

@@ -1862,6 +1862,8 @@ struct cdp_delayed_tx_completion_ppdu_user {
* @peer_last_delayed_ba: flag to indicate peer last delayed ba
* @phy_tx_time_us: Phy TX duration for the User
* @mpdu_bytes: accumulated bytes per mpdu for mem limit feature
* @punc_mode: puncutured mode to indicate punctured bw
* @punc_pattern_bitmap: bitmap indicating punctured pattern
*/
struct cdp_tx_completion_ppdu_user {
uint32_t completion_status:8,
@@ -1965,6 +1967,8 @@ struct cdp_tx_completion_ppdu_user {
uint16_t phy_tx_time_us;
uint32_t mpdu_bytes;
uint8_t punc_mode;
uint16_t punc_pattern_bitmap;
};
/**

Bestand weergeven

@@ -47,6 +47,7 @@
#ifdef WLAN_FEATURE_11BE
#define MAX_MCS (16 + 1)
#define MAX_MCS_11BE 16
#define MAX_PUNCTURED_MODE 5
#else
#define MAX_MCS (14 + 1)
#endif
@@ -1364,6 +1365,7 @@ struct protocol_trace_count {
* @last_tx_ts: last timestamp in jiffies when tx comp occurred
* @su_be_ppdu_cnt: SU Tx packet count
* @mu_be_ppdu_cnt: MU Tx packet count
* @punc_bw[MAX_PUNCTURED_MODE]: MSDU count for punctured BW
*/
struct cdp_tx_stats {
struct cdp_pkt_info comp_pkt;
@@ -1479,6 +1481,7 @@ struct cdp_tx_stats {
#ifdef WLAN_FEATURE_11BE
struct cdp_pkt_type su_be_ppdu_cnt;
struct cdp_pkt_type mu_be_ppdu_cnt[TXRX_TYPE_MU_MAX];
uint32_t punc_bw[MAX_PUNCTURED_MODE];
#endif
};
@@ -1567,6 +1570,7 @@ struct cdp_tx_stats {
* @mpdu_retry_cnt: retries of mpdu in rx
* @su_be_ppdu_cnt: SU Rx packet count for BE
* @mu_be_ppdu_cnt: MU rx packet count for BE
* @punc_bw[MAX_PUNCTURED_MODE]: MSDU count for punctured BW
*/
struct cdp_rx_stats {
struct cdp_pkt_info to_stack;
@@ -1652,6 +1656,7 @@ struct cdp_rx_stats {
#ifdef WLAN_FEATURE_11BE
struct cdp_pkt_type su_be_ppdu_cnt;
struct cdp_pkt_type mu_be_ppdu_cnt[TXRX_TYPE_MU_MAX];
uint32_t punc_bw[MAX_PUNCTURED_MODE];
#endif
};

Bestand weergeven

@@ -1508,6 +1508,10 @@ void dp_update_vdev_stats_on_peer_unmap(struct dp_vdev *vdev,
_srcobj->rx.mu_be_ppdu_cnt[mu_type].mcs_count[i]; \
} \
} \
for (i = 0; i < MAX_PUNCTURED_MODE; i++) { \
_tgtobj->tx.punc_bw[i] += _srcobj->tx.punc_bw[i]; \
_tgtobj->rx.punc_bw[i] += _srcobj->rx.punc_bw[i]; \
} \
} while (0)
#else
#define DP_UPDATE_11BE_STATS(_tgtobj, _srcobj)

Bestand weergeven

@@ -5659,7 +5659,7 @@ dp_print_mu_be_ppdu_rates_info(struct cdp_pkt_type *pkt_type_array)
DP_PRINT_STATS(" %s = %d",
dp_mu_be_rate_string[pkt_type][mcs].mcs_type,
pkt_type_array->mcs_count[mcs]);
pkt_type_array[pkt_type].mcs_count[mcs]);
}
DP_PRINT_STATS("\n");
@@ -6052,6 +6052,12 @@ void dp_print_peer_txrx_stats_be(struct cdp_peer_stats *peer_stats,
peer_stats->tx.bw[CMN_BW_80MHZ],
peer_stats->tx.bw[CMN_BW_160MHZ],
peer_stats->tx.bw[CMN_BW_320MHZ]);
DP_PRINT_STATS("Punctured BW Counts = NO_PUNC %d 20MHz %d 40MHz %d 80MHz %d 120MHz %d\n",
peer_stats->tx.punc_bw[NO_PUNCTURE],
peer_stats->tx.punc_bw[PUNCTURED_20MHZ],
peer_stats->tx.punc_bw[PUNCTURED_40MHZ],
peer_stats->tx.punc_bw[PUNCTURED_80MHZ],
peer_stats->tx.punc_bw[PUNCTURED_120MHZ]);
DP_PRINT_STATS("RU Locations RU[26 52 52_26 106 106_26 242 484 484_242 996 996_484 996_484_242 2X996 2X996_484 3X996 3X996_484 4X996]:");
for (i = 0; i < RU_INDEX_MAX; i++)
DP_PRINT_STATS("%s: %d", cdp_ru_string[i].ru_type,
@@ -6067,6 +6073,12 @@ void dp_print_peer_txrx_stats_be(struct cdp_peer_stats *peer_stats,
peer_stats->rx.bw[CMN_BW_80MHZ],
peer_stats->rx.bw[CMN_BW_160MHZ],
peer_stats->rx.bw[CMN_BW_320MHZ]);
DP_PRINT_STATS("Punctured BW Counts = NO_PUNC %d 20MHz %d 40MHz %d 80MHz %d 120MHz %d\n",
peer_stats->rx.punc_bw[NO_PUNCTURE],
peer_stats->rx.punc_bw[PUNCTURED_20MHZ],
peer_stats->rx.punc_bw[PUNCTURED_40MHZ],
peer_stats->rx.punc_bw[PUNCTURED_80MHZ],
peer_stats->rx.punc_bw[PUNCTURED_120MHZ]);
dp_print_common_ppdu_rates_info(&peer_stats->rx.su_be_ppdu_cnt,
DOT11_BE);
dp_print_mu_be_ppdu_rates_info(&peer_stats->rx.mu_be_ppdu_cnt[0]);

Bestand weergeven

@@ -3521,6 +3521,7 @@ struct dp_peer_per_pkt_tx_stats {
* @mpdu_success_with_retries: mpdu retry count in case of successful tx
* @su_be_ppdu_cnt: SU Tx packet count for 11BE
* @mu_be_ppdu_cnt[TXRX_TYPE_MU_MAX]: MU Tx packet count for 11BE
* @punc_bw[MAX_PUNCTURED_MODE]: MSDU count for punctured bw
*/
struct dp_peer_extd_tx_stats {
uint32_t stbc;
@@ -3569,6 +3570,7 @@ struct dp_peer_extd_tx_stats {
#ifdef WLAN_FEATURE_11BE
struct cdp_pkt_type su_be_ppdu_cnt;
struct cdp_pkt_type mu_be_ppdu_cnt[TXRX_TYPE_MU_MAX];
uint32_t punc_bw[MAX_PUNCTURED_MODE];
#endif
};
@@ -3681,6 +3683,7 @@ struct dp_peer_per_pkt_rx_stats {
* @mpdu_retry_cnt: retries of mpdu in rx
* @su_be_ppdu_cnt: SU Rx packet count for BE
* @mu_be_ppdu_cnt[TXRX_TYPE_MU_MAX]: MU rx packet count for BE
* @punc_bw[MAX_PUNCTURED_MODE]: MSDU count for punctured bw
*/
struct dp_peer_extd_rx_stats {
struct cdp_pkt_type pkt_type[DOT11_MAX];
@@ -3724,6 +3727,7 @@ struct dp_peer_extd_rx_stats {
#ifdef WLAN_FEATURE_11BE
struct cdp_pkt_type su_be_ppdu_cnt;
struct cdp_pkt_type mu_be_ppdu_cnt[TXRX_TYPE_MU_MAX];
uint32_t punc_bw[MAX_PUNCTURED_MODE];
#endif
};

Bestand weergeven

@@ -942,6 +942,19 @@ static bool dp_ppdu_stats_feat_enable_check_1_0(struct dp_pdev *pdev)
else
return true;
}
/**
* dp_mon_tx_stats_update_1_0 - Update Tx stats from HTT PPDU completion path
*
* @monitor: Monitor peer
* @ppdu: Tx PPDU user completion info
*/
void
dp_mon_tx_stats_update_1_0(struct dp_mon_peer *mon_peer,
struct cdp_tx_completion_ppdu_user *ppdu)
{
ppdu->punc_mode = NO_PUNCTURE;
}
#endif
#ifndef QCA_SUPPORT_FULL_MON
@@ -1081,9 +1094,7 @@ dp_mon_register_feature_ops_1_0(struct dp_soc *soc)
#else
mon_ops->mon_ppdu_desc_deliver = dp_ppdu_desc_deliver_1_0;
#endif
#ifdef WLAN_FEATURE_11BE
mon_ops->mon_tx_stats_update = NULL;
#endif
mon_ops->mon_tx_stats_update = dp_mon_tx_stats_update_1_0;
#endif
#if defined(ATH_SUPPORT_NAC_RSSI) || defined(ATH_SUPPORT_NAC)
mon_ops->mon_filter_setup_smart_monitor =

Bestand weergeven

@@ -475,12 +475,16 @@ void
dp_mon_tx_stats_update_2_0(struct dp_mon_peer *mon_peer,
struct cdp_tx_completion_ppdu_user *ppdu)
{
uint8_t preamble;
uint8_t mcs;
uint8_t preamble, mcs, punc_mode;
preamble = ppdu->preamble;
mcs = ppdu->mcs;
punc_mode = dp_mon_get_puncture_type(ppdu->punc_pattern_bitmap,
ppdu->bw);
ppdu->punc_mode = punc_mode;
DP_STATS_INC(mon_peer, tx.punc_bw[punc_mode], ppdu->num_msdu);
DP_STATS_INCC(mon_peer,
tx.pkt_type[preamble].mcs_count[MAX_MCS - 1],
ppdu->num_msdu,
@@ -525,6 +529,9 @@ dp_mon_get_puncture_type(uint16_t puncture_pattern, uint8_t bw)
uint16_t mask;
uint8_t punctured_bits;
if (!puncture_pattern)
return NO_PUNCTURE;
switch (bw) {
case CMN_BW_80MHZ:
mask = PUNCTURE_80MHZ_MASK;
@@ -584,6 +591,7 @@ void
dp_mon_tx_stats_update_2_0(struct dp_mon_peer *mon_peer,
struct cdp_tx_completion_ppdu_user *ppdu)
{
ppdu->punc_mode = NO_PUNCTURE;
}
enum cdp_punctured_modes

Bestand weergeven

@@ -630,12 +630,13 @@ void dp_rx_mon_stats_update_2_0(struct dp_mon_peer *mon_peer,
struct cdp_rx_indication_ppdu *ppdu,
struct cdp_rx_stats_ppdu_user *ppdu_user)
{
uint8_t mcs, preamble, ppdu_type;
uint8_t mcs, preamble, ppdu_type, punc_mode;
uint32_t num_msdu;
preamble = ppdu->u.preamble;
ppdu_type = ppdu->u.ppdu_type;
num_msdu = ppdu_user->num_msdu;
punc_mode = ppdu->punc_bw;
if (ppdu_type == HAL_RX_TYPE_SU)
mcs = ppdu->u.mcs;
@@ -643,6 +644,7 @@ void dp_rx_mon_stats_update_2_0(struct dp_mon_peer *mon_peer,
mcs = ppdu_user->mcs;
DP_STATS_INC(mon_peer, rx.mpdu_retry_cnt, ppdu_user->mpdu_retries);
DP_STATS_INC(mon_peer, rx.punc_bw[punc_mode], num_msdu);
DP_STATS_INCC(mon_peer,
rx.pkt_type[preamble].mcs_count[MAX_MCS - 1], num_msdu,
((mcs >= MAX_MCS_11BE) && (preamble == DOT11_BE)));

Bestand weergeven

@@ -2411,7 +2411,6 @@ dp_tx_rate_stats_update(struct dp_peer *peer,
uint32_t rix;
uint16_t ratecode = 0;
struct dp_mon_peer *mon_peer = NULL;
enum cdp_punctured_modes punc_mode = NO_PUNCTURE;
if (!peer || !ppdu)
return;
@@ -2428,7 +2427,7 @@ dp_tx_rate_stats_update(struct dp_peer *peer,
ppdu->nss,
ppdu->preamble,
ppdu->bw,
punc_mode,
ppdu->punc_mode,
&rix,
&ratecode);