sta_info.c 61.3 KB
Newer Older
1 2 3
/*
 * Copyright 2002-2005, Instant802 Networks, Inc.
 * Copyright 2006-2007	Jiri Benc <jbenc@suse.cz>
4
 * Copyright 2013-2014  Intel Mobile Communications GmbH
5
 * Copyright (C) 2015 - 2016 Intel Deutschland GmbH
6 7 8 9 10 11 12 13
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */

#include <linux/module.h>
#include <linux/init.h>
14
#include <linux/etherdevice.h>
15 16 17 18 19
#include <linux/netdevice.h>
#include <linux/types.h>
#include <linux/slab.h>
#include <linux/skbuff.h>
#include <linux/if_arp.h>
20
#include <linux/timer.h>
21
#include <linux/rtnetlink.h>
22 23 24

#include <net/mac80211.h>
#include "ieee80211_i.h"
25
#include "driver-ops.h"
J
Johannes Berg 已提交
26
#include "rate.h"
27
#include "sta_info.h"
J
Jiri Benc 已提交
28
#include "debugfs_sta.h"
29
#include "mesh.h"
30
#include "wme.h"
31

32 33 34 35 36 37 38
/**
 * DOC: STA information lifetime rules
 *
 * STA info structures (&struct sta_info) are managed in a hash table
 * for faster lookup and a list for iteration. They are managed using
 * RCU, i.e. access to the list and hash table is protected by RCU.
 *
39 40 41 42 43 44 45 46
 * Upon allocating a STA info structure with sta_info_alloc(), the caller
 * owns that structure. It must then insert it into the hash table using
 * either sta_info_insert() or sta_info_insert_rcu(); only in the latter
 * case (which acquires an rcu read section but must not be called from
 * within one) will the pointer still be valid after the call. Note that
 * the caller may not do much with the STA info before inserting it, in
 * particular, it may not start any mesh peer link management or add
 * encryption keys.
47 48 49
 *
 * When the insertion fails (sta_info_insert()) returns non-zero), the
 * structure will have been freed by sta_info_insert()!
50
 *
51
 * Station entries are added by mac80211 when you establish a link with a
52 53
 * peer. This means different things for the different type of interfaces
 * we support. For a regular station this mean we add the AP sta when we
L
Lucas De Marchi 已提交
54
 * receive an association response from the AP. For IBSS this occurs when
55
 * get to know about a peer on the same IBSS. For WDS we add the sta for
L
Lucas De Marchi 已提交
56
 * the peer immediately upon device open. When using AP mode we add stations
57
 * for each respective station upon request from userspace through nl80211.
58
 *
59 60
 * In order to remove a STA info structure, various sta_info_destroy_*()
 * calls are available.
61
 *
62 63 64 65
 * There is no concept of ownership on a STA entry, each structure is
 * owned by the global hash table/list until it is removed. All users of
 * the structure need to be RCU protected so that the structure won't be
 * freed before they are done using it.
66
 */
67

68 69
static const struct rhashtable_params sta_rht_params = {
	.nelem_hint = 3, /* start small */
70
	.insecure_elasticity = true, /* Disable chain-length checks. */
71
	.automatic_shrinking = true,
72
	.head_offset = offsetof(struct sta_info, hash_node),
73
	.key_offset = offsetof(struct sta_info, addr),
74 75
	.key_len = ETH_ALEN,
	.hashfn = sta_addr_hash,
76
	.max_size = CONFIG_MAC80211_STA_HASH_MAX_SIZE,
77 78
};

79
/* Caller must hold local->sta_mtx */
80 81
static int sta_info_hash_del(struct ieee80211_local *local,
			     struct sta_info *sta)
82
{
83 84
	return rhashtable_remove_fast(&local->sta_hash, &sta->hash_node,
				      sta_rht_params);
85 86
}

87
static void __cleanup_single_sta(struct sta_info *sta)
88 89 90 91 92
{
	int ac, i;
	struct tid_ampdu_tx *tid_tx;
	struct ieee80211_sub_if_data *sdata = sta->sdata;
	struct ieee80211_local *local = sdata->local;
93
	struct fq *fq = &local->fq;
94
	struct ps_data *ps;
95

96
	if (test_sta_flag(sta, WLAN_STA_PS_STA) ||
97 98
	    test_sta_flag(sta, WLAN_STA_PS_DRIVER) ||
	    test_sta_flag(sta, WLAN_STA_PS_DELIVER)) {
99 100 101
		if (sta->sdata->vif.type == NL80211_IFTYPE_AP ||
		    sta->sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
			ps = &sdata->bss->ps;
M
Marco Porsch 已提交
102 103
		else if (ieee80211_vif_is_mesh(&sdata->vif))
			ps = &sdata->u.mesh.ps;
104 105
		else
			return;
106 107

		clear_sta_flag(sta, WLAN_STA_PS_STA);
108
		clear_sta_flag(sta, WLAN_STA_PS_DRIVER);
109
		clear_sta_flag(sta, WLAN_STA_PS_DELIVER);
110

111
		atomic_dec(&ps->num_sta_ps);
112 113
	}

114 115 116 117
	if (sta->sta.txq[0]) {
		for (i = 0; i < ARRAY_SIZE(sta->sta.txq); i++) {
			struct txq_info *txqi = to_txq_info(sta->sta.txq[i]);

118 119 120
			spin_lock_bh(&fq->lock);
			ieee80211_txq_purge(local, txqi);
			spin_unlock_bh(&fq->lock);
121 122 123
		}
	}

124 125
	for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
		local->total_ps_buffered -= skb_queue_len(&sta->ps_tx_buf[ac]);
126 127
		ieee80211_purge_tx_queue(&local->hw, &sta->ps_tx_buf[ac]);
		ieee80211_purge_tx_queue(&local->hw, &sta->tx_filtered[ac]);
128 129
	}

130 131
	if (ieee80211_vif_is_mesh(&sdata->vif))
		mesh_sta_cleanup(sta);
132

133
	cancel_work_sync(&sta->drv_deliver_wk);
134 135 136 137 138 139 140

	/*
	 * Destroy aggregation state here. It would be nice to wait for the
	 * driver to finish aggregation stop and then clean up, but for now
	 * drivers have to handle aggregation stop being requested, followed
	 * directly by station destruction.
	 */
141
	for (i = 0; i < IEEE80211_NUM_TIDS; i++) {
142
		kfree(sta->ampdu_mlme.tid_start_tx[i]);
143 144 145
		tid_tx = rcu_dereference_raw(sta->ampdu_mlme.tid_tx[i]);
		if (!tid_tx)
			continue;
146
		ieee80211_purge_tx_queue(&local->hw, &tid_tx->pending);
147 148
		kfree(tid_tx);
	}
149
}
150

151 152 153 154 155 156
static void cleanup_single_sta(struct sta_info *sta)
{
	struct ieee80211_sub_if_data *sdata = sta->sdata;
	struct ieee80211_local *local = sdata->local;

	__cleanup_single_sta(sta);
157 158 159
	sta_info_free(local, sta);
}

160
/* protected by RCU */
161 162
struct sta_info *sta_info_get(struct ieee80211_sub_if_data *sdata,
			      const u8 *addr)
163
{
164
	struct ieee80211_local *local = sdata->local;
165 166 167
	struct sta_info *sta;
	struct rhash_head *tmp;
	const struct bucket_table *tbl;
168

169 170
	rcu_read_lock();
	tbl = rht_dereference_rcu(local->sta_hash.tbl, &local->sta_hash);
171

172 173 174 175 176 177 178 179 180 181 182
	for_each_sta_info(local, tbl, addr, sta, tmp) {
		if (sta->sdata == sdata) {
			rcu_read_unlock();
			/* this is safe as the caller must already hold
			 * another rcu read section or the mutex
			 */
			return sta;
		}
	}
	rcu_read_unlock();
	return NULL;
183 184
}

185 186 187 188 189 190 191 192 193
/*
 * Get sta info either from the specified interface
 * or from one of its vlans
 */
struct sta_info *sta_info_get_bss(struct ieee80211_sub_if_data *sdata,
				  const u8 *addr)
{
	struct ieee80211_local *local = sdata->local;
	struct sta_info *sta;
194 195
	struct rhash_head *tmp;
	const struct bucket_table *tbl;
196

197 198 199 200 201 202 203 204 205 206 207 208
	rcu_read_lock();
	tbl = rht_dereference_rcu(local->sta_hash.tbl, &local->sta_hash);

	for_each_sta_info(local, tbl, addr, sta, tmp) {
		if (sta->sdata == sdata ||
		    (sta->sdata->bss && sta->sdata->bss == sdata->bss)) {
			rcu_read_unlock();
			/* this is safe as the caller must already hold
			 * another rcu read section or the mutex
			 */
			return sta;
		}
209
	}
210 211
	rcu_read_unlock();
	return NULL;
212 213
}

214 215
struct sta_info *sta_info_get_by_idx(struct ieee80211_sub_if_data *sdata,
				     int idx)
216
{
217
	struct ieee80211_local *local = sdata->local;
218 219 220
	struct sta_info *sta;
	int i = 0;

221
	list_for_each_entry_rcu(sta, &local->sta_list, list) {
222
		if (sdata != sta->sdata)
223
			continue;
224 225 226 227
		if (i < idx) {
			++i;
			continue;
		}
228
		return sta;
229 230 231 232
	}

	return NULL;
}
233

234
/**
235
 * sta_info_free - free STA
236
 *
R
Randy Dunlap 已提交
237
 * @local: pointer to the global information
238 239 240
 * @sta: STA info to free
 *
 * This function must undo everything done by sta_info_alloc()
241 242 243
 * that may happen before sta_info_insert(). It may only be
 * called when sta_info_insert() has not been attempted (and
 * if that fails, the station is freed anyway.)
244
 */
245
void sta_info_free(struct ieee80211_local *local, struct sta_info *sta)
246
{
247
	if (sta->rate_ctrl)
248
		rate_control_free_sta(sta);
249

J
Johannes Berg 已提交
250
	sta_dbg(sta->sdata, "Destroyed STA %pM\n", sta->sta.addr);
251

252 253
	if (sta->sta.txq[0])
		kfree(to_txq_info(sta->sta.txq[0]));
254
	kfree(rcu_dereference_raw(sta->sta.rates));
255 256 257
#ifdef CONFIG_MAC80211_MESH
	kfree(sta->mesh);
#endif
258
	free_percpu(sta->pcpu_rx_stats);
259 260 261
	kfree(sta);
}

262
/* Caller must hold local->sta_mtx */
263 264
static int sta_info_hash_add(struct ieee80211_local *local,
			     struct sta_info *sta)
265
{
266 267
	return rhashtable_insert_fast(&local->sta_hash, &sta->hash_node,
				      sta_rht_params);
268 269
}

270
static void sta_deliver_ps_frames(struct work_struct *wk)
271 272 273
{
	struct sta_info *sta;

274
	sta = container_of(wk, struct sta_info, drv_deliver_wk);
275 276 277 278

	if (sta->dead)
		return;

279 280
	local_bh_disable();
	if (!test_sta_flag(sta, WLAN_STA_PS_STA))
281
		ieee80211_sta_ps_deliver_wakeup(sta);
282
	else if (test_and_clear_sta_flag(sta, WLAN_STA_PSPOLL))
283
		ieee80211_sta_ps_deliver_poll_response(sta);
284
	else if (test_and_clear_sta_flag(sta, WLAN_STA_UAPSD))
J
Johannes Berg 已提交
285
		ieee80211_sta_ps_deliver_uapsd(sta);
286
	local_bh_enable();
287 288
}

289 290 291
static int sta_prepare_rate_control(struct ieee80211_local *local,
				    struct sta_info *sta, gfp_t gfp)
{
292
	if (ieee80211_hw_check(&local->hw, HAS_RATE_CONTROL))
293 294
		return 0;

295
	sta->rate_ctrl = local->rate_ctrl;
296
	sta->rate_ctrl_priv = rate_control_alloc_sta(sta->rate_ctrl,
J
Johannes Berg 已提交
297
						     sta, gfp);
298
	if (!sta->rate_ctrl_priv)
299 300 301 302 303
		return -ENOMEM;

