xref: /freebsd/sys/contrib/dev/iwlwifi/fw/uefi.h (revision 9af1bba4)
1bfcc09ddSBjoern A. Zeeb /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
2bfcc09ddSBjoern A. Zeeb /*
39af1bba4SBjoern A. Zeeb  * Copyright(c) 2021-2023 Intel Corporation
4bfcc09ddSBjoern A. Zeeb  */
5bfcc09ddSBjoern A. Zeeb #ifndef __iwl_fw_uefi__
6bfcc09ddSBjoern A. Zeeb #define __iwl_fw_uefi__
7bfcc09ddSBjoern A. Zeeb 
8bfcc09ddSBjoern A. Zeeb #define IWL_UEFI_OEM_PNVM_NAME		L"UefiCnvWlanOemSignedPnvm"
9bfcc09ddSBjoern A. Zeeb #define IWL_UEFI_REDUCED_POWER_NAME	L"UefiCnvWlanReducedPower"
10d9836fb4SBjoern A. Zeeb #define IWL_UEFI_SGOM_NAME		L"UefiCnvWlanSarGeoOffsetMapping"
119af1bba4SBjoern A. Zeeb #define IWL_UEFI_STEP_NAME		L"UefiCnvCommonSTEP"
12bfcc09ddSBjoern A. Zeeb 
139af1bba4SBjoern A. Zeeb #define IWL_SGOM_MAP_SIZE		339
14bfcc09ddSBjoern A. Zeeb 
15bfcc09ddSBjoern A. Zeeb struct pnvm_sku_package {
16bfcc09ddSBjoern A. Zeeb 	u8 rev;
17bfcc09ddSBjoern A. Zeeb 	u32 total_size;
18bfcc09ddSBjoern A. Zeeb 	u8 n_skus;
19bfcc09ddSBjoern A. Zeeb 	u32 reserved[2];
20bfcc09ddSBjoern A. Zeeb 	u8 data[];
21bfcc09ddSBjoern A. Zeeb } __packed;
22bfcc09ddSBjoern A. Zeeb 
23d9836fb4SBjoern A. Zeeb struct uefi_cnv_wlan_sgom_data {
24d9836fb4SBjoern A. Zeeb 	u8 revision;
259af1bba4SBjoern A. Zeeb 	u8 offset_map[IWL_SGOM_MAP_SIZE - 1];
269af1bba4SBjoern A. Zeeb } __packed;
279af1bba4SBjoern A. Zeeb 
289af1bba4SBjoern A. Zeeb struct uefi_cnv_common_step_data {
299af1bba4SBjoern A. Zeeb 	u8 revision;
309af1bba4SBjoern A. Zeeb 	u8 step_mode;
319af1bba4SBjoern A. Zeeb 	u8 cnvi_eq_channel;
329af1bba4SBjoern A. Zeeb 	u8 cnvr_eq_channel;
339af1bba4SBjoern A. Zeeb 	u8 radio1;
349af1bba4SBjoern A. Zeeb 	u8 radio2;
35d9836fb4SBjoern A. Zeeb } __packed;
36d9836fb4SBjoern A. Zeeb 
37d9836fb4SBjoern A. Zeeb /*
38d9836fb4SBjoern A. Zeeb  * This is known to be broken on v4.19 and to work on v5.4.  Until we
39d9836fb4SBjoern A. Zeeb  * figure out why this is the case and how to make it work, simply
40d9836fb4SBjoern A. Zeeb  * disable the feature in old kernels.
41d9836fb4SBjoern A. Zeeb  */
42bfcc09ddSBjoern A. Zeeb #ifdef CONFIG_EFI
43bfcc09ddSBjoern A. Zeeb void *iwl_uefi_get_pnvm(struct iwl_trans *trans, size_t *len);
449af1bba4SBjoern A. Zeeb u8 *iwl_uefi_get_reduced_power(struct iwl_trans *trans, size_t *len);
459af1bba4SBjoern A. Zeeb int iwl_uefi_reduce_power_parse(struct iwl_trans *trans,
469af1bba4SBjoern A. Zeeb 				const u8 *data, size_t len,
479af1bba4SBjoern A. Zeeb 				struct iwl_pnvm_image *pnvm_data);
489af1bba4SBjoern A. Zeeb void iwl_uefi_get_step_table(struct iwl_trans *trans);
499af1bba4SBjoern A. Zeeb int iwl_uefi_handle_tlv_mem_desc(struct iwl_trans *trans, const u8 *data,
509af1bba4SBjoern A. Zeeb 				 u32 tlv_len, struct iwl_pnvm_image *pnvm_data);
51bfcc09ddSBjoern A. Zeeb #else /* CONFIG_EFI */
iwl_uefi_get_pnvm(struct iwl_trans * trans,size_t * len)529af1bba4SBjoern A. Zeeb static inline void *iwl_uefi_get_pnvm(struct iwl_trans *trans, size_t *len)
53bfcc09ddSBjoern A. Zeeb {
54bfcc09ddSBjoern A. Zeeb 	return ERR_PTR(-EOPNOTSUPP);
55bfcc09ddSBjoern A. Zeeb }
56bfcc09ddSBjoern A. Zeeb 
579af1bba4SBjoern A. Zeeb static inline int
iwl_uefi_reduce_power_parse(struct iwl_trans * trans,const u8 * data,size_t len,struct iwl_pnvm_image * pnvm_data)589af1bba4SBjoern A. Zeeb iwl_uefi_reduce_power_parse(struct iwl_trans *trans,
599af1bba4SBjoern A. Zeeb 			    const u8 *data, size_t len,
609af1bba4SBjoern A. Zeeb 			    struct iwl_pnvm_image *pnvm_data)
619af1bba4SBjoern A. Zeeb {
629af1bba4SBjoern A. Zeeb 	return -EOPNOTSUPP;
639af1bba4SBjoern A. Zeeb }
649af1bba4SBjoern A. Zeeb 
659af1bba4SBjoern A. Zeeb static inline u8 *
iwl_uefi_get_reduced_power(struct iwl_trans * trans,size_t * len)669af1bba4SBjoern A. Zeeb iwl_uefi_get_reduced_power(struct iwl_trans *trans, size_t *len)
67bfcc09ddSBjoern A. Zeeb {
68bfcc09ddSBjoern A. Zeeb 	return ERR_PTR(-EOPNOTSUPP);
69bfcc09ddSBjoern A. Zeeb }
709af1bba4SBjoern A. Zeeb 
iwl_uefi_get_step_table(struct iwl_trans * trans)719af1bba4SBjoern A. Zeeb static inline void iwl_uefi_get_step_table(struct iwl_trans *trans)
729af1bba4SBjoern A. Zeeb {
739af1bba4SBjoern A. Zeeb }
749af1bba4SBjoern A. Zeeb 
759af1bba4SBjoern A. Zeeb 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)769af1bba4SBjoern A. Zeeb iwl_uefi_handle_tlv_mem_desc(struct iwl_trans *trans, const u8 *data,
779af1bba4SBjoern A. Zeeb 			     u32 tlv_len, struct iwl_pnvm_image *pnvm_data)
789af1bba4SBjoern A. Zeeb {
799af1bba4SBjoern A. Zeeb 	return 0;
809af1bba4SBjoern A. Zeeb }
81bfcc09ddSBjoern A. Zeeb #endif /* CONFIG_EFI */
82bfcc09ddSBjoern A. Zeeb 
83d9836fb4SBjoern A. Zeeb #if defined(CONFIG_EFI) && defined(CONFIG_ACPI)
84d9836fb4SBjoern A. Zeeb void iwl_uefi_get_sgom_table(struct iwl_trans *trans, struct iwl_fw_runtime *fwrt);
85d9836fb4SBjoern A. Zeeb #else
86d9836fb4SBjoern A. Zeeb static inline
iwl_uefi_get_sgom_table(struct iwl_trans * trans,struct iwl_fw_runtime * fwrt)87d9836fb4SBjoern A. Zeeb void iwl_uefi_get_sgom_table(struct iwl_trans *trans, struct iwl_fw_runtime *fwrt)
88d9836fb4SBjoern A. Zeeb {
89d9836fb4SBjoern A. Zeeb }
90d9836fb4SBjoern A. Zeeb #endif
91bfcc09ddSBjoern A. Zeeb #endif /* __iwl_fw_uefi__ */
92