Bläddra i källkod

qcacmn: Fetch the reo qdesc from the peer

When compact rx tlv feature is enabled fetch the
reo qdesc from the peer instead of rx pkt tlvs.

Change-Id: Idc9eec559b71ebb2dc39ea1d648a384ea0eb9559
CRs-Fixed: 3311270
Sai Rupesh Chevuru 2 år sedan
förälder
incheckning
63d8ecaa0f

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

@@ -2157,6 +2157,7 @@ void dp_initialize_arch_ops_be(struct dp_arch_ops *arch_ops)
 #endif
 
 	dp_init_near_full_arch_ops_be(arch_ops);
+	arch_ops->get_reo_qdesc_addr = dp_rx_get_reo_qdesc_addr_be;
 	arch_ops->get_rx_hash_key = dp_get_rx_hash_key_be;
 	arch_ops->print_mlo_ast_stats = dp_print_mlo_ast_stats_be;
 	arch_ops->peer_get_reo_hash = dp_peer_get_reo_hash_be;

+ 48 - 0
dp/wifi3.0/be/dp_be_rx.h

@@ -488,4 +488,52 @@ dp_rx_prefetch_hw_sw_nbuf_32_byte_desc(struct dp_soc *soc,
 {
 }
 #endif
+#ifdef CONFIG_WORD_BASED_TLV
+/**
+ * dp_rx_get_reo_qdesc_addr_be(): API to get qdesc address of reo
+ * entrance ring desc
+ *
+ * @hal_soc: Handle to HAL Soc structure
+ * @dst_ring_desc: reo dest ring descriptor (used for Lithium DP)
+ * @buf: pointer to the start of RX PKT TLV headers
+ * @txrx_peer: pointer to txrx_peer
+ * @tid: tid value
+ *
+ * Return: qdesc adrress in reo destination ring buffer
+ */
+static inline
+uint64_t dp_rx_get_reo_qdesc_addr_be(hal_soc_handle_t hal_soc,
+				     uint8_t *dst_ring_desc,
+				     uint8_t *buf,
+				     struct dp_txrx_peer *txrx_peer,
+				     unsigned int tid)
+{
+	struct dp_peer *peer = NULL;
+	uint64_t qdesc_addr = 0;
+
+	if (hal_reo_shared_qaddr_is_enable(hal_soc)) {
+		qdesc_addr = (uint64_t)txrx_peer->peer_id;
+	} else {
+		peer = dp_peer_get_ref_by_id(txrx_peer->vdev->pdev->soc,
+					     txrx_peer->peer_id,
+					     DP_MOD_ID_CONFIG);
+		if (!peer)
+			return 0;
+
+		qdesc_addr = (uint64_t)peer->rx_tid[tid].hw_qdesc_paddr;
+		dp_peer_unref_delete(peer, DP_MOD_ID_CONFIG);
+	}
+	return qdesc_addr;
+}
+#else
+static inline
+uint64_t dp_rx_get_reo_qdesc_addr_be(hal_soc_handle_t hal_soc,
+				     uint8_t *dst_ring_desc,
+				     uint8_t *buf,
+				     struct dp_txrx_peer *txrx_peer,
+				     unsigned int tid)
+{
+	return hal_rx_get_qdesc_addr(hal_soc, dst_ring_desc, buf);
+}
+#endif
 #endif

+ 5 - 3
dp/wifi3.0/dp_rx_defrag.c

@@ -1398,9 +1398,11 @@ static QDF_STATUS dp_rx_defrag_reo_reinject(struct dp_txrx_peer *txrx_peer,
 	ent_qdesc_addr = hal_get_reo_ent_desc_qdesc_addr(soc->hal_soc,
 						(uint8_t *)ent_ring_desc);
 
-	dst_qdesc_addr = hal_rx_get_qdesc_addr(soc->hal_soc,
-					       (uint8_t *)dst_ring_desc,
-					       qdf_nbuf_data(head));
+	dst_qdesc_addr = soc->arch_ops.get_reo_qdesc_addr(
+						soc->hal_soc,
+						(uint8_t *)dst_ring_desc,
+						qdf_nbuf_data(head),
+						txrx_peer, tid);
 
 	qdf_mem_copy(ent_qdesc_addr, &dst_qdesc_addr, 5);
 

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

@@ -1962,6 +1962,11 @@ struct dp_arch_ops {
 						   enum dp_mod_id mod_id,
 						   uint8_t vdev_id);
 #endif
+	uint64_t (*get_reo_qdesc_addr)(hal_soc_handle_t hal_soc_hdl,
+				       uint8_t *dst_ring_desc,
+				       uint8_t *buf,
+				       struct dp_txrx_peer *peer,
+				       unsigned int tid);
 	void (*get_rx_hash_key)(struct dp_soc *soc,
 				struct cdp_lro_hash_config *lro_hash);
 	void (*txrx_print_peer_stats)(struct cdp_peer_stats *peer_stats,

+ 1 - 0
dp/wifi3.0/li/dp_li.c

@@ -632,6 +632,7 @@ void dp_initialize_arch_ops_li(struct dp_arch_ops *arch_ops)
 	arch_ops->dp_txrx_ppeds_rings_status = NULL;
 	arch_ops->txrx_soc_ppeds_start = NULL;
 	arch_ops->txrx_soc_ppeds_stop = NULL;
+	arch_ops->get_reo_qdesc_addr = dp_rx_get_reo_qdesc_addr_li;
 }
 
 #ifdef QCA_DP_TX_HW_SW_NBUF_DESC_PREFETCH

+ 21 - 0
dp/wifi3.0/li/dp_li_rx.h

@@ -79,6 +79,27 @@ QDF_STATUS dp_wbm_get_rx_desc_from_hal_desc_li(
 					struct dp_soc *soc,
 					void *ring_desc,
 					struct dp_rx_desc **r_rx_desc);
+/**
+ * dp_rx_get_reo_qdesc_addr_li(): API to get qdesc address of reo
+ * entrance ring desc
+ *
+ * @hal_soc: Handle to HAL Soc structure
+ * @dst_ring_desc: reo dest ring descriptor (used for Lithium DP)
+ * @buf: pointer to the start of RX PKT TLV headers
+ * @txrx_peer: pointer to txrx_peer
+ * @tid: tid value
+ *
+ * Return: qdesc adrress in reo destination ring buffer
+ */
+static inline
+uint64_t dp_rx_get_reo_qdesc_addr_li(hal_soc_handle_t hal_soc,
+				     uint8_t *dst_ring_desc,
+				     uint8_t *buf,
+				     struct dp_txrx_peer *txrx_peer,
+				     unsigned int tid)
+{
+	return hal_rx_get_qdesc_addr(hal_soc, dst_ring_desc, buf);
+}
 
 /**
  * dp_rx_desc_cookie_2_va_li() - Convert RX Desc cookie ID to VA