mac80211: brcmfmac: backport fixes for 4.7 and 4.8
[openwrt/svn-archive/archive.git] / package / kernel / mac80211 / patches / 350-0001-brcmfmac-add-fallback-for-devices-that-do-not-report.patch
1 From: Jaap Jan Meijer <jjmeijer88@gmail.com>
2 Date: Thu, 12 May 2016 18:25:08 +0200
3 Subject: [PATCH] brcmfmac: add fallback for devices that do not report
4 per-chain values
5
6 If brcmf_cfg80211_get_station fails to determine the RSSI from the
7 per-chain values get the value individually as a fallback.
8
9 Fixes: 1f0dc59a6de9 ("brcmfmac: rework .get_station() callback")
10 Signed-off-by: Jaap Jan Meijer <jjmeijer88@gmail.com>
11 Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
12 Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
13 ---
14
15 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
16 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
17 @@ -2480,12 +2480,14 @@ brcmf_cfg80211_get_station(struct wiphy
18 const u8 *mac, struct station_info *sinfo)
19 {
20 struct brcmf_if *ifp = netdev_priv(ndev);
21 + struct brcmf_scb_val_le scb_val;
22 s32 err = 0;
23 struct brcmf_sta_info_le sta_info_le;
24 u32 sta_flags;
25 u32 is_tdls_peer;
26 s32 total_rssi;
27 s32 count_rssi;
28 + int rssi;
29 u32 i;
30
31 brcmf_dbg(TRACE, "Enter, MAC %pM\n", mac);
32 @@ -2569,6 +2571,20 @@ brcmf_cfg80211_get_station(struct wiphy
33 sinfo->filled |= BIT(NL80211_STA_INFO_SIGNAL);
34 total_rssi /= count_rssi;
35 sinfo->signal = total_rssi;
36 + } else if (test_bit(BRCMF_VIF_STATUS_CONNECTED,
37 + &ifp->vif->sme_state)) {
38 + memset(&scb_val, 0, sizeof(scb_val));
39 + err = brcmf_fil_cmd_data_get(ifp, BRCMF_C_GET_RSSI,
40 + &scb_val, sizeof(scb_val));
41 + if (err) {
42 + brcmf_err("Could not get rssi (%d)\n", err);
43 + goto done;
44 + } else {
45 + rssi = le32_to_cpu(scb_val.val);
46 + sinfo->filled |= BIT(NL80211_STA_INFO_SIGNAL);
47 + sinfo->signal = rssi;
48 + brcmf_dbg(CONN, "RSSI %d dBm\n", rssi);
49 + }
50 }
51 }
52 done: