Forráskód Böngészése

qcacmn: Call dp_tx_nbuf_unmap instead of directly calling unmap API

Call dp_tx_nbuf_unmap instead of directly calling
qdf_nbuf_unmap_nbytes_single

Change-Id: I4d28ccdc45d99b16cf9883742742ee7b36ba1022
CRs-Fixed: 3146931
Pavankumar Nandeshwar 3 éve
szülő
commit
fbf1e82c6b
1 módosított fájl, 61 hozzáadás és 48 törlés
  1. 61 48
      dp/wifi3.0/dp_tx.c

+ 61 - 48
dp/wifi3.0/dp_tx.c

@@ -148,36 +148,6 @@ dp_update_tx_desc_stats(struct dp_pdev *pdev)
 }
 #endif /* CONFIG_WLAN_SYSFS_MEM_STATS */
 
-#if defined(WLAN_TX_PKT_CAPTURE_ENH) || defined(FEATURE_PERPKT_INFO)
-static inline
-void dp_tx_enh_unmap(struct dp_soc *soc, struct dp_tx_desc_s *desc)
-{
-	qdf_nbuf_unmap_nbytes_single(soc->osdev, desc->nbuf,
-				     QDF_DMA_TO_DEVICE,
-				     desc->nbuf->len);
-	desc->flags |= DP_TX_DESC_FLAG_UNMAP_DONE;
-}
-
-static inline void dp_tx_unmap(struct dp_soc *soc, struct dp_tx_desc_s *desc)
-{
-	if (qdf_likely(!(desc->flags & DP_TX_DESC_FLAG_UNMAP_DONE)))
-		qdf_nbuf_unmap_nbytes_single(soc->osdev, desc->nbuf,
-					     QDF_DMA_TO_DEVICE,
-					     desc->nbuf->len);
-}
-#else
-static inline
-void dp_tx_enh_unmap(struct dp_soc *soc, struct dp_tx_desc_s *desc)
-{
-}
-
-static inline void dp_tx_unmap(struct dp_soc *soc, struct dp_tx_desc_s *desc)
-{
-	qdf_nbuf_unmap_nbytes_single(soc->osdev, desc->nbuf,
-				     QDF_DMA_TO_DEVICE, desc->nbuf->len);
-}
-#endif
-
 #ifdef QCA_TX_LIMIT_CHECK
 /**
  * dp_tx_limit_check - Check if allocated tx descriptors reached
@@ -1928,21 +1898,51 @@ static inline QDF_STATUS dp_tx_msdu_single_map(struct dp_vdev *vdev,
 }
 #endif
 
+static inline
+qdf_dma_addr_t dp_tx_nbuf_map_regular(struct dp_vdev *vdev,
+				      struct dp_tx_desc_s *tx_desc,
+				      qdf_nbuf_t nbuf)
+{
+	QDF_STATUS ret = QDF_STATUS_E_FAILURE;
+
+	ret = dp_tx_msdu_single_map(vdev, tx_desc, nbuf);
+	if (qdf_unlikely(QDF_IS_STATUS_ERROR(ret)))
+		return 0;
+
+	return qdf_nbuf_mapped_paddr_get(nbuf);
+}
+
+static inline
+void dp_tx_nbuf_unmap_regular(struct dp_soc *soc, struct dp_tx_desc_s *desc)
+{
+	qdf_nbuf_unmap_nbytes_single_paddr(soc->osdev,
+					   desc->nbuf,
+					   desc->dma_addr,
+					   QDF_DMA_TO_DEVICE,
+					   desc->length);
+}
+
 #if defined(QCA_DP_TX_NBUF_NO_MAP_UNMAP) && !defined(BUILD_X86)
 static inline
 qdf_dma_addr_t dp_tx_nbuf_map(struct dp_vdev *vdev,
 			      struct dp_tx_desc_s *tx_desc,
 			      qdf_nbuf_t nbuf)
 {
-	qdf_nbuf_dma_clean_range((void *)nbuf->data,
-				 (void *)(nbuf->data + nbuf->len));
-	return (qdf_dma_addr_t)qdf_mem_virt_to_phys(nbuf->data);
+	if (qdf_likely(tx_desc->flags & DP_TX_DESC_FLAG_SIMPLE)) {
+		qdf_nbuf_dma_clean_range((void *)nbuf->data,
+					 (void *)(nbuf->data + nbuf->len));
+		return (qdf_dma_addr_t)qdf_mem_virt_to_phys(nbuf->data);
+	} else {
+		return dp_tx_nbuf_map_regular(vdev, tx_desc, nbuf);
+	}
 }
 
 static inline
 void dp_tx_nbuf_unmap(struct dp_soc *soc,
 		      struct dp_tx_desc_s *desc)
 {
+	if (qdf_unlikely(!(desc->flags & DP_TX_DESC_FLAG_SIMPLE)))
+		return dp_tx_nbuf_unmap_regular(soc, desc);
 }
 #else
 static inline
@@ -1950,24 +1950,39 @@ qdf_dma_addr_t dp_tx_nbuf_map(struct dp_vdev *vdev,
 			      struct dp_tx_desc_s *tx_desc,
 			      qdf_nbuf_t nbuf)
 {
-	QDF_STATUS ret = QDF_STATUS_E_FAILURE;
-
-	ret = dp_tx_msdu_single_map(vdev, tx_desc, nbuf);
-	if (qdf_unlikely(QDF_IS_STATUS_ERROR(ret)))
-		return 0;
-
-	return qdf_nbuf_mapped_paddr_get(nbuf);
+	return dp_tx_nbuf_map_regular(vdev, tx_desc, nbuf);
 }
 
 static inline
 void dp_tx_nbuf_unmap(struct dp_soc *soc,
 		      struct dp_tx_desc_s *desc)
 {
-	qdf_nbuf_unmap_nbytes_single_paddr(soc->osdev,
-					   desc->nbuf,
-					   desc->dma_addr,
-					   QDF_DMA_TO_DEVICE,
-					   desc->length);
+	return dp_tx_nbuf_unmap_regular(soc, desc);
+}
+#endif
+
+#if defined(WLAN_TX_PKT_CAPTURE_ENH) || defined(FEATURE_PERPKT_INFO)
+static inline
+void dp_tx_enh_unmap(struct dp_soc *soc, struct dp_tx_desc_s *desc)
+{
+	dp_tx_nbuf_unmap(soc, desc);
+	desc->flags |= DP_TX_DESC_FLAG_UNMAP_DONE;
+}
+
+static inline void dp_tx_unmap(struct dp_soc *soc, struct dp_tx_desc_s *desc)
+{
+	if (qdf_likely(!(desc->flags & DP_TX_DESC_FLAG_UNMAP_DONE)))
+		dp_tx_nbuf_unmap(soc, desc);
+}
+#else
+static inline
+void dp_tx_enh_unmap(struct dp_soc *soc, struct dp_tx_desc_s *desc)
+{
+}
+
+static inline void dp_tx_unmap(struct dp_soc *soc, struct dp_tx_desc_s *desc)
+{
+	dp_tx_nbuf_unmap(soc, desc);
 }
 #endif
 
@@ -2181,9 +2196,7 @@ dp_tx_send_msdu_single(struct dp_vdev *vdev, qdf_nbuf_t nbuf,
 			     tx_desc, tx_q->ring_id);
 		dp_tx_desc_history_add(soc, tx_desc->dma_addr, nbuf,
 				       tx_desc->id, DP_TX_DESC_UNMAP);
-		qdf_nbuf_unmap_nbytes_single(vdev->osdev, nbuf,
-					     QDF_DMA_TO_DEVICE,
-					     nbuf->len);
+		dp_tx_nbuf_unmap(soc, tx_desc);
 		drop_code = TX_HW_ENQUEUE;
 		goto release_desc;
 	}