OSDN Git Service

iwlwifi: mvm: parse firmware alive message version 6
authorJohannes Berg <johannes.berg@intel.com>
Sat, 4 Dec 2021 06:35:50 +0000 (08:35 +0200)
committerLuca Coelho <luciano.coelho@intel.com>
Tue, 7 Dec 2021 18:06:34 +0000 (20:06 +0200)
There's a new version with some addition, we'll need to
do something with the additional data later, but for now
just parse it so we don't fail with the newer firmware.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Link: https://lore.kernel.org/r/iwlwifi.20211204083238.f856cb190a4e.I77e3ff5a92b1bcc3e81c1344b046dade0a8b6a24@changeid
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
drivers/net/wireless/intel/iwlwifi/fw/api/alive.h
drivers/net/wireless/intel/iwlwifi/fw/api/commands.h
drivers/net/wireless/intel/iwlwifi/mvm/fw.c

index c840a97..7dd984f 100644 (file)
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
 /*
- * Copyright (C) 2012-2014, 2018, 2020 Intel Corporation
+ * Copyright (C) 2012-2014, 2018, 2020-2021 Intel Corporation
  * Copyright (C) 2013-2015 Intel Mobile Communications GmbH
  * Copyright (C) 2016-2017 Intel Deutschland GmbH
  */
@@ -97,6 +97,21 @@ struct iwl_alive_ntf_v5 {
        struct iwl_sku_id sku_id;
 } __packed; /* UCODE_ALIVE_NTFY_API_S_VER_5 */
 
+struct iwl_imr_alive_info {
+       __le64 base_addr;
+       __le32 size;
+       __le32 enabled;
+} __packed; /* IMR_ALIVE_INFO_API_S_VER_1 */
+
+struct iwl_alive_ntf_v6 {
+       __le16 status;
+       __le16 flags;
+       struct iwl_lmac_alive lmac_data[2];
+       struct iwl_umac_alive umac_data;
+       struct iwl_sku_id sku_id;
+       struct iwl_imr_alive_info imr;
+} __packed; /* UCODE_ALIVE_NTFY_API_S_VER_6 */
+
 /**
  * enum iwl_extended_cfg_flag - commands driver may send before
  *     finishing init flow
index ee6b584..8a90acb 100644 (file)
@@ -51,7 +51,7 @@ enum iwl_legacy_cmds {
         * @UCODE_ALIVE_NTFY:
         * Alive data from the firmware, as described in
         * &struct iwl_alive_ntf_v3 or &struct iwl_alive_ntf_v4 or
-        * &struct iwl_alive_ntf_v5.
+        * &struct iwl_alive_ntf_v5 or &struct iwl_alive_ntf_v6.
         */
        UCODE_ALIVE_NTFY = 0x1,
 
index 6ce78c0..7608b1e 100644 (file)
@@ -123,13 +123,15 @@ static bool iwl_alive_fn(struct iwl_notif_wait_data *notif_wait,
        struct iwl_lmac_alive *lmac2 = NULL;
        u16 status;
        u32 lmac_error_event_table, umac_error_table;
+       u32 version = iwl_fw_lookup_notif_ver(mvm->fw, LEGACY_GROUP,
+                                             UCODE_ALIVE_NTFY, 0);
 
        /*
         * For v5 and above, we can check the version, for older
         * versions we need to check the size.
         */
-       if (iwl_fw_lookup_notif_ver(mvm->fw, LEGACY_GROUP,
-                                   UCODE_ALIVE_NTFY, 0) == 5) {
+       if (version == 5 || version == 6) {
+               /* v5 and v6 are compatible (only IMR addition) */
                struct iwl_alive_ntf_v5 *palive;
 
                if (pkt_len < sizeof(*palive))