sta_info.c 61.4 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 345
	sta->sta.max_rx_aggregation_subframes =
		local->hw.max_rx_aggregation_subframes;

346 347
	sta->local = local;
	sta->sdata = sdata;
348
	sta->rx_stats.last_rx = jiffies;
349

350 351
	u64_stats_init(&sta->rx_stats.syncp);

352 353
	sta->sta_state = IEEE80211_STA_NONE;

354 355 356
	/* Mark TID as unreserved */
	sta->reserved_tid = IEEE80211_TID_UNRESERVED;

A
Arnd Bergmann 已提交
357
	sta->last_connected = ktime_get_seconds();
358 359 360
	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]);
361

362 363 364 365 366 367 368 369 370 371 372 373
	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;

374
			ieee80211_txq_init(sdata, sta, txq, i);
375
		}
376
	}
377

378 379 380
	if (sta_prepare_rate_control(local, sta, gfp))
		goto free_txq;

381
	for (i = 0; i < IEEE80211_NUM_TIDS; i++) {
382 383 384 385 386
		/*
		 * 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.
		 */
387 388
		sta->timer_to_tid[i] = i;
	}
389 390 391 392
	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 已提交
393

394
	for (i = 0; i < IEEE80211_NUM_TIDS; i++)
395
		sta->last_seq_ctrl[i] = cpu_to_le16(USHRT_MAX);
396

397
	sta->sta.smps_mode = IEEE80211_SMPS_OFF;
398 399 400
	if (sdata->vif.type == NL80211_IFTYPE_AP ||
	    sdata->vif.type == NL80211_IFTYPE_AP_VLAN) {
		struct ieee80211_supported_band *sband =
401
			hw->wiphy->bands[ieee80211_get_sdata_band(sdata)];
402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421
		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);
		}
	}
422

F
Felix Fietkau 已提交
423 424
	sta->sta.max_rc_amsdu_len = IEEE80211_MAX_MPDU_LEN_HT_BA;

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

427
	return sta;
428 429 430 431 432

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

440
static int sta_info_insert_check(struct sta_info *sta)
441 442 443
{
	struct ieee80211_sub_if_data *sdata = sta->sdata;

444 445 446 447 448
	/*
	 * 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.
	 */
449 450
	if (unlikely(!ieee80211_sdata_running(sdata)))
		return -ENETDOWN;
451

452
	if (WARN_ON(ether_addr_equal(sta->sta.addr, sdata->vif.addr) ||
453 454 455
		    is_multicast_ether_addr(sta->sta.addr)))
		return -EINVAL;

456 457 458 459 460 461 462 463 464 465 466 467 468
	/* 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();

469 470 471
	return 0;
}

J
Johannes Berg 已提交
472 473 474 475 476 477 478 479 480 481 482 483 484 485
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) {
486 487 488 489 490 491
		/*
		 * 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 已提交
492 493 494 495
		return 0;
	}

	if (sdata->vif.type == NL80211_IFTYPE_ADHOC) {
J
Johannes Berg 已提交
496 497 498
		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 已提交
499 500 501 502 503 504 505 506 507 508
		err = 0;
	}

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

	return err;
}

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

	lockdep_assert_held(&local->sta_mtx);
522

523 524 525 526 527 528
	sinfo = kzalloc(sizeof(struct station_info), GFP_KERNEL);
	if (!sinfo) {
		err = -ENOMEM;
		goto out_err;
	}

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

535 536 537
	local->num_sta++;
	local->sta_generation++;
	smp_mb();
538

539 540 541
	/* simplify things and don't accept BA sessions yet */
	set_sta_flag(sta, WLAN_STA_BLOCK_BA);

542
	/* make the station visible */
543 544 545
	err = sta_info_hash_add(local, sta);
	if (err)
		goto out_drop_sta;
546

547
	list_add_tail_rcu(&sta->list, &local->sta_list);
548

549 550 551 552 553
	/* notify driver */
	err = sta_info_insert_drv_state(local, sdata, sta);
	if (err)
		goto out_remove;

554
	set_sta_flag(sta, WLAN_STA_INSERTED);
555 556
	/* accept BA sessions now */
	clear_sta_flag(sta, WLAN_STA_BLOCK_BA);
557

558 559
	ieee80211_sta_debugfs_add(sta);
	rate_control_add_sta_debugfs(sta);
560

561 562 563
	sinfo->generation = local->sta_generation;
	cfg80211_new_sta(sdata->dev, sta->sta.addr, sinfo, GFP_KERNEL);
	kfree(sinfo);
564

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

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

J
Johannes Berg 已提交
571 572 573
	if (ieee80211_vif_is_mesh(&sdata->vif))
		mesh_accept_plinks_update(sdata);

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

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

594 595
	might_sleep();

596 597
	mutex_lock(&local->sta_mtx);

598 599
	err = sta_info_insert_check(sta);
	if (err) {
600
		mutex_unlock(&local->sta_mtx);
601 602 603 604
		rcu_read_lock();
		goto out_free;
	}

605
	err = sta_info_insert_finish(sta);
606 607 608
	if (err)
		goto out_free;

J
Johannes Berg 已提交
609
	return 0;
610
 out_free:
611
	sta_info_free(local, sta);
612
	return err;
613 614
}