	return 0;
}

J
Johannes Berg 已提交
304
struct sta_info *sta_info_alloc(struct ieee80211_sub_if_data *sdata,
305
				const u8 *addr, gfp_t gfp)
306
{
307
	struct ieee80211_local *local = sdata->local;
308
	struct ieee80211_hw *hw = &local->hw;
309
	struct sta_info *sta;
310
	int i;
311

312
	sta = kzalloc(sizeof(*sta) + hw->sta_data_size, gfp);
313
	if (!sta)
J
Johannes Berg 已提交
314
		return NULL;
315

316 317 318 319 320 321 322
	if (ieee80211_hw_check(hw, USES_RSS)) {
		sta->pcpu_rx_stats =
			alloc_percpu(struct ieee80211_sta_rx_stats);
		if (!sta->pcpu_rx_stats)
			goto free;
	}

323
	spin_lock_init(&sta->lock);
324
	spin_lock_init(&sta->ps_lock);
325
	INIT_WORK(&sta->drv_deliver_wk, sta_deliver_ps_frames);
J
Johannes Berg 已提交
326
	INIT_WORK(&sta->ampdu_mlme.work, ieee80211_ba_session_work);
327
	mutex_init(&sta->ampdu_mlme.mtx);
328
#ifdef CONFIG_MAC80211_MESH
329 330 331 332 333 334 335 336 337 338
	if (ieee80211_vif_is_mesh(&sdata->vif)) {
		sta->mesh = kzalloc(sizeof(*sta->mesh), gfp);
		if (!sta->mesh)
			goto free;
		spin_lock_init(&sta->mesh->plink_lock);
		if (ieee80211_vif_is_mesh(&sdata->vif) &&
		    !sdata->u.mesh.user_mpm)
			init_timer(&sta->mesh->plink_timer);
		sta->mesh->nonpeer_pm = NL80211_MESH_POWER_ACTIVE;
	}
339
#endif
340

341
	memcpy(sta->addr, addr, ETH_ALEN);
342
	memcpy(sta->sta.addr, addr, ETH_ALEN);
343 344
	sta->local = local;
	sta->sdata = sdata;
345
	sta->rx_stats.last_rx = jiffies;
346

347 348
	u64_stats_init(&sta->rx_stats.syncp);

349 350
	sta->sta_state = IEEE80211_STA_NONE;

351 352 353
	/* Mark TID as unreserved */
	sta->reserved_tid = IEEE80211_TID_UNRESERVED;

A
Arnd Bergmann 已提交
354
	sta->last_connected = ktime_get_seconds();
355 356 357
	ewma_signal_init(&sta->rx_stats_avg.signal);
	for (i = 0; i < ARRAY_SIZE(sta->rx_stats_avg.chain_signal); i++)
		ewma_signal_init(&sta->rx_stats_avg.chain_signal[i]);
358

359 360 361 362 363 364 365 366 367 368 369 370
	if (local->ops->wake_tx_queue) {
		void *txq_data;
		int size = sizeof(struct txq_info) +
			   ALIGN(hw->txq_data_size, sizeof(void *));

		txq_data = kcalloc(ARRAY_SIZE(sta->sta.txq), size, gfp);
		if (!txq_data)
			goto free;

		for (i = 0; i < ARRAY_SIZE(sta->sta.txq); i++) {
			struct txq_info *txq = txq_data + i * size;

371
			ieee80211_txq_init(sdata, sta, txq, i);
372
		}
373
	}
374

375 376 377
	if (sta_prepare_rate_control(local, sta, gfp))
		goto free_txq;

378
	for (i = 0; i < IEEE80211_NUM_TIDS; i++) {
379 380 381 382 383
		/*
		 * timer_to_tid must be initialized with identity mapping
		 * to enable session_timer's data differentiation. See
		 * sta_rx_agg_session_timer_expired for usage.
		 */
384 385
		sta->timer_to_tid[i] = i;
	}
386 387 388 389
	for (i = 0; i < IEEE80211_NUM_ACS; i++) {
		skb_queue_head_init(&sta->ps_tx_buf[i]);
		skb_queue_head_init(&sta->tx_filtered[i]);
	}
J
Johannes Berg 已提交
390

391
	for (i = 0; i < IEEE80211_NUM_TIDS; i++)
392
		sta->last_seq_ctrl[i] = cpu_to_le16(USHRT_MAX);
393

394
	sta->sta.smps_mode = IEEE80211_SMPS_OFF;
395 396 397
	if (sdata->vif.type == NL80211_IFTYPE_AP ||
	    sdata->vif.type == NL80211_IFTYPE_AP_VLAN) {
		struct ieee80211_supported_band *sband =
398
			hw->wiphy->bands[ieee80211_get_sdata_band(sdata)];
399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418
		u8 smps = (sband->ht_cap.cap & IEEE80211_HT_CAP_SM_PS) >>
				IEEE80211_HT_CAP_SM_PS_SHIFT;
		/*
		 * Assume that hostapd advertises our caps in the beacon and
		 * this is the known_smps_mode for a station that just assciated
		 */
		switch (smps) {
		case WLAN_HT_SMPS_CONTROL_DISABLED:
			sta->known_smps_mode = IEEE80211_SMPS_OFF;
			break;
		case WLAN_HT_SMPS_CONTROL_STATIC:
			sta->known_smps_mode = IEEE80211_SMPS_STATIC;
			break;
		case WLAN_HT_SMPS_CONTROL_DYNAMIC:
			sta->known_smps_mode = IEEE80211_SMPS_DYNAMIC;
			break;
		default:
			WARN_ON(1);
		}
	}
419

F
Felix Fietkau 已提交
420 421
	sta->sta.max_rc_amsdu_len = IEEE80211_MAX_MPDU_LEN_HT_BA;

J
Johannes Berg 已提交
422
	sta_dbg(sdata, "Allocated STA %pM\n", sta->sta.addr);
423

424
	return sta;
425 426 427 428 429

free_txq:
	if (sta->sta.txq[0])
		kfree(to_txq_info(sta->sta.txq[0]));
free:
430 431 432
#ifdef CONFIG_MAC80211_MESH
	kfree(sta->mesh);
#endif
433 434
	kfree(sta);
	return NULL;
J
Johannes Berg 已提交
435 436
}

437
static int sta_info_insert_check(struct sta_info *sta)
438 439 440
{
	struct ieee80211_sub_if_data *sdata = sta->sdata;

441 442 443 444 445
	/*
	 * Can't be a WARN_ON because it can be triggered through a race:
	 * something inserts a STA (on one CPU) without holding the RTNL
	 * and another CPU turns off the net device.
	 */
446 447
	if (unlikely(!ieee80211_sdata_running(sdata)))
		return -ENETDOWN;
448

449
	if (WARN_ON(ether_addr_equal(sta->sta.addr, sdata->vif.addr) ||
450 451 452
		    is_multicast_ether_addr(sta->sta.addr)))
		return -EINVAL;

453 454 455 456 457 458 459 460 461 462 463 464 465
	/* Strictly speaking this isn't necessary as we hold the mutex, but
	 * the rhashtable code can't really deal with that distinction. We
	 * do require the mutex for correctness though.
	 */
	rcu_read_lock();
	lockdep_assert_held(&sdata->local->sta_mtx);
	if (ieee80211_hw_check(&sdata->local->hw, NEEDS_UNIQUE_STA_ADDR) &&
	    ieee80211_find_sta_by_ifaddr(&sdata->local->hw, sta->addr, NULL)) {
		rcu_read_unlock();
		return -ENOTUNIQ;
	}
	rcu_read_unlock();

466 467 468
	return 0;
}

J
Johannes Berg 已提交
469 470 471 472 473 474 475 476 477 478 479 480 481 482
static int sta_info_insert_drv_state(struct ieee80211_local *local,
				     struct ieee80211_sub_if_data *sdata,
				     struct sta_info *sta)
{
	enum ieee80211_sta_state state;
	int err = 0;

	for (state = IEEE80211_STA_NOTEXIST; state < sta->sta_state; state++) {
		err = drv_sta_state(local, sdata, sta, state, state + 1);
		if (err)
			break;
	}

	if (!err) {
483 484 485 486 487 488
		/*
		 * Drivers using legacy sta_add/sta_remove callbacks only
		 * get uploaded set to true after sta_add is called.
		 */
		if (!local->ops->sta_add)
			sta->uploaded = true;
J
Johannes Berg 已提交
489 490 491 492
		return 0;
	}

	if (sdata->vif.type == NL80211_IFTYPE_ADHOC) {
J
Johannes Berg 已提交
493 494 495
		sdata_info(sdata,
			   "failed to move IBSS STA %pM to state %d (%d) - keeping it anyway\n",
			   sta->sta.addr, state + 1, err);
J
Johannes Berg 已提交
496 497 498 499 500 501 502 503 504 505
		err = 0;
	}

	/* unwind on error */
	for (; state > IEEE80211_STA_NOTEXIST; state--)
		WARN_ON(drv_sta_state(local, sdata, sta, state, state - 1));

	return err;
}

506 507 508 509 510
/*
 * should be called with sta_mtx locked
 * this function replaces the mutex lock
 * with a RCU lock
 */
511
static int sta_info_insert_finish(struct sta_info *sta) __acquires(RCU)
512 513 514
{
	struct ieee80211_local *local = sta->local;
	struct ieee80211_sub_if_data *sdata = sta->sdata;
515
	struct station_info *sinfo;
516 517 518
	int err = 0;

	lockdep_assert_held(&local->sta_mtx);
519

520 521 522 523 524 525
	sinfo = kzalloc(sizeof(struct station_info), GFP_KERNEL);
	if (!sinfo) {
		err = -ENOMEM;
		goto out_err;
	}

526 527 528 529
	/* check if STA exists already */
	if (sta_info_get_bss(sdata, sta->sta.addr)) {
		err = -EEXIST;
		goto out_err;
530
	}
531

532 533 534
	local->num_sta++;
	local->sta_generation++;
	smp_mb();
535

536 537 538
	/* simplify things and don't accept BA sessions yet */
	set_sta_flag(sta, WLAN_STA_BLOCK_BA);

539
	/* make the station visible */
540 541 542
	err = sta_info_hash_add(local, sta);
	if (err)
		goto out_drop_sta;
543

544
	list_add_tail_rcu(&sta->list, &local->sta_list);
545

546 547 548 549 550
	/* notify driver */
	err = sta_info_insert_drv_state(local, sdata, sta);
	if (err)
		goto out_remove;

551
	set_sta_flag(sta, WLAN_STA_INSERTED);
552 553
	/* accept BA sessions now */
	clear_sta_flag(sta, WLAN_STA_BLOCK_BA);
554

555 556
	ieee80211_sta_debugfs_add(sta);
	rate_control_add_sta_debugfs(sta);
557

558 559 560
	sinfo->generation = local->sta_generation;
	cfg80211_new_sta(sdata->dev, sta->sta.addr, sinfo, GFP_KERNEL);
	kfree(sinfo);
561

J
Johannes Berg 已提交
562
	sta_dbg(sdata, "Inserted STA %pM\n", sta->sta.addr);
563

564 565 566
	/* move reference to rcu-protected */
	rcu_read_lock();
	mutex_unlock(&local->sta_mtx);
J
Jiri Benc 已提交
567

J
Johannes Berg 已提交
568 569 570
	if (ieee80211_vif_is_mesh(&sdata->vif))
		mesh_accept_plinks_update(sdata);

571
	return 0;
572 573 574
 out_remove:
	sta_info_hash_del(local, sta);
	list_del_rcu(&sta->list);
575
 out_drop_sta:
576 577 578
	local->num_sta--;
	synchronize_net();
	__cleanup_single_sta(sta);
579 580
 out_err:
	mutex_unlock(&local->sta_mtx);
S
Sudip Mukherjee 已提交
581
	kfree(sinfo);
582 583
	rcu_read_lock();
	return err;
584 585 586 587 588
}

