diff --git a/dp/wifi3.0/dp_rx_err.c b/dp/wifi3.0/dp_rx_err.c index 4634e7f5ec..aaab1a0bef 100644 --- a/dp/wifi3.0/dp_rx_err.c +++ b/dp/wifi3.0/dp_rx_err.c @@ -779,6 +779,7 @@ void dp_rx_err_handle_bar(struct dp_soc *soc, unsigned char type, subtype; uint16_t start_seq_num; uint32_t tid; + QDF_STATUS status; struct ieee80211_frame_bar *bar; /* @@ -807,9 +808,15 @@ void dp_rx_err_handle_bar(struct dp_soc *soc, dp_info_rl("tid %u window_size %u start_seq_num %u", tid, peer->rx_tid[tid].ba_win_size, start_seq_num); - dp_rx_tid_update_wifi3(peer, tid, - peer->rx_tid[tid].ba_win_size, - start_seq_num); + status = dp_rx_tid_update_wifi3(peer, tid, + peer->rx_tid[tid].ba_win_size, + start_seq_num); + if (status != QDF_STATUS_SUCCESS) { + dp_err_rl("failed to handle bar frame update rx tid"); + DP_STATS_INC(soc, rx.err.bar_handle_fail_count, 1); + } else { + DP_STATS_INC(soc, rx.err.ssn_update_count, 1); + } } /** diff --git a/dp/wifi3.0/dp_stats.c b/dp/wifi3.0/dp_stats.c index 9d0a472454..49ebc85e67 100644 --- a/dp/wifi3.0/dp_stats.c +++ b/dp/wifi3.0/dp_stats.c @@ -6630,6 +6630,12 @@ dp_print_soc_rx_stats(struct dp_soc *soc) DP_PRINT_STATS("Rx err msdu continuation err: %d", soc->stats.rx.err.msdu_continuation_err); + DP_PRINT_STATS("ssn update count: %d", + soc->stats.rx.err.ssn_update_count); + + DP_PRINT_STATS("bar handle update fail count: %d", + soc->stats.rx.err.bar_handle_fail_count); + for (i = 0; i < HAL_RXDMA_ERR_MAX; i++) { index += qdf_snprint(&rxdma_error[index], DP_RXDMA_ERR_LENGTH - index, diff --git a/dp/wifi3.0/dp_types.h b/dp/wifi3.0/dp_types.h index 2598b436a0..e96419f8ae 100644 --- a/dp/wifi3.0/dp_types.h +++ b/dp/wifi3.0/dp_types.h @@ -1015,6 +1015,10 @@ struct dp_soc_stats { uint32_t reo_err_oor_eapol_drop; /* Non Eapol packet drop count due to peer not authorized */ uint32_t peer_unauth_rx_pkt_drop; + /* count of start sequence (ssn) updates */ + uint32_t ssn_update_count; + /* count of bar handling fail */ + uint32_t bar_handle_fail_count; } err; /* packet count per core - per ring */