iwlwifi: mvm: support BIOS enable/disable for 11ax in Ukraine
Read the new BIOS DSM and Pass to FW if to disable\enable 11ax for Ukraine according to the BIOS key. this is needed to enable OEMs to control enable/disable 11ax in Ukraine Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com> Signed-off-by: Luca Coelho <luciano.coelho@intel.com> Link: https://lore.kernel.org/r/iwlwifi.20210331121101.055654e7707e.If7eaf9839cd5d59729a235df07e31668b408e740@changeid Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
This commit is contained in:
parent
9cd243f24e
commit
d2bfda8add
4 changed files with 45 additions and 0 deletions
|
|
@ -695,3 +695,32 @@ int iwl_sar_geo_init(struct iwl_fw_runtime *fwrt,
|
|||
return 0;
|
||||
}
|
||||
IWL_EXPORT_SYMBOL(iwl_sar_geo_init);
|
||||
|
||||
u32 iwl_acpi_eval_dsm_11ax_enablement(struct device *dev)
|
||||
{
|
||||
union acpi_object *obj;
|
||||
u32 ret;
|
||||
|
||||
obj = iwl_acpi_get_dsm_object(dev, 0,
|
||||
DSM_FUNC_11AX_ENABLEMENT, NULL,
|
||||
&iwl_guid);
|
||||
if (IS_ERR(obj))
|
||||
return 0;
|
||||
|
||||
if (obj->type != ACPI_TYPE_INTEGER) {
|
||||
IWL_DEBUG_DEV_RADIO(dev,
|
||||
"ACPI: DSM method did not return a valid object, type=%d\n",
|
||||
obj->type);
|
||||
ret = 0;
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = obj->integer.value;
|
||||
IWL_DEBUG_DEV_RADIO(dev,
|
||||
"ACPI: DSM method evaluated: func=DSM_FUNC_11AX_ENABLEMENT, ret=%d\n",
|
||||
ret);
|
||||
out:
|
||||
ACPI_FREE(obj);
|
||||
return ret;
|
||||
}
|
||||
IWL_EXPORT_SYMBOL(iwl_acpi_eval_dsm_11ax_enablement);
|
||||
|
|
|
|||
|
|
@ -77,6 +77,7 @@ enum iwl_dsm_funcs_rev_0 {
|
|||
DSM_FUNC_QUERY = 0,
|
||||
DSM_FUNC_DISABLE_SRD = 1,
|
||||
DSM_FUNC_ENABLE_INDONESIA_5G2 = 2,
|
||||
DSM_FUNC_11AX_ENABLEMENT = 6,
|
||||
};
|
||||
|
||||
enum iwl_dsm_values_srd {
|
||||
|
|
@ -160,6 +161,8 @@ int iwl_sar_geo_init(struct iwl_fw_runtime *fwrt,
|
|||
int iwl_acpi_get_tas(struct iwl_fw_runtime *fwrt, __le32 *block_list_array,
|
||||
int *block_list_size);
|
||||
|
||||
u32 iwl_acpi_eval_dsm_11ax_enablement(struct device *dev);
|
||||
|
||||
#else /* CONFIG_ACPI */
|
||||
|
||||
static inline void *iwl_acpi_get_object(struct device *dev, acpi_string method)
|
||||
|
|
@ -235,5 +238,11 @@ static inline int iwl_acpi_get_tas(struct iwl_fw_runtime *fwrt,
|
|||
{
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
static inline u32 iwl_acpi_eval_dsm_11ax_enablement(struct device *dev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_ACPI */
|
||||
#endif /* __iwl_fw_acpi__ */
|
||||
|
|
|
|||
|
|
@ -414,6 +414,9 @@ enum iwl_lari_config_masks {
|
|||
LARI_CONFIG_ENABLE_5G2_IN_INDONESIA_MSK = BIT(3),
|
||||
};
|
||||
|
||||
#define IWL_11AX_UKRAINE_MASK 3
|
||||
#define IWL_11AX_UKRAINE_SHIFT 8
|
||||
|
||||
/**
|
||||
* struct iwl_lari_config_change_cmd_v1 - change LARI configuration
|
||||
* @config_bitmap: bit map of the config commands. each bit will trigger a
|
||||
|
|
|
|||
|
|
@ -1213,6 +1213,10 @@ static void iwl_mvm_lari_cfg(struct iwl_mvm *mvm)
|
|||
cmd.config_bitmap |=
|
||||
cpu_to_le32(LARI_CONFIG_CHANGE_ETSI_TO_DISABLED_MSK);
|
||||
|
||||
ret = iwl_acpi_eval_dsm_11ax_enablement((&mvm->fwrt)->dev);
|
||||
cmd.config_bitmap |=
|
||||
cpu_to_le32((ret &= IWL_11AX_UKRAINE_MASK) << IWL_11AX_UKRAINE_SHIFT);
|
||||
|
||||
/* apply more config masks here */
|
||||
|
||||
if (cmd.config_bitmap) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue