Commit 80c2b651 authored by Johannes Berg's avatar Johannes Berg
Browse files

wifi: iwlwifi: fw: read STEP table from correct UEFI var



This variable exists for the "common" (WiFi/BT) GUID, not the
WiFi-only GUID. Fix that by passing the GUID to the function.
A short-cut for the wifi-only version remains so not all code
must be updated.

However, rename the GUID defines to be clearer.

Fixes: 09b4c35d ("wifi: iwlwifi: mvm: Support STEP equalizer settings from BIOS.")
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
Reviewed-by: default avatarDaniel Gabay <daniel.gabay@intel.com>
Signed-off-by: default avatarMiri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://patch.msgid.link/20241227095718.89a5ad921b6d.Idae95a70ff69d2ba1b610e8eced826961ce7de98@changeid


Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 67256c9a
Loading
Loading
Loading
Loading
+30 −14
Original line number Diff line number Diff line
@@ -13,9 +13,12 @@
#include <linux/efi.h>
#include "fw/runtime.h"

#define IWL_EFI_VAR_GUID EFI_GUID(0x92daaf2f, 0xc02b, 0x455b,	\
#define IWL_EFI_WIFI_GUID	EFI_GUID(0x92daaf2f, 0xc02b, 0x455b,	\
					 0xb2, 0xec, 0xf5, 0xa3,	\
					 0x59, 0x4f, 0x4a, 0xea)
#define IWL_EFI_WIFI_BT_GUID	EFI_GUID(0xe65d8884, 0xd4af, 0x4b20,	\
					 0x8d, 0x03, 0x77, 0x2e,	\
					 0xcc, 0x3d, 0xa5, 0x31)

struct iwl_uefi_pnvm_mem_desc {
	__le32 addr;
@@ -61,7 +64,7 @@ void *iwl_uefi_get_pnvm(struct iwl_trans *trans, size_t *len)

	*len = 0;

	data = iwl_uefi_get_variable(IWL_UEFI_OEM_PNVM_NAME, &IWL_EFI_VAR_GUID,
	data = iwl_uefi_get_variable(IWL_UEFI_OEM_PNVM_NAME, &IWL_EFI_WIFI_GUID,
				     &package_size);
	if (IS_ERR(data)) {
		IWL_DEBUG_FW(trans,
@@ -76,8 +79,9 @@ void *iwl_uefi_get_pnvm(struct iwl_trans *trans, size_t *len)
	return data;
}

static
void *iwl_uefi_get_verified_variable(struct iwl_trans *trans,
static void *
iwl_uefi_get_verified_variable_guid(struct iwl_trans *trans,
				    efi_guid_t *guid,
				    efi_char16_t *uefi_var_name,
				    char *var_name,
				    unsigned int expected_size,
@@ -86,8 +90,7 @@ void *iwl_uefi_get_verified_variable(struct iwl_trans *trans,
	void *var;
	unsigned long var_size;

	var = iwl_uefi_get_variable(uefi_var_name, &IWL_EFI_VAR_GUID,
				    &var_size);
	var = iwl_uefi_get_variable(uefi_var_name, guid, &var_size);

	if (IS_ERR(var)) {
		IWL_DEBUG_RADIO(trans,
@@ -112,6 +115,18 @@ void *iwl_uefi_get_verified_variable(struct iwl_trans *trans,
	return var;
}

static void *
iwl_uefi_get_verified_variable(struct iwl_trans *trans,
			       efi_char16_t *uefi_var_name,
			       char *var_name,
			       unsigned int expected_size,
			       unsigned long *size)
{
	return iwl_uefi_get_verified_variable_guid(trans, &IWL_EFI_WIFI_GUID,
						   uefi_var_name, var_name,
						   expected_size, size);
}

int iwl_uefi_handle_tlv_mem_desc(struct iwl_trans *trans, const u8 *data,
				 u32 tlv_len, struct iwl_pnvm_image *pnvm_data)
{
@@ -311,7 +326,8 @@ void iwl_uefi_get_step_table(struct iwl_trans *trans)
	if (trans->trans_cfg->device_family < IWL_DEVICE_FAMILY_AX210)
		return;

	data = iwl_uefi_get_verified_variable(trans, IWL_UEFI_STEP_NAME,
	data = iwl_uefi_get_verified_variable_guid(trans, &IWL_EFI_WIFI_BT_GUID,
						   IWL_UEFI_STEP_NAME,
						   "STEP", sizeof(*data), NULL);
	if (IS_ERR(data))
		return;