615 616 617 618 619 620 621 622 623
int sta_info_insert(struct sta_info *sta)
{
	int err = sta_info_insert_rcu(sta);

	rcu_read_unlock();

	return err;
}

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

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

642 643 644 645 646 647 648 649 650
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));
}

651
static unsigned long ieee80211_tids_for_ac(int ac)
652
{
653 654 655 656 657 658 659 660 661 662 663 664 665
	/* 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;
666
	}
667 668
}

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

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

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

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

J
Johannes Berg 已提交
696 697
	if (sta->dead)
		goto done;
698

699 700 701 702 703 704 705 706 707
	/*
	 * 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;

708 709 710
	if (ignore_pending)
		ignore_for_tim = BIT(IEEE80211_NUM_ACS) - 1;

711 712
	for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
		unsigned long tids;
713

714 715 716 717 718 719 720
		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;
721

722 723 724 725
		tids = ieee80211_tids_for_ac(ac);

		indicate_tim |=
			sta->driver_buffered_tids & tids;
726 727
		indicate_tim |=
			sta->txq_buffered_tids & tids;
728
	}
729

J
Johannes Berg 已提交
730
 done:
731
	spin_lock_bh(&local->tim_lock);
732

733 734 735
	if (indicate_tim == __bss_tim_get(ps->tim, id))
		goto out_unlock;

736
	if (indicate_tim)
737
		__bss_tim_set(ps->tim, id);
J
Johannes Berg 已提交
738
	else
739
		__bss_tim_clear(ps->tim, id);
740

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

747
out_unlock:
748
	spin_unlock_bh(&local->tim_lock);
749 750
}

751 752 753 754 755
void sta_info_recalc_tim(struct sta_info *sta)
{
	__sta_info_recalc_tim(sta, false);
}

756
static bool sta_info_buffer_expired(struct sta_info *sta, struct sk_buff *skb)
757
{
758
	struct ieee80211_tx_info *info;
759 760 761
	int timeout;

	if (!skb)
762
		return false;
763

764
	info = IEEE80211_SKB_CB(skb);
765 766

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


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

782 783 784 785 786 787 788 789
	/*
	 * 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 (;;) {
790 791
		spin_lock_irqsave(&sta->tx_filtered[ac].lock, flags);
		skb = skb_peek(&sta->tx_filtered[ac]);
792
		if (sta_info_buffer_expired(sta, skb))
793
			skb = __skb_dequeue(&sta->tx_filtered[ac]);
794 795
		else
			skb = NULL;
796
		spin_unlock_irqrestore(&sta->tx_filtered[ac].lock, flags);
797 798 799 800 801 802 803 804 805

		/*
		 * 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;
806
		ieee80211_free_txskb(&local->hw, skb);
807 808 809 810 811 812 813 814
	}

	/*
	 * 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.
	 */
815
	for (;;) {
816 817
		spin_lock_irqsave(&sta->ps_tx_buf[ac].lock, flags);
		skb = skb_peek(&sta->ps_tx_buf[ac]);
818
		if (sta_info_buffer_expired(sta, skb))
819
			skb = __skb_dequeue(&sta->ps_tx_buf[ac]);
820
		else
821
			skb = NULL;
822
		spin_unlock_irqrestore(&sta->ps_tx_buf[ac].lock, flags);
823

824 825 826 827 828
		/*
		 * 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
		 */
829
		if (!skb)
830
			break;
831 832

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

838 839 840 841 842 843 844 845 846 847 848 849
	/*
	 * 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.
	 */
850 851 852 853 854 855 856 857 858 859
	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 已提交
860 861 862
	/* This is only necessary for stations on BSS/MBSS interfaces */
	if (!sta->sdata->bss &&
	    !ieee80211_vif_is_mesh(&sta->sdata->vif))
863 864 865 866 867 868 869
		return false;

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

	return have_buffered;
870 871
}

872
static int __must_check __sta_info_destroy_part1(struct sta_info *sta)
873
{
874 875
	struct ieee80211_local *local;
	struct ieee80211_sub_if_data *sdata;
876
	int ret;
877

878
	might_sleep();
879

880 881
	if (!sta)
		return -ENOENT;
882

883 884
	local = sta->local;
	sdata = sta->sdata;
885

886 887
	lockdep_assert_held(&local->sta_mtx);

888 889 890 891 892 893
	/*
	 * 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 已提交
894
	set_sta_flag(sta, WLAN_STA_BLOCK_BA);
895
	ieee80211_sta_tear_down_BA_sessions(sta, AGG_STOP_DESTROY_STA);
896

897 898 899 900 901 902 903
	/*
	 * 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);

904
	ret = sta_info_hash_del(local, sta);
905
	if (WARN_ON(ret))
906 907
		return ret;

908 909 910 911 912 913 914 915 916
	/*
	 * 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);
	}

917
	list_del_rcu(&sta->list);
918
	sta->removed = true;
919

920 921
	drv_sta_pre_rcu_remove(local, sta->sdata, sta);

922 923 924 925
	if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN &&
	    rcu_access_pointer(sdata->u.vlan.sta) == sta)
		RCU_INIT_POINTER(sdata->u.vlan.sta, NULL);

926 927 928 929 930 931 932
	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;
933
	struct station_info *sinfo;
934 935 936 937 938 939 940 941 942 943
	int ret;

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

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

944
	/* now keys can no longer be reached */
945
	ieee80211_free_sta_keys(local, sta);
946

947 948 949
	/* disable TIM bit - last chance to tell driver */
	__sta_info_recalc_tim(sta, true);

950 951 952 953 954
	sta->dead = true;

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

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

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

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

971 972 973 974 975
	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);
976

977 978 979
	rate_control_remove_sta_debugfs(sta);
	ieee80211_sta_debugfs_remove(sta);

980
	cleanup_single_sta(sta);
981 982 983 984 985 986 987 988 989 990 991 992
}

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);
993 994

	return 0;
