OSDN Git Service

wil6210: report boottime_ns in scan results
authorMaya Erez <merez@codeaurora.org>
Tue, 10 Sep 2019 13:46:36 +0000 (16:46 +0300)
committerKalle Valo <kvalo@codeaurora.org>
Thu, 12 Sep 2019 15:07:24 +0000 (18:07 +0300)
Call cfg80211_inform_bss_frame_data to report cfg80211 on the
boottime_ns in order to prevent the scan results filtering due to
aging.

Signed-off-by: Maya Erez <merez@codeaurora.org>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/ath/wil6210/wmi.c

index 88d9e5a..153b844 100644 (file)
@@ -878,6 +878,12 @@ static void wmi_evt_rx_mgmt(struct wil6210_vif *vif, int id, void *d, int len)
 
        if (ieee80211_is_beacon(fc) || ieee80211_is_probe_resp(fc)) {
                struct cfg80211_bss *bss;
+               struct cfg80211_inform_bss bss_data = {
+                       .chan = channel,
+                       .scan_width = NL80211_BSS_CHAN_WIDTH_20,
+                       .signal = signal,
+                       .boottime_ns = ktime_to_ns(ktime_get_boottime()),
+               };
                u64 tsf = le64_to_cpu(rx_mgmt_frame->u.beacon.timestamp);
                u16 cap = le16_to_cpu(rx_mgmt_frame->u.beacon.capab_info);
                u16 bi = le16_to_cpu(rx_mgmt_frame->u.beacon.beacon_int);
@@ -892,8 +898,9 @@ static void wmi_evt_rx_mgmt(struct wil6210_vif *vif, int id, void *d, int len)
 
                wil_dbg_wmi(wil, "Capability info : 0x%04x\n", cap);
 
-               bss = cfg80211_inform_bss_frame(wiphy, channel, rx_mgmt_frame,
-                                               d_len, signal, GFP_KERNEL);
+               bss = cfg80211_inform_bss_frame_data(wiphy, &bss_data,
+                                                    rx_mgmt_frame,
+                                                    d_len, GFP_KERNEL);
                if (bss) {
                        wil_dbg_wmi(wil, "Added BSS %pM\n",
                                    rx_mgmt_frame->bssid);
@@ -1391,6 +1398,10 @@ wmi_evt_sched_scan_result(struct wil6210_vif *vif, int id, void *d, int len)
        __le16 fc;
        u32 d_len;
        struct cfg80211_bss *bss;
+       struct cfg80211_inform_bss bss_data = {
+               .scan_width = NL80211_BSS_CHAN_WIDTH_20,
+               .boottime_ns = ktime_to_ns(ktime_get_boottime()),
+       };
 
        if (flen < 0) {
                wil_err(wil, "sched scan result event too short, len %d\n",
@@ -1433,8 +1444,10 @@ wmi_evt_sched_scan_result(struct wil6210_vif *vif, int id, void *d, int len)
                return;
        }
 
-       bss = cfg80211_inform_bss_frame(wiphy, channel, rx_mgmt_frame,
-                                       d_len, signal, GFP_KERNEL);
+       bss_data.signal = signal;
+       bss_data.chan = channel;
+       bss = cfg80211_inform_bss_frame_data(wiphy, &bss_data, rx_mgmt_frame,
+                                            d_len, GFP_KERNEL);
        if (bss) {
                wil_dbg_wmi(wil, "Added BSS %pM\n", rx_mgmt_frame->bssid);
                cfg80211_put_bss(wiphy, bss);