diff --git a/dp/inc/cdp_txrx_cmn_struct.h b/dp/inc/cdp_txrx_cmn_struct.h index 6d7bcdc9fcd7..f98657502593 100644 --- a/dp/inc/cdp_txrx_cmn_struct.h +++ b/dp/inc/cdp_txrx_cmn_struct.h @@ -987,6 +987,7 @@ struct cdp_tx_completion_ppdu_user { uint32_t tx_ratekbps; /*ack rssi for separate chains*/ uint32_t ack_rssi[CDP_RSSI_CHAIN_LEN]; + bool ack_rssi_valid; }; /** diff --git a/dp/wifi3.0/dp_htt.c b/dp/wifi3.0/dp_htt.c index 5a9b928a7f73..9c40eef14c6e 100644 --- a/dp/wifi3.0/dp_htt.c +++ b/dp/wifi3.0/dp_htt.c @@ -152,7 +152,7 @@ static void dp_tx_stats_update(struct dp_soc *soc, struct dp_peer *peer, DP_STATS_INC(peer, tx.wme_ac_type[TID_TO_WME_AC(ppdu->tid)], num_msdu); DP_STATS_INCC(peer, tx.stbc, num_msdu, ppdu->stbc); DP_STATS_INCC(peer, tx.ldpc, num_msdu, ppdu->ldpc); - if (!(ppdu->is_mcast)) + if (!(ppdu->is_mcast) && ppdu->ack_rssi_valid) DP_STATS_UPD(peer, tx.last_ack_rssi, ack_rssi); DP_STATS_INC(peer, tx.retries, @@ -1986,7 +1986,12 @@ static void dp_process_ppdu_stats_user_cmpltn_common_tlv( tag_buf++; - ppdu_desc->ack_rssi = dp_stats_buf->ack_rssi; + if (qdf_likely(ppdu_user_desc->completion_status)) { + ppdu_desc->ack_rssi = dp_stats_buf->ack_rssi; + ppdu_user_desc->ack_rssi_valid = 1; + } else { + ppdu_user_desc->ack_rssi_valid = 0; + } tag_buf++;