J
Jiri Slaby 已提交
995 996
}

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

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

	return ret;
}

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

1016
	mutex_lock(&sdata->local->sta_mtx);
1017
	sta = sta_info_get_bss(sdata, addr);
1018 1019
	ret = __sta_info_destroy(sta);
	mutex_unlock(&sdata->local->sta_mtx);
1020

1021 1022
	return ret;
}
J
Jiri Benc 已提交
1023

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

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

1036 1037
	if (local->quiescing)
		return;
1038

1039 1040 1041
	if (!timer_needed)
		return;

1042 1043
	mod_timer(&local->sta_cleanup,
		  round_jiffies(jiffies + STA_INFO_CLEANUP_INTERVAL));
J
Jiri Benc 已提交
1044 1045
}

1046
u32 sta_addr_hash(const void *key, u32 length, u32 seed)
1047
{
1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058
	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;

1059
	spin_lock_init(&local->tim_lock);
1060
	mutex_init(&local->sta_mtx);
1061 1062
	INIT_LIST_HEAD(&local->sta_list);

1063 1064
	setup_timer(&local->sta_cleanup, sta_info_cleanup,
		    (unsigned long)local);
1065
	return 0;
1066 1067 1068 1069
}

void sta_info_stop(struct ieee80211_local *local)
{
1070
	del_timer_sync(&local->sta_cleanup);
1071
	rhashtable_destroy(&local->sta_hash);
1072 1073
}

1074

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

1082
	might_sleep();
1083

