diff --git a/dp/inc/cdp_txrx_stats_struct.h b/dp/inc/cdp_txrx_stats_struct.h index 9ae95e1d69..a1b0fc8df6 100644 --- a/dp/inc/cdp_txrx_stats_struct.h +++ b/dp/inc/cdp_txrx_stats_struct.h @@ -1553,7 +1553,7 @@ struct protocol_trace_count { * @wme_ac_type_bytes: Wireless Multimedia Type Bytes Count * @tx_ucast_total: Total tx unicast count * @tx_ucast_success: Total tx unicast success count -* @fragment_count: Fragment packet count + * @fragment_count: Fragment packet count */ struct cdp_tx_stats { struct cdp_pkt_info comp_pkt; @@ -1933,6 +1933,9 @@ struct cdp_rx_stats { * @cce_classified_raw:Number of raw packets classified by CCE * @sniffer_rcvd: Number of packets received with ppdu cookie * @tso_stats: + * @mlo_mcast: mlo mcast packet counters + * @mlo_mcast.send_pkt_count: MLO mcast send packet counter + * @mlo_mcast.fail_pkt_count: MLO mcast failed packet counter */ struct cdp_tx_ingress_stats { struct cdp_pkt_info rcvd; @@ -2001,6 +2004,12 @@ struct cdp_tx_ingress_stats { uint32_t cce_classified_raw; struct cdp_pkt_info sniffer_rcvd; struct cdp_tso_stats tso_stats; +#if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_MCAST_MLO) + struct { + uint32_t send_pkt_count; + uint32_t fail_pkt_count; + } mlo_mcast; +#endif }; /** diff --git a/dp/wifi3.0/be/dp_be_tx.c b/dp/wifi3.0/be/dp_be_tx.c index 31d53ae457..258d2eb0b6 100644 --- a/dp/wifi3.0/be/dp_be_tx.c +++ b/dp/wifi3.0/be/dp_be_tx.c @@ -774,6 +774,7 @@ dp_tx_mlo_mcast_pkt_send(struct dp_vdev_be *be_vdev, msdu_info.gsn = be_vdev->seq_num; be_ptnr_vdev->seq_num = be_vdev->seq_num; + DP_STATS_INC(ptnr_vdev, tx_i.mlo_mcast.send_pkt_count, 1); nbuf_clone = dp_tx_send_msdu_single( ptnr_vdev, nbuf_clone, @@ -781,6 +782,7 @@ dp_tx_mlo_mcast_pkt_send(struct dp_vdev_be *be_vdev, DP_MLO_MCAST_REINJECT_PEER_ID, NULL); if (qdf_unlikely(nbuf_clone)) { + DP_STATS_INC(ptnr_vdev, tx_i.mlo_mcast.fail_pkt_count, 1); dp_info("pkt send failed"); qdf_nbuf_free(nbuf_clone); return; diff --git a/dp/wifi3.0/dp_internal.h b/dp/wifi3.0/dp_internal.h index 3dec611b53..badd6cde73 100644 --- a/dp/wifi3.0/dp_internal.h +++ b/dp/wifi3.0/dp_internal.h @@ -3178,6 +3178,28 @@ void dp_print_peer_stats(struct dp_peer *peer, void dp_print_pdev_tx_stats(struct dp_pdev *pdev); +#if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_MCAST_MLO) +/** + * dp_print_vdev_mlo_mcast_tx_stats(): Print vdev level mlo mcast tx stats + * @vdev: DP_VDEV Handle + * + * Return:void + */ +void +dp_print_vdev_mlo_mcast_tx_stats(struct dp_vdev *vdev); +#else +/** + * dp_print_vdev_mlo_mcast_tx_stats(): Print vdev level mlo mcast tx stats + * @vdev: DP_VDEV Handle + * + * Return:void + */ +static inline +void dp_print_vdev_mlo_mcast_tx_stats(struct dp_vdev *vdev) +{ +} +#endif + /** * dp_print_pdev_rx_stats(): Print Pdev level RX stats * @pdev: DP_PDEV Handle diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index 8ba6275d93..22e8dee243 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -6940,6 +6940,7 @@ dp_print_host_stats(struct dp_vdev *vdev, dp_print_pdev_tx_stats(pdev); dp_print_soc_tx_stats(pdev->soc); dp_print_global_desc_count(); + dp_print_vdev_mlo_mcast_tx_stats(vdev); break; case TXRX_RX_HOST_STATS: dp_print_pdev_rx_stats(pdev); diff --git a/dp/wifi3.0/dp_stats.c b/dp/wifi3.0/dp_stats.c index 985078941b..1f297b2e09 100644 --- a/dp/wifi3.0/dp_stats.c +++ b/dp/wifi3.0/dp_stats.c @@ -8182,6 +8182,17 @@ dp_print_pdev_tx_stats(struct dp_pdev *pdev) dp_monitor_print_pdev_tx_capture_stats(pdev); } +#if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_MCAST_MLO) +void dp_print_vdev_mlo_mcast_tx_stats(struct dp_vdev *vdev) +{ + DP_PRINT_STATS("MLO MCAST TX stats:"); + DP_PRINT_STATS(" send packet count = %u", + vdev->stats.tx_i.mlo_mcast.send_pkt_count); + DP_PRINT_STATS(" failed packet count = %u", + vdev->stats.tx_i.mlo_mcast.fail_pkt_count); +} +#endif + #ifdef WLAN_SUPPORT_RX_FLOW_TAG static inline void dp_rx_basic_fst_stats(struct dp_pdev *pdev) {