Răsfoiți Sursa

qcacmn: Add changes to get link ID in Tx/Rx Path

Add changes to get link ID in Tx/Rx Path

Change-Id: I6b52093697b138e5a5d3878af2dd8db0d65cc488
CRs-Fixed: 3450541
Amit Mehta 2 ani în urmă
părinte
comite
34497ea2d1

+ 1 - 0
dp/wifi3.0/be/dp_be.c

@@ -2880,6 +2880,7 @@ void dp_initialize_arch_ops_be(struct dp_arch_ops *arch_ops)
 	arch_ops->dp_soc_get_num_soc = dp_soc_get_num_soc_be;
 	arch_ops->dp_peer_rx_reorder_queue_setup =
 					dp_peer_rx_reorder_queue_setup_be;
+	arch_ops->dp_rx_peer_set_link_id = dp_rx_set_link_id_be;
 	arch_ops->txrx_print_peer_stats = dp_print_peer_txrx_stats_be;
 	arch_ops->dp_find_peer_by_destmac = dp_find_peer_by_destmac_be;
 #if defined(DP_UMAC_HW_HARD_RESET) && defined(DP_UMAC_HW_RESET_SUPPORT)

+ 17 - 3
dp/wifi3.0/be/dp_be_rx.h

@@ -644,14 +644,28 @@ dp_rx_set_msdu_lmac_id(qdf_nbuf_t nbuf, uint32_t peer_mdata)
 #endif
 
 #ifndef CONFIG_NBUF_AP_PLATFORM
+#if defined(WLAN_FEATURE_11BE_MLO) && defined(DP_MLO_LINK_STATS_SUPPORT)
+static inline uint8_t
+dp_rx_peer_mdata_link_id_get_be(uint32_t peer_mdata)
+{
+	uint8_t link_id;
+
+	link_id = HTT_RX_PEER_META_DATA_V1A_LOGICAL_LINK_ID_GET(peer_mdata) + 1;
+	if (link_id > DP_MAX_MLO_LINKS)
+		link_id = 0;
+
+	return link_id;
+}
+#else
 static inline uint8_t
 dp_rx_peer_mdata_link_id_get_be(uint32_t peer_metadata)
 {
 	return 0;
 }
+#endif /* DP_MLO_LINK_STATS_SUPPORT */
 
 static inline void
