@@ -3125,6 +3125,7 @@ brcmf_cfg80211_get_station(struct wiphy *wiphy, struct net_device *ndev,
s32 total_rssi = 0;
s32 count_rssi = 0;
int rssi;
+ int rx_lastpkt_rssi;
u32 i;
brcmf_dbg(TRACE, "Enter, MAC %pM\n", mac);
@@ -3190,15 +3191,16 @@ brcmf_cfg80211_get_station(struct wiphy *wiphy, struct net_device *ndev,
sinfo->rx_bytes = le64_to_cpu(sta_info_le.rx_tot_bytes);
}
for (i = 0; i < BRCMF_ANT_MAX; i++) {
- if (sta_info_le.rssi[i] == 0 ||
- sta_info_le.rx_lastpkt_rssi[i] == 0)
+ if (sta_info_le.rssi[i] == 0)
continue;
+ rx_lastpkt_rssi = sta_info_le.rx_lastpkt_rssi[i] != 0 ?
+ sta_info_le.rx_lastpkt_rssi[i] :
+ sta_info_le.rssi[i];
sinfo->chains |= BIT(count_rssi);
- sinfo->chain_signal[count_rssi] =
- sta_info_le.rx_lastpkt_rssi[i];
+ sinfo->chain_signal[count_rssi] = rx_lastpkt_rssi;
sinfo->chain_signal_avg[count_rssi] =
sta_info_le.rssi[i];
- total_rssi += sta_info_le.rx_lastpkt_rssi[i];
+ total_rssi += rx_lastpkt_rssi;
total_rssi_avg += sta_info_le.rssi[i];
count_rssi++;
}
After commit 9a1590934d9a ("brcmfmac: correctly report average RSSI in station info") it is required from firmware to provide rx_lastpkt_rssi. If this field is not provided brcmfmac doesn't report any RSSI at all. Unfortunately some firmwares doesn't provide it. One example is firmware for BCM43455 found in Raspbberry Pi. See https://github.com/raspberrypi/linux/issues/4574 Fix it by falling back to rssi field if rx_lastpkt_rssi is not provided (like it was before 9a1590934d9a). Fixes: 9a1590934d9a ("brcmfmac: correctly report average RSSI in station info") Signed-off-by: Alex Shumsky <alexthreed@gmail.com> --- .../wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-)