Ver código fonte

qcacmn: Fix Tx queue selection when IPA is enable

When IPA is enable and TX DATA ring mask is not set for
TX ring given to IPA, Host should not select the TX queue
which is given to IPA, hence override the TX queue to 0 if
TX queue id is same as IPA TX data ring.

Change-Id: Ia7fe49ef50deee869c84de9e741362cb31d60bf0
CRs-Fixed: 3419264
Devender Kumar 2 anos atrás
pai
commit
d67fc1fc09
1 arquivos alterados com 14 adições e 0 exclusões
  1. 14 0
      dp/wifi3.0/dp_tx.h

+ 14 - 0
dp/wifi3.0/dp_tx.h

@@ -36,6 +36,7 @@
 #include "dp_sawf.h"
 #endif
 #include <qdf_pkt_add_timestamp.h>
+#include "dp_ipa.h"
 
 #define DP_INVALID_VDEV_ID 0xFF
 
@@ -821,12 +822,25 @@ static inline enum qdf_dp_tx_rx_status dp_tx_hw_to_qdf(uint16_t status)
  * Return: None
  */
 #ifdef QCA_OL_TX_MULTIQ_SUPPORT
+#if defined(IPA_OFFLOAD) && defined(QCA_IPA_LL_TX_FLOW_CONTROL)
+static inline void dp_tx_get_queue(struct dp_vdev *vdev,
+				   qdf_nbuf_t nbuf, struct dp_tx_queue *queue)
+{
+	queue->ring_id = qdf_get_cpu();
+	if (vdev->pdev->soc->wlan_cfg_ctx->ipa_enabled)
+		if (queue->ring_id == IPA_TCL_DATA_RING_IDX)
+			queue->ring_id = 0;
+
+	queue->desc_pool_id = queue->ring_id;
+}
+#else
 static inline void dp_tx_get_queue(struct dp_vdev *vdev,
 				   qdf_nbuf_t nbuf, struct dp_tx_queue *queue)
 {
 	queue->ring_id = qdf_get_cpu();
 	queue->desc_pool_id = queue->ring_id;
 }
+#endif
 
 /**
  * dp_tx_get_hal_ring_hdl() - Get the hal_tx_ring_hdl for data transmission