cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

sta_info.c (71659B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 * Copyright 2002-2005, Instant802 Networks, Inc.
      4 * Copyright 2006-2007	Jiri Benc <jbenc@suse.cz>
      5 * Copyright 2013-2014  Intel Mobile Communications GmbH
      6 * Copyright (C) 2015 - 2017 Intel Deutschland GmbH
      7 * Copyright (C) 2018-2021 Intel Corporation
      8 */
      9
     10#include <linux/module.h>
     11#include <linux/init.h>
     12#include <linux/etherdevice.h>
     13#include <linux/netdevice.h>
     14#include <linux/types.h>
     15#include <linux/slab.h>
     16#include <linux/skbuff.h>
     17#include <linux/if_arp.h>
     18#include <linux/timer.h>
     19#include <linux/rtnetlink.h>
     20
     21#include <net/codel.h>
     22#include <net/mac80211.h>
     23#include "ieee80211_i.h"
     24#include "driver-ops.h"
     25#include "rate.h"
     26#include "sta_info.h"
     27#include "debugfs_sta.h"
     28#include "mesh.h"
     29#include "wme.h"
     30
     31/**
     32 * DOC: STA information lifetime rules
     33 *
     34 * STA info structures (&struct sta_info) are managed in a hash table
     35 * for faster lookup and a list for iteration. They are managed using
     36 * RCU, i.e. access to the list and hash table is protected by RCU.
     37 *
     38 * Upon allocating a STA info structure with sta_info_alloc(), the caller
     39 * owns that structure. It must then insert it into the hash table using
     40 * either sta_info_insert() or sta_info_insert_rcu(); only in the latter
     41 * case (which acquires an rcu read section but must not be called from
     42 * within one) will the pointer still be valid after the call. Note that
     43 * the caller may not do much with the STA info before inserting it, in
     44 * particular, it may not start any mesh peer link management or add
     45 * encryption keys.
     46 *
     47 * When the insertion fails (sta_info_insert()) returns non-zero), the
     48 * structure will have been freed by sta_info_insert()!
     49 *
     50 * Station entries are added by mac80211 when you establish a link with a
     51 * peer. This means different things for the different type of interfaces
     52 * we support. For a regular station this mean we add the AP sta when we
     53 * receive an association response from the AP. For IBSS this occurs when
     54 * get to know about a peer on the same IBSS. For WDS we add the sta for
     55 * the peer immediately upon device open. When using AP mode we add stations
     56 * for each respective station upon request from userspace through nl80211.
     57 *
     58 * In order to remove a STA info structure, various sta_info_destroy_*()
     59 * calls are available.
     60 *
     61 * There is no concept of ownership on a STA entry, each structure is
     62 * owned by the global hash table/list until it is removed. All users of
     63 * the structure need to be RCU protected so that the structure won't be
     64 * freed before they are done using it.
     65 */
     66
     67static const struct rhashtable_params sta_rht_params = {
     68	.nelem_hint = 3, /* start small */
     69	.automatic_shrinking = true,
     70	.head_offset = offsetof(struct sta_info, hash_node),
     71	.key_offset = offsetof(struct sta_info, addr),
     72	.key_len = ETH_ALEN,
     73	.max_size = CONFIG_MAC80211_STA_HASH_MAX_SIZE,
     74};
     75
     76/* Caller must hold local->sta_mtx */
     77static int sta_info_hash_del(struct ieee80211_local *local,
     78			     struct sta_info *sta)
     79{
     80	return rhltable_remove(&local->sta_hash, &sta->hash_node,
     81			       sta_rht_params);
     82}
     83
     84static void __cleanup_single_sta(struct sta_info *sta)
     85{
     86	int ac, i;
     87	struct tid_ampdu_tx *tid_tx;
     88	struct ieee80211_sub_if_data *sdata = sta->sdata;
     89	struct ieee80211_local *local = sdata->local;
     90	struct ps_data *ps;
     91
     92	if (test_sta_flag(sta, WLAN_STA_PS_STA) ||
     93	    test_sta_flag(sta, WLAN_STA_PS_DRIVER) ||
     94	    test_sta_flag(sta, WLAN_STA_PS_DELIVER)) {
     95		if (sta->sdata->vif.type == NL80211_IFTYPE_AP ||
     96		    sta->sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
     97			ps = &sdata->bss->ps;
     98		else if (ieee80211_vif_is_mesh(&sdata->vif))
     99			ps = &sdata->u.mesh.ps;
    100		else
    101			return;
    102
    103		clear_sta_flag(sta, WLAN_STA_PS_STA);
    104		clear_sta_flag(sta, WLAN_STA_PS_DRIVER);
    105		clear_sta_flag(sta, WLAN_STA_PS_DELIVER);
    106
    107		atomic_dec(&ps->num_sta_ps);
    108	}
    109
    110	if (sta->sta.txq[0]) {
    111		for (i = 0; i < ARRAY_SIZE(sta->sta.txq); i++) {
    112			struct txq_info *txqi;
    113
    114			if (!sta->sta.txq[i])
    115				continue;
    116
    117			txqi = to_txq_info(sta->sta.txq[i]);
    118
    119			ieee80211_txq_purge(local, txqi);
    120		}
    121	}
    122
    123	for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
    124		local->total_ps_buffered -= skb_queue_len(&sta->ps_tx_buf[ac]);
    125		ieee80211_purge_tx_queue(&local->hw, &sta->ps_tx_buf[ac]);
    126		ieee80211_purge_tx_queue(&local->hw, &sta->tx_filtered[ac]);
    127	}
    128
    129	if (ieee80211_vif_is_mesh(&sdata->vif))
    130		mesh_sta_cleanup(sta);
    131
    132	cancel_work_sync(&sta->drv_deliver_wk);
    133
    134	/*
    135	 * Destroy aggregation state here. It would be nice to wait for the
    136	 * driver to finish aggregation stop and then clean up, but for now
    137	 * drivers have to handle aggregation stop being requested, followed
    138	 * directly by station destruction.
    139	 */
    140	for (i = 0; i < IEEE80211_NUM_TIDS; i++) {
    141		kfree(sta->ampdu_mlme.tid_start_tx[i]);
    142		tid_tx = rcu_dereference_raw(sta->ampdu_mlme.tid_tx[i]);
    143		if (!tid_tx)
    144			continue;
    145		ieee80211_purge_tx_queue(&local->hw, &tid_tx->pending);
    146		kfree(tid_tx);
    147	}
    148}
    149
    150static void cleanup_single_sta(struct sta_info *sta)
    151{
    152	struct ieee80211_sub_if_data *sdata = sta->sdata;
    153	struct ieee80211_local *local = sdata->local;
    154
    155	__cleanup_single_sta(sta);
    156	sta_info_free(local, sta);
    157}
    158
    159struct rhlist_head *sta_info_hash_lookup(struct ieee80211_local *local,
    160					 const u8 *addr)
    161{
    162	return rhltable_lookup(&local->sta_hash, addr, sta_rht_params);
    163}
    164
    165/* protected by RCU */
    166struct sta_info *sta_info_get(struct ieee80211_sub_if_data *sdata,
    167			      const u8 *addr)
    168{
    169	struct ieee80211_local *local = sdata->local;
    170	struct rhlist_head *tmp;
    171	struct sta_info *sta;
    172
    173	rcu_read_lock();
    174	for_each_sta_info(local, addr, sta, tmp) {
    175		if (sta->sdata == sdata) {
    176			rcu_read_unlock();
    177			/* this is safe as the caller must already hold
    178			 * another rcu read section or the mutex
    179			 */
    180			return sta;
    181		}
    182	}
    183	rcu_read_unlock();
    184	return NULL;
    185}
    186
    187/*
    188 * Get sta info either from the specified interface
    189 * or from one of its vlans
    190 */
    191struct sta_info *sta_info_get_bss(struct ieee80211_sub_if_data *sdata,
    192				  const u8 *addr)
    193{
    194	struct ieee80211_local *local = sdata->local;
    195	struct rhlist_head *tmp;
    196	struct sta_info *sta;
    197
    198	rcu_read_lock();
    199	for_each_sta_info(local, addr, sta, tmp) {
    200		if (sta->sdata == sdata ||
    201		    (sta->sdata->bss && sta->sdata->bss == sdata->bss)) {
    202			rcu_read_unlock();
    203			/* this is safe as the caller must already hold
    204			 * another rcu read section or the mutex
    205			 */
    206			return sta;
    207		}
    208	}
    209	rcu_read_unlock();
    210	return NULL;
    211}
    212
    213struct sta_info *sta_info_get_by_addrs(struct ieee80211_local *local,
    214				       const u8 *sta_addr, const u8 *vif_addr)
    215{
    216	struct rhlist_head *tmp;
    217	struct sta_info *sta;
    218
    219	for_each_sta_info(local, sta_addr, sta, tmp) {
    220		if (ether_addr_equal(vif_addr, sta->sdata->vif.addr))
    221			return sta;
    222	}
    223
    224	return NULL;
    225}
    226
    227struct sta_info *sta_info_get_by_idx(struct ieee80211_sub_if_data *sdata,
    228				     int idx)
    229{
    230	struct ieee80211_local *local = sdata->local;
    231	struct sta_info *sta;
    232	int i = 0;
    233
    234	list_for_each_entry_rcu(sta, &local->sta_list, list,
    235				lockdep_is_held(&local->sta_mtx)) {
    236		if (sdata != sta->sdata)
    237			continue;
    238		if (i < idx) {
    239			++i;
    240			continue;
    241		}
    242		return sta;
    243	}
    244
    245	return NULL;
    246}
    247
    248/**
    249 * sta_info_free - free STA
    250 *
    251 * @local: pointer to the global information
    252 * @sta: STA info to free
    253 *
    254 * This function must undo everything done by sta_info_alloc()
    255 * that may happen before sta_info_insert(). It may only be
    256 * called when sta_info_insert() has not been attempted (and
    257 * if that fails, the station is freed anyway.)
    258 */
    259void sta_info_free(struct ieee80211_local *local, struct sta_info *sta)
    260{
    261	/*
    262	 * If we had used sta_info_pre_move_state() then we might not
    263	 * have gone through the state transitions down again, so do
    264	 * it here now (and warn if it's inserted).
    265	 *
    266	 * This will clear state such as fast TX/RX that may have been
    267	 * allocated during state transitions.
    268	 */
    269	while (sta->sta_state > IEEE80211_STA_NONE) {
    270		int ret;
    271
    272		WARN_ON_ONCE(test_sta_flag(sta, WLAN_STA_INSERTED));
    273
    274		ret = sta_info_move_state(sta, sta->sta_state - 1);
    275		if (WARN_ONCE(ret, "sta_info_move_state() returned %d\n", ret))
    276			break;
    277	}
    278
    279	if (sta->rate_ctrl)
    280		rate_control_free_sta(sta);
    281
    282	sta_dbg(sta->sdata, "Destroyed STA %pM\n", sta->sta.addr);
    283
    284	if (sta->sta.txq[0])
    285		kfree(to_txq_info(sta->sta.txq[0]));
    286	kfree(rcu_dereference_raw(sta->sta.rates));
    287#ifdef CONFIG_MAC80211_MESH
    288	kfree(sta->mesh);
    289#endif
    290	free_percpu(sta->deflink.pcpu_rx_stats);
    291	kfree(sta);
    292}
    293
    294/* Caller must hold local->sta_mtx */
    295static int sta_info_hash_add(struct ieee80211_local *local,
    296			     struct sta_info *sta)
    297{
    298	return rhltable_insert(&local->sta_hash, &sta->hash_node,
    299			       sta_rht_params);
    300}
    301
    302static void sta_deliver_ps_frames(struct work_struct *wk)
    303{
    304	struct sta_info *sta;
    305
    306	sta = container_of(wk, struct sta_info, drv_deliver_wk);
    307
    308	if (sta->dead)
    309		return;
    310
    311	local_bh_disable();
    312	if (!test_sta_flag(sta, WLAN_STA_PS_STA))
    313		ieee80211_sta_ps_deliver_wakeup(sta);
    314	else if (test_and_clear_sta_flag(sta, WLAN_STA_PSPOLL))
    315		ieee80211_sta_ps_deliver_poll_response(sta);
    316	else if (test_and_clear_sta_flag(sta, WLAN_STA_UAPSD))
    317		ieee80211_sta_ps_deliver_uapsd(sta);
    318	local_bh_enable();
    319}
    320
    321static int sta_prepare_rate_control(struct ieee80211_local *local,
    322				    struct sta_info *sta, gfp_t gfp)
    323{
    324	if (ieee80211_hw_check(&local->hw, HAS_RATE_CONTROL))
    325		return 0;
    326
    327	sta->rate_ctrl = local->rate_ctrl;
    328	sta->rate_ctrl_priv = rate_control_alloc_sta(sta->rate_ctrl,
    329						     sta, gfp);
    330	if (!sta->rate_ctrl_priv)
    331		return -ENOMEM;
    332
    333	return 0;
    334}
    335
    336struct sta_info *sta_info_alloc(struct ieee80211_sub_if_data *sdata,
    337				const u8 *addr, gfp_t gfp)
    338{
    339	struct ieee80211_local *local = sdata->local;
    340	struct ieee80211_hw *hw = &local->hw;
    341	struct sta_info *sta;
    342	int i;
    343
    344	sta = kzalloc(sizeof(*sta) + hw->sta_data_size, gfp);
    345	if (!sta)
    346		return NULL;
    347
    348	if (ieee80211_hw_check(hw, USES_RSS)) {
    349		sta->deflink.pcpu_rx_stats =
    350			alloc_percpu_gfp(struct ieee80211_sta_rx_stats, gfp);
    351		if (!sta->deflink.pcpu_rx_stats)
    352			goto free;
    353	}
    354
    355	spin_lock_init(&sta->lock);
    356	spin_lock_init(&sta->ps_lock);
    357	INIT_WORK(&sta->drv_deliver_wk, sta_deliver_ps_frames);
    358	INIT_WORK(&sta->ampdu_mlme.work, ieee80211_ba_session_work);
    359	mutex_init(&sta->ampdu_mlme.mtx);
    360#ifdef CONFIG_MAC80211_MESH
    361	if (ieee80211_vif_is_mesh(&sdata->vif)) {
    362		sta->mesh = kzalloc(sizeof(*sta->mesh), gfp);
    363		if (!sta->mesh)
    364			goto free;
    365		sta->mesh->plink_sta = sta;
    366		spin_lock_init(&sta->mesh->plink_lock);
    367		if (!sdata->u.mesh.user_mpm)
    368			timer_setup(&sta->mesh->plink_timer, mesh_plink_timer,
    369				    0);
    370		sta->mesh->nonpeer_pm = NL80211_MESH_POWER_ACTIVE;
    371	}
    372#endif
    373
    374	memcpy(sta->addr, addr, ETH_ALEN);
    375	memcpy(sta->sta.addr, addr, ETH_ALEN);
    376	sta->sta.max_rx_aggregation_subframes =
    377		local->hw.max_rx_aggregation_subframes;
    378
    379	/* TODO link specific alloc and assignments for MLO Link STA */
    380
    381	/* For non MLO STA, link info can be accessed either via deflink
    382	 * or link[0]
    383	 */
    384	sta->link[0] = &sta->deflink;
    385	sta->sta.link[0] = &sta->sta.deflink;
    386
    387	/* Extended Key ID needs to install keys for keyid 0 and 1 Rx-only.
    388	 * The Tx path starts to use a key as soon as the key slot ptk_idx
    389	 * references to is not NULL. To not use the initial Rx-only key
    390	 * prematurely for Tx initialize ptk_idx to an impossible PTK keyid
    391	 * which always will refer to a NULL key.
    392	 */
    393	BUILD_BUG_ON(ARRAY_SIZE(sta->ptk) <= INVALID_PTK_KEYIDX);
    394	sta->ptk_idx = INVALID_PTK_KEYIDX;
    395
    396	sta->local = local;
    397	sta->sdata = sdata;
    398	sta->deflink.rx_stats.last_rx = jiffies;
    399
    400	u64_stats_init(&sta->deflink.rx_stats.syncp);
    401
    402	ieee80211_init_frag_cache(&sta->frags);
    403
    404	sta->sta_state = IEEE80211_STA_NONE;
    405
    406	/* Mark TID as unreserved */
    407	sta->reserved_tid = IEEE80211_TID_UNRESERVED;
    408
    409	sta->last_connected = ktime_get_seconds();
    410	ewma_signal_init(&sta->deflink.rx_stats_avg.signal);
    411	ewma_avg_signal_init(&sta->deflink.status_stats.avg_ack_signal);
    412	for (i = 0; i < ARRAY_SIZE(sta->deflink.rx_stats_avg.chain_signal); i++)
    413		ewma_signal_init(&sta->deflink.rx_stats_avg.chain_signal[i]);
    414
    415	if (local->ops->wake_tx_queue) {
    416		void *txq_data;
    417		int size = sizeof(struct txq_info) +
    418			   ALIGN(hw->txq_data_size, sizeof(void *));
    419
    420		txq_data = kcalloc(ARRAY_SIZE(sta->sta.txq), size, gfp);
    421		if (!txq_data)
    422			goto free;
    423
    424		for (i = 0; i < ARRAY_SIZE(sta->sta.txq); i++) {
    425			struct txq_info *txq = txq_data + i * size;
    426
    427			/* might not do anything for the bufferable MMPDU TXQ */
    428			ieee80211_txq_init(sdata, sta, txq, i);
    429		}
    430	}
    431
    432	if (sta_prepare_rate_control(local, sta, gfp))
    433		goto free_txq;
    434
    435
    436	for (i = 0; i < IEEE80211_NUM_ACS; i++) {
    437		skb_queue_head_init(&sta->ps_tx_buf[i]);
    438		skb_queue_head_init(&sta->tx_filtered[i]);
    439		init_airtime_info(&sta->airtime[i], &local->airtime[i]);
    440	}
    441
    442	for (i = 0; i < IEEE80211_NUM_TIDS; i++)
    443		sta->last_seq_ctrl[i] = cpu_to_le16(USHRT_MAX);
    444
    445	for (i = 0; i < NUM_NL80211_BANDS; i++) {
    446		u32 mandatory = 0;
    447		int r;
    448
    449		if (!hw->wiphy->bands[i])
    450			continue;
    451
    452		switch (i) {
    453		case NL80211_BAND_2GHZ:
    454		case NL80211_BAND_LC:
    455			/*
    456			 * We use both here, even if we cannot really know for
    457			 * sure the station will support both, but the only use
    458			 * for this is when we don't know anything yet and send
    459			 * management frames, and then we'll pick the lowest
    460			 * possible rate anyway.
    461			 * If we don't include _G here, we cannot find a rate
    462			 * in P2P, and thus trigger the WARN_ONCE() in rate.c
    463			 */
    464			mandatory = IEEE80211_RATE_MANDATORY_B |
    465				    IEEE80211_RATE_MANDATORY_G;
    466			break;
    467		case NL80211_BAND_5GHZ:
    468			mandatory = IEEE80211_RATE_MANDATORY_A;
    469			break;
    470		case NL80211_BAND_60GHZ:
    471			WARN_ON(1);
    472			mandatory = 0;
    473			break;
    474		}
    475
    476		for (r = 0; r < hw->wiphy->bands[i]->n_bitrates; r++) {
    477			struct ieee80211_rate *rate;
    478
    479			rate = &hw->wiphy->bands[i]->bitrates[r];
    480
    481			if (!(rate->flags & mandatory))
    482				continue;
    483			sta->sta.deflink.supp_rates[i] |= BIT(r);
    484		}
    485	}
    486
    487	sta->sta.smps_mode = IEEE80211_SMPS_OFF;
    488	if (sdata->vif.type == NL80211_IFTYPE_AP ||
    489	    sdata->vif.type == NL80211_IFTYPE_AP_VLAN) {
    490		struct ieee80211_supported_band *sband;
    491		u8 smps;
    492
    493		sband = ieee80211_get_sband(sdata);
    494		if (!sband)
    495			goto free_txq;
    496
    497		smps = (sband->ht_cap.cap & IEEE80211_HT_CAP_SM_PS) >>
    498			IEEE80211_HT_CAP_SM_PS_SHIFT;
    499		/*
    500		 * Assume that hostapd advertises our caps in the beacon and
    501		 * this is the known_smps_mode for a station that just assciated
    502		 */
    503		switch (smps) {
    504		case WLAN_HT_SMPS_CONTROL_DISABLED:
    505			sta->known_smps_mode = IEEE80211_SMPS_OFF;
    506			break;
    507		case WLAN_HT_SMPS_CONTROL_STATIC:
    508			sta->known_smps_mode = IEEE80211_SMPS_STATIC;
    509			break;
    510		case WLAN_HT_SMPS_CONTROL_DYNAMIC:
    511			sta->known_smps_mode = IEEE80211_SMPS_DYNAMIC;
    512			break;
    513		default:
    514			WARN_ON(1);
    515		}
    516	}
    517
    518	sta->sta.max_rc_amsdu_len = IEEE80211_MAX_MPDU_LEN_HT_BA;
    519
    520	sta->cparams.ce_threshold = CODEL_DISABLED_THRESHOLD;
    521	sta->cparams.target = MS2TIME(20);
    522	sta->cparams.interval = MS2TIME(100);
    523	sta->cparams.ecn = true;
    524	sta->cparams.ce_threshold_selector = 0;
    525	sta->cparams.ce_threshold_mask = 0;
    526
    527	sta_dbg(sdata, "Allocated STA %pM\n", sta->sta.addr);
    528
    529	return sta;
    530
    531free_txq:
    532	if (sta->sta.txq[0])
    533		kfree(to_txq_info(sta->sta.txq[0]));
    534free:
    535	free_percpu(sta->deflink.pcpu_rx_stats);
    536#ifdef CONFIG_MAC80211_MESH
    537	kfree(sta->mesh);
    538#endif
    539	kfree(sta);
    540	return NULL;
    541}
    542
    543static int sta_info_insert_check(struct sta_info *sta)
    544{
    545	struct ieee80211_sub_if_data *sdata = sta->sdata;
    546
    547	/*
    548	 * Can't be a WARN_ON because it can be triggered through a race:
    549	 * something inserts a STA (on one CPU) without holding the RTNL
    550	 * and another CPU turns off the net device.
    551	 */
    552	if (unlikely(!ieee80211_sdata_running(sdata)))
    553		return -ENETDOWN;
    554
    555	if (WARN_ON(ether_addr_equal(sta->sta.addr, sdata->vif.addr) ||
    556		    !is_valid_ether_addr(sta->sta.addr)))
    557		return -EINVAL;
    558
    559	/* The RCU read lock is required by rhashtable due to
    560	 * asynchronous resize/rehash.  We also require the mutex
    561	 * for correctness.
    562	 */
    563	rcu_read_lock();
    564	lockdep_assert_held(&sdata->local->sta_mtx);
    565	if (ieee80211_hw_check(&sdata->local->hw, NEEDS_UNIQUE_STA_ADDR) &&
    566	    ieee80211_find_sta_by_ifaddr(&sdata->local->hw, sta->addr, NULL)) {
    567		rcu_read_unlock();
    568		return -ENOTUNIQ;
    569	}
    570	rcu_read_unlock();
    571
    572	return 0;
    573}
    574
    575static int sta_info_insert_drv_state(struct ieee80211_local *local,
    576				     struct ieee80211_sub_if_data *sdata,
    577				     struct sta_info *sta)
    578{
    579	enum ieee80211_sta_state state;
    580	int err = 0;
    581
    582	for (state = IEEE80211_STA_NOTEXIST; state < sta->sta_state; state++) {
    583		err = drv_sta_state(local, sdata, sta, state, state + 1);
    584		if (err)
    585			break;
    586	}
    587
    588	if (!err) {
    589		/*
    590		 * Drivers using legacy sta_add/sta_remove callbacks only
    591		 * get uploaded set to true after sta_add is called.
    592		 */
    593		if (!local->ops->sta_add)
    594			sta->uploaded = true;
    595		return 0;
    596	}
    597
    598	if (sdata->vif.type == NL80211_IFTYPE_ADHOC) {
    599		sdata_info(sdata,
    600			   "failed to move IBSS STA %pM to state %d (%d) - keeping it anyway\n",
    601			   sta->sta.addr, state + 1, err);
    602		err = 0;
    603	}
    604
    605	/* unwind on error */
    606	for (; state > IEEE80211_STA_NOTEXIST; state--)
    607		WARN_ON(drv_sta_state(local, sdata, sta, state, state - 1));
    608
    609	return err;
    610}
    611
    612static void
    613ieee80211_recalc_p2p_go_ps_allowed(struct ieee80211_sub_if_data *sdata)
    614{
    615	struct ieee80211_local *local = sdata->local;
    616	bool allow_p2p_go_ps = sdata->vif.p2p;
    617	struct sta_info *sta;
    618
    619	rcu_read_lock();
    620	list_for_each_entry_rcu(sta, &local->sta_list, list) {
    621		if (sdata != sta->sdata ||
    622		    !test_sta_flag(sta, WLAN_STA_ASSOC))
    623			continue;
    624		if (!sta->sta.support_p2p_ps) {
    625			allow_p2p_go_ps = false;
    626			break;
    627		}
    628	}
    629	rcu_read_unlock();
    630
    631	if (allow_p2p_go_ps != sdata->vif.bss_conf.allow_p2p_go_ps) {
    632		sdata->vif.bss_conf.allow_p2p_go_ps = allow_p2p_go_ps;
    633		ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_P2P_PS);
    634	}
    635}
    636
    637/*
    638 * should be called with sta_mtx locked
    639 * this function replaces the mutex lock
    640 * with a RCU lock
    641 */
    642static int sta_info_insert_finish(struct sta_info *sta) __acquires(RCU)
    643{
    644	struct ieee80211_local *local = sta->local;
    645	struct ieee80211_sub_if_data *sdata = sta->sdata;
    646	struct station_info *sinfo = NULL;
    647	int err = 0;
    648
    649	lockdep_assert_held(&local->sta_mtx);
    650
    651	/* check if STA exists already */
    652	if (sta_info_get_bss(sdata, sta->sta.addr)) {
    653		err = -EEXIST;
    654		goto out_cleanup;
    655	}
    656
    657	sinfo = kzalloc(sizeof(struct station_info), GFP_KERNEL);
    658	if (!sinfo) {
    659		err = -ENOMEM;
    660		goto out_cleanup;
    661	}
    662
    663	local->num_sta++;
    664	local->sta_generation++;
    665	smp_mb();
    666
    667	/* simplify things and don't accept BA sessions yet */
    668	set_sta_flag(sta, WLAN_STA_BLOCK_BA);
    669
    670	/* make the station visible */
    671	err = sta_info_hash_add(local, sta);
    672	if (err)
    673		goto out_drop_sta;
    674
    675	list_add_tail_rcu(&sta->list, &local->sta_list);
    676
    677	/* update channel context before notifying the driver about state
    678	 * change, this enables driver using the updated channel context right away.
    679	 */
    680	if (sta->sta_state >= IEEE80211_STA_ASSOC) {
    681		ieee80211_recalc_min_chandef(sta->sdata);
    682		if (!sta->sta.support_p2p_ps)
    683			ieee80211_recalc_p2p_go_ps_allowed(sta->sdata);
    684	}
    685
    686	/* notify driver */
    687	err = sta_info_insert_drv_state(local, sdata, sta);
    688	if (err)
    689		goto out_remove;
    690
    691	set_sta_flag(sta, WLAN_STA_INSERTED);
    692
    693	/* accept BA sessions now */
    694	clear_sta_flag(sta, WLAN_STA_BLOCK_BA);
    695
    696	ieee80211_sta_debugfs_add(sta);
    697	rate_control_add_sta_debugfs(sta);
    698
    699	sinfo->generation = local->sta_generation;
    700	cfg80211_new_sta(sdata->dev, sta->sta.addr, sinfo, GFP_KERNEL);
    701	kfree(sinfo);
    702
    703	sta_dbg(sdata, "Inserted STA %pM\n", sta->sta.addr);
    704
    705	/* move reference to rcu-protected */
    706	rcu_read_lock();
    707	mutex_unlock(&local->sta_mtx);
    708
    709	if (ieee80211_vif_is_mesh(&sdata->vif))
    710		mesh_accept_plinks_update(sdata);
    711
    712	return 0;
    713 out_remove:
    714	sta_info_hash_del(local, sta);
    715	list_del_rcu(&sta->list);
    716 out_drop_sta:
    717	local->num_sta--;
    718	synchronize_net();
    719 out_cleanup:
    720	cleanup_single_sta(sta);
    721	mutex_unlock(&local->sta_mtx);
    722	kfree(sinfo);
    723	rcu_read_lock();
    724	return err;
    725}
    726
    727int sta_info_insert_rcu(struct sta_info *sta) __acquires(RCU)
    728{
    729	struct ieee80211_local *local = sta->local;
    730	int err;
    731
    732	might_sleep();
    733
    734	mutex_lock(&local->sta_mtx);
    735
    736	err = sta_info_insert_check(sta);
    737	if (err) {
    738		sta_info_free(local, sta);
    739		mutex_unlock(&local->sta_mtx);
    740		rcu_read_lock();
    741		return err;
    742	}
    743
    744	return sta_info_insert_finish(sta);
    745}
    746
    747int sta_info_insert(struct sta_info *sta)
    748{
    749	int err = sta_info_insert_rcu(sta);
    750
    751	rcu_read_unlock();
    752
    753	return err;
    754}
    755
    756static inline void __bss_tim_set(u8 *tim, u16 id)
    757{
    758	/*
    759	 * This format has been mandated by the IEEE specifications,
    760	 * so this line may not be changed to use the __set_bit() format.
    761	 */
    762	tim[id / 8] |= (1 << (id % 8));
    763}
    764
    765static inline void __bss_tim_clear(u8 *tim, u16 id)
    766{
    767	/*
    768	 * This format has been mandated by the IEEE specifications,
    769	 * so this line may not be changed to use the __clear_bit() format.
    770	 */
    771	tim[id / 8] &= ~(1 << (id % 8));
    772}
    773
    774static inline bool __bss_tim_get(u8 *tim, u16 id)
    775{
    776	/*
    777	 * This format has been mandated by the IEEE specifications,
    778	 * so this line may not be changed to use the test_bit() format.
    779	 */
    780	return tim[id / 8] & (1 << (id % 8));
    781}
    782
    783static unsigned long ieee80211_tids_for_ac(int ac)
    784{
    785	/* If we ever support TIDs > 7, this obviously needs to be adjusted */
    786	switch (ac) {
    787	case IEEE80211_AC_VO:
    788		return BIT(6) | BIT(7);
    789	case IEEE80211_AC_VI:
    790		return BIT(4) | BIT(5);
    791	case IEEE80211_AC_BE:
    792		return BIT(0) | BIT(3);
    793	case IEEE80211_AC_BK:
    794		return BIT(1) | BIT(2);
    795	default:
    796		WARN_ON(1);
    797		return 0;
    798	}
    799}
    800
    801static void __sta_info_recalc_tim(struct sta_info *sta, bool ignore_pending)
    802{
    803	struct ieee80211_local *local = sta->local;
    804	struct ps_data *ps;
    805	bool indicate_tim = false;
    806	u8 ignore_for_tim = sta->sta.uapsd_queues;
    807	int ac;
    808	u16 id = sta->sta.aid;
    809
    810	if (sta->sdata->vif.type == NL80211_IFTYPE_AP ||
    811	    sta->sdata->vif.type == NL80211_IFTYPE_AP_VLAN) {
    812		if (WARN_ON_ONCE(!sta->sdata->bss))
    813			return;
    814
    815		ps = &sta->sdata->bss->ps;
    816#ifdef CONFIG_MAC80211_MESH
    817	} else if (ieee80211_vif_is_mesh(&sta->sdata->vif)) {
    818		ps = &sta->sdata->u.mesh.ps;
    819#endif
    820	} else {
    821		return;
    822	}
    823
    824	/* No need to do anything if the driver does all */
    825	if (ieee80211_hw_check(&local->hw, AP_LINK_PS) && !local->ops->set_tim)
    826		return;
    827
    828	if (sta->dead)
    829		goto done;
    830
    831	/*
    832	 * If all ACs are delivery-enabled then we should build
    833	 * the TIM bit for all ACs anyway; if only some are then
    834	 * we ignore those and build the TIM bit using only the
    835	 * non-enabled ones.
    836	 */
    837	if (ignore_for_tim == BIT(IEEE80211_NUM_ACS) - 1)
    838		ignore_for_tim = 0;
    839
    840	if (ignore_pending)
    841		ignore_for_tim = BIT(IEEE80211_NUM_ACS) - 1;
    842
    843	for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
    844		unsigned long tids;
    845
    846		if (ignore_for_tim & ieee80211_ac_to_qos_mask[ac])
    847			continue;
    848
    849		indicate_tim |= !skb_queue_empty(&sta->tx_filtered[ac]) ||
    850				!skb_queue_empty(&sta->ps_tx_buf[ac]);
    851		if (indicate_tim)
    852			break;
    853
    854		tids = ieee80211_tids_for_ac(ac);
    855
    856		indicate_tim |=
    857			sta->driver_buffered_tids & tids;
    858		indicate_tim |=
    859			sta->txq_buffered_tids & tids;
    860	}
    861
    862 done:
    863	spin_lock_bh(&local->tim_lock);
    864
    865	if (indicate_tim == __bss_tim_get(ps->tim, id))
    866		goto out_unlock;
    867
    868	if (indicate_tim)
    869		__bss_tim_set(ps->tim, id);
    870	else
    871		__bss_tim_clear(ps->tim, id);
    872
    873	if (local->ops->set_tim && !WARN_ON(sta->dead)) {
    874		local->tim_in_locked_section = true;
    875		drv_set_tim(local, &sta->sta, indicate_tim);
    876		local->tim_in_locked_section = false;
    877	}
    878
    879out_unlock:
    880	spin_unlock_bh(&local->tim_lock);
    881}
    882
    883void sta_info_recalc_tim(struct sta_info *sta)
    884{
    885	__sta_info_recalc_tim(sta, false);
    886}
    887
    888static bool sta_info_buffer_expired(struct sta_info *sta, struct sk_buff *skb)
    889{
    890	struct ieee80211_tx_info *info;
    891	int timeout;
    892
    893	if (!skb)
    894		return false;
    895
    896	info = IEEE80211_SKB_CB(skb);
    897
    898	/* Timeout: (2 * listen_interval * beacon_int * 1024 / 1000000) sec */
    899	timeout = (sta->listen_interval *
    900		   sta->sdata->vif.bss_conf.beacon_int *
    901		   32 / 15625) * HZ;
    902	if (timeout < STA_TX_BUFFER_EXPIRE)
    903		timeout = STA_TX_BUFFER_EXPIRE;
    904	return time_after(jiffies, info->control.jiffies + timeout);
    905}
    906
    907
    908static bool sta_info_cleanup_expire_buffered_ac(struct ieee80211_local *local,
    909						struct sta_info *sta, int ac)
    910{
    911	unsigned long flags;
    912	struct sk_buff *skb;
    913
    914	/*
    915	 * First check for frames that should expire on the filtered
    916	 * queue. Frames here were rejected by the driver and are on
    917	 * a separate queue to avoid reordering with normal PS-buffered
    918	 * frames. They also aren't accounted for right now in the
    919	 * total_ps_buffered counter.
    920	 */
    921	for (;;) {
    922		spin_lock_irqsave(&sta->tx_filtered[ac].lock, flags);
    923		skb = skb_peek(&sta->tx_filtered[ac]);
    924		if (sta_info_buffer_expired(sta, skb))
    925			skb = __skb_dequeue(&sta->tx_filtered[ac]);
    926		else
    927			skb = NULL;
    928		spin_unlock_irqrestore(&sta->tx_filtered[ac].lock, flags);
    929
    930		/*
    931		 * Frames are queued in order, so if this one
    932		 * hasn't expired yet we can stop testing. If
    933		 * we actually reached the end of the queue we
    934		 * also need to stop, of course.
    935		 */
    936		if (!skb)
    937			break;
    938		ieee80211_free_txskb(&local->hw, skb);
    939	}
    940
    941	/*
    942	 * Now also check the normal PS-buffered queue, this will
    943	 * only find something if the filtered queue was emptied
    944	 * since the filtered frames are all before the normal PS
    945	 * buffered frames.
    946	 */
    947	for (;;) {
    948		spin_lock_irqsave(&sta->ps_tx_buf[ac].lock, flags);
    949		skb = skb_peek(&sta->ps_tx_buf[ac]);
    950		if (sta_info_buffer_expired(sta, skb))
    951			skb = __skb_dequeue(&sta->ps_tx_buf[ac]);
    952		else
    953			skb = NULL;
    954		spin_unlock_irqrestore(&sta->ps_tx_buf[ac].lock, flags);
    955
    956		/*
    957		 * frames are queued in order, so if this one
    958		 * hasn't expired yet (or we reached the end of
    959		 * the queue) we can stop testing
    960		 */
    961		if (!skb)
    962			break;
    963
    964		local->total_ps_buffered--;
    965		ps_dbg(sta->sdata, "Buffered frame expired (STA %pM)\n",
    966		       sta->sta.addr);
    967		ieee80211_free_txskb(&local->hw, skb);
    968	}
    969
    970	/*
    971	 * Finally, recalculate the TIM bit for this station -- it might
    972	 * now be clear because the station was too slow to retrieve its
    973	 * frames.
    974	 */
    975	sta_info_recalc_tim(sta);
    976
    977	/*
    978	 * Return whether there are any frames still buffered, this is
    979	 * used to check whether the cleanup timer still needs to run,
    980	 * if there are no frames we don't need to rearm the timer.
    981	 */
    982	return !(skb_queue_empty(&sta->ps_tx_buf[ac]) &&
    983		 skb_queue_empty(&sta->tx_filtered[ac]));
    984}
    985
    986static bool sta_info_cleanup_expire_buffered(struct ieee80211_local *local,
    987					     struct sta_info *sta)
    988{
    989	bool have_buffered = false;
    990	int ac;
    991
    992	/* This is only necessary for stations on BSS/MBSS interfaces */
    993	if (!sta->sdata->bss &&
    994	    !ieee80211_vif_is_mesh(&sta->sdata->vif))
    995		return false;
    996
    997	for (ac = 0; ac < IEEE80211_NUM_ACS; ac++)
    998		have_buffered |=
    999			sta_info_cleanup_expire_buffered_ac(local, sta, ac);
   1000
   1001	return have_buffered;
   1002}
   1003
   1004static int __must_check __sta_info_destroy_part1(struct sta_info *sta)
   1005{
   1006	struct ieee80211_local *local;
   1007	struct ieee80211_sub_if_data *sdata;
   1008	int ret;
   1009
   1010	might_sleep();
   1011
   1012	if (!sta)
   1013		return -ENOENT;
   1014
   1015	local = sta->local;
   1016	sdata = sta->sdata;
   1017
   1018	lockdep_assert_held(&local->sta_mtx);
   1019
   1020	/*
   1021	 * Before removing the station from the driver and
   1022	 * rate control, it might still start new aggregation
   1023	 * sessions -- block that to make sure the tear-down
   1024	 * will be sufficient.
   1025	 */
   1026	set_sta_flag(sta, WLAN_STA_BLOCK_BA);
   1027	ieee80211_sta_tear_down_BA_sessions(sta, AGG_STOP_DESTROY_STA);
   1028
   1029	/*
   1030	 * Before removing the station from the driver there might be pending
   1031	 * rx frames on RSS queues sent prior to the disassociation - wait for
   1032	 * all such frames to be processed.
   1033	 */
   1034	drv_sync_rx_queues(local, sta);
   1035
   1036	ret = sta_info_hash_del(local, sta);
   1037	if (WARN_ON(ret))
   1038		return ret;
   1039
   1040	/*
   1041	 * for TDLS peers, make sure to return to the base channel before
   1042	 * removal.
   1043	 */
   1044	if (test_sta_flag(sta, WLAN_STA_TDLS_OFF_CHANNEL)) {
   1045		drv_tdls_cancel_channel_switch(local, sdata, &sta->sta);
   1046		clear_sta_flag(sta, WLAN_STA_TDLS_OFF_CHANNEL);
   1047	}
   1048
   1049	list_del_rcu(&sta->list);
   1050	sta->removed = true;
   1051
   1052	drv_sta_pre_rcu_remove(local, sta->sdata, sta);
   1053
   1054	if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN &&
   1055	    rcu_access_pointer(sdata->u.vlan.sta) == sta)
   1056		RCU_INIT_POINTER(sdata->u.vlan.sta, NULL);
   1057
   1058	return 0;
   1059}
   1060
   1061static void __sta_info_destroy_part2(struct sta_info *sta)
   1062{
   1063	struct ieee80211_local *local = sta->local;
   1064	struct ieee80211_sub_if_data *sdata = sta->sdata;
   1065	struct station_info *sinfo;
   1066	int ret;
   1067
   1068	/*
   1069	 * NOTE: This assumes at least synchronize_net() was done
   1070	 *	 after _part1 and before _part2!
   1071	 */
   1072
   1073	might_sleep();
   1074	lockdep_assert_held(&local->sta_mtx);
   1075
   1076	if (sta->sta_state == IEEE80211_STA_AUTHORIZED) {
   1077		ret = sta_info_move_state(sta, IEEE80211_STA_ASSOC);
   1078		WARN_ON_ONCE(ret);
   1079	}
   1080
   1081	/* now keys can no longer be reached */
   1082	ieee80211_free_sta_keys(local, sta);
   1083
   1084	/* disable TIM bit - last chance to tell driver */
   1085	__sta_info_recalc_tim(sta, true);
   1086
   1087	sta->dead = true;
   1088
   1089	local->num_sta--;
   1090	local->sta_generation++;
   1091
   1092	while (sta->sta_state > IEEE80211_STA_NONE) {
   1093		ret = sta_info_move_state(sta, sta->sta_state - 1);
   1094		if (ret) {
   1095			WARN_ON_ONCE(1);
   1096			break;
   1097		}
   1098	}
   1099
   1100	if (sta->uploaded) {
   1101		ret = drv_sta_state(local, sdata, sta, IEEE80211_STA_NONE,
   1102				    IEEE80211_STA_NOTEXIST);
   1103		WARN_ON_ONCE(ret != 0);
   1104	}
   1105
   1106	sta_dbg(sdata, "Removed STA %pM\n", sta->sta.addr);
   1107
   1108	sinfo = kzalloc(sizeof(*sinfo), GFP_KERNEL);
   1109	if (sinfo)
   1110		sta_set_sinfo(sta, sinfo, true);
   1111	cfg80211_del_sta_sinfo(sdata->dev, sta->sta.addr, sinfo, GFP_KERNEL);
   1112	kfree(sinfo);
   1113
   1114	ieee80211_sta_debugfs_remove(sta);
   1115
   1116	ieee80211_destroy_frag_cache(&sta->frags);
   1117
   1118	cleanup_single_sta(sta);
   1119}
   1120
   1121int __must_check __sta_info_destroy(struct sta_info *sta)
   1122{
   1123	int err = __sta_info_destroy_part1(sta);
   1124
   1125	if (err)
   1126		return err;
   1127
   1128	synchronize_net();
   1129
   1130	__sta_info_destroy_part2(sta);
   1131
   1132	return 0;
   1133}
   1134
   1135int sta_info_destroy_addr(struct ieee80211_sub_if_data *sdata, const u8 *addr)
   1136{
   1137	struct sta_info *sta;
   1138	int ret;
   1139
   1140	mutex_lock(&sdata->local->sta_mtx);
   1141	sta = sta_info_get(sdata, addr);
   1142	ret = __sta_info_destroy(sta);
   1143	mutex_unlock(&sdata->local->sta_mtx);
   1144
   1145	return ret;
   1146}
   1147
   1148int sta_info_destroy_addr_bss(struct ieee80211_sub_if_data *sdata,
   1149			      const u8 *addr)
   1150{
   1151	struct sta_info *sta;
   1152	int ret;
   1153
   1154	mutex_lock(&sdata->local->sta_mtx);
   1155	sta = sta_info_get_bss(sdata, addr);
   1156	ret = __sta_info_destroy(sta);
   1157	mutex_unlock(&sdata->local->sta_mtx);
   1158
   1159	return ret;
   1160}
   1161
   1162static void sta_info_cleanup(struct timer_list *t)
   1163{
   1164	struct ieee80211_local *local = from_timer(local, t, sta_cleanup);
   1165	struct sta_info *sta;
   1166	bool timer_needed = false;
   1167
   1168	rcu_read_lock();
   1169	list_for_each_entry_rcu(sta, &local->sta_list, list)
   1170		if (sta_info_cleanup_expire_buffered(local, sta))
   1171			timer_needed = true;
   1172	rcu_read_unlock();
   1173
   1174	if (local->quiescing)
   1175		return;
   1176
   1177	if (!timer_needed)
   1178		return;
   1179
   1180	mod_timer(&local->sta_cleanup,
   1181		  round_jiffies(jiffies + STA_INFO_CLEANUP_INTERVAL));
   1182}
   1183
   1184int sta_info_init(struct ieee80211_local *local)
   1185{
   1186	int err;
   1187
   1188	err = rhltable_init(&local->sta_hash, &sta_rht_params);
   1189	if (err)
   1190		return err;
   1191
   1192	spin_lock_init(&local->tim_lock);
   1193	mutex_init(&local->sta_mtx);
   1194	INIT_LIST_HEAD(&local->sta_list);
   1195
   1196	timer_setup(&local->sta_cleanup, sta_info_cleanup, 0);
   1197	return 0;
   1198}
   1199
   1200void sta_info_stop(struct ieee80211_local *local)
   1201{
   1202	del_timer_sync(&local->sta_cleanup);
   1203	rhltable_destroy(&local->sta_hash);
   1204}
   1205
   1206
   1207int __sta_info_flush(struct ieee80211_sub_if_data *sdata, bool vlans)
   1208{
   1209	struct ieee80211_local *local = sdata->local;
   1210	struct sta_info *sta, *tmp;
   1211	LIST_HEAD(free_list);
   1212	int ret = 0;
   1213
   1214	might_sleep();
   1215
   1216	WARN_ON(vlans && sdata->vif.type != NL80211_IFTYPE_AP);
   1217	WARN_ON(vlans && !sdata->bss);
   1218
   1219	mutex_lock(&local->sta_mtx);
   1220	list_for_each_entry_safe(sta, tmp, &local->sta_list, list) {
   1221		if (sdata == sta->sdata ||
   1222		    (vlans && sdata->bss == sta->sdata->bss)) {
   1223			if (!WARN_ON(__sta_info_destroy_part1(sta)))
   1224				list_add(&sta->free_list, &free_list);
   1225			ret++;
   1226		}
   1227	}
   1228
   1229	if (!list_empty(&free_list)) {
   1230		synchronize_net();
   1231		list_for_each_entry_safe(sta, tmp, &free_list, free_list)
   1232			__sta_info_destroy_part2(sta);
   1233	}
   1234	mutex_unlock(&local->sta_mtx);
   1235
   1236	return ret;
   1237}
   1238
   1239void ieee80211_sta_expire(struct ieee80211_sub_if_data *sdata,
   1240			  unsigned long exp_time)
   1241{
   1242	struct ieee80211_local *local = sdata->local;
   1243	struct sta_info *sta, *tmp;
   1244
   1245	mutex_lock(&local->sta_mtx);
   1246
   1247	list_for_each_entry_safe(sta, tmp, &local->sta_list, list) {
   1248		unsigned long last_active = ieee80211_sta_last_active(sta);
   1249
   1250		if (sdata != sta->sdata)
   1251			continue;
   1252
   1253		if (time_is_before_jiffies(last_active + exp_time)) {
   1254			sta_dbg(sta->sdata, "expiring inactive STA %pM\n",
   1255				sta->sta.addr);
   1256
   1257			if (ieee80211_vif_is_mesh(&sdata->vif) &&
   1258			    test_sta_flag(sta, WLAN_STA_PS_STA))
   1259				atomic_dec(&sdata->u.mesh.ps.num_sta_ps);
   1260
   1261			WARN_ON(__sta_info_destroy(sta));
   1262		}
   1263	}
   1264
   1265	mutex_unlock(&local->sta_mtx);
   1266}
   1267
   1268struct ieee80211_sta *ieee80211_find_sta_by_ifaddr(struct ieee80211_hw *hw,
   1269						   const u8 *addr,
   1270						   const u8 *localaddr)
   1271{
   1272	struct ieee80211_local *local = hw_to_local(hw);
   1273	struct rhlist_head *tmp;
   1274	struct sta_info *sta;
   1275
   1276	/*
   1277	 * Just return a random station if localaddr is NULL
   1278	 * ... first in list.
   1279	 */
   1280	for_each_sta_info(local, addr, sta, tmp) {
   1281		if (localaddr &&
   1282		    !ether_addr_equal(sta->sdata->vif.addr, localaddr))
   1283			continue;
   1284		if (!sta->uploaded)
   1285			return NULL;
   1286		return &sta->sta;
   1287	}
   1288
   1289	return NULL;
   1290}
   1291EXPORT_SYMBOL_GPL(ieee80211_find_sta_by_ifaddr);
   1292
   1293struct ieee80211_sta *ieee80211_find_sta(struct ieee80211_vif *vif,
   1294					 const u8 *addr)
   1295{
   1296	struct sta_info *sta;
   1297
   1298	if (!vif)
   1299		return NULL;
   1300
   1301	sta = sta_info_get_bss(vif_to_sdata(vif), addr);
   1302	if (!sta)
   1303		return NULL;
   1304
   1305	if (!sta->uploaded)
   1306		return NULL;
   1307
   1308	return &sta->sta;
   1309}
   1310EXPORT_SYMBOL(ieee80211_find_sta);
   1311
   1312/* powersave support code */
   1313void ieee80211_sta_ps_deliver_wakeup(struct sta_info *sta)
   1314{
   1315	struct ieee80211_sub_if_data *sdata = sta->sdata;
   1316	struct ieee80211_local *local = sdata->local;
   1317	struct sk_buff_head pending;
   1318	int filtered = 0, buffered = 0, ac, i;
   1319	unsigned long flags;
   1320	struct ps_data *ps;
   1321
   1322	if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
   1323		sdata = container_of(sdata->bss, struct ieee80211_sub_if_data,
   1324				     u.ap);
   1325
   1326	if (sdata->vif.type == NL80211_IFTYPE_AP)
   1327		ps = &sdata->bss->ps;
   1328	else if (ieee80211_vif_is_mesh(&sdata->vif))
   1329		ps = &sdata->u.mesh.ps;
   1330	else
   1331		return;
   1332
   1333	clear_sta_flag(sta, WLAN_STA_SP);
   1334
   1335	BUILD_BUG_ON(BITS_TO_LONGS(IEEE80211_NUM_TIDS) > 1);
   1336	sta->driver_buffered_tids = 0;
   1337	sta->txq_buffered_tids = 0;
   1338
   1339	if (!ieee80211_hw_check(&local->hw, AP_LINK_PS))
   1340		drv_sta_notify(local, sdata, STA_NOTIFY_AWAKE, &sta->sta);
   1341
   1342	for (i = 0; i < ARRAY_SIZE(sta->sta.txq); i++) {
   1343		if (!sta->sta.txq[i] || !txq_has_queue(sta->sta.txq[i]))
   1344			continue;
   1345
   1346		schedule_and_wake_txq(local, to_txq_info(sta->sta.txq[i]));
   1347	}
   1348
   1349	skb_queue_head_init(&pending);
   1350
   1351	/* sync with ieee80211_tx_h_unicast_ps_buf */
   1352	spin_lock(&sta->ps_lock);
   1353	/* Send all buffered frames to the station */
   1354	for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
   1355		int count = skb_queue_len(&pending), tmp;
   1356
   1357		spin_lock_irqsave(&sta->tx_filtered[ac].lock, flags);
   1358		skb_queue_splice_tail_init(&sta->tx_filtered[ac], &pending);
   1359		spin_unlock_irqrestore(&sta->tx_filtered[ac].lock, flags);
   1360		tmp = skb_queue_len(&pending);
   1361		filtered += tmp - count;
   1362		count = tmp;
   1363
   1364		spin_lock_irqsave(&sta->ps_tx_buf[ac].lock, flags);
   1365		skb_queue_splice_tail_init(&sta->ps_tx_buf[ac], &pending);
   1366		spin_unlock_irqrestore(&sta->ps_tx_buf[ac].lock, flags);
   1367		tmp = skb_queue_len(&pending);
   1368		buffered += tmp - count;
   1369	}
   1370
   1371	ieee80211_add_pending_skbs(local, &pending);
   1372
   1373	/* now we're no longer in the deliver code */
   1374	clear_sta_flag(sta, WLAN_STA_PS_DELIVER);
   1375
   1376	/* The station might have polled and then woken up before we responded,
   1377	 * so clear these flags now to avoid them sticking around.
   1378	 */
   1379	clear_sta_flag(sta, WLAN_STA_PSPOLL);
   1380	clear_sta_flag(sta, WLAN_STA_UAPSD);
   1381	spin_unlock(&sta->ps_lock);
   1382
   1383	atomic_dec(&ps->num_sta_ps);
   1384
   1385	local->total_ps_buffered -= buffered;
   1386
   1387	sta_info_recalc_tim(sta);
   1388
   1389	ps_dbg(sdata,
   1390	       "STA %pM aid %d sending %d filtered/%d PS frames since STA woke up\n",
   1391	       sta->sta.addr, sta->sta.aid, filtered, buffered);
   1392
   1393	ieee80211_check_fast_xmit(sta);
   1394}
   1395
   1396static void ieee80211_send_null_response(struct sta_info *sta, int tid,
   1397					 enum ieee80211_frame_release_type reason,
   1398					 bool call_driver, bool more_data)
   1399{
   1400	struct ieee80211_sub_if_data *sdata = sta->sdata;
   1401	struct ieee80211_local *local = sdata->local;
   1402	struct ieee80211_qos_hdr *nullfunc;
   1403	struct sk_buff *skb;
   1404	int size = sizeof(*nullfunc);
   1405	__le16 fc;
   1406	bool qos = sta->sta.wme;
   1407	struct ieee80211_tx_info *info;
   1408	struct ieee80211_chanctx_conf *chanctx_conf;
   1409
   1410	if (qos) {
   1411		fc = cpu_to_le16(IEEE80211_FTYPE_DATA |
   1412				 IEEE80211_STYPE_QOS_NULLFUNC |
   1413				 IEEE80211_FCTL_FROMDS);
   1414	} else {
   1415		size -= 2;
   1416		fc = cpu_to_le16(IEEE80211_FTYPE_DATA |
   1417				 IEEE80211_STYPE_NULLFUNC |
   1418				 IEEE80211_FCTL_FROMDS);
   1419	}
   1420
   1421	skb = dev_alloc_skb(local->hw.extra_tx_headroom + size);
   1422	if (!skb)
   1423		return;
   1424
   1425	skb_reserve(skb, local->hw.extra_tx_headroom);
   1426
   1427	nullfunc = skb_put(skb, size);
   1428	nullfunc->frame_control = fc;
   1429	nullfunc->duration_id = 0;
   1430	memcpy(nullfunc->addr1, sta->sta.addr, ETH_ALEN);
   1431	memcpy(nullfunc->addr2, sdata->vif.addr, ETH_ALEN);
   1432	memcpy(nullfunc->addr3, sdata->vif.addr, ETH_ALEN);
   1433	nullfunc->seq_ctrl = 0;
   1434
   1435	skb->priority = tid;
   1436	skb_set_queue_mapping(skb, ieee802_1d_to_ac[tid]);
   1437	if (qos) {
   1438		nullfunc->qos_ctrl = cpu_to_le16(tid);
   1439
   1440		if (reason == IEEE80211_FRAME_RELEASE_UAPSD) {
   1441			nullfunc->qos_ctrl |=
   1442				cpu_to_le16(IEEE80211_QOS_CTL_EOSP);
   1443			if (more_data)
   1444				nullfunc->frame_control |=
   1445					cpu_to_le16(IEEE80211_FCTL_MOREDATA);
   1446		}
   1447	}
   1448
   1449	info = IEEE80211_SKB_CB(skb);
   1450
   1451	/*
   1452	 * Tell TX path to send this frame even though the
   1453	 * STA may still remain is PS mode after this frame
   1454	 * exchange. Also set EOSP to indicate this packet
   1455	 * ends the poll/service period.
   1456	 */
   1457	info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER |
   1458		       IEEE80211_TX_STATUS_EOSP |
   1459		       IEEE80211_TX_CTL_REQ_TX_STATUS;
   1460
   1461	info->control.flags |= IEEE80211_TX_CTRL_PS_RESPONSE;
   1462
   1463	if (call_driver)
   1464		drv_allow_buffered_frames(local, sta, BIT(tid), 1,
   1465					  reason, false);
   1466
   1467	skb->dev = sdata->dev;
   1468
   1469	rcu_read_lock();
   1470	chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf);
   1471	if (WARN_ON(!chanctx_conf)) {
   1472		rcu_read_unlock();
   1473		kfree_skb(skb);
   1474		return;
   1475	}
   1476
   1477	info->band = chanctx_conf->def.chan->band;
   1478	ieee80211_xmit(sdata, sta, skb);
   1479	rcu_read_unlock();
   1480}
   1481
   1482static int find_highest_prio_tid(unsigned long tids)
   1483{
   1484	/* lower 3 TIDs aren't ordered perfectly */
   1485	if (tids & 0xF8)
   1486		return fls(tids) - 1;
   1487	/* TID 0 is BE just like TID 3 */
   1488	if (tids & BIT(0))
   1489		return 0;
   1490	return fls(tids) - 1;
   1491}
   1492
   1493/* Indicates if the MORE_DATA bit should be set in the last
   1494 * frame obtained by ieee80211_sta_ps_get_frames.
   1495 * Note that driver_release_tids is relevant only if
   1496 * reason = IEEE80211_FRAME_RELEASE_PSPOLL
   1497 */
   1498static bool
   1499ieee80211_sta_ps_more_data(struct sta_info *sta, u8 ignored_acs,
   1500			   enum ieee80211_frame_release_type reason,
   1501			   unsigned long driver_release_tids)
   1502{
   1503	int ac;
   1504
   1505	/* If the driver has data on more than one TID then
   1506	 * certainly there's more data if we release just a
   1507	 * single frame now (from a single TID). This will
   1508	 * only happen for PS-Poll.
   1509	 */
   1510	if (reason == IEEE80211_FRAME_RELEASE_PSPOLL &&
   1511	    hweight16(driver_release_tids) > 1)
   1512		return true;
   1513
   1514	for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
   1515		if (ignored_acs & ieee80211_ac_to_qos_mask[ac])
   1516			continue;
   1517
   1518		if (!skb_queue_empty(&sta->tx_filtered[ac]) ||
   1519		    !skb_queue_empty(&sta->ps_tx_buf[ac]))
   1520			return true;
   1521	}
   1522
   1523	return false;
   1524}
   1525
   1526static void
   1527ieee80211_sta_ps_get_frames(struct sta_info *sta, int n_frames, u8 ignored_acs,
   1528			    enum ieee80211_frame_release_type reason,
   1529			    struct sk_buff_head *frames,
   1530			    unsigned long *driver_release_tids)
   1531{
   1532	struct ieee80211_sub_if_data *sdata = sta->sdata;
   1533	struct ieee80211_local *local = sdata->local;
   1534	int ac;
   1535
   1536	/* Get response frame(s) and more data bit for the last one. */
   1537	for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
   1538		unsigned long tids;
   1539
   1540		if (ignored_acs & ieee80211_ac_to_qos_mask[ac])
   1541			continue;
   1542
   1543		tids = ieee80211_tids_for_ac(ac);
   1544
   1545		/* if we already have frames from software, then we can't also
   1546		 * release from hardware queues
   1547		 */
   1548		if (skb_queue_empty(frames)) {
   1549			*driver_release_tids |=
   1550				sta->driver_buffered_tids & tids;
   1551			*driver_release_tids |= sta->txq_buffered_tids & tids;
   1552		}
   1553
   1554		if (!*driver_release_tids) {
   1555			struct sk_buff *skb;
   1556
   1557			while (n_frames > 0) {
   1558				skb = skb_dequeue(&sta->tx_filtered[ac]);
   1559				if (!skb) {
   1560					skb = skb_dequeue(
   1561						&sta->ps_tx_buf[ac]);
   1562					if (skb)
   1563						local->total_ps_buffered--;
   1564				}
   1565				if (!skb)
   1566					break;
   1567				n_frames--;
   1568				__skb_queue_tail(frames, skb);
   1569			}
   1570		}
   1571
   1572		/* If we have more frames buffered on this AC, then abort the
   1573		 * loop since we can't send more data from other ACs before
   1574		 * the buffered frames from this.
   1575		 */
   1576		if (!skb_queue_empty(&sta->tx_filtered[ac]) ||
   1577		    !skb_queue_empty(&sta->ps_tx_buf[ac]))
   1578			break;
   1579	}
   1580}
   1581
   1582static void
   1583ieee80211_sta_ps_deliver_response(struct sta_info *sta,
   1584				  int n_frames, u8 ignored_acs,
   1585				  enum ieee80211_frame_release_type reason)
   1586{
   1587	struct ieee80211_sub_if_data *sdata = sta->sdata;
   1588	struct ieee80211_local *local = sdata->local;
   1589	unsigned long driver_release_tids = 0;
   1590	struct sk_buff_head frames;
   1591	bool more_data;
   1592
   1593	/* Service or PS-Poll period starts */
   1594	set_sta_flag(sta, WLAN_STA_SP);
   1595
   1596	__skb_queue_head_init(&frames);
   1597
   1598	ieee80211_sta_ps_get_frames(sta, n_frames, ignored_acs, reason,
   1599				    &frames, &driver_release_tids);
   1600
   1601	more_data = ieee80211_sta_ps_more_data(sta, ignored_acs, reason, driver_release_tids);
   1602
   1603	if (driver_release_tids && reason == IEEE80211_FRAME_RELEASE_PSPOLL)
   1604		driver_release_tids =
   1605			BIT(find_highest_prio_tid(driver_release_tids));
   1606
   1607	if (skb_queue_empty(&frames) && !driver_release_tids) {
   1608		int tid, ac;
   1609
   1610		/*
   1611		 * For PS-Poll, this can only happen due to a race condition
   1612		 * when we set the TIM bit and the station notices it, but
   1613		 * before it can poll for the frame we expire it.
   1614		 *
   1615		 * For uAPSD, this is said in the standard (11.2.1.5 h):
   1616		 *	At each unscheduled SP for a non-AP STA, the AP shall
   1617		 *	attempt to transmit at least one MSDU or MMPDU, but no
   1618		 *	more than the value specified in the Max SP Length field
   1619		 *	in the QoS Capability element from delivery-enabled ACs,
   1620		 *	that are destined for the non-AP STA.
   1621		 *
   1622		 * Since we have no other MSDU/MMPDU, transmit a QoS null frame.
   1623		 */
   1624
   1625		/* This will evaluate to 1, 3, 5 or 7. */
   1626		for (ac = IEEE80211_AC_VO; ac < IEEE80211_NUM_ACS; ac++)
   1627			if (!(ignored_acs & ieee80211_ac_to_qos_mask[ac]))
   1628				break;
   1629		tid = 7 - 2 * ac;
   1630
   1631		ieee80211_send_null_response(sta, tid, reason, true, false);
   1632	} else if (!driver_release_tids) {
   1633		struct sk_buff_head pending;
   1634		struct sk_buff *skb;
   1635		int num = 0;
   1636		u16 tids = 0;
   1637		bool need_null = false;
   1638
   1639		skb_queue_head_init(&pending);
   1640
   1641		while ((skb = __skb_dequeue(&frames))) {
   1642			struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
   1643			struct ieee80211_hdr *hdr = (void *) skb->data;
   1644			u8 *qoshdr = NULL;
   1645
   1646			num++;
   1647
   1648			/*
   1649			 * Tell TX path to send this frame even though the
   1650			 * STA may still remain is PS mode after this frame
   1651			 * exchange.
   1652			 */
   1653			info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER;
   1654			info->control.flags |= IEEE80211_TX_CTRL_PS_RESPONSE;
   1655
   1656			/*
   1657			 * Use MoreData flag to indicate whether there are
   1658			 * more buffered frames for this STA
   1659			 */
   1660			if (more_data || !skb_queue_empty(&frames))
   1661				hdr->frame_control |=
   1662					cpu_to_le16(IEEE80211_FCTL_MOREDATA);
   1663			else
   1664				hdr->frame_control &=
   1665					cpu_to_le16(~IEEE80211_FCTL_MOREDATA);
   1666
   1667			if (ieee80211_is_data_qos(hdr->frame_control) ||
   1668			    ieee80211_is_qos_nullfunc(hdr->frame_control))
   1669				qoshdr = ieee80211_get_qos_ctl(hdr);
   1670
   1671			tids |= BIT(skb->priority);
   1672
   1673			__skb_queue_tail(&pending, skb);
   1674
   1675			/* end service period after last frame or add one */
   1676			if (!skb_queue_empty(&frames))
   1677				continue;
   1678
   1679			if (reason != IEEE80211_FRAME_RELEASE_UAPSD) {
   1680				/* for PS-Poll, there's only one frame */
   1681				info->flags |= IEEE80211_TX_STATUS_EOSP |
   1682					       IEEE80211_TX_CTL_REQ_TX_STATUS;
   1683				break;
   1684			}
   1685
   1686			/* For uAPSD, things are a bit more complicated. If the
   1687			 * last frame has a QoS header (i.e. is a QoS-data or
   1688			 * QoS-nulldata frame) then just set the EOSP bit there
   1689			 * and be done.
   1690			 * If the frame doesn't have a QoS header (which means
   1691			 * it should be a bufferable MMPDU) then we can't set
   1692			 * the EOSP bit in the QoS header; add a QoS-nulldata
   1693			 * frame to the list to send it after the MMPDU.
   1694			 *
   1695			 * Note that this code is only in the mac80211-release
   1696			 * code path, we assume that the driver will not buffer
   1697			 * anything but QoS-data frames, or if it does, will
   1698			 * create the QoS-nulldata frame by itself if needed.
   1699			 *
   1700			 * Cf. 802.11-2012 10.2.1.10 (c).
   1701			 */
   1702			if (qoshdr) {
   1703				*qoshdr |= IEEE80211_QOS_CTL_EOSP;
   1704
   1705				info->flags |= IEEE80211_TX_STATUS_EOSP |
   1706					       IEEE80211_TX_CTL_REQ_TX_STATUS;
   1707			} else {
   1708				/* The standard isn't completely clear on this
   1709				 * as it says the more-data bit should be set
   1710				 * if there are more BUs. The QoS-Null frame
   1711				 * we're about to send isn't buffered yet, we
   1712				 * only create it below, but let's pretend it
   1713				 * was buffered just in case some clients only
   1714				 * expect more-data=0 when eosp=1.
   1715				 */
   1716				hdr->frame_control |=
   1717					cpu_to_le16(IEEE80211_FCTL_MOREDATA);
   1718				need_null = true;
   1719				num++;
   1720			}
   1721			break;
   1722		}
   1723
   1724		drv_allow_buffered_frames(local, sta, tids, num,
   1725					  reason, more_data);
   1726
   1727		ieee80211_add_pending_skbs(local, &pending);
   1728
   1729		if (need_null)
   1730			ieee80211_send_null_response(
   1731				sta, find_highest_prio_tid(tids),
   1732				reason, false, false);
   1733
   1734		sta_info_recalc_tim(sta);
   1735	} else {
   1736		int tid;
   1737
   1738		/*
   1739		 * We need to release a frame that is buffered somewhere in the
   1740		 * driver ... it'll have to handle that.
   1741		 * Note that the driver also has to check the number of frames
   1742		 * on the TIDs we're releasing from - if there are more than
   1743		 * n_frames it has to set the more-data bit (if we didn't ask
   1744		 * it to set it anyway due to other buffered frames); if there
   1745		 * are fewer than n_frames it has to make sure to adjust that
   1746		 * to allow the service period to end properly.
   1747		 */
   1748		drv_release_buffered_frames(local, sta, driver_release_tids,
   1749					    n_frames, reason, more_data);
   1750
   1751		/*
   1752		 * Note that we don't recalculate the TIM bit here as it would
   1753		 * most likely have no effect at all unless the driver told us
   1754		 * that the TID(s) became empty before returning here from the
   1755		 * release function.
   1756		 * Either way, however, when the driver tells us that the TID(s)
   1757		 * became empty or we find that a txq became empty, we'll do the
   1758		 * TIM recalculation.
   1759		 */
   1760
   1761		if (!sta->sta.txq[0])
   1762			return;
   1763
   1764		for (tid = 0; tid < ARRAY_SIZE(sta->sta.txq); tid++) {
   1765			if (!sta->sta.txq[tid] ||
   1766			    !(driver_release_tids & BIT(tid)) ||
   1767			    txq_has_queue(sta->sta.txq[tid]))
   1768				continue;
   1769
   1770			sta_info_recalc_tim(sta);
   1771			break;
   1772		}
   1773	}
   1774}
   1775
   1776void ieee80211_sta_ps_deliver_poll_response(struct sta_info *sta)
   1777{
   1778	u8 ignore_for_response = sta->sta.uapsd_queues;
   1779
   1780	/*
   1781	 * If all ACs are delivery-enabled then we should reply
   1782	 * from any of them, if only some are enabled we reply
   1783	 * only from the non-enabled ones.
   1784	 */
   1785	if (ignore_for_response == BIT(IEEE80211_NUM_ACS) - 1)
   1786		ignore_for_response = 0;
   1787
   1788	ieee80211_sta_ps_deliver_response(sta, 1, ignore_for_response,
   1789					  IEEE80211_FRAME_RELEASE_PSPOLL);
   1790}
   1791
   1792void ieee80211_sta_ps_deliver_uapsd(struct sta_info *sta)
   1793{
   1794	int n_frames = sta->sta.max_sp;
   1795	u8 delivery_enabled = sta->sta.uapsd_queues;
   1796
   1797	/*
   1798	 * If we ever grow support for TSPEC this might happen if
   1799	 * the TSPEC update from hostapd comes in between a trigger
   1800	 * frame setting WLAN_STA_UAPSD in the RX path and this
   1801	 * actually getting called.
   1802	 */
   1803	if (!delivery_enabled)
   1804		return;
   1805
   1806	switch (sta->sta.max_sp) {
   1807	case 1:
   1808		n_frames = 2;
   1809		break;
   1810	case 2:
   1811		n_frames = 4;
   1812		break;
   1813	case 3:
   1814		n_frames = 6;
   1815		break;
   1816	case 0:
   1817		/* XXX: what is a good value? */
   1818		n_frames = 128;
   1819		break;
   1820	}
   1821
   1822	ieee80211_sta_ps_deliver_response(sta, n_frames, ~delivery_enabled,
   1823					  IEEE80211_FRAME_RELEASE_UAPSD);
   1824}
   1825
   1826void ieee80211_sta_block_awake(struct ieee80211_hw *hw,
   1827			       struct ieee80211_sta *pubsta, bool block)
   1828{
   1829	struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
   1830
   1831	trace_api_sta_block_awake(sta->local, pubsta, block);
   1832
   1833	if (block) {
   1834		set_sta_flag(sta, WLAN_STA_PS_DRIVER);
   1835		ieee80211_clear_fast_xmit(sta);
   1836		return;
   1837	}
   1838
   1839	if (!test_sta_flag(sta, WLAN_STA_PS_DRIVER))
   1840		return;
   1841
   1842	if (!test_sta_flag(sta, WLAN_STA_PS_STA)) {
   1843		set_sta_flag(sta, WLAN_STA_PS_DELIVER);
   1844		clear_sta_flag(sta, WLAN_STA_PS_DRIVER);
   1845		ieee80211_queue_work(hw, &sta->drv_deliver_wk);
   1846	} else if (test_sta_flag(sta, WLAN_STA_PSPOLL) ||
   1847		   test_sta_flag(sta, WLAN_STA_UAPSD)) {
   1848		/* must be asleep in this case */
   1849		clear_sta_flag(sta, WLAN_STA_PS_DRIVER);
   1850		ieee80211_queue_work(hw, &sta->drv_deliver_wk);
   1851	} else {
   1852		clear_sta_flag(sta, WLAN_STA_PS_DRIVER);
   1853		ieee80211_check_fast_xmit(sta);
   1854	}
   1855}
   1856EXPORT_SYMBOL(ieee80211_sta_block_awake);
   1857
   1858void ieee80211_sta_eosp(struct ieee80211_sta *pubsta)
   1859{
   1860	struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
   1861	struct ieee80211_local *local = sta->local;
   1862
   1863	trace_api_eosp(local, pubsta);
   1864
   1865	clear_sta_flag(sta, WLAN_STA_SP);
   1866}
   1867EXPORT_SYMBOL(ieee80211_sta_eosp);
   1868
   1869void ieee80211_send_eosp_nullfunc(struct ieee80211_sta *pubsta, int tid)
   1870{
   1871	struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
   1872	enum ieee80211_frame_release_type reason;
   1873	bool more_data;
   1874
   1875	trace_api_send_eosp_nullfunc(sta->local, pubsta, tid);
   1876
   1877	reason = IEEE80211_FRAME_RELEASE_UAPSD;
   1878	more_data = ieee80211_sta_ps_more_data(sta, ~sta->sta.uapsd_queues,
   1879					       reason, 0);
   1880
   1881	ieee80211_send_null_response(sta, tid, reason, false, more_data);
   1882}
   1883EXPORT_SYMBOL(ieee80211_send_eosp_nullfunc);
   1884
   1885void ieee80211_sta_set_buffered(struct ieee80211_sta *pubsta,
   1886				u8 tid, bool buffered)
   1887{
   1888	struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
   1889
   1890	if (WARN_ON(tid >= IEEE80211_NUM_TIDS))
   1891		return;
   1892
   1893	trace_api_sta_set_buffered(sta->local, pubsta, tid, buffered);
   1894
   1895	if (buffered)
   1896		set_bit(tid, &sta->driver_buffered_tids);
   1897	else
   1898		clear_bit(tid, &sta->driver_buffered_tids);
   1899
   1900	sta_info_recalc_tim(sta);
   1901}
   1902EXPORT_SYMBOL(ieee80211_sta_set_buffered);
   1903
   1904void ieee80211_register_airtime(struct ieee80211_txq *txq,
   1905				u32 tx_airtime, u32 rx_airtime)
   1906{
   1907	struct ieee80211_sub_if_data *sdata = vif_to_sdata(txq->vif);
   1908	struct ieee80211_local *local = sdata->local;
   1909	u64 weight_sum, weight_sum_reciprocal;
   1910	struct airtime_sched_info *air_sched;
   1911	struct airtime_info *air_info;
   1912	u32 airtime = 0;
   1913
   1914	air_sched = &local->airtime[txq->ac];
   1915	air_info = to_airtime_info(txq);
   1916
   1917	if (local->airtime_flags & AIRTIME_USE_TX)
   1918		airtime += tx_airtime;
   1919	if (local->airtime_flags & AIRTIME_USE_RX)
   1920		airtime += rx_airtime;
   1921
   1922	/* Weights scale so the unit weight is 256 */
   1923	airtime <<= 8;
   1924
   1925	spin_lock_bh(&air_sched->lock);
   1926
   1927	air_info->tx_airtime += tx_airtime;
   1928	air_info->rx_airtime += rx_airtime;
   1929
   1930	if (air_sched->weight_sum) {
   1931		weight_sum = air_sched->weight_sum;
   1932		weight_sum_reciprocal = air_sched->weight_sum_reciprocal;
   1933	} else {
   1934		weight_sum = air_info->weight;
   1935		weight_sum_reciprocal = air_info->weight_reciprocal;
   1936	}
   1937
   1938	/* Round the calculation of global vt */
   1939	air_sched->v_t += (u64)((airtime + (weight_sum >> 1)) *
   1940				weight_sum_reciprocal) >> IEEE80211_RECIPROCAL_SHIFT_64;
   1941	air_info->v_t += (u32)((airtime + (air_info->weight >> 1)) *
   1942			       air_info->weight_reciprocal) >> IEEE80211_RECIPROCAL_SHIFT_32;
   1943	ieee80211_resort_txq(&local->hw, txq);
   1944
   1945	spin_unlock_bh(&air_sched->lock);
   1946}
   1947
   1948void ieee80211_sta_register_airtime(struct ieee80211_sta *pubsta, u8 tid,
   1949				    u32 tx_airtime, u32 rx_airtime)
   1950{
   1951	struct ieee80211_txq *txq = pubsta->txq[tid];
   1952
   1953	if (!txq)
   1954		return;
   1955
   1956	ieee80211_register_airtime(txq, tx_airtime, rx_airtime);
   1957}
   1958EXPORT_SYMBOL(ieee80211_sta_register_airtime);
   1959
   1960void ieee80211_sta_update_pending_airtime(struct ieee80211_local *local,
   1961					  struct sta_info *sta, u8 ac,
   1962					  u16 tx_airtime, bool tx_completed)
   1963{
   1964	int tx_pending;
   1965
   1966	if (!wiphy_ext_feature_isset(local->hw.wiphy, NL80211_EXT_FEATURE_AQL))
   1967		return;
   1968
   1969	if (!tx_completed) {
   1970		if (sta)
   1971			atomic_add(tx_airtime,
   1972				   &sta->airtime[ac].aql_tx_pending);
   1973
   1974		atomic_add(tx_airtime, &local->aql_total_pending_airtime);
   1975		return;
   1976	}
   1977
   1978	if (sta) {
   1979		tx_pending = atomic_sub_return(tx_airtime,
   1980					       &sta->airtime[ac].aql_tx_pending);
   1981		if (tx_pending < 0)
   1982			atomic_cmpxchg(&sta->airtime[ac].aql_tx_pending,
   1983				       tx_pending, 0);
   1984	}
   1985
   1986	tx_pending = atomic_sub_return(tx_airtime,
   1987				       &local->aql_total_pending_airtime);
   1988	if (WARN_ONCE(tx_pending < 0,
   1989		      "Device %s AC %d pending airtime underflow: %u, %u",
   1990		      wiphy_name(local->hw.wiphy), ac, tx_pending,
   1991		      tx_airtime))
   1992		atomic_cmpxchg(&local->aql_total_pending_airtime,
   1993			       tx_pending, 0);
   1994}
   1995
   1996int sta_info_move_state(struct sta_info *sta,
   1997			enum ieee80211_sta_state new_state)
   1998{
   1999	might_sleep();
   2000
   2001	if (sta->sta_state == new_state)
   2002		return 0;
   2003
   2004	/* check allowed transitions first */
   2005
   2006	switch (new_state) {
   2007	case IEEE80211_STA_NONE:
   2008		if (sta->sta_state != IEEE80211_STA_AUTH)
   2009			return -EINVAL;
   2010		break;
   2011	case IEEE80211_STA_AUTH:
   2012		if (sta->sta_state != IEEE80211_STA_NONE &&
   2013		    sta->sta_state != IEEE80211_STA_ASSOC)
   2014			return -EINVAL;
   2015		break;
   2016	case IEEE80211_STA_ASSOC:
   2017		if (sta->sta_state != IEEE80211_STA_AUTH &&
   2018		    sta->sta_state != IEEE80211_STA_AUTHORIZED)
   2019			return -EINVAL;
   2020		break;
   2021	case IEEE80211_STA_AUTHORIZED:
   2022		if (sta->sta_state != IEEE80211_STA_ASSOC)
   2023			return -EINVAL;
   2024		break;
   2025	default:
   2026		WARN(1, "invalid state %d", new_state);
   2027		return -EINVAL;
   2028	}
   2029
   2030	sta_dbg(sta->sdata, "moving STA %pM to state %d\n",
   2031		sta->sta.addr, new_state);
   2032
   2033	/*
   2034	 * notify the driver before the actual changes so it can
   2035	 * fail the transition
   2036	 */
   2037	if (test_sta_flag(sta, WLAN_STA_INSERTED)) {
   2038		int err = drv_sta_state(sta->local, sta->sdata, sta,
   2039					sta->sta_state, new_state);
   2040		if (err)
   2041			return err;
   2042	}
   2043
   2044	/* reflect the change in all state variables */
   2045
   2046	switch (new_state) {
   2047	case IEEE80211_STA_NONE:
   2048		if (sta->sta_state == IEEE80211_STA_AUTH)
   2049			clear_bit(WLAN_STA_AUTH, &sta->_flags);
   2050		break;
   2051	case IEEE80211_STA_AUTH:
   2052		if (sta->sta_state == IEEE80211_STA_NONE) {
   2053			set_bit(WLAN_STA_AUTH, &sta->_flags);
   2054		} else if (sta->sta_state == IEEE80211_STA_ASSOC) {
   2055			clear_bit(WLAN_STA_ASSOC, &sta->_flags);
   2056			ieee80211_recalc_min_chandef(sta->sdata);
   2057			if (!sta->sta.support_p2p_ps)
   2058				ieee80211_recalc_p2p_go_ps_allowed(sta->sdata);
   2059		}
   2060		break;
   2061	case IEEE80211_STA_ASSOC:
   2062		if (sta->sta_state == IEEE80211_STA_AUTH) {
   2063			set_bit(WLAN_STA_ASSOC, &sta->_flags);
   2064			sta->assoc_at = ktime_get_boottime_ns();
   2065			ieee80211_recalc_min_chandef(sta->sdata);
   2066			if (!sta->sta.support_p2p_ps)
   2067				ieee80211_recalc_p2p_go_ps_allowed(sta->sdata);
   2068		} else if (sta->sta_state == IEEE80211_STA_AUTHORIZED) {
   2069			ieee80211_vif_dec_num_mcast(sta->sdata);
   2070			clear_bit(WLAN_STA_AUTHORIZED, &sta->_flags);
   2071			ieee80211_clear_fast_xmit(sta);
   2072			ieee80211_clear_fast_rx(sta);
   2073		}
   2074		break;
   2075	case IEEE80211_STA_AUTHORIZED:
   2076		if (sta->sta_state == IEEE80211_STA_ASSOC) {
   2077			ieee80211_vif_inc_num_mcast(sta->sdata);
   2078			set_bit(WLAN_STA_AUTHORIZED, &sta->_flags);
   2079			ieee80211_check_fast_xmit(sta);
   2080			ieee80211_check_fast_rx(sta);
   2081		}
   2082		if (sta->sdata->vif.type == NL80211_IFTYPE_AP_VLAN ||
   2083		    sta->sdata->vif.type == NL80211_IFTYPE_AP)
   2084			cfg80211_send_layer2_update(sta->sdata->dev,
   2085						    sta->sta.addr);
   2086		break;
   2087	default:
   2088		break;
   2089	}
   2090
   2091	sta->sta_state = new_state;
   2092
   2093	return 0;
   2094}
   2095
   2096u8 sta_info_tx_streams(struct sta_info *sta)
   2097{
   2098	struct ieee80211_sta_ht_cap *ht_cap = &sta->sta.deflink.ht_cap;
   2099	u8 rx_streams;
   2100
   2101	if (!sta->sta.deflink.ht_cap.ht_supported)
   2102		return 1;
   2103
   2104	if (sta->sta.deflink.vht_cap.vht_supported) {
   2105		int i;
   2106		u16 tx_mcs_map =
   2107			le16_to_cpu(sta->sta.deflink.vht_cap.vht_mcs.tx_mcs_map);
   2108
   2109		for (i = 7; i >= 0; i--)
   2110			if ((tx_mcs_map & (0x3 << (i * 2))) !=
   2111			    IEEE80211_VHT_MCS_NOT_SUPPORTED)
   2112				return i + 1;
   2113	}
   2114
   2115	if (ht_cap->mcs.rx_mask[3])
   2116		rx_streams = 4;
   2117	else if (ht_cap->mcs.rx_mask[2])
   2118		rx_streams = 3;
   2119	else if (ht_cap->mcs.rx_mask[1])
   2120		rx_streams = 2;
   2121	else
   2122		rx_streams = 1;
   2123
   2124	if (!(ht_cap->mcs.tx_params & IEEE80211_HT_MCS_TX_RX_DIFF))
   2125		return rx_streams;
   2126
   2127	return ((ht_cap->mcs.tx_params & IEEE80211_HT_MCS_TX_MAX_STREAMS_MASK)
   2128			>> IEEE80211_HT_MCS_TX_MAX_STREAMS_SHIFT) + 1;
   2129}
   2130
   2131static struct ieee80211_sta_rx_stats *
   2132sta_get_last_rx_stats(struct sta_info *sta)
   2133{
   2134	struct ieee80211_sta_rx_stats *stats = &sta->deflink.rx_stats;
   2135	int cpu;
   2136
   2137	if (!sta->deflink.pcpu_rx_stats)
   2138		return stats;
   2139
   2140	for_each_possible_cpu(cpu) {
   2141		struct ieee80211_sta_rx_stats *cpustats;
   2142
   2143		cpustats = per_cpu_ptr(sta->deflink.pcpu_rx_stats, cpu);
   2144
   2145		if (time_after(cpustats->last_rx, stats->last_rx))
   2146			stats = cpustats;
   2147	}
   2148
   2149	return stats;
   2150}
   2151
   2152static void sta_stats_decode_rate(struct ieee80211_local *local, u32 rate,
   2153				  struct rate_info *rinfo)
   2154{
   2155	rinfo->bw = STA_STATS_GET(BW, rate);
   2156
   2157	switch (STA_STATS_GET(TYPE, rate)) {
   2158	case STA_STATS_RATE_TYPE_VHT:
   2159		rinfo->flags = RATE_INFO_FLAGS_VHT_MCS;
   2160		rinfo->mcs = STA_STATS_GET(VHT_MCS, rate);
   2161		rinfo->nss = STA_STATS_GET(VHT_NSS, rate);
   2162		if (STA_STATS_GET(SGI, rate))
   2163			rinfo->flags |= RATE_INFO_FLAGS_SHORT_GI;
   2164		break;
   2165	case STA_STATS_RATE_TYPE_HT:
   2166		rinfo->flags = RATE_INFO_FLAGS_MCS;
   2167		rinfo->mcs = STA_STATS_GET(HT_MCS, rate);
   2168		if (STA_STATS_GET(SGI, rate))
   2169			rinfo->flags |= RATE_INFO_FLAGS_SHORT_GI;
   2170		break;
   2171	case STA_STATS_RATE_TYPE_LEGACY: {
   2172		struct ieee80211_supported_band *sband;
   2173		u16 brate;
   2174		unsigned int shift;
   2175		int band = STA_STATS_GET(LEGACY_BAND, rate);
   2176		int rate_idx = STA_STATS_GET(LEGACY_IDX, rate);
   2177
   2178		sband = local->hw.wiphy->bands[band];
   2179
   2180		if (WARN_ON_ONCE(!sband->bitrates))
   2181			break;
   2182
   2183		brate = sband->bitrates[rate_idx].bitrate;
   2184		if (rinfo->bw == RATE_INFO_BW_5)
   2185			shift = 2;
   2186		else if (rinfo->bw == RATE_INFO_BW_10)
   2187			shift = 1;
   2188		else
   2189			shift = 0;
   2190		rinfo->legacy = DIV_ROUND_UP(brate, 1 << shift);
   2191		break;
   2192		}
   2193	case STA_STATS_RATE_TYPE_HE:
   2194		rinfo->flags = RATE_INFO_FLAGS_HE_MCS;
   2195		rinfo->mcs = STA_STATS_GET(HE_MCS, rate);
   2196		rinfo->nss = STA_STATS_GET(HE_NSS, rate);
   2197		rinfo->he_gi = STA_STATS_GET(HE_GI, rate);
   2198		rinfo->he_ru_alloc = STA_STATS_GET(HE_RU, rate);
   2199		rinfo->he_dcm = STA_STATS_GET(HE_DCM, rate);
   2200		break;
   2201	}
   2202}
   2203
   2204static int sta_set_rate_info_rx(struct sta_info *sta, struct rate_info *rinfo)
   2205{
   2206	u16 rate = READ_ONCE(sta_get_last_rx_stats(sta)->last_rate);
   2207
   2208	if (rate == STA_STATS_RATE_INVALID)
   2209		return -EINVAL;
   2210
   2211	sta_stats_decode_rate(sta->local, rate, rinfo);
   2212	return 0;
   2213}
   2214
   2215static inline u64 sta_get_tidstats_msdu(struct ieee80211_sta_rx_stats *rxstats,
   2216					int tid)
   2217{
   2218	unsigned int start;
   2219	u64 value;
   2220
   2221	do {
   2222		start = u64_stats_fetch_begin(&rxstats->syncp);
   2223		value = rxstats->msdu[tid];
   2224	} while (u64_stats_fetch_retry(&rxstats->syncp, start));
   2225
   2226	return value;
   2227}
   2228
   2229static void sta_set_tidstats(struct sta_info *sta,
   2230			     struct cfg80211_tid_stats *tidstats,
   2231			     int tid)
   2232{
   2233	struct ieee80211_local *local = sta->local;
   2234	int cpu;
   2235
   2236	if (!(tidstats->filled & BIT(NL80211_TID_STATS_RX_MSDU))) {
   2237		tidstats->rx_msdu += sta_get_tidstats_msdu(&sta->deflink.rx_stats,
   2238							   tid);
   2239
   2240		if (sta->deflink.pcpu_rx_stats) {
   2241			for_each_possible_cpu(cpu) {
   2242				struct ieee80211_sta_rx_stats *cpurxs;
   2243
   2244				cpurxs = per_cpu_ptr(sta->deflink.pcpu_rx_stats,
   2245						     cpu);
   2246				tidstats->rx_msdu +=
   2247					sta_get_tidstats_msdu(cpurxs, tid);
   2248			}
   2249		}
   2250
   2251		tidstats->filled |= BIT(NL80211_TID_STATS_RX_MSDU);
   2252	}
   2253
   2254	if (!(tidstats->filled & BIT(NL80211_TID_STATS_TX_MSDU))) {
   2255		tidstats->filled |= BIT(NL80211_TID_STATS_TX_MSDU);
   2256		tidstats->tx_msdu = sta->deflink.tx_stats.msdu[tid];
   2257	}
   2258
   2259	if (!(tidstats->filled & BIT(NL80211_TID_STATS_TX_MSDU_RETRIES)) &&
   2260	    ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS)) {
   2261		tidstats->filled |= BIT(NL80211_TID_STATS_TX_MSDU_RETRIES);
   2262		tidstats->tx_msdu_retries = sta->deflink.status_stats.msdu_retries[tid];
   2263	}
   2264
   2265	if (!(tidstats->filled & BIT(NL80211_TID_STATS_TX_MSDU_FAILED)) &&
   2266	    ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS)) {
   2267		tidstats->filled |= BIT(NL80211_TID_STATS_TX_MSDU_FAILED);
   2268		tidstats->tx_msdu_failed = sta->deflink.status_stats.msdu_failed[tid];
   2269	}
   2270
   2271	if (local->ops->wake_tx_queue && tid < IEEE80211_NUM_TIDS) {
   2272		spin_lock_bh(&local->fq.lock);
   2273		rcu_read_lock();
   2274
   2275		tidstats->filled |= BIT(NL80211_TID_STATS_TXQ_STATS);
   2276		ieee80211_fill_txq_stats(&tidstats->txq_stats,
   2277					 to_txq_info(sta->sta.txq[tid]));
   2278
   2279		rcu_read_unlock();
   2280		spin_unlock_bh(&local->fq.lock);
   2281	}
   2282}
   2283
   2284static inline u64 sta_get_stats_bytes(struct ieee80211_sta_rx_stats *rxstats)
   2285{
   2286	unsigned int start;
   2287	u64 value;
   2288
   2289	do {
   2290		start = u64_stats_fetch_begin(&rxstats->syncp);
   2291		value = rxstats->bytes;
   2292	} while (u64_stats_fetch_retry(&rxstats->syncp, start));
   2293
   2294	return value;
   2295}
   2296
   2297void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo,
   2298		   bool tidstats)
   2299{
   2300	struct ieee80211_sub_if_data *sdata = sta->sdata;
   2301	struct ieee80211_local *local = sdata->local;
   2302	u32 thr = 0;
   2303	int i, ac, cpu;
   2304	struct ieee80211_sta_rx_stats *last_rxstats;
   2305
   2306	last_rxstats = sta_get_last_rx_stats(sta);
   2307
   2308	sinfo->generation = sdata->local->sta_generation;
   2309
   2310	/* do before driver, so beacon filtering drivers have a
   2311	 * chance to e.g. just add the number of filtered beacons
   2312	 * (or just modify the value entirely, of course)
   2313	 */
   2314	if (sdata->vif.type == NL80211_IFTYPE_STATION)
   2315		sinfo->rx_beacon = sdata->u.mgd.count_beacon_signal;
   2316
   2317	drv_sta_statistics(local, sdata, &sta->sta, sinfo);
   2318	sinfo->filled |= BIT_ULL(NL80211_STA_INFO_INACTIVE_TIME) |
   2319			 BIT_ULL(NL80211_STA_INFO_STA_FLAGS) |
   2320			 BIT_ULL(NL80211_STA_INFO_BSS_PARAM) |
   2321			 BIT_ULL(NL80211_STA_INFO_CONNECTED_TIME) |
   2322			 BIT_ULL(NL80211_STA_INFO_ASSOC_AT_BOOTTIME) |
   2323			 BIT_ULL(NL80211_STA_INFO_RX_DROP_MISC);
   2324
   2325	if (sdata->vif.type == NL80211_IFTYPE_STATION) {
   2326		sinfo->beacon_loss_count = sdata->u.mgd.beacon_loss_count;
   2327		sinfo->filled |= BIT_ULL(NL80211_STA_INFO_BEACON_LOSS);
   2328	}
   2329
   2330	sinfo->connected_time = ktime_get_seconds() - sta->last_connected;
   2331	sinfo->assoc_at = sta->assoc_at;
   2332	sinfo->inactive_time =
   2333		jiffies_to_msecs(jiffies - ieee80211_sta_last_active(sta));
   2334
   2335	if (!(sinfo->filled & (BIT_ULL(NL80211_STA_INFO_TX_BYTES64) |
   2336			       BIT_ULL(NL80211_STA_INFO_TX_BYTES)))) {
   2337		sinfo->tx_bytes = 0;
   2338		for (ac = 0; ac < IEEE80211_NUM_ACS; ac++)
   2339			sinfo->tx_bytes += sta->deflink.tx_stats.bytes[ac];
   2340		sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_BYTES64);
   2341	}
   2342
   2343	if (!(sinfo->filled & BIT_ULL(NL80211_STA_INFO_TX_PACKETS))) {
   2344		sinfo->tx_packets = 0;
   2345		for (ac = 0; ac < IEEE80211_NUM_ACS; ac++)
   2346			sinfo->tx_packets += sta->deflink.tx_stats.packets[ac];
   2347		sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_PACKETS);
   2348	}
   2349
   2350	if (!(sinfo->filled & (BIT_ULL(NL80211_STA_INFO_RX_BYTES64) |
   2351			       BIT_ULL(NL80211_STA_INFO_RX_BYTES)))) {
   2352		sinfo->rx_bytes += sta_get_stats_bytes(&sta->deflink.rx_stats);
   2353
   2354		if (sta->deflink.pcpu_rx_stats) {
   2355			for_each_possible_cpu(cpu) {
   2356				struct ieee80211_sta_rx_stats *cpurxs;
   2357
   2358				cpurxs = per_cpu_ptr(sta->deflink.pcpu_rx_stats,
   2359						     cpu);
   2360				sinfo->rx_bytes += sta_get_stats_bytes(cpurxs);
   2361			}
   2362		}
   2363
   2364		sinfo->filled |= BIT_ULL(NL80211_STA_INFO_RX_BYTES64);
   2365	}
   2366
   2367	if (!(sinfo->filled & BIT_ULL(NL80211_STA_INFO_RX_PACKETS))) {
   2368		sinfo->rx_packets = sta->deflink.rx_stats.packets;
   2369		if (sta->deflink.pcpu_rx_stats) {
   2370			for_each_possible_cpu(cpu) {
   2371				struct ieee80211_sta_rx_stats *cpurxs;
   2372
   2373				cpurxs = per_cpu_ptr(sta->deflink.pcpu_rx_stats,
   2374						     cpu);
   2375				sinfo->rx_packets += cpurxs->packets;
   2376			}
   2377		}
   2378		sinfo->filled |= BIT_ULL(NL80211_STA_INFO_RX_PACKETS);
   2379	}
   2380
   2381	if (!(sinfo->filled & BIT_ULL(NL80211_STA_INFO_TX_RETRIES))) {
   2382		sinfo->tx_retries = sta->deflink.status_stats.retry_count;
   2383		sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_RETRIES);
   2384	}
   2385
   2386	if (!(sinfo->filled & BIT_ULL(NL80211_STA_INFO_TX_FAILED))) {
   2387		sinfo->tx_failed = sta->deflink.status_stats.retry_failed;
   2388		sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_FAILED);
   2389	}
   2390
   2391	if (!(sinfo->filled & BIT_ULL(NL80211_STA_INFO_RX_DURATION))) {
   2392		for (ac = 0; ac < IEEE80211_NUM_ACS; ac++)
   2393			sinfo->rx_duration += sta->airtime[ac].rx_airtime;
   2394		sinfo->filled |= BIT_ULL(NL80211_STA_INFO_RX_DURATION);
   2395	}
   2396
   2397	if (!(sinfo->filled & BIT_ULL(NL80211_STA_INFO_TX_DURATION))) {
   2398		for (ac = 0; ac < IEEE80211_NUM_ACS; ac++)
   2399			sinfo->tx_duration += sta->airtime[ac].tx_airtime;
   2400		sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_DURATION);
   2401	}
   2402
   2403	if (!(sinfo->filled & BIT_ULL(NL80211_STA_INFO_AIRTIME_WEIGHT))) {
   2404		sinfo->airtime_weight = sta->airtime[0].weight;
   2405		sinfo->filled |= BIT_ULL(NL80211_STA_INFO_AIRTIME_WEIGHT);
   2406	}
   2407
   2408	sinfo->rx_dropped_misc = sta->deflink.rx_stats.dropped;
   2409	if (sta->deflink.pcpu_rx_stats) {
   2410		for_each_possible_cpu(cpu) {
   2411			struct ieee80211_sta_rx_stats *cpurxs;
   2412
   2413			cpurxs = per_cpu_ptr(sta->deflink.pcpu_rx_stats, cpu);
   2414			sinfo->rx_dropped_misc += cpurxs->dropped;
   2415		}
   2416	}
   2417
   2418	if (sdata->vif.type == NL80211_IFTYPE_STATION &&
   2419	    !(sdata->vif.driver_flags & IEEE80211_VIF_BEACON_FILTER)) {
   2420		sinfo->filled |= BIT_ULL(NL80211_STA_INFO_BEACON_RX) |
   2421				 BIT_ULL(NL80211_STA_INFO_BEACON_SIGNAL_AVG);
   2422		sinfo->rx_beacon_signal_avg = ieee80211_ave_rssi(&sdata->vif);
   2423	}
   2424
   2425	if (ieee80211_hw_check(&sta->local->hw, SIGNAL_DBM) ||
   2426	    ieee80211_hw_check(&sta->local->hw, SIGNAL_UNSPEC)) {
   2427		if (!(sinfo->filled & BIT_ULL(NL80211_STA_INFO_SIGNAL))) {
   2428			sinfo->signal = (s8)last_rxstats->last_signal;
   2429			sinfo->filled |= BIT_ULL(NL80211_STA_INFO_SIGNAL);
   2430		}
   2431
   2432		if (!sta->deflink.pcpu_rx_stats &&
   2433		    !(sinfo->filled & BIT_ULL(NL80211_STA_INFO_SIGNAL_AVG))) {
   2434			sinfo->signal_avg =
   2435				-ewma_signal_read(&sta->deflink.rx_stats_avg.signal);
   2436			sinfo->filled |= BIT_ULL(NL80211_STA_INFO_SIGNAL_AVG);
   2437		}
   2438	}
   2439
   2440	/* for the average - if pcpu_rx_stats isn't set - rxstats must point to
   2441	 * the sta->rx_stats struct, so the check here is fine with and without
   2442	 * pcpu statistics
   2443	 */
   2444	if (last_rxstats->chains &&
   2445	    !(sinfo->filled & (BIT_ULL(NL80211_STA_INFO_CHAIN_SIGNAL) |
   2446			       BIT_ULL(NL80211_STA_INFO_CHAIN_SIGNAL_AVG)))) {
   2447		sinfo->filled |= BIT_ULL(NL80211_STA_INFO_CHAIN_SIGNAL);
   2448		if (!sta->deflink.pcpu_rx_stats)
   2449			sinfo->filled |= BIT_ULL(NL80211_STA_INFO_CHAIN_SIGNAL_AVG);
   2450
   2451		sinfo->chains = last_rxstats->chains;
   2452
   2453		for (i = 0; i < ARRAY_SIZE(sinfo->chain_signal); i++) {
   2454			sinfo->chain_signal[i] =
   2455				last_rxstats->chain_signal_last[i];
   2456			sinfo->chain_signal_avg[i] =
   2457				-ewma_signal_read(&sta->deflink.rx_stats_avg.chain_signal[i]);
   2458		}
   2459	}
   2460
   2461	if (!(sinfo->filled & BIT_ULL(NL80211_STA_INFO_TX_BITRATE))) {
   2462		sta_set_rate_info_tx(sta, &sta->deflink.tx_stats.last_rate,
   2463				     &sinfo->txrate);
   2464		sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_BITRATE);
   2465	}
   2466
   2467	if (!(sinfo->filled & BIT_ULL(NL80211_STA_INFO_RX_BITRATE))) {
   2468		if (sta_set_rate_info_rx(sta, &sinfo->rxrate) == 0)
   2469			sinfo->filled |= BIT_ULL(NL80211_STA_INFO_RX_BITRATE);
   2470	}
   2471
   2472	if (tidstats && !cfg80211_sinfo_alloc_tid_stats(sinfo, GFP_KERNEL)) {
   2473		for (i = 0; i < IEEE80211_NUM_TIDS + 1; i++)
   2474			sta_set_tidstats(sta, &sinfo->pertid[i], i);
   2475	}
   2476
   2477	if (ieee80211_vif_is_mesh(&sdata->vif)) {
   2478#ifdef CONFIG_MAC80211_MESH
   2479		sinfo->filled |= BIT_ULL(NL80211_STA_INFO_LLID) |
   2480				 BIT_ULL(NL80211_STA_INFO_PLID) |
   2481				 BIT_ULL(NL80211_STA_INFO_PLINK_STATE) |
   2482				 BIT_ULL(NL80211_STA_INFO_LOCAL_PM) |
   2483				 BIT_ULL(NL80211_STA_INFO_PEER_PM) |
   2484				 BIT_ULL(NL80211_STA_INFO_NONPEER_PM) |
   2485				 BIT_ULL(NL80211_STA_INFO_CONNECTED_TO_GATE) |
   2486				 BIT_ULL(NL80211_STA_INFO_CONNECTED_TO_AS);
   2487
   2488		sinfo->llid = sta->mesh->llid;
   2489		sinfo->plid = sta->mesh->plid;
   2490		sinfo->plink_state = sta->mesh->plink_state;
   2491		if (test_sta_flag(sta, WLAN_STA_TOFFSET_KNOWN)) {
   2492			sinfo->filled |= BIT_ULL(NL80211_STA_INFO_T_OFFSET);
   2493			sinfo->t_offset = sta->mesh->t_offset;
   2494		}
   2495		sinfo->local_pm = sta->mesh->local_pm;
   2496		sinfo->peer_pm = sta->mesh->peer_pm;
   2497		sinfo->nonpeer_pm = sta->mesh->nonpeer_pm;
   2498		sinfo->connected_to_gate = sta->mesh->connected_to_gate;
   2499		sinfo->connected_to_as = sta->mesh->connected_to_as;
   2500#endif
   2501	}
   2502
   2503	sinfo->bss_param.flags = 0;
   2504	if (sdata->vif.bss_conf.use_cts_prot)
   2505		sinfo->bss_param.flags |= BSS_PARAM_FLAGS_CTS_PROT;
   2506	if (sdata->vif.bss_conf.use_short_preamble)
   2507		sinfo->bss_param.flags |= BSS_PARAM_FLAGS_SHORT_PREAMBLE;
   2508	if (sdata->vif.bss_conf.use_short_slot)
   2509		sinfo->bss_param.flags |= BSS_PARAM_FLAGS_SHORT_SLOT_TIME;
   2510	sinfo->bss_param.dtim_period = sdata->vif.bss_conf.dtim_period;
   2511	sinfo->bss_param.beacon_interval = sdata->vif.bss_conf.beacon_int;
   2512
   2513	sinfo->sta_flags.set = 0;
   2514	sinfo->sta_flags.mask = BIT(NL80211_STA_FLAG_AUTHORIZED) |
   2515				BIT(NL80211_STA_FLAG_SHORT_PREAMBLE) |
   2516				BIT(NL80211_STA_FLAG_WME) |
   2517				BIT(NL80211_STA_FLAG_MFP) |
   2518				BIT(NL80211_STA_FLAG_AUTHENTICATED) |
   2519				BIT(NL80211_STA_FLAG_ASSOCIATED) |
   2520				BIT(NL80211_STA_FLAG_TDLS_PEER);
   2521	if (test_sta_flag(sta, WLAN_STA_AUTHORIZED))
   2522		sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_AUTHORIZED);
   2523	if (test_sta_flag(sta, WLAN_STA_SHORT_PREAMBLE))
   2524		sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_SHORT_PREAMBLE);
   2525	if (sta->sta.wme)
   2526		sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_WME);
   2527	if (test_sta_flag(sta, WLAN_STA_MFP))
   2528		sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_MFP);
   2529	if (test_sta_flag(sta, WLAN_STA_AUTH))
   2530		sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_AUTHENTICATED);
   2531	if (test_sta_flag(sta, WLAN_STA_ASSOC))
   2532		sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_ASSOCIATED);
   2533	if (test_sta_flag(sta, WLAN_STA_TDLS_PEER))
   2534		sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_TDLS_PEER);
   2535
   2536	thr = sta_get_expected_throughput(sta);
   2537
   2538	if (thr != 0) {
   2539		sinfo->filled |= BIT_ULL(NL80211_STA_INFO_EXPECTED_THROUGHPUT);
   2540		sinfo->expected_throughput = thr;
   2541	}
   2542
   2543	if (!(sinfo->filled & BIT_ULL(NL80211_STA_INFO_ACK_SIGNAL)) &&
   2544	    sta->deflink.status_stats.ack_signal_filled) {
   2545		sinfo->ack_signal = sta->deflink.status_stats.last_ack_signal;
   2546		sinfo->filled |= BIT_ULL(NL80211_STA_INFO_ACK_SIGNAL);
   2547	}
   2548
   2549	if (!(sinfo->filled & BIT_ULL(NL80211_STA_INFO_ACK_SIGNAL_AVG)) &&
   2550	    sta->deflink.status_stats.ack_signal_filled) {
   2551		sinfo->avg_ack_signal =
   2552			-(s8)ewma_avg_signal_read(
   2553				&sta->deflink.status_stats.avg_ack_signal);
   2554		sinfo->filled |=
   2555			BIT_ULL(NL80211_STA_INFO_ACK_SIGNAL_AVG);
   2556	}
   2557
   2558	if (ieee80211_vif_is_mesh(&sdata->vif)) {
   2559		sinfo->filled |= BIT_ULL(NL80211_STA_INFO_AIRTIME_LINK_METRIC);
   2560		sinfo->airtime_link_metric =
   2561			airtime_link_metric_get(local, sta);
   2562	}
   2563}
   2564
   2565u32 sta_get_expected_throughput(struct sta_info *sta)
   2566{
   2567	struct ieee80211_sub_if_data *sdata = sta->sdata;
   2568	struct ieee80211_local *local = sdata->local;
   2569	struct rate_control_ref *ref = NULL;
   2570	u32 thr = 0;
   2571
   2572	if (test_sta_flag(sta, WLAN_STA_RATE_CONTROL))
   2573		ref = local->rate_ctrl;
   2574
   2575	/* check if the driver has a SW RC implementation */
   2576	if (ref && ref->ops->get_expected_throughput)
   2577		thr = ref->ops->get_expected_throughput(sta->rate_ctrl_priv);
   2578	else
   2579		thr = drv_get_expected_throughput(local, sta);
   2580
   2581	return thr;
   2582}
   2583
   2584unsigned long ieee80211_sta_last_active(struct sta_info *sta)
   2585{
   2586	struct ieee80211_sta_rx_stats *stats = sta_get_last_rx_stats(sta);
   2587
   2588	if (!sta->deflink.status_stats.last_ack ||
   2589	    time_after(stats->last_rx, sta->deflink.status_stats.last_ack))
   2590		return stats->last_rx;
   2591	return sta->deflink.status_stats.last_ack;
   2592}
   2593
   2594static void sta_update_codel_params(struct sta_info *sta, u32 thr)
   2595{
   2596	if (!sta->sdata->local->ops->wake_tx_queue)
   2597		return;
   2598
   2599	if (thr && thr < STA_SLOW_THRESHOLD * sta->local->num_sta) {
   2600		sta->cparams.target = MS2TIME(50);
   2601		sta->cparams.interval = MS2TIME(300);
   2602		sta->cparams.ecn = false;
   2603	} else {
   2604		sta->cparams.target = MS2TIME(20);
   2605		sta->cparams.interval = MS2TIME(100);
   2606		sta->cparams.ecn = true;
   2607	}
   2608}
   2609
   2610void ieee80211_sta_set_expected_throughput(struct ieee80211_sta *pubsta,
   2611					   u32 thr)
   2612{
   2613	struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
   2614
   2615	sta_update_codel_params(sta, thr);
   2616}