diff --git a/dp/wifi3.0/dp_internal.h b/dp/wifi3.0/dp_internal.h index 1582c39121..d3e6f9c8b2 100644 --- a/dp/wifi3.0/dp_internal.h +++ b/dp/wifi3.0/dp_internal.h @@ -907,6 +907,12 @@ dp_tx_mon_process(struct dp_soc *soc, struct dp_intr *int_ctx, return 0; } +static inline uint32_t +dp_print_txmon_ring_stat_from_hal(struct dp_pdev *pdev) +{ + return 0; +} + static inline uint32_t dp_rx_mon_buf_refill(struct dp_intr *int_ctx) { diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index 7d2e4d276f..1d934d119c 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -9633,6 +9633,10 @@ char *dp_srng_get_str_from_hal_ring_type(enum hal_ring_type ring_type) return "PPE2TCL"; case REO2PPE: return "REO2PPE"; + case TX_MONITOR_DST: + return "tx_monitor_destination"; + case TX_MONITOR_BUF: + return "tx_monitor_buf"; default: dp_err("Invalid ring type"); break; diff --git a/dp/wifi3.0/dp_stats.c b/dp/wifi3.0/dp_stats.c index 26aa497b7b..05eaa1ec63 100644 --- a/dp/wifi3.0/dp_stats.c +++ b/dp/wifi3.0/dp_stats.c @@ -17,6 +17,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ #include "qdf_types.h" +#include "qdf_module.h" #include "dp_peer.h" #include "dp_types.h" #include "dp_internal.h" @@ -5854,6 +5855,8 @@ dp_print_ring_stat_from_hal(struct dp_soc *soc, struct dp_srng *srng, } } +qdf_export_symbol(dp_print_ring_stat_from_hal); + #ifdef FEATURE_TSO_STATS /** * dp_print_tso_seg_stats - tso segment stats @@ -6032,6 +6035,8 @@ dp_print_ring_stats(struct dp_pdev *pdev) RXDMA_DST); } + dp_print_txmon_ring_stat_from_hal(pdev); + #ifdef WLAN_SUPPORT_PPEDS if (pdev->soc->arch_ops.dp_txrx_ppeds_rings_status) pdev->soc->arch_ops.dp_txrx_ppeds_rings_status(pdev->soc); diff --git a/dp/wifi3.0/monitor/2.0/dp_mon_2.0.c b/dp/wifi3.0/monitor/2.0/dp_mon_2.0.c index fae61a4353..33dea68d56 100644 --- a/dp/wifi3.0/monitor/2.0/dp_mon_2.0.c +++ b/dp/wifi3.0/monitor/2.0/dp_mon_2.0.c @@ -1216,6 +1216,11 @@ dp_tx_mon_process_2_0(struct dp_soc *soc, struct dp_intr *int_ctx, return 0; } +static void +dp_tx_mon_print_ring_stat_2_0(struct dp_pdev *pdev) +{ +} + static inline QDF_STATUS dp_mon_soc_attach_2_0(struct dp_soc *soc) { @@ -1331,6 +1336,7 @@ dp_mon_register_feature_ops_2_0(struct dp_soc *soc) mon_ops->mon_neighbour_peer_add_ast = NULL; #ifndef DISABLE_MON_CONFIG mon_ops->mon_tx_process = dp_tx_mon_process_2_0; + mon_ops->print_txmon_ring_stat = dp_tx_mon_print_ring_stat_2_0; #endif #ifdef WLAN_TX_PKT_CAPTURE_ENH_BE mon_ops->mon_peer_tid_peer_id_update = NULL; diff --git a/dp/wifi3.0/monitor/2.0/dp_tx_mon_2.0.c b/dp/wifi3.0/monitor/2.0/dp_tx_mon_2.0.c index 343c47af7f..9f3285b99e 100644 --- a/dp/wifi3.0/monitor/2.0/dp_tx_mon_2.0.c +++ b/dp/wifi3.0/monitor/2.0/dp_tx_mon_2.0.c @@ -299,6 +299,22 @@ dp_tx_mon_process_2_0(struct dp_soc *soc, struct dp_intr *int_ctx, return work_done; } +void +dp_tx_mon_print_ring_stat_2_0(struct dp_pdev *pdev) +{ + struct dp_soc *soc = pdev->soc; + struct dp_mon_soc *mon_soc = soc->monitor_soc; + struct dp_mon_soc_be *mon_soc_be = + dp_get_be_mon_soc_from_dp_mon_soc(mon_soc); + int lmac_id; + + lmac_id = dp_get_lmac_id_for_pdev_id(soc, 0, pdev->pdev_id); + dp_print_ring_stat_from_hal(soc, &mon_soc_be->tx_mon_buf_ring, + TX_MONITOR_BUF); + dp_print_ring_stat_from_hal(soc, &mon_soc_be->tx_mon_dst_ring[lmac_id], + TX_MONITOR_DST); +} + void dp_tx_mon_buf_desc_pool_deinit(struct dp_soc *soc) { diff --git a/dp/wifi3.0/monitor/2.0/dp_tx_mon_2.0.h b/dp/wifi3.0/monitor/2.0/dp_tx_mon_2.0.h index 2bb5c63f09..2a9ad83895 100644 --- a/dp/wifi3.0/monitor/2.0/dp_tx_mon_2.0.h +++ b/dp/wifi3.0/monitor/2.0/dp_tx_mon_2.0.h @@ -148,6 +148,14 @@ uint32_t dp_tx_mon_process_2_0(struct dp_soc *soc, struct dp_intr *int_ctx, uint32_t mac_id, uint32_t quota); +/* + * dp_tx_mon_print_ring_stat_2_0() - Print monitor ring stats + * @pdev: dp pdev handle + * + */ +void +dp_tx_mon_print_ring_stat_2_0(struct dp_pdev *pdev); + /* The maximum buffer length allocated for radiotap for monitor status buffer */ #define MAX_MONITOR_HEADER (512) #define MAX_DUMMY_FRM_BODY (128) diff --git a/dp/wifi3.0/monitor/dp_mon.h b/dp/wifi3.0/monitor/dp_mon.h index 28b87eaab3..c61d418c3c 100644 --- a/dp/wifi3.0/monitor/dp_mon.h +++ b/dp/wifi3.0/monitor/dp_mon.h @@ -618,6 +618,7 @@ struct dp_mon_ops { struct dp_intr *int_ctx, uint32_t mac_id, uint32_t quota); + void (*print_txmon_ring_stat)(struct dp_pdev *pdev); #endif void (*mon_peer_tx_init)(struct dp_pdev *pdev, struct dp_peer *peer); void (*mon_peer_tx_cleanup)(struct dp_vdev *vdev, @@ -2432,6 +2433,28 @@ uint32_t dp_rx_mon_buf_refill(struct dp_intr *int_ctx) return monitor_ops->rx_mon_refill_buf_ring(int_ctx); } + +static inline +void dp_print_txmon_ring_stat_from_hal(struct dp_pdev *pdev) +{ + struct dp_soc *soc = pdev->soc; + struct dp_mon_soc *mon_soc = soc->monitor_soc; + struct dp_mon_ops *monitor_ops; + + if (!mon_soc) { + dp_mon_debug("monitor soc is NULL"); + return; + } + + monitor_ops = mon_soc->mon_ops; + if (!monitor_ops || !monitor_ops->print_txmon_ring_stat) { + dp_mon_debug("callback not registered"); + return; + } + + monitor_ops->print_txmon_ring_stat(pdev); +} + #else static inline uint32_t dp_monitor_process(struct dp_soc *soc, struct dp_intr *int_ctx, @@ -2458,6 +2481,11 @@ uint32_t dp_rx_mon_buf_refill(struct dp_intr *int_ctx) { return 0; } + +static inline +void dp_print_txmon_ring_stat_from_hal(struct dp_pdev *pdev) +{ +} #endif /*