Received: by 2002:a05:6a10:f3d0:0:0:0:0 with SMTP id a16csp2713567pxv; Sun, 11 Jul 2021 23:33:30 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwqUfRnzFAvwR+06dyTlZFHeTZNFmJ6AezUDqQwFaMgoBGNSVwwAhKdcGCw0tAFZgHNkJd5 X-Received: by 2002:a17:906:f8d7:: with SMTP id lh23mr27421065ejb.485.1626071610534; Sun, 11 Jul 2021 23:33:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626071610; cv=none; d=google.com; s=arc-20160816; b=w+J2oDXcYfXGb7Ostya3HLK/Db1oNLl5m8y83itdJXsBmn1z2lGPwNeD1Sb4KIeKpS kLXJG6humXx0oDhR8zD37kSJ7n9Rzx5L+9iwVsaISB5sgxdggjUpZg9cOLQ9s2BUY98p UylT+9BADZswvMfXtgCZxtRIZmoQ5oH29cNS3NSnZzwB3HDkaIpV7NXQ7JsYHOk5u0cN kIj95wLA1YuhgOowjoPSQltkzRwyfunjBy8HkMzeRnWpEr+ovmkW7jWWCJWiKW7e92xe AMVdcmpObsK8wpHJ+VsSgVZPTCTlcNHBZB829Z98TuUS3ePTvkSnDUdvM+Q9YA/0SDgN hfLw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=9mg87HnfGxte9dbrTdJBDnnhcGYkKIxZVgTm0BTWt7o=; b=RK8kVCuGX7mEZdfergnb494JlZQhjZrSAFe+yPuPJxkBIkjpd4KdLHgHDoInNMrQyE nLthC3MgEVNGCVCqvV2FCS9MbH4XY43YSjpML2XuofwSrUcGS4cqR63JcdLznon/agGx dKGQpk8YKNsXrNw98FNJqcGyH7Ny+iv+wyMa46wslHUV9+IJqTro6+FiBmIh/TF0iKag vhCTUvO3JleRSTFJI54Oc0hjW4DNu1CzrITjJXN3dRuDP2Drr83FVtQha9P1aV/4RVYy 5/PDHBNF06c+5cPYw5IDDOgq4Riojc4SgqQt9jSnU0E+UX/Ferfx6Yndqne1OGOPuuNS tVAw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b="aiy96kz/"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id c11si17596968edy.282.2021.07.11.23.33.08; Sun, 11 Jul 2021 23:33:30 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b="aiy96kz/"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237714AbhGLGes (ORCPT + 99 others); Mon, 12 Jul 2021 02:34:48 -0400 Received: from mail.kernel.org ([198.145.29.99]:46026 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235394AbhGLG2Q (ORCPT ); Mon, 12 Jul 2021 02:28:16 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id D06A460238; Mon, 12 Jul 2021 06:24:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1626071067; bh=F9SIDCiiOgggij/nFc2jQ1bIscshgURVE6L4/SdvtLE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=aiy96kz/JmoRuLGq24OewdLs8rCgM2zUEqGTUXC8E0fQOKIIbQT56byyISM8KX4vb BpbrdBcms28UqPJB7RNJ1hDOVse9VLqMdWF/VJ7LJWw2U8dpQ5jvPUVYrf83Y9FlkC EapNyTUyWNfmRJm772YAtxTwFdFeoLsS2rzfNzBA= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, =?UTF-8?q?Alvin=20=C5=A0ipraga?= , Kalle Valo , Sasha Levin Subject: [PATCH 5.4 207/348] brcmfmac: correctly report average RSSI in station info Date: Mon, 12 Jul 2021 08:09:51 +0200 Message-Id: <20210712060729.020886722@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210712060659.886176320@linuxfoundation.org> References: <20210712060659.886176320@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Alvin Šipraga [ Upstream commit 9a1590934d9a02e570636432b93052c0c035f31f ] The rx_lastpkt_rssi field provided by the firmware is suitable for NL80211_STA_INFO_{SIGNAL,CHAIN_SIGNAL}, while the rssi field is an average. Fix up the assignments and set the correct STA_INFO bits. This lets userspace know that the average RSSI is part of the station info. Fixes: cae355dc90db ("brcmfmac: Add RSSI information to get_station.") Signed-off-by: Alvin Šipraga Signed-off-by: Kalle Valo Link: https://lore.kernel.org/r/20210506132010.3964484-2-alsi@bang-olufsen.dk Signed-off-by: Sasha Levin --- .../broadcom/brcm80211/brcmfmac/cfg80211.c | 36 ++++++++++--------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c index 626449c1e897..6439adcd2f99 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c @@ -2612,8 +2612,9 @@ brcmf_cfg80211_get_station(struct wiphy *wiphy, struct net_device *ndev, struct brcmf_sta_info_le sta_info_le; u32 sta_flags; u32 is_tdls_peer; - s32 total_rssi; - s32 count_rssi; + s32 total_rssi_avg = 0; + s32 total_rssi = 0; + s32 count_rssi = 0; int rssi; u32 i; @@ -2679,24 +2680,27 @@ brcmf_cfg80211_get_station(struct wiphy *wiphy, struct net_device *ndev, sinfo->filled |= BIT_ULL(NL80211_STA_INFO_RX_BYTES); sinfo->rx_bytes = le64_to_cpu(sta_info_le.rx_tot_bytes); } - total_rssi = 0; - count_rssi = 0; for (i = 0; i < BRCMF_ANT_MAX; i++) { - if (sta_info_le.rssi[i]) { - sinfo->chains |= BIT(count_rssi); - sinfo->chain_signal_avg[count_rssi] = - sta_info_le.rssi[i]; - sinfo->chain_signal[count_rssi] = - sta_info_le.rssi[i]; - total_rssi += sta_info_le.rssi[i]; - count_rssi++; - } + if (sta_info_le.rssi[i] == 0 || + sta_info_le.rx_lastpkt_rssi[i] == 0) + continue; + sinfo->chains |= BIT(count_rssi); + sinfo->chain_signal[count_rssi] = + sta_info_le.rx_lastpkt_rssi[i]; + sinfo->chain_signal_avg[count_rssi] = + sta_info_le.rssi[i]; + total_rssi += sta_info_le.rx_lastpkt_rssi[i]; + total_rssi_avg += sta_info_le.rssi[i]; + count_rssi++; } if (count_rssi) { - sinfo->filled |= BIT_ULL(NL80211_STA_INFO_CHAIN_SIGNAL); sinfo->filled |= BIT_ULL(NL80211_STA_INFO_SIGNAL); - total_rssi /= count_rssi; - sinfo->signal = total_rssi; + sinfo->filled |= BIT_ULL(NL80211_STA_INFO_SIGNAL_AVG); + sinfo->filled |= BIT_ULL(NL80211_STA_INFO_CHAIN_SIGNAL); + sinfo->filled |= + BIT_ULL(NL80211_STA_INFO_CHAIN_SIGNAL_AVG); + sinfo->signal = total_rssi / count_rssi; + sinfo->signal_avg = total_rssi_avg / count_rssi; } else if (test_bit(BRCMF_VIF_STATUS_CONNECTED, &ifp->vif->sme_state)) { memset(&scb_val, 0, sizeof(scb_val)); -- 2.30.2