瀏覽代碼

Merge "qca-wifi: Check peer capture enable while enqueuing MSDUS"

Linux Build Service Account 5 年之前
父節點
當前提交
14745c711d
共有 4 個文件被更改,包括 62 次插入1 次删除
  1. 7 0
      dp/wifi3.0/dp_rx_mon_feature.c
  2. 10 0
      dp/wifi3.0/dp_rx_mon_feature.h
  3. 35 1
      dp/wifi3.0/dp_tx_capture.c
  4. 10 0
      dp/wifi3.0/dp_tx_capture.h

+ 7 - 0
dp/wifi3.0/dp_rx_mon_feature.c

@@ -646,4 +646,11 @@ dp_config_enh_rx_capture(struct cdp_pdev *pdev_handle, uint32_t val)
 	return dp_pdev_configure_monitor_rings(pdev);
 }
 
+void
+dp_peer_set_rx_capture_enabled(struct cdp_peer *peer_handle, bool value)
+{
+	struct dp_peer *peer = (struct dp_peer *)peer_handle;
+
+	peer->rx_cap_enabled = value;
+}
 #endif /* WLAN_RX_PKT_CAPTURE_ENH */

+ 10 - 0
dp/wifi3.0/dp_rx_mon_feature.h

@@ -73,5 +73,15 @@ dp_rx_mon_enh_capture_process(struct dp_pdev *pdev, uint32_t tlv_status,
  */
 QDF_STATUS
 dp_config_enh_rx_capture(struct cdp_pdev *pdev_handle, uint8_t val);
+
+/**
+ * dp_peer_set_rx_capture_enabled: Set rx_cap_enabled bit in peer
+ * @peer_handle: Peer handle
+ * @value: Enable/disable setting for rx_cap_enabled
+ *
+ * Return: None
+ */
+void
+dp_peer_set_rx_capture_enabled(struct cdp_peer *peer_handle, bool value);
 #endif /* WLAN_RX_PKT_CAPTURE_ENH */
 #endif /* _DP_RX_MON_FEATURE_H_ */

+ 35 - 1
dp/wifi3.0/dp_tx_capture.c

@@ -180,6 +180,23 @@ void dp_peer_tid_queue_init(struct dp_peer *peer)
 	}
 }
 
+static
+void dp_peer_tx_cap_tid_queue_flush(struct dp_peer *peer)
+{
+	int tid;
+	struct dp_tx_tid *tx_tid;
+
+	for (tid = 0; tid < DP_MAX_TIDS; tid++) {
+		tx_tid = &peer->tx_capture.tx_tid[tid];
+
+		qdf_spin_lock_bh(&tx_tid->tid_lock);
+		qdf_nbuf_queue_free(&tx_tid->msdu_comp_q);
+		qdf_spin_unlock_bh(&tx_tid->tid_lock);
+
+		tx_tid->max_ppdu_id = 0;
+	}
+}
+
 /*
  * dp_peer_tid_queue_cleanup() – remove ppdu stats queue per TID
  * @peer: Datapath peer
@@ -468,7 +485,7 @@ QDF_STATUS dp_tx_add_to_comp_queue(struct dp_soc *soc,
 {
 	int ret = QDF_STATUS_E_FAILURE;
 
-	if ((desc->pdev->tx_capture_enabled != CDP_TX_ENH_CAPTURE_DISABLED) &&
+	if (peer && dp_peer_or_pdev_tx_cap_enabled(desc->pdev, peer) &&
 	    ((ts->status == HAL_TX_TQM_RR_FRAME_ACKED) ||
 	    (ts->status == HAL_TX_TQM_RR_REM_CMD_TX) ||
 	    ((ts->status == HAL_TX_TQM_RR_REM_CMD_AGED) && ts->transmit_cnt))) {
@@ -3167,4 +3184,21 @@ QDF_STATUS dp_send_ack_frame_to_stack(struct dp_soc *soc,
 
 	return QDF_STATUS_SUCCESS;
 }
+
+/**
+ * dp_peer_set_tx_capture_enabled: Set tx_cap_enabled bit in peer
+ * @peer_handle: Peer handle
+ * @value: Enable/disable setting for tx_cap_enabled
+ *
+ * Return: None
+ */
+void
+dp_peer_set_tx_capture_enabled(struct cdp_peer *peer_handle, bool value)
+{
+	struct dp_peer *peer = (struct dp_peer *)peer_handle;
+
+	peer->tx_cap_enabled = value;
+	if (!value)
+		dp_peer_tx_cap_tid_queue_flush(peer);
+}
 #endif

+ 10 - 0
dp/wifi3.0/dp_tx_capture.h

@@ -255,5 +255,15 @@ void dp_print_pdev_tx_capture_stats(struct dp_pdev *pdev);
 QDF_STATUS dp_send_ack_frame_to_stack(struct dp_soc *soc,
 				      struct dp_pdev *pdev,
 				      struct hal_rx_ppdu_info *ppdu_info);
+
+/**
+ * dp_peer_set_tx_capture_enabled: Set tx_cap_enabled bit in peer
+ * @peer_handle: Peer handle
+ * @value: Enable/disable setting for tx_cap_enabled
+ *
+ * Return: None
+ */
+void
+dp_peer_set_tx_capture_enabled(struct cdp_peer *peer_handle, bool value);
 #endif
 #endif