|
@@ -584,7 +584,7 @@ QDF_STATUS ol_txrx_ipa_setup(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
|
|
|
qdf_ipa_wdi_pipe_setup_info_t *rx;
|
|
|
qdf_ipa_wdi_pipe_setup_info_smmu_t *tx_smmu;
|
|
|
qdf_ipa_wdi_pipe_setup_info_smmu_t *rx_smmu;
|
|
|
- qdf_ipa_wdi_conn_in_params_t pipe_in;
|
|
|
+ qdf_ipa_wdi_conn_in_params_t *pipe_in = NULL;
|
|
|
qdf_ipa_wdi_conn_out_params_t pipe_out;
|
|
|
qdf_device_t osdev = cds_get_context(QDF_MODULE_ID_QDF_DEVICE);
|
|
|
uint32_t tx_comp_db_dmaaddr = 0, rx_rdy_db_dmaaddr = 0;
|
|
@@ -601,20 +601,26 @@ QDF_STATUS ol_txrx_ipa_setup(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
|
|
|
return QDF_STATUS_E_NOENT;
|
|
|
}
|
|
|
|
|
|
+ pipe_in = qdf_mem_malloc(sizeof(*pipe_in));
|
|
|
+ if (!pipe_in) {
|
|
|
+ ol_txrx_err("pipe_in allocation failed");
|
|
|
+ return QDF_STATUS_E_NOMEM;
|
|
|
+ }
|
|
|
+
|
|
|
ipa_res = &pdev->ipa_resource;
|
|
|
- qdf_mem_zero(&pipe_in, sizeof(pipe_in));
|
|
|
+ qdf_mem_zero(pipe_in, sizeof(*pipe_in));
|
|
|
qdf_mem_zero(&pipe_out, sizeof(pipe_out));
|
|
|
|
|
|
- ol_txrx_setup_mcc_sys_pipes(sys_in, &pipe_in);
|
|
|
+ ol_txrx_setup_mcc_sys_pipes(sys_in, pipe_in);
|
|
|
|
|
|
/* TX PIPE */
|
|
|
if (is_smmu_enabled) {
|
|
|
- QDF_IPA_WDI_CONN_IN_PARAMS_SMMU_ENABLED(&pipe_in) = true;
|
|
|
- tx_smmu = &QDF_IPA_WDI_CONN_IN_PARAMS_TX_SMMU(&pipe_in);
|
|
|
+ QDF_IPA_WDI_CONN_IN_PARAMS_SMMU_ENABLED(pipe_in) = true;
|
|
|
+ tx_smmu = &QDF_IPA_WDI_CONN_IN_PARAMS_TX_SMMU(pipe_in);
|
|
|
tx_cfg = &QDF_IPA_WDI_SETUP_INFO_SMMU_EP_CFG(tx_smmu);
|
|
|
} else {
|
|
|
- QDF_IPA_WDI_CONN_IN_PARAMS_SMMU_ENABLED(&pipe_in) = false;
|
|
|
- tx = &QDF_IPA_WDI_CONN_IN_PARAMS_TX(&pipe_in);
|
|
|
+ QDF_IPA_WDI_CONN_IN_PARAMS_SMMU_ENABLED(pipe_in) = false;
|
|
|
+ tx = &QDF_IPA_WDI_CONN_IN_PARAMS_TX(pipe_in);
|
|
|
tx_cfg = &QDF_IPA_WDI_SETUP_INFO_EP_CFG(tx);
|
|
|
}
|
|
|
|
|
@@ -635,10 +641,10 @@ QDF_STATUS ol_txrx_ipa_setup(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
|
|
|
|
|
|
/* RX PIPE */
|
|
|
if (is_smmu_enabled) {
|
|
|
- rx_smmu = &QDF_IPA_WDI_CONN_IN_PARAMS_RX_SMMU(&pipe_in);
|
|
|
+ rx_smmu = &QDF_IPA_WDI_CONN_IN_PARAMS_RX_SMMU(pipe_in);
|
|
|
rx_cfg = &QDF_IPA_WDI_SETUP_INFO_EP_CFG(rx_smmu);
|
|
|
} else {
|
|
|
- rx = &QDF_IPA_WDI_CONN_IN_PARAMS_RX(&pipe_in);
|
|
|
+ rx = &QDF_IPA_WDI_CONN_IN_PARAMS_RX(pipe_in);
|
|
|
rx_cfg = &QDF_IPA_WDI_SETUP_INFO_EP_CFG(rx);
|
|
|
}
|
|
|
|
|
@@ -658,15 +664,16 @@ QDF_STATUS ol_txrx_ipa_setup(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
|
|
|
else
|
|
|
ol_txrx_ipa_wdi_rx_params(ipa_res, rx, over_gsi);
|
|
|
|
|
|
- QDF_IPA_WDI_CONN_IN_PARAMS_NOTIFY(&pipe_in) = ipa_w2i_cb;
|
|
|
- QDF_IPA_WDI_CONN_IN_PARAMS_PRIV(&pipe_in) = ipa_priv;
|
|
|
+ QDF_IPA_WDI_CONN_IN_PARAMS_NOTIFY(pipe_in) = ipa_w2i_cb;
|
|
|
+ QDF_IPA_WDI_CONN_IN_PARAMS_PRIV(pipe_in) = ipa_priv;
|
|
|
|
|
|
/* Connect WDI IPA PIPE */
|
|
|
- ret = qdf_ipa_wdi_conn_pipes(&pipe_in, &pipe_out);
|
|
|
+ ret = qdf_ipa_wdi_conn_pipes(pipe_in, &pipe_out);
|
|
|
if (ret) {
|
|
|
QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_ERROR,
|
|
|
"%s: ipa_wdi_conn_pipes: IPA pipe setup failed: ret=%d",
|
|
|
__func__, ret);
|
|
|
+ qdf_mem_free(pipe_in);
|
|
|
return QDF_STATUS_E_FAILURE;
|
|
|
}
|
|
|
|
|
@@ -693,6 +700,7 @@ QDF_STATUS ol_txrx_ipa_setup(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
|
|
|
ipa_res->rx_ready_doorbell_dmaaddr = rx_rdy_db_dmaaddr;
|
|
|
}
|
|
|
|
|
|
+ qdf_mem_free(pipe_in);
|
|
|
return QDF_STATUS_SUCCESS;
|
|
|
}
|
|
|
|