diff --git a/dp/wifi3.0/dp_tx.c b/dp/wifi3.0/dp_tx.c index 2dd0ea8e4c..abc2acaaa7 100644 --- a/dp/wifi3.0/dp_tx.c +++ b/dp/wifi3.0/dp_tx.c @@ -1139,8 +1139,10 @@ static QDF_STATUS dp_tx_hw_enqueue(struct dp_soc *soc, struct dp_vdev *vdev, tx_exc_metadata->sec_type : vdev->sec_type); /* Return Buffer Manager ID */ - uint8_t bm_id = ring_id; - hal_ring_handle_t hal_ring_hdl = soc->tcl_data_ring[ring_id].hal_srng; + uint8_t bm_id = dp_tx_get_rbm_id(soc, ring_id); + + hal_ring_handle_t hal_ring_hdl = NULL; + QDF_STATUS status = QDF_STATUS_E_RESOURCES; if (!dp_tx_is_desc_id_valid(soc, tx_desc->id)) { @@ -1210,7 +1212,8 @@ static QDF_STATUS dp_tx_hw_enqueue(struct dp_soc *soc, struct dp_vdev *vdev, length, type, (uint64_t)dma_addr, tx_desc->pkt_offset, tx_desc->id); - hal_ring_hdl = soc->tcl_data_ring[ring_id].hal_srng; + hal_ring_hdl = dp_tx_get_hal_ring_hdl(soc, ring_id); + if (qdf_unlikely(hal_srng_access_start(soc->hal_soc, hal_ring_hdl))) { QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_ERROR, "%s %d : HAL RING Access Failed -- %pK", diff --git a/dp/wifi3.0/dp_tx.h b/dp/wifi3.0/dp_tx.h index a40166e7b2..8d769f01f7 100644 --- a/dp/wifi3.0/dp_tx.h +++ b/dp/wifi3.0/dp_tx.h @@ -316,12 +316,43 @@ static inline void dp_tx_get_queue(struct dp_vdev *vdev, DP_TX_QUEUE_MASK; queue->desc_pool_id = queue_offset; - queue->ring_id = vdev->pdev->soc->tx_ring_map[queue_offset]; + queue->ring_id = qdf_get_cpu(); QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG, "%s, pool_id:%d ring_id: %d", __func__, queue->desc_pool_id, queue->ring_id); } + +/* + * dp_tx_get_hal_ring_hdl()- Get the hal_tx_ring_hdl for data transmission + * @dp_soc - DP soc structure pointer + * @ring_id - Transmit Queue/ring_id to be used when XPS is enabled + * + * Return - HAL ring handle + */ +static inline hal_ring_handle_t dp_tx_get_hal_ring_hdl(struct dp_soc *soc, + uint8_t ring_id) +{ + if (ring_id == soc->num_tcl_data_rings) + return soc->tcl_cmd_credit_ring.hal_srng; + + return soc->tcl_data_ring[ring_id].hal_srng; +} + +/* + * dp_tx_get_rbm_id()- Get the RBM ID for data transmission completion. + * @dp_soc - DP soc structure pointer + * @ring_id - Transmit Queue/ring_id to be used when XPS is enabled + * + * Return - HAL ring handle + */ +static inline uint8_t dp_tx_get_rbm_id(struct dp_soc *doc, + uint8_t ring_id) +{ + return (ring_id ? HAL_WBM_SW0_BM_ID + (ring_id - 1) : + HAL_WBM_SW2_BM_ID); +} + #else /* QCA_OL_TX_MULTIQ_SUPPORT */ static inline void dp_tx_get_queue(struct dp_vdev *vdev, qdf_nbuf_t nbuf, struct dp_tx_queue *queue) @@ -334,6 +365,18 @@ static inline void dp_tx_get_queue(struct dp_vdev *vdev, "%s, pool_id:%d ring_id: %d", __func__, queue->desc_pool_id, queue->ring_id); } + +static inline hal_ring_handle_t dp_tx_get_hal_ring_hdl(struct dp_soc *soc, + uint8_t ring_id) +{ + return soc->tcl_data_ring[ring_id].hal_srng; +} + +static inline uint8_t dp_tx_get_rbm_id(struct dp_soc *soc, + uint8_t ring_id) +{ + return (ring_id + HAL_WBM_SW0_BM_ID); +} #endif #ifdef FEATURE_PERPKT_INFO QDF_STATUS diff --git a/hal/wifi3.0/hal_generic_api.h b/hal/wifi3.0/hal_generic_api.h index a192bacd25..0425324b7b 100644 --- a/hal/wifi3.0/hal_generic_api.h +++ b/hal/wifi3.0/hal_generic_api.h @@ -101,7 +101,7 @@ void hal_tx_comp_get_status_generic(void *desc, * Return: void */ static inline void hal_tx_desc_set_buf_addr_generic(void *desc, - dma_addr_t paddr, uint8_t pool_id, + dma_addr_t paddr, uint8_t rbm_id, uint32_t desc_id, uint8_t type) { /* Set buffer_addr_info.buffer_addr_31_0 */ @@ -114,11 +114,11 @@ static inline void hal_tx_desc_set_buf_addr_generic(void *desc, HAL_TX_SM(UNIFIED_BUFFER_ADDR_INFO_1, BUFFER_ADDR_39_32, (((uint64_t) paddr) >> 32)); - /* Set buffer_addr_info.return_buffer_manager = pool id */ + /* Set buffer_addr_info.return_buffer_manager = rbm id */ HAL_SET_FLD(desc, UNIFIED_TCL_DATA_CMD_1, BUFFER_ADDR_INFO_BUF_ADDR_INFO) |= HAL_TX_SM(UNIFIED_BUFFER_ADDR_INFO_1, - RETURN_BUFFER_MANAGER, (pool_id + HAL_WBM_SW0_BM_ID)); + RETURN_BUFFER_MANAGER, rbm_id); /* Set buffer_addr_info.sw_buffer_cookie = desc_id */ HAL_SET_FLD(desc, UNIFIED_TCL_DATA_CMD_1,