Browse Source

qcacld-3.0: Add support for RX offload pkts in packet capture mode

Add support to process RX offload packets in lithium for
packet capture mode.

Change-Id: Ic307d83f579bf53a025b4b4c159e24de97e2dde6
CRs-Fixed: 2856783
Surabhi Vishnoi 4 years ago
parent
commit
a3e7261f12

+ 2 - 2
components/pkt_capture/core/inc/wlan_pkt_capture_data_txrx.h

@@ -89,13 +89,13 @@ void pkt_capture_msdu_process_pkts(
 			uint8_t *bssid,
 			qdf_nbuf_t head_msdu,
 			uint8_t vdev_id,
-			htt_pdev_handle pdev);
+			htt_pdev_handle pdev, uint16_t status);
 #else
 void pkt_capture_msdu_process_pkts(
 			uint8_t *bssid,
 			qdf_nbuf_t head_msdu,
 			uint8_t vdev_id,
-			void *psoc);
+			void *psoc, uint16_t status);
 #endif
 
 /**

+ 14 - 6
components/pkt_capture/core/src/wlan_pkt_capture_data_txrx.c

@@ -481,8 +481,8 @@ bool pkt_capture_rx_in_order_offloaded_pkt(qdf_nbuf_t rx_ind_msg)
 #ifndef WLAN_FEATURE_PKT_CAPTURE_LITHIUM
 void pkt_capture_msdu_process_pkts(
 				uint8_t *bssid,
-				qdf_nbuf_t head_msdu,
-				uint8_t vdev_id, htt_pdev_handle pdev)
+				qdf_nbuf_t head_msdu, uint8_t vdev_id,
+				htt_pdev_handle pdev, uint16_t status)
 {
 	qdf_nbuf_t loop_msdu, pktcapture_msdu;
 	qdf_nbuf_t msdu, prev = NULL;
@@ -518,12 +518,12 @@ void pkt_capture_msdu_process_pkts(
 			bssid, pdev, 0);
 }
 #else
+#define RX_OFFLOAD_PKT 1
 void pkt_capture_msdu_process_pkts(
-				uint8_t *bssid,
-				qdf_nbuf_t head_msdu,
-				uint8_t vdev_id, void *psoc)
+				uint8_t *bssid, qdf_nbuf_t head_msdu,
+				uint8_t vdev_id, void *psoc, uint16_t status)
 {
-	qdf_nbuf_t loop_msdu, pktcapture_msdu;
+	qdf_nbuf_t loop_msdu, pktcapture_msdu, offload_msdu = NULL;
 	qdf_nbuf_t msdu, prev = NULL;
 
 	pktcapture_msdu = NULL;
@@ -542,7 +542,15 @@ void pkt_capture_msdu_process_pkts(
 				prev = msdu;
 			}
 		}
+		if (status == RX_OFFLOAD_PKT)
+			offload_msdu = loop_msdu;
 		loop_msdu = qdf_nbuf_next(loop_msdu);
+
+		/* Free offload msdu as it is delivered only to pkt capture */
+		if (offload_msdu) {
+			qdf_nbuf_free(offload_msdu);
+			offload_msdu = NULL;
+		}
 	}
 
 	if (!pktcapture_msdu)

+ 2 - 1
components/pkt_capture/core/src/wlan_pkt_capture_main.c

@@ -216,7 +216,8 @@ void pkt_capture_callback(void *soc, enum WDI_EVENT event, void *log_data,
 					PKT_CAPTURE_MODE_DATA_ONLY))
 			return;
 
-		pkt_capture_msdu_process_pkts(bssid, log_data, vdev_id, soc);
+		pkt_capture_msdu_process_pkts(bssid, log_data, vdev_id, soc,
+					      status);
 		break;
 	}
 

+ 2 - 2
components/pkt_capture/dispatcher/src/wlan_pkt_capture_ucfg_api.c

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2020 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2020-2021 The Linux Foundation. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
@@ -243,7 +243,7 @@ void ucfg_pkt_capture_rx_msdu_process(
 				uint8_t vdev_id, htt_pdev_handle pdev)
 {
 		pkt_capture_msdu_process_pkts(bssid, head_msdu,
-					      vdev_id, pdev);
+					      vdev_id, pdev, 0);
 }
 
 bool ucfg_pkt_capture_rx_offloaded_pkt(qdf_nbuf_t rx_ind_msg)