int sta_info_insert_rcu(struct sta_info *sta) __acquires(RCU)
{
	struct ieee80211_local *local = sta->local;
589
	int err;
590

591 592
	might_sleep();

593 594
	mutex_lock(&local->sta_mtx);

595 596
	err = sta_info_insert_check(sta);
	if (err) {
597
		mutex_unlock(&local->sta_mtx);
598 599 600 601
		rcu_read_lock();
		goto out_free;
	}

602
	err = sta_info_insert_finish(sta);
603 604 605
	if (err)
		goto out_free;

J
Johannes Berg 已提交
606
	return 0;
607
 out_free:
608
	sta_info_free(local, sta);
609
	return err;
610 611
}

612 613 614 615 616 617 618 619 620
int sta_info_insert(struct sta_info *sta)
{
	int err = sta_info_insert_rcu(sta);

	rcu_read_unlock();

	return err;
}

621
static inline void __bss_tim_set(u8 *tim, u16 id)
622 623 624 625 626
{
	/*
	 * This format has been mandated by the IEEE specifications,
	 * so this line may not be changed to use the __set_bit() format.
	 */
627
	tim[id / 8] |= (1 << (id % 8));
628 629
}

630
static inline void __bss_tim_clear(u8 *tim, u16 id)
631 632 633 634 635
{
	/*
	 * This format has been mandated by the IEEE specifications,
	 * so this line may not be changed to use the __clear_bit() format.
	 */
636
	tim[id / 8] &= ~(1 << (id % 8));
637 638
}

639 640 641 642 643 644 645 646 647
static inline bool __bss_tim_get(u8 *tim, u16 id)
{
	/*
	 * This format has been mandated by the IEEE specifications,
	 * so this line may not be changed to use the test_bit() format.
	 */
	return tim[id / 8] & (1 << (id % 8));
}

648
static unsigned long ieee80211_tids_for_ac(int ac)
649
{
650 651 652 653 654 655 656 657 658 659 660 661 662
	/* If we ever support TIDs > 7, this obviously needs to be adjusted */
	switch (ac) {
	case IEEE80211_AC_VO:
		return BIT(6) | BIT(7);
	case IEEE80211_AC_VI:
		return BIT(4) | BIT(5);
	case IEEE80211_AC_BE:
		return BIT(0) | BIT(3);
	case IEEE80211_AC_BK:
		return BIT(1) | BIT(2);
	default:
		WARN_ON(1);
		return 0;
663
	}
664 665
}

666
static void __sta_info_recalc_tim(struct sta_info *sta, bool ignore_pending)
667
{
J
Johannes Berg 已提交
668
	struct ieee80211_local *local = sta->local;
669
	struct ps_data *ps;
670 671 672
	bool indicate_tim = false;
	u8 ignore_for_tim = sta->sta.uapsd_queues;
	int ac;
673
	u16 id = sta->sta.aid;
674 675 676 677 678

	if (sta->sdata->vif.type == NL80211_IFTYPE_AP ||
	    sta->sdata->vif.type == NL80211_IFTYPE_AP_VLAN) {
		if (WARN_ON_ONCE(!sta->sdata->bss))
			return;
679

680
		ps = &sta->sdata->bss->ps;
M
Marco Porsch 已提交
681 682 683 684
#ifdef CONFIG_MAC80211_MESH
	} else if (ieee80211_vif_is_mesh(&sta->sdata->vif)) {
		ps = &sta->sdata->u.mesh.ps;
#endif
685
	} else {
J
Johannes Berg 已提交
686
		return;
687
	}
688

J
Johannes Berg 已提交
689
	/* No need to do anything if the driver does all */
690
	if (ieee80211_hw_check(&local->hw, AP_LINK_PS))
J
Johannes Berg 已提交
691
		return;
692

J
Johannes Berg 已提交
693 694
	if (sta->dead)
		goto done;
695

696 697 698 699 700 701 702 703 704
	/*
	 * If all ACs are delivery-enabled then we should build
	 * the TIM bit for all ACs anyway; if only some are then
	 * we ignore those and build the TIM bit using only the
	 * non-enabled ones.
	 */
	if (ignore_for_tim == BIT(IEEE80211_NUM_ACS) - 1)
		ignore_for_tim = 0;

705 706 707
	if (ignore_pending)
		ignore_for_tim = BIT(IEEE80211_NUM_ACS) - 1;

708 709
	for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
		unsigned long tids;
710

711 712 713 714 715 716 717
		if (ignore_for_tim & BIT(ac))
			continue;

		indicate_tim |= !skb_queue_empty(&sta->tx_filtered[ac]) ||
				!skb_queue_empty(&sta->ps_tx_buf[ac]);
		if (indicate_tim)
			break;
718

719 720 721 722
		tids = ieee80211_tids_for_ac(ac);

		indicate_tim |=
			sta->driver_buffered_tids & tids;
723 724
		indicate_tim |=
			sta->txq_buffered_tids & tids;
725
	}
726

J
Johannes Berg 已提交
727
 done:
728
	spin_lock_bh(&local->tim_lock);
729

730 731 732
	if (indicate_tim == __bss_tim_get(ps->tim, id))
		goto out_unlock;

733
	if (indicate_tim)
734
		__bss_tim_set(ps->tim, id);
J
Johannes Berg 已提交
735
	else
736
		__bss_tim_clear(ps->tim, id);
737

738
	if (local->ops->set_tim && !WARN_ON(sta->dead)) {
J
Johannes Berg 已提交
739
		local->tim_in_locked_section = true;
740
		drv_set_tim(local, &sta->sta, indicate_tim);
J
Johannes Berg 已提交
741 742
		local->tim_in_locked_section = false;
	}
743

744
out_unlock:
745
	spin_unlock_bh(&local->tim_lock);
746 747
}

748 749 750 751 752
void sta_info_recalc_tim(struct sta_info *sta)
{
	__sta_info_recalc_tim(sta, false);
}

753
static bool sta_info_buffer_expired(struct sta_info *sta, struct sk_buff *skb)
754
{
755
	struct ieee80211_tx_info *info;
756 757 758
	int timeout;

	if (!skb)
759
		return false;
760

761
	info = IEEE80211_SKB_CB(skb);
762 763

	/* Timeout: (2 * listen_interval * beacon_int * 1024 / 1000000) sec */
764 765 766
	timeout = (sta->listen_interval *
		   sta->sdata->vif.bss_conf.beacon_int *
		   32 / 15625) * HZ;
767 768
	if (timeout < STA_TX_BUFFER_EXPIRE)
		timeout = STA_TX_BUFFER_EXPIRE;
769
	return time_after(jiffies, info->control.jiffies + timeout);
770 771 772
}


773 774
static bool sta_info_cleanup_expire_buffered_ac(struct ieee80211_local *local,
						struct sta_info *sta, int ac)
775 776 777 778
{
	unsigned long flags;
	struct sk_buff *skb;

779 780 781 782 783 784 785 786
	/*
	 * First check for frames that should expire on the filtered
	 * queue. Frames here were rejected by the driver and are on
	 * a separate queue to avoid reordering with normal PS-buffered
	 * frames. They also aren't accounted for right now in the
	 * total_ps_buffered counter.
	 */
	for (;;) {
787 788
		spin_lock_irqsave(&sta->tx_filtered[ac].lock, flags);
		skb = skb_peek(&sta->tx_filtered[ac]);
789
		if (sta_info_buffer_expired(sta, skb))
790
			skb = __skb_dequeue(&sta->tx_filtered[ac]);
791 792
		else
			skb = NULL;
793
		spin_unlock_irqrestore(&sta->tx_filtered[ac].lock, flags);
794 795 796 797 798 799 800 801 802

		/*
		 * Frames are queued in order, so if this one
		 * hasn't expired yet we can stop testing. If
		 * we actually reached the end of the queue we
		 * also need to stop, of course.
		 */
		if (!skb)
			break;
803
		ieee80211_free_txskb(&local->hw, skb);
804 805 806 807 808 809 810 811
	}

	/*
	 * Now also check the normal PS-buffered queue, this will
	 * only find something if the filtered queue was emptied
	 * since the filtered frames are all before the normal PS
	 * buffered frames.
	 */
812
	for (;;) {
813 814
		spin_lock_irqsave(&sta->ps_tx_buf[ac].lock, flags);
		skb = skb_peek(&sta->ps_tx_buf[ac]);
815
		if (sta_info_buffer_expired(sta, skb))
816
			skb = __skb_dequeue(&sta->ps_tx_buf[ac]);
817
		else
818
			skb = NULL;
819
		spin_unlock_irqrestore(&sta->ps_tx_buf[ac].lock, flags);
820

821 822 823 824 825
		/*
		 * frames are queued in order, so if this one
		 * hasn't expired yet (or we reached the end of
		 * the queue) we can stop testing
		 */
826
		if (!skb)
827
			break;
828 829

		local->total_ps_buffered--;
J
Johannes Berg 已提交
830 831
		ps_dbg(sta->sdata, "Buffered frame expired (STA %pM)\n",
		       sta->sta.addr);
832
		ieee80211_free_txskb(&local->hw, skb);
833
	}
834

835 836 837 838 839 840 841 842 843 844 845 846
	/*
	 * Finally, recalculate the TIM bit for this station -- it might
	 * now be clear because the station was too slow to retrieve its
	 * frames.
	 */
	sta_info_recalc_tim(sta);

	/*
	 * Return whether there are any frames still buffered, this is
	 * used to check whether the cleanup timer still needs to run,
	 * if there are no frames we don't need to rearm the timer.
	 */
847 848 849 850 851 852 853 854 855 856
	return !(skb_queue_empty(&sta->ps_tx_buf[ac]) &&
		 skb_queue_empty(&sta->tx_filtered[ac]));
}

static bool sta_info_cleanup_expire_buffered(struct ieee80211_local *local,
					     struct sta_info *sta)
{
	bool have_buffered = false;
	int ac;

M
Marco Porsch 已提交
857 858 859
	/* This is only necessary for stations on BSS/MBSS interfaces */
	if (!sta->sdata->bss &&
	    !ieee80211_vif_is_mesh(&sta->sdata->vif))
860 861 862 863 864 865 866
		return false;

	for (ac = 0; ac < IEEE80211_NUM_ACS; ac++)
		have_buffered |=
			sta_info_cleanup_expire_buffered_ac(local, sta, ac);

	return have_buffered;
867 868
}

869
static int __must_check __sta_info_destroy_part1(struct sta_info *sta)
870
{
871 872
	struct ieee80211_local *local;
	struct ieee80211_sub_if_data *sdata;
873
	int ret;
874

875
	might_sleep();
876

877 878
	if (!sta)
		return -ENOENT;
879

880 881
	local = sta->local;
	sdata = sta->sdata;
882

883 884
	lockdep_assert_held(&local->sta_mtx);

885 886 887 888 889 890
	/*
	 * Before removing the station from the driver and
	 * rate control, it might still start new aggregation
	 * sessions -- block that to make sure the tear-down
	 * will be sufficient.
	 */
J
Johannes Berg 已提交
891
	set_sta_flag(sta, WLAN_STA_BLOCK_BA);
892
	ieee80211_sta_tear_down_BA_sessions(sta, AGG_STOP_DESTROY_STA);
893

894 895 896 897 898 899 900
	/*
	 * Before removing the station from the driver there might be pending
	 * rx frames on RSS queues sent prior to the disassociation - wait for
	 * all such frames to be processed.
	 */
	drv_sync_rx_queues(local, sta);

901
	ret = sta_info_hash_del(local, sta);
902
	if (WARN_ON(ret))
903 904
		return ret;

905 906 907 908 909 910 911 912 913
	/*
	 * for TDLS peers, make sure to return to the base channel before
	 * removal.
	 */
	if (test_sta_flag(sta, WLAN_STA_TDLS_OFF_CHANNEL)) {
		drv_tdls_cancel_channel_switch(local, sdata, &sta->sta);
		clear_sta_flag(sta, WLAN_STA_TDLS_OFF_CHANNEL);
	}

914
	list_del_rcu(&sta->list);
915
	sta->removed = true;
916

917 918
	drv_sta_pre_rcu_remove(local, sta->sdata, sta);

919 920 921 922
	if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN &&
	    rcu_access_pointer(sdata->u.vlan.sta) == sta)
		RCU_INIT_POINTER(sdata->u.vlan.sta, NULL);

