summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuanyuan Liu <yuanliu@codeaurora.org>2016-05-10 14:19:10 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2016-05-23 11:46:38 -0700
commit6a313dcb167bf96104db52d81deb32effa4bfbad (patch)
tree7cde436fc098e237523b2957ef1ee48f111dba1b
parent3e6172f91e412d50436402124a5687950510debe (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.h18
-rw-r--r--core/bmi/src/ol_fw.c59
-rw-r--r--core/pld/inc/pld_common.h11
-rw-r--r--core/pld/src/pld_common.c28
-rw-r--r--core/pld/src/pld_pcie.c18
-rw-r--r--core/pld/src/pld_pcie.h2
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