ath11k: don't use defines for hw specific firmware directories
authorKalle Valo <kvalo@codeaurora.org>
Tue, 16 Jun 2020 14:00:50 +0000 (17:00 +0300)
committerKalle Valo <kvalo@codeaurora.org>
Tue, 23 Jun 2020 07:51:51 +0000 (10:51 +0300)
The downside of using defines in struct ath11k_hw_params.fw.dir is that it's
easy to get it wrong as the full path is not visible. So drop the use of
defines and instead create the patch runtime using a static inline function
ath11k_core_create_firmware_path(). Hopefully this reduces the chances of using
incorrect firmware path.

No functional changes. Compile tested only.

Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/1592316055-24958-8-git-send-email-kvalo@codeaurora.org
drivers/net/wireless/ath/ath11k/core.c
drivers/net/wireless/ath/ath11k/core.h
drivers/net/wireless/ath/ath11k/hw.h
drivers/net/wireless/ath/ath11k/qmi.c

index 7e29977..de5b1d2 100644 (file)
@@ -22,7 +22,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
                .hw_rev = ATH11K_HW_IPQ8074,
                .name = "ipq8074 hw2.0",
                .fw = {
-                       .dir = IPQ8074_FW_DIR,
+                       .dir = "IPQ8074/hw2.0",
                        .board_size = IPQ8074_MAX_BOARD_DATA_SZ,
                        .cal_size =  IPQ8074_MAX_CAL_DATA_SZ,
                },
@@ -49,27 +49,23 @@ static int ath11k_core_create_board_name(struct ath11k_base *ab, char *name,
 }
 
 const struct firmware *ath11k_core_firmware_request(struct ath11k_base *ab,
-                                                   const char *dir,
                                                    const char *file)
 {
-       char filename[100];
        const struct firmware *fw;
+       char path[100];
        int ret;
 
        if (file == NULL)
                return ERR_PTR(-ENOENT);
 
-       if (dir == NULL)
-               dir = ".";
+       ath11k_core_create_firmware_path(ab, file, path, sizeof(path));
 
-       snprintf(filename, sizeof(filename), "%s/%s", dir, file);
-
-       ret = firmware_request_nowarn(&fw, filename, ab->dev);
+       ret = firmware_request_nowarn(&fw, path, ab->dev);
        if (ret)
                return ERR_PTR(ret);
 
        ath11k_dbg(ab, ATH11K_DBG_BOOT, "boot firmware request %s size %zu\n",
-                  filename, fw->size);
+                  path, fw->size);
 
        return fw;
 }
@@ -175,9 +171,8 @@ static int ath11k_core_fetch_board_data_api_n(struct ath11k_base *ab,
        int ret, ie_id;
 
        if (!bd->fw)
-               bd->fw = ath11k_core_firmware_request(ab,
-                                                     ab->hw_params.fw.dir,
-                                                     filename);
+               bd->fw = ath11k_core_firmware_request(ab, filename);
+
        if (IS_ERR(bd->fw))
                return PTR_ERR(bd->fw);
 
@@ -267,9 +262,7 @@ err:
 static int ath11k_core_fetch_board_data_api_1(struct ath11k_base *ab,
                                              struct ath11k_board_data *bd)
 {
-       bd->fw = ath11k_core_firmware_request(ab,
-                                             ab->hw_params.fw.dir,
-                                             ATH11K_DEFAULT_BOARD_FILE);
+       bd->fw = ath11k_core_firmware_request(ab, ATH11K_DEFAULT_BOARD_FILE);
        if (IS_ERR(bd->fw))
                return PTR_ERR(bd->fw);
 
index be1339a..b6ccd9f 100644 (file)
@@ -862,8 +862,7 @@ void ath11k_core_free_bdf(struct ath11k_base *ab, struct ath11k_board_data *bd);
 void ath11k_core_halt(struct ath11k *ar);
 
 const struct firmware *ath11k_core_firmware_request(struct ath11k_base *ab,
-                                                   const char *dir,
-                                                   const char *file);
+                                                   const char *filename);
 
 static inline const char *ath11k_scan_state_str(enum ath11k_scan_state state)
 {
@@ -897,4 +896,12 @@ static inline struct ath11k_vif *ath11k_vif_to_arvif(struct ieee80211_vif *vif)
        return (struct ath11k_vif *)vif->drv_priv;
 }
 
+static inline void ath11k_core_create_firmware_path(struct ath11k_base *ab,
+                                                   const char *filename,
+                                                   void *buf, size_t buf_len)
+{
+       snprintf(buf, buf_len, "%s/%s/%s", ATH11K_FW_DIR,
+                ab->hw_params.fw.dir, filename);
+}
+
 #endif /* _CORE_H_ */
index 78518e3..828c8c0 100644 (file)
@@ -69,7 +69,6 @@
 #define ATH11K_FW_DIR                  "ath11k"
 
 /* IPQ8074 definitions */
-#define IPQ8074_FW_DIR                 ATH11K_FW_DIR "/IPQ8074/hw2.0"
 #define IPQ8074_MAX_BOARD_DATA_SZ      (256 * 1024)
 #define IPQ8074_MAX_CAL_DATA_SZ                IPQ8074_MAX_BOARD_DATA_SZ
 
index 0cd3fb8..d9ffdf8 100644 (file)
@@ -1810,7 +1810,7 @@ ath11k_qmi_prepare_bdf_download(struct ath11k_base *ab, int type,
                ath11k_core_free_bdf(ab, &bd);
                break;
        case ATH11K_QMI_FILE_TYPE_CALDATA:
-               fw_entry = ath11k_core_firmware_request(ab, ab->hw_params.fw.dir,
+               fw_entry = ath11k_core_firmware_request(ab,
                                                        ATH11K_QMI_DEFAULT_CAL_FILE_NAME);
                if (ret) {
                        ath11k_warn(ab, "failed to load %s: %d\n",