FROMLIST: brcmfmac: reports boottime_ns while informing bss
authorFranky Lin <franky.lin@broadcom.com>
Thu, 26 Apr 2018 10:18:35 +0000 (12:18 +0200)
committerDmitry Shmidt <dimitrysh@google.com>
Wed, 16 May 2018 19:54:04 +0000 (12:54 -0700)
Provides a timestamp in bss information so user space can see when the
bss info was updated. Since tsf is not available from the dongle events
boottime is reported instead.

Reported-by: Dmitry Shmidt <dimitrysh@google.com>
Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com>
Signed-off-by: Franky Lin <franky.lin@broadcom.com>
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
(cherry picked from commit 7742fce4c007141617dab9bcb90034b3c0fe2347)

Change-Id: I72e275babbca6e19b05ce73b125767a43ec6ff98

drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c

index 4157c90ad9736b9b20ab086585eca22ff80a60c9..3e888a030d03f0c6c9eb78ad3c80b3495d1d106e 100644 (file)
@@ -2841,7 +2841,6 @@ static s32 brcmf_inform_single_bss(struct brcmf_cfg80211_info *cfg,
                                   struct brcmf_bss_info_le *bi)
 {
        struct wiphy *wiphy = cfg_to_wiphy(cfg);
-       struct ieee80211_channel *notify_channel;
        struct cfg80211_bss *bss;
        struct ieee80211_supported_band *band;
        struct brcmu_chan ch;
@@ -2851,7 +2850,7 @@ static s32 brcmf_inform_single_bss(struct brcmf_cfg80211_info *cfg,
        u16 notify_interval;
        u8 *notify_ie;
        size_t notify_ielen;
-       s32 notify_signal;
+       struct cfg80211_inform_bss bss_data = { 0 };
 
        if (le32_to_cpu(bi->length) > WL_BSS_INFO_MAX) {
                brcmf_err("Bss info is larger than buffer. Discarding\n");
@@ -2871,27 +2870,28 @@ static s32 brcmf_inform_single_bss(struct brcmf_cfg80211_info *cfg,
                band = wiphy->bands[NL80211_BAND_5GHZ];
 
        freq = ieee80211_channel_to_frequency(channel, band->band);
-       notify_channel = ieee80211_get_channel(wiphy, freq);
+       bss_data.chan = ieee80211_get_channel(wiphy, freq);
+       bss_data.scan_width = NL80211_BSS_CHAN_WIDTH_20;
+       bss_data.boottime_ns = ktime_to_ns(ktime_get_boottime());
 
        notify_capability = le16_to_cpu(bi->capability);
        notify_interval = le16_to_cpu(bi->beacon_period);
        notify_ie = (u8 *)bi + le16_to_cpu(bi->ie_offset);
        notify_ielen = le32_to_cpu(bi->ie_length);
-       notify_signal = (s16)le16_to_cpu(bi->RSSI) * 100;
+       bss_data.signal = (s16)le16_to_cpu(bi->RSSI) * 100;
 
        brcmf_dbg(CONN, "bssid: %pM\n", bi->BSSID);
        brcmf_dbg(CONN, "Channel: %d(%d)\n", channel, freq);
        brcmf_dbg(CONN, "Capability: %X\n", notify_capability);
        brcmf_dbg(CONN, "Beacon interval: %d\n", notify_interval);
-       brcmf_dbg(CONN, "Signal: %d\n", notify_signal);
-
-       bss = cfg80211_inform_bss(wiphy, notify_channel,
-                                 CFG80211_BSS_FTYPE_UNKNOWN,
-                                 (const u8 *)bi->BSSID,
-                                 0, notify_capability,
-                                 notify_interval, notify_ie,
-                                 notify_ielen, notify_signal,
-                                 GFP_KERNEL);
+       brcmf_dbg(CONN, "Signal: %d\n", bss_data.signal);
+
+       bss = cfg80211_inform_bss_data(wiphy, &bss_data,
+                                      CFG80211_BSS_FTYPE_UNKNOWN,
+                                      (const u8 *)bi->BSSID,
+                                      0, notify_capability,
+                                      notify_interval, notify_ie,
+                                      notify_ielen, GFP_KERNEL);
 
        if (!bss)
                return -ENOMEM;