1084 1085 1086
	WARN_ON(vlans && sdata->vif.type != NL80211_IFTYPE_AP);
	WARN_ON(vlans && !sdata->bss);

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

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

1104 1105 1106
	return ret;
}

1107 1108 1109 1110 1111 1112
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;

1113
	mutex_lock(&local->sta_mtx);
1114 1115

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

1118 1119 1120
		if (sdata != sta->sdata)
			continue;

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

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

1129
			WARN_ON(__sta_info_destroy(sta));
1130
		}
1131 1132
	}

1133
	mutex_unlock(&local->sta_mtx);
1134
}
1135

1136
struct ieee80211_sta *ieee80211_find_sta_by_ifaddr(struct ieee80211_hw *hw,
1137 1138
						   const u8 *addr,
						   const u8 *localaddr)
1139
{
1140 1141 1142 1143 1144 1145
	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);
1146

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

1160
	return NULL;
1161
}
1162
EXPORT_SYMBOL_GPL(ieee80211_find_sta_by_ifaddr);
1163 1164 1165 1166

struct ieee80211_sta *ieee80211_find_sta(struct ieee80211_vif *vif,
					 const u8 *addr)
{
1167
	struct sta_info *sta;
1168 1169 1170 1171

	if (!vif)
		return NULL;

1172 1173 1174 1175 1176 1177
	sta = sta_info_get_bss(vif_to_sdata(vif), addr);
	if (!sta)
		return NULL;

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

1179
	return &sta->sta;
1180
}
1181
EXPORT_SYMBOL(ieee80211_find_sta);
1182

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

1193 1194 1195 1196 1197
	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)
1198
		ps = &sdata->bss->ps;
M
Marco Porsch 已提交
1199 1200
	else if (ieee80211_vif_is_mesh(&sdata->vif))
		ps = &sdata->u.mesh.ps;
1201 1202
	else
		return;
1203

J
Johannes Berg 已提交
1204
	clear_sta_flag(sta, WLAN_STA_SP);
J
Johannes Berg 已提交
1205

1206
	BUILD_BUG_ON(BITS_TO_LONGS(IEEE80211_NUM_TIDS) > 1);
1207
	sta->driver_buffered_tids = 0;
1208
	sta->txq_buffered_tids = 0;
1209

1210
	if (!ieee80211_hw_check(&local->hw, AP_LINK_PS))
1211
		drv_sta_notify(local, sdata, STA_NOTIFY_AWAKE, &sta->sta);
1212

1213 1214 1215 1216
	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]);

1217
			if (!txqi->tin.backlog_packets)
1218 1219 1220 1221 1222 1223
				continue;

			drv_wake_tx_queue(local, txqi);
		}
	}

1224
	skb_queue_head_init(&pending);
1225

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

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

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

1246
	ieee80211_add_pending_skbs(local, &pending);
1247 1248 1249 1250 1251 1252 1253 1254 1255

	/* 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);
1256
	spin_unlock(&sta->ps_lock);
1257

1258 1259
	atomic_dec(&ps->num_sta_ps);

1260
	/* This station just woke up and isn't aware of our SMPS state */
1261 1262
	if (!ieee80211_vif_is_mesh(&sdata->vif) &&
	    !ieee80211_smps_is_restrictive(sta->known_smps_mode,
1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273
					   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);
	}

1274 1275
	local->total_ps_buffered -= buffered;

J
Johannes Berg 已提交
1276 1277
	sta_info_recalc_tim(sta);

J
Johannes Berg 已提交
1278 1279 1280
	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 已提交
1281 1282

	ieee80211_check_fast_xmit(sta);
1283 1284
}

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

1299 1300 1301 1302 1303 1304 1305 1306 1307
	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);
1308 1309
	}

1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321
	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);
1322
	nullfunc->seq_ctrl = 0;
1323

1324 1325
	skb->priority = tid;
	skb_set_queue_mapping(skb, ieee802_1d_to_ac[tid]);
