mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-09 04:21:03 -04:00
wifi: iwlwifi: prepare for reading DSM from UEFI
Move all the common items (functions, enumerations and mcaros) to regulatory.h/c files, and rename it to a common name. Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com> Reviewed-by: Gregory Greenman <gregory.greenman@intel.com> Link: https://msgid.link/20240201155157.eae9bcbc0023.If1175f3143d6369076669ddd5d6ad4df0ee00659@changeid Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
committed by
Johannes Berg
parent
091d89428f
commit
dc4fe7500e
@@ -157,7 +157,7 @@ static int iwl_acpi_get_dsm_integer(struct device *dev, int rev, int func,
|
||||
* In case the expected size is smaller than 32-bit, padding will be added.
|
||||
*/
|
||||
int iwl_acpi_get_dsm(struct iwl_fw_runtime *fwrt,
|
||||
enum iwl_dsm_funcs_rev_0 func, u32 *value)
|
||||
enum iwl_dsm_funcs func, u32 *value)
|
||||
{
|
||||
size_t expected_size;
|
||||
u64 tmp;
|
||||
@@ -808,64 +808,6 @@ int iwl_acpi_get_wgds_table(struct iwl_fw_runtime *fwrt)
|
||||
return ret;
|
||||
}
|
||||
|
||||
__le32 iwl_acpi_get_lari_config_bitmap(struct iwl_fw_runtime *fwrt)
|
||||
{
|
||||
int ret;
|
||||
u32 val;
|
||||
__le32 config_bitmap = 0;
|
||||
|
||||
/*
|
||||
* Evaluate func 'DSM_FUNC_ENABLE_INDONESIA_5G2'.
|
||||
* Setting config_bitmap Indonesia bit is valid only for HR/JF.
|
||||
*/
|
||||
switch (CSR_HW_RFID_TYPE(fwrt->trans->hw_rf_id)) {
|
||||
case IWL_CFG_RF_TYPE_HR1:
|
||||
case IWL_CFG_RF_TYPE_HR2:
|
||||
case IWL_CFG_RF_TYPE_JF1:
|
||||
case IWL_CFG_RF_TYPE_JF2:
|
||||
ret = iwl_acpi_get_dsm(fwrt, DSM_FUNC_ENABLE_INDONESIA_5G2,
|
||||
&val);
|
||||
|
||||
if (!ret && val == DSM_VALUE_INDONESIA_ENABLE)
|
||||
config_bitmap |=
|
||||
cpu_to_le32(LARI_CONFIG_ENABLE_5G2_IN_INDONESIA_MSK);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
** Evaluate func 'DSM_FUNC_DISABLE_SRD'
|
||||
*/
|
||||
ret = iwl_acpi_get_dsm(fwrt, DSM_FUNC_DISABLE_SRD, &val);
|
||||
if (!ret) {
|
||||
if (val == DSM_VALUE_SRD_PASSIVE)
|
||||
config_bitmap |=
|
||||
cpu_to_le32(LARI_CONFIG_CHANGE_ETSI_TO_PASSIVE_MSK);
|
||||
else if (val == DSM_VALUE_SRD_DISABLE)
|
||||
config_bitmap |=
|
||||
cpu_to_le32(LARI_CONFIG_CHANGE_ETSI_TO_DISABLED_MSK);
|
||||
}
|
||||
|
||||
if (fw_has_capa(&fwrt->fw->ucode_capa,
|
||||
IWL_UCODE_TLV_CAPA_CHINA_22_REG_SUPPORT)) {
|
||||
/*
|
||||
** Evaluate func 'DSM_FUNC_REGULATORY_CONFIG'
|
||||
*/
|
||||
ret = iwl_acpi_get_dsm(fwrt, DSM_FUNC_REGULATORY_CONFIG, &val);
|
||||
/*
|
||||
* China 2022 enable if the BIOS object does not exist or
|
||||
* if it is enabled in BIOS.
|
||||
*/
|
||||
if (ret < 0 || val & DSM_MASK_CHINA_22_REG)
|
||||
config_bitmap |=
|
||||
cpu_to_le32(LARI_CONFIG_ENABLE_CHINA_22_REG_SUPPORT_MSK);
|
||||
}
|
||||
|
||||
return config_bitmap;
|
||||
}
|
||||
IWL_EXPORT_SYMBOL(iwl_acpi_get_lari_config_bitmap);
|
||||
|
||||
int iwl_acpi_get_ppag_table(struct iwl_fw_runtime *fwrt)
|
||||
{
|
||||
union acpi_object *wifi_pkg, *data, *flags;
|
||||
|
||||
@@ -94,47 +94,6 @@
|
||||
|
||||
#define ACPI_DSM_REV 0
|
||||
|
||||
enum iwl_dsm_funcs_rev_0 {
|
||||
DSM_FUNC_QUERY = 0,
|
||||
DSM_FUNC_DISABLE_SRD = 1,
|
||||
DSM_FUNC_ENABLE_INDONESIA_5G2 = 2,
|
||||
DSM_FUNC_ENABLE_6E = 3,
|
||||
DSM_FUNC_REGULATORY_CONFIG = 4,
|
||||
DSM_FUNC_11AX_ENABLEMENT = 6,
|
||||
DSM_FUNC_ENABLE_UNII4_CHAN = 7,
|
||||
DSM_FUNC_ACTIVATE_CHANNEL = 8,
|
||||
DSM_FUNC_FORCE_DISABLE_CHANNELS = 9,
|
||||
DSM_FUNC_ENERGY_DETECTION_THRESHOLD = 10,
|
||||
DSM_FUNC_RFI_CONFIG = 11,
|
||||
DSM_FUNC_NUM_FUNCS = 12,
|
||||
};
|
||||
|
||||
enum iwl_dsm_values_srd {
|
||||
DSM_VALUE_SRD_ACTIVE,
|
||||
DSM_VALUE_SRD_PASSIVE,
|
||||
DSM_VALUE_SRD_DISABLE,
|
||||
DSM_VALUE_SRD_MAX
|
||||
};
|
||||
|
||||
enum iwl_dsm_values_indonesia {
|
||||
DSM_VALUE_INDONESIA_DISABLE,
|
||||
DSM_VALUE_INDONESIA_ENABLE,
|
||||
DSM_VALUE_INDONESIA_RESERVED,
|
||||
DSM_VALUE_INDONESIA_MAX
|
||||
};
|
||||
|
||||
enum iwl_dsm_values_rfi {
|
||||
DSM_VALUE_RFI_DLVR_DISABLE = BIT(0),
|
||||
DSM_VALUE_RFI_DDR_DISABLE = BIT(1),
|
||||
};
|
||||
|
||||
#define DSM_VALUE_RFI_DISABLE (DSM_VALUE_RFI_DLVR_DISABLE |\
|
||||
DSM_VALUE_RFI_DDR_DISABLE)
|
||||
|
||||
enum iwl_dsm_masks_reg {
|
||||
DSM_MASK_CHINA_22_REG = BIT(2)
|
||||
};
|
||||
|
||||
#ifdef CONFIG_ACPI
|
||||
|
||||
struct iwl_fw_runtime;
|
||||
@@ -173,8 +132,6 @@ int iwl_acpi_get_wgds_table(struct iwl_fw_runtime *fwrt);
|
||||
int iwl_acpi_get_tas_table(struct iwl_fw_runtime *fwrt,
|
||||
struct iwl_tas_data *data);
|
||||
|
||||
__le32 iwl_acpi_get_lari_config_bitmap(struct iwl_fw_runtime *fwrt);
|
||||
|
||||
int iwl_acpi_get_ppag_table(struct iwl_fw_runtime *fwrt);
|
||||
|
||||
void iwl_acpi_get_phy_filters(struct iwl_fw_runtime *fwrt,
|
||||
@@ -183,7 +140,7 @@ void iwl_acpi_get_phy_filters(struct iwl_fw_runtime *fwrt,
|
||||
void iwl_acpi_get_guid_lock_status(struct iwl_fw_runtime *fwrt);
|
||||
|
||||
int iwl_acpi_get_dsm(struct iwl_fw_runtime *fwrt,
|
||||
enum iwl_dsm_funcs_rev_0 func, u32 *value);
|
||||
enum iwl_dsm_funcs func, u32 *value);
|
||||
|
||||
#else /* CONFIG_ACPI */
|
||||
|
||||
@@ -246,8 +203,7 @@ static inline void iwl_acpi_get_guid_lock_status(struct iwl_fw_runtime *fwrt)
|
||||
}
|
||||
|
||||
static inline int iwl_acpi_get_dsm(struct iwl_fw_runtime *fwrt,
|
||||
enum iwl_dsm_funcs_rev_0 func,
|
||||
u32 *value)
|
||||
enum iwl_dsm_funcs func, u32 *value)
|
||||
{
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
@@ -431,3 +431,52 @@ int iwl_parse_tas_selection(struct iwl_fw_runtime *fwrt,
|
||||
|
||||
return enabled;
|
||||
}
|
||||
|
||||
__le32 iwl_get_lari_config_bitmap(struct iwl_fw_runtime *fwrt)
|
||||
{
|
||||
int ret;
|
||||
u32 val;
|
||||
__le32 config_bitmap = 0;
|
||||
|
||||
switch (CSR_HW_RFID_TYPE(fwrt->trans->hw_rf_id)) {
|
||||
case IWL_CFG_RF_TYPE_HR1:
|
||||
case IWL_CFG_RF_TYPE_HR2:
|
||||
case IWL_CFG_RF_TYPE_JF1:
|
||||
case IWL_CFG_RF_TYPE_JF2:
|
||||
ret = iwl_acpi_get_dsm(fwrt, DSM_FUNC_ENABLE_INDONESIA_5G2,
|
||||
&val);
|
||||
|
||||
if (!ret && val == DSM_VALUE_INDONESIA_ENABLE)
|
||||
config_bitmap |=
|
||||
cpu_to_le32(LARI_CONFIG_ENABLE_5G2_IN_INDONESIA_MSK);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
ret = iwl_acpi_get_dsm(fwrt, DSM_FUNC_DISABLE_SRD, &val);
|
||||
if (!ret) {
|
||||
if (val == DSM_VALUE_SRD_PASSIVE)
|
||||
config_bitmap |=
|
||||
cpu_to_le32(LARI_CONFIG_CHANGE_ETSI_TO_PASSIVE_MSK);
|
||||
else if (val == DSM_VALUE_SRD_DISABLE)
|
||||
config_bitmap |=
|
||||
cpu_to_le32(LARI_CONFIG_CHANGE_ETSI_TO_DISABLED_MSK);
|
||||
}
|
||||
|
||||
if (fw_has_capa(&fwrt->fw->ucode_capa,
|
||||
IWL_UCODE_TLV_CAPA_CHINA_22_REG_SUPPORT)) {
|
||||
ret = iwl_acpi_get_dsm(fwrt, DSM_FUNC_REGULATORY_CONFIG,
|
||||
&val);
|
||||
/*
|
||||
* China 2022 enable if the BIOS object does not exist or
|
||||
* if it is enabled in BIOS.
|
||||
*/
|
||||
if (ret < 0 || val & DSM_MASK_CHINA_22_REG)
|
||||
config_bitmap |=
|
||||
cpu_to_le32(LARI_CONFIG_ENABLE_CHINA_22_REG_SUPPORT_MSK);
|
||||
}
|
||||
|
||||
return config_bitmap;
|
||||
}
|
||||
IWL_EXPORT_SYMBOL(iwl_get_lari_config_bitmap);
|
||||
|
||||
@@ -102,6 +102,48 @@ struct iwl_tas_data {
|
||||
u8 usa_tas_uhb_allowed;
|
||||
};
|
||||
|
||||
/* For DSM revision 0 and 4 */
|
||||
enum iwl_dsm_funcs {
|
||||
DSM_FUNC_QUERY = 0,
|
||||
DSM_FUNC_DISABLE_SRD = 1,
|
||||
DSM_FUNC_ENABLE_INDONESIA_5G2 = 2,
|
||||
DSM_FUNC_ENABLE_6E = 3,
|
||||
DSM_FUNC_REGULATORY_CONFIG = 4,
|
||||
DSM_FUNC_11AX_ENABLEMENT = 6,
|
||||
DSM_FUNC_ENABLE_UNII4_CHAN = 7,
|
||||
DSM_FUNC_ACTIVATE_CHANNEL = 8,
|
||||
DSM_FUNC_FORCE_DISABLE_CHANNELS = 9,
|
||||
DSM_FUNC_ENERGY_DETECTION_THRESHOLD = 10,
|
||||
DSM_FUNC_RFI_CONFIG = 11,
|
||||
DSM_FUNC_NUM_FUNCS = 12,
|
||||
};
|
||||
|
||||
enum iwl_dsm_values_srd {
|
||||
DSM_VALUE_SRD_ACTIVE,
|
||||
DSM_VALUE_SRD_PASSIVE,
|
||||
DSM_VALUE_SRD_DISABLE,
|
||||
DSM_VALUE_SRD_MAX
|
||||
};
|
||||
|
||||
enum iwl_dsm_values_indonesia {
|
||||
DSM_VALUE_INDONESIA_DISABLE,
|
||||
DSM_VALUE_INDONESIA_ENABLE,
|
||||
DSM_VALUE_INDONESIA_RESERVED,
|
||||
DSM_VALUE_INDONESIA_MAX
|
||||
};
|
||||
|
||||
enum iwl_dsm_values_rfi {
|
||||
DSM_VALUE_RFI_DLVR_DISABLE = BIT(0),
|
||||
DSM_VALUE_RFI_DDR_DISABLE = BIT(1),
|
||||
};
|
||||
|
||||
#define DSM_VALUE_RFI_DISABLE (DSM_VALUE_RFI_DLVR_DISABLE |\
|
||||
DSM_VALUE_RFI_DDR_DISABLE)
|
||||
|
||||
enum iwl_dsm_masks_reg {
|
||||
DSM_MASK_CHINA_22_REG = BIT(2)
|
||||
};
|
||||
|
||||
struct iwl_fw_runtime;
|
||||
|
||||
bool iwl_sar_geo_support(struct iwl_fw_runtime *fwrt);
|
||||
@@ -142,4 +184,6 @@ int iwl_bios_get_pwr_limit(struct iwl_fw_runtime *fwrt,
|
||||
|
||||
int iwl_bios_get_mcc(struct iwl_fw_runtime *fwrt, char *mcc);
|
||||
int iwl_bios_get_eckv(struct iwl_fw_runtime *fwrt, u32 *ext_clk);
|
||||
|
||||
__le32 iwl_get_lari_config_bitmap(struct iwl_fw_runtime *fwrt);
|
||||
#endif /* __fw_regulatory_h__ */
|
||||
|
||||
@@ -1242,7 +1242,7 @@ static void iwl_mvm_lari_cfg(struct iwl_mvm *mvm)
|
||||
WIDE_ID(REGULATORY_AND_NVM_GROUP,
|
||||
LARI_CONFIG_CHANGE), 1);
|
||||
|
||||
cmd.config_bitmap = iwl_acpi_get_lari_config_bitmap(&mvm->fwrt);
|
||||
cmd.config_bitmap = iwl_get_lari_config_bitmap(&mvm->fwrt);
|
||||
|
||||
ret = iwl_acpi_get_dsm(&mvm->fwrt, DSM_FUNC_11AX_ENABLEMENT, &value);
|
||||
if (!ret)
|
||||
|
||||
Reference in New Issue
Block a user