lkml.org 
[lkml]   [2021]   [Jul]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.13 463/800] brcmfmac: correctly report average RSSI in station info
    Date
    From: Alvin Šipraga <ALSI@bang-olufsen.dk>

    [ 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 <alsi@bang-olufsen.dk>
    Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
    Link: https://lore.kernel.org/r/20210506132010.3964484-2-alsi@bang-olufsen.dk
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    .../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 afa75cb83221..d8822a01d277 100644
    --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
    +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
    @@ -2767,8 +2767,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;

    @@ -2834,24 +2835,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


    \
     
     \ /
      Last update: 2021-07-12 10:41    [W:3.538 / U:1.220 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site