|
@@ -102,6 +102,36 @@ 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
|
|
@@ -2118,8 +2148,7 @@ static inline void dp_tx_comp_free_buf(struct dp_soc *soc,
|
|
|
if ((desc->flags & DP_TX_DESC_FLAG_ME) && qdf_nbuf_is_cloned(nbuf))
|
|
|
goto nbuf_free;
|
|
|
|
|
|
- qdf_nbuf_unmap_nbytes_single(soc->osdev, nbuf,
|
|
|
- QDF_DMA_TO_DEVICE, nbuf->len);
|
|
|
+ dp_tx_unmap(soc, desc);
|
|
|
|
|
|
if (desc->flags & DP_TX_DESC_FLAG_MESH_MODE)
|
|
|
return dp_mesh_tx_comp_free_buff(soc, desc);
|
|
@@ -3914,6 +3943,8 @@ dp_tx_comp_process_desc(struct dp_soc *soc,
|
|
|
dp_send_completion_to_pkt_capture(soc, desc, ts);
|
|
|
|
|
|
if (!(desc->msdu_ext_desc)) {
|
|
|
+ dp_tx_enh_unmap(soc, desc);
|
|
|
+
|
|
|
if (QDF_STATUS_SUCCESS ==
|
|
|
dp_tx_add_to_comp_queue(soc, desc, ts, peer)) {
|
|
|
return;
|
|
@@ -3925,9 +3956,6 @@ dp_tx_comp_process_desc(struct dp_soc *soc,
|
|
|
peer, ts,
|
|
|
desc->nbuf,
|
|
|
time_latency)) {
|
|
|
- qdf_nbuf_unmap_nbytes_single(soc->osdev, desc->nbuf,
|
|
|
- QDF_DMA_TO_DEVICE,
|
|
|
- desc->nbuf->len);
|
|
|
dp_send_completion_to_stack(soc,
|
|
|
desc->pdev,
|
|
|
ts->peer_id,
|