diff --git a/dp/wifi3.0/dp_tx.c b/dp/wifi3.0/dp_tx.c index 405bd1f7c89e..871da42c57ff 100644 --- a/dp/wifi3.0/dp_tx.c +++ b/dp/wifi3.0/dp_tx.c @@ -946,6 +946,26 @@ error: } +/** + * dp_tx_raw_prepare_unset() - unmap the chain of nbufs belonging to RAW frame. + * @soc: DP soc handle + * @nbuf: Buffer pointer + * + * unmap the chain of nbufs that belong to this RAW frame. + * + * Return: None + */ +static void dp_tx_raw_prepare_unset(struct dp_soc *soc, + qdf_nbuf_t nbuf) +{ + qdf_nbuf_t cur_nbuf = nbuf; + + do { + qdf_nbuf_unmap(soc->osdev, cur_nbuf, QDF_DMA_TO_DEVICE); + cur_nbuf = qdf_nbuf_next(cur_nbuf); + } while (cur_nbuf); +} + /** * dp_tx_hw_enqueue() - Enqueue to TCL HW for transmit * @soc: DP Soc Handle @@ -1514,7 +1534,6 @@ qdf_nbuf_t dp_tx_send_msdu_multiple(struct dp_vdev *vdev, qdf_nbuf_t nbuf, bool is_cce_classified = false; QDF_STATUS status; uint16_t htt_tcl_metadata = 0; - struct dp_tx_queue *tx_q = &msdu_info->tx_queue; void *hal_srng = soc->tcl_data_ring[tx_q->ring_id].hal_srng; struct cdp_tid_tx_stats *tid_stats = NULL; @@ -2208,6 +2227,9 @@ qdf_nbuf_t dp_tx_send(void *vap_dev, qdf_nbuf_t nbuf) send_multiple: nbuf = dp_tx_send_msdu_multiple(vdev, nbuf, &msdu_info); + if (qdf_unlikely(nbuf && msdu_info.frm_type == dp_tx_frm_raw)) + dp_tx_raw_prepare_unset(vdev->pdev->soc, nbuf); + return nbuf; }