-dp_rx_set_msdu_hw_link_id(qdf_nbuf_t nbuf, uint32_t peer_mdata)
+dp_rx_set_link_id_be(qdf_nbuf_t nbuf, uint32_t peer_mdata)
 {
 	uint8_t logical_link_id;
 
@@ -708,7 +722,7 @@ static inline uint8_t dp_rx_copy_desc_info_in_nbuf_cb(struct dp_soc *soc,
 	QDF_NBUF_CB_RX_VDEV_ID(nbuf) =
 		dp_rx_peer_metadata_vdev_id_get_be(soc, peer_mdata);
 	dp_rx_set_msdu_lmac_id(nbuf, peer_mdata);
-	dp_rx_set_msdu_hw_link_id(nbuf, peer_mdata);
+	dp_rx_set_link_id_be(nbuf, peer_mdata);
 
 	/* to indicate whether this msdu is rx offload */
 	pkt_capture_offload =
@@ -772,7 +786,7 @@ dp_rx_wbm_err_msdu_continuation_get(struct dp_soc *soc,
 }
 #else
 static inline void
-dp_rx_set_msdu_hw_link_id(qdf_nbuf_t nbuf, uint32_t peer_mdata)
+dp_rx_set_link_id_be(qdf_nbuf_t nbuf, uint32_t peer_mdata)
 {
 }
 

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

@@ -12738,6 +12738,26 @@ fail1:
 	return QDF_STATUS_E_NOMEM;
 }
 
+#if defined(WLAN_FEATURE_11BE_MLO) && defined(DP_MLO_LINK_STATS_SUPPORT)
+/**
+ * dp_init_link_peer_stats_enabled() - Init link_peer_stats as per config
+ * @pdev: DP pdev
+ *
+ * Return: None
+ */
+static inline void
+dp_init_link_peer_stats_enabled(struct dp_pdev *pdev)
+{
+	pdev->link_peer_stats = wlan_cfg_is_peer_link_stats_enabled(
+						pdev->soc->wlan_cfg_ctx);
+}
+#else
+static inline void
+dp_init_link_peer_stats_enabled(struct dp_pdev *pdev)
+{
+}
+#endif
+
 static QDF_STATUS dp_pdev_init(struct cdp_soc_t *txrx_soc,
 				      HTC_HANDLE htc_handle,
 				      qdf_device_t qdf_osdev,
@@ -12884,6 +12904,7 @@ static QDF_STATUS dp_pdev_init(struct cdp_soc_t *txrx_soc,
 	dp_rx_pdev_buffers_alloc(pdev);
 
 	dp_init_tso_stats(pdev);
+	dp_init_link_peer_stats_enabled(pdev);
 
 	pdev->rx_fast_flag = false;
 	dp_info("Mem stats: DMA = %u HEAP = %u SKB = %u",

+ 28 - 1
dp/wifi3.0/dp_rx.h

@@ -2419,6 +2419,33 @@ dp_rx_peer_metadata_peer_id_get(struct dp_soc *soc, uint32_t peer_metadata)
 							     peer_metadata);
 }
 
+#if defined(WLAN_FEATURE_11BE_MLO) && defined(DP_MLO_LINK_STATS_SUPPORT)
+/**
+ * dp_rx_nbuf_set_link_id_from_tlv() - Set link id in nbuf cb
+ * @soc: SOC handle
+ * @tlv_hdr: rx tlv header
+ * @nbuf: nbuf pointer
+ *
+ * Return: None
+ */
+static inline void
+dp_rx_nbuf_set_link_id_from_tlv(struct dp_soc *soc, uint8_t *tlv_hdr,
+				qdf_nbuf_t nbuf)
+{
+	uint32_t peer_metadata = hal_rx_tlv_peer_meta_data_get(soc->hal_soc,
+								tlv_hdr);
+
+	if (soc->arch_ops.dp_rx_peer_set_link_id)
+		soc->arch_ops.dp_rx_peer_set_link_id(nbuf, peer_metadata);
+}
+#else
+static inline void
+dp_rx_nbuf_set_link_id_from_tlv(struct dp_soc *soc, uint8_t *tlv_hdr,
+				qdf_nbuf_t nbuf)
+{
+}
+#endif
+
 /**
  * dp_rx_desc_pool_init_generic() - Generic Rx descriptors initialization
  * @soc: SOC handle
@@ -3500,7 +3527,7 @@ static inline uint8_t
 dp_rx_get_stats_arr_idx_from_link_id(qdf_nbuf_t nbuf,
 				     struct dp_txrx_peer *txrx_peer)
 {
-	return 0;
+	return QDF_NBUF_CB_RX_LOGICAL_LINK_ID(nbuf);
 }
 #else
 static inline uint8_t

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

@@ -2514,6 +2514,8 @@ dp_rx_wbm_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
 			continue;
 		}
 
+		dp_rx_nbuf_set_link_id_from_tlv(soc, rx_tlv_hdr, nbuf);
+
 		pool_id = wbm_err.info_bit.pool_id;
 		dp_pdev = dp_get_pdev_for_lmac_id(soc, pool_id);
 

+ 3 - 1
dp/wifi3.0/dp_tx.c

@@ -4605,7 +4605,9 @@ dp_tx_update_peer_extd_stats(struct hal_tx_completion_status *ts,
 }
 #endif
 
-#if defined(WLAN_FEATURE_11BE_MLO) && defined(QCA_ENHANCED_STATS_SUPPORT)
+#if defined(WLAN_FEATURE_11BE_MLO) && \
+	(defined(QCA_ENHANCED_STATS_SUPPORT) || \
+		defined(DP_MLO_LINK_STATS_SUPPORT))
 static inline uint8_t
 dp_tx_get_link_id_from_ppdu_id(struct dp_soc *soc,
 			       struct hal_tx_completion_status *ts,

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

@@ -2194,6 +2194,7 @@ enum dp_context_type {
  * @mlo_peer_find_hash_remove:
  * @mlo_peer_find_hash_find:
  * @get_hw_link_id:
+ * @dp_rx_peer_set_link_id: set link id in nbuf cb
  * @get_reo_qdesc_addr:
  * @get_rx_hash_key:
  * @dp_set_rx_fst:
@@ -2390,6 +2391,7 @@ struct dp_arch_ops {
 						   uint8_t vdev_id);
 #endif
 	uint8_t (*get_hw_link_id)(struct dp_pdev *pdev);
+	void (*dp_rx_peer_set_link_id)(qdf_nbuf_t nbuf, uint32_t peer_mdata);
 	uint64_t (*get_reo_qdesc_addr)(hal_soc_handle_t hal_soc_hdl,
 				       uint8_t *dst_ring_desc,
 				       uint8_t *buf,