فهرست منبع

qcacmn: Add support for pmac_id in IPA driver

To support splitphy and MLO operation when multiple
TX ring are present under single soc, then to differentiate
the TX lmac, pmac id in per packet is require. As pmac_id in
bank register is always constant for pinnacle case, so need
to pass per packet in TX desc.

Change-Id: I8e5a832700770274e68bf8a04e97675386184545
CRs-Fixed: 3356413
Devender Kumar 2 سال پیش
والد
کامیت
148d0de3e5
1فایلهای تغییر یافته به همراه86 افزوده شده و 0 حذف شده
  1. 86 0
      dp/wifi3.0/dp_ipa.c

+ 86 - 0
dp/wifi3.0/dp_ipa.c

@@ -462,6 +462,80 @@ dp_ipa_setup_tx_smmu_params_bank_id(struct dp_soc *soc,
 }
 #endif
 
+#ifdef QCA_IPA_LL_TX_FLOW_CONTROL
+static void
+dp_ipa_setup_tx_alt_params_pmac_id(struct dp_soc *soc,
+				   qdf_ipa_wdi_pipe_setup_info_t *tx)
+{
+	uint8_t pmac_id = 0;
+
+	/* Set Pmac ID, extract pmac_id from second radio for TX_ALT ring */
+	if (soc->pdev_count > 1)
+		pmac_id = soc->pdev_list[soc->pdev_count - 1]->lmac_id;
+
+	QDF_IPA_WDI_SETUP_INFO_RX_PMAC_ID(tx, pmac_id);
+}
+
+static void
+dp_ipa_setup_tx_alt_smmu_params_pmac_id(struct dp_soc *soc,
+					qdf_ipa_wdi_pipe_setup_info_smmu_t *tx_smmu)
+{
+	uint8_t pmac_id = 0;
+
+	/* Set Pmac ID, extract pmac_id from second radio for TX_ALT ring */
+	if (soc->pdev_count > 1)
+		pmac_id = soc->pdev_list[soc->pdev_count - 1]->lmac_id;
+
+	QDF_IPA_WDI_SETUP_INFO_SMMU_RX_PMAC_ID(tx_smmu, pmac_id);
+}
+
+static void
+dp_ipa_setup_tx_params_pmac_id(struct dp_soc *soc,
+			       qdf_ipa_wdi_pipe_setup_info_t *tx)
+{
+	uint8_t pmac_id;
+
+	pmac_id = soc->pdev_list[0]->lmac_id;
+
+	QDF_IPA_WDI_SETUP_INFO_RX_PMAC_ID(tx, pmac_id);
+}
+
+static void
+dp_ipa_setup_tx_smmu_params_pmac_id(struct dp_soc *soc,
+				    qdf_ipa_wdi_pipe_setup_info_smmu_t *tx_smmu)
+{
+	uint8_t pmac_id;
+
+	pmac_id = soc->pdev_list[0]->lmac_id;
+
+	QDF_IPA_WDI_SETUP_INFO_SMMU_RX_PMAC_ID(tx_smmu, pmac_id);
+}
+#else
+static inline void
+dp_ipa_setup_tx_alt_params_pmac_id(struct dp_soc *soc,
+				   qdf_ipa_wdi_pipe_setup_info_t *tx)
+{
+}
+
+static inline void
+dp_ipa_setup_tx_alt_smmu_params_pmac_id(struct dp_soc *soc,
+					qdf_ipa_wdi_pipe_setup_info_smmu_t *tx_smmu)
+{
+}
+
+static inline void
+dp_ipa_setup_tx_params_pmac_id(struct dp_soc *soc,
+			       qdf_ipa_wdi_pipe_setup_info_t *tx)
+{
+}
+
+static inline void
+dp_ipa_setup_tx_smmu_params_pmac_id(struct dp_soc *soc,
+				    qdf_ipa_wdi_pipe_setup_info_smmu_t *tx_smmu)
+{
+}
+#endif
+
 #ifdef IPA_WDI3_TX_TWO_PIPES
 static void dp_ipa_tx_alt_pool_detach(struct dp_soc *soc, struct dp_pdev *pdev)
 {
@@ -849,6 +923,9 @@ static void dp_ipa_wdi_tx_alt_pipe_params(struct dp_soc *soc,
 	QDF_IPA_WDI_SETUP_INFO_PKT_OFFSET(tx) = 0;
 
 	dp_ipa_setup_tx_params_bank_id(soc, tx);
+
+	/* Set Pmac ID, extract pmac_id from second radio for TX_ALT ring */
+	dp_ipa_setup_tx_alt_params_pmac_id(soc, tx);
 }
 
 static void
@@ -885,6 +962,9 @@ dp_ipa_wdi_tx_alt_pipe_smmu_params(struct dp_soc *soc,
 	QDF_IPA_WDI_SETUP_INFO_SMMU_PKT_OFFSET(tx_smmu) = 0;
 
 	dp_ipa_setup_tx_smmu_params_bank_id(soc, tx_smmu);
+
+	/* Set Pmac ID, extract pmac_id from second radio for TX_ALT ring */
+	dp_ipa_setup_tx_alt_smmu_params_pmac_id(soc, tx_smmu);
 }
 
 static void dp_ipa_setup_tx_alt_pipe(struct dp_soc *soc,
@@ -2222,6 +2302,9 @@ static void dp_ipa_wdi_tx_params(struct dp_soc *soc,
 	QDF_IPA_WDI_SETUP_INFO_PKT_OFFSET(tx) = 0;
 
 	dp_ipa_setup_tx_params_bank_id(soc, tx);
+
+	/* Set Pmac ID, extract pmac_id from pdev_id 0 for TX ring */
+	dp_ipa_setup_tx_params_pmac_id(soc, tx);
 }
 
 static void dp_ipa_wdi_rx_params(struct dp_soc *soc,
@@ -2310,6 +2393,9 @@ dp_ipa_wdi_tx_smmu_params(struct dp_soc *soc,
 	QDF_IPA_WDI_SETUP_INFO_SMMU_PKT_OFFSET(tx_smmu) = 0;
 
 	dp_ipa_setup_tx_smmu_params_bank_id(soc, tx_smmu);
+
+	/* Set Pmac ID, extract pmac_id from first pdev for TX ring */
+	dp_ipa_setup_tx_smmu_params_pmac_id(soc, tx_smmu);
 }
 
 static void