Browse Source

qcacld-3.0: Add flag CONNECTIVITY_PKTLOG

Add new flag CONNECTIVITY_PKTLOG to make independent of
FEATURE_PKTLOG and REMOVE_PKT_LOG for packet logging.

This is because 32 tx/rx pkt logging is connection related
and this feature is independent of pkt log feature. Here
driver will send first 32 tx/rx pkts consisting of mgmt
and data pkts to userspace which can be used for debugging

Change-Id: If987ac8b6cb10b464a4ec2ace1c55215c0aa3614
CRs-Fixed: 3222970
Vinod Kumar Myadam 2 years ago
parent
commit
a24510696e

+ 2 - 0
Kbuild

@@ -3217,6 +3217,8 @@ cppflags-$(CONFIG_WLAN_FASTPATH) +=	-DWLAN_FEATURE_FASTPATH
 
 cppflags-$(CONFIG_FEATURE_PKTLOG) +=     -DFEATURE_PKTLOG
 
+cppflags-$(CONFIG_CONNECTIVITY_PKTLOG) += -DCONNECTIVITY_PKTLOG
+
 ifeq ($(CONFIG_WLAN_NAPI), y)
 cppflags-y += -DFEATURE_NAPI
 cppflags-y += -DHIF_IRQ_AFFINITY

+ 2 - 0
configs/default_defconfig

@@ -1352,6 +1352,8 @@ ifneq ($(CONFIG_HIF_USB), y)
 CONFIG_WLAN_LOGGING_SOCK_SVC := y
 endif
 
+CONFIG_CONNECTIVITY_PKTLOG := y
+
 ifneq ($(TARGET_BUILD_VARIANT),user)
 CONFIG_DESC_DUP_DETECT_DEBUG := y
 endif

+ 1 - 1
core/sme/inc/csr_api.h

@@ -818,7 +818,7 @@ typedef void (*sme_get_raom_scan_ch_callback)(
 				void *context);
 
 #if defined(WLAN_LOGGING_SOCK_SVC_ENABLE) && \
-	defined(FEATURE_PKTLOG) && !defined(REMOVE_PKT_LOG)
+	defined(CONNECTIVITY_PKTLOG)
 /**
  * csr_packetdump_timer_stop() - stops packet dump timer
  *

+ 1 - 1
core/sme/inc/csr_internal.h

@@ -282,7 +282,7 @@ struct csr_roamstruct {
 	int32_t sPendingCommands;
 	struct csr_roam_session *roamSession;
 #if defined(WLAN_LOGGING_SOCK_SVC_ENABLE) && \
-	defined(FEATURE_PKTLOG) && !defined(REMOVE_PKT_LOG)
+	defined(CONNECTIVITY_PKTLOG)
 	qdf_mc_timer_t packetdump_timer;
 #endif
 	spinlock_t roam_state_lock;

+ 1 - 1
core/sme/src/csr/csr_api_roam.c

@@ -1233,7 +1233,7 @@ void csr_set_global_cfgs(struct mac_context *mac)
 }
 
 #if defined(WLAN_LOGGING_SOCK_SVC_ENABLE) && \
-	defined(FEATURE_PKTLOG) && !defined(REMOVE_PKT_LOG)
+	defined(CONNECTIVITY_PKTLOG)
 /**
  * csr_packetdump_timer_handler() - packet dump timer
  * handler

+ 81 - 37
core/wma/src/wma_mgmt.c

@@ -45,7 +45,7 @@
 
 #include "cds_utils.h"
 #include "wlan_dlm_api.h"
-#if !defined(REMOVE_PKT_LOG)
+#if defined(CONNECTIVITY_PKTLOG) || !defined(REMOVE_PKT_LOG)
 #include "pktlog_ac.h"
 #else
 #include "pktlog_ac_fmt.h"
@@ -83,7 +83,7 @@
 #include <../../core/src/vdev_mgr_ops.h>
 #include "wlan_pkt_capture_ucfg_api.h"
 
-#if !defined(REMOVE_PKT_LOG)
+#if defined(CONNECTIVITY_PKTLOG) || !defined(REMOVE_PKT_LOG)
 #include <wlan_logging_sock_svc.h>
 #endif
 #include "wlan_cm_roam_api.h"
@@ -2696,35 +2696,102 @@ static inline void wma_mgmt_unmap_buf(tp_wma_handle wma_handle, qdf_nbuf_t buf)
 }
 #endif
 
-#if !defined(REMOVE_PKT_LOG)
+#if defined(CONNECTIVITY_PKTLOG) || !defined(REMOVE_PKT_LOG)
 /**
- * wma_mgmt_pktdump_status_map() - map MGMT Tx completion status with
+ * wma_mgmt_qdf_status_map() - map MGMT Tx completion status with
  * packet dump Tx status
  * @status: MGMT Tx completion status
  *
  * Return: packet dump tx_status enum
  */
