Sfoglia il codice sorgente

qcacmn: Split tx and rx buffer add function

Split tx and rx monitor buffer add function so that
they can be indivudually called when lite monitor mode is enabled.

Change-Id: I9996d0261f1912237bd6fa45058d410698b9fa28
CRs-Fixed: 3206170
Nandha Kishore Easwaran 3 anni fa
parent
commit
7f485d5e89

+ 1 - 2
dp/wifi3.0/dp_main.c

@@ -6586,8 +6586,7 @@ static QDF_STATUS dp_vdev_attach_wifi3(struct cdp_soc_t *cdp_soc,
 	if (wlan_op_mode_monitor == vdev->opmode) {
 		if (dp_monitor_vdev_attach(vdev) == QDF_STATUS_SUCCESS) {
 			dp_monitor_pdev_set_mon_vdev(vdev);
-			dp_monitor_vdev_set_monitor_mode_buf_rings(pdev);
-			return QDF_STATUS_SUCCESS;
+			return dp_monitor_vdev_set_monitor_mode_buf_rings(pdev);
 		}
 		return QDF_STATUS_E_FAILURE;
 	}

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

@@ -353,7 +353,7 @@ QDF_STATUS dp_mon_rings_alloc_1_0(struct dp_pdev *pdev)
 #endif
 
 #ifdef QCA_MONITOR_PKT_SUPPORT
-void dp_vdev_set_monitor_mode_buf_rings(struct dp_pdev *pdev)
+QDF_STATUS dp_vdev_set_monitor_mode_buf_rings(struct dp_pdev *pdev)
 {
 	uint32_t mac_id;
 	uint32_t mac_for_pdev;
@@ -392,6 +392,7 @@ void dp_vdev_set_monitor_mode_buf_rings(struct dp_pdev *pdev)
 			}
 		}
 	}
+	return QDF_STATUS_SUCCESS;
 }
 #endif
 

+ 76 - 25
dp/wifi3.0/monitor/2.0/dp_mon_2.0.c

@@ -398,10 +398,9 @@ QDF_STATUS dp_mon_desc_pool_alloc(uint32_t pool_size,
 	return QDF_STATUS_SUCCESS;
 }
 
-static
-void dp_vdev_set_monitor_mode_buf_rings_2_0(struct dp_pdev *pdev)
+QDF_STATUS dp_vdev_set_monitor_mode_buf_rings_rx_2_0(struct dp_pdev *pdev)
 {
-	int tx_mon_max_entries, rx_mon_max_entries;
+	int rx_mon_max_entries;
 	struct wlan_cfg_dp_soc_ctxt *soc_cfg_ctx;
 	struct dp_soc *soc = pdev->soc;
 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
@@ -410,54 +409,106 @@ void dp_vdev_set_monitor_mode_buf_rings_2_0(struct dp_pdev *pdev)
 
 	if (!mon_soc_be) {
 		dp_mon_err("DP MON SOC is NULL");
-		return;
+		return QDF_STATUS_E_FAILURE;
 	}
 
 	soc_cfg_ctx = soc->wlan_cfg_ctx;
 	rx_mon_max_entries = wlan_cfg_get_dp_soc_rx_mon_buf_ring_size(soc_cfg_ctx);
-	tx_mon_max_entries = wlan_cfg_get_dp_soc_tx_mon_buf_ring_size(soc_cfg_ctx);
 
 	hal_set_low_threshold(soc->rxdma_mon_buf_ring[0].hal_srng,
 			      rx_mon_max_entries >> 2);
 	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;
+		dp_mon_err("Failed to send htt srng setup message for Rx mon buf ring");
+		return status;
 	}
 
