diff --git a/dp/inc/cdp_txrx_cmn_struct.h b/dp/inc/cdp_txrx_cmn_struct.h index 807574665b..8054a94a91 100644 --- a/dp/inc/cdp_txrx_cmn_struct.h +++ b/dp/inc/cdp_txrx_cmn_struct.h @@ -708,9 +708,10 @@ typedef qdf_nbuf_t (*ol_txrx_tx_exc_fp)(struct cdp_soc_t *soc, uint8_t vdev_id, * for tx completion * @skb: skb data * @osif_dev: the virtual device's OS shim object + * @flag: flag */ typedef void (*ol_txrx_completion_fp)(qdf_nbuf_t skb, - void *osif_dev); + void *osif_dev, uint16_t flag); /** * ol_txrx_tx_flow_control_fp - tx flow control notification * function from txrx to OS shim diff --git a/dp/wifi3.0/dp_tx.c b/dp/wifi3.0/dp_tx.c index 7bca13caf2..3f811dc68c 100644 --- a/dp/wifi3.0/dp_tx.c +++ b/dp/wifi3.0/dp_tx.c @@ -3331,15 +3331,18 @@ void dp_tx_flow_pool_unlock(struct dp_soc *soc, struct dp_tx_desc_s *tx_desc) * @soc: core txrx main context * @tx_desc: tx desc * @netbuf: buffer + * @status: tx status * * Return: none */ static inline void dp_tx_notify_completion(struct dp_soc *soc, struct dp_tx_desc_s *tx_desc, - qdf_nbuf_t netbuf) + qdf_nbuf_t netbuf, + uint8_t status) { void *osif_dev; ol_txrx_completion_fp tx_compl_cbk = NULL; + uint16_t flag = BIT(QDF_TX_RX_STATUS_DOWNLOAD_SUCC); qdf_assert(tx_desc); @@ -3355,8 +3358,11 @@ static inline void dp_tx_notify_completion(struct dp_soc *soc, tx_compl_cbk = tx_desc->vdev->tx_comp; dp_tx_flow_pool_unlock(soc, tx_desc); + if (status == HAL_TX_TQM_RR_FRAME_ACKED) + flag |= BIT(QDF_TX_RX_STATUS_OK); + if (tx_compl_cbk) - tx_compl_cbk(netbuf, osif_dev); + tx_compl_cbk(netbuf, osif_dev, flag); } /** dp_tx_sojourn_stats_process() - Collect sojourn stats @@ -3691,7 +3697,7 @@ dp_tx_comp_process_desc_list(struct dp_soc *soc, netbuf = desc->nbuf; /* check tx complete notification */ if (QDF_NBUF_CB_TX_EXTRA_FRAG_FLAGS_NOTIFY_COMP(netbuf)) - dp_tx_notify_completion(soc, desc, netbuf); + dp_tx_notify_completion(soc, desc, netbuf, ts.status); dp_tx_comp_process_desc(soc, desc, &ts, peer);