Received: by 2002:a25:7ec1:0:0:0:0:0 with SMTP id z184csp6036571ybc; Wed, 27 Nov 2019 13:51:15 -0800 (PST) X-Google-Smtp-Source: APXvYqyp+AVYAmecf25KePL8NxME5fZ6VtFETo1Q0KFCgbX0wMjRtrHi/fGMKDVpaB3HUzqH40C/ X-Received: by 2002:a17:906:9603:: with SMTP id s3mr9736318ejx.116.1574891475256; Wed, 27 Nov 2019 13:51:15 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1574891475; cv=none; d=google.com; s=arc-20160816; b=jfcPLpzDbyau07ORKpJnX3xhefb7RVDF+Vv/y/iOIoid3qsOsroYoIr50V7LrvoFeQ u51hYmJeyTnLBO5ARPKQYnCb7YUyRjABocgylWp/glkrGVvLawUwEfcFGOlG+oe5IQBG CVLoPI6cohXId4gtbgW8sYV3bC37vQYX297dU6dXMmH84oJFASwUnjc5//0Y0WGrpeX9 HtABNBKzDYhddVztaS0Em2S+XPSG2wYbgwTPRjktlHl8srJKdgxkYm+3KFftAaI5IHYa sGhYmZCu9vTPBmnmxUUrn/OXTva0HRXvMzdbvSDCk8ECb+DxHoD765/ymeeiikdhhHMt YRZw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=cORsZBnzQcNunepI/QY9L3BSXrw0/HA1P8RwPklpECI=; b=ekCW3TeovrPyP9LG3gqA6oZ824Sd0LQQjsQFi0H+51LdKuOR51clxLFMGSca1DwdMO 4FRibESpghy5OnphXhHzkPBesKP1ogfMZaTKjTy/jFJiCLh4KznN8z2EVQfJOfc9P4xi B9QNWj/fDDaRAZyhbZxMFbReR7+gOxQc1VS3ete2aty2I9fidAN/tYre65Kieh8tVVvA I89NVTaa4HaA2wcK4WpY/GrejnJPDSOMVhM0Dt3F+gnKXuRCizayZBqo28yn1TfTzo/l Fptcc8E6eqzZANhj799SlUdcq9j8w+jZAXzFKtYW876gMf+pFBMBPEPOk0ZiJU69lwiG Ucsw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=qkBSdler; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z12si10904340edx.47.2019.11.27.13.50.51; Wed, 27 Nov 2019 13:51:15 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=qkBSdler; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727575AbfK0UeX (ORCPT + 99 others); Wed, 27 Nov 2019 15:34:23 -0500 Received: from mail.kernel.org ([198.145.29.99]:34646 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727519AbfK0UeU (ORCPT ); Wed, 27 Nov 2019 15:34:20 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 35C32207DD; Wed, 27 Nov 2019 20:34:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1574886859; bh=UB7xeUQU0FO6ukKK0p65dhxfn7cynO/W4s21N8+WFBE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=qkBSdler4XRZsnl+BBVjk4JgVifecmxb6D4NrUOThTB0mk1FE/SmItzimK/VOjj80 HnDYT3lhKl86Sqb/E56jrCGjIMEUGvYsjzCVfzAEA7fpNosj4zDMDVviilPhlUFBgI viNWClxB/mJmpYW2Lq8Rs29ixQetPtP3DJYy6WnM= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Adrian Bunk , Kalle Valo , Sasha Levin Subject: [PATCH 4.4 020/132] mwifiex: Fix NL80211_TX_POWER_LIMITED Date: Wed, 27 Nov 2019 21:30:11 +0100 Message-Id: <20191127202918.215823166@linuxfoundation.org> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191127202857.270233486@linuxfoundation.org> References: <20191127202857.270233486@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Adrian Bunk [ Upstream commit 65a576e27309120e0621f54d5c81eb9128bd56be ] NL80211_TX_POWER_LIMITED was treated as NL80211_TX_POWER_AUTOMATIC, which is the opposite of what should happen and can cause nasty regulatory problems. if/else converted to a switch without default to make gcc warn on unhandled enum values. Signed-off-by: Adrian Bunk Signed-off-by: Kalle Valo Signed-off-by: Sasha Levin --- drivers/net/wireless/mwifiex/cfg80211.c | 13 +++++++++++-- drivers/net/wireless/mwifiex/ioctl.h | 1 + drivers/net/wireless/mwifiex/sta_ioctl.c | 11 +++++++---- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/drivers/net/wireless/mwifiex/cfg80211.c b/drivers/net/wireless/mwifiex/cfg80211.c index 1e074eaf613d0..c6c2d3304dba7 100644 --- a/drivers/net/wireless/mwifiex/cfg80211.c +++ b/drivers/net/wireless/mwifiex/cfg80211.c @@ -365,11 +365,20 @@ mwifiex_cfg80211_set_tx_power(struct wiphy *wiphy, struct mwifiex_power_cfg power_cfg; int dbm = MBM_TO_DBM(mbm); - if (type == NL80211_TX_POWER_FIXED) { + switch (type) { + case NL80211_TX_POWER_FIXED: power_cfg.is_power_auto = 0; + power_cfg.is_power_fixed = 1; power_cfg.power_level = dbm; - } else { + break; + case NL80211_TX_POWER_LIMITED: + power_cfg.is_power_auto = 0; + power_cfg.is_power_fixed = 0; + power_cfg.power_level = dbm; + break; + case NL80211_TX_POWER_AUTOMATIC: power_cfg.is_power_auto = 1; + break; } priv = mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_ANY); diff --git a/drivers/net/wireless/mwifiex/ioctl.h b/drivers/net/wireless/mwifiex/ioctl.h index 4f0174c649461..4cb7001603968 100644 --- a/drivers/net/wireless/mwifiex/ioctl.h +++ b/drivers/net/wireless/mwifiex/ioctl.h @@ -256,6 +256,7 @@ struct mwifiex_ds_encrypt_key { struct mwifiex_power_cfg { u32 is_power_auto; + u32 is_power_fixed; u32 power_level; }; diff --git a/drivers/net/wireless/mwifiex/sta_ioctl.c b/drivers/net/wireless/mwifiex/sta_ioctl.c index 12eedb33db7ba..992f9feaea92e 100644 --- a/drivers/net/wireless/mwifiex/sta_ioctl.c +++ b/drivers/net/wireless/mwifiex/sta_ioctl.c @@ -666,6 +666,9 @@ int mwifiex_set_tx_power(struct mwifiex_private *priv, txp_cfg = (struct host_cmd_ds_txpwr_cfg *) buf; txp_cfg->action = cpu_to_le16(HostCmd_ACT_GEN_SET); if (!power_cfg->is_power_auto) { + u16 dbm_min = power_cfg->is_power_fixed ? + dbm : priv->min_tx_power_level; + txp_cfg->mode = cpu_to_le32(1); pg_tlv = (struct mwifiex_types_power_group *) (buf + sizeof(struct host_cmd_ds_txpwr_cfg)); @@ -680,7 +683,7 @@ int mwifiex_set_tx_power(struct mwifiex_private *priv, pg->last_rate_code = 0x03; pg->modulation_class = MOD_CLASS_HR_DSSS; pg->power_step = 0; - pg->power_min = (s8) dbm; + pg->power_min = (s8) dbm_min; pg->power_max = (s8) dbm; pg++; /* Power group for modulation class OFDM */ @@ -688,7 +691,7 @@ int mwifiex_set_tx_power(struct mwifiex_private *priv, pg->last_rate_code = 0x07; pg->modulation_class = MOD_CLASS_OFDM; pg->power_step = 0; - pg->power_min = (s8) dbm; + pg->power_min = (s8) dbm_min; pg->power_max = (s8) dbm; pg++; /* Power group for modulation class HTBW20 */ @@ -696,7 +699,7 @@ int mwifiex_set_tx_power(struct mwifiex_private *priv, pg->last_rate_code = 0x20; pg->modulation_class = MOD_CLASS_HT; pg->power_step = 0; - pg->power_min = (s8) dbm; + pg->power_min = (s8) dbm_min; pg->power_max = (s8) dbm; pg->ht_bandwidth = HT_BW_20; pg++; @@ -705,7 +708,7 @@ int mwifiex_set_tx_power(struct mwifiex_private *priv, pg->last_rate_code = 0x20; pg->modulation_class = MOD_CLASS_HT; pg->power_step = 0; - pg->power_min = (s8) dbm; + pg->power_min = (s8) dbm_min; pg->power_max = (s8) dbm; pg->ht_bandwidth = HT_BW_40; } -- 2.20.1