Browse Source

qcacmn: Add HTT ring setup for monitor rings

Add HTT ring setup for monitor source and destination rings

CRs-Fixed: 3010856
Change-Id: Ice96ed938a25069fd60f07e2a4bebd9ad0184200
Naga 3 years ago
parent
commit
1648e13dbe

+ 4 - 0
dp/wifi3.0/dp_main.c

@@ -5442,6 +5442,7 @@ static QDF_STATUS dp_rxdma_ring_config(struct dp_soc *soc)
 {
 	int i;
 	QDF_STATUS status = QDF_STATUS_SUCCESS;
+
 	for (i = 0; i < MAX_PDEV_CNT; i++) {
 		struct dp_pdev *pdev = soc->pdev_list[i];
 
@@ -5542,6 +5543,9 @@ static QDF_STATUS dp_rxdma_ring_config(struct dp_soc *soc)
 	int mac_for_pdev;
 	int lmac_id;
 
+	/* Configure monitor mode rings */
+	dp_monitor_soc_htt_srng_setup(soc);
+
 	for (i = 0; i < MAX_PDEV_CNT; i++) {
 		struct dp_pdev *pdev =  soc->pdev_list[i];
 

+ 1 - 1
dp/wifi3.0/monitor/1.0/dp_mon_1.0.c

@@ -3235,7 +3235,7 @@ struct dp_mon_ops monitor_ops_1_0 = {
 	.mon_config_debug_sniffer = dp_config_debug_sniffer,
 	.mon_flush_rings = dp_flush_monitor_rings,
 #if !defined(DISABLE_MON_CONFIG)
-	.mon_htt_srng_setup = dp_mon_htt_srng_setup_1_0,
+	.mon_pdev_htt_srng_setup = dp_mon_htt_srng_setup_1_0,
 #endif
 #if defined(DP_CON_MON)
 	.mon_service_rings = dp_service_mon_rings,

+ 33 - 11
dp/wifi3.0/monitor/2.0/dp_mon_2.0.c

@@ -341,8 +341,37 @@ dp_set_bpr_enable_2_0(struct dp_pdev *pdev, int val)
 
 #ifndef DISABLE_MON_CONFIG
 static
-QDF_STATUS dp_mon_htt_srng_setup_2_0(struct dp_soc *soc,
-				     struct dp_pdev *pdev,
+QDF_STATUS dp_mon_soc_htt_srng_setup_2_0(struct dp_soc *soc)
+{
+	struct dp_soc_be *be_soc = dp_get_be_soc_from_dp_soc(soc);
+	struct dp_mon_soc_be *mon_soc = be_soc->monitor_soc_be;
+
+	QDF_STATUS status;
+
+	status = htt_srng_setup(soc->htt_handle, 0,
+				soc->rxdma_mon_buf_ring[0].hal_srng,
+				RXDMA_MONITOR_BUF);
+
+	if (status != QDF_STATUS_SUCCESS) {
+		dp_err("Failed to send htt srng setup message for Rx mon buf ring");
+		return status;
+	}
+
+	status = htt_srng_setup(soc->htt_handle, 0,
+				mon_soc->tx_mon_buf_ring.hal_srng,
+				TX_MONITOR_BUF);
+
+	if (status != QDF_STATUS_SUCCESS) {
+		dp_err("Failed to send htt srng setup message for Tx mon buf ring");
+		return status;
+	}
+
+	return status;
+}
+
+static
+QDF_STATUS dp_mon_pdev_htt_srng_setup_2_0(struct dp_soc *soc,
+					  struct dp_pdev *pdev,
 				     int mac_id,
 				     int mac_for_pdev)
 {
@@ -565,14 +594,6 @@ QDF_STATUS dp_mon_soc_init_2_0(struct dp_soc *soc)
 		goto fail;
 	}
 
-	htt_srng_setup(soc->htt_handle, 0,
-		       soc->rxdma_mon_buf_ring[0].hal_srng,
-		       RXDMA_MONITOR_BUF);
-
-	htt_srng_setup(soc->htt_handle, 0,
-		       mon_soc->tx_mon_buf_ring.hal_srng,
-		       TX_MONITOR_BUF);
-
 	return QDF_STATUS_SUCCESS;
 fail:
 	dp_mon_soc_deinit_2_0(soc);
@@ -809,7 +830,8 @@ struct dp_mon_ops monitor_ops_2_0 = {
 	.mon_config_debug_sniffer = dp_config_debug_sniffer,
 	.mon_flush_rings = NULL,
 #if !defined(DISABLE_MON_CONFIG)
-	.mon_htt_srng_setup = dp_mon_htt_srng_setup_2_0,
+	.mon_pdev_htt_srng_setup = dp_mon_pdev_htt_srng_setup_2_0,
+	.mon_soc_htt_srng_setup = dp_mon_soc_htt_srng_setup_2_0,
 #endif
 #if defined(DP_CON_MON)
 	.mon_service_rings = NULL,

+ 3 - 2
dp/wifi3.0/monitor/dp_mon.c

@@ -1989,8 +1989,9 @@ QDF_STATUS dp_mon_htt_srng_setup(struct dp_soc *soc,
 	struct dp_mon_ops *mon_ops;
 
 	mon_ops = dp_mon_ops_get(soc);
-	if (mon_ops  && mon_ops->mon_htt_srng_setup)
-		return mon_ops->mon_htt_srng_setup(soc, pdev, mac_id, mac_for_pdev);
+	if (mon_ops  && mon_ops->mon_pdev_htt_srng_setup)
+		return mon_ops->mon_pdev_htt_srng_setup(soc, pdev,
+							mac_id, mac_for_pdev);
 
 	return QDF_STATUS_E_FAILURE;
 }

+ 27 - 7
dp/wifi3.0/monitor/dp_mon.h

@@ -358,10 +358,11 @@ struct dp_mon_ops {
 	QDF_STATUS (*mon_config_debug_sniffer)(struct dp_pdev *pdev, int val);
 	void (*mon_flush_rings)(struct dp_soc *soc);
 #if !defined(DISABLE_MON_CONFIG)
-	QDF_STATUS (*mon_htt_srng_setup)(struct dp_soc *soc,
-					 struct dp_pdev *pdev,
-					 int mac_id,
-					 int mac_for_pdev);
+	QDF_STATUS (*mon_pdev_htt_srng_setup)(struct dp_soc *soc,
+					      struct dp_pdev *pdev,
+					      int mac_id,
+					      int mac_for_pdev);
+	QDF_STATUS (*mon_soc_htt_srng_setup)(struct dp_soc *soc);
 #endif
 #if !defined(DISABLE_MON_CONFIG) && defined(MON_ENABLE_DROP_FOR_MAC)
 	uint32_t (*mon_drop_packets_for_mac)(struct dp_pdev *pdev,
@@ -1689,13 +1690,32 @@ static inline QDF_STATUS dp_monitor_htt_srng_setup(struct dp_soc *soc,
 	}
 
 	monitor_ops = mon_soc->mon_ops;
-	if (!monitor_ops || !monitor_ops->mon_htt_srng_setup) {
+	if (!monitor_ops || !monitor_ops->mon_pdev_htt_srng_setup) {
+		dp_mon_debug("callback not registered");
+		return QDF_STATUS_E_FAILURE;
+	}
+
+	return monitor_ops->mon_pdev_htt_srng_setup(soc, pdev, mac_id,
+						    mac_for_pdev);
+}
+
+static inline QDF_STATUS dp_monitor_soc_htt_srng_setup(struct dp_soc *soc)
+{
+	struct dp_mon_ops *monitor_ops;
+	struct dp_mon_soc *mon_soc = soc->monitor_soc;
+
+	if (!mon_soc) {
+		dp_mon_debug("monitor soc is NULL");
+		return QDF_STATUS_SUCCESS;
+	}
+
+	monitor_ops = mon_soc->mon_ops;
+	if (!monitor_ops || !monitor_ops->mon_soc_htt_srng_setup) {
 		dp_mon_debug("callback not registered");
 		return QDF_STATUS_E_FAILURE;
 	}
 
-	return monitor_ops->mon_htt_srng_setup(soc, pdev, mac_id,
-					       mac_for_pdev);
+	return monitor_ops->mon_soc_htt_srng_setup(soc);
 }
 #else
 static inline QDF_STATUS dp_monitor_htt_srng_setup(struct dp_soc *soc,