Linux Audio

Check our new training course

Loading...
v5.9
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * Scanning implementation
   4 *
   5 * Copyright 2003, Jouni Malinen <jkmaline@cc.hut.fi>
   6 * Copyright 2004, Instant802 Networks, Inc.
   7 * Copyright 2005, Devicescape Software, Inc.
   8 * Copyright 2006-2007	Jiri Benc <jbenc@suse.cz>
   9 * Copyright 2007, Michael Wu <flamingice@sourmilk.net>
  10 * Copyright 2013-2015  Intel Mobile Communications GmbH
  11 * Copyright 2016-2017  Intel Deutschland GmbH
  12 * Copyright (C) 2018-2019 Intel Corporation
 
 
  13 */
  14
  15#include <linux/if_arp.h>
  16#include <linux/etherdevice.h>
  17#include <linux/rtnetlink.h>
  18#include <net/sch_generic.h>
  19#include <linux/slab.h>
  20#include <linux/export.h>
  21#include <linux/random.h>
  22#include <net/mac80211.h>
  23
  24#include "ieee80211_i.h"
  25#include "driver-ops.h"
  26#include "mesh.h"
  27
  28#define IEEE80211_PROBE_DELAY (HZ / 33)
  29#define IEEE80211_CHANNEL_TIME (HZ / 33)
  30#define IEEE80211_PASSIVE_CHANNEL_TIME (HZ / 9)
  31
  32void ieee80211_rx_bss_put(struct ieee80211_local *local,
  33			  struct ieee80211_bss *bss)
  34{
  35	if (!bss)
  36		return;
  37	cfg80211_put_bss(local->hw.wiphy,
  38			 container_of((void *)bss, struct cfg80211_bss, priv));
  39}
  40
  41static bool is_uapsd_supported(struct ieee802_11_elems *elems)
  42{
  43	u8 qos_info;
  44
  45	if (elems->wmm_info && elems->wmm_info_len == 7
  46	    && elems->wmm_info[5] == 1)
  47		qos_info = elems->wmm_info[6];
  48	else if (elems->wmm_param && elems->wmm_param_len == 24
  49		 && elems->wmm_param[5] == 1)
  50		qos_info = elems->wmm_param[6];
  51	else
  52		/* no valid wmm information or parameter element found */
  53		return false;
  54
  55	return qos_info & IEEE80211_WMM_IE_AP_QOSINFO_UAPSD;
  56}
  57
  58static void
  59ieee80211_update_bss_from_elems(struct ieee80211_local *local,
  60				struct ieee80211_bss *bss,
  61				struct ieee802_11_elems *elems,
  62				struct ieee80211_rx_status *rx_status,
  63				bool beacon)
  64{
 
 
 
  65	int clen, srlen;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  66
  67	if (beacon)
  68		bss->device_ts_beacon = rx_status->device_timestamp;
  69	else
  70		bss->device_ts_presp = rx_status->device_timestamp;
  71
  72	if (elems->parse_error) {
  73		if (beacon)
  74			bss->corrupt_data |= IEEE80211_BSS_CORRUPT_BEACON;
  75		else
  76			bss->corrupt_data |= IEEE80211_BSS_CORRUPT_PROBE_RESP;
  77	} else {
  78		if (beacon)
  79			bss->corrupt_data &= ~IEEE80211_BSS_CORRUPT_BEACON;
  80		else
  81			bss->corrupt_data &= ~IEEE80211_BSS_CORRUPT_PROBE_RESP;
  82	}
  83
  84	/* save the ERP value so that it is available at association time */
  85	if (elems->erp_info && (!elems->parse_error ||
  86				!(bss->valid_data & IEEE80211_BSS_VALID_ERP))) {
  87		bss->erp_value = elems->erp_info[0];
  88		bss->has_erp_value = true;
  89		if (!elems->parse_error)
  90			bss->valid_data |= IEEE80211_BSS_VALID_ERP;
  91	}
  92
  93	/* replace old supported rates if we get new values */
  94	if (!elems->parse_error ||
  95	    !(bss->valid_data & IEEE80211_BSS_VALID_RATES)) {
  96		srlen = 0;
  97		if (elems->supp_rates) {
  98			clen = IEEE80211_MAX_SUPP_RATES;
  99			if (clen > elems->supp_rates_len)
 100				clen = elems->supp_rates_len;
 101			memcpy(bss->supp_rates, elems->supp_rates, clen);
 102			srlen += clen;
 103		}
 104		if (elems->ext_supp_rates) {
 105			clen = IEEE80211_MAX_SUPP_RATES - srlen;
 106			if (clen > elems->ext_supp_rates_len)
 107				clen = elems->ext_supp_rates_len;
 108			memcpy(bss->supp_rates + srlen, elems->ext_supp_rates,
 109			       clen);
 110			srlen += clen;
 111		}
 112		if (srlen) {
 113			bss->supp_rates_len = srlen;
 114			if (!elems->parse_error)
 115				bss->valid_data |= IEEE80211_BSS_VALID_RATES;
 116		}
 117	}
 118
 119	if (!elems->parse_error ||
 120	    !(bss->valid_data & IEEE80211_BSS_VALID_WMM)) {
 121		bss->wmm_used = elems->wmm_param || elems->wmm_info;
 122		bss->uapsd_supported = is_uapsd_supported(elems);
 123		if (!elems->parse_error)
 124			bss->valid_data |= IEEE80211_BSS_VALID_WMM;
 125	}
 126
 127	if (beacon) {
 128		struct ieee80211_supported_band *sband =
 129			local->hw.wiphy->bands[rx_status->band];
 130		if (!(rx_status->encoding == RX_ENC_HT) &&
 131		    !(rx_status->encoding == RX_ENC_VHT))
 132			bss->beacon_rate =
 133				&sband->bitrates[rx_status->rate_idx];
 134	}
 135
 136	if (elems->vht_cap_elem)
 137		bss->vht_cap_info =
 138			le32_to_cpu(elems->vht_cap_elem->vht_cap_info);
 139	else
 140		bss->vht_cap_info = 0;
 141}
 142
 143struct ieee80211_bss *
 144ieee80211_bss_info_update(struct ieee80211_local *local,
 145			  struct ieee80211_rx_status *rx_status,
 146			  struct ieee80211_mgmt *mgmt, size_t len,
 147			  struct ieee80211_channel *channel)
 148{
 149	bool beacon = ieee80211_is_beacon(mgmt->frame_control);
 150	struct cfg80211_bss *cbss, *non_tx_cbss;
 151	struct ieee80211_bss *bss, *non_tx_bss;
 152	struct cfg80211_inform_bss bss_meta = {
 153		.boottime_ns = rx_status->boottime_ns,
 154	};
 155	bool signal_valid;
 156	struct ieee80211_sub_if_data *scan_sdata;
 157	struct ieee802_11_elems elems;
 158	size_t baselen;
 159	u8 *elements;
 160
 161	if (rx_status->flag & RX_FLAG_NO_SIGNAL_VAL)
 162		bss_meta.signal = 0; /* invalid signal indication */
 163	else if (ieee80211_hw_check(&local->hw, SIGNAL_DBM))
 164		bss_meta.signal = rx_status->signal * 100;
 165	else if (ieee80211_hw_check(&local->hw, SIGNAL_UNSPEC))
 166		bss_meta.signal = (rx_status->signal * 100) / local->hw.max_signal;
 167
 168	bss_meta.scan_width = NL80211_BSS_CHAN_WIDTH_20;
 169	if (rx_status->bw == RATE_INFO_BW_5)
 170		bss_meta.scan_width = NL80211_BSS_CHAN_WIDTH_5;
 171	else if (rx_status->bw == RATE_INFO_BW_10)
 172		bss_meta.scan_width = NL80211_BSS_CHAN_WIDTH_10;
 173
 174	bss_meta.chan = channel;
 175
 176	rcu_read_lock();
 177	scan_sdata = rcu_dereference(local->scan_sdata);
 178	if (scan_sdata && scan_sdata->vif.type == NL80211_IFTYPE_STATION &&
 179	    scan_sdata->vif.bss_conf.assoc &&
 180	    ieee80211_have_rx_timestamp(rx_status)) {
 181		bss_meta.parent_tsf =
 182			ieee80211_calculate_rx_timestamp(local, rx_status,
 183							 len + FCS_LEN, 24);
 184		ether_addr_copy(bss_meta.parent_bssid,
 185				scan_sdata->vif.bss_conf.bssid);
 186	}
 187	rcu_read_unlock();
 188
 189	cbss = cfg80211_inform_bss_frame_data(local->hw.wiphy, &bss_meta,
 190					      mgmt, len, GFP_ATOMIC);
 191	if (!cbss)
 192		return NULL;
 193
 194	if (ieee80211_is_probe_resp(mgmt->frame_control)) {
 195		elements = mgmt->u.probe_resp.variable;
 196		baselen = offsetof(struct ieee80211_mgmt,
 197				   u.probe_resp.variable);
 198	} else {
 199		baselen = offsetof(struct ieee80211_mgmt, u.beacon.variable);
 200		elements = mgmt->u.beacon.variable;
 201	}
 202
 203	if (baselen > len)
 204		return NULL;
 205
 206	ieee802_11_parse_elems(elements, len - baselen, false, &elems,
 207			       mgmt->bssid, cbss->bssid);
 208
 209	/* In case the signal is invalid update the status */
 210	signal_valid = channel == cbss->channel;
 211	if (!signal_valid)
 212		rx_status->flag |= RX_FLAG_NO_SIGNAL_VAL;
 213
 214	bss = (void *)cbss->priv;
 215	ieee80211_update_bss_from_elems(local, bss, &elems, rx_status, beacon);
 216
 217	list_for_each_entry(non_tx_cbss, &cbss->nontrans_list, nontrans_list) {
 218		non_tx_bss = (void *)non_tx_cbss->priv;
 219
 220		ieee80211_update_bss_from_elems(local, non_tx_bss, &elems,
 221						rx_status, beacon);
 222	}
 223
 224	return bss;
 225}
 226
 227static bool ieee80211_scan_accept_presp(struct ieee80211_sub_if_data *sdata,
 228					u32 scan_flags, const u8 *da)
 229{
 230	if (!sdata)
 231		return false;
 232	/* accept broadcast for OCE */
 233	if (scan_flags & NL80211_SCAN_FLAG_ACCEPT_BCAST_PROBE_RESP &&
 234	    is_broadcast_ether_addr(da))
 235		return true;
 236	if (scan_flags & NL80211_SCAN_FLAG_RANDOM_ADDR)
 237		return true;
 238	return ether_addr_equal(da, sdata->vif.addr);
 239}
 240
 241void ieee80211_scan_rx(struct ieee80211_local *local, struct sk_buff *skb)
 242{
 243	struct ieee80211_rx_status *rx_status = IEEE80211_SKB_RXCB(skb);
 244	struct ieee80211_sub_if_data *sdata1, *sdata2;
 245	struct ieee80211_mgmt *mgmt = (void *)skb->data;
 246	struct ieee80211_bss *bss;
 
 247	struct ieee80211_channel *channel;
 
 
 248
 249	if (skb->len < 24 ||
 250	    (!ieee80211_is_probe_resp(mgmt->frame_control) &&
 251	     !ieee80211_is_beacon(mgmt->frame_control)))
 252		return;
 253
 254	sdata1 = rcu_dereference(local->scan_sdata);
 255	sdata2 = rcu_dereference(local->sched_scan_sdata);
 256
 257	if (likely(!sdata1 && !sdata2))
 258		return;
 259
 260	if (ieee80211_is_probe_resp(mgmt->frame_control)) {
 261		struct cfg80211_scan_request *scan_req;
 262		struct cfg80211_sched_scan_request *sched_scan_req;
 263		u32 scan_req_flags = 0, sched_scan_req_flags = 0;
 264
 265		scan_req = rcu_dereference(local->scan_req);
 266		sched_scan_req = rcu_dereference(local->sched_scan_req);
 267
 268		if (scan_req)
 269			scan_req_flags = scan_req->flags;
 270
 271		if (sched_scan_req)
 272			sched_scan_req_flags = sched_scan_req->flags;
 273
 274		/* ignore ProbeResp to foreign address or non-bcast (OCE)
 275		 * unless scanning with randomised address
 276		 */
 277		if (!ieee80211_scan_accept_presp(sdata1, scan_req_flags,
 278						 mgmt->da) &&
 279		    !ieee80211_scan_accept_presp(sdata2, sched_scan_req_flags,
 280						 mgmt->da))
 
 
 281			return;
 
 
 
 
 
 
 282	}
 283
 284	channel = ieee80211_get_channel_khz(local->hw.wiphy,
 285					ieee80211_rx_status_to_khz(rx_status));
 
 
 
 
 286
 287	if (!channel || channel->flags & IEEE80211_CHAN_DISABLED)
 288		return;
 289
 290	bss = ieee80211_bss_info_update(local, rx_status,
 291					mgmt, skb->len,
 292					channel);
 293	if (bss)
 294		ieee80211_rx_bss_put(local, bss);
 295}
 296
 297static void
 298ieee80211_prepare_scan_chandef(struct cfg80211_chan_def *chandef,
 299			       enum nl80211_bss_scan_width scan_width)
 300{
 301	memset(chandef, 0, sizeof(*chandef));
 302	switch (scan_width) {
 303	case NL80211_BSS_CHAN_WIDTH_5:
 304		chandef->width = NL80211_CHAN_WIDTH_5;
 305		break;
 306	case NL80211_BSS_CHAN_WIDTH_10:
 307		chandef->width = NL80211_CHAN_WIDTH_10;
 308		break;
 309	default:
 310		chandef->width = NL80211_CHAN_WIDTH_20_NOHT;
 311		break;
 312	}
 313}
 314
 315/* return false if no more work */
 316static bool ieee80211_prep_hw_scan(struct ieee80211_sub_if_data *sdata)
 317{
 318	struct ieee80211_local *local = sdata->local;
 319	struct cfg80211_scan_request *req;
 320	struct cfg80211_chan_def chandef;
 321	u8 bands_used = 0;
 322	int i, ielen, n_chans;
 323	u32 flags = 0;
 324
 325	req = rcu_dereference_protected(local->scan_req,
 326					lockdep_is_held(&local->mtx));
 327
 328	if (test_bit(SCAN_HW_CANCELLED, &local->scanning))
 329		return false;
 330
 331	if (ieee80211_hw_check(&local->hw, SINGLE_SCAN_ON_ALL_BANDS)) {
 332		for (i = 0; i < req->n_channels; i++) {
 333			local->hw_scan_req->req.channels[i] = req->channels[i];
 334			bands_used |= BIT(req->channels[i]->band);
 335		}
 336
 337		n_chans = req->n_channels;
 338	} else {
 339		do {
 340			if (local->hw_scan_band == NUM_NL80211_BANDS)
 341				return false;
 342
 343			n_chans = 0;
 344
 345			for (i = 0; i < req->n_channels; i++) {
 346				if (req->channels[i]->band !=
 347				    local->hw_scan_band)
 348					continue;
 349				local->hw_scan_req->req.channels[n_chans] =
 350							req->channels[i];
 351				n_chans++;
 352				bands_used |= BIT(req->channels[i]->band);
 353			}
 354
 355			local->hw_scan_band++;
 356		} while (!n_chans);
 357	}
 358
 359	local->hw_scan_req->req.n_channels = n_chans;
 360	ieee80211_prepare_scan_chandef(&chandef, req->scan_width);
 361
 362	if (req->flags & NL80211_SCAN_FLAG_MIN_PREQ_CONTENT)
 363		flags |= IEEE80211_PROBE_FLAG_MIN_CONTENT;
 364
 365	ielen = ieee80211_build_preq_ies(sdata,
 366					 (u8 *)local->hw_scan_req->req.ie,
 367					 local->hw_scan_ies_bufsize,
 368					 &local->hw_scan_req->ies,
 369					 req->ie, req->ie_len,
 370					 bands_used, req->rates, &chandef,
 371					 flags);
 372	local->hw_scan_req->req.ie_len = ielen;
 373	local->hw_scan_req->req.no_cck = req->no_cck;
 374	ether_addr_copy(local->hw_scan_req->req.mac_addr, req->mac_addr);
 375	ether_addr_copy(local->hw_scan_req->req.mac_addr_mask,
 376			req->mac_addr_mask);
 377	ether_addr_copy(local->hw_scan_req->req.bssid, req->bssid);
 378
 379	return true;
 380}
 381
 382static void __ieee80211_scan_completed(struct ieee80211_hw *hw, bool aborted)
 383{
 384	struct ieee80211_local *local = hw_to_local(hw);
 385	bool hw_scan = test_bit(SCAN_HW_SCANNING, &local->scanning);
 386	bool was_scanning = local->scanning;
 387	struct cfg80211_scan_request *scan_req;
 388	struct ieee80211_sub_if_data *scan_sdata;
 389	struct ieee80211_sub_if_data *sdata;
 390
 391	lockdep_assert_held(&local->mtx);
 392
 393	/*
 394	 * It's ok to abort a not-yet-running scan (that
 395	 * we have one at all will be verified by checking
 396	 * local->scan_req next), but not to complete it
 397	 * successfully.
 398	 */
 399	if (WARN_ON(!local->scanning && !aborted))
 400		aborted = true;
 401
 402	if (WARN_ON(!local->scan_req))
 403		return;
 404
 405	scan_sdata = rcu_dereference_protected(local->scan_sdata,
 406					       lockdep_is_held(&local->mtx));
 407
 408	if (hw_scan && !aborted &&
 409	    !ieee80211_hw_check(&local->hw, SINGLE_SCAN_ON_ALL_BANDS) &&
 410	    ieee80211_prep_hw_scan(scan_sdata)) {
 411		int rc;
 412
 413		rc = drv_hw_scan(local,
 414			rcu_dereference_protected(local->scan_sdata,
 415						  lockdep_is_held(&local->mtx)),
 416			local->hw_scan_req);
 417
 418		if (rc == 0)
 419			return;
 420
 421		/* HW scan failed and is going to be reported as aborted,
 422		 * so clear old scan info.
 423		 */
 424		memset(&local->scan_info, 0, sizeof(local->scan_info));
 425		aborted = true;
 426	}
 427
 428	kfree(local->hw_scan_req);
 429	local->hw_scan_req = NULL;
 430
 431	scan_req = rcu_dereference_protected(local->scan_req,
 432					     lockdep_is_held(&local->mtx));
 433
 434	if (scan_req != local->int_scan_req) {
 435		local->scan_info.aborted = aborted;
 436		cfg80211_scan_done(scan_req, &local->scan_info);
 437	}
 438	RCU_INIT_POINTER(local->scan_req, NULL);
 
 
 
 439	RCU_INIT_POINTER(local->scan_sdata, NULL);
 440
 441	local->scanning = 0;
 442	local->scan_chandef.chan = NULL;
 443
 444	/* Set power back to normal operating levels. */
 445	ieee80211_hw_config(local, 0);
 446
 447	if (!hw_scan) {
 448		ieee80211_configure_filter(local);
 449		drv_sw_scan_complete(local, scan_sdata);
 450		ieee80211_offchannel_return(local);
 451	}
 452
 453	ieee80211_recalc_idle(local);
 454
 455	ieee80211_mlme_notify_scan_completed(local);
 456	ieee80211_ibss_notify_scan_completed(local);
 457
 458	/* Requeue all the work that might have been ignored while
 459	 * the scan was in progress; if there was none this will
 460	 * just be a no-op for the particular interface.
 461	 */
 462	list_for_each_entry_rcu(sdata, &local->interfaces, list) {
 463		if (ieee80211_sdata_running(sdata))
 464			ieee80211_queue_work(&sdata->local->hw, &sdata->work);
 465	}
 466
 467	if (was_scanning)
 468		ieee80211_start_next_roc(local);
 469}
 470
 471void ieee80211_scan_completed(struct ieee80211_hw *hw,
 472			      struct cfg80211_scan_info *info)
 473{
 474	struct ieee80211_local *local = hw_to_local(hw);
 475
 476	trace_api_scan_completed(local, info->aborted);
 477
 478	set_bit(SCAN_COMPLETED, &local->scanning);
 479	if (info->aborted)
 480		set_bit(SCAN_ABORTED, &local->scanning);
 481
 482	memcpy(&local->scan_info, info, sizeof(*info));
 483
 484	ieee80211_queue_delayed_work(&local->hw, &local->scan_work, 0);
 485}
 486EXPORT_SYMBOL(ieee80211_scan_completed);
 487
 488static int ieee80211_start_sw_scan(struct ieee80211_local *local,
 489				   struct ieee80211_sub_if_data *sdata)
 490{
 491	/* Software scan is not supported in multi-channel cases */
 492	if (local->use_chanctx)
 493		return -EOPNOTSUPP;
 494
 495	/*
 496	 * Hardware/driver doesn't support hw_scan, so use software
 497	 * scanning instead. First send a nullfunc frame with power save
 498	 * bit on so that AP will buffer the frames for us while we are not
 499	 * listening, then send probe requests to each channel and wait for
 500	 * the responses. After all channels are scanned, tune back to the
 501	 * original channel and send a nullfunc frame with power save bit
 502	 * off to trigger the AP to send us all the buffered frames.
 503	 *
 504	 * Note that while local->sw_scanning is true everything else but
 505	 * nullfunc frames and probe requests will be dropped in
 506	 * ieee80211_tx_h_check_assoc().
 507	 */
 508	drv_sw_scan_start(local, sdata, local->scan_addr);
 509
 510	local->leave_oper_channel_time = jiffies;
 511	local->next_scan_state = SCAN_DECISION;
 512	local->scan_channel_idx = 0;
 513
 514	ieee80211_offchannel_stop_vifs(local);
 515
 516	/* ensure nullfunc is transmitted before leaving operating channel */
 517	ieee80211_flush_queues(local, NULL, false);
 518
 519	ieee80211_configure_filter(local);
 520
 521	/* We need to set power level at maximum rate for scanning. */
 522	ieee80211_hw_config(local, 0);
 523
 524	ieee80211_queue_delayed_work(&local->hw,
 525				     &local->scan_work, 0);
 526
 527	return 0;
 528}
 529
 530static bool __ieee80211_can_leave_ch(struct ieee80211_sub_if_data *sdata)
 531{
 532	struct ieee80211_local *local = sdata->local;
 533	struct ieee80211_sub_if_data *sdata_iter;
 534
 535	if (!ieee80211_is_radar_required(local))
 536		return true;
 537
 538	if (!regulatory_pre_cac_allowed(local->hw.wiphy))
 539		return false;
 540
 541	mutex_lock(&local->iflist_mtx);
 542	list_for_each_entry(sdata_iter, &local->interfaces, list) {
 543		if (sdata_iter->wdev.cac_started) {
 544			mutex_unlock(&local->iflist_mtx);
 545			return false;
 546		}
 547	}
 548	mutex_unlock(&local->iflist_mtx);
 549
 550	return true;
 551}
 552
 553static bool ieee80211_can_scan(struct ieee80211_local *local,
 554			       struct ieee80211_sub_if_data *sdata)
 555{
 556	if (!__ieee80211_can_leave_ch(sdata))
 557		return false;
 558
 559	if (!list_empty(&local->roc_list))
 560		return false;
 561
 562	if (sdata->vif.type == NL80211_IFTYPE_STATION &&
 563	    sdata->u.mgd.flags & IEEE80211_STA_CONNECTION_POLL)
 564		return false;
 565
 566	return true;
 567}
 568
 569void ieee80211_run_deferred_scan(struct ieee80211_local *local)
 570{
 571	lockdep_assert_held(&local->mtx);
 572
 573	if (!local->scan_req || local->scanning)
 574		return;
 575
 576	if (!ieee80211_can_scan(local,
 577				rcu_dereference_protected(
 578					local->scan_sdata,
 579					lockdep_is_held(&local->mtx))))
 580		return;
 581
 582	ieee80211_queue_delayed_work(&local->hw, &local->scan_work,
 583				     round_jiffies_relative(0));
 584}
 585
 586static void ieee80211_send_scan_probe_req(struct ieee80211_sub_if_data *sdata,
 587					  const u8 *src, const u8 *dst,
 588					  const u8 *ssid, size_t ssid_len,
 589					  const u8 *ie, size_t ie_len,
 590					  u32 ratemask, u32 flags, u32 tx_flags,
 591					  struct ieee80211_channel *channel)
 592{
 593	struct sk_buff *skb;
 594
 595	skb = ieee80211_build_probe_req(sdata, src, dst, ratemask, channel,
 596					ssid, ssid_len,
 597					ie, ie_len, flags);
 598
 599	if (skb) {
 600		if (flags & IEEE80211_PROBE_FLAG_RANDOM_SN) {
 601			struct ieee80211_hdr *hdr = (void *)skb->data;
 602			struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
 603			u16 sn = get_random_u32();
 604
 605			info->control.flags |= IEEE80211_TX_CTRL_NO_SEQNO;
 606			hdr->seq_ctrl =
 607				cpu_to_le16(IEEE80211_SN_TO_SEQ(sn));
 608		}
 609		IEEE80211_SKB_CB(skb)->flags |= tx_flags;
 610		ieee80211_tx_skb_tid_band(sdata, skb, 7, channel->band);
 611	}
 612}
 613
 614static void ieee80211_scan_state_send_probe(struct ieee80211_local *local,
 615					    unsigned long *next_delay)
 616{
 617	int i;
 618	struct ieee80211_sub_if_data *sdata;
 619	struct cfg80211_scan_request *scan_req;
 620	enum nl80211_band band = local->hw.conf.chandef.chan->band;
 621	u32 flags = 0, tx_flags;
 622
 623	scan_req = rcu_dereference_protected(local->scan_req,
 624					     lockdep_is_held(&local->mtx));
 625
 626	tx_flags = IEEE80211_TX_INTFL_OFFCHAN_TX_OK;
 627	if (scan_req->no_cck)
 628		tx_flags |= IEEE80211_TX_CTL_NO_CCK_RATE;
 629	if (scan_req->flags & NL80211_SCAN_FLAG_MIN_PREQ_CONTENT)
 630		flags |= IEEE80211_PROBE_FLAG_MIN_CONTENT;
 631	if (scan_req->flags & NL80211_SCAN_FLAG_RANDOM_SN)
 632		flags |= IEEE80211_PROBE_FLAG_RANDOM_SN;
 633
 634	sdata = rcu_dereference_protected(local->scan_sdata,
 635					  lockdep_is_held(&local->mtx));
 636
 637	for (i = 0; i < scan_req->n_ssids; i++)
 638		ieee80211_send_scan_probe_req(
 639			sdata, local->scan_addr, scan_req->bssid,
 640			scan_req->ssids[i].ssid, scan_req->ssids[i].ssid_len,
 641			scan_req->ie, scan_req->ie_len,
 642			scan_req->rates[band], flags,
 643			tx_flags, local->hw.conf.chandef.chan);
 644
 645	/*
 646	 * After sending probe requests, wait for probe responses
 647	 * on the channel.
 648	 */
 649	*next_delay = IEEE80211_CHANNEL_TIME;
 650	local->next_scan_state = SCAN_DECISION;
 651}
 652
 653static int __ieee80211_start_scan(struct ieee80211_sub_if_data *sdata,
 654				  struct cfg80211_scan_request *req)
 655{
 656	struct ieee80211_local *local = sdata->local;
 657	bool hw_scan = local->ops->hw_scan;
 658	int rc;
 659
 660	lockdep_assert_held(&local->mtx);
 661
 662	if (local->scan_req)
 663		return -EBUSY;
 664
 665	if (!__ieee80211_can_leave_ch(sdata))
 666		return -EBUSY;
 667
 668	if (!ieee80211_can_scan(local, sdata)) {
 669		/* wait for the work to finish/time out */
 670		rcu_assign_pointer(local->scan_req, req);
 671		rcu_assign_pointer(local->scan_sdata, sdata);
 672		return 0;
 673	}
 674
 675 again:
 676	if (hw_scan) {
 677		u8 *ies;
 678
 679		local->hw_scan_ies_bufsize = local->scan_ies_len + req->ie_len;
 680
 681		if (ieee80211_hw_check(&local->hw, SINGLE_SCAN_ON_ALL_BANDS)) {
 682			int i, n_bands = 0;
 683			u8 bands_counted = 0;
 684
 685			for (i = 0; i < req->n_channels; i++) {
 686				if (bands_counted & BIT(req->channels[i]->band))
 687					continue;
 688				bands_counted |= BIT(req->channels[i]->band);
 689				n_bands++;
 690			}
 691
 692			local->hw_scan_ies_bufsize *= n_bands;
 693		}
 694
 695		local->hw_scan_req = kmalloc(
 696				sizeof(*local->hw_scan_req) +
 697				req->n_channels * sizeof(req->channels[0]) +
 698				local->hw_scan_ies_bufsize, GFP_KERNEL);
 699		if (!local->hw_scan_req)
 700			return -ENOMEM;
 701
 702		local->hw_scan_req->req.ssids = req->ssids;
 703		local->hw_scan_req->req.n_ssids = req->n_ssids;
 704		ies = (u8 *)local->hw_scan_req +
 705			sizeof(*local->hw_scan_req) +
 706			req->n_channels * sizeof(req->channels[0]);
 707		local->hw_scan_req->req.ie = ies;
 708		local->hw_scan_req->req.flags = req->flags;
 709		eth_broadcast_addr(local->hw_scan_req->req.bssid);
 710		local->hw_scan_req->req.duration = req->duration;
 711		local->hw_scan_req->req.duration_mandatory =
 712			req->duration_mandatory;
 713
 714		local->hw_scan_band = 0;
 715
 716		/*
 717		 * After allocating local->hw_scan_req, we must
 718		 * go through until ieee80211_prep_hw_scan(), so
 719		 * anything that might be changed here and leave
 720		 * this function early must not go after this
 721		 * allocation.
 722		 */
 723	}
 724
 725	rcu_assign_pointer(local->scan_req, req);
 726	rcu_assign_pointer(local->scan_sdata, sdata);
 727
 728	if (req->flags & NL80211_SCAN_FLAG_RANDOM_ADDR)
 729		get_random_mask_addr(local->scan_addr,
 730				     req->mac_addr,
 731				     req->mac_addr_mask);
 732	else
 733		memcpy(local->scan_addr, sdata->vif.addr, ETH_ALEN);
 734
 735	if (hw_scan) {
 736		__set_bit(SCAN_HW_SCANNING, &local->scanning);
 737	} else if ((req->n_channels == 1) &&
 738		   (req->channels[0] == local->_oper_chandef.chan)) {
 739		/*
 740		 * If we are scanning only on the operating channel
 741		 * then we do not need to stop normal activities
 742		 */
 743		unsigned long next_delay;
 744
 745		__set_bit(SCAN_ONCHANNEL_SCANNING, &local->scanning);
 746
 747		ieee80211_recalc_idle(local);
 748
 749		/* Notify driver scan is starting, keep order of operations
 750		 * same as normal software scan, in case that matters. */
 751		drv_sw_scan_start(local, sdata, local->scan_addr);
 752
 753		ieee80211_configure_filter(local); /* accept probe-responses */
 754
 755		/* We need to ensure power level is at max for scanning. */
 756		ieee80211_hw_config(local, 0);
 757
 758		if ((req->channels[0]->flags & (IEEE80211_CHAN_NO_IR |
 759						IEEE80211_CHAN_RADAR)) ||
 760		    !req->n_ssids) {
 761			next_delay = IEEE80211_PASSIVE_CHANNEL_TIME;
 762		} else {
 763			ieee80211_scan_state_send_probe(local, &next_delay);
 764			next_delay = IEEE80211_CHANNEL_TIME;
 765		}
 766
 767		/* Now, just wait a bit and we are all done! */
 768		ieee80211_queue_delayed_work(&local->hw, &local->scan_work,
 769					     next_delay);
 770		return 0;
 771	} else {
 772		/* Do normal software scan */
 773		__set_bit(SCAN_SW_SCANNING, &local->scanning);
 774	}
 775
 776	ieee80211_recalc_idle(local);
 777
 778	if (hw_scan) {
 779		WARN_ON(!ieee80211_prep_hw_scan(sdata));
 780		rc = drv_hw_scan(local, sdata, local->hw_scan_req);
 781	} else {
 782		rc = ieee80211_start_sw_scan(local, sdata);
 783	}
 784
 785	if (rc) {
 786		kfree(local->hw_scan_req);
 787		local->hw_scan_req = NULL;
 788		local->scanning = 0;
 789
 790		ieee80211_recalc_idle(local);
 791
 792		local->scan_req = NULL;
 793		RCU_INIT_POINTER(local->scan_sdata, NULL);
 794	}
 795
 796	if (hw_scan && rc == 1) {
 797		/*
 798		 * we can't fall back to software for P2P-GO
 799		 * as it must update NoA etc.
 800		 */
 801		if (ieee80211_vif_type_p2p(&sdata->vif) ==
 802				NL80211_IFTYPE_P2P_GO)
 803			return -EOPNOTSUPP;
 804		hw_scan = false;
 805		goto again;
 806	}
 807
 808	return rc;
 809}
 810
 811static unsigned long
 812ieee80211_scan_get_channel_time(struct ieee80211_channel *chan)
 813{
 814	/*
 815	 * TODO: channel switching also consumes quite some time,
 816	 * add that delay as well to get a better estimation
 817	 */
 818	if (chan->flags & (IEEE80211_CHAN_NO_IR | IEEE80211_CHAN_RADAR))
 819		return IEEE80211_PASSIVE_CHANNEL_TIME;
 820	return IEEE80211_PROBE_DELAY + IEEE80211_CHANNEL_TIME;
 821}
 822
 823static void ieee80211_scan_state_decision(struct ieee80211_local *local,
 824					  unsigned long *next_delay)
 825{
 826	bool associated = false;
 827	bool tx_empty = true;
 828	bool bad_latency;
 829	struct ieee80211_sub_if_data *sdata;
 830	struct ieee80211_channel *next_chan;
 831	enum mac80211_scan_state next_scan_state;
 832	struct cfg80211_scan_request *scan_req;
 833
 834	/*
 835	 * check if at least one STA interface is associated,
 836	 * check if at least one STA interface has pending tx frames
 837	 * and grab the lowest used beacon interval
 838	 */
 839	mutex_lock(&local->iflist_mtx);
 840	list_for_each_entry(sdata, &local->interfaces, list) {
 841		if (!ieee80211_sdata_running(sdata))
 842			continue;
 843
 844		if (sdata->vif.type == NL80211_IFTYPE_STATION) {
 845			if (sdata->u.mgd.associated) {
 846				associated = true;
 847
 848				if (!qdisc_all_tx_empty(sdata->dev)) {
 849					tx_empty = false;
 850					break;
 851				}
 852			}
 853		}
 854	}
 855	mutex_unlock(&local->iflist_mtx);
 856
 857	scan_req = rcu_dereference_protected(local->scan_req,
 858					     lockdep_is_held(&local->mtx));
 859
 860	next_chan = scan_req->channels[local->scan_channel_idx];
 861
 862	/*
 863	 * we're currently scanning a different channel, let's
 864	 * see if we can scan another channel without interfering
 865	 * with the current traffic situation.
 866	 *
 867	 * Keep good latency, do not stay off-channel more than 125 ms.
 868	 */
 869
 870	bad_latency = time_after(jiffies +
 871				 ieee80211_scan_get_channel_time(next_chan),
 872				 local->leave_oper_channel_time + HZ / 8);
 873
 874	if (associated && !tx_empty) {
 875		if (scan_req->flags & NL80211_SCAN_FLAG_LOW_PRIORITY)
 876			next_scan_state = SCAN_ABORT;
 877		else
 878			next_scan_state = SCAN_SUSPEND;
 879	} else if (associated && bad_latency) {
 880		next_scan_state = SCAN_SUSPEND;
 881	} else {
 882		next_scan_state = SCAN_SET_CHANNEL;
 883	}
 884
 885	local->next_scan_state = next_scan_state;
 886
 887	*next_delay = 0;
 888}
 889
 890static void ieee80211_scan_state_set_channel(struct ieee80211_local *local,
 891					     unsigned long *next_delay)
 892{
 893	int skip;
 894	struct ieee80211_channel *chan;
 895	enum nl80211_bss_scan_width oper_scan_width;
 896	struct cfg80211_scan_request *scan_req;
 897
 898	scan_req = rcu_dereference_protected(local->scan_req,
 899					     lockdep_is_held(&local->mtx));
 900
 901	skip = 0;
 902	chan = scan_req->channels[local->scan_channel_idx];
 903
 904	local->scan_chandef.chan = chan;
 905	local->scan_chandef.center_freq1 = chan->center_freq;
 906	local->scan_chandef.freq1_offset = chan->freq_offset;
 907	local->scan_chandef.center_freq2 = 0;
 908	switch (scan_req->scan_width) {
 909	case NL80211_BSS_CHAN_WIDTH_5:
 910		local->scan_chandef.width = NL80211_CHAN_WIDTH_5;
 911		break;
 912	case NL80211_BSS_CHAN_WIDTH_10:
 913		local->scan_chandef.width = NL80211_CHAN_WIDTH_10;
 914		break;
 915	default:
 916	case NL80211_BSS_CHAN_WIDTH_20:
 917		/* If scanning on oper channel, use whatever channel-type
 918		 * is currently in use.
 919		 */
 920		oper_scan_width = cfg80211_chandef_to_scan_width(
 921					&local->_oper_chandef);
 922		if (chan == local->_oper_chandef.chan &&
 923		    oper_scan_width == scan_req->scan_width)
 924			local->scan_chandef = local->_oper_chandef;
 925		else
 926			local->scan_chandef.width = NL80211_CHAN_WIDTH_20_NOHT;
 927		break;
 928	}
 929
 930	if (ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_CHANNEL))
 931		skip = 1;
 932
 933	/* advance state machine to next channel/band */
 934	local->scan_channel_idx++;
 935
 936	if (skip) {
 937		/* if we skip this channel return to the decision state */
 938		local->next_scan_state = SCAN_DECISION;
 939		return;
 940	}
 941
 942	/*
 943	 * Probe delay is used to update the NAV, cf. 11.1.3.2.2
 944	 * (which unfortunately doesn't say _why_ step a) is done,
 945	 * but it waits for the probe delay or until a frame is
 946	 * received - and the received frame would update the NAV).
 947	 * For now, we do not support waiting until a frame is
 948	 * received.
 949	 *
 950	 * In any case, it is not necessary for a passive scan.
 951	 */
 952	if ((chan->flags & (IEEE80211_CHAN_NO_IR | IEEE80211_CHAN_RADAR)) ||
 953	    !scan_req->n_ssids) {
 954		*next_delay = IEEE80211_PASSIVE_CHANNEL_TIME;
 955		local->next_scan_state = SCAN_DECISION;
 956		return;
 957	}
 958
 959	/* active scan, send probes */
 960	*next_delay = IEEE80211_PROBE_DELAY;
 961	local->next_scan_state = SCAN_SEND_PROBE;
 962}
 963
 964static void ieee80211_scan_state_suspend(struct ieee80211_local *local,
 965					 unsigned long *next_delay)
 966{
 967	/* switch back to the operating channel */
 968	local->scan_chandef.chan = NULL;
 969	ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_CHANNEL);
 970
 971	/* disable PS */
 972	ieee80211_offchannel_return(local);
 973
 974	*next_delay = HZ / 5;
 975	/* afterwards, resume scan & go to next channel */
 976	local->next_scan_state = SCAN_RESUME;
 977}
 978
 979static void ieee80211_scan_state_resume(struct ieee80211_local *local,
 980					unsigned long *next_delay)
 981{
 982	ieee80211_offchannel_stop_vifs(local);
 983
 984	if (local->ops->flush) {
 985		ieee80211_flush_queues(local, NULL, false);
 986		*next_delay = 0;
 987	} else
 988		*next_delay = HZ / 10;
 989
 990	/* remember when we left the operating channel */
 991	local->leave_oper_channel_time = jiffies;
 992
 993	/* advance to the next channel to be scanned */
 994	local->next_scan_state = SCAN_SET_CHANNEL;
 995}
 996
 997void ieee80211_scan_work(struct work_struct *work)
 998{
 999	struct ieee80211_local *local =
1000		container_of(work, struct ieee80211_local, scan_work.work);
1001	struct ieee80211_sub_if_data *sdata;
1002	struct cfg80211_scan_request *scan_req;
1003	unsigned long next_delay = 0;
1004	bool aborted;
1005
1006	mutex_lock(&local->mtx);
1007
1008	if (!ieee80211_can_run_worker(local)) {
1009		aborted = true;
1010		goto out_complete;
1011	}
1012
1013	sdata = rcu_dereference_protected(local->scan_sdata,
1014					  lockdep_is_held(&local->mtx));
1015	scan_req = rcu_dereference_protected(local->scan_req,
1016					     lockdep_is_held(&local->mtx));
1017
1018	/* When scanning on-channel, the first-callback means completed. */
1019	if (test_bit(SCAN_ONCHANNEL_SCANNING, &local->scanning)) {
1020		aborted = test_and_clear_bit(SCAN_ABORTED, &local->scanning);
1021		goto out_complete;
1022	}
1023
1024	if (test_and_clear_bit(SCAN_COMPLETED, &local->scanning)) {
1025		aborted = test_and_clear_bit(SCAN_ABORTED, &local->scanning);
1026		goto out_complete;
1027	}
1028
1029	if (!sdata || !scan_req)
1030		goto out;
1031
1032	if (!local->scanning) {
1033		int rc;
1034
1035		RCU_INIT_POINTER(local->scan_req, NULL);
1036		RCU_INIT_POINTER(local->scan_sdata, NULL);
1037
1038		rc = __ieee80211_start_scan(sdata, scan_req);
1039		if (rc) {
1040			/* need to complete scan in cfg80211 */
1041			rcu_assign_pointer(local->scan_req, scan_req);
1042			aborted = true;
1043			goto out_complete;
1044		} else
1045			goto out;
1046	}
1047
1048	/*
1049	 * as long as no delay is required advance immediately
1050	 * without scheduling a new work
1051	 */
1052	do {
1053		if (!ieee80211_sdata_running(sdata)) {
1054			aborted = true;
1055			goto out_complete;
1056		}
1057
1058		switch (local->next_scan_state) {
1059		case SCAN_DECISION:
1060			/* if no more bands/channels left, complete scan */
1061			if (local->scan_channel_idx >= scan_req->n_channels) {
1062				aborted = false;
1063				goto out_complete;
1064			}
1065			ieee80211_scan_state_decision(local, &next_delay);
1066			break;
1067		case SCAN_SET_CHANNEL:
1068			ieee80211_scan_state_set_channel(local, &next_delay);
1069			break;
1070		case SCAN_SEND_PROBE:
1071			ieee80211_scan_state_send_probe(local, &next_delay);
1072			break;
1073		case SCAN_SUSPEND:
1074			ieee80211_scan_state_suspend(local, &next_delay);
1075			break;
1076		case SCAN_RESUME:
1077			ieee80211_scan_state_resume(local, &next_delay);
1078			break;
1079		case SCAN_ABORT:
1080			aborted = true;
1081			goto out_complete;
1082		}
1083	} while (next_delay == 0);
1084
1085	ieee80211_queue_delayed_work(&local->hw, &local->scan_work, next_delay);
1086	goto out;
1087
1088out_complete:
1089	__ieee80211_scan_completed(&local->hw, aborted);
1090out:
1091	mutex_unlock(&local->mtx);
1092}
1093
1094int ieee80211_request_scan(struct ieee80211_sub_if_data *sdata,
1095			   struct cfg80211_scan_request *req)
1096{
1097	int res;
1098
1099	mutex_lock(&sdata->local->mtx);
1100	res = __ieee80211_start_scan(sdata, req);
1101	mutex_unlock(&sdata->local->mtx);
1102
1103	return res;
1104}
1105
1106int ieee80211_request_ibss_scan(struct ieee80211_sub_if_data *sdata,
1107				const u8 *ssid, u8 ssid_len,
1108				struct ieee80211_channel **channels,
1109				unsigned int n_channels,
1110				enum nl80211_bss_scan_width scan_width)
1111{
1112	struct ieee80211_local *local = sdata->local;
1113	int ret = -EBUSY, i, n_ch = 0;
1114	enum nl80211_band band;
1115
1116	mutex_lock(&local->mtx);
1117
1118	/* busy scanning */
1119	if (local->scan_req)
1120		goto unlock;
1121
1122	/* fill internal scan request */
1123	if (!channels) {
1124		int max_n;
1125
1126		for (band = 0; band < NUM_NL80211_BANDS; band++) {
1127			if (!local->hw.wiphy->bands[band])
1128				continue;
1129
1130			max_n = local->hw.wiphy->bands[band]->n_channels;
1131			for (i = 0; i < max_n; i++) {
1132				struct ieee80211_channel *tmp_ch =
1133				    &local->hw.wiphy->bands[band]->channels[i];
1134
1135				if (tmp_ch->flags & (IEEE80211_CHAN_NO_IR |
1136						     IEEE80211_CHAN_DISABLED))
1137					continue;
1138
1139				local->int_scan_req->channels[n_ch] = tmp_ch;
1140				n_ch++;
1141			}
1142		}
1143
1144		if (WARN_ON_ONCE(n_ch == 0))
1145			goto unlock;
1146
1147		local->int_scan_req->n_channels = n_ch;
1148	} else {
1149		for (i = 0; i < n_channels; i++) {
1150			if (channels[i]->flags & (IEEE80211_CHAN_NO_IR |
1151						  IEEE80211_CHAN_DISABLED))
1152				continue;
1153
1154			local->int_scan_req->channels[n_ch] = channels[i];
1155			n_ch++;
1156		}
1157
1158		if (WARN_ON_ONCE(n_ch == 0))
1159			goto unlock;
1160
1161		local->int_scan_req->n_channels = n_ch;
1162	}
1163
1164	local->int_scan_req->ssids = &local->scan_ssid;
1165	local->int_scan_req->n_ssids = 1;
1166	local->int_scan_req->scan_width = scan_width;
1167	memcpy(local->int_scan_req->ssids[0].ssid, ssid, IEEE80211_MAX_SSID_LEN);
1168	local->int_scan_req->ssids[0].ssid_len = ssid_len;
1169
1170	ret = __ieee80211_start_scan(sdata, sdata->local->int_scan_req);
1171 unlock:
1172	mutex_unlock(&local->mtx);
1173	return ret;
1174}
1175
1176/*
1177 * Only call this function when a scan can't be queued -- under RTNL.
1178 */
1179void ieee80211_scan_cancel(struct ieee80211_local *local)
1180{
1181	/*
1182	 * We are canceling software scan, or deferred scan that was not
1183	 * yet really started (see __ieee80211_start_scan ).
1184	 *
1185	 * Regarding hardware scan:
1186	 * - we can not call  __ieee80211_scan_completed() as when
1187	 *   SCAN_HW_SCANNING bit is set this function change
1188	 *   local->hw_scan_req to operate on 5G band, what race with
1189	 *   driver which can use local->hw_scan_req
1190	 *
1191	 * - we can not cancel scan_work since driver can schedule it
1192	 *   by ieee80211_scan_completed(..., true) to finish scan
1193	 *
1194	 * Hence we only call the cancel_hw_scan() callback, but the low-level
1195	 * driver is still responsible for calling ieee80211_scan_completed()
1196	 * after the scan was completed/aborted.
1197	 */
1198
1199	mutex_lock(&local->mtx);
1200	if (!local->scan_req)
1201		goto out;
1202
1203	/*
1204	 * We have a scan running and the driver already reported completion,
1205	 * but the worker hasn't run yet or is stuck on the mutex - mark it as
1206	 * cancelled.
1207	 */
1208	if (test_bit(SCAN_HW_SCANNING, &local->scanning) &&
1209	    test_bit(SCAN_COMPLETED, &local->scanning)) {
1210		set_bit(SCAN_HW_CANCELLED, &local->scanning);
1211		goto out;
1212	}
1213
1214	if (test_bit(SCAN_HW_SCANNING, &local->scanning)) {
1215		/*
1216		 * Make sure that __ieee80211_scan_completed doesn't trigger a
1217		 * scan on another band.
1218		 */
1219		set_bit(SCAN_HW_CANCELLED, &local->scanning);
1220		if (local->ops->cancel_hw_scan)
1221			drv_cancel_hw_scan(local,
1222				rcu_dereference_protected(local->scan_sdata,
1223						lockdep_is_held(&local->mtx)));
1224		goto out;
1225	}
1226
1227	/*
1228	 * If the work is currently running, it must be blocked on
1229	 * the mutex, but we'll set scan_sdata = NULL and it'll
1230	 * simply exit once it acquires the mutex.
1231	 */
1232	cancel_delayed_work(&local->scan_work);
1233	/* and clean up */
1234	memset(&local->scan_info, 0, sizeof(local->scan_info));
1235	__ieee80211_scan_completed(&local->hw, true);
1236out:
1237	mutex_unlock(&local->mtx);
1238}
1239
1240int __ieee80211_request_sched_scan_start(struct ieee80211_sub_if_data *sdata,
1241					struct cfg80211_sched_scan_request *req)
1242{
1243	struct ieee80211_local *local = sdata->local;
1244	struct ieee80211_scan_ies sched_scan_ies = {};
1245	struct cfg80211_chan_def chandef;
1246	int ret, i, iebufsz, num_bands = 0;
1247	u32 rate_masks[NUM_NL80211_BANDS] = {};
1248	u8 bands_used = 0;
1249	u8 *ie;
1250	u32 flags = 0;
1251
1252	iebufsz = local->scan_ies_len + req->ie_len;
1253
1254	lockdep_assert_held(&local->mtx);
1255
1256	if (!local->ops->sched_scan_start)
1257		return -ENOTSUPP;
1258
1259	for (i = 0; i < NUM_NL80211_BANDS; i++) {
1260		if (local->hw.wiphy->bands[i]) {
1261			bands_used |= BIT(i);
1262			rate_masks[i] = (u32) -1;
1263			num_bands++;
1264		}
1265	}
1266
1267	if (req->flags & NL80211_SCAN_FLAG_MIN_PREQ_CONTENT)
1268		flags |= IEEE80211_PROBE_FLAG_MIN_CONTENT;
1269
1270	ie = kcalloc(iebufsz, num_bands, GFP_KERNEL);
1271	if (!ie) {
1272		ret = -ENOMEM;
1273		goto out;
1274	}
1275
1276	ieee80211_prepare_scan_chandef(&chandef, req->scan_width);
1277
1278	ieee80211_build_preq_ies(sdata, ie, num_bands * iebufsz,
1279				 &sched_scan_ies, req->ie,
1280				 req->ie_len, bands_used, rate_masks, &chandef,
1281				 flags);
1282
1283	ret = drv_sched_scan_start(local, sdata, req, &sched_scan_ies);
1284	if (ret == 0) {
1285		rcu_assign_pointer(local->sched_scan_sdata, sdata);
1286		rcu_assign_pointer(local->sched_scan_req, req);
1287	}
1288
1289	kfree(ie);
1290
1291out:
1292	if (ret) {
1293		/* Clean in case of failure after HW restart or upon resume. */
1294		RCU_INIT_POINTER(local->sched_scan_sdata, NULL);
1295		RCU_INIT_POINTER(local->sched_scan_req, NULL);
1296	}
1297
1298	return ret;
1299}
1300
1301int ieee80211_request_sched_scan_start(struct ieee80211_sub_if_data *sdata,
1302				       struct cfg80211_sched_scan_request *req)
1303{
1304	struct ieee80211_local *local = sdata->local;
1305	int ret;
1306
1307	mutex_lock(&local->mtx);
1308
1309	if (rcu_access_pointer(local->sched_scan_sdata)) {
1310		mutex_unlock(&local->mtx);
1311		return -EBUSY;
1312	}
1313
1314	ret = __ieee80211_request_sched_scan_start(sdata, req);
1315
1316	mutex_unlock(&local->mtx);
1317	return ret;
1318}
1319
1320int ieee80211_request_sched_scan_stop(struct ieee80211_local *local)
1321{
1322	struct ieee80211_sub_if_data *sched_scan_sdata;
1323	int ret = -ENOENT;
1324
1325	mutex_lock(&local->mtx);
1326
1327	if (!local->ops->sched_scan_stop) {
1328		ret = -ENOTSUPP;
1329		goto out;
1330	}
1331
1332	/* We don't want to restart sched scan anymore. */
1333	RCU_INIT_POINTER(local->sched_scan_req, NULL);
1334
1335	sched_scan_sdata = rcu_dereference_protected(local->sched_scan_sdata,
1336						lockdep_is_held(&local->mtx));
1337	if (sched_scan_sdata) {
1338		ret = drv_sched_scan_stop(local, sched_scan_sdata);
1339		if (!ret)
1340			RCU_INIT_POINTER(local->sched_scan_sdata, NULL);
1341	}
1342out:
1343	mutex_unlock(&local->mtx);
1344
1345	return ret;
1346}
1347
1348void ieee80211_sched_scan_results(struct ieee80211_hw *hw)
1349{
1350	struct ieee80211_local *local = hw_to_local(hw);
1351
1352	trace_api_sched_scan_results(local);
1353
1354	cfg80211_sched_scan_results(hw->wiphy, 0);
1355}
1356EXPORT_SYMBOL(ieee80211_sched_scan_results);
1357
1358void ieee80211_sched_scan_end(struct ieee80211_local *local)
1359{
1360	mutex_lock(&local->mtx);
1361
1362	if (!rcu_access_pointer(local->sched_scan_sdata)) {
1363		mutex_unlock(&local->mtx);
1364		return;
1365	}
1366
1367	RCU_INIT_POINTER(local->sched_scan_sdata, NULL);
1368
1369	/* If sched scan was aborted by the driver. */
1370	RCU_INIT_POINTER(local->sched_scan_req, NULL);
1371
1372	mutex_unlock(&local->mtx);
1373
1374	cfg80211_sched_scan_stopped(local->hw.wiphy, 0);
1375}
1376
1377void ieee80211_sched_scan_stopped_work(struct work_struct *work)
1378{
1379	struct ieee80211_local *local =
1380		container_of(work, struct ieee80211_local,
1381			     sched_scan_stopped_work);
1382
1383	ieee80211_sched_scan_end(local);
1384}
1385
1386void ieee80211_sched_scan_stopped(struct ieee80211_hw *hw)
1387{
1388	struct ieee80211_local *local = hw_to_local(hw);
1389
1390	trace_api_sched_scan_stopped(local);
1391
1392	/*
1393	 * this shouldn't really happen, so for simplicity
1394	 * simply ignore it, and let mac80211 reconfigure
1395	 * the sched scan later on.
1396	 */
1397	if (local->in_reconfig)
1398		return;
1399
1400	schedule_work(&local->sched_scan_stopped_work);
1401}
1402EXPORT_SYMBOL(ieee80211_sched_scan_stopped);
v4.6
 
   1/*
   2 * Scanning implementation
   3 *
   4 * Copyright 2003, Jouni Malinen <jkmaline@cc.hut.fi>
   5 * Copyright 2004, Instant802 Networks, Inc.
   6 * Copyright 2005, Devicescape Software, Inc.
   7 * Copyright 2006-2007	Jiri Benc <jbenc@suse.cz>
   8 * Copyright 2007, Michael Wu <flamingice@sourmilk.net>
   9 * Copyright 2013-2015  Intel Mobile Communications GmbH
  10 *
  11 * This program is free software; you can redistribute it and/or modify
  12 * it under the terms of the GNU General Public License version 2 as
  13 * published by the Free Software Foundation.
  14 */
  15
  16#include <linux/if_arp.h>
  17#include <linux/etherdevice.h>
  18#include <linux/rtnetlink.h>
  19#include <net/sch_generic.h>
  20#include <linux/slab.h>
  21#include <linux/export.h>
 
  22#include <net/mac80211.h>
  23
  24#include "ieee80211_i.h"
  25#include "driver-ops.h"
  26#include "mesh.h"
  27
  28#define IEEE80211_PROBE_DELAY (HZ / 33)
  29#define IEEE80211_CHANNEL_TIME (HZ / 33)
  30#define IEEE80211_PASSIVE_CHANNEL_TIME (HZ / 9)
  31
  32void ieee80211_rx_bss_put(struct ieee80211_local *local,
  33			  struct ieee80211_bss *bss)
  34{
  35	if (!bss)
  36		return;
  37	cfg80211_put_bss(local->hw.wiphy,
  38			 container_of((void *)bss, struct cfg80211_bss, priv));
  39}
  40
  41static bool is_uapsd_supported(struct ieee802_11_elems *elems)
  42{
  43	u8 qos_info;
  44
  45	if (elems->wmm_info && elems->wmm_info_len == 7
  46	    && elems->wmm_info[5] == 1)
  47		qos_info = elems->wmm_info[6];
  48	else if (elems->wmm_param && elems->wmm_param_len == 24
  49		 && elems->wmm_param[5] == 1)
  50		qos_info = elems->wmm_param[6];
  51	else
  52		/* no valid wmm information or parameter element found */
  53		return false;
  54
  55	return qos_info & IEEE80211_WMM_IE_AP_QOSINFO_UAPSD;
  56}
  57
  58struct ieee80211_bss *
  59ieee80211_bss_info_update(struct ieee80211_local *local,
  60			  struct ieee80211_rx_status *rx_status,
  61			  struct ieee80211_mgmt *mgmt, size_t len,
  62			  struct ieee802_11_elems *elems,
  63			  struct ieee80211_channel *channel)
  64{
  65	bool beacon = ieee80211_is_beacon(mgmt->frame_control);
  66	struct cfg80211_bss *cbss;
  67	struct ieee80211_bss *bss;
  68	int clen, srlen;
  69	struct cfg80211_inform_bss bss_meta = {};
  70	bool signal_valid;
  71
  72	if (ieee80211_hw_check(&local->hw, SIGNAL_DBM))
  73		bss_meta.signal = rx_status->signal * 100;
  74	else if (ieee80211_hw_check(&local->hw, SIGNAL_UNSPEC))
  75		bss_meta.signal = (rx_status->signal * 100) / local->hw.max_signal;
  76
  77	bss_meta.scan_width = NL80211_BSS_CHAN_WIDTH_20;
  78	if (rx_status->flag & RX_FLAG_5MHZ)
  79		bss_meta.scan_width = NL80211_BSS_CHAN_WIDTH_5;
  80	if (rx_status->flag & RX_FLAG_10MHZ)
  81		bss_meta.scan_width = NL80211_BSS_CHAN_WIDTH_10;
  82
  83	bss_meta.chan = channel;
  84	cbss = cfg80211_inform_bss_frame_data(local->hw.wiphy, &bss_meta,
  85					      mgmt, len, GFP_ATOMIC);
  86	if (!cbss)
  87		return NULL;
  88	/* In case the signal is invalid update the status */
  89	signal_valid = abs(channel->center_freq - cbss->channel->center_freq)
  90		<= local->hw.wiphy->max_adj_channel_rssi_comp;
  91	if (!signal_valid)
  92		rx_status->flag |= RX_FLAG_NO_SIGNAL_VAL;
  93
  94	bss = (void *)cbss->priv;
  95
  96	if (beacon)
  97		bss->device_ts_beacon = rx_status->device_timestamp;
  98	else
  99		bss->device_ts_presp = rx_status->device_timestamp;
 100
 101	if (elems->parse_error) {
 102		if (beacon)
 103			bss->corrupt_data |= IEEE80211_BSS_CORRUPT_BEACON;
 104		else
 105			bss->corrupt_data |= IEEE80211_BSS_CORRUPT_PROBE_RESP;
 106	} else {
 107		if (beacon)
 108			bss->corrupt_data &= ~IEEE80211_BSS_CORRUPT_BEACON;
 109		else
 110			bss->corrupt_data &= ~IEEE80211_BSS_CORRUPT_PROBE_RESP;
 111	}
 112
 113	/* save the ERP value so that it is available at association time */
 114	if (elems->erp_info && (!elems->parse_error ||
 115				!(bss->valid_data & IEEE80211_BSS_VALID_ERP))) {
 116		bss->erp_value = elems->erp_info[0];
 117		bss->has_erp_value = true;
 118		if (!elems->parse_error)
 119			bss->valid_data |= IEEE80211_BSS_VALID_ERP;
 120	}
 121
 122	/* replace old supported rates if we get new values */
 123	if (!elems->parse_error ||
 124	    !(bss->valid_data & IEEE80211_BSS_VALID_RATES)) {
 125		srlen = 0;
 126		if (elems->supp_rates) {
 127			clen = IEEE80211_MAX_SUPP_RATES;
 128			if (clen > elems->supp_rates_len)
 129				clen = elems->supp_rates_len;
 130			memcpy(bss->supp_rates, elems->supp_rates, clen);
 131			srlen += clen;
 132		}
 133		if (elems->ext_supp_rates) {
 134			clen = IEEE80211_MAX_SUPP_RATES - srlen;
 135			if (clen > elems->ext_supp_rates_len)
 136				clen = elems->ext_supp_rates_len;
 137			memcpy(bss->supp_rates + srlen, elems->ext_supp_rates,
 138			       clen);
 139			srlen += clen;
 140		}
 141		if (srlen) {
 142			bss->supp_rates_len = srlen;
 143			if (!elems->parse_error)
 144				bss->valid_data |= IEEE80211_BSS_VALID_RATES;
 145		}
 146	}
 147
 148	if (!elems->parse_error ||
 149	    !(bss->valid_data & IEEE80211_BSS_VALID_WMM)) {
 150		bss->wmm_used = elems->wmm_param || elems->wmm_info;
 151		bss->uapsd_supported = is_uapsd_supported(elems);
 152		if (!elems->parse_error)
 153			bss->valid_data |= IEEE80211_BSS_VALID_WMM;
 154	}
 155
 156	if (beacon) {
 157		struct ieee80211_supported_band *sband =
 158			local->hw.wiphy->bands[rx_status->band];
 159		if (!(rx_status->flag & RX_FLAG_HT) &&
 160		    !(rx_status->flag & RX_FLAG_VHT))
 161			bss->beacon_rate =
 162				&sband->bitrates[rx_status->rate_idx];
 163	}
 164
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 165	return bss;
 166}
 167
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 168void ieee80211_scan_rx(struct ieee80211_local *local, struct sk_buff *skb)
 169{
 170	struct ieee80211_rx_status *rx_status = IEEE80211_SKB_RXCB(skb);
 171	struct ieee80211_sub_if_data *sdata1, *sdata2;
 172	struct ieee80211_mgmt *mgmt = (void *)skb->data;
 173	struct ieee80211_bss *bss;
 174	u8 *elements;
 175	struct ieee80211_channel *channel;
 176	size_t baselen;
 177	struct ieee802_11_elems elems;
 178
 179	if (skb->len < 24 ||
 180	    (!ieee80211_is_probe_resp(mgmt->frame_control) &&
 181	     !ieee80211_is_beacon(mgmt->frame_control)))
 182		return;
 183
 184	sdata1 = rcu_dereference(local->scan_sdata);
 185	sdata2 = rcu_dereference(local->sched_scan_sdata);
 186
 187	if (likely(!sdata1 && !sdata2))
 188		return;
 189
 190	if (ieee80211_is_probe_resp(mgmt->frame_control)) {
 191		struct cfg80211_scan_request *scan_req;
 192		struct cfg80211_sched_scan_request *sched_scan_req;
 
 193
 194		scan_req = rcu_dereference(local->scan_req);
 195		sched_scan_req = rcu_dereference(local->sched_scan_req);
 196
 197		/* ignore ProbeResp to foreign address unless scanning
 198		 * with randomised address
 
 
 
 
 
 
 199		 */
 200		if (!(sdata1 &&
 201		      (ether_addr_equal(mgmt->da, sdata1->vif.addr) ||
 202		       scan_req->flags & NL80211_SCAN_FLAG_RANDOM_ADDR)) &&
 203		    !(sdata2 &&
 204		      (ether_addr_equal(mgmt->da, sdata2->vif.addr) ||
 205		       sched_scan_req->flags & NL80211_SCAN_FLAG_RANDOM_ADDR)))
 206			return;
 207
 208		elements = mgmt->u.probe_resp.variable;
 209		baselen = offsetof(struct ieee80211_mgmt, u.probe_resp.variable);
 210	} else {
 211		baselen = offsetof(struct ieee80211_mgmt, u.beacon.variable);
 212		elements = mgmt->u.beacon.variable;
 213	}
 214
 215	if (baselen > skb->len)
 216		return;
 217
 218	ieee802_11_parse_elems(elements, skb->len - baselen, false, &elems);
 219
 220	channel = ieee80211_get_channel(local->hw.wiphy, rx_status->freq);
 221
 222	if (!channel || channel->flags & IEEE80211_CHAN_DISABLED)
 223		return;
 224
 225	bss = ieee80211_bss_info_update(local, rx_status,
 226					mgmt, skb->len, &elems,
 227					channel);
 228	if (bss)
 229		ieee80211_rx_bss_put(local, bss);
 230}
 231
 232static void
 233ieee80211_prepare_scan_chandef(struct cfg80211_chan_def *chandef,
 234			       enum nl80211_bss_scan_width scan_width)
 235{
 236	memset(chandef, 0, sizeof(*chandef));
 237	switch (scan_width) {
 238	case NL80211_BSS_CHAN_WIDTH_5:
 239		chandef->width = NL80211_CHAN_WIDTH_5;
 240		break;
 241	case NL80211_BSS_CHAN_WIDTH_10:
 242		chandef->width = NL80211_CHAN_WIDTH_10;
 243		break;
 244	default:
 245		chandef->width = NL80211_CHAN_WIDTH_20_NOHT;
 246		break;
 247	}
 248}
 249
 250/* return false if no more work */
 251static bool ieee80211_prep_hw_scan(struct ieee80211_local *local)
 252{
 
 253	struct cfg80211_scan_request *req;
 254	struct cfg80211_chan_def chandef;
 255	u8 bands_used = 0;
 256	int i, ielen, n_chans;
 
 257
 258	req = rcu_dereference_protected(local->scan_req,
 259					lockdep_is_held(&local->mtx));
 260
 261	if (test_bit(SCAN_HW_CANCELLED, &local->scanning))
 262		return false;
 263
 264	if (ieee80211_hw_check(&local->hw, SINGLE_SCAN_ON_ALL_BANDS)) {
 265		for (i = 0; i < req->n_channels; i++) {
 266			local->hw_scan_req->req.channels[i] = req->channels[i];
 267			bands_used |= BIT(req->channels[i]->band);
 268		}
 269
 270		n_chans = req->n_channels;
 271	} else {
 272		do {
 273			if (local->hw_scan_band == IEEE80211_NUM_BANDS)
 274				return false;
 275
 276			n_chans = 0;
 277
 278			for (i = 0; i < req->n_channels; i++) {
 279				if (req->channels[i]->band !=
 280				    local->hw_scan_band)
 281					continue;
 282				local->hw_scan_req->req.channels[n_chans] =
 283							req->channels[i];
 284				n_chans++;
 285				bands_used |= BIT(req->channels[i]->band);
 286			}
 287
 288			local->hw_scan_band++;
 289		} while (!n_chans);
 290	}
 291
 292	local->hw_scan_req->req.n_channels = n_chans;
 293	ieee80211_prepare_scan_chandef(&chandef, req->scan_width);
 294
 295	ielen = ieee80211_build_preq_ies(local,
 
 
 
 296					 (u8 *)local->hw_scan_req->req.ie,
 297					 local->hw_scan_ies_bufsize,
 298					 &local->hw_scan_req->ies,
 299					 req->ie, req->ie_len,
 300					 bands_used, req->rates, &chandef);
 
 301	local->hw_scan_req->req.ie_len = ielen;
 302	local->hw_scan_req->req.no_cck = req->no_cck;
 303	ether_addr_copy(local->hw_scan_req->req.mac_addr, req->mac_addr);
 304	ether_addr_copy(local->hw_scan_req->req.mac_addr_mask,
 305			req->mac_addr_mask);
 
 306
 307	return true;
 308}
 309
 310static void __ieee80211_scan_completed(struct ieee80211_hw *hw, bool aborted)
 311{
 312	struct ieee80211_local *local = hw_to_local(hw);
 313	bool hw_scan = local->ops->hw_scan;
 314	bool was_scanning = local->scanning;
 315	struct cfg80211_scan_request *scan_req;
 316	struct ieee80211_sub_if_data *scan_sdata;
 317	struct ieee80211_sub_if_data *sdata;
 318
 319	lockdep_assert_held(&local->mtx);
 320
 321	/*
 322	 * It's ok to abort a not-yet-running scan (that
 323	 * we have one at all will be verified by checking
 324	 * local->scan_req next), but not to complete it
 325	 * successfully.
 326	 */
 327	if (WARN_ON(!local->scanning && !aborted))
 328		aborted = true;
 329
 330	if (WARN_ON(!local->scan_req))
 331		return;
 332
 
 
 
 333	if (hw_scan && !aborted &&
 334	    !ieee80211_hw_check(&local->hw, SINGLE_SCAN_ON_ALL_BANDS) &&
 335	    ieee80211_prep_hw_scan(local)) {
 336		int rc;
 337
 338		rc = drv_hw_scan(local,
 339			rcu_dereference_protected(local->scan_sdata,
 340						  lockdep_is_held(&local->mtx)),
 341			local->hw_scan_req);
 342
 343		if (rc == 0)
 344			return;
 
 
 
 
 
 
 345	}
 346
 347	kfree(local->hw_scan_req);
 348	local->hw_scan_req = NULL;
 349
 350	scan_req = rcu_dereference_protected(local->scan_req,
 351					     lockdep_is_held(&local->mtx));
 352
 353	if (scan_req != local->int_scan_req)
 354		cfg80211_scan_done(scan_req, aborted);
 
 
 355	RCU_INIT_POINTER(local->scan_req, NULL);
 356
 357	scan_sdata = rcu_dereference_protected(local->scan_sdata,
 358					       lockdep_is_held(&local->mtx));
 359	RCU_INIT_POINTER(local->scan_sdata, NULL);
 360
 361	local->scanning = 0;
 362	local->scan_chandef.chan = NULL;
 363
 364	/* Set power back to normal operating levels. */
 365	ieee80211_hw_config(local, 0);
 366
 367	if (!hw_scan) {
 368		ieee80211_configure_filter(local);
 369		drv_sw_scan_complete(local, scan_sdata);
 370		ieee80211_offchannel_return(local);
 371	}
 372
 373	ieee80211_recalc_idle(local);
 374
 375	ieee80211_mlme_notify_scan_completed(local);
 376	ieee80211_ibss_notify_scan_completed(local);
 377
 378	/* Requeue all the work that might have been ignored while
 379	 * the scan was in progress; if there was none this will
 380	 * just be a no-op for the particular interface.
 381	 */
 382	list_for_each_entry_rcu(sdata, &local->interfaces, list) {
 383		if (ieee80211_sdata_running(sdata))
 384			ieee80211_queue_work(&sdata->local->hw, &sdata->work);
 385	}
 386
 387	if (was_scanning)
 388		ieee80211_start_next_roc(local);
 389}
 390
 391void ieee80211_scan_completed(struct ieee80211_hw *hw, bool aborted)
 
 392{
 393	struct ieee80211_local *local = hw_to_local(hw);
 394
 395	trace_api_scan_completed(local, aborted);
 396
 397	set_bit(SCAN_COMPLETED, &local->scanning);
 398	if (aborted)
 399		set_bit(SCAN_ABORTED, &local->scanning);
 
 
 
 400	ieee80211_queue_delayed_work(&local->hw, &local->scan_work, 0);
 401}
 402EXPORT_SYMBOL(ieee80211_scan_completed);
 403
 404static int ieee80211_start_sw_scan(struct ieee80211_local *local,
 405				   struct ieee80211_sub_if_data *sdata)
 406{
 407	/* Software scan is not supported in multi-channel cases */
 408	if (local->use_chanctx)
 409		return -EOPNOTSUPP;
 410
 411	/*
 412	 * Hardware/driver doesn't support hw_scan, so use software
 413	 * scanning instead. First send a nullfunc frame with power save
 414	 * bit on so that AP will buffer the frames for us while we are not
 415	 * listening, then send probe requests to each channel and wait for
 416	 * the responses. After all channels are scanned, tune back to the
 417	 * original channel and send a nullfunc frame with power save bit
 418	 * off to trigger the AP to send us all the buffered frames.
 419	 *
 420	 * Note that while local->sw_scanning is true everything else but
 421	 * nullfunc frames and probe requests will be dropped in
 422	 * ieee80211_tx_h_check_assoc().
 423	 */
 424	drv_sw_scan_start(local, sdata, local->scan_addr);
 425
 426	local->leave_oper_channel_time = jiffies;
 427	local->next_scan_state = SCAN_DECISION;
 428	local->scan_channel_idx = 0;
 429
 430	ieee80211_offchannel_stop_vifs(local);
 431
 432	/* ensure nullfunc is transmitted before leaving operating channel */
 433	ieee80211_flush_queues(local, NULL, false);
 434
 435	ieee80211_configure_filter(local);
 436
 437	/* We need to set power level at maximum rate for scanning. */
 438	ieee80211_hw_config(local, 0);
 439
 440	ieee80211_queue_delayed_work(&local->hw,
 441				     &local->scan_work, 0);
 442
 443	return 0;
 444}
 445
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 446static bool ieee80211_can_scan(struct ieee80211_local *local,
 447			       struct ieee80211_sub_if_data *sdata)
 448{
 449	if (ieee80211_is_radar_required(local))
 450		return false;
 451
 452	if (!list_empty(&local->roc_list))
 453		return false;
 454
 455	if (sdata->vif.type == NL80211_IFTYPE_STATION &&
 456	    sdata->u.mgd.flags & IEEE80211_STA_CONNECTION_POLL)
 457		return false;
 458
 459	return true;
 460}
 461
 462void ieee80211_run_deferred_scan(struct ieee80211_local *local)
 463{
 464	lockdep_assert_held(&local->mtx);
 465
 466	if (!local->scan_req || local->scanning)
 467		return;
 468
 469	if (!ieee80211_can_scan(local,
 470				rcu_dereference_protected(
 471					local->scan_sdata,
 472					lockdep_is_held(&local->mtx))))
 473		return;
 474
 475	ieee80211_queue_delayed_work(&local->hw, &local->scan_work,
 476				     round_jiffies_relative(0));
 477}
 478
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 479static void ieee80211_scan_state_send_probe(struct ieee80211_local *local,
 480					    unsigned long *next_delay)
 481{
 482	int i;
 483	struct ieee80211_sub_if_data *sdata;
 484	struct cfg80211_scan_request *scan_req;
 485	enum ieee80211_band band = local->hw.conf.chandef.chan->band;
 486	u32 tx_flags;
 487
 488	scan_req = rcu_dereference_protected(local->scan_req,
 489					     lockdep_is_held(&local->mtx));
 490
 491	tx_flags = IEEE80211_TX_INTFL_OFFCHAN_TX_OK;
 492	if (scan_req->no_cck)
 493		tx_flags |= IEEE80211_TX_CTL_NO_CCK_RATE;
 
 
 
 
 494
 495	sdata = rcu_dereference_protected(local->scan_sdata,
 496					  lockdep_is_held(&local->mtx));
 497
 498	for (i = 0; i < scan_req->n_ssids; i++)
 499		ieee80211_send_probe_req(
 500			sdata, local->scan_addr, NULL,
 501			scan_req->ssids[i].ssid, scan_req->ssids[i].ssid_len,
 502			scan_req->ie, scan_req->ie_len,
 503			scan_req->rates[band], false,
 504			tx_flags, local->hw.conf.chandef.chan, true);
 505
 506	/*
 507	 * After sending probe requests, wait for probe responses
 508	 * on the channel.
 509	 */
 510	*next_delay = IEEE80211_CHANNEL_TIME;
 511	local->next_scan_state = SCAN_DECISION;
 512}
 513
 514static int __ieee80211_start_scan(struct ieee80211_sub_if_data *sdata,
 515				  struct cfg80211_scan_request *req)
 516{
 517	struct ieee80211_local *local = sdata->local;
 
 518	int rc;
 519
 520	lockdep_assert_held(&local->mtx);
 521
 522	if (local->scan_req || ieee80211_is_radar_required(local))
 
 
 
 523		return -EBUSY;
 524
 525	if (!ieee80211_can_scan(local, sdata)) {
 526		/* wait for the work to finish/time out */
 527		rcu_assign_pointer(local->scan_req, req);
 528		rcu_assign_pointer(local->scan_sdata, sdata);
 529		return 0;
 530	}
 531
 532	if (local->ops->hw_scan) {
 
 533		u8 *ies;
 534
 535		local->hw_scan_ies_bufsize = local->scan_ies_len + req->ie_len;
 536
 537		if (ieee80211_hw_check(&local->hw, SINGLE_SCAN_ON_ALL_BANDS)) {
 538			int i, n_bands = 0;
 539			u8 bands_counted = 0;
 540
 541			for (i = 0; i < req->n_channels; i++) {
 542				if (bands_counted & BIT(req->channels[i]->band))
 543					continue;
 544				bands_counted |= BIT(req->channels[i]->band);
 545				n_bands++;
 546			}
 547
 548			local->hw_scan_ies_bufsize *= n_bands;
 549		}
 550
 551		local->hw_scan_req = kmalloc(
 552				sizeof(*local->hw_scan_req) +
 553				req->n_channels * sizeof(req->channels[0]) +
 554				local->hw_scan_ies_bufsize, GFP_KERNEL);
 555		if (!local->hw_scan_req)
 556			return -ENOMEM;
 557
 558		local->hw_scan_req->req.ssids = req->ssids;
 559		local->hw_scan_req->req.n_ssids = req->n_ssids;
 560		ies = (u8 *)local->hw_scan_req +
 561			sizeof(*local->hw_scan_req) +
 562			req->n_channels * sizeof(req->channels[0]);
 563		local->hw_scan_req->req.ie = ies;
 564		local->hw_scan_req->req.flags = req->flags;
 
 
 
 
 565
 566		local->hw_scan_band = 0;
 567
 568		/*
 569		 * After allocating local->hw_scan_req, we must
 570		 * go through until ieee80211_prep_hw_scan(), so
 571		 * anything that might be changed here and leave
 572		 * this function early must not go after this
 573		 * allocation.
 574		 */
 575	}
 576
 577	rcu_assign_pointer(local->scan_req, req);
 578	rcu_assign_pointer(local->scan_sdata, sdata);
 579
 580	if (req->flags & NL80211_SCAN_FLAG_RANDOM_ADDR)
 581		get_random_mask_addr(local->scan_addr,
 582				     req->mac_addr,
 583				     req->mac_addr_mask);
 584	else
 585		memcpy(local->scan_addr, sdata->vif.addr, ETH_ALEN);
 586
 587	if (local->ops->hw_scan) {
 588		__set_bit(SCAN_HW_SCANNING, &local->scanning);
 589	} else if ((req->n_channels == 1) &&
 590		   (req->channels[0] == local->_oper_chandef.chan)) {
 591		/*
 592		 * If we are scanning only on the operating channel
 593		 * then we do not need to stop normal activities
 594		 */
 595		unsigned long next_delay;
 596
 597		__set_bit(SCAN_ONCHANNEL_SCANNING, &local->scanning);
 598
 599		ieee80211_recalc_idle(local);
 600
 601		/* Notify driver scan is starting, keep order of operations
 602		 * same as normal software scan, in case that matters. */
 603		drv_sw_scan_start(local, sdata, local->scan_addr);
 604
 605		ieee80211_configure_filter(local); /* accept probe-responses */
 606
 607		/* We need to ensure power level is at max for scanning. */
 608		ieee80211_hw_config(local, 0);
 609
 610		if ((req->channels[0]->flags & (IEEE80211_CHAN_NO_IR |
 611						IEEE80211_CHAN_RADAR)) ||
 612		    !req->n_ssids) {
 613			next_delay = IEEE80211_PASSIVE_CHANNEL_TIME;
 614		} else {
 615			ieee80211_scan_state_send_probe(local, &next_delay);
 616			next_delay = IEEE80211_CHANNEL_TIME;
 617		}
 618
 619		/* Now, just wait a bit and we are all done! */
 620		ieee80211_queue_delayed_work(&local->hw, &local->scan_work,
 621					     next_delay);
 622		return 0;
 623	} else {
 624		/* Do normal software scan */
 625		__set_bit(SCAN_SW_SCANNING, &local->scanning);
 626	}
 627
 628	ieee80211_recalc_idle(local);
 629
 630	if (local->ops->hw_scan) {
 631		WARN_ON(!ieee80211_prep_hw_scan(local));
 632		rc = drv_hw_scan(local, sdata, local->hw_scan_req);
 633	} else {
 634		rc = ieee80211_start_sw_scan(local, sdata);
 635	}
 636
 637	if (rc) {
 638		kfree(local->hw_scan_req);
 639		local->hw_scan_req = NULL;
 640		local->scanning = 0;
 641
 642		ieee80211_recalc_idle(local);
 643
 644		local->scan_req = NULL;
 645		RCU_INIT_POINTER(local->scan_sdata, NULL);
 646	}
 647
 
 
 
 
 
 
 
 
 
 
 
 
 648	return rc;
 649}
 650
 651static unsigned long
 652ieee80211_scan_get_channel_time(struct ieee80211_channel *chan)
 653{
 654	/*
 655	 * TODO: channel switching also consumes quite some time,
 656	 * add that delay as well to get a better estimation
 657	 */
 658	if (chan->flags & (IEEE80211_CHAN_NO_IR | IEEE80211_CHAN_RADAR))
 659		return IEEE80211_PASSIVE_CHANNEL_TIME;
 660	return IEEE80211_PROBE_DELAY + IEEE80211_CHANNEL_TIME;
 661}
 662
 663static void ieee80211_scan_state_decision(struct ieee80211_local *local,
 664					  unsigned long *next_delay)
 665{
 666	bool associated = false;
 667	bool tx_empty = true;
 668	bool bad_latency;
 669	struct ieee80211_sub_if_data *sdata;
 670	struct ieee80211_channel *next_chan;
 671	enum mac80211_scan_state next_scan_state;
 672	struct cfg80211_scan_request *scan_req;
 673
 674	/*
 675	 * check if at least one STA interface is associated,
 676	 * check if at least one STA interface has pending tx frames
 677	 * and grab the lowest used beacon interval
 678	 */
 679	mutex_lock(&local->iflist_mtx);
 680	list_for_each_entry(sdata, &local->interfaces, list) {
 681		if (!ieee80211_sdata_running(sdata))
 682			continue;
 683
 684		if (sdata->vif.type == NL80211_IFTYPE_STATION) {
 685			if (sdata->u.mgd.associated) {
 686				associated = true;
 687
 688				if (!qdisc_all_tx_empty(sdata->dev)) {
 689					tx_empty = false;
 690					break;
 691				}
 692			}
 693		}
 694	}
 695	mutex_unlock(&local->iflist_mtx);
 696
 697	scan_req = rcu_dereference_protected(local->scan_req,
 698					     lockdep_is_held(&local->mtx));
 699
 700	next_chan = scan_req->channels[local->scan_channel_idx];
 701
 702	/*
 703	 * we're currently scanning a different channel, let's
 704	 * see if we can scan another channel without interfering
 705	 * with the current traffic situation.
 706	 *
 707	 * Keep good latency, do not stay off-channel more than 125 ms.
 708	 */
 709
 710	bad_latency = time_after(jiffies +
 711				 ieee80211_scan_get_channel_time(next_chan),
 712				 local->leave_oper_channel_time + HZ / 8);
 713
 714	if (associated && !tx_empty) {
 715		if (scan_req->flags & NL80211_SCAN_FLAG_LOW_PRIORITY)
 716			next_scan_state = SCAN_ABORT;
 717		else
 718			next_scan_state = SCAN_SUSPEND;
 719	} else if (associated && bad_latency) {
 720		next_scan_state = SCAN_SUSPEND;
 721	} else {
 722		next_scan_state = SCAN_SET_CHANNEL;
 723	}
 724
 725	local->next_scan_state = next_scan_state;
 726
 727	*next_delay = 0;
 728}
 729
 730static void ieee80211_scan_state_set_channel(struct ieee80211_local *local,
 731					     unsigned long *next_delay)
 732{
 733	int skip;
 734	struct ieee80211_channel *chan;
 735	enum nl80211_bss_scan_width oper_scan_width;
 736	struct cfg80211_scan_request *scan_req;
 737
 738	scan_req = rcu_dereference_protected(local->scan_req,
 739					     lockdep_is_held(&local->mtx));
 740
 741	skip = 0;
 742	chan = scan_req->channels[local->scan_channel_idx];
 743
 744	local->scan_chandef.chan = chan;
 745	local->scan_chandef.center_freq1 = chan->center_freq;
 
 746	local->scan_chandef.center_freq2 = 0;
 747	switch (scan_req->scan_width) {
 748	case NL80211_BSS_CHAN_WIDTH_5:
 749		local->scan_chandef.width = NL80211_CHAN_WIDTH_5;
 750		break;
 751	case NL80211_BSS_CHAN_WIDTH_10:
 752		local->scan_chandef.width = NL80211_CHAN_WIDTH_10;
 753		break;
 
 754	case NL80211_BSS_CHAN_WIDTH_20:
 755		/* If scanning on oper channel, use whatever channel-type
 756		 * is currently in use.
 757		 */
 758		oper_scan_width = cfg80211_chandef_to_scan_width(
 759					&local->_oper_chandef);
 760		if (chan == local->_oper_chandef.chan &&
 761		    oper_scan_width == scan_req->scan_width)
 762			local->scan_chandef = local->_oper_chandef;
 763		else
 764			local->scan_chandef.width = NL80211_CHAN_WIDTH_20_NOHT;
 765		break;
 766	}
 767
 768	if (ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_CHANNEL))
 769		skip = 1;
 770
 771	/* advance state machine to next channel/band */
 772	local->scan_channel_idx++;
 773
 774	if (skip) {
 775		/* if we skip this channel return to the decision state */
 776		local->next_scan_state = SCAN_DECISION;
 777		return;
 778	}
 779
 780	/*
 781	 * Probe delay is used to update the NAV, cf. 11.1.3.2.2
 782	 * (which unfortunately doesn't say _why_ step a) is done,
 783	 * but it waits for the probe delay or until a frame is
 784	 * received - and the received frame would update the NAV).
 785	 * For now, we do not support waiting until a frame is
 786	 * received.
 787	 *
 788	 * In any case, it is not necessary for a passive scan.
 789	 */
 790	if ((chan->flags & (IEEE80211_CHAN_NO_IR | IEEE80211_CHAN_RADAR)) ||
 791	    !scan_req->n_ssids) {
 792		*next_delay = IEEE80211_PASSIVE_CHANNEL_TIME;
 793		local->next_scan_state = SCAN_DECISION;
 794		return;
 795	}
 796
 797	/* active scan, send probes */
 798	*next_delay = IEEE80211_PROBE_DELAY;
 799	local->next_scan_state = SCAN_SEND_PROBE;
 800}
 801
 802static void ieee80211_scan_state_suspend(struct ieee80211_local *local,
 803					 unsigned long *next_delay)
 804{
 805	/* switch back to the operating channel */
 806	local->scan_chandef.chan = NULL;
 807	ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_CHANNEL);
 808
 809	/* disable PS */
 810	ieee80211_offchannel_return(local);
 811
 812	*next_delay = HZ / 5;
 813	/* afterwards, resume scan & go to next channel */
 814	local->next_scan_state = SCAN_RESUME;
 815}
 816
 817static void ieee80211_scan_state_resume(struct ieee80211_local *local,
 818					unsigned long *next_delay)
 819{
 820	ieee80211_offchannel_stop_vifs(local);
 821
 822	if (local->ops->flush) {
 823		ieee80211_flush_queues(local, NULL, false);
 824		*next_delay = 0;
 825	} else
 826		*next_delay = HZ / 10;
 827
 828	/* remember when we left the operating channel */
 829	local->leave_oper_channel_time = jiffies;
 830
 831	/* advance to the next channel to be scanned */
 832	local->next_scan_state = SCAN_SET_CHANNEL;
 833}
 834
 835void ieee80211_scan_work(struct work_struct *work)
 836{
 837	struct ieee80211_local *local =
 838		container_of(work, struct ieee80211_local, scan_work.work);
 839	struct ieee80211_sub_if_data *sdata;
 840	struct cfg80211_scan_request *scan_req;
 841	unsigned long next_delay = 0;
 842	bool aborted;
 843
 844	mutex_lock(&local->mtx);
 845
 846	if (!ieee80211_can_run_worker(local)) {
 847		aborted = true;
 848		goto out_complete;
 849	}
 850
 851	sdata = rcu_dereference_protected(local->scan_sdata,
 852					  lockdep_is_held(&local->mtx));
 853	scan_req = rcu_dereference_protected(local->scan_req,
 854					     lockdep_is_held(&local->mtx));
 855
 856	/* When scanning on-channel, the first-callback means completed. */
 857	if (test_bit(SCAN_ONCHANNEL_SCANNING, &local->scanning)) {
 858		aborted = test_and_clear_bit(SCAN_ABORTED, &local->scanning);
 859		goto out_complete;
 860	}
 861
 862	if (test_and_clear_bit(SCAN_COMPLETED, &local->scanning)) {
 863		aborted = test_and_clear_bit(SCAN_ABORTED, &local->scanning);
 864		goto out_complete;
 865	}
 866
 867	if (!sdata || !scan_req)
 868		goto out;
 869
 870	if (!local->scanning) {
 871		int rc;
 872
 873		RCU_INIT_POINTER(local->scan_req, NULL);
 874		RCU_INIT_POINTER(local->scan_sdata, NULL);
 875
 876		rc = __ieee80211_start_scan(sdata, scan_req);
 877		if (rc) {
 878			/* need to complete scan in cfg80211 */
 879			rcu_assign_pointer(local->scan_req, scan_req);
 880			aborted = true;
 881			goto out_complete;
 882		} else
 883			goto out;
 884	}
 885
 886	/*
 887	 * as long as no delay is required advance immediately
 888	 * without scheduling a new work
 889	 */
 890	do {
 891		if (!ieee80211_sdata_running(sdata)) {
 892			aborted = true;
 893			goto out_complete;
 894		}
 895
 896		switch (local->next_scan_state) {
 897		case SCAN_DECISION:
 898			/* if no more bands/channels left, complete scan */
 899			if (local->scan_channel_idx >= scan_req->n_channels) {
 900				aborted = false;
 901				goto out_complete;
 902			}
 903			ieee80211_scan_state_decision(local, &next_delay);
 904			break;
 905		case SCAN_SET_CHANNEL:
 906			ieee80211_scan_state_set_channel(local, &next_delay);
 907			break;
 908		case SCAN_SEND_PROBE:
 909			ieee80211_scan_state_send_probe(local, &next_delay);
 910			break;
 911		case SCAN_SUSPEND:
 912			ieee80211_scan_state_suspend(local, &next_delay);
 913			break;
 914		case SCAN_RESUME:
 915			ieee80211_scan_state_resume(local, &next_delay);
 916			break;
 917		case SCAN_ABORT:
 918			aborted = true;
 919			goto out_complete;
 920		}
 921	} while (next_delay == 0);
 922
 923	ieee80211_queue_delayed_work(&local->hw, &local->scan_work, next_delay);
 924	goto out;
 925
 926out_complete:
 927	__ieee80211_scan_completed(&local->hw, aborted);
 928out:
 929	mutex_unlock(&local->mtx);
 930}
 931
 932int ieee80211_request_scan(struct ieee80211_sub_if_data *sdata,
 933			   struct cfg80211_scan_request *req)
 934{
 935	int res;
 936
 937	mutex_lock(&sdata->local->mtx);
 938	res = __ieee80211_start_scan(sdata, req);
 939	mutex_unlock(&sdata->local->mtx);
 940
 941	return res;
 942}
 943
 944int ieee80211_request_ibss_scan(struct ieee80211_sub_if_data *sdata,
 945				const u8 *ssid, u8 ssid_len,
 946				struct ieee80211_channel **channels,
 947				unsigned int n_channels,
 948				enum nl80211_bss_scan_width scan_width)
 949{
 950	struct ieee80211_local *local = sdata->local;
 951	int ret = -EBUSY, i, n_ch = 0;
 952	enum ieee80211_band band;
 953
 954	mutex_lock(&local->mtx);
 955
 956	/* busy scanning */
 957	if (local->scan_req)
 958		goto unlock;
 959
 960	/* fill internal scan request */
 961	if (!channels) {
 962		int max_n;
 963
 964		for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
 965			if (!local->hw.wiphy->bands[band])
 966				continue;
 967
 968			max_n = local->hw.wiphy->bands[band]->n_channels;
 969			for (i = 0; i < max_n; i++) {
 970				struct ieee80211_channel *tmp_ch =
 971				    &local->hw.wiphy->bands[band]->channels[i];
 972
 973				if (tmp_ch->flags & (IEEE80211_CHAN_NO_IR |
 974						     IEEE80211_CHAN_DISABLED))
 975					continue;
 976
 977				local->int_scan_req->channels[n_ch] = tmp_ch;
 978				n_ch++;
 979			}
 980		}
 981
 982		if (WARN_ON_ONCE(n_ch == 0))
 983			goto unlock;
 984
 985		local->int_scan_req->n_channels = n_ch;
 986	} else {
 987		for (i = 0; i < n_channels; i++) {
 988			if (channels[i]->flags & (IEEE80211_CHAN_NO_IR |
 989						  IEEE80211_CHAN_DISABLED))
 990				continue;
 991
 992			local->int_scan_req->channels[n_ch] = channels[i];
 993			n_ch++;
 994		}
 995
 996		if (WARN_ON_ONCE(n_ch == 0))
 997			goto unlock;
 998
 999		local->int_scan_req->n_channels = n_ch;
1000	}
1001
1002	local->int_scan_req->ssids = &local->scan_ssid;
1003	local->int_scan_req->n_ssids = 1;
1004	local->int_scan_req->scan_width = scan_width;
1005	memcpy(local->int_scan_req->ssids[0].ssid, ssid, IEEE80211_MAX_SSID_LEN);
1006	local->int_scan_req->ssids[0].ssid_len = ssid_len;
1007
1008	ret = __ieee80211_start_scan(sdata, sdata->local->int_scan_req);
1009 unlock:
1010	mutex_unlock(&local->mtx);
1011	return ret;
1012}
1013
1014/*
1015 * Only call this function when a scan can't be queued -- under RTNL.
1016 */
1017void ieee80211_scan_cancel(struct ieee80211_local *local)
1018{
1019	/*
1020	 * We are canceling software scan, or deferred scan that was not
1021	 * yet really started (see __ieee80211_start_scan ).
1022	 *
1023	 * Regarding hardware scan:
1024	 * - we can not call  __ieee80211_scan_completed() as when
1025	 *   SCAN_HW_SCANNING bit is set this function change
1026	 *   local->hw_scan_req to operate on 5G band, what race with
1027	 *   driver which can use local->hw_scan_req
1028	 *
1029	 * - we can not cancel scan_work since driver can schedule it
1030	 *   by ieee80211_scan_completed(..., true) to finish scan
1031	 *
1032	 * Hence we only call the cancel_hw_scan() callback, but the low-level
1033	 * driver is still responsible for calling ieee80211_scan_completed()
1034	 * after the scan was completed/aborted.
1035	 */
1036
1037	mutex_lock(&local->mtx);
1038	if (!local->scan_req)
1039		goto out;
1040
1041	/*
1042	 * We have a scan running and the driver already reported completion,
1043	 * but the worker hasn't run yet or is stuck on the mutex - mark it as
1044	 * cancelled.
1045	 */
1046	if (test_bit(SCAN_HW_SCANNING, &local->scanning) &&
1047	    test_bit(SCAN_COMPLETED, &local->scanning)) {
1048		set_bit(SCAN_HW_CANCELLED, &local->scanning);
1049		goto out;
1050	}
1051
1052	if (test_bit(SCAN_HW_SCANNING, &local->scanning)) {
1053		/*
1054		 * Make sure that __ieee80211_scan_completed doesn't trigger a
1055		 * scan on another band.
1056		 */
1057		set_bit(SCAN_HW_CANCELLED, &local->scanning);
1058		if (local->ops->cancel_hw_scan)
1059			drv_cancel_hw_scan(local,
1060				rcu_dereference_protected(local->scan_sdata,
1061						lockdep_is_held(&local->mtx)));
1062		goto out;
1063	}
1064
1065	/*
1066	 * If the work is currently running, it must be blocked on
1067	 * the mutex, but we'll set scan_sdata = NULL and it'll
1068	 * simply exit once it acquires the mutex.
1069	 */
1070	cancel_delayed_work(&local->scan_work);
1071	/* and clean up */
 
1072	__ieee80211_scan_completed(&local->hw, true);
1073out:
1074	mutex_unlock(&local->mtx);
1075}
1076
1077int __ieee80211_request_sched_scan_start(struct ieee80211_sub_if_data *sdata,
1078					struct cfg80211_sched_scan_request *req)
1079{
1080	struct ieee80211_local *local = sdata->local;
1081	struct ieee80211_scan_ies sched_scan_ies = {};
1082	struct cfg80211_chan_def chandef;
1083	int ret, i, iebufsz, num_bands = 0;
1084	u32 rate_masks[IEEE80211_NUM_BANDS] = {};
1085	u8 bands_used = 0;
1086	u8 *ie;
1087	size_t len;
1088
1089	iebufsz = local->scan_ies_len + req->ie_len;
1090
1091	lockdep_assert_held(&local->mtx);
1092
1093	if (!local->ops->sched_scan_start)
1094		return -ENOTSUPP;
1095
1096	for (i = 0; i < IEEE80211_NUM_BANDS; i++) {
1097		if (local->hw.wiphy->bands[i]) {
1098			bands_used |= BIT(i);
1099			rate_masks[i] = (u32) -1;
1100			num_bands++;
1101		}
1102	}
1103
1104	ie = kzalloc(num_bands * iebufsz, GFP_KERNEL);
 
 
 
1105	if (!ie) {
1106		ret = -ENOMEM;
1107		goto out;
1108	}
1109
1110	ieee80211_prepare_scan_chandef(&chandef, req->scan_width);
1111
1112	len = ieee80211_build_preq_ies(local, ie, num_bands * iebufsz,
1113				       &sched_scan_ies, req->ie,
1114				       req->ie_len, bands_used,
1115				       rate_masks, &chandef);
1116
1117	ret = drv_sched_scan_start(local, sdata, req, &sched_scan_ies);
1118	if (ret == 0) {
1119		rcu_assign_pointer(local->sched_scan_sdata, sdata);
1120		rcu_assign_pointer(local->sched_scan_req, req);
1121	}
1122
1123	kfree(ie);
1124
1125out:
1126	if (ret) {
1127		/* Clean in case of failure after HW restart or upon resume. */
1128		RCU_INIT_POINTER(local->sched_scan_sdata, NULL);
1129		RCU_INIT_POINTER(local->sched_scan_req, NULL);
1130	}
1131
1132	return ret;
1133}
1134
1135int ieee80211_request_sched_scan_start(struct ieee80211_sub_if_data *sdata,
1136				       struct cfg80211_sched_scan_request *req)
1137{
1138	struct ieee80211_local *local = sdata->local;
1139	int ret;
1140
1141	mutex_lock(&local->mtx);
1142
1143	if (rcu_access_pointer(local->sched_scan_sdata)) {
1144		mutex_unlock(&local->mtx);
1145		return -EBUSY;
1146	}
1147
1148	ret = __ieee80211_request_sched_scan_start(sdata, req);
1149
1150	mutex_unlock(&local->mtx);
1151	return ret;
1152}
1153
1154int ieee80211_request_sched_scan_stop(struct ieee80211_local *local)
1155{
1156	struct ieee80211_sub_if_data *sched_scan_sdata;
1157	int ret = -ENOENT;
1158
1159	mutex_lock(&local->mtx);
1160
1161	if (!local->ops->sched_scan_stop) {
1162		ret = -ENOTSUPP;
1163		goto out;
1164	}
1165
1166	/* We don't want to restart sched scan anymore. */
1167	RCU_INIT_POINTER(local->sched_scan_req, NULL);
1168
1169	sched_scan_sdata = rcu_dereference_protected(local->sched_scan_sdata,
1170						lockdep_is_held(&local->mtx));
1171	if (sched_scan_sdata) {
1172		ret = drv_sched_scan_stop(local, sched_scan_sdata);
1173		if (!ret)
1174			RCU_INIT_POINTER(local->sched_scan_sdata, NULL);
1175	}
1176out:
1177	mutex_unlock(&local->mtx);
1178
1179	return ret;
1180}
1181
1182void ieee80211_sched_scan_results(struct ieee80211_hw *hw)
1183{
1184	struct ieee80211_local *local = hw_to_local(hw);
1185
1186	trace_api_sched_scan_results(local);
1187
1188	cfg80211_sched_scan_results(hw->wiphy);
1189}
1190EXPORT_SYMBOL(ieee80211_sched_scan_results);
1191
1192void ieee80211_sched_scan_end(struct ieee80211_local *local)
1193{
1194	mutex_lock(&local->mtx);
1195
1196	if (!rcu_access_pointer(local->sched_scan_sdata)) {
1197		mutex_unlock(&local->mtx);
1198		return;
1199	}
1200
1201	RCU_INIT_POINTER(local->sched_scan_sdata, NULL);
1202
1203	/* If sched scan was aborted by the driver. */
1204	RCU_INIT_POINTER(local->sched_scan_req, NULL);
1205
1206	mutex_unlock(&local->mtx);
1207
1208	cfg80211_sched_scan_stopped(local->hw.wiphy);
1209}
1210
1211void ieee80211_sched_scan_stopped_work(struct work_struct *work)
1212{
1213	struct ieee80211_local *local =
1214		container_of(work, struct ieee80211_local,
1215			     sched_scan_stopped_work);
1216
1217	ieee80211_sched_scan_end(local);
1218}
1219
1220void ieee80211_sched_scan_stopped(struct ieee80211_hw *hw)
1221{
1222	struct ieee80211_local *local = hw_to_local(hw);
1223
1224	trace_api_sched_scan_stopped(local);
1225
1226	/*
1227	 * this shouldn't really happen, so for simplicity
1228	 * simply ignore it, and let mac80211 reconfigure
1229	 * the sched scan later on.
1230	 */
1231	if (local->in_reconfig)
1232		return;
1233
1234	schedule_work(&local->sched_scan_stopped_work);
1235}
1236EXPORT_SYMBOL(ieee80211_sched_scan_stopped);