+	if (mon_soc_be->rx_mon_ring_fill_level < rx_mon_max_entries) {
+		status = dp_rx_mon_buffers_alloc(soc,
+						 (rx_mon_max_entries -
+						 mon_soc_be->rx_mon_ring_fill_level));
+		if (status != QDF_STATUS_SUCCESS) {
+			dp_mon_err("%pK: Rx mon buffers allocation failed", soc);
+			return status;
+		}
+		mon_soc_be->rx_mon_ring_fill_level +=
+				(rx_mon_max_entries -
+				mon_soc_be->rx_mon_ring_fill_level);
+	}
+
+	return QDF_STATUS_SUCCESS;
+}
+
+QDF_STATUS dp_vdev_set_monitor_mode_buf_rings_tx_2_0(struct dp_pdev *pdev)
+{
+	int tx_mon_max_entries;
+	struct wlan_cfg_dp_soc_ctxt *soc_cfg_ctx;
+	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);
+	QDF_STATUS status;
+
+	if (!mon_soc_be) {
+		dp_mon_err("DP MON SOC is NULL");
+		return QDF_STATUS_E_FAILURE;
+	}
+
+	soc_cfg_ctx = soc->wlan_cfg_ctx;
+	tx_mon_max_entries =
+		wlan_cfg_get_dp_soc_tx_mon_buf_ring_size(soc_cfg_ctx);
+
 	hal_set_low_threshold(mon_soc_be->tx_mon_buf_ring.hal_srng,
 			      tx_mon_max_entries >> 2);
 	status = htt_srng_setup(soc->htt_handle, 0,
 				mon_soc_be->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;
-	}
 
