Commit 708d8c53 authored by Johannes Berg's avatar Johannes Berg Committed by Luca Coelho
Browse files

iwlwifi: mvm: parse firmware alive message version 6



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: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
Link: https://lore.kernel.org/r/iwlwifi.20211204083238.f856cb190a4e.I77e3ff5a92b1bcc3e81c1344b046dade0a8b6a24@changeid


Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
parent af08571d
Loading
Loading
Loading
Loading
+16 −1
Original line number Diff line number Diff line
/* 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
+1 −1
Original line number Diff line number Diff line
@@ -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,

+4 −2
Original line number Diff line number Diff line
@@ -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))