iwlwifi: parse phy integration string from FW TLV
authorDror Moshe <drorx.moshe@intel.com>
Sun, 17 Jan 2021 14:52:28 +0000 (16:52 +0200)
committerLuca Coelho <luciano.coelho@intel.com>
Fri, 5 Feb 2021 09:55:17 +0000 (11:55 +0200)
Parse phy integration string from FW TLV.

Signed-off-by: Dror Moshe <drorx.moshe@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Link: https://lore.kernel.org/r/iwlwifi.20210117164916.0c790e930484.I23ef2cb9c871e6adc4aab6be378f3811cb531155@changeid
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
drivers/net/wireless/intel/iwlwifi/fw/file.h
drivers/net/wireless/intel/iwlwifi/fw/img.h
drivers/net/wireless/intel/iwlwifi/iwl-drv.c

index 597bc88479ba32c89390c940ac224a999146b2f7..7cd9c0bf5ba24cd2f0d39341cbcc3244828762c3 100644 (file)
@@ -93,6 +93,7 @@ enum iwl_ucode_tlv_type {
        IWL_UCODE_TLV_FW_RECOVERY_INFO  = 57,
        IWL_UCODE_TLV_HW_TYPE                   = 58,
        IWL_UCODE_TLV_FW_FSEQ_VERSION           = 60,
+       IWL_UCODE_TLV_PHY_INTEGRATION_VERSION   = 61,
 
        IWL_UCODE_TLV_PNVM_VERSION              = 62,
        IWL_UCODE_TLV_PNVM_SKU                  = 64,
index c93d247621ec5c161e15c2d0b74035bb9342ac2e..1dee4714e5056133b9731c729562605c951463b9 100644 (file)
@@ -219,6 +219,9 @@ struct iwl_fw {
        u8 human_readable[FW_VER_HUMAN_READABLE_SZ];
 
        struct iwl_fw_dbg dbg;
+
+       u8 *phy_integration_ver;
+       u32 phy_integration_ver_len;
 };
 
 static inline const char *get_fw_dbg_mode_string(int mode)
index d44bc61c34f58d722bccccbe46294973748b247c..263c3c0bb8ed7b9967dcae29b450e354bb0d9bfb 100644 (file)
@@ -127,6 +127,7 @@ static void iwl_dealloc_ucode(struct iwl_drv *drv)
        kfree(drv->fw.dbg.mem_tlv);
        kfree(drv->fw.iml);
        kfree(drv->fw.ucode_capa.cmd_versions);
+       kfree(drv->fw.phy_integration_ver);
 
        for (i = 0; i < IWL_UCODE_TYPE_MAX; i++)
                iwl_free_fw_img(drv, drv->fw.img + i);
@@ -1143,6 +1144,19 @@ static int iwl_parse_tlv_firmware(struct iwl_drv *drv,
                        capa->n_cmd_versions =
                                tlv_len / sizeof(struct iwl_fw_cmd_version);
                        break;
+               case IWL_UCODE_TLV_PHY_INTEGRATION_VERSION:
+                       if (drv->fw.phy_integration_ver) {
+                               IWL_ERR(drv,
+                                       "phy integration str ignored, already exists\n");
+                               break;
+                       }
+
+                       drv->fw.phy_integration_ver =
+                               kmemdup(tlv_data, tlv_len, GFP_KERNEL);
+                       if (!drv->fw.phy_integration_ver)
+                               return -ENOMEM;
+                       drv->fw.phy_integration_ver_len = tlv_len;
+                       break;
                default:
                        IWL_DEBUG_INFO(drv, "unknown TLV: %d\n", tlv_type);
                        break;