فهرست منبع

qcacmn: Add txmon HP TP values in stats command

Add txmon buf and destination ring in HPTP dump command

Change-Id: Ic32d1b355d5fc309225dfc5649ee7f9568a8dca6
CRs-Fixed: 3331176
Nandha Kishore Easwaran 2 سال پیش
والد
کامیت
bb7ee725be

+ 6 - 0
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)
 {

+ 4 - 0
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;

+ 5 - 0
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);

+ 6 - 0
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;

+ 16 - 0
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)
 {

+ 8 - 0
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)

+ 28 - 0
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
 
 /*