1326 1327 1328
	if (qos) {
		nullfunc->qos_ctrl = cpu_to_le16(tid);

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

	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
1343 1344
	 * exchange. Also set EOSP to indicate this packet
	 * ends the poll/service period.
1345
	 */
1346
	info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER |
1347 1348
		       IEEE80211_TX_STATUS_EOSP |
		       IEEE80211_TX_CTL_REQ_TX_STATUS;
1349

1350 1351
	info->control.flags |= IEEE80211_TX_CTRL_PS_RESPONSE;

1352 1353 1354
	if (call_driver)
		drv_allow_buffered_frames(local, sta, BIT(tid), 1,
					  reason, false);
1355

1356 1357
	skb->dev = sdata->dev;

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

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

1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381
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;
}

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 1412 1413 1414
/* 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 已提交
1415
static void
1416 1417 1418 1419
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)
1420 1421 1422
{
	struct ieee80211_sub_if_data *sdata = sta->sdata;
	struct ieee80211_local *local = sdata->local;
1423 1424
	int ac;

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

J
Johannes Berg 已提交
1429
		if (ignored_acs & BIT(ac))
1430 1431
			continue;

1432 1433
		tids = ieee80211_tids_for_ac(ac);

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

1443
		if (!*driver_release_tids) {
1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456
			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--;
1457
				__skb_queue_tail(frames, skb);
1458
			}
1459
		}
1460

1461 1462 1463
		/* 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.
1464
		 */
1465
		if (!skb_queue_empty(&sta->tx_filtered[ac]) ||
1466
		    !skb_queue_empty(&sta->ps_tx_buf[ac]))
1467
			break;
1468
	}
1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491
}

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);

1492
	if (driver_release_tids && reason == IEEE80211_FRAME_RELEASE_PSPOLL)
1493 1494
		driver_release_tids =
			BIT(find_highest_prio_tid(driver_release_tids));
1495

1496
	if (skb_queue_empty(&frames) && !driver_release_tids) {
1497
		int tid;
1498 1499

		/*
1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511
		 * 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.
1512 1513
		 */

1514 1515
		/* This will evaluate to 1, 3, 5 or 7. */
		tid = 7 - ((ffs(~ignored_acs) - 1) << 1);
1516

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

J
Johannes Berg 已提交
1525
		skb_queue_head_init(&pending);
1526

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

			num++;
1533

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

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

1553 1554 1555 1556
			if (ieee80211_is_data_qos(hdr->frame_control) ||
			    ieee80211_is_qos_nullfunc(hdr->frame_control))
				qoshdr = ieee80211_get_qos_ctl(hdr);

1557
			tids |= BIT(skb->priority);
1558

1559 1560 1561 1562 1563 1564 1565 1566
			__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 */
1567 1568
				info->flags |= IEEE80211_TX_STATUS_EOSP |
					       IEEE80211_TX_CTL_REQ_TX_STATUS;
1569
				break;
1570
			}
1571

1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589
			/* 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;
1590

1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607
				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 已提交
1608
		}
1609

1610 1611 1612
		drv_allow_buffered_frames(local, sta, tids, num,
					  reason, more_data);

J
Johannes Berg 已提交
1613
		ieee80211_add_pending_skbs(local, &pending);
1614

1615 1616
		if (need_null)
			ieee80211_send_null_response(
1617 1618
				sta, find_highest_prio_tid(tids),
				reason, false, false);
1619

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

1625
		/*
1626 1627
		 * We need to release a frame that is buffered somewhere in the
		 * driver ... it'll have to handle that.
1628 1629 1630 1631 1632 1633
		 * 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.
1634 1635
		 */
		drv_release_buffered_frames(local, sta, driver_release_tids,
J
Johannes Berg 已提交
1636
					    n_frames, reason, more_data);
1637 1638 1639 1640

		/*
		 * 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
1641
		 * that the TID(s) became empty before returning here from the
1642
		 * release function.
1643
		 * Either way, however, when the driver tells us that the TID(s)
1644 1645
		 * became empty or we find that a txq became empty, we'll do the
		 * TIM recalculation.
1646
		 */
1647 1648 1649 1650 1651 1652 1653

		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]);

1654
			if (!(tids & BIT(tid)) || txqi->tin.backlog_packets)
1655 1656 1657 1658 1659
				continue;

			sta_info_recalc_tim(sta);
			break;
		}
1660 1661 1662
	}
}

J
Johannes Berg 已提交
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 1702 1703 1704
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? */
1705
		n_frames = 128;