923 924 925 926 927 928 929
	return 0;
}

static void __sta_info_destroy_part2(struct sta_info *sta)
{
	struct ieee80211_local *local = sta->local;
	struct ieee80211_sub_if_data *sdata = sta->sdata;
930
	struct station_info *sinfo;
931 932 933 934 935 936 937 938 939 940
	int ret;

	/*
	 * NOTE: This assumes at least synchronize_net() was done
	 *	 after _part1 and before _part2!
	 */

	might_sleep();
	lockdep_assert_held(&local->sta_mtx);

941
	/* now keys can no longer be reached */
942
	ieee80211_free_sta_keys(local, sta);
943

944 945 946
	/* disable TIM bit - last chance to tell driver */
	__sta_info_recalc_tim(sta, true);

947 948 949 950 951
	sta->dead = true;

	local->num_sta--;
	local->sta_generation++;

952
	while (sta->sta_state > IEEE80211_STA_NONE) {
J
Johannes Berg 已提交
953 954
		ret = sta_info_move_state(sta, sta->sta_state - 1);
		if (ret) {
955 956 957 958
			WARN_ON_ONCE(1);
			break;
		}
	}
959

J
Johannes Berg 已提交
960 961 962 963 964
	if (sta->uploaded) {
		ret = drv_sta_state(local, sdata, sta, IEEE80211_STA_NONE,
				    IEEE80211_STA_NOTEXIST);
		WARN_ON_ONCE(ret != 0);
	}
965

J
Johannes Berg 已提交
966 967
	sta_dbg(sdata, "Removed STA %pM\n", sta->sta.addr);

968 969 970 971 972
	sinfo = kzalloc(sizeof(*sinfo), GFP_KERNEL);
	if (sinfo)
		sta_set_sinfo(sta, sinfo);
	cfg80211_del_sta_sinfo(sdata->dev, sta->sta.addr, sinfo, GFP_KERNEL);
	kfree(sinfo);
973

974 975 976
	rate_control_remove_sta_debugfs(sta);
	ieee80211_sta_debugfs_remove(sta);

977
	cleanup_single_sta(sta);
978 979 980 981 982 983 984 985 986 987 988 989
}

int __must_check __sta_info_destroy(struct sta_info *sta)
{
	int err = __sta_info_destroy_part1(sta);

	if (err)
		return err;

	synchronize_net();

	__sta_info_destroy_part2(sta);
990 991

	return 0;
J
Jiri Slaby 已提交
992 993
}

994
int sta_info_destroy_addr(struct ieee80211_sub_if_data *sdata, const u8 *addr)
J
Jiri Slaby 已提交
995
{
996 997
	struct sta_info *sta;
	int ret;
J
Jiri Slaby 已提交
998

999
	mutex_lock(&sdata->local->sta_mtx);
1000
	sta = sta_info_get(sdata, addr);
1001 1002
	ret = __sta_info_destroy(sta);
	mutex_unlock(&sdata->local->sta_mtx);
J
Jiri Slaby 已提交
1003 1004 1005 1006

	return ret;
}

1007 1008
int sta_info_destroy_addr_bss(struct ieee80211_sub_if_data *sdata,
			      const u8 *addr)
J
Jiri Benc 已提交
1009
{
1010 1011
	struct sta_info *sta;
	int ret;
J
Jiri Benc 已提交
1012

1013
	mutex_lock(&sdata->local->sta_mtx);
1014
	sta = sta_info_get_bss(sdata, addr);
1015 1016
	ret = __sta_info_destroy(sta);
	mutex_unlock(&sdata->local->sta_mtx);
1017

1018 1019
	return ret;
}
J
Jiri Benc 已提交
1020

1021 1022 1023 1024
static void sta_info_cleanup(unsigned long data)
{
	struct ieee80211_local *local = (struct ieee80211_local *) data;
	struct sta_info *sta;
1025
	bool timer_needed = false;
1026 1027 1028

	rcu_read_lock();
	list_for_each_entry_rcu(sta, &local->sta_list, list)
1029 1030
		if (sta_info_cleanup_expire_buffered(local, sta))
			timer_needed = true;
1031
	rcu_read_unlock();
J
Jiri Benc 已提交
1032

1033 1034
	if (local->quiescing)
		return;
1035

1036 1037 1038
	if (!timer_needed)
		return;

1039 1040
	mod_timer(&local->sta_cleanup,
		  round_jiffies(jiffies + STA_INFO_CLEANUP_INTERVAL));
J
Jiri Benc 已提交
1041 1042
}

1043
u32 sta_addr_hash(const void *key, u32 length, u32 seed)
1044
{
1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055
	return jhash(key, ETH_ALEN, seed);
}

int sta_info_init(struct ieee80211_local *local)
{
	int err;

	err = rhashtable_init(&local->sta_hash, &sta_rht_params);
	if (err)
		return err;

1056
	spin_lock_init(&local->tim_lock);
1057
	mutex_init(&local->sta_mtx);
1058 1059
	INIT_LIST_HEAD(&local->sta_list);

1060 1061
	setup_timer(&local->sta_cleanup, sta_info_cleanup,
		    (unsigned long)local);
1062
	return 0;
1063 1064 1065 1066
}

void sta_info_stop(struct ieee80211_local *local)
{
1067
	del_timer_sync(&local->sta_cleanup);
1068
	rhashtable_destroy(&local->sta_hash);
1069 1070
}

1071

1072
int __sta_info_flush(struct ieee80211_sub_if_data *sdata, bool vlans)
1073
{
1074
	struct ieee80211_local *local = sdata->local;
1075
	struct sta_info *sta, *tmp;
1076
	LIST_HEAD(free_list);
1077
	int ret = 0;
1078

1079
	might_sleep();
1080

1081 1082 1083
	WARN_ON(vlans && sdata->vif.type != NL80211_IFTYPE_AP);
	WARN_ON(vlans && !sdata->bss);

1084
	mutex_lock(&local->sta_mtx);
1085
	list_for_each_entry_safe(sta, tmp, &local->sta_list, list) {
1086 1087
		if (sdata == sta->sdata ||
		    (vlans && sdata->bss == sta->sdata->bss)) {
1088 1089
			if (!WARN_ON(__sta_info_destroy_part1(sta)))
				list_add(&sta->free_list, &free_list);
1090 1091
			ret++;
		}
1092
	}
1093 1094 1095 1096 1097 1098

	if (!list_empty(&free_list)) {
		synchronize_net();
		list_for_each_entry_safe(sta, tmp, &free_list, free_list)
			__sta_info_destroy_part2(sta);
	}
1099
	mutex_unlock(&local->sta_mtx);
1100

1101 1102 1103
	return ret;
}

1104 1105 1106 1107 1108 1109
void ieee80211_sta_expire(struct ieee80211_sub_if_data *sdata,
			  unsigned long exp_time)
{
	struct ieee80211_local *local = sdata->local;
	struct sta_info *sta, *tmp;

1110
	mutex_lock(&local->sta_mtx);
1111 1112

	list_for_each_entry_safe(sta, tmp, &local->sta_list, list) {
1113 1114
		unsigned long last_active = ieee80211_sta_last_active(sta);

1115 1116 1117
		if (sdata != sta->sdata)
			continue;

1118
		if (time_is_before_jiffies(last_active + exp_time)) {
1119 1120
			sta_dbg(sta->sdata, "expiring inactive STA %pM\n",
				sta->sta.addr);
M
Marco Porsch 已提交
1121 1122 1123 1124 1125

			if (ieee80211_vif_is_mesh(&sdata->vif) &&
			    test_sta_flag(sta, WLAN_STA_PS_STA))
				atomic_dec(&sdata->u.mesh.ps.num_sta_ps);

1126
			WARN_ON(__sta_info_destroy(sta));
1127
		}
1128 1129
	}

1130
	mutex_unlock(&local->sta_mtx);
1131
}
1132

1133
struct ieee80211_sta *ieee80211_find_sta_by_ifaddr(struct ieee80211_hw *hw,
1134 1135
						   const u8 *addr,
						   const u8 *localaddr)
1136
{
1137 1138 1139 1140 1141 1142
	struct ieee80211_local *local = hw_to_local(hw);
	struct sta_info *sta;
	struct rhash_head *tmp;
	const struct bucket_table *tbl;

	tbl = rht_dereference_rcu(local->sta_hash.tbl, &local->sta_hash);
1143

1144 1145 1146 1147
	/*
	 * Just return a random station if localaddr is NULL
	 * ... first in list.
	 */
1148
	for_each_sta_info(local, tbl, addr, sta, tmp) {
1149
		if (localaddr &&
1150
		    !ether_addr_equal(sta->sdata->vif.addr, localaddr))
1151
			continue;
1152 1153
		if (!sta->uploaded)
			return NULL;
1154
		return &sta->sta;
1155 1156
	}

1157
	return NULL;
1158
}
1159
EXPORT_SYMBOL_GPL(ieee80211_find_sta_by_ifaddr);
1160 1161 1162 1163

struct ieee80211_sta *ieee80211_find_sta(struct ieee80211_vif *vif,
					 const u8 *addr)
{
1164
	struct sta_info *sta;
1165 1166 1167 1168

	if (!vif)
		return NULL;

1169 1170 1171 1172 1173 1174
	sta = sta_info_get_bss(vif_to_sdata(vif), addr);
	if (!sta)
		return NULL;

	if (!sta->uploaded)
		return NULL;
1175

1176
	return &sta->sta;
1177
}
1178
EXPORT_SYMBOL(ieee80211_find_sta);
1179

1180 1181
/* powersave support code */
void ieee80211_sta_ps_deliver_wakeup(struct sta_info *sta)
1182
{
1183
	struct ieee80211_sub_if_data *sdata = sta->sdata;
1184 1185
	struct ieee80211_local *local = sdata->local;
	struct sk_buff_head pending;
1186
	int filtered = 0, buffered = 0, ac, i;
1187
	unsigned long flags;
1188 1189
	struct ps_data *ps;

1190 1191 1192 1193 1194
	if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
		sdata = container_of(sdata->bss, struct ieee80211_sub_if_data,
				     u.ap);

	if (sdata->vif.type == NL80211_IFTYPE_AP)
1195
		ps = &sdata->bss->ps;
M
Marco Porsch 已提交
1196 1197
	else if (ieee80211_vif_is_mesh(&sdata->vif))
		ps = &sdata->u.mesh.ps;
1198 1199
	else
		return;
1200

J
Johannes Berg 已提交
1201
	clear_sta_flag(sta, WLAN_STA_SP);
J
Johannes Berg 已提交
1202

1203
	BUILD_BUG_ON(BITS_TO_LONGS(IEEE80211_NUM_TIDS) > 1);
1204
	sta->driver_buffered_tids = 0;
1205
	sta->txq_buffered_tids = 0;
1206

1207
	if (!ieee80211_hw_check(&local->hw, AP_LINK_PS))
1208
		drv_sta_notify(local, sdata, STA_NOTIFY_AWAKE, &sta->sta);
1209

1210 1211 1212 1213
	if (sta->sta.txq[0]) {
		for (i = 0; i < ARRAY_SIZE(sta->sta.txq); i++) {
			struct txq_info *txqi = to_txq_info(sta->sta.txq[i]);

1214
			if (!txqi->tin.backlog_packets)
1215 1216 1217 1218 1219 1220
				continue;

			drv_wake_tx_queue(local, txqi);
		}
	}

1221
	skb_queue_head_init(&pending);
1222

1223 1224
	/* sync with ieee80211_tx_h_unicast_ps_buf */
	spin_lock(&sta->ps_lock);
1225
	/* Send all buffered frames to the station */
1226 1227 1228
	for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
		int count = skb_queue_len(&pending), tmp;

1229
		spin_lock_irqsave(&sta->tx_filtered[ac].lock, flags);
1230
		skb_queue_splice_tail_init(&sta->tx_filtered[ac], &pending);
1231
		spin_unlock_irqrestore(&sta->tx_filtered[ac].lock, flags);
1232 1233 1234 1235
		tmp = skb_queue_len(&pending);
		filtered += tmp - count;
		count = tmp;

1236
		spin_lock_irqsave(&sta->ps_tx_buf[ac].lock, flags);
1237
		skb_queue_splice_tail_init(&sta->ps_tx_buf[ac], &pending);
1238
		spin_unlock_irqrestore(&sta->ps_tx_buf[ac].lock, flags);
1239 1240 1241 1242
		tmp = skb_queue_len(&pending);
		buffered += tmp - count;
	}

