mirror of
https://gitee.com/bianbu-linux/linux-6.6
synced 2025-07-24 01:54:03 -04:00
When PNVM is obtained from UEFI, there's an additional memory descriptor TLV that has to be handled. It is the same TLV that holds data in the reduced power tables. Also, in this TLV, the actual data is located after address and size, so add the corresponding offset. Signed-off-by: Gregory Greenman <gregory.greenman@intel.com> Link: https://lore.kernel.org/r/20230606103519.8c5f5ee8e30b.Id1893c9dec140b5ba4abe8a121c2e1a1d121d2d7@changeid Signed-off-by: Johannes Berg <johannes.berg@intel.com>
91 lines
2.3 KiB
C
91 lines
2.3 KiB
C
/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
|
|
/*
|
|
* Copyright(c) 2021-2023 Intel Corporation
|
|
*/
|
|
#ifndef __iwl_fw_uefi__
|
|
#define __iwl_fw_uefi__
|
|
|
|
#define IWL_UEFI_OEM_PNVM_NAME L"UefiCnvWlanOemSignedPnvm"
|
|
#define IWL_UEFI_REDUCED_POWER_NAME L"UefiCnvWlanReducedPower"
|
|
#define IWL_UEFI_SGOM_NAME L"UefiCnvWlanSarGeoOffsetMapping"
|
|
#define IWL_UEFI_STEP_NAME L"UefiCnvCommonSTEP"
|
|
|
|
#define IWL_SGOM_MAP_SIZE 339
|
|
|
|
struct pnvm_sku_package {
|
|
u8 rev;
|
|
u32 total_size;
|
|
u8 n_skus;
|
|
u32 reserved[2];
|
|
u8 data[];
|
|
} __packed;
|
|
|
|
struct uefi_cnv_wlan_sgom_data {
|
|
u8 revision;
|
|
u8 offset_map[IWL_SGOM_MAP_SIZE - 1];
|
|
} __packed;
|
|
|
|
struct uefi_cnv_common_step_data {
|
|
u8 revision;
|
|
u8 step_mode;
|
|
u8 cnvi_eq_channel;
|
|
u8 cnvr_eq_channel;
|
|
u8 radio1;
|
|
u8 radio2;
|
|
} __packed;
|
|
|
|
/*
|
|
* This is known to be broken on v4.19 and to work on v5.4. Until we
|
|
* figure out why this is the case and how to make it work, simply
|
|
* disable the feature in old kernels.
|
|
*/
|
|
#ifdef CONFIG_EFI
|
|
void *iwl_uefi_get_pnvm(struct iwl_trans *trans, size_t *len);
|
|
u8 *iwl_uefi_get_reduced_power(struct iwl_trans *trans, size_t *len);
|
|
int iwl_uefi_reduce_power_parse(struct iwl_trans *trans,
|
|
const u8 *data, size_t len,
|
|
struct iwl_pnvm_image *pnvm_data);
|
|
void iwl_uefi_get_step_table(struct iwl_trans *trans);
|
|
int iwl_uefi_handle_tlv_mem_desc(struct iwl_trans *trans, const u8 *data,
|
|
u32 tlv_len, struct iwl_pnvm_image *pnvm_data);
|
|
#else /* CONFIG_EFI */
|
|
static inline void *iwl_uefi_get_pnvm(struct iwl_trans *trans, size_t *len)
|
|
{
|
|
return ERR_PTR(-EOPNOTSUPP);
|
|
}
|
|
|
|
static inline int
|
|
iwl_uefi_reduce_power_parse(struct iwl_trans *trans,
|
|
const u8 *data, size_t len,
|
|
struct iwl_pnvm_image *pnvm_data)
|
|
{
|
|
return -EOPNOTSUPP;
|
|
}
|
|
|
|
static inline u8 *
|
|
iwl_uefi_get_reduced_power(struct iwl_trans *trans, size_t *len)
|
|
{
|
|
return ERR_PTR(-EOPNOTSUPP);
|
|
}
|
|
|
|
static inline void iwl_uefi_get_step_table(struct iwl_trans *trans)
|
|
{
|
|
}
|
|
|
|
static inline int
|
|
iwl_uefi_handle_tlv_mem_desc(struct iwl_trans *trans, const u8 *data,
|
|
u32 tlv_len, struct iwl_pnvm_image *pnvm_data)
|
|
{
|
|
return 0;
|
|
}
|
|
#endif /* CONFIG_EFI */
|
|
|
|
#if defined(CONFIG_EFI) && defined(CONFIG_ACPI)
|
|
void iwl_uefi_get_sgom_table(struct iwl_trans *trans, struct iwl_fw_runtime *fwrt);
|
|
#else
|
|
static inline
|
|
void iwl_uefi_get_sgom_table(struct iwl_trans *trans, struct iwl_fw_runtime *fwrt)
|
|
{
|
|
}
|
|
#endif
|
|
#endif /* __iwl_fw_uefi__ */
|