diff options
author | Ayala Barazani <ayala.barazani@intel.com> | 2021-12-10 09:06:16 +0200 |
---|---|---|
committer | Luca Coelho <luciano.coelho@intel.com> | 2021-12-21 12:35:04 +0200 |
commit | 2856f623ce4888253b68cc2214f9297be7f8562a (patch) | |
tree | 43be5402f79a85b49345a8ef69257189273dee6c /drivers | |
parent | 7c530588405d2c8230c42c3014311c22d79c6d2b (diff) |
iwlwifi: mvm: Add list of OEMs allowed to use TAS
Add list of vendors that are allowed to use TAS and check it
against the value provided in the SMBIOS manufacturer field.
Initially add the following approved vendors: HP, Dell, Lenovo and Samsung.
Signed-off-by: Ayala Barazani <ayala.barazani@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Link: https://lore.kernel.org/r/iwlwifi.20211210090244.27fe6abf2e4c.I806e4b47dabddaa8ac27172e7cfa3d719c100e8f@changeid
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/wireless/intel/iwlwifi/mvm/fw.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/fw.c b/drivers/net/wireless/intel/iwlwifi/mvm/fw.c index 72227c87c6b9..19a18b626069 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/fw.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/fw.c @@ -1153,11 +1153,38 @@ static int iwl_mvm_ppag_init(struct iwl_mvm *mvm) return iwl_mvm_ppag_send_cmd(mvm); } +static const struct dmi_system_id dmi_tas_approved_list[] = { + { .ident = "HP", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "HP"), + }, + }, + { .ident = "SAMSUNG", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD"), + }, + }, + { .ident = "LENOVO", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Lenovo"), + }, + }, + { .ident = "DELL", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + }, + }, + + /* keep last */ + {} +}; + static void iwl_mvm_tas_init(struct iwl_mvm *mvm) { int ret; struct iwl_tas_config_cmd_v3 cmd = {}; int cmd_size; + const struct ieee80211_regdomain *regd; BUILD_BUG_ON(ARRAY_SIZE(cmd.block_list_array) < APCI_WTAS_BLACK_LIST_MAX); @@ -1167,6 +1194,24 @@ static void iwl_mvm_tas_init(struct iwl_mvm *mvm) return; } + /* Get the MCC from cfg80211 */ + regd = wiphy_dereference(mvm->hw->wiphy, mvm->hw->wiphy->regd); + + if (!regd) { + IWL_DEBUG_RADIO(mvm, "MCC is unavailable\n"); + return; + } + + if ((regd->alpha2[0] == 'U' && regd->alpha2[1] == 'S') || + (regd->alpha2[0] == 'C' && regd->alpha2[1] == 'A')) { + if (!dmi_check_system(dmi_tas_approved_list)) { + IWL_DEBUG_RADIO(mvm, + "System vendor '%s' is not in the approved list, disabling TAS.\n", + dmi_get_system_info(DMI_SYS_VENDOR)); + return; + } + } + ret = iwl_acpi_get_tas(&mvm->fwrt, &cmd); if (ret < 0) { IWL_DEBUG_RADIO(mvm, |