-	if (mon_soc_be->rx_mon_ring_fill_level < rx_mon_max_entries) {
-		if (dp_rx_mon_buffers_alloc(soc,
-					    (rx_mon_max_entries - mon_soc_be->rx_mon_ring_fill_level))) {
-			dp_mon_err("%pK: Rx mon buffers allocation failed", soc);
-			return;
-		}
-
-		mon_soc_be->rx_mon_ring_fill_level +=
-					(rx_mon_max_entries - mon_soc_be->rx_mon_ring_fill_level);
+	if (status != QDF_STATUS_SUCCESS) {
+		dp_mon_err("Failed to send htt srng setup message for Tx mon buf ring");
+		return status;
 	}
 
 	if (mon_soc_be->tx_mon_ring_fill_level < tx_mon_max_entries) {
-		if (dp_tx_mon_buffers_alloc(soc,
-					    (tx_mon_max_entries - mon_soc_be->tx_mon_ring_fill_level))) {
+		status = dp_tx_mon_buffers_alloc(soc,
+						 (tx_mon_max_entries -
+						 mon_soc_be->tx_mon_ring_fill_level));
+		if (status != QDF_STATUS_SUCCESS) {
 			dp_mon_err("%pK: Tx mon buffers allocation failed", soc);
-			return;
+			return status;
 		}
-
 		mon_soc_be->tx_mon_ring_fill_level +=
-					(tx_mon_max_entries - mon_soc_be->tx_mon_ring_fill_level);
+				(tx_mon_max_entries -
+				mon_soc_be->tx_mon_ring_fill_level);
+	}
+
+	return QDF_STATUS_SUCCESS;
+}
+
+static
+QDF_STATUS dp_vdev_set_monitor_mode_buf_rings_2_0(struct dp_pdev *pdev)
+{
+	int status;
+	struct dp_soc *soc = pdev->soc;
+
+	status = dp_vdev_set_monitor_mode_buf_rings_rx_2_0(pdev);
+	if (status != QDF_STATUS_SUCCESS) {
+		dp_mon_err("%pK: Rx monitor extra buffer allocation failed",
+			   soc);
+		return status;
 	}
+
+	status = dp_vdev_set_monitor_mode_buf_rings_tx_2_0(pdev);
+	if (status != QDF_STATUS_SUCCESS) {
+		dp_mon_err("%pK: Tx monitor extra buffer allocation failed",
+			   soc);
+		return status;
+	}
+
+	return QDF_STATUS_SUCCESS;
 }
 
 static

+ 16 - 0
dp/wifi3.0/monitor/2.0/dp_mon_2.0.h

@@ -297,6 +297,22 @@ void dp_mon_filter_show_filter_be(enum dp_mon_filter_mode mode,
 void dp_mon_filter_show_tx_filter_be(enum dp_mon_filter_mode mode,
 				     struct dp_mon_filter_be *filter);
 
+/**
+ * dp_vdev_set_monitor_mode_buf_rings_tx_2_0() - Add buffers to tx ring
+ * @pdev: Pointer to dp_pdev object
+ *
+ * Return: QDF_STATUS
+ */
+QDF_STATUS dp_vdev_set_monitor_mode_buf_rings_tx_2_0(struct dp_pdev *pdev);
+
+/**
+ * dp_vdev_set_monitor_mode_buf_rings_rx_2_0() - Add buffers to rx ring
+ * @pdev: Pointer to dp_pdev object
+ *
+ * Return: QDF_STATUS
+ */
+QDF_STATUS dp_vdev_set_monitor_mode_buf_rings_rx_2_0(struct dp_pdev *pdev);
+
 #ifdef QCA_ENHANCED_STATS_SUPPORT
 /**
  * dp_mon_get_puncture_type() - Get puncture type

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

@@ -471,9 +471,9 @@ void dp_pktlogmod_exit(struct dp_pdev *handle)
  *
  * @pdev: DP pdev object
  *
- * Return: void
+ * Return: QDF_STATUS
  */
-void dp_vdev_set_monitor_mode_buf_rings(struct dp_pdev *pdev);
+QDF_STATUS dp_vdev_set_monitor_mode_buf_rings(struct dp_pdev *pdev);
 
 /**
  * dp_vdev_set_monitor_mode_rings () - set monitor mode rings
@@ -489,7 +489,7 @@ QDF_STATUS dp_vdev_set_monitor_mode_rings(struct dp_pdev *pdev,
 					  uint8_t delayed_replenish);
 
 #else
-static inline void
+static inline QDF_STATUS
 dp_vdev_set_monitor_mode_buf_rings(struct dp_pdev *pdev)
 {
 }
@@ -652,7 +652,7 @@ struct dp_mon_ops {
 #if defined(DP_CON_MON) && !defined(REMOVE_PKT_LOG)
 	void (*mon_pktlogmod_exit)(struct dp_pdev *pdev);
 #endif
-	void (*mon_vdev_set_monitor_mode_buf_rings)(struct dp_pdev *pdev);
+	QDF_STATUS (*mon_vdev_set_monitor_mode_buf_rings)(struct dp_pdev *pdev);
 	QDF_STATUS (*mon_vdev_set_monitor_mode_rings)(struct dp_pdev *pdev,
 						      uint8_t delayed_replenish);
 	void (*mon_neighbour_peers_detach)(struct dp_pdev *pdev);
@@ -3218,20 +3218,20 @@ static inline void dp_monitor_pktlogmod_exit(struct dp_pdev *pdev) {}
 #endif
 
 static inline
-void dp_monitor_vdev_set_monitor_mode_buf_rings(struct dp_pdev *pdev)
+QDF_STATUS dp_monitor_vdev_set_monitor_mode_buf_rings(struct dp_pdev *pdev)
 {
 	struct dp_mon_ops *monitor_ops;
 	struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
 
 	if (!mon_soc) {
 		dp_mon_debug("monitor soc is NULL");
-		return;
+		return QDF_STATUS_E_FAILURE;
 	}
 
 	monitor_ops = mon_soc->mon_ops;
 	if (!monitor_ops || !monitor_ops->mon_vdev_set_monitor_mode_buf_rings) {
 		dp_mon_debug("callback not registered");
-		return;
+		return QDF_STATUS_E_FAILURE;
 	}
 
 	return monitor_ops->mon_vdev_set_monitor_mode_buf_rings(pdev);