1243
	ieee80211_add_pending_skbs(local, &pending);
1244 1245 1246 1247 1248 1249 1250 1251 1252

	/* now we're no longer in the deliver code */
	clear_sta_flag(sta, WLAN_STA_PS_DELIVER);

	/* The station might have polled and then woken up before we responded,
	 * so clear these flags now to avoid them sticking around.
	 */
	clear_sta_flag(sta, WLAN_STA_PSPOLL);
	clear_sta_flag(sta, WLAN_STA_UAPSD);
1253
	spin_unlock(&sta->ps_lock);
1254

1255 1256
	atomic_dec(&ps->num_sta_ps);

1257
	/* This station just woke up and isn't aware of our SMPS state */
1258 1259
	if (!ieee80211_vif_is_mesh(&sdata->vif) &&
	    !ieee80211_smps_is_restrictive(sta->known_smps_mode,
1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270
					   sdata->smps_mode) &&
	    sta->known_smps_mode != sdata->bss->req_smps &&
	    sta_info_tx_streams(sta) != 1) {
		ht_dbg(sdata,
		       "%pM just woke up and MIMO capable - update SMPS\n",
		       sta->sta.addr);
		ieee80211_send_smps_action(sdata, sdata->bss->req_smps,
					   sta->sta.addr,
					   sdata->vif.bss_conf.bssid);
	}

1271 1272
	local->total_ps_buffered -= buffered;

J
Johannes Berg 已提交
1273 1274
	sta_info_recalc_tim(sta);

J
Johannes Berg 已提交
1275 1276 1277
	ps_dbg(sdata,
	       "STA %pM aid %d sending %d filtered/%d PS frames since STA not sleeping anymore\n",
	       sta->sta.addr, sta->sta.aid, filtered, buffered);
J
Johannes Berg 已提交
1278 1279

	ieee80211_check_fast_xmit(sta);
1280 1281
}

1282
static void ieee80211_send_null_response(struct sta_info *sta, int tid,
1283
					 enum ieee80211_frame_release_type reason,
1284
					 bool call_driver, bool more_data)
1285
{
1286
	struct ieee80211_sub_if_data *sdata = sta->sdata;
1287
	struct ieee80211_local *local = sdata->local;
1288
	struct ieee80211_qos_hdr *nullfunc;
1289
	struct sk_buff *skb;
1290 1291
	int size = sizeof(*nullfunc);
	__le16 fc;
1292
	bool qos = sta->sta.wme;
1293
	struct ieee80211_tx_info *info;
J
Johannes Berg 已提交
1294
	struct ieee80211_chanctx_conf *chanctx_conf;
1295

1296 1297 1298 1299 1300 1301 1302 1303 1304
	if (qos) {
		fc = cpu_to_le16(IEEE80211_FTYPE_DATA |
				 IEEE80211_STYPE_QOS_NULLFUNC |
				 IEEE80211_FCTL_FROMDS);
	} else {
		size -= 2;
		fc = cpu_to_le16(IEEE80211_FTYPE_DATA |
				 IEEE80211_STYPE_NULLFUNC |
				 IEEE80211_FCTL_FROMDS);
1305 1306
	}

1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318
	skb = dev_alloc_skb(local->hw.extra_tx_headroom + size);
	if (!skb)
		return;

	skb_reserve(skb, local->hw.extra_tx_headroom);

	nullfunc = (void *) skb_put(skb, size);
	nullfunc->frame_control = fc;
	nullfunc->duration_id = 0;
	memcpy(nullfunc->addr1, sta->sta.addr, ETH_ALEN);
	memcpy(nullfunc->addr2, sdata->vif.addr, ETH_ALEN);
	memcpy(nullfunc->addr3, sdata->vif.addr, ETH_ALEN);
1319
	nullfunc->seq_ctrl = 0;
1320

1321 1322
	skb->priority = tid;
	skb_set_queue_mapping(skb, ieee802_1d_to_ac[tid]);
1323 1324 1325
	if (qos) {
		nullfunc->qos_ctrl = cpu_to_le16(tid);

1326
		if (reason == IEEE80211_FRAME_RELEASE_UAPSD) {
1327 1328
			nullfunc->qos_ctrl |=
				cpu_to_le16(IEEE80211_QOS_CTL_EOSP);
1329 1330 1331 1332
			if (more_data)
				nullfunc->frame_control |=
					cpu_to_le16(IEEE80211_FCTL_MOREDATA);
		}
1333 1334 1335 1336 1337 1338 1339
	}

	info = IEEE80211_SKB_CB(skb);

	/*
	 * Tell TX path to send this frame even though the
	 * STA may still remain is PS mode after this frame
1340 1341
	 * exchange. Also set EOSP to indicate this packet
	 * ends the poll/service period.
1342
	 */
1343
	info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER |
1344 1345
		       IEEE80211_TX_STATUS_EOSP |
		       IEEE80211_TX_CTL_REQ_TX_STATUS;
1346

1347 1348
	info->control.flags |= IEEE80211_TX_CTRL_PS_RESPONSE;

1349 1350 1351
	if (call_driver)
		drv_allow_buffered_frames(local, sta, BIT(tid), 1,
					  reason, false);
1352

1353 1354
	skb->dev = sdata->dev;

J
Johannes Berg 已提交
1355 1356 1357 1358 1359 1360 1361 1362
	rcu_read_lock();
	chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf);
	if (WARN_ON(!chanctx_conf)) {
		rcu_read_unlock();
		kfree_skb(skb);
		return;
	}

1363
	info->band = chanctx_conf->def.chan->band;
1364
	ieee80211_xmit(sdata, sta, skb);
J
Johannes Berg 已提交
1365
	rcu_read_unlock();
1366 1367
}

1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378
static int find_highest_prio_tid(unsigned long tids)
{
	/* lower 3 TIDs aren't ordered perfectly */
	if (tids & 0xF8)
		return fls(tids) - 1;
	/* TID 0 is BE just like TID 3 */
	if (tids & BIT(0))
		return 0;
	return fls(tids) - 1;
}

1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411
/* Indicates if the MORE_DATA bit should be set in the last
 * frame obtained by ieee80211_sta_ps_get_frames.
 * Note that driver_release_tids is relevant only if
 * reason = IEEE80211_FRAME_RELEASE_PSPOLL
 */
static bool
ieee80211_sta_ps_more_data(struct sta_info *sta, u8 ignored_acs,
			   enum ieee80211_frame_release_type reason,
			   unsigned long driver_release_tids)
{
	int ac;

	/* If the driver has data on more than one TID then
	 * certainly there's more data if we release just a
	 * single frame now (from a single TID). This will
	 * only happen for PS-Poll.
	 */
	if (reason == IEEE80211_FRAME_RELEASE_PSPOLL &&
	    hweight16(driver_release_tids) > 1)
		return true;

	for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
		if (ignored_acs & BIT(ac))
			continue;

		if (!skb_queue_empty(&sta->tx_filtered[ac]) ||
		    !skb_queue_empty(&sta->ps_tx_buf[ac]))
			return true;
	}

	return false;
}

J
Johannes Berg 已提交
1412
static void
1413 1414 1415 1416
ieee80211_sta_ps_get_frames(struct sta_info *sta, int n_frames, u8 ignored_acs,
			    enum ieee80211_frame_release_type reason,
			    struct sk_buff_head *frames,
			    unsigned long *driver_release_tids)
1417 1418 1419
{
	struct ieee80211_sub_if_data *sdata = sta->sdata;
	struct ieee80211_local *local = sdata->local;
1420 1421
	int ac;

1422
	/* Get response frame(s) and more data bit for the last one. */
1423
	for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
1424 1425
		unsigned long tids;

J
Johannes Berg 已提交
1426
		if (ignored_acs & BIT(ac))
1427 1428
			continue;

1429 1430
		tids = ieee80211_tids_for_ac(ac);

1431 1432 1433
		/* if we already have frames from software, then we can't also
		 * release from hardware queues
		 */
1434 1435 1436 1437
		if (skb_queue_empty(frames)) {
			*driver_release_tids |=
				sta->driver_buffered_tids & tids;
			*driver_release_tids |= sta->txq_buffered_tids & tids;
1438
		}
1439

1440
		if (!*driver_release_tids) {
1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453
			struct sk_buff *skb;

			while (n_frames > 0) {
				skb = skb_dequeue(&sta->tx_filtered[ac]);
				if (!skb) {
					skb = skb_dequeue(
						&sta->ps_tx_buf[ac]);
					if (skb)
						local->total_ps_buffered--;
				}
				if (!skb)
					break;
				n_frames--;
1454
				__skb_queue_tail(frames, skb);
1455
			}
1456
		}
1457

1458 1459 1460
		/* If we have more frames buffered on this AC, then abort the
		 * loop since we can't send more data from other ACs before
		 * the buffered frames from this.
1461
		 */
1462
		if (!skb_queue_empty(&sta->tx_filtered[ac]) ||
1463
		    !skb_queue_empty(&sta->ps_tx_buf[ac]))
1464
			break;
1465
	}
1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488
}

static void
ieee80211_sta_ps_deliver_response(struct sta_info *sta,
				  int n_frames, u8 ignored_acs,
				  enum ieee80211_frame_release_type reason)
{
	struct ieee80211_sub_if_data *sdata = sta->sdata;
	struct ieee80211_local *local = sdata->local;
	unsigned long driver_release_tids = 0;
	struct sk_buff_head frames;
	bool more_data;

	/* Service or PS-Poll period starts */
	set_sta_flag(sta, WLAN_STA_SP);

	__skb_queue_head_init(&frames);

	ieee80211_sta_ps_get_frames(sta, n_frames, ignored_acs, reason,
				    &frames, &driver_release_tids);