J
Johannes Berg 已提交
1706 1707 1708 1709 1710 1711 1712
		break;
	}

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

1713 1714 1715 1716 1717
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 已提交
1718 1719
	trace_api_sta_block_awake(sta->local, pubsta, block);

1720
	if (block) {
J
Johannes Berg 已提交
1721
		set_sta_flag(sta, WLAN_STA_PS_DRIVER);
J
Johannes Berg 已提交
1722
		ieee80211_clear_fast_xmit(sta);
1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739
		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 已提交
1740
		ieee80211_check_fast_xmit(sta);
1741
	}
1742 1743
}
EXPORT_SYMBOL(ieee80211_sta_block_awake);
1744

1745
void ieee80211_sta_eosp(struct ieee80211_sta *pubsta)
1746 1747 1748 1749 1750 1751
{
	struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
	struct ieee80211_local *local = sta->local;

	trace_api_eosp(local, pubsta);

1752
	clear_sta_flag(sta, WLAN_STA_SP);
1753
}
1754
EXPORT_SYMBOL(ieee80211_sta_eosp);
1755

1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771
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);

1772 1773
void ieee80211_sta_set_buffered(struct ieee80211_sta *pubsta,
				u8 tid, bool buffered)
1774 1775 1776
{
	struct sta_info *sta = container_of(pubsta, struct sta_info, sta);

1777
	if (WARN_ON(tid >= IEEE80211_NUM_TIDS))
1778 1779
		return;

1780 1781
	trace_api_sta_set_buffered(sta->local, pubsta, tid, buffered);

1782 1783 1784 1785 1786
	if (buffered)
		set_bit(tid, &sta->driver_buffered_tids);
	else
		clear_bit(tid, &sta->driver_buffered_tids);

J
Johannes Berg 已提交
1787
	sta_info_recalc_tim(sta);
1788
}
1789
EXPORT_SYMBOL(ieee80211_sta_set_buffered);
1790

1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815
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);
	}
}

1816 1817
int sta_info_move_state(struct sta_info *sta,
			enum ieee80211_sta_state new_state)
1818
{
1819
	might_sleep();
1820 1821 1822 1823

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

J
Johannes Berg 已提交
1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849
	/* 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 已提交
1850 1851
	sta_dbg(sta->sdata, "moving STA %pM to state %d\n",
		sta->sta.addr, new_state);
J
Johannes Berg 已提交
1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865

	/*
	 * 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 */

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

	sta->sta_state = new_state;

	return 0;
}
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 1948 1949 1950

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;
}
1951

1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973
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;
}

1974 1975
static void sta_stats_decode_rate(struct ieee80211_local *local, u16 rate,
				  struct rate_info *rinfo)
1976
{
1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987
	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) {
1988 1989
		struct ieee80211_supported_band *sband;
		u16 brate;
1990 1991 1992 1993 1994 1995 1996 1997 1998 1999
		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;
2000 2001 2002
		rinfo->legacy = DIV_ROUND_UP(brate, 1 << shift);
	}

2003
	if (rate & STA_STATS_RATE_SGI)
2004
		rinfo->flags |= RATE_INFO_FLAGS_SHORT_GI;
2005 2006 2007 2008
}

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

2011 2012
	if (rate == STA_STATS_RATE_INVALID)
		rinfo->flags = 0;
2013
	else
2014
		sta_stats_decode_rate(sta->local, rate, rinfo);
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 2049 2050 2051
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];
	}
}

2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064
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;
}

2065 2066 2067 2068
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;
2069
	struct rate_control_ref *ref = NULL;
2070
	u32 thr = 0;
2071 2072 2073 2074
	int i, ac, cpu;
	struct ieee80211_sta_rx_stats *last_rxstats;

	last_rxstats = sta_get_last_rx_stats(sta);
2075

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

2079 2080
	sinfo->generation = sdata->local->sta_generation;

