aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/intel/iwlwifi/mvm/fw.c
diff options
context:
space:
mode:
authorAyala Barazani <ayala.barazani@intel.com>2021-12-10 09:06:16 +0200
committerLuca Coelho <luciano.coelho@intel.com>2021-12-21 12:35:04 +0200
commit2856f623ce4888253b68cc2214f9297be7f8562a (patch)
tree43be5402f79a85b49345a8ef69257189273dee6c /drivers/net/wireless/intel/iwlwifi/mvm/fw.c
parentiwlwifi: mvm: support revision 1 of WTAS table (diff)
downloadlinux-dev-2856f623ce4888253b68cc2214f9297be7f8562a.tar.xz
linux-dev-2856f623ce4888253b68cc2214f9297be7f8562a.zip
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/net/wireless/intel/iwlwifi/mvm/fw.c')
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/fw.c45
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,