aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/scan.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/mac80211/scan.c')
-rw-r--r--net/mac80211/scan.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/net/mac80211/scan.c b/net/mac80211/scan.c
index 7f80f0a5026e..6d0b89e4aa31 100644
--- a/net/mac80211/scan.c
+++ b/net/mac80211/scan.c
@@ -34,7 +34,8 @@ void ieee80211_rx_bss_put(struct ieee80211_local *local,
34{ 34{
35 if (!bss) 35 if (!bss)
36 return; 36 return;
37 cfg80211_put_bss(container_of((void *)bss, struct cfg80211_bss, priv)); 37 cfg80211_put_bss(local->hw.wiphy,
38 container_of((void *)bss, struct cfg80211_bss, priv));
38} 39}
39 40
40static bool is_uapsd_supported(struct ieee802_11_elems *elems) 41static bool is_uapsd_supported(struct ieee802_11_elems *elems)
@@ -79,7 +80,10 @@ ieee80211_bss_info_update(struct ieee80211_local *local,
79 80
80 bss = (void *)cbss->priv; 81 bss = (void *)cbss->priv;
81 82
82 bss->device_ts = rx_status->device_timestamp; 83 if (beacon)
84 bss->device_ts_beacon = rx_status->device_timestamp;
85 else
86 bss->device_ts_presp = rx_status->device_timestamp;
83 87
84 if (elems->parse_error) { 88 if (elems->parse_error) {
85 if (beacon) 89 if (beacon)
@@ -330,6 +334,9 @@ static int ieee80211_start_sw_scan(struct ieee80211_local *local)
330 334
331 ieee80211_offchannel_stop_vifs(local); 335 ieee80211_offchannel_stop_vifs(local);
332 336
337 /* ensure nullfunc is transmitted before leaving operating channel */
338 drv_flush(local, false);
339
333 ieee80211_configure_filter(local); 340 ieee80211_configure_filter(local);
334 341
335 /* We need to set power level at maximum rate for scanning. */ 342 /* We need to set power level at maximum rate for scanning. */
@@ -378,6 +385,11 @@ static void ieee80211_scan_state_send_probe(struct ieee80211_local *local,
378 int i; 385 int i;
379 struct ieee80211_sub_if_data *sdata; 386 struct ieee80211_sub_if_data *sdata;
380 enum ieee80211_band band = local->hw.conf.channel->band; 387 enum ieee80211_band band = local->hw.conf.channel->band;
388 u32 tx_flags;
389
390 tx_flags = IEEE80211_TX_INTFL_OFFCHAN_TX_OK;
391 if (local->scan_req->no_cck)
392 tx_flags |= IEEE80211_TX_CTL_NO_CCK_RATE;
381 393
382 sdata = rcu_dereference_protected(local->scan_sdata, 394 sdata = rcu_dereference_protected(local->scan_sdata,
383 lockdep_is_held(&local->mtx)); 395 lockdep_is_held(&local->mtx));
@@ -389,9 +401,7 @@ static void ieee80211_scan_state_send_probe(struct ieee80211_local *local,
389 local->scan_req->ssids[i].ssid_len, 401 local->scan_req->ssids[i].ssid_len,
390 local->scan_req->ie, local->scan_req->ie_len, 402 local->scan_req->ie, local->scan_req->ie_len,
391 local->scan_req->rates[band], false, 403 local->scan_req->rates[band], false,
392 local->scan_req->no_cck ? 404 tx_flags, local->hw.conf.channel, true);
393 IEEE80211_TX_CTL_NO_CCK_RATE : 0,
394 local->hw.conf.channel, true);
395 405
396 /* 406 /*
397 * After sending probe requests, wait for probe responses 407 * After sending probe requests, wait for probe responses