Commit d2bfda8a authored by Miri Korenblit's avatar Miri Korenblit Committed by Luca Coelho
Browse files

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: default avatarMiri Korenblit <miriam.rachel.korenblit@intel.com>
Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
Link: https://lore.kernel.org/r/iwlwifi.20210331121101.055654e7707e.If7eaf9839cd5d59729a235df07e31668b408e740@changeid


Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
parent 9cd243f2
Loading
Loading
Loading
Loading
+29 −0
Original line number Diff line number Diff line
@@ -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);
+9 −0
Original line number Diff line number Diff line
@@ -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__ */
+3 −0
Original line number Diff line number Diff line
@@ -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
+4 −0
Original line number Diff line number Diff line
@@ -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) {