diff --git a/dp/inc/cdp_txrx_stats_struct.h b/dp/inc/cdp_txrx_stats_struct.h index 9d912bee6f..dfec4000d4 100644 --- a/dp/inc/cdp_txrx_stats_struct.h +++ b/dp/inc/cdp_txrx_stats_struct.h @@ -1120,6 +1120,8 @@ struct cdp_tx_stats { bw_info:4, gi_info:4, preamble_info:4; + /* mpdu retry count in case of successful transmission */ + uint32_t mpdu_success_with_retries; }; /* struct cdp_rx_stats - rx Level Stats diff --git a/dp/wifi3.0/dp_internal.h b/dp/wifi3.0/dp_internal.h index a9ebbc4744..babe4517f7 100644 --- a/dp/wifi3.0/dp_internal.h +++ b/dp/wifi3.0/dp_internal.h @@ -1377,6 +1377,8 @@ static inline void dp_update_vdev_stats(struct dp_soc *soc, tgtobj->tx.dropped.fw_reason3 += srcobj->stats.tx.dropped.fw_reason3; tgtobj->tx.dropped.age_out += srcobj->stats.tx.dropped.age_out; + tgtobj->tx.mpdu_success_with_retries += + srcobj->stats.tx.mpdu_success_with_retries; tgtobj->rx.err.mic_err += srcobj->stats.rx.err.mic_err; if (srcobj->stats.rx.snr != 0) tgtobj->rx.snr = srcobj->stats.rx.snr; diff --git a/dp/wifi3.0/dp_tx.c b/dp/wifi3.0/dp_tx.c index 2695b63bb6..90d07851f7 100644 --- a/dp/wifi3.0/dp_tx.c +++ b/dp/wifi3.0/dp_tx.c @@ -62,6 +62,8 @@ /* invalid peer id for reinject*/ #define DP_INVALID_PEER 0XFFFE +#define DP_RETRY_COUNT 7 + /*mapping between hal encrypt type and cdp_sec_type*/ uint8_t sec_type_map[MAX_CDP_SEC_TYPE] = {HAL_TX_ENCRYPT_TYPE_NO_CIPHER, HAL_TX_ENCRYPT_TYPE_WEP_128, @@ -3731,6 +3733,10 @@ dp_tx_update_peer_stats(struct dp_tx_desc_s *tx_desc, DP_STATS_INCC(peer, tx.stbc, 1, ts->stbc); DP_STATS_INCC(peer, tx.ldpc, 1, ts->ldpc); DP_STATS_INCC(peer, tx.retries, 1, ts->transmit_cnt > 1); + if (ts->first_msdu) + DP_STATS_INCC(peer, tx.mpdu_success_with_retries, + qdf_do_div(ts->transmit_cnt, DP_RETRY_COUNT), + ts->transmit_cnt > DP_RETRY_COUNT); } #ifdef QCA_LL_TX_FLOW_CONTROL_V2