	more_data = ieee80211_sta_ps_more_data(sta, ignored_acs, reason, driver_release_tids);

1489
	if (driver_release_tids && reason == IEEE80211_FRAME_RELEASE_PSPOLL)
1490 1491
		driver_release_tids =
			BIT(find_highest_prio_tid(driver_release_tids));
1492

1493
	if (skb_queue_empty(&frames) && !driver_release_tids) {
1494
		int tid;
1495 1496

		/*
1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508
		 * For PS-Poll, this can only happen due to a race condition
		 * when we set the TIM bit and the station notices it, but
		 * before it can poll for the frame we expire it.
		 *
		 * For uAPSD, this is said in the standard (11.2.1.5 h):
		 *	At each unscheduled SP for a non-AP STA, the AP shall
		 *	attempt to transmit at least one MSDU or MMPDU, but no
		 *	more than the value specified in the Max SP Length field
		 *	in the QoS Capability element from delivery-enabled ACs,
		 *	that are destined for the non-AP STA.
		 *
		 * Since we have no other MSDU/MMPDU, transmit a QoS null frame.
1509 1510
		 */

1511 1512
		/* This will evaluate to 1, 3, 5 or 7. */
		tid = 7 - ((ffs(~ignored_acs) - 1) << 1);
1513

1514
		ieee80211_send_null_response(sta, tid, reason, true, false);
1515
	} else if (!driver_release_tids) {
J
Johannes Berg 已提交
1516 1517
		struct sk_buff_head pending;
		struct sk_buff *skb;
1518 1519
		int num = 0;
		u16 tids = 0;
1520
		bool need_null = false;
1521

J
Johannes Berg 已提交
1522
		skb_queue_head_init(&pending);
1523

J
Johannes Berg 已提交
1524 1525 1526
		while ((skb = __skb_dequeue(&frames))) {
			struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
			struct ieee80211_hdr *hdr = (void *) skb->data;
1527 1528 1529
			u8 *qoshdr = NULL;

			num++;
1530

J
Johannes Berg 已提交
1531 1532 1533 1534 1535
			/*
			 * Tell TX path to send this frame even though the
			 * STA may still remain is PS mode after this frame
			 * exchange.
			 */
1536 1537
			info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER;
			info->control.flags |= IEEE80211_TX_CTRL_PS_RESPONSE;
J
Johannes Berg 已提交
1538 1539 1540 1541 1542

			/*
			 * Use MoreData flag to indicate whether there are
			 * more buffered frames for this STA
			 */
1543
			if (more_data || !skb_queue_empty(&frames))
J
Johannes Berg 已提交
1544 1545
				hdr->frame_control |=
					cpu_to_le16(IEEE80211_FCTL_MOREDATA);
1546 1547 1548
			else
				hdr->frame_control &=
					cpu_to_le16(~IEEE80211_FCTL_MOREDATA);
J
Johannes Berg 已提交
1549

1550 1551 1552 1553
			if (ieee80211_is_data_qos(hdr->frame_control) ||
			    ieee80211_is_qos_nullfunc(hdr->frame_control))
				qoshdr = ieee80211_get_qos_ctl(hdr);

1554
			tids |= BIT(skb->priority);
1555

1556 1557 1558 1559 1560 1561 1562 1563
			__skb_queue_tail(&pending, skb);

			/* end service period after last frame or add one */
			if (!skb_queue_empty(&frames))
				continue;

			if (reason != IEEE80211_FRAME_RELEASE_UAPSD) {
				/* for PS-Poll, there's only one frame */
1564 1565
				info->flags |= IEEE80211_TX_STATUS_EOSP |
					       IEEE80211_TX_CTL_REQ_TX_STATUS;
1566
				break;
1567
			}
1568

1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586
			/* For uAPSD, things are a bit more complicated. If the
			 * last frame has a QoS header (i.e. is a QoS-data or
			 * QoS-nulldata frame) then just set the EOSP bit there
			 * and be done.
			 * If the frame doesn't have a QoS header (which means
			 * it should be a bufferable MMPDU) then we can't set
			 * the EOSP bit in the QoS header; add a QoS-nulldata
			 * frame to the list to send it after the MMPDU.
			 *
			 * Note that this code is only in the mac80211-release
			 * code path, we assume that the driver will not buffer
			 * anything but QoS-data frames, or if it does, will
			 * create the QoS-nulldata frame by itself if needed.
			 *
			 * Cf. 802.11-2012 10.2.1.10 (c).
			 */
			if (qoshdr) {
				*qoshdr |= IEEE80211_QOS_CTL_EOSP;
1587

1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604
				info->flags |= IEEE80211_TX_STATUS_EOSP |
					       IEEE80211_TX_CTL_REQ_TX_STATUS;
			} else {
				/* The standard isn't completely clear on this
				 * as it says the more-data bit should be set
				 * if there are more BUs. The QoS-Null frame
				 * we're about to send isn't buffered yet, we
				 * only create it below, but let's pretend it
				 * was buffered just in case some clients only
				 * expect more-data=0 when eosp=1.
				 */
				hdr->frame_control |=
					cpu_to_le16(IEEE80211_FCTL_MOREDATA);
				need_null = true;
				num++;
			}
			break;
J
Johannes Berg 已提交
1605
		}
1606

1607 1608 1609
		drv_allow_buffered_frames(local, sta, tids, num,
					  reason, more_data);

J
Johannes Berg 已提交
1610
		ieee80211_add_pending_skbs(local, &pending);
1611

1612 1613
		if (need_null)
			ieee80211_send_null_response(
1614 1615
				sta, find_highest_prio_tid(tids),
				reason, false, false);
1616

J
Johannes Berg 已提交
1617
		sta_info_recalc_tim(sta);
1618
	} else {
1619 1620 1621
		unsigned long tids = sta->txq_buffered_tids & driver_release_tids;
		int tid;

1622
		/*
1623 1624
		 * We need to release a frame that is buffered somewhere in the
		 * driver ... it'll have to handle that.
1625 1626 1627 1628 1629 1630
		 * Note that the driver also has to check the number of frames
		 * on the TIDs we're releasing from - if there are more than
		 * n_frames it has to set the more-data bit (if we didn't ask
		 * it to set it anyway due to other buffered frames); if there
		 * are fewer than n_frames it has to make sure to adjust that
		 * to allow the service period to end properly.
1631 1632
		 */
		drv_release_buffered_frames(local, sta, driver_release_tids,
J
Johannes Berg 已提交
1633
					    n_frames, reason, more_data);
1634 1635 1636 1637

		/*
		 * Note that we don't recalculate the TIM bit here as it would
		 * most likely have no effect at all unless the driver told us
1638
		 * that the TID(s) became empty before returning here from the
1639
		 * release function.
1640
		 * Either way, however, when the driver tells us that the TID(s)
1641 1642
		 * became empty or we find that a txq became empty, we'll do the
		 * TIM recalculation.
1643
		 */
1644 1645 1646 1647 1648 1649 1650

		if (!sta->sta.txq[0])
			return;

		for (tid = 0; tid < ARRAY_SIZE(sta->sta.txq); tid++) {
			struct txq_info *txqi = to_txq_info(sta->sta.txq[tid]);

1651
			if (!(tids & BIT(tid)) || txqi->tin.backlog_packets)
1652 1653 1654 1655 1656
				continue;

			sta_info_recalc_tim(sta);
			break;
		}
1657 1658 1659
	}
}

J
Johannes Berg 已提交
1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701
void ieee80211_sta_ps_deliver_poll_response(struct sta_info *sta)
{
	u8 ignore_for_response = sta->sta.uapsd_queues;

	/*
	 * If all ACs are delivery-enabled then we should reply
	 * from any of them, if only some are enabled we reply
	 * only from the non-enabled ones.
	 */
	if (ignore_for_response == BIT(IEEE80211_NUM_ACS) - 1)
		ignore_for_response = 0;

	ieee80211_sta_ps_deliver_response(sta, 1, ignore_for_response,
					  IEEE80211_FRAME_RELEASE_PSPOLL);
}

void ieee80211_sta_ps_deliver_uapsd(struct sta_info *sta)
{
	int n_frames = sta->sta.max_sp;
	u8 delivery_enabled = sta->sta.uapsd_queues;

	/*
	 * If we ever grow support for TSPEC this might happen if
	 * the TSPEC update from hostapd comes in between a trigger
	 * frame setting WLAN_STA_UAPSD in the RX path and this
	 * actually getting called.
	 */
	if (!delivery_enabled)
		return;

	switch (sta->sta.max_sp) {
	case 1:
		n_frames = 2;
		break;
	case 2:
		n_frames = 4;
		break;
	case 3:
		n_frames = 6;
		break;
	case 0:
		/* XXX: what is a good value? */
1702
		n_frames = 128;
J
Johannes Berg 已提交
1703 1704 1705 1706 1707 1708 1709
		break;
	}

	ieee80211_sta_ps_deliver_response(sta, n_frames, ~delivery_enabled,
					  IEEE80211_FRAME_RELEASE_UAPSD);
}

1710 1711 1712 1713 1714
void ieee80211_sta_block_awake(struct ieee80211_hw *hw,
			       struct ieee80211_sta *pubsta, bool block)
{
	struct sta_info *sta = container_of(pubsta, struct sta_info, sta);

J
Johannes Berg 已提交
1715 1716
	trace_api_sta_block_awake(sta->local, pubsta, block);

1717
	if (block) {
J
Johannes Berg 已提交
1718
		set_sta_flag(sta, WLAN_STA_PS_DRIVER);
J
Johannes Berg 已提交
1719
		ieee80211_clear_fast_xmit(sta);
1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736
		return;
	}

	if (!test_sta_flag(sta, WLAN_STA_PS_DRIVER))
		return;

	if (!test_sta_flag(sta, WLAN_STA_PS_STA)) {
		set_sta_flag(sta, WLAN_STA_PS_DELIVER);
		clear_sta_flag(sta, WLAN_STA_PS_DRIVER);
		ieee80211_queue_work(hw, &sta->drv_deliver_wk);
	} else if (test_sta_flag(sta, WLAN_STA_PSPOLL) ||
		   test_sta_flag(sta, WLAN_STA_UAPSD)) {
		/* must be asleep in this case */
		clear_sta_flag(sta, WLAN_STA_PS_DRIVER);
		ieee80211_queue_work(hw, &sta->drv_deliver_wk);
	} else {
		clear_sta_flag(sta, WLAN_STA_PS_DRIVER);
J
Johannes Berg 已提交
1737
		ieee80211_check_fast_xmit(sta);
1738
	}
1739 1740
}
EXPORT_SYMBOL(ieee80211_sta_block_awake);
1741

1742
void ieee80211_sta_eosp(struct ieee80211_sta *pubsta)
1743 1744 1745 1746 1747 1748
{
	struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
	struct ieee80211_local *local = sta->local;

	trace_api_eosp(local, pubsta);

1749
	clear_sta_flag(sta, WLAN_STA_SP);
1750
}
1751
EXPORT_SYMBOL(ieee80211_sta_eosp);
1752

1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768
void ieee80211_send_eosp_nullfunc(struct ieee80211_sta *pubsta, int tid)
{
	struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
	enum ieee80211_frame_release_type reason;
	bool more_data;

	trace_api_send_eosp_nullfunc(sta->local, pubsta, tid);

	reason = IEEE80211_FRAME_RELEASE_UAPSD;
	more_data = ieee80211_sta_ps_more_data(sta, ~sta->sta.uapsd_queues,
					       reason, 0);

	ieee80211_send_null_response(sta, tid, reason, false, more_data);
}
EXPORT_SYMBOL(ieee80211_send_eosp_nullfunc);

1769 1770
void ieee80211_sta_set_buffered(struct ieee80211_sta *pubsta,
				u8 tid, bool buffered)
1771 1772 1773
{
	struct sta_info *sta = container_of(pubsta, struct sta_info, sta);

1774
	if (WARN_ON(tid >= IEEE80211_NUM_TIDS))
1775 1776
		return;

1777 1778
	trace_api_sta_set_buffered(sta->local, pubsta, tid, buffered);

1779 1780 1781 1782 1783
	if (buffered)
		set_bit(tid, &sta->driver_buffered_tids);
	else
		clear_bit(tid, &sta->driver_buffered_tids);

J
Johannes Berg 已提交
1784
	sta_info_recalc_tim(sta);
1785
}
1786
EXPORT_SYMBOL(ieee80211_sta_set_buffered);
1787

1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812
static void
ieee80211_recalc_p2p_go_ps_allowed(struct ieee80211_sub_if_data *sdata)
{
	struct ieee80211_local *local = sdata->local;
	bool allow_p2p_go_ps = sdata->vif.p2p;
	struct sta_info *sta;

	rcu_read_lock();
	list_for_each_entry_rcu(sta, &local->sta_list, list) {
		if (sdata != sta->sdata ||
		    !test_sta_flag(sta, WLAN_STA_ASSOC))
			continue;
		if (!sta->sta.support_p2p_ps) {
			allow_p2p_go_ps = false;
			break;
		}
	}
	rcu_read_unlock();

	if (allow_p2p_go_ps != sdata->vif.bss_conf.allow_p2p_go_ps) {
		sdata->vif.bss_conf.allow_p2p_go_ps = allow_p2p_go_ps;
		ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_P2P_PS);
	}
}

1813 1814
int sta_info_move_state(struct sta_info *sta,
			enum ieee80211_sta_state new_state)
