ath10k: move firmware_swap_code_seg_info to ath10k_fw_file
authorTamizh chelvam <c_traja@qti.qualcomm.com>
Fri, 19 Aug 2016 10:37:39 +0000 (13:37 +0300)
committerKalle Valo <kvalo@qca.qualcomm.com>
Wed, 31 Aug 2016 07:18:37 +0000 (10:18 +0300)
Preparation to make use of firmware_swap_code_seg_info for UTF binary.

Signed-off-by: Tamizh chelvam <c_traja@qti.qualcomm.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
drivers/net/wireless/ath/ath10k/core.c
drivers/net/wireless/ath/ath10k/core.h
drivers/net/wireless/ath/ath10k/swap.c
drivers/net/wireless/ath/ath10k/swap.h

index e88982921aa3137752b130a512576b5515a735d2..f82877d806a5def74d352c4c99e901dcab1c82d5 100644 (file)
@@ -745,7 +745,7 @@ static int ath10k_download_fw(struct ath10k *ar)
        data = ar->running_fw->fw_file.firmware_data;
        data_len = ar->running_fw->fw_file.firmware_len;
 
-       ret = ath10k_swap_code_seg_configure(ar);
+       ret = ath10k_swap_code_seg_configure(ar, &ar->running_fw->fw_file);
        if (ret) {
                ath10k_err(ar, "failed to configure fw code swap: %d\n",
                           ret);
@@ -787,7 +787,7 @@ static void ath10k_core_free_firmware_files(struct ath10k *ar)
        if (!IS_ERR(ar->pre_cal_file))
                release_firmware(ar->pre_cal_file);
 
-       ath10k_swap_code_seg_release(ar);
+       ath10k_swap_code_seg_release(ar, &ar->normal_mode_fw.fw_file);
 
        ar->normal_mode_fw.fw_file.otp_data = NULL;
        ar->normal_mode_fw.fw_file.otp_len = 0;
@@ -2031,7 +2031,7 @@ static int ath10k_core_probe_fw(struct ath10k *ar)
                goto err_free_firmware_files;
        }
 