-static inline enum tx_status
-wma_mgmt_pktdump_status_map(WMI_MGMT_TX_COMP_STATUS_TYPE status)
+static inline enum qdf_dp_tx_rx_status
+wma_mgmt_qdf_status_map(WMI_MGMT_TX_COMP_STATUS_TYPE status)
 {
-	enum tx_status pktdump_status;
+	enum qdf_dp_tx_rx_status pktdump_status;
 
 	switch (status) {
 	case WMI_MGMT_TX_COMP_TYPE_COMPLETE_OK:
-		pktdump_status = tx_status_ok;
+		pktdump_status = QDF_TX_RX_STATUS_OK;
 		break;
 	case WMI_MGMT_TX_COMP_TYPE_DISCARD:
-		pktdump_status = tx_status_discard;
+		pktdump_status = QDF_TX_RX_STATUS_DROP;
 		break;
 	case WMI_MGMT_TX_COMP_TYPE_COMPLETE_NO_ACK:
-		pktdump_status = tx_status_no_ack;
+		pktdump_status = QDF_TX_RX_STATUS_NO_ACK;
 		break;
 	default:
-		pktdump_status = tx_status_discard;
+		pktdump_status = QDF_TX_RX_STATUS_DROP;
 		break;
 	}
 	return pktdump_status;
 }