1815
{
1816
	might_sleep();
1817 1818 1819 1820

	if (sta->sta_state == new_state)
		return 0;

J
Johannes Berg 已提交
1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846
	/* check allowed transitions first */

	switch (new_state) {
	case IEEE80211_STA_NONE:
		if (sta->sta_state != IEEE80211_STA_AUTH)
			return -EINVAL;
		break;
	case IEEE80211_STA_AUTH:
		if (sta->sta_state != IEEE80211_STA_NONE &&
		    sta->sta_state != IEEE80211_STA_ASSOC)
			return -EINVAL;
		break;
	case IEEE80211_STA_ASSOC:
		if (sta->sta_state != IEEE80211_STA_AUTH &&
		    sta->sta_state != IEEE80211_STA_AUTHORIZED)
			return -EINVAL;
		break;
	case IEEE80211_STA_AUTHORIZED:
		if (sta->sta_state != IEEE80211_STA_ASSOC)
			return -EINVAL;
		break;
	default:
		WARN(1, "invalid state %d", new_state);
		return -EINVAL;
	}

J
Johannes Berg 已提交
1847 1848
	sta_dbg(sta->sdata, "moving STA %pM to state %d\n",
		sta->sta.addr, new_state);
J
Johannes Berg 已提交
1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862

	/*
	 * notify the driver before the actual changes so it can
	 * fail the transition
	 */
	if (test_sta_flag(sta, WLAN_STA_INSERTED)) {
		int err = drv_sta_state(sta->local, sta->sdata, sta,
					sta->sta_state, new_state);
		if (err)
			return err;
	}

	/* reflect the change in all state variables */

1863 1864 1865 1866 1867 1868
	switch (new_state) {
	case IEEE80211_STA_NONE:
		if (sta->sta_state == IEEE80211_STA_AUTH)
			clear_bit(WLAN_STA_AUTH, &sta->_flags);
		break;
	case IEEE80211_STA_AUTH:
1869
		if (sta->sta_state == IEEE80211_STA_NONE) {
1870
			set_bit(WLAN_STA_AUTH, &sta->_flags);
1871
		} else if (sta->sta_state == IEEE80211_STA_ASSOC) {
1872
			clear_bit(WLAN_STA_ASSOC, &sta->_flags);
1873
			ieee80211_recalc_min_chandef(sta->sdata);
1874 1875
			if (!sta->sta.support_p2p_ps)
				ieee80211_recalc_p2p_go_ps_allowed(sta->sdata);
1876
		}
1877 1878
		break;
	case IEEE80211_STA_ASSOC:
1879
		if (sta->sta_state == IEEE80211_STA_AUTH) {
1880
			set_bit(WLAN_STA_ASSOC, &sta->_flags);
1881
			ieee80211_recalc_min_chandef(sta->sdata);
1882 1883
			if (!sta->sta.support_p2p_ps)
				ieee80211_recalc_p2p_go_ps_allowed(sta->sdata);
1884
		} else if (sta->sta_state == IEEE80211_STA_AUTHORIZED) {
1885 1886 1887 1888
			if (sta->sdata->vif.type == NL80211_IFTYPE_AP ||
			    (sta->sdata->vif.type == NL80211_IFTYPE_AP_VLAN &&
			     !sta->sdata->u.vlan.sta))
				atomic_dec(&sta->sdata->bss->num_mcast_sta);
1889
			clear_bit(WLAN_STA_AUTHORIZED, &sta->_flags);
J
Johannes Berg 已提交
1890
			ieee80211_clear_fast_xmit(sta);
J
Johannes Berg 已提交
1891
			ieee80211_clear_fast_rx(sta);
J
Johannes Berg 已提交
1892
		}
1893 1894
		break;
	case IEEE80211_STA_AUTHORIZED:
1895
		if (sta->sta_state == IEEE80211_STA_ASSOC) {
1896 1897 1898 1899
			if (sta->sdata->vif.type == NL80211_IFTYPE_AP ||
			    (sta->sdata->vif.type == NL80211_IFTYPE_AP_VLAN &&
			     !sta->sdata->u.vlan.sta))
				atomic_inc(&sta->sdata->bss->num_mcast_sta);
1900
			set_bit(WLAN_STA_AUTHORIZED, &sta->_flags);
J
Johannes Berg 已提交
1901
			ieee80211_check_fast_xmit(sta);
J
Johannes Berg 已提交
1902
			ieee80211_check_fast_rx(sta);
J
Johannes Berg 已提交
1903
		}
1904 1905
		break;
	default:
J
Johannes Berg 已提交
1906
		break;
1907 1908 1909 1910 1911 1912
	}

	sta->sta_state = new_state;

	return 0;
}
1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947

u8 sta_info_tx_streams(struct sta_info *sta)
{
	struct ieee80211_sta_ht_cap *ht_cap = &sta->sta.ht_cap;
	u8 rx_streams;

	if (!sta->sta.ht_cap.ht_supported)
		return 1;

	if (sta->sta.vht_cap.vht_supported) {
		int i;
		u16 tx_mcs_map =
			le16_to_cpu(sta->sta.vht_cap.vht_mcs.tx_mcs_map);

		for (i = 7; i >= 0; i--)
			if ((tx_mcs_map & (0x3 << (i * 2))) !=
			    IEEE80211_VHT_MCS_NOT_SUPPORTED)
				return i + 1;
	}

	if (ht_cap->mcs.rx_mask[3])
		rx_streams = 4;
	else if (ht_cap->mcs.rx_mask[2])
		rx_streams = 3;
	else if (ht_cap->mcs.rx_mask[1])
		rx_streams = 2;
	else
		rx_streams = 1;

	if (!(ht_cap->mcs.tx_params & IEEE80211_HT_MCS_TX_RX_DIFF))
		return rx_streams;

	return ((ht_cap->mcs.tx_params & IEEE80211_HT_MCS_TX_MAX_STREAMS_MASK)
			>> IEEE80211_HT_MCS_TX_MAX_STREAMS_SHIFT) + 1;
}
1948

1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970
static struct ieee80211_sta_rx_stats *
sta_get_last_rx_stats(struct sta_info *sta)
{
	struct ieee80211_sta_rx_stats *stats = &sta->rx_stats;
	struct ieee80211_local *local = sta->local;
	int cpu;

	if (!ieee80211_hw_check(&local->hw, USES_RSS))
		return stats;

	for_each_possible_cpu(cpu) {
		struct ieee80211_sta_rx_stats *cpustats;

		cpustats = per_cpu_ptr(sta->pcpu_rx_stats, cpu);

		if (time_after(cpustats->last_rx, stats->last_rx))
			stats = cpustats;
	}

	return stats;
}

1971 1972
static void sta_stats_decode_rate(struct ieee80211_local *local, u16 rate,
				  struct rate_info *rinfo)
1973
{
1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984
	rinfo->bw = (rate & STA_STATS_RATE_BW_MASK) >>
		STA_STATS_RATE_BW_SHIFT;

	if (rate & STA_STATS_RATE_VHT) {
		rinfo->flags = RATE_INFO_FLAGS_VHT_MCS;
		rinfo->mcs = rate & 0xf;
		rinfo->nss = (rate & 0xf0) >> 4;
	} else if (rate & STA_STATS_RATE_HT) {
		rinfo->flags = RATE_INFO_FLAGS_MCS;
		rinfo->mcs = rate & 0xff;
	} else if (rate & STA_STATS_RATE_LEGACY) {
1985 1986
		struct ieee80211_supported_band *sband;
		u16 brate;
1987 1988 1989 1990 1991 1992 1993 1994 1995 1996
		unsigned int shift;

		sband = local->hw.wiphy->bands[(rate >> 4) & 0xf];
		brate = sband->bitrates[rate & 0xf].bitrate;
		if (rinfo->bw == RATE_INFO_BW_5)
			shift = 2;
		else if (rinfo->bw == RATE_INFO_BW_10)
			shift = 1;
		else
			shift = 0;
1997 1998 1999
		rinfo->legacy = DIV_ROUND_UP(brate, 1 << shift);
	}

2000
	if (rate & STA_STATS_RATE_SGI)
2001
		rinfo->flags |= RATE_INFO_FLAGS_SHORT_GI;
2002 2003 2004 2005
}

static void sta_set_rate_info_rx(struct sta_info *sta, struct rate_info *rinfo)
{
2006
	u16 rate = ACCESS_ONCE(sta_get_last_rx_stats(sta)->last_rate);
2007

2008 2009
	if (rate == STA_STATS_RATE_INVALID)
		rinfo->flags = 0;
2010
	else
2011
		sta_stats_decode_rate(sta->local, rate, rinfo);
2012 2013
}

2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048
static void sta_set_tidstats(struct sta_info *sta,
			     struct cfg80211_tid_stats *tidstats,
			     int tid)
{
	struct ieee80211_local *local = sta->local;

	if (!(tidstats->filled & BIT(NL80211_TID_STATS_RX_MSDU))) {
		unsigned int start;

		do {
			start = u64_stats_fetch_begin(&sta->rx_stats.syncp);
			tidstats->rx_msdu = sta->rx_stats.msdu[tid];
		} while (u64_stats_fetch_retry(&sta->rx_stats.syncp, start));

		tidstats->filled |= BIT(NL80211_TID_STATS_RX_MSDU);
	}

	if (!(tidstats->filled & BIT(NL80211_TID_STATS_TX_MSDU))) {
		tidstats->filled |= BIT(NL80211_TID_STATS_TX_MSDU);
		tidstats->tx_msdu = sta->tx_stats.msdu[tid];
	}

	if (!(tidstats->filled & BIT(NL80211_TID_STATS_TX_MSDU_RETRIES)) &&
	    ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS)) {
		tidstats->filled |= BIT(NL80211_TID_STATS_TX_MSDU_RETRIES);
		tidstats->tx_msdu_retries = sta->status_stats.msdu_retries[tid];
	}

	if (!(tidstats->filled & BIT(NL80211_TID_STATS_TX_MSDU_FAILED)) &&
	    ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS)) {
		tidstats->filled |= BIT(NL80211_TID_STATS_TX_MSDU_FAILED);
		tidstats->tx_msdu_failed = sta->status_stats.msdu_failed[tid];
	}
}

2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061
static inline u64 sta_get_stats_bytes(struct ieee80211_sta_rx_stats *rxstats)
{
	unsigned int start;
	u64 value;

	do {
		start = u64_stats_fetch_begin(&rxstats->syncp);
		value = rxstats->bytes;
	} while (u64_stats_fetch_retry(&rxstats->syncp, start));

	return value;
}

