diff --git a/dp/inc/cdp_txrx_stats_struct.h b/dp/inc/cdp_txrx_stats_struct.h index bf65e9e274..0455d4a7b5 100644 --- a/dp/inc/cdp_txrx_stats_struct.h +++ b/dp/inc/cdp_txrx_stats_struct.h @@ -161,6 +161,12 @@ struct cdp_tx_stats { uint32_t fw_rem_tx; /* aged out in mpdu/msdu queues*/ uint32_t age_out; + /* discarded by firmware reason 1 */ + uint32_t fw_reason1; + /* discarded by firmware reason 2 */ + uint32_t fw_reason2; + /* discarded by firmware reason 3 */ + uint32_t fw_reason3; } dropped; }; diff --git a/dp/wifi3.0/dp_internal.h b/dp/wifi3.0/dp_internal.h index 36f4928176..a496816265 100644 --- a/dp/wifi3.0/dp_internal.h +++ b/dp/wifi3.0/dp_internal.h @@ -279,6 +279,9 @@ while (0) DP_STATS_AGGR(_tgtobj, _srcobj, tx.dropped.fw_rem); \ DP_STATS_AGGR(_tgtobj, _srcobj, tx.dropped.fw_rem_tx); \ DP_STATS_AGGR(_tgtobj, _srcobj, tx.dropped.fw_rem_notx); \ + DP_STATS_AGGR(_tgtobj, _srcobj, tx.dropped.fw_reason1); \ + DP_STATS_AGGR(_tgtobj, _srcobj, tx.dropped.fw_reason2); \ + DP_STATS_AGGR(_tgtobj, _srcobj, tx.dropped.fw_reason3); \ DP_STATS_AGGR(_tgtobj, _srcobj, tx.dropped.age_out); \ \ DP_STATS_AGGR(_tgtobj, _srcobj, rx.err.mic_err); \ diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index 8324038b83..6857257662 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -4538,11 +4538,16 @@ dp_print_pdev_tx_stats(struct dp_pdev *pdev) pdev->stats.tx_i.processed.num); DP_PRINT_STATS(" Bytes = %llu", pdev->stats.tx_i.processed.bytes); - DP_PRINT_STATS("Completions:"); - DP_PRINT_STATS(" Packets = %d", + DP_PRINT_STATS("Total Completions:"); + DP_PRINT_STATS(" Packets = %u", pdev->stats.tx.comp_pkt.num); DP_PRINT_STATS(" Bytes = %llu", pdev->stats.tx.comp_pkt.bytes); + DP_PRINT_STATS("Successful Completions:"); + DP_PRINT_STATS(" Packets = %u", + pdev->stats.tx.tx_success.num); + DP_PRINT_STATS(" Bytes = %llu", + pdev->stats.tx.tx_success.bytes); DP_PRINT_STATS("Dropped:"); DP_PRINT_STATS(" Total = %d", pdev->stats.tx_i.dropped.dropped_pkt.num); @@ -4562,6 +4567,12 @@ dp_print_pdev_tx_stats(struct dp_pdev *pdev) pdev->stats.tx.dropped.fw_rem_tx); DP_PRINT_STATS(" FW removed untransmitted = %d", pdev->stats.tx.dropped.fw_rem_notx); + DP_PRINT_STATS(" FW removed untransmitted fw_reason1 = %d", + pdev->stats.tx.dropped.fw_reason1); + DP_PRINT_STATS(" FW removed untransmitted fw_reason2 = %d", + pdev->stats.tx.dropped.fw_reason2); + DP_PRINT_STATS(" FW removed untransmitted fw_reason3 = %d", + pdev->stats.tx.dropped.fw_reason3); DP_PRINT_STATS(" Aged Out from msdu/mpdu queues = %d", pdev->stats.tx.dropped.age_out); DP_PRINT_STATS("Scatter Gather:"); diff --git a/dp/wifi3.0/dp_tx.c b/dp/wifi3.0/dp_tx.c index 4473f219ce..e4c09f3152 100644 --- a/dp/wifi3.0/dp_tx.c +++ b/dp/wifi3.0/dp_tx.c @@ -2525,6 +2525,8 @@ static void dp_tx_update_peer_stats(struct dp_peer *peer, if (!ts->release_src == HAL_TX_COMP_RELEASE_SOURCE_TQM) return; + + DP_STATS_INC_PKT(peer, tx.comp_pkt, 1, length); DP_STATS_INCC(peer, tx.dropped.age_out, 1, (ts->status == HAL_TX_TQM_RR_REM_CMD_AGED)); @@ -2537,6 +2539,15 @@ static void dp_tx_update_peer_stats(struct dp_peer *peer, DP_STATS_INCC(peer, tx.dropped.fw_rem_tx, 1, (ts->status == HAL_TX_TQM_RR_REM_CMD_TX)); + DP_STATS_INCC(peer, tx.dropped.fw_reason1, 1, + (ts->status == HAL_TX_TQM_RR_FW_REASON1)); + + DP_STATS_INCC(peer, tx.dropped.fw_reason2, 1, + (ts->status == HAL_TX_TQM_RR_FW_REASON2)); + + DP_STATS_INCC(peer, tx.dropped.fw_reason3, 1, + (ts->status == HAL_TX_TQM_RR_FW_REASON3)); + if (!ts->status == HAL_TX_TQM_RR_FRAME_ACKED) return;