2081 2082 2083 2084 2085 2086 2087
	/* 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;

2088 2089
	drv_sta_statistics(local, sdata, &sta->sta, sinfo);

2090 2091 2092 2093
	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) |
2094 2095 2096 2097 2098 2099
			 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);
	}
2100

A
Arnd Bergmann 已提交
2101
	sinfo->connected_time = ktime_get_seconds() - sta->last_connected;
2102
	sinfo->inactive_time =
2103
		jiffies_to_msecs(jiffies - ieee80211_sta_last_active(sta));
2104

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

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

2120 2121
	if (!(sinfo->filled & (BIT(NL80211_STA_INFO_RX_BYTES64) |
			       BIT(NL80211_STA_INFO_RX_BYTES)))) {
2122 2123 2124 2125 2126 2127 2128 2129 2130 2131
		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);
			}
		}
2132

2133
		sinfo->filled |= BIT(NL80211_STA_INFO_RX_BYTES64);
2134 2135
	}

2136
	if (!(sinfo->filled & BIT(NL80211_STA_INFO_RX_PACKETS))) {
2137
		sinfo->rx_packets = sta->rx_stats.packets;
2138 2139 2140 2141 2142 2143 2144 2145
		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;
			}
		}
2146
		sinfo->filled |= BIT(NL80211_STA_INFO_RX_PACKETS);
2147 2148
	}

2149
	if (!(sinfo->filled & BIT(NL80211_STA_INFO_TX_RETRIES))) {
2150
		sinfo->tx_retries = sta->status_stats.retry_count;
2151
		sinfo->filled |= BIT(NL80211_STA_INFO_TX_RETRIES);
2152 2153
	}

2154
	if (!(sinfo->filled & BIT(NL80211_STA_INFO_TX_FAILED))) {
2155
		sinfo->tx_failed = sta->status_stats.retry_failed;
2156
		sinfo->filled |= BIT(NL80211_STA_INFO_TX_FAILED);
2157
	}
2158

2159
	sinfo->rx_dropped_misc = sta->rx_stats.dropped;
2160 2161 2162 2163 2164 2165 2166 2167
	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;
		}
	}
2168

2169 2170 2171 2172 2173 2174 2175
	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);
	}

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

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

2191 2192 2193 2194 2195
	/* 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 &&
2196 2197
	    !(sinfo->filled & (BIT(NL80211_STA_INFO_CHAIN_SIGNAL) |
			       BIT(NL80211_STA_INFO_CHAIN_SIGNAL_AVG)))) {
2198 2199 2200 2201 2202
		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;
2203 2204

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

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

2218
	if (!(sinfo->filled & BIT(NL80211_STA_INFO_RX_BITRATE))) {
2219
		sta_set_rate_info_rx(sta, &sinfo->rxrate);
2220
		sinfo->filled |= BIT(NL80211_STA_INFO_RX_BITRATE);
2221
	}
2222

2223 2224 2225 2226
	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];

2227
		sta_set_tidstats(sta, tidstats, i);
2228 2229
	}

2230 2231
	if (ieee80211_vif_is_mesh(&sdata->vif)) {
#ifdef CONFIG_MAC80211_MESH
2232 2233 2234 2235 2236 2237
		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);
2238

2239 2240 2241
		sinfo->llid = sta->mesh->llid;
		sinfo->plid = sta->mesh->plid;
		sinfo->plink_state = sta->mesh->plink_state;
2242
		if (test_sta_flag(sta, WLAN_STA_TOFFSET_KNOWN)) {
2243
			sinfo->filled |= BIT(NL80211_STA_INFO_T_OFFSET);
2244
			sinfo->t_offset = sta->mesh->t_offset;
2245
		}
2246 2247 2248
		sinfo->local_pm = sta->mesh->local_pm;
		sinfo->peer_pm = sta->mesh->peer_pm;
		sinfo->nonpeer_pm = sta->mesh->nonpeer_pm;
2249 2250 2251 2252 2253 2254 2255 2256 2257 2258
#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;
2259
	sinfo->bss_param.dtim_period = sdata->vif.bss_conf.dtim_period;
2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273
	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);
2274
	if (sta->sta.wme)
2275 2276 2277 2278 2279 2280 2281 2282 2283 2284
		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);

2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302
	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;

2303 2304 2305 2306
	/* 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
2307
		thr = drv_get_expected_throughput(local, sta);
2308

2309
	return thr;
2310
}
2311 2312 2313

unsigned long ieee80211_sta_last_active(struct sta_info *sta)
{
2314 2315 2316 2317
	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;
2318 2319
	return sta->status_stats.last_ack;
}