diff --git a/dp/inc/cdp_txrx_cmn_struct.h b/dp/inc/cdp_txrx_cmn_struct.h index aea884c06c32..90c17afcc46c 100644 --- a/dp/inc/cdp_txrx_cmn_struct.h +++ b/dp/inc/cdp_txrx_cmn_struct.h @@ -1398,6 +1398,7 @@ struct cdp_tx_completion_ppdu { * @rx_packets: Rx total packets transmitted * @rx_bytes : Rx total bytes transmitted * @rx_errors : Rx erros + * @rx_dropped: Rx dropped stats */ struct cdp_dev_stats { uint32_t tx_packets; @@ -1407,6 +1408,7 @@ struct cdp_dev_stats { uint32_t rx_packets; uint32_t rx_bytes; uint32_t rx_errors; + uint32_t rx_dropped; }; /** diff --git a/dp/inc/cdp_txrx_stats_struct.h b/dp/inc/cdp_txrx_stats_struct.h index b5349482c2cd..e6eaca6a84a6 100644 --- a/dp/inc/cdp_txrx_stats_struct.h +++ b/dp/inc/cdp_txrx_stats_struct.h @@ -1282,6 +1282,8 @@ struct cdp_pdev_stats { uint32_t desc_alloc_fail; uint32_t ip_csum_err; uint32_t tcp_udp_csum_err; + uint32_t rxdma_error; + uint32_t reo_error; } err; uint32_t buf_freelist; diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index 867fffa51a2c..76777c9c1379 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -6845,9 +6845,16 @@ static void dp_pdev_getstats(void *pdev_handle, stats->rx_errors = pdev->stats.err.desc_alloc_fail + pdev->stats.err.ip_csum_err + pdev->stats.err.tcp_udp_csum_err + - pdev->stats.rx.err. mic_err + - pdev->stats.rx.err. decrypt_err + - pdev->stats.rx.err. fcserr; + pdev->stats.rx.err.mic_err + + pdev->stats.rx.err.decrypt_err + + pdev->stats.err.rxdma_error + + pdev->stats.err.reo_error; + stats->rx_dropped = pdev->stats.dropped.msdu_not_done + + pdev->stats.dropped.mec + + pdev->stats.dropped.mesh_filter + + pdev->stats.dropped.wifi_parse + + pdev->stats.dropped.mon_rx_drop + + pdev->stats.dropped.mon_radiotap_update_err; } /** diff --git a/dp/wifi3.0/dp_rx_err.c b/dp/wifi3.0/dp_rx_err.c index 2de3c6375807..c38d7327a9e8 100644 --- a/dp/wifi3.0/dp_rx_err.c +++ b/dp/wifi3.0/dp_rx_err.c @@ -1223,6 +1223,10 @@ dp_rx_err_process(struct dp_intr *int_ctx, struct dp_soc *soc, rx.err. reo_error[HAL_REO_ERR_PN_CHECK_FAILED], 1); + /* increment @pdev level */ + dp_pdev = dp_get_pdev_for_mac_id(soc, mac_id); + if (dp_pdev) + DP_STATS_INC(dp_pdev, err.reo_error, 1); count = dp_rx_pn_error_handle(soc, ring_desc, &mpdu_desc_info, &mac_id, @@ -1238,6 +1242,10 @@ dp_rx_err_process(struct dp_intr *int_ctx, struct dp_soc *soc, rx.err. reo_error[HAL_REO_ERR_REGULAR_FRAME_2K_JUMP], 1); + /* increment @pdev level */ + dp_pdev = dp_get_pdev_for_mac_id(soc, mac_id); + if (dp_pdev) + DP_STATS_INC(dp_pdev, err.reo_error, 1); count = dp_rx_2k_jump_handle(soc, ring_desc, &mpdu_desc_info, @@ -1442,6 +1450,12 @@ done: DP_STATS_INC(soc, rx.err.reo_error [wbm_err_info.reo_err_code], 1); + /* increment @pdev level */ + pool_id = wbm_err_info.pool_id; + dp_pdev = dp_get_pdev_for_mac_id(soc, pool_id); + if (dp_pdev) + DP_STATS_INC(dp_pdev, err.reo_error, + 1); switch (wbm_err_info.reo_err_code) { /* @@ -1489,6 +1503,12 @@ done: DP_STATS_INC(soc, rx.err.rxdma_error [wbm_err_info.rxdma_err_code], 1); + /* increment @pdev level */ + pool_id = wbm_err_info.pool_id; + dp_pdev = dp_get_pdev_for_mac_id(soc, pool_id); + if (dp_pdev) + DP_STATS_INC(dp_pdev, + err.rxdma_error, 1); switch (wbm_err_info.rxdma_err_code) { case HAL_RXDMA_ERR_UNENCRYPTED: @@ -1708,6 +1728,8 @@ dp_rx_err_mpdu_pop(struct dp_soc *soc, uint32_t mac_id, } while (buf_info.paddr); DP_STATS_INC(soc, rx.err.rxdma_error[rxdma_error_code], 1); + if (pdev) + DP_STATS_INC(pdev, err.rxdma_error, 1); if (rxdma_error_code == HAL_RXDMA_ERR_DECRYPT) { QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,