浏览代码

Merge "qcacmn: Enable SW2TCL_CMD ring for data"

Linux Build Service Account 5 年之前
父节点
当前提交
782c0802c6
共有 3 个文件被更改,包括 53 次插入7 次删除
  1. 6 3
      dp/wifi3.0/dp_tx.c
  2. 44 1
      dp/wifi3.0/dp_tx.h
  3. 3 3
      hal/wifi3.0/hal_generic_api.h

+ 6 - 3
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",

+ 44 - 1
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

+ 3 - 3
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,