2062 2063 2064 2065
void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo)
{
	struct ieee80211_sub_if_data *sdata = sta->sdata;
	struct ieee80211_local *local = sdata->local;
2066
	struct rate_control_ref *ref = NULL;
2067
	u32 thr = 0;
2068 2069 2070 2071
	int i, ac, cpu;
	struct ieee80211_sta_rx_stats *last_rxstats;

	last_rxstats = sta_get_last_rx_stats(sta);
2072

2073 2074 2075
	if (test_sta_flag(sta, WLAN_STA_RATE_CONTROL))
		ref = local->rate_ctrl;

2076 2077
	sinfo->generation = sdata->local->sta_generation;

2078 2079 2080 2081 2082 2083 2084
	/* do before driver, so beacon filtering drivers have a
	 * chance to e.g. just add the number of filtered beacons
	 * (or just modify the value entirely, of course)
	 */
	if (sdata->vif.type == NL80211_IFTYPE_STATION)
		sinfo->rx_beacon = sdata->u.mgd.count_beacon_signal;

2085 2086
	drv_sta_statistics(local, sdata, &sta->sta, sinfo);

2087 2088 2089 2090
	sinfo->filled |= BIT(NL80211_STA_INFO_INACTIVE_TIME) |
			 BIT(NL80211_STA_INFO_STA_FLAGS) |
			 BIT(NL80211_STA_INFO_BSS_PARAM) |
			 BIT(NL80211_STA_INFO_CONNECTED_TIME) |
2091 2092 2093 2094 2095 2096
			 BIT(NL80211_STA_INFO_RX_DROP_MISC);

	if (sdata->vif.type == NL80211_IFTYPE_STATION) {
		sinfo->beacon_loss_count = sdata->u.mgd.beacon_loss_count;
		sinfo->filled |= BIT(NL80211_STA_INFO_BEACON_LOSS);
	}
2097

A
Arnd Bergmann 已提交
2098
	sinfo->connected_time = ktime_get_seconds() - sta->last_connected;
2099
	sinfo->inactive_time =
2100
		jiffies_to_msecs(jiffies - ieee80211_sta_last_active(sta));
2101

2102 2103
	if (!(sinfo->filled & (BIT(NL80211_STA_INFO_TX_BYTES64) |
			       BIT(NL80211_STA_INFO_TX_BYTES)))) {
2104 2105
		sinfo->tx_bytes = 0;
		for (ac = 0; ac < IEEE80211_NUM_ACS; ac++)
2106
			sinfo->tx_bytes += sta->tx_stats.bytes[ac];
2107
		sinfo->filled |= BIT(NL80211_STA_INFO_TX_BYTES64);
2108 2109
	}

2110
	if (!(sinfo->filled & BIT(NL80211_STA_INFO_TX_PACKETS))) {
2111 2112
		sinfo->tx_packets = 0;
		for (ac = 0; ac < IEEE80211_NUM_ACS; ac++)
2113
			sinfo->tx_packets += sta->tx_stats.packets[ac];
2114
		sinfo->filled |= BIT(NL80211_STA_INFO_TX_PACKETS);
2115 2116
	}

2117 2118
	if (!(sinfo->filled & (BIT(NL80211_STA_INFO_RX_BYTES64) |
			       BIT(NL80211_STA_INFO_RX_BYTES)))) {
2119 2120 2121 2122 2123 2124 2125 2126 2127 2128
		sinfo->rx_bytes += sta_get_stats_bytes(&sta->rx_stats);

		if (sta->pcpu_rx_stats) {
			for_each_possible_cpu(cpu) {
				struct ieee80211_sta_rx_stats *cpurxs;

				cpurxs = per_cpu_ptr(sta->pcpu_rx_stats, cpu);
				sinfo->rx_bytes += sta_get_stats_bytes(cpurxs);
			}
		}
2129

2130
		sinfo->filled |= BIT(NL80211_STA_INFO_RX_BYTES64);
2131 2132
	}

2133
	if (!(sinfo->filled & BIT(NL80211_STA_INFO_RX_PACKETS))) {
2134
		sinfo->rx_packets = sta->rx_stats.packets;
2135 2136 2137 2138 2139 2140 2141 2142
		if (sta->pcpu_rx_stats) {
			for_each_possible_cpu(cpu) {
				struct ieee80211_sta_rx_stats *cpurxs;

				cpurxs = per_cpu_ptr(sta->pcpu_rx_stats, cpu);
				sinfo->rx_packets += cpurxs->packets;
			}
		}
2143
		sinfo->filled |= BIT(NL80211_STA_INFO_RX_PACKETS);
2144 2145
	}

2146
	if (!(sinfo->filled & BIT(NL80211_STA_INFO_TX_RETRIES))) {
2147
		sinfo->tx_retries = sta->status_stats.retry_count;
2148
		sinfo->filled |= BIT(NL80211_STA_INFO_TX_RETRIES);
2149 2150
	}

2151
	if (!(sinfo->filled & BIT(NL80211_STA_INFO_TX_FAILED))) {
2152
		sinfo->tx_failed = sta->status_stats.retry_failed;
2153
		sinfo->filled |= BIT(NL80211_STA_INFO_TX_FAILED);
2154
	}
2155

2156
	sinfo->rx_dropped_misc = sta->rx_stats.dropped;
2157 2158 2159 2160 2161 2162 2163 2164
	if (sta->pcpu_rx_stats) {
		for_each_possible_cpu(cpu) {
			struct ieee80211_sta_rx_stats *cpurxs;

			cpurxs = per_cpu_ptr(sta->pcpu_rx_stats, cpu);
			sinfo->rx_packets += cpurxs->dropped;
		}
	}
2165

2166 2167 2168 2169 2170 2171 2172
	if (sdata->vif.type == NL80211_IFTYPE_STATION &&
	    !(sdata->vif.driver_flags & IEEE80211_VIF_BEACON_FILTER)) {
		sinfo->filled |= BIT(NL80211_STA_INFO_BEACON_RX) |
				 BIT(NL80211_STA_INFO_BEACON_SIGNAL_AVG);
		sinfo->rx_beacon_signal_avg = ieee80211_ave_rssi(&sdata->vif);
	}

2173 2174
	if (ieee80211_hw_check(&sta->local->hw, SIGNAL_DBM) ||
	    ieee80211_hw_check(&sta->local->hw, SIGNAL_UNSPEC)) {
2175
		if (!(sinfo->filled & BIT(NL80211_STA_INFO_SIGNAL))) {
2176
			sinfo->signal = (s8)last_rxstats->last_signal;
2177
			sinfo->filled |= BIT(NL80211_STA_INFO_SIGNAL);
2178 2179
		}

2180 2181
		if (!sta->pcpu_rx_stats &&
		    !(sinfo->filled & BIT(NL80211_STA_INFO_SIGNAL_AVG))) {
J
Johannes Berg 已提交
2182
			sinfo->signal_avg =
2183
				-ewma_signal_read(&sta->rx_stats_avg.signal);
2184
			sinfo->filled |= BIT(NL80211_STA_INFO_SIGNAL_AVG);
2185
		}
2186
	}
2187

2188 2189 2190 2191 2192
	/* for the average - if pcpu_rx_stats isn't set - rxstats must point to
	 * the sta->rx_stats struct, so the check here is fine with and without
	 * pcpu statistics
	 */
	if (last_rxstats->chains &&
2193 2194
	    !(sinfo->filled & (BIT(NL80211_STA_INFO_CHAIN_SIGNAL) |
			       BIT(NL80211_STA_INFO_CHAIN_SIGNAL_AVG)))) {
2195 2196 2197 2198 2199
		sinfo->filled |= BIT(NL80211_STA_INFO_CHAIN_SIGNAL);
		if (!sta->pcpu_rx_stats)
			sinfo->filled |= BIT(NL80211_STA_INFO_CHAIN_SIGNAL_AVG);

		sinfo->chains = last_rxstats->chains;
2200 2201

		for (i = 0; i < ARRAY_SIZE(sinfo->chain_signal); i++) {
2202
			sinfo->chain_signal[i] =
2203
				last_rxstats->chain_signal_last[i];
2204
			sinfo->chain_signal_avg[i] =
2205
				-ewma_signal_read(&sta->rx_stats_avg.chain_signal[i]);
2206 2207 2208
		}
	}

2209
	if (!(sinfo->filled & BIT(NL80211_STA_INFO_TX_BITRATE))) {
2210 2211
		sta_set_rate_info_tx(sta, &sta->tx_stats.last_rate,
				     &sinfo->txrate);
2212
		sinfo->filled |= BIT(NL80211_STA_INFO_TX_BITRATE);
2213 2214
	}

2215
	if (!(sinfo->filled & BIT(NL80211_STA_INFO_RX_BITRATE))) {
2216
		sta_set_rate_info_rx(sta, &sinfo->rxrate);
2217
		sinfo->filled |= BIT(NL80211_STA_INFO_RX_BITRATE);
2218
	}
2219

2220 2221 2222 2223
	sinfo->filled |= BIT(NL80211_STA_INFO_TID_STATS);
	for (i = 0; i < IEEE80211_NUM_TIDS + 1; i++) {
		struct cfg80211_tid_stats *tidstats = &sinfo->pertid[i];

2224
		sta_set_tidstats(sta, tidstats, i);
2225 2226
	}

2227 2228
	if (ieee80211_vif_is_mesh(&sdata->vif)) {
#ifdef CONFIG_MAC80211_MESH
2229 2230 2231 2232 2233 2234
		sinfo->filled |= BIT(NL80211_STA_INFO_LLID) |
				 BIT(NL80211_STA_INFO_PLID) |
				 BIT(NL80211_STA_INFO_PLINK_STATE) |
				 BIT(NL80211_STA_INFO_LOCAL_PM) |
				 BIT(NL80211_STA_INFO_PEER_PM) |
				 BIT(NL80211_STA_INFO_NONPEER_PM);
2235

2236 2237 2238
		sinfo->llid = sta->mesh->llid;
		sinfo->plid = sta->mesh->plid;
		sinfo->plink_state = sta->mesh->plink_state;
2239
		if (test_sta_flag(sta, WLAN_STA_TOFFSET_KNOWN)) {
2240
			sinfo->filled |= BIT(NL80211_STA_INFO_T_OFFSET);
2241
			sinfo->t_offset = sta->mesh->t_offset;
2242
		}
2243 2244 2245
		sinfo->local_pm = sta->mesh->local_pm;
		sinfo->peer_pm = sta->mesh->peer_pm;
		sinfo->nonpeer_pm = sta->mesh->nonpeer_pm;
2246 2247 2248 2249 2250 2251 2252 2253 2254 2255
#endif
	}

	sinfo->bss_param.flags = 0;
	if (sdata->vif.bss_conf.use_cts_prot)
		sinfo->bss_param.flags |= BSS_PARAM_FLAGS_CTS_PROT;
	if (sdata->vif.bss_conf.use_short_preamble)
		sinfo->bss_param.flags |= BSS_PARAM_FLAGS_SHORT_PREAMBLE;
	if (sdata->vif.bss_conf.use_short_slot)
		sinfo->bss_param.flags |= BSS_PARAM_FLAGS_SHORT_SLOT_TIME;
2256
	sinfo->bss_param.dtim_period = sdata->vif.bss_conf.dtim_period;
2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270
	sinfo->bss_param.beacon_interval = sdata->vif.bss_conf.beacon_int;

	sinfo->sta_flags.set = 0;
	sinfo->sta_flags.mask = BIT(NL80211_STA_FLAG_AUTHORIZED) |
				BIT(NL80211_STA_FLAG_SHORT_PREAMBLE) |
				BIT(NL80211_STA_FLAG_WME) |
				BIT(NL80211_STA_FLAG_MFP) |
				BIT(NL80211_STA_FLAG_AUTHENTICATED) |
				BIT(NL80211_STA_FLAG_ASSOCIATED) |
				BIT(NL80211_STA_FLAG_TDLS_PEER);
	if (test_sta_flag(sta, WLAN_STA_AUTHORIZED))
		sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_AUTHORIZED);
	if (test_sta_flag(sta, WLAN_STA_SHORT_PREAMBLE))
		sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_SHORT_PREAMBLE);
2271
	if (sta->sta.wme)
2272 2273 2274 2275 2276 2277 2278 2279 2280 2281
		sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_WME);
	if (test_sta_flag(sta, WLAN_STA_MFP))
		sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_MFP);
	if (test_sta_flag(sta, WLAN_STA_AUTH))
		sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_AUTHENTICATED);
	if (test_sta_flag(sta, WLAN_STA_ASSOC))
		sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_ASSOCIATED);
	if (test_sta_flag(sta, WLAN_STA_TDLS_PEER))
		sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_TDLS_PEER);

2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299
	thr = sta_get_expected_throughput(sta);

	if (thr != 0) {
		sinfo->filled |= BIT(NL80211_STA_INFO_EXPECTED_THROUGHPUT);
		sinfo->expected_throughput = thr;
	}
}

u32 sta_get_expected_throughput(struct sta_info *sta)
{
	struct ieee80211_sub_if_data *sdata = sta->sdata;
	struct ieee80211_local *local = sdata->local;
	struct rate_control_ref *ref = NULL;
	u32 thr = 0;

	if (test_sta_flag(sta, WLAN_STA_RATE_CONTROL))
		ref = local->rate_ctrl;

2300 2301 2302 2303 2304 2305
	/* check if the driver has a SW RC implementation */
	if (ref && ref->ops->get_expected_throughput)
		thr = ref->ops->get_expected_throughput(sta->rate_ctrl_priv);
	else
		thr = drv_get_expected_throughput(local, &sta->sta);

2306
	return thr;
2307
}
2308 2309 2310

unsigned long ieee80211_sta_last_active(struct sta_info *sta)
{
2311 2312 2313 2314
	struct ieee80211_sta_rx_stats *stats = sta_get_last_rx_stats(sta);

	if (time_after(stats->last_rx, sta->status_stats.last_ack))
		return stats->last_rx;
2315 2316
	return sta->status_stats.last_ack;
}