-       ret = ath10k_swap_code_seg_init(ar);
+       ret = ath10k_swap_code_seg_init(ar, &ar->normal_mode_fw.fw_file);
        if (ret) {
                ath10k_err(ar, "failed to initialize code swap segment: %d\n",
                           ret);
index 30ae5bf81611a4df1f2bc7a7ffab6ace44364ba0..cc6e66fdf49811faf5d2214f27a95974c269ff5e 100644 (file)
@@ -663,6 +663,15 @@ struct ath10k_fw_file {
 
        const void *codeswap_data;
        size_t codeswap_len;
+
+       /* The original idea of struct ath10k_fw_file was that it only
+        * contains struct firmware and pointers to various parts (actual
+        * firmware binary, otp, metadata etc) of the file. This seg_info
+        * is actually created separate but as this is used similarly as
+        * the other firmware components it's more convenient to have it
+        * here.
+        */
+       struct ath10k_swap_code_seg_info *firmware_swap_code_seg_info;
 };
 
 struct ath10k_fw_components {
@@ -774,10 +783,6 @@ struct ath10k {
        const struct firmware *pre_cal_file;
        const struct firmware *cal_file;
 
-       struct {
-               struct ath10k_swap_code_seg_info *firmware_swap_code_seg_info;
-       } swap;
-
        struct {
                u32 vendor;
                u32 device;
index 0c5f5863dac878b38ba5467b75762bf59e6b9d72..adf4592374b43ec5b9d0dbf2e555defd6eb3566f 100644 (file)
@@ -134,17 +134,18 @@ ath10k_swap_code_seg_alloc(struct ath10k *ar, size_t swap_bin_len)
        return seg_info;
 }
 
-int ath10k_swap_code_seg_configure(struct ath10k *ar)
+int ath10k_swap_code_seg_configure(struct ath10k *ar,
+                                  const struct ath10k_fw_file *fw_file)
 {
        int ret;
        struct ath10k_swap_code_seg_info *seg_info = NULL;
 
-       if (!ar->swap.firmware_swap_code_seg_info)
+       if (!fw_file->firmware_swap_code_seg_info)
                return 0;
 
        ath10k_dbg(ar, ATH10K_DBG_BOOT, "boot found firmware code swap binary\n");
 
-       seg_info = ar->swap.firmware_swap_code_seg_info;
+       seg_info = fw_file->firmware_swap_code_seg_info;
 
        ret = ath10k_bmi_write_memory(ar, seg_info->target_addr,
                                      &seg_info->seg_hw_info,
@@ -158,28 +159,29 @@ int ath10k_swap_code_seg_configure(struct ath10k *ar)
        return 0;
 }
 
-void ath10k_swap_code_seg_release(struct ath10k *ar)
+void ath10k_swap_code_seg_release(struct ath10k *ar,
+                                 struct ath10k_fw_file *fw_file)
 {
-       ath10k_swap_code_seg_free(ar, ar->swap.firmware_swap_code_seg_info);
+       ath10k_swap_code_seg_free(ar, fw_file->firmware_swap_code_seg_info);
 
        /* FIXME: these two assignments look to bein wrong place! Shouldn't
         * they be in ath10k_core_free_firmware_files() like the rest?
         */
-       ar->normal_mode_fw.fw_file.codeswap_data = NULL;
-       ar->normal_mode_fw.fw_file.codeswap_len = 0;
+       fw_file->codeswap_data = NULL;
+       fw_file->codeswap_len = 0;
 
-       ar->swap.firmware_swap_code_seg_info = NULL;
+       fw_file->firmware_swap_code_seg_info = NULL;
 }
 
-int ath10k_swap_code_seg_init(struct ath10k *ar)
+int ath10k_swap_code_seg_init(struct ath10k *ar, struct ath10k_fw_file *fw_file)
 {
        int ret;
        struct ath10k_swap_code_seg_info *seg_info;
        const void *codeswap_data;
        size_t codeswap_len;
 
-       codeswap_data = ar->normal_mode_fw.fw_file.codeswap_data;
-       codeswap_len = ar->normal_mode_fw.fw_file.codeswap_len;
+       codeswap_data = fw_file->codeswap_data;
+       codeswap_len = fw_file->codeswap_len;
 
        if (!codeswap_len || !codeswap_data)
                return 0;
@@ -200,7 +202,7 @@ int ath10k_swap_code_seg_init(struct ath10k *ar)
                return ret;
        }
 
-       ar->swap.firmware_swap_code_seg_info = seg_info;
+       fw_file->firmware_swap_code_seg_info = seg_info;
 
        return 0;
 }
index 36991c7b07a04f08339ce9eaa19e4a8ca8940fc1..f5dc0476493ed9b3a599ac104da797356b5e816f 100644 (file)
@@ -23,6 +23,8 @@
 /* Currently only one swap segment is supported */
 #define ATH10K_SWAP_CODE_SEG_NUM_SUPPORTED     1
 
+struct ath10k_fw_file;
+
 struct ath10k_swap_code_seg_tlv {
        __le32 address;
        __le32 length;
@@ -58,8 +60,11 @@ struct ath10k_swap_code_seg_info {
        dma_addr_t paddr[ATH10K_SWAP_CODE_SEG_NUM_SUPPORTED];
 };
 
-int ath10k_swap_code_seg_configure(struct ath10k *ar);
-void ath10k_swap_code_seg_release(struct ath10k *ar);
-int ath10k_swap_code_seg_init(struct ath10k *ar);
+int ath10k_swap_code_seg_configure(struct ath10k *ar,
+                                  const struct ath10k_fw_file *fw_file);
+void ath10k_swap_code_seg_release(struct ath10k *ar,
+                                 struct ath10k_fw_file *fw_file);
+int ath10k_swap_code_seg_init(struct ath10k *ar,
+                             struct ath10k_fw_file *fw_file);
 
 #endif