diff --git a/dp/wifi3.0/dp_tx.c b/dp/wifi3.0/dp_tx.c index 4215299c4d8b..2df6f96fedc7 100644 --- a/dp/wifi3.0/dp_tx.c +++ b/dp/wifi3.0/dp_tx.c @@ -230,8 +230,6 @@ static uint8_t dp_tx_prepare_htt_metadata(struct dp_vdev *vdev, qdf_nbuf_t nbuf, uint8_t *hdr = NULL; - HTT_TX_TCL_METADATA_VALID_HTT_SET(vdev->htt_tcl_metadata, 1); - /* * Metadata - HTT MSDU Extension header */ @@ -481,9 +479,7 @@ struct dp_tx_ext_desc_elem_s *dp_tx_prepare_ext_desc(struct dp_vdev *vdev, &msdu_info->meta_data[0], sizeof(struct htt_tx_msdu_desc_ext2_t)); qdf_atomic_inc(&vdev->pdev->num_tx_exception); - HTT_TX_TCL_METADATA_VALID_HTT_SET(vdev->htt_tcl_metadata, 1); - } else - HTT_TX_TCL_METADATA_VALID_HTT_SET(vdev->htt_tcl_metadata, 0); + } switch (msdu_info->frm_type) { case dp_tx_frm_sg: @@ -1211,7 +1207,6 @@ static qdf_nbuf_t dp_tx_send_msdu_single(struct dp_vdev *vdev, qdf_nbuf_t nbuf, uint16_t htt_tcl_metadata = 0; uint8_t tid = msdu_info->tid; - HTT_TX_TCL_METADATA_VALID_HTT_SET(vdev->htt_tcl_metadata, 0); /* Setup Tx descriptor for an MSDU, and MSDU extension descriptor */ tx_desc = dp_tx_prepare_desc_single(vdev, nbuf, tx_q->desc_pool_id, msdu_info, tx_exc_metadata); @@ -1252,6 +1247,11 @@ static qdf_nbuf_t dp_tx_send_msdu_single(struct dp_vdev *vdev, qdf_nbuf_t nbuf, } else htt_tcl_metadata = vdev->htt_tcl_metadata; + + if (msdu_info->exception_fw) { + HTT_TX_TCL_METADATA_VALID_HTT_SET(htt_tcl_metadata, 1); + } + /* Enqueue the Tx MSDU descriptor to HW for transmit */ status = dp_tx_hw_enqueue(soc, vdev, tx_desc, tid, htt_tcl_metadata, tx_q->ring_id, tx_exc_metadata); @@ -1302,6 +1302,7 @@ qdf_nbuf_t dp_tx_send_msdu_multiple(struct dp_vdev *vdev, qdf_nbuf_t nbuf, struct dp_tx_desc_s *tx_desc; 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; @@ -1357,11 +1358,16 @@ qdf_nbuf_t dp_tx_send_msdu_multiple(struct dp_vdev *vdev, qdf_nbuf_t nbuf, if (is_cce_classified) tx_desc->flags |= DP_TX_DESC_FLAG_TO_FW; + htt_tcl_metadata = vdev->htt_tcl_metadata; + if (msdu_info->exception_fw) { + HTT_TX_TCL_METADATA_VALID_HTT_SET(htt_tcl_metadata, 1); + } + /* * Enqueue the Tx MSDU descriptor to HW for transmit */ status = dp_tx_hw_enqueue(soc, vdev, tx_desc, msdu_info->tid, - vdev->htt_tcl_metadata, tx_q->ring_id, NULL); + htt_tcl_metadata, tx_q->ring_id, NULL); if (status != QDF_STATUS_SUCCESS) { QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,