Przeglądaj źródła

qcacmn: Only allow connectivity logging for STA mode

Currently connectivity logging is done for all opmode
but logging should be done only for STA mode.

So to fix the issue add check for opmode and skip
connectivity logging if opmode is not STA

Change-Id: Ie6175a02c8167f5ebfd81553837206640431f701
CRs-Fixed: 3515365
Amit Mehta 2 lat temu
rodzic
commit
bc2323fc08

+ 2 - 0
dp/inc/cdp_txrx_cmn_struct.h

@@ -748,6 +748,7 @@ enum wlan_op_subtype {
  * @vdev_stats_id: Stats ID of the vdev
  * @op_mode: Operation mode of the vdev
  * @subtype: subtype of the vdev
+ * @qdf_opmode: Operation mode of the vdev
  * @mld_mac_addr: MLD mac addr of the current vdev.
  */
 struct cdp_vdev_info {
@@ -756,6 +757,7 @@ struct cdp_vdev_info {
 	uint8_t vdev_stats_id;
 	enum wlan_op_mode op_mode;
 	enum wlan_op_subtype subtype;
+	enum QDF_OPMODE qdf_opmode;
 #ifdef WLAN_FEATURE_11BE_MLO
 	uint8_t *mld_mac_addr;
 #endif

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

@@ -3697,6 +3697,7 @@ static QDF_STATUS dp_vdev_attach_wifi3(struct cdp_soc_t *cdp_soc,
 	uint8_t vdev_id = vdev_info->vdev_id;
 	enum wlan_op_mode op_mode = vdev_info->op_mode;
 	enum wlan_op_subtype subtype = vdev_info->subtype;
+	enum QDF_OPMODE qdf_opmode = vdev_info->qdf_opmode;
 	uint8_t vdev_stats_id = vdev_info->vdev_stats_id;
 
 	vdev_context_size =
@@ -3724,6 +3725,7 @@ static QDF_STATUS dp_vdev_attach_wifi3(struct cdp_soc_t *cdp_soc,
 	vdev->vdev_stats_id = vdev_stats_id;
 	vdev->opmode = op_mode;
 	vdev->subtype = subtype;
+	vdev->qdf_opmode = qdf_opmode;
 	vdev->osdev = soc->osdev;
 
 	vdev->osif_rx = NULL;

+ 21 - 14
dp/wifi3.0/dp_tx.c

@@ -859,19 +859,20 @@ struct dp_tx_ext_desc_elem_s *dp_tx_prepare_ext_desc(struct dp_vdev *vdev,
  * @skb: skb to be traced
  * @msdu_id: msdu_id of the packet
  * @vdev_id: vdev_id of the packet
+ * @op_mode: Vdev Operation mode
  *
  * Return: None
  */
 #ifdef DP_DISABLE_TX_PKT_TRACE
 static void dp_tx_trace_pkt(struct dp_soc *soc,
 			    qdf_nbuf_t skb, uint16_t msdu_id,
-			    uint8_t vdev_id)
+			    uint8_t vdev_id, enum QDF_OPMODE op_mode)
 {
 }
 #else
 static void dp_tx_trace_pkt(struct dp_soc *soc,
 			    qdf_nbuf_t skb, uint16_t msdu_id,
-			    uint8_t vdev_id)
+			    uint8_t vdev_id, enum QDF_OPMODE op_mode)
 {
 	if (dp_is_tput_high(soc))
 		return;
@@ -883,9 +884,11 @@ static void dp_tx_trace_pkt(struct dp_soc *soc,
 				 QDF_TRACE_DEFAULT_PDEV_ID,
 				 qdf_nbuf_data_addr(skb),
 				 sizeof(qdf_nbuf_data(skb)),
-				 msdu_id, vdev_id, 0));
+				 msdu_id, vdev_id, 0,
+				 op_mode));
 
-	qdf_dp_trace_log_pkt(vdev_id, skb, QDF_TX, QDF_TRACE_DEFAULT_PDEV_ID);
+	qdf_dp_trace_log_pkt(vdev_id, skb, QDF_TX, QDF_TRACE_DEFAULT_PDEV_ID,
+			     op_mode);
 
 	DPTRACE(qdf_dp_trace_data_pkt(skb, QDF_TRACE_DEFAULT_PDEV_ID,
 				      QDF_DP_TRACE_LI_DP_TX_PACKET_RECORD,
@@ -1194,7 +1197,8 @@ struct dp_tx_desc_s *dp_tx_prepare_desc_single(struct dp_vdev *vdev,
 	tx_desc->length = qdf_nbuf_headlen(nbuf);
 	tx_desc->shinfo_addr = skb_end_pointer(nbuf);
 
-	dp_tx_trace_pkt(soc, nbuf, tx_desc->id, vdev->vdev_id);
+	dp_tx_trace_pkt(soc, nbuf, tx_desc->id, vdev->vdev_id,
+			vdev->qdf_opmode);
 
 	if (qdf_unlikely(vdev->multipass_en)) {
 		if (!dp_tx_multipass_process(soc, vdev, nbuf, msdu_info))
@@ -1335,7 +1339,8 @@ static struct dp_tx_desc_s *dp_tx_prepare_desc(struct dp_vdev *vdev,
 	tx_desc->pdev = pdev;
 	tx_desc->pkt_offset = 0;
 
-	dp_tx_trace_pkt(soc, nbuf, tx_desc->id, vdev->vdev_id);
+	dp_tx_trace_pkt(soc, nbuf, tx_desc->id, vdev->vdev_id,
+			vdev->qdf_opmode);
 
 	/* Handle scattered frames - TSO/SG/ME */
 	/* Allocate and prepare an extension descriptor for scattered frames */
@@ -5292,6 +5297,7 @@ void dp_tx_comp_process_tx_status(struct dp_soc *soc,
 	qdf_nbuf_t nbuf = tx_desc->nbuf;
 	enum qdf_dp_tx_rx_status dp_status;
 	uint8_t link_id = 0;
+	enum QDF_OPMODE op_mode = QDF_MAX_NO_OF_MODE;
 
 	if (!nbuf) {
 		dp_info_rl("invalid tx descriptor. nbuf NULL");
@@ -5302,13 +5308,6 @@ void dp_tx_comp_process_tx_status(struct dp_soc *soc,
 	length = dp_tx_get_pkt_len(tx_desc);
 
 	dp_status = dp_tx_hw_to_qdf(ts->status);
-	DPTRACE(qdf_dp_trace_ptr(tx_desc->nbuf,
-				 QDF_DP_TRACE_LI_DP_FREE_PACKET_PTR_RECORD,
-				 QDF_TRACE_DEFAULT_PDEV_ID,
-				 qdf_nbuf_data_addr(nbuf),
-				 sizeof(qdf_nbuf_data(nbuf)),
-				 tx_desc->id, ts->status, dp_status));
-
 	dp_tx_comp_debug("-------------------- \n"
 			 "Tx Completion Stats: \n"
 			 "-------------------- \n"
@@ -5347,12 +5346,13 @@ void dp_tx_comp_process_tx_status(struct dp_soc *soc,
 	if (!txrx_peer) {
 		dp_info_rl("peer is null or deletion in progress");
 		DP_STATS_INC_PKT(soc, tx.tx_invalid_peer, 1, length);
-		goto out;
+		goto out_log;
 	}
 	vdev = txrx_peer->vdev;
 
 	link_id = dp_tx_get_link_id_from_ppdu_id(soc, ts, txrx_peer, vdev);
 
+	op_mode = vdev->qdf_opmode;
 	dp_tx_update_connectivity_stats(soc, vdev, tx_desc, ts->status);
 	dp_tx_update_uplink_delay(soc, vdev, ts);
 
@@ -5410,6 +5410,13 @@ void dp_tx_comp_process_tx_status(struct dp_soc *soc,
 					    ts->ppdu_id, link_id);
 #endif
 
+out_log:
+	DPTRACE(qdf_dp_trace_ptr(tx_desc->nbuf,
+			 QDF_DP_TRACE_LI_DP_FREE_PACKET_PTR_RECORD,
+			 QDF_TRACE_DEFAULT_PDEV_ID,
+			 qdf_nbuf_data_addr(nbuf),
+			 sizeof(qdf_nbuf_data(nbuf)),
+			 tx_desc->id, ts->status, dp_status, op_mode));
 out:
 	return;
 }

+ 2 - 0
dp/wifi3.0/dp_types.h

@@ -4064,6 +4064,8 @@ struct dp_vdev {
 	/* Flag to indicate if to_fw should be set for tx pkts on this vdev */
 	bool to_fw;
 #endif
+	/* QDF VDEV operating mode  */
+	enum QDF_OPMODE qdf_opmode;
 };
 
 enum {

+ 8 - 3
qdf/inc/qdf_trace.h

@@ -933,11 +933,13 @@ void qdf_dp_set_no_of_record(uint32_t val);
  * @skb: skb pointer
  * @dir: direction
  * @pdev_id: pdev_id
+ * @op_mode: Vdev Operation mode
  *
  * Return: true: some protocol was logged, false: no protocol was logged.
  */
 bool qdf_dp_trace_log_pkt(uint8_t vdev_id, struct sk_buff *skb,
-			  enum qdf_proto_dir dir, uint8_t pdev_id);
+			  enum qdf_proto_dir dir, uint8_t pdev_id,
+			  enum QDF_OPMODE op_mode);
 
 /**
  * qdf_dp_trace_init() - enables the DP trace
@@ -1134,13 +1136,15 @@ enum qdf_dp_tx_rx_status qdf_dp_get_status_from_a_status(uint8_t status);
  * @msdu_id: msdu_id
  * @buf_arg_status: return status
  * @qdf_tx_status: qdf tx rx status
+ * @op_mode: Vdev Operation mode
  *
  * Return: none
  */
 void qdf_dp_trace_ptr(qdf_nbuf_t nbuf, enum QDF_DP_TRACE_ID code,
 		      uint8_t pdev_id, uint8_t *data, uint8_t size,
 		      uint16_t msdu_id, uint16_t buf_arg_status,
-		      enum qdf_dp_tx_rx_status qdf_tx_status);
+		      enum qdf_dp_tx_rx_status qdf_tx_status,
+		      enum QDF_OPMODE op_mode);
 
 /**
  * qdf_dp_trace_throttle_live_mode() - Throttle DP Trace live mode
@@ -1358,7 +1362,8 @@ void qdf_dp_track_noack_check(qdf_nbuf_t nbuf, enum qdf_proto_subtype *subtype);
 #else
 static inline
 bool qdf_dp_trace_log_pkt(uint8_t vdev_id, struct sk_buff *skb,
-			  enum qdf_proto_dir dir, uint8_t pdev_id)
+			  enum qdf_proto_dir dir, uint8_t pdev_id,
+			  enum QDF_OPMODE op_mode)
 {
 	return false;
 }

+ 26 - 11
qdf/linux/src/qdf_trace.c

@@ -1721,14 +1721,19 @@ uint8_t qdf_eapol_get_key_type(uint8_t *data, enum qdf_proto_subtype subtype)
  * @type: Protocol type
  * @subtype: Protocol subtype
  * @dir: Rx or Tx
+ * @op_mode: Vdev Operation mode
  *
  * Return: true or false
  */
 static inline
 bool qdf_skip_wlan_connectivity_log(enum qdf_proto_type type,
 				    enum qdf_proto_subtype subtype,
-				    enum qdf_proto_dir dir)
+				    enum qdf_proto_dir dir,
+				    enum QDF_OPMODE op_mode)
 {
+	if (op_mode != QDF_STA_MODE)
+		return true;
+
 	if (dir == QDF_RX && type == QDF_PROTO_TYPE_DHCP &&
 	    (subtype == QDF_PROTO_DHCP_DISCOVER ||
 	     subtype == QDF_PROTO_DHCP_REQUEST))
@@ -1743,6 +1748,7 @@ bool qdf_skip_wlan_connectivity_log(enum qdf_proto_type type,
  * @subtype: Protocol subtype
  * @dir: Rx or Tx
  * @qdf_tx_status: Tx completion status
+ * @op_mode: Vdev Operation mode
  * @vdev_id: DP vdev ID
  * @data: skb data pointer
  *
@@ -1753,13 +1759,14 @@ void qdf_fill_wlan_connectivity_log(enum qdf_proto_type type,
 				    enum qdf_proto_subtype subtype,
 				    enum qdf_proto_dir dir,
 				    enum qdf_dp_tx_rx_status qdf_tx_status,
+				    enum QDF_OPMODE op_mode,
 				    uint8_t vdev_id, uint8_t *data)
 {
 	uint8_t pkt_type;
 
 	WLAN_HOST_DIAG_EVENT_DEF(wlan_diag_event, struct wlan_diag_packet_info);
 
-	if (qdf_skip_wlan_connectivity_log(type, subtype, dir))
+	if (qdf_skip_wlan_connectivity_log(type, subtype, dir, op_mode))
 		return;
 
 	qdf_mem_zero(&wlan_diag_event, sizeof(wlan_diag_event));
@@ -1812,6 +1819,7 @@ void qdf_fill_wlan_connectivity_log(enum qdf_proto_type type,
 				    enum qdf_proto_subtype subtype,
 				    enum qdf_proto_dir dir,
 				    enum qdf_dp_tx_rx_status qdf_tx_status,
+					enum QDF_OPMODE op_mode,
 				    uint8_t vdev_id, uint8_t *data)
 {
 }
@@ -1823,11 +1831,13 @@ void qdf_fill_wlan_connectivity_log(enum qdf_proto_type type,
  * @skb: skb pointer
  * @dir: direction
  * @pdev_id: ID of the pdev
+ * @op_mode: Vdev Operation mode
  *
  * Return: true/false
  */
 static bool qdf_log_eapol_pkt(uint8_t vdev_id, struct sk_buff *skb,
-			      enum qdf_proto_dir dir, uint8_t pdev_id)
+			      enum qdf_proto_dir dir, uint8_t pdev_id,
+				  enum QDF_OPMODE op_mode)
 {
 	enum qdf_proto_subtype subtype;
 	uint32_t dp_eap_trace;
@@ -1854,7 +1864,8 @@ static bool qdf_log_eapol_pkt(uint8_t vdev_id, struct sk_buff *skb,
 					  QDF_TRACE_DEFAULT_MSDU_ID,
 					  QDF_TX_RX_STATUS_INVALID);
 		qdf_fill_wlan_connectivity_log(QDF_PROTO_TYPE_EAPOL, subtype,
-					       QDF_RX, 0, vdev_id, skb->data);
+					       QDF_RX, 0, op_mode,
+					       vdev_id, skb->data);
 	}
 
 	if (dp_eap_trace) {
@@ -1901,11 +1912,13 @@ static bool qdf_log_eapol_pkt(uint8_t vdev_id, struct sk_buff *skb,
  * @skb: skb pointer
  * @dir: direction
  * @pdev_id: ID of the pdev
+ * @op_mode: Vdev Operation mode
  *
  * Return: true/false
  */
 static bool qdf_log_dhcp_pkt(uint8_t vdev_id, struct sk_buff *skb,
-			     enum qdf_proto_dir dir, uint8_t pdev_id)
+			     enum qdf_proto_dir dir, uint8_t pdev_id,
+				 enum QDF_OPMODE op_mode)
 {
 	enum qdf_proto_subtype subtype = QDF_PROTO_INVALID;
 	uint32_t dp_dhcp_trace;
@@ -1932,7 +1945,7 @@ static bool qdf_log_dhcp_pkt(uint8_t vdev_id, struct sk_buff *skb,
 					  QDF_TRACE_DEFAULT_MSDU_ID,
 					  QDF_TX_RX_STATUS_INVALID);
 		qdf_fill_wlan_connectivity_log(QDF_PROTO_TYPE_DHCP, subtype,
-					       QDF_RX, 0, vdev_id, 0);
+					       QDF_RX, 0, op_mode, vdev_id, 0);
 	}
 
 	if (dp_dhcp_trace) {
@@ -2024,15 +2037,16 @@ static bool qdf_log_arp_pkt(uint8_t vdev_id, struct sk_buff *skb,
 
 
 bool qdf_dp_trace_log_pkt(uint8_t vdev_id, struct sk_buff *skb,
-			  enum qdf_proto_dir dir, uint8_t pdev_id)
+			  enum qdf_proto_dir dir, uint8_t pdev_id,
+			  enum QDF_OPMODE op_mode)
 {
 	if (!qdf_dp_get_proto_bitmap() && !qdf_dp_get_proto_event_bitmap())
 		return false;
 	if (qdf_log_arp_pkt(vdev_id, skb, dir, pdev_id))
 		return true;
-	if (qdf_log_dhcp_pkt(vdev_id, skb, dir, pdev_id))
+	if (qdf_log_dhcp_pkt(vdev_id, skb, dir, pdev_id, op_mode))
 		return true;
-	if (qdf_log_eapol_pkt(vdev_id, skb, dir, pdev_id))
+	if (qdf_log_eapol_pkt(vdev_id, skb, dir, pdev_id, op_mode))
 		return true;
 	if (qdf_log_icmp_pkt(vdev_id, skb, dir, pdev_id))
 		return true;
@@ -2419,7 +2433,8 @@ qdf_export_symbol(qdf_dp_get_status_from_a_status);
 void qdf_dp_trace_ptr(qdf_nbuf_t nbuf, enum QDF_DP_TRACE_ID code,
 		uint8_t pdev_id, uint8_t *data, uint8_t size,
 		uint16_t msdu_id, uint16_t buf_arg_status,
-		enum qdf_dp_tx_rx_status qdf_tx_status)
+		enum qdf_dp_tx_rx_status qdf_tx_status,
+		enum QDF_OPMODE op_mode)
 {
 	struct qdf_dp_trace_ptr_buf buf;
 	int buf_size = sizeof(struct qdf_dp_trace_ptr_buf);
@@ -2436,7 +2451,7 @@ void qdf_dp_trace_ptr(qdf_nbuf_t nbuf, enum QDF_DP_TRACE_ID code,
 					 pkt_type, subtype,
 					 QDF_TX, msdu_id, qdf_tx_status);
 		qdf_fill_wlan_connectivity_log(pkt_type, subtype,
-					       QDF_TX, qdf_tx_status,
+					       QDF_TX, qdf_tx_status, op_mode,
 					       QDF_NBUF_CB_TX_VDEV_CTX(nbuf),
 					       nbuf->data);
 	}

+ 2 - 0
umac/mlme/vdev_mgr/dispatcher/src/wlan_vdev_mgr_tgt_if_tx_api.c

@@ -107,6 +107,7 @@ QDF_STATUS tgt_vdev_mgr_create_send(
 	vdev_info.vdev_stats_id = param->vdev_stats_id;
 	vdev_info.op_mode = wlan_util_vdev_get_cdp_txrx_opmode(vdev);
 	vdev_info.subtype = wlan_util_vdev_get_cdp_txrx_subtype(vdev);
+	vdev_info.qdf_opmode = wlan_vdev_mlme_get_opmode(vdev);
 	wlan_vdev_mgr_fill_mlo_params(&vdev_info, param);
 	pdev = wlan_vdev_get_pdev(vdev);
 
@@ -748,6 +749,7 @@ QDF_STATUS tgt_vdev_mgr_cdp_vdev_attach(struct vdev_mlme_obj *mlme_obj)
 	vdev_info.vdev_id = wlan_vdev_get_id(vdev);
 	vdev_info.op_mode = wlan_util_vdev_get_cdp_txrx_opmode(vdev);
 	vdev_info.subtype = wlan_util_vdev_get_cdp_txrx_subtype(vdev);
+	vdev_info.qdf_opmode = wlan_vdev_mlme_get_opmode(vdev);
 	tgt_vdev_mgr_fill_mlo_params(&vdev_info, vdev);
 	return cdp_vdev_attach(soc_txrx_handle,
 			       wlan_objmgr_pdev_get_pdev_id(pdev),