From f24399cc788dd39e9f754922f3382d4d67914513 Mon Sep 17 00:00:00 2001 From: Jayachandran Sreekumaran Date: Wed, 15 May 2019 13:45:31 +0530 Subject: [PATCH] qcacmn: Enable mission mode through qmi signalling Enable mission mode in fw through qmi signalling. Change-Id: I539d7b8bb1f38b2cb526704c225bf4535fcc8543 CRs-Fixed: 2504541 --- hif/src/sdio/hif_sdio.c | 9 +++++++++ hif/src/sdio/transfer/adma.c | 24 ++++++++++++++++++++++++ hif/src/sdio/transfer/transfer.h | 8 ++++++++ 3 files changed, 41 insertions(+) diff --git a/hif/src/sdio/hif_sdio.c b/hif/src/sdio/hif_sdio.c index 39aaf8e739..5636c4702a 100644 --- a/hif/src/sdio/hif_sdio.c +++ b/hif/src/sdio/hif_sdio.c @@ -37,6 +37,7 @@ #include "hif_sdio_dev.h" #include "if_sdio.h" #include "regtable_sdio.h" +#include #define ATH_MODULE_NAME hif_sdio @@ -53,8 +54,16 @@ uint32_t hif_start(struct hif_opaque_softc *hif_ctx) struct hif_sdio_softc *scn = HIF_GET_SDIO_SOFTC(hif_ctx); struct hif_sdio_dev *hif_device = scn->hif_handle; struct hif_sdio_device *htc_sdio_device = hif_dev_from_hif(hif_device); + struct hif_softc *hif_sc = HIF_GET_SOFTC(hif_ctx); + int ret = 0; HIF_ENTER(); + ret = hif_sdio_bus_configure(hif_sc); + if (ret) { + HIF_ERROR("%s: hif_sdio_bus_configure failed", __func__); + return QDF_STATUS_E_FAILURE; + } + hif_dev_enable_interrupts(htc_sdio_device); HIF_EXIT(); return QDF_STATUS_SUCCESS; diff --git a/hif/src/sdio/transfer/adma.c b/hif/src/sdio/transfer/adma.c index 3526ee95c2..9d8d2c1985 100644 --- a/hif/src/sdio/transfer/adma.c +++ b/hif/src/sdio/transfer/adma.c @@ -144,6 +144,30 @@ QDF_STATUS hif_dev_map_service_to_pipe(struct hif_sdio_dev *pdev, uint16_t svc, return status; } +/** + * hif_bus_configure() - configure the bus + * @hif_sc: pointer to the hif context. + * + * return: 0 for success. nonzero for failure. + */ +int hif_sdio_bus_configure(struct hif_softc *hif_sc) +{ + struct pld_wlan_enable_cfg cfg; + enum pld_driver_mode mode; + uint32_t con_mode = hif_get_conparam(hif_sc); + + if (con_mode == QDF_GLOBAL_FTM_MODE) + mode = PLD_FTM; + else if (con_mode == QDF_GLOBAL_COLDBOOT_CALIB_MODE) + mode = PLD_COLDBOOT_CALIBRATION; + else if (QDF_IS_EPPING_ENABLED(con_mode)) + mode = PLD_EPPING; + else + mode = PLD_MISSION; + + return pld_wlan_enable(hif_sc->qdf_dev->dev, &cfg, mode); +} + /** hif_dev_setup_device() - Setup device specific stuff here required for hif * @pdev : HIF layer object * diff --git a/hif/src/sdio/transfer/transfer.h b/hif/src/sdio/transfer/transfer.h index 73d6b53692..31950bfeb1 100644 --- a/hif/src/sdio/transfer/transfer.h +++ b/hif/src/sdio/transfer/transfer.h @@ -98,12 +98,20 @@ static inline uint32_t hif_get_send_buffer_flags(struct hif_sdio_device *pdev) return 0; } + +static inline int hif_sdio_bus_configure(struct hif_softc *hif_sc) +{ + return 0; +} + #elif defined(CONFIG_SDIO_TRANSFER_ADMA) static inline uint32_t hif_get_send_buffer_flags(struct hif_sdio_device *pdev) { /* ADAM-TODO */ return (uint32_t)HIF_WR_ASYNC_BLOCK_FIX; } + +int hif_sdio_bus_configure(struct hif_softc *hif_sc); #endif #endif /* __TRANSFER_H__ */