diff options
| author | Yuanyuan Liu <yuanliu@codeaurora.org> | 2016-05-10 14:19:10 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-05-23 11:46:38 -0700 |
| commit | 6a313dcb167bf96104db52d81deb32effa4bfbad (patch) | |
| tree | 7cde436fc098e237523b2957ef1ee48f111dba1b | |
| parent | 3e6172f91e412d50436402124a5687950510debe (diff) | |
qcacld-3.0: Get FW file names from PLD
Get FW file names from PLD.
CRs-Fixed: 1014363
Change-Id: I332cba76a3338eed27d37244bd9351ece99dcd97
| -rw-r--r-- | core/bmi/src/i_bmi.h | 18 | ||||
| -rw-r--r-- | core/bmi/src/ol_fw.c | 59 | ||||
| -rw-r--r-- | core/pld/inc/pld_common.h | 11 | ||||
| -rw-r--r-- | core/pld/src/pld_common.c | 28 | ||||
| -rw-r--r-- | core/pld/src/pld_pcie.c | 18 | ||||
| -rw-r--r-- | core/pld/src/pld_pcie.h | 2 |
6 files changed, 86 insertions, 50 deletions
diff --git a/core/bmi/src/i_bmi.h b/core/bmi/src/i_bmi.h index 778403c59abe..39be8fe3d3f3 100644 --- a/core/bmi/src/i_bmi.h +++ b/core/bmi/src/i_bmi.h @@ -37,24 +37,6 @@ #include "ol_fw.h" #include "pld_common.h" -#ifdef CONFIG_CNSS -#define QCA_FIRMWARE_FILE fw_files->image_file -#define QCA_UTF_FIRMWARE_FILE fw_files->utf_file -#define QCA_BOARD_DATA_FILE fw_files->board_data -#define QCA_UTF_BOARD_DATA_FILE fw_files->utf_board_data -#define QCA_OTP_FILE fw_files->otp_data -#define QCA_SETUP_FILE NULL -#define QCA_FIRMWARE_EPPING_FILE fw_files->epping_file -#else -#define QCA_FIRMWARE_FILE "athwlan.bin" -#define QCA_UTF_FIRMWARE_FILE "utf.bin" -#define QCA_BOARD_DATA_FILE "fakeboar.bin" -#define QCA_UTF_BOARD_DATA_FILE "fakeboar.bin" -#define QCA_OTP_FILE "otp.bin" -#define QCA_SETUP_FILE "athsetup.bin" -#define QCA_FIRMWARE_EPPING_FILE "epping.bin" -#endif - /* * Note that not all the register locations are accessible. * A list of accessible target registers are specified with diff --git a/core/bmi/src/ol_fw.c b/core/bmi/src/ol_fw.c index c8afd59b002e..e140f7f9d207 100644 --- a/core/bmi/src/ol_fw.c +++ b/core/bmi/src/ol_fw.c @@ -133,12 +133,6 @@ end: #define SIGNED_SPLIT_BINARY_VALUE false #endif -#ifdef CONFIG_CNSS -#define CONFIG_CNSS_DEFINED true -#else -#define CONFIG_CNSS_DEFINED false -#endif - static int __ol_transfer_bin_file(struct ol_context *ol_ctx, ATH_BIN_FILE file, uint32_t address, bool compressed) @@ -155,33 +149,31 @@ __ol_transfer_bin_file(struct ol_context *ol_ctx, ATH_BIN_FILE file, SIGN_HEADER_T *sign_header; struct hif_target_info *tgt_info = hif_get_target_info_handle(scn); uint32_t target_type = tgt_info->target_type; -#if defined(CONFIG_CNSS) - /* fw_files variable used in filename assignment macros */ struct bmi_info *bmi_ctx = GET_BMI_CONTEXT(ol_ctx); - struct cnss_fw_files *fw_files = &bmi_ctx->fw_files; -#endif qdf_device_t qdf_dev = ol_ctx->qdf_dev; + int ret = 0; switch (file) { default: BMI_ERR("%s: Unknown file type", __func__); - return -1; + ret = -1; + return ret; case ATH_OTP_FILE: - filename = QCA_OTP_FILE; + filename = bmi_ctx->fw_files.otp_data; if (SIGNED_SPLIT_BINARY_VALUE) bin_sign = true; break; case ATH_FIRMWARE_FILE: if (QDF_IS_EPPING_ENABLED(cds_get_conparam())) { - filename = QCA_FIRMWARE_EPPING_FILE; + filename = bmi_ctx->fw_files.epping_file; BMI_INFO("%s: Loading epping firmware file %s", __func__, filename); break; } #ifdef QCA_WIFI_FTM if (cds_get_conparam() == QDF_GLOBAL_FTM_MODE) { - filename = QCA_UTF_FIRMWARE_FILE; + filename = bmi_ctx->fw_files.utf_file; if (SIGNED_SPLIT_BINARY_VALUE) bin_sign = true; BMI_INFO("%s: Loading firmware file %s", @@ -189,7 +181,7 @@ __ol_transfer_bin_file(struct ol_context *ol_ctx, ATH_BIN_FILE file, break; } #endif - filename = QCA_FIRMWARE_FILE; + filename = bmi_ctx->fw_files.image_file; if (SIGNED_SPLIT_BINARY_VALUE) bin_sign = true; break; @@ -197,11 +189,9 @@ __ol_transfer_bin_file(struct ol_context *ol_ctx, ATH_BIN_FILE file, BMI_INFO("%s: no Patch file defined", __func__); return 0; case ATH_BOARD_DATA_FILE: - #ifdef QCA_WIFI_FTM if (cds_get_conparam() == QDF_GLOBAL_FTM_MODE) { - filename = QCA_UTF_BOARD_DATA_FILE; - + filename = bmi_ctx->fw_files.utf_board_data; if (SIGNED_SPLIT_BINARY_VALUE) bin_sign = true; @@ -210,26 +200,30 @@ __ol_transfer_bin_file(struct ol_context *ol_ctx, ATH_BIN_FILE file, break; } #endif /* QCA_WIFI_FTM */ - filename = QCA_BOARD_DATA_FILE; - + filename = bmi_ctx->fw_files.board_data; if (SIGNED_SPLIT_BINARY_VALUE) bin_sign = false; break; case ATH_SETUP_FILE: - if (CONFIG_CNSS_DEFINED || - cds_get_conparam() == QDF_GLOBAL_FTM_MODE || - QDF_IS_EPPING_ENABLED(cds_get_conparam())) { - BMI_INFO("%s: no Setup file defined", __func__); - return -1; - } else { - filename = QCA_SETUP_FILE; + if (cds_get_conparam() != QDF_GLOBAL_FTM_MODE && + !QDF_IS_EPPING_ENABLED(cds_get_conparam())) { + filename = bmi_ctx->fw_files.setup_file; + if (filename[0] == 0) { + BMI_INFO("%s: no Setup file defined", __func__); + ret = -1; + return ret; + } if (SIGNED_SPLIT_BINARY_VALUE) bin_sign = true; BMI_INFO("%s: Loading setup file %s", __func__, filename); + } else { + BMI_INFO("%s: no Setup file needed", __func__); + ret = -1; + return ret; } break; } @@ -240,7 +234,7 @@ __ol_transfer_bin_file(struct ol_context *ol_ctx, ATH_BIN_FILE file, if (file == ATH_OTP_FILE) return -ENOENT; -#if defined(QCA_WIFI_FTM) && defined(CONFIG_CNSS) +#if defined(QCA_WIFI_FTM) /* Try default board data file if FTM specific * board data file is not present. */ if (filename == bmi_ctx->fw_files.utf_board_data) { @@ -251,13 +245,16 @@ __ol_transfer_bin_file(struct ol_context *ol_ctx, ATH_BIN_FILE file, qdf_dev->dev) != 0) { BMI_ERR("%s: Failed to get %s", __func__, filename); - return -1; + ret = -1; + return ret; } } else { - return -1; + ret = -1; + return ret; } #else - return -1; + ret = -1; + return ret; #endif } diff --git a/core/pld/inc/pld_common.h b/core/pld/inc/pld_common.h index c5361781fb3e..86c111681911 100644 --- a/core/pld/inc/pld_common.h +++ b/core/pld/inc/pld_common.h @@ -32,6 +32,14 @@ #include <linux/interrupt.h> #include <linux/pm.h> +#define PLD_IMAGE_FILE "athwlan.bin" +#define PLD_UTF_FIRMWARE_FILE "utf.bin" +#define PLD_BOARD_DATA_FILE "fakeboar.bin" +#define PLD_OTP_FILE "otp.bin" +#define PLD_SETUP_FILE "athsetup.bin" +#define PLD_EPPING_FILE "epping.bin" +#define PLD_EVICTED_FILE "" + /** * enum pld_bus_type - bus type * @PLD_BUS_TYPE_NONE: invalid bus type, only return in error cases @@ -71,6 +79,7 @@ enum pld_bus_width_type { * @utf_board_data: WLAN FW UTF board data file * @epping_file: WLAN FW EPPING mode file * @evicted_data: WLAN FW evicted file + * @setup_file: WLAN FW setup file * * pld_fw_files is used to store WLAN FW file names */ @@ -82,6 +91,7 @@ struct pld_fw_files { char utf_board_data[PLD_MAX_FILE_NAME]; char epping_file[PLD_MAX_FILE_NAME]; char evicted_data[PLD_MAX_FILE_NAME]; + char setup_file[PLD_MAX_FILE_NAME]; }; /** @@ -312,6 +322,7 @@ int pld_wlan_enable(struct device *dev, struct pld_wlan_enable_cfg *config, enum pld_driver_mode mode, const char *host_version); int pld_wlan_disable(struct device *dev, enum pld_driver_mode mode); int pld_set_fw_debug_mode(struct device *dev, bool enablefwlog); +void pld_get_default_fw_files(struct pld_fw_files *pfw_files); int pld_get_fw_files_for_target(struct device *dev, struct pld_fw_files *pfw_files, u32 target_type, u32 target_version); diff --git a/core/pld/src/pld_common.c b/core/pld/src/pld_common.c index 4d356474381e..4ec6dbabcaa6 100644 --- a/core/pld/src/pld_common.c +++ b/core/pld/src/pld_common.c @@ -326,6 +326,34 @@ int pld_set_fw_debug_mode(struct device *dev, bool enablefwlog) } /** + * pld_get_default_fw_files() - Get default FW file names + * @pfw_files: buffer for FW file names + * + * Return default FW file names to the buffer. + * + * Return: void + */ +void pld_get_default_fw_files(struct pld_fw_files *pfw_files) +{ + memset(pfw_files, 0, sizeof(*pfw_files)); + + strlcpy(pfw_files->image_file, PLD_IMAGE_FILE, + PLD_MAX_FILE_NAME); + strlcpy(pfw_files->board_data, PLD_BOARD_DATA_FILE, + PLD_MAX_FILE_NAME); + strlcpy(pfw_files->otp_data, PLD_OTP_FILE, + PLD_MAX_FILE_NAME); + strlcpy(pfw_files->utf_file, PLD_UTF_FIRMWARE_FILE, + PLD_MAX_FILE_NAME); + strlcpy(pfw_files->utf_board_data, PLD_BOARD_DATA_FILE, + PLD_MAX_FILE_NAME); + strlcpy(pfw_files->epping_file, PLD_EPPING_FILE, + PLD_MAX_FILE_NAME); + strlcpy(pfw_files->setup_file, PLD_SETUP_FILE, + PLD_MAX_FILE_NAME); +} + +/** * pld_get_fw_files_for_target() - Get FW file names * @dev: device * @pfw_files: buffer for FW file names diff --git a/core/pld/src/pld_pcie.c b/core/pld/src/pld_pcie.c index ab3cbd1e52eb..2b918b8c0c31 100644 --- a/core/pld/src/pld_pcie.c +++ b/core/pld/src/pld_pcie.c @@ -463,12 +463,28 @@ int pld_pcie_get_fw_files_for_target(struct pld_fw_files *pfw_files, if (pfw_files == NULL) return -ENODEV; + memset(pfw_files, 0, sizeof(*pfw_files)); + ret = cnss_get_fw_files_for_target(&cnss_fw_files, target_type, target_version); if (0 != ret) return ret; - memcpy(pfw_files, &cnss_fw_files, sizeof(*pfw_files)); + strlcpy(pfw_files->image_file, cnss_fw_files.image_file, + PLD_MAX_FILE_NAME); + strlcpy(pfw_files->board_data, cnss_fw_files.board_data, + PLD_MAX_FILE_NAME); + strlcpy(pfw_files->otp_data, cnss_fw_files.otp_data, + PLD_MAX_FILE_NAME); + strlcpy(pfw_files->utf_file, cnss_fw_files.utf_file, + PLD_MAX_FILE_NAME); + strlcpy(pfw_files->utf_board_data, cnss_fw_files.utf_board_data, + PLD_MAX_FILE_NAME); + strlcpy(pfw_files->epping_file, cnss_fw_files.epping_file, + PLD_MAX_FILE_NAME); + strlcpy(pfw_files->evicted_data, cnss_fw_files.evicted_data, + PLD_MAX_FILE_NAME); + return 0; } diff --git a/core/pld/src/pld_pcie.h b/core/pld/src/pld_pcie.h index e4c6ccb37e26..63d07422449a 100644 --- a/core/pld/src/pld_pcie.h +++ b/core/pld/src/pld_pcie.h @@ -96,10 +96,12 @@ static inline int cnss_wlan_pm_control(bool vote) #endif #ifndef CONFIG_CNSS + static inline int pld_pcie_get_fw_files_for_target(struct pld_fw_files *pfw_files, u32 target_type, u32 target_version) { + pld_get_default_fw_files(pfw_files); return 0; } static inline int |