+
+/**
+ * wma_mgmt_pktdump_tx_handler() - calls tx cb if CONNECTIVITY_PKTLOG
+ * feature is enabled
+ * @wma_handle: wma handle
+ * @buf: nbuf
+ * @vdev_id : vdev id
+ * @status : status
+ *
+ * Return: none
+ */
+static inline void wma_mgmt_pktdump_tx_handler(tp_wma_handle wma_handle,
+					       qdf_nbuf_t buf, uint8_t vdev_id,
+					       uint32_t status)
+{
+	ol_txrx_pktdump_cb packetdump_cb;
+	void *soc = cds_get_context(QDF_MODULE_ID_SOC);
+	enum qdf_dp_tx_rx_status pktdump_status;
+
+	packetdump_cb = wma_handle->wma_mgmt_tx_packetdump_cb;
+	pktdump_status = wma_mgmt_qdf_status_map(status);
+	if (packetdump_cb)
+		packetdump_cb(soc, WMI_PDEV_ID_SOC, vdev_id,
+			      buf, pktdump_status, QDF_TX_MGMT_PKT);
+}
+
+/**
+ * wma_mgmt_pktdump_rx_handler() - calls rx cb if CONNECTIVITY_PKTLOG
+ * feature is enabled
+ * @mgmt_rx_params: mgmt rx params
+ * @rx_pkt: cds packet
+ * @wma_handle: wma handle
+ * mgt_type: management type
+ * mgt_subtype: management subtype
+ *
+ * Return: none
+ */
+static inline void wma_mgmt_pktdump_rx_handler(
+			struct mgmt_rx_event_params *mgmt_rx_params,
+			cds_pkt_t *rx_pkt, tp_wma_handle wma_handle,
+			uint8_t mgt_type, uint8_t mgt_subtype)
+{
+	ol_txrx_pktdump_cb packetdump_cb;
+	void *soc = cds_get_context(QDF_MODULE_ID_SOC);
+
+	packetdump_cb = wma_handle->wma_mgmt_rx_packetdump_cb;
+	if ((mgt_type == IEEE80211_FC0_TYPE_MGT &&
+	     mgt_subtype != MGMT_SUBTYPE_BEACON) &&
+	     packetdump_cb)
+		packetdump_cb(soc, mgmt_rx_params->pdev_id,
+			      rx_pkt->pkt_meta.session_id, rx_pkt->pkt_buf,
+			      QDF_TX_RX_STATUS_OK, QDF_RX_MGMT_PKT);
+}
+
+#else
+static inline void wma_mgmt_pktdump_tx_handler(tp_wma_handle wma_handle,
+					       qdf_nbuf_t buf, uint8_t vdev_id,
+					       uint32_t status)
+{
+}
+
+static inline void wma_mgmt_pktdump_rx_handler(
+			struct mgmt_rx_event_params *mgmt_rx_params,
+			cds_pkt_t *rx_pkt, tp_wma_handle wma_handle,
+			uint8_t mgt_type, uint8_t mgt_subtype)
+{
+}
 #endif
 
 /**
@@ -2742,11 +2809,6 @@ static int wma_process_mgmt_tx_completion(tp_wma_handle wma_handle,
 	qdf_nbuf_t buf = NULL;
 	QDF_STATUS ret;
 	uint8_t vdev_id = 0;
-#if !defined(REMOVE_PKT_LOG)
-	ol_txrx_pktdump_cb packetdump_cb;
-	void *soc = cds_get_context(QDF_MODULE_ID_SOC);
-	enum tx_status pktdump_status;
-#endif
 	struct wmi_mgmt_params mgmt_params = {};
 
 	if (wma_validate_handle(wma_handle))
@@ -2770,14 +2832,7 @@ static int wma_process_mgmt_tx_completion(tp_wma_handle wma_handle,
 	vdev_id = mgmt_txrx_get_vdev_id(pdev, desc_id);
 	mgmt_params.vdev_id = vdev_id;
 
-#if !defined(REMOVE_PKT_LOG)
-	packetdump_cb = wma_handle->wma_mgmt_tx_packetdump_cb;
-	pktdump_status = wma_mgmt_pktdump_status_map(status);
-	if (packetdump_cb)
-		packetdump_cb(soc, WMI_PDEV_ID_SOC, vdev_id,
-			      buf, pktdump_status, TX_MGMT_PKT);
-#endif
-
+	wma_mgmt_pktdump_tx_handler(wma_handle, buf, vdev_id, status);
 	ret = mgmt_txrx_tx_completion_handler(pdev, desc_id, status,
 					      &mgmt_params);
 
@@ -3544,10 +3599,6 @@ int wma_form_rx_packet(qdf_nbuf_t buf,
 	int status;
 	tp_wma_handle wma_handle = (tp_wma_handle)
 				cds_get_context(QDF_MODULE_ID_WMA);
-#if !defined(REMOVE_PKT_LOG)
-	ol_txrx_pktdump_cb packetdump_cb;
-	void *soc = cds_get_context(QDF_MODULE_ID_SOC);
-#endif
 	static uint8_t limit_prints_invalid_len = RATE_LIMIT - 1;
 	static uint8_t limit_prints_load_unload = RATE_LIMIT - 1;
 	static uint8_t limit_prints_recovery = RATE_LIMIT - 1;
@@ -3720,16 +3771,9 @@ int wma_form_rx_packet(qdf_nbuf_t buf,
 		cds_pkt_return_packet(rx_pkt);
 		return -EINVAL;
 	}
+	wma_mgmt_pktdump_rx_handler(mgmt_rx_params, rx_pkt,
+				    wma_handle, mgt_type, mgt_subtype);
 
-#if !defined(REMOVE_PKT_LOG)
-	packetdump_cb = wma_handle->wma_mgmt_rx_packetdump_cb;
-	if ((mgt_type == IEEE80211_FC0_TYPE_MGT &&
-		mgt_subtype != MGMT_SUBTYPE_BEACON) &&
-		packetdump_cb)
-		packetdump_cb(soc, mgmt_rx_params->pdev_id,
-			      rx_pkt->pkt_meta.session_id, rx_pkt->pkt_buf,
-			      QDF_STATUS_SUCCESS, RX_MGMT_PKT);
-#endif
 	return 0;
 }
 

+ 4 - 1
uapi/linux/pktlog_ac_fmt.h

@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2012-2019 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2022 Qualcomm Innovation Center, Inc. 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
@@ -19,7 +20,7 @@
 #ifndef _PKTLOG_FMT_H_
 #define _PKTLOG_FMT_H_
 
-#ifndef REMOVE_PKT_LOG
+#if defined(CONNECTIVITY_PKTLOG) || !defined(REMOVE_PKT_LOG)
 
 #define CUR_PKTLOG_VER          10010   /* Packet log version */
 #define PKTLOG_MAGIC_NUM        7735225
@@ -308,6 +309,7 @@ struct ath_pktlog_buf {
  * @TX_DATA_PKT: TX data Packet
  * @RX_MGMT_PKT: RX management Packet
  * @RX_DATA_PKT: RX data Packet
+ * @INVALID_PKT: Invalid packet
  *
  * This enum has packet types
  */
@@ -318,6 +320,7 @@ enum pkt_type {
 	TX_DATA_PKT,
 	RX_MGMT_PKT,
 	RX_DATA_PKT,
+	INVALID_PKT,
 };
 
 /**