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

status.c (38597B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 * Copyright 2002-2005, Instant802 Networks, Inc.
      4 * Copyright 2005-2006, Devicescape Software, Inc.
      5 * Copyright 2006-2007	Jiri Benc <jbenc@suse.cz>
      6 * Copyright 2008-2010	Johannes Berg <johannes@sipsolutions.net>
      7 * Copyright 2013-2014  Intel Mobile Communications GmbH
      8 * Copyright 2021-2022  Intel Corporation
      9 */
     10
     11#include <linux/export.h>
     12#include <linux/etherdevice.h>
     13#include <net/mac80211.h>
     14#include <asm/unaligned.h>
     15#include "ieee80211_i.h"
     16#include "rate.h"
     17#include "mesh.h"
     18#include "led.h"
     19#include "wme.h"
     20
     21
     22void ieee80211_tx_status_irqsafe(struct ieee80211_hw *hw,
     23				 struct sk_buff *skb)
     24{
     25	struct ieee80211_local *local = hw_to_local(hw);
     26	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
     27	int tmp;
     28
     29	skb->pkt_type = IEEE80211_TX_STATUS_MSG;
     30	skb_queue_tail(info->flags & IEEE80211_TX_CTL_REQ_TX_STATUS ?
     31		       &local->skb_queue : &local->skb_queue_unreliable, skb);
     32	tmp = skb_queue_len(&local->skb_queue) +
     33		skb_queue_len(&local->skb_queue_unreliable);
     34	while (tmp > IEEE80211_IRQSAFE_QUEUE_LIMIT &&
     35	       (skb = skb_dequeue(&local->skb_queue_unreliable))) {
     36		ieee80211_free_txskb(hw, skb);
     37		tmp--;
     38		I802_DEBUG_INC(local->tx_status_drop);
     39	}
     40	tasklet_schedule(&local->tasklet);
     41}
     42EXPORT_SYMBOL(ieee80211_tx_status_irqsafe);
     43
     44static void ieee80211_handle_filtered_frame(struct ieee80211_local *local,
     45					    struct sta_info *sta,
     46					    struct sk_buff *skb)
     47{
     48	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
     49	struct ieee80211_hdr *hdr = (void *)skb->data;
     50	int ac;
     51
     52	if (info->flags & (IEEE80211_TX_CTL_NO_PS_BUFFER |
     53			   IEEE80211_TX_CTL_AMPDU |
     54			   IEEE80211_TX_CTL_HW_80211_ENCAP)) {
     55		ieee80211_free_txskb(&local->hw, skb);
     56		return;
     57	}
     58
     59	/*
     60	 * This skb 'survived' a round-trip through the driver, and
     61	 * hopefully the driver didn't mangle it too badly. However,
     62	 * we can definitely not rely on the control information
     63	 * being correct. Clear it so we don't get junk there, and
     64	 * indicate that it needs new processing, but must not be
     65	 * modified/encrypted again.
     66	 */
     67	memset(&info->control, 0, sizeof(info->control));
     68
     69	info->control.jiffies = jiffies;
     70	info->control.vif = &sta->sdata->vif;
     71	info->control.flags |= IEEE80211_TX_INTCFL_NEED_TXPROCESSING;
     72	info->flags |= IEEE80211_TX_INTFL_RETRANSMISSION;
     73	info->flags &= ~IEEE80211_TX_TEMPORARY_FLAGS;
     74
     75	sta->deflink.status_stats.filtered++;
     76
     77	/*
     78	 * Clear more-data bit on filtered frames, it might be set
     79	 * but later frames might time out so it might have to be
     80	 * clear again ... It's all rather unlikely (this frame
     81	 * should time out first, right?) but let's not confuse
     82	 * peers unnecessarily.
     83	 */
     84	if (hdr->frame_control & cpu_to_le16(IEEE80211_FCTL_MOREDATA))
     85		hdr->frame_control &= ~cpu_to_le16(IEEE80211_FCTL_MOREDATA);
     86
     87	if (ieee80211_is_data_qos(hdr->frame_control)) {
     88		u8 *p = ieee80211_get_qos_ctl(hdr);
     89		int tid = *p & IEEE80211_QOS_CTL_TID_MASK;
     90
     91		/*
     92		 * Clear EOSP if set, this could happen e.g.
     93		 * if an absence period (us being a P2P GO)
     94		 * shortens the SP.
     95		 */
     96		if (*p & IEEE80211_QOS_CTL_EOSP)
     97			*p &= ~IEEE80211_QOS_CTL_EOSP;
     98		ac = ieee80211_ac_from_tid(tid);
     99	} else {
    100		ac = IEEE80211_AC_BE;
    101	}
    102
    103	/*
    104	 * Clear the TX filter mask for this STA when sending the next
    105	 * packet. If the STA went to power save mode, this will happen
    106	 * when it wakes up for the next time.
    107	 */
    108	set_sta_flag(sta, WLAN_STA_CLEAR_PS_FILT);
    109	ieee80211_clear_fast_xmit(sta);
    110
    111	/*
    112	 * This code races in the following way:
    113	 *
    114	 *  (1) STA sends frame indicating it will go to sleep and does so
    115	 *  (2) hardware/firmware adds STA to filter list, passes frame up
    116	 *  (3) hardware/firmware processes TX fifo and suppresses a frame
    117	 *  (4) we get TX status before having processed the frame and
    118	 *	knowing that the STA has gone to sleep.
    119	 *
    120	 * This is actually quite unlikely even when both those events are
    121	 * processed from interrupts coming in quickly after one another or
    122	 * even at the same time because we queue both TX status events and
    123	 * RX frames to be processed by a tasklet and process them in the
    124	 * same order that they were received or TX status last. Hence, there
    125	 * is no race as long as the frame RX is processed before the next TX
    126	 * status, which drivers can ensure, see below.
    127	 *
    128	 * Note that this can only happen if the hardware or firmware can
    129	 * actually add STAs to the filter list, if this is done by the
    130	 * driver in response to set_tim() (which will only reduce the race
    131	 * this whole filtering tries to solve, not completely solve it)
    132	 * this situation cannot happen.
    133	 *
    134	 * To completely solve this race drivers need to make sure that they
    135	 *  (a) don't mix the irq-safe/not irq-safe TX status/RX processing
    136	 *	functions and
    137	 *  (b) always process RX events before TX status events if ordering
    138	 *      can be unknown, for example with different interrupt status
    139	 *	bits.
    140	 *  (c) if PS mode transitions are manual (i.e. the flag
    141	 *      %IEEE80211_HW_AP_LINK_PS is set), always process PS state
    142	 *      changes before calling TX status events if ordering can be
    143	 *	unknown.
    144	 */
    145	if (test_sta_flag(sta, WLAN_STA_PS_STA) &&
    146	    skb_queue_len(&sta->tx_filtered[ac]) < STA_MAX_TX_BUFFER) {
    147		skb_queue_tail(&sta->tx_filtered[ac], skb);
    148		sta_info_recalc_tim(sta);
    149
    150		if (!timer_pending(&local->sta_cleanup))
    151			mod_timer(&local->sta_cleanup,
    152				  round_jiffies(jiffies +
    153						STA_INFO_CLEANUP_INTERVAL));
    154		return;
    155	}
    156
    157	if (!test_sta_flag(sta, WLAN_STA_PS_STA) &&
    158	    !(info->flags & IEEE80211_TX_INTFL_RETRIED)) {
    159		/* Software retry the packet once */
    160		info->flags |= IEEE80211_TX_INTFL_RETRIED;
    161		ieee80211_add_pending_skb(local, skb);
    162		return;
    163	}
    164
    165	ps_dbg_ratelimited(sta->sdata,
    166			   "dropped TX filtered frame, queue_len=%d PS=%d @%lu\n",
    167			   skb_queue_len(&sta->tx_filtered[ac]),
    168			   !!test_sta_flag(sta, WLAN_STA_PS_STA), jiffies);
    169	ieee80211_free_txskb(&local->hw, skb);
    170}
    171
    172static void ieee80211_check_pending_bar(struct sta_info *sta, u8 *addr, u8 tid)
    173{
    174	struct tid_ampdu_tx *tid_tx;
    175
    176	tid_tx = rcu_dereference(sta->ampdu_mlme.tid_tx[tid]);
    177	if (!tid_tx || !tid_tx->bar_pending)
    178		return;
    179
    180	tid_tx->bar_pending = false;
    181	ieee80211_send_bar(&sta->sdata->vif, addr, tid, tid_tx->failed_bar_ssn);
    182}
    183
    184static void ieee80211_frame_acked(struct sta_info *sta, struct sk_buff *skb)
    185{
    186	struct ieee80211_mgmt *mgmt = (void *) skb->data;
    187	struct ieee80211_local *local = sta->local;
    188	struct ieee80211_sub_if_data *sdata = sta->sdata;
    189
    190	if (ieee80211_is_data_qos(mgmt->frame_control)) {
    191		struct ieee80211_hdr *hdr = (void *) skb->data;
    192		u8 *qc = ieee80211_get_qos_ctl(hdr);
    193		u16 tid = qc[0] & 0xf;
    194
    195		ieee80211_check_pending_bar(sta, hdr->addr1, tid);
    196	}
    197
    198	if (ieee80211_is_action(mgmt->frame_control) &&
    199	    !ieee80211_has_protected(mgmt->frame_control) &&
    200	    mgmt->u.action.category == WLAN_CATEGORY_HT &&
    201	    mgmt->u.action.u.ht_smps.action == WLAN_HT_ACTION_SMPS &&
    202	    ieee80211_sdata_running(sdata)) {
    203		enum ieee80211_smps_mode smps_mode;
    204
    205		switch (mgmt->u.action.u.ht_smps.smps_control) {
    206		case WLAN_HT_SMPS_CONTROL_DYNAMIC:
    207			smps_mode = IEEE80211_SMPS_DYNAMIC;
    208			break;
    209		case WLAN_HT_SMPS_CONTROL_STATIC:
    210			smps_mode = IEEE80211_SMPS_STATIC;
    211			break;
    212		case WLAN_HT_SMPS_CONTROL_DISABLED:
    213		default: /* shouldn't happen since we don't send that */
    214			smps_mode = IEEE80211_SMPS_OFF;
    215			break;
    216		}
    217
    218		if (sdata->vif.type == NL80211_IFTYPE_STATION) {
    219			/*
    220			 * This update looks racy, but isn't -- if we come
    221			 * here we've definitely got a station that we're
    222			 * talking to, and on a managed interface that can
    223			 * only be the AP. And the only other place updating
    224			 * this variable in managed mode is before association.
    225			 */
    226			sdata->smps_mode = smps_mode;
    227			ieee80211_queue_work(&local->hw, &sdata->recalc_smps);
    228		} else if (sdata->vif.type == NL80211_IFTYPE_AP ||
    229			   sdata->vif.type == NL80211_IFTYPE_AP_VLAN) {
    230			sta->known_smps_mode = smps_mode;
    231		}
    232	}
    233}
    234
    235static void ieee80211_set_bar_pending(struct sta_info *sta, u8 tid, u16 ssn)
    236{
    237	struct tid_ampdu_tx *tid_tx;
    238
    239	tid_tx = rcu_dereference(sta->ampdu_mlme.tid_tx[tid]);
    240	if (!tid_tx)
    241		return;
    242
    243	tid_tx->failed_bar_ssn = ssn;
    244	tid_tx->bar_pending = true;
    245}
    246
    247static int ieee80211_tx_radiotap_len(struct ieee80211_tx_info *info,
    248				     struct ieee80211_tx_status *status)
    249{
    250	struct ieee80211_rate_status *status_rate = NULL;
    251	int len = sizeof(struct ieee80211_radiotap_header);
    252
    253	if (status && status->n_rates)
    254		status_rate = &status->rates[status->n_rates - 1];
    255
    256	/* IEEE80211_RADIOTAP_RATE rate */
    257	if (status_rate && !(status_rate->rate_idx.flags &
    258						(RATE_INFO_FLAGS_MCS |
    259						 RATE_INFO_FLAGS_DMG |
    260						 RATE_INFO_FLAGS_EDMG |
    261						 RATE_INFO_FLAGS_VHT_MCS |
    262						 RATE_INFO_FLAGS_HE_MCS)))
    263		len += 2;
    264	else if (info->status.rates[0].idx >= 0 &&
    265		 !(info->status.rates[0].flags &
    266		   (IEEE80211_TX_RC_MCS | IEEE80211_TX_RC_VHT_MCS)))
    267		len += 2;
    268
    269	/* IEEE80211_RADIOTAP_TX_FLAGS */
    270	len += 2;
    271
    272	/* IEEE80211_RADIOTAP_DATA_RETRIES */
    273	len += 1;
    274
    275	/* IEEE80211_RADIOTAP_MCS
    276	 * IEEE80211_RADIOTAP_VHT */
    277	if (status_rate) {
    278		if (status_rate->rate_idx.flags & RATE_INFO_FLAGS_MCS)
    279			len += 3;
    280		else if (status_rate->rate_idx.flags & RATE_INFO_FLAGS_VHT_MCS)
    281			len = ALIGN(len, 2) + 12;
    282		else if (status_rate->rate_idx.flags & RATE_INFO_FLAGS_HE_MCS)
    283			len = ALIGN(len, 2) + 12;
    284	} else if (info->status.rates[0].idx >= 0) {
    285		if (info->status.rates[0].flags & IEEE80211_TX_RC_MCS)
    286			len += 3;
    287		else if (info->status.rates[0].flags & IEEE80211_TX_RC_VHT_MCS)
    288			len = ALIGN(len, 2) + 12;
    289	}
    290
    291	return len;
    292}
    293
    294static void
    295ieee80211_add_tx_radiotap_header(struct ieee80211_local *local,
    296				 struct ieee80211_supported_band *sband,
    297				 struct sk_buff *skb, int retry_count,
    298				 int rtap_len, int shift,
    299				 struct ieee80211_tx_status *status)
    300{
    301	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
    302	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
    303	struct ieee80211_radiotap_header *rthdr;
    304	struct ieee80211_rate_status *status_rate = NULL;
    305	unsigned char *pos;
    306	u16 legacy_rate = 0;
    307	u16 txflags;
    308
    309	if (status && status->n_rates)
    310		status_rate = &status->rates[status->n_rates - 1];
    311
    312	rthdr = skb_push(skb, rtap_len);
    313
    314	memset(rthdr, 0, rtap_len);
    315	rthdr->it_len = cpu_to_le16(rtap_len);
    316	rthdr->it_present =
    317		cpu_to_le32(BIT(IEEE80211_RADIOTAP_TX_FLAGS) |
    318			    BIT(IEEE80211_RADIOTAP_DATA_RETRIES));
    319	pos = (unsigned char *)(rthdr + 1);
    320
    321	/*
    322	 * XXX: Once radiotap gets the bitmap reset thing the vendor
    323	 *	extensions proposal contains, we can actually report
    324	 *	the whole set of tries we did.
    325	 */
    326
    327	/* IEEE80211_RADIOTAP_RATE */
    328
    329	if (status_rate) {
    330		if (!(status_rate->rate_idx.flags &
    331						(RATE_INFO_FLAGS_MCS |
    332						 RATE_INFO_FLAGS_DMG |
    333						 RATE_INFO_FLAGS_EDMG |
    334						 RATE_INFO_FLAGS_VHT_MCS |
    335						 RATE_INFO_FLAGS_HE_MCS)))
    336			legacy_rate = status_rate->rate_idx.legacy;
    337	} else if (info->status.rates[0].idx >= 0 &&
    338		 !(info->status.rates[0].flags & (IEEE80211_TX_RC_MCS |
    339						  IEEE80211_TX_RC_VHT_MCS)))
    340		legacy_rate =
    341			sband->bitrates[info->status.rates[0].idx].bitrate;
    342
    343	if (legacy_rate) {
    344		rthdr->it_present |= cpu_to_le32(BIT(IEEE80211_RADIOTAP_RATE));
    345		*pos = DIV_ROUND_UP(legacy_rate, 5 * (1 << shift));
    346		/* padding for tx flags */
    347		pos += 2;
    348	}
    349
    350	/* IEEE80211_RADIOTAP_TX_FLAGS */
    351	txflags = 0;
    352	if (!(info->flags & IEEE80211_TX_STAT_ACK) &&
    353	    !is_multicast_ether_addr(hdr->addr1))
    354		txflags |= IEEE80211_RADIOTAP_F_TX_FAIL;
    355
    356	if (info->status.rates[0].flags & IEEE80211_TX_RC_USE_CTS_PROTECT)
    357		txflags |= IEEE80211_RADIOTAP_F_TX_CTS;
    358	if (info->status.rates[0].flags & IEEE80211_TX_RC_USE_RTS_CTS)
    359		txflags |= IEEE80211_RADIOTAP_F_TX_RTS;
    360
    361	put_unaligned_le16(txflags, pos);
    362	pos += 2;
    363
    364	/* IEEE80211_RADIOTAP_DATA_RETRIES */
    365	/* for now report the total retry_count */
    366	*pos = retry_count;
    367	pos++;
    368
    369	if (status_rate && (status_rate->rate_idx.flags & RATE_INFO_FLAGS_MCS))
    370	{
    371		rthdr->it_present |= cpu_to_le32(BIT(IEEE80211_RADIOTAP_MCS));
    372		pos[0] = IEEE80211_RADIOTAP_MCS_HAVE_MCS |
    373			 IEEE80211_RADIOTAP_MCS_HAVE_GI |
    374			 IEEE80211_RADIOTAP_MCS_HAVE_BW;
    375		if (status_rate->rate_idx.flags & RATE_INFO_FLAGS_SHORT_GI)
    376			pos[1] |= IEEE80211_RADIOTAP_MCS_SGI;
    377		if (status_rate->rate_idx.bw == RATE_INFO_BW_40)
    378			pos[1] |= IEEE80211_RADIOTAP_MCS_BW_40;
    379		pos[2] = status_rate->rate_idx.mcs;
    380		pos += 3;
    381	} else if (status_rate && (status_rate->rate_idx.flags &
    382					RATE_INFO_FLAGS_VHT_MCS))
    383	{
    384		u16 known = local->hw.radiotap_vht_details &
    385			(IEEE80211_RADIOTAP_VHT_KNOWN_GI |
    386			 IEEE80211_RADIOTAP_VHT_KNOWN_BANDWIDTH);
    387
    388		rthdr->it_present |= cpu_to_le32(BIT(IEEE80211_RADIOTAP_VHT));
    389
    390		/* required alignment from rthdr */
    391		pos = (u8 *)rthdr + ALIGN(pos - (u8 *)rthdr, 2);
    392
    393		/* u16 known - IEEE80211_RADIOTAP_VHT_KNOWN_* */
    394		put_unaligned_le16(known, pos);
    395		pos += 2;
    396
    397		/* u8 flags - IEEE80211_RADIOTAP_VHT_FLAG_* */
    398		if (status_rate->rate_idx.flags & RATE_INFO_FLAGS_SHORT_GI)
    399			*pos |= IEEE80211_RADIOTAP_VHT_FLAG_SGI;
    400		pos++;
    401
    402		/* u8 bandwidth */
    403		switch (status_rate->rate_idx.bw) {
    404		case RATE_INFO_BW_160:
    405			*pos = 11;
    406			break;
    407		case RATE_INFO_BW_80:
    408			*pos = 4;
    409			break;
    410		case RATE_INFO_BW_40:
    411			*pos = 1;
    412			break;
    413		default:
    414			*pos = 0;
    415			break;
    416		}
    417		pos++;
    418
    419		/* u8 mcs_nss[4] */
    420		*pos = (status_rate->rate_idx.mcs << 4) |
    421				status_rate->rate_idx.nss;
    422		pos += 4;
    423
    424		/* u8 coding */
    425		pos++;
    426		/* u8 group_id */
    427		pos++;
    428		/* u16 partial_aid */
    429		pos += 2;
    430	} else if (status_rate && (status_rate->rate_idx.flags &
    431					RATE_INFO_FLAGS_HE_MCS))
    432	{
    433		struct ieee80211_radiotap_he *he;
    434
    435		rthdr->it_present |= cpu_to_le32(BIT(IEEE80211_RADIOTAP_HE));
    436
    437		/* required alignment from rthdr */
    438		pos = (u8 *)rthdr + ALIGN(pos - (u8 *)rthdr, 2);
    439		he = (struct ieee80211_radiotap_he *)pos;
    440
    441		he->data1 = cpu_to_le16(IEEE80211_RADIOTAP_HE_DATA1_FORMAT_SU |
    442					IEEE80211_RADIOTAP_HE_DATA1_DATA_MCS_KNOWN |
    443					IEEE80211_RADIOTAP_HE_DATA1_DATA_DCM_KNOWN |
    444					IEEE80211_RADIOTAP_HE_DATA1_BW_RU_ALLOC_KNOWN);
    445
    446		he->data2 = cpu_to_le16(IEEE80211_RADIOTAP_HE_DATA2_GI_KNOWN);
    447
    448#define HE_PREP(f, val) le16_encode_bits(val, IEEE80211_RADIOTAP_HE_##f)
    449
    450		he->data6 |= HE_PREP(DATA6_NSTS, status_rate->rate_idx.nss);
    451
    452#define CHECK_GI(s) \
    453	BUILD_BUG_ON(IEEE80211_RADIOTAP_HE_DATA5_GI_##s != \
    454	(int)NL80211_RATE_INFO_HE_GI_##s)
    455
    456		CHECK_GI(0_8);
    457		CHECK_GI(1_6);
    458		CHECK_GI(3_2);
    459
    460		he->data3 |= HE_PREP(DATA3_DATA_MCS, status_rate->rate_idx.mcs);
    461		he->data3 |= HE_PREP(DATA3_DATA_DCM, status_rate->rate_idx.he_dcm);
    462
    463		he->data5 |= HE_PREP(DATA5_GI, status_rate->rate_idx.he_gi);
    464
    465		switch (status_rate->rate_idx.bw) {
    466		case RATE_INFO_BW_20:
    467			he->data5 |= HE_PREP(DATA5_DATA_BW_RU_ALLOC,
    468					     IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_20MHZ);
    469			break;
    470		case RATE_INFO_BW_40:
    471			he->data5 |= HE_PREP(DATA5_DATA_BW_RU_ALLOC,
    472					     IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_40MHZ);
    473			break;
    474		case RATE_INFO_BW_80:
    475			he->data5 |= HE_PREP(DATA5_DATA_BW_RU_ALLOC,
    476					     IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_80MHZ);
    477			break;
    478		case RATE_INFO_BW_160:
    479			he->data5 |= HE_PREP(DATA5_DATA_BW_RU_ALLOC,
    480					     IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_160MHZ);
    481			break;
    482		case RATE_INFO_BW_HE_RU:
    483#define CHECK_RU_ALLOC(s) \
    484	BUILD_BUG_ON(IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_##s##T != \
    485	NL80211_RATE_INFO_HE_RU_ALLOC_##s + 4)
    486
    487			CHECK_RU_ALLOC(26);
    488			CHECK_RU_ALLOC(52);
    489			CHECK_RU_ALLOC(106);
    490			CHECK_RU_ALLOC(242);
    491			CHECK_RU_ALLOC(484);
    492			CHECK_RU_ALLOC(996);
    493			CHECK_RU_ALLOC(2x996);
    494
    495			he->data5 |= HE_PREP(DATA5_DATA_BW_RU_ALLOC,
    496					     status_rate->rate_idx.he_ru_alloc + 4);
    497			break;
    498		default:
    499			WARN_ONCE(1, "Invalid SU BW %d\n", status_rate->rate_idx.bw);
    500		}
    501
    502		pos += sizeof(struct ieee80211_radiotap_he);
    503	}
    504
    505	if (status_rate || info->status.rates[0].idx < 0)
    506		return;
    507
    508	/* IEEE80211_RADIOTAP_MCS
    509	 * IEEE80211_RADIOTAP_VHT */
    510	if (info->status.rates[0].flags & IEEE80211_TX_RC_MCS) {
    511		rthdr->it_present |= cpu_to_le32(BIT(IEEE80211_RADIOTAP_MCS));
    512		pos[0] = IEEE80211_RADIOTAP_MCS_HAVE_MCS |
    513			 IEEE80211_RADIOTAP_MCS_HAVE_GI |
    514			 IEEE80211_RADIOTAP_MCS_HAVE_BW;
    515		if (info->status.rates[0].flags & IEEE80211_TX_RC_SHORT_GI)
    516			pos[1] |= IEEE80211_RADIOTAP_MCS_SGI;
    517		if (info->status.rates[0].flags & IEEE80211_TX_RC_40_MHZ_WIDTH)
    518			pos[1] |= IEEE80211_RADIOTAP_MCS_BW_40;
    519		if (info->status.rates[0].flags & IEEE80211_TX_RC_GREEN_FIELD)
    520			pos[1] |= IEEE80211_RADIOTAP_MCS_FMT_GF;
    521		pos[2] = info->status.rates[0].idx;
    522		pos += 3;
    523	} else if (info->status.rates[0].flags & IEEE80211_TX_RC_VHT_MCS) {
    524		u16 known = local->hw.radiotap_vht_details &
    525			(IEEE80211_RADIOTAP_VHT_KNOWN_GI |
    526			 IEEE80211_RADIOTAP_VHT_KNOWN_BANDWIDTH);
    527
    528		rthdr->it_present |= cpu_to_le32(BIT(IEEE80211_RADIOTAP_VHT));
    529
    530		/* required alignment from rthdr */
    531		pos = (u8 *)rthdr + ALIGN(pos - (u8 *)rthdr, 2);
    532
    533		/* u16 known - IEEE80211_RADIOTAP_VHT_KNOWN_* */
    534		put_unaligned_le16(known, pos);
    535		pos += 2;
    536
    537		/* u8 flags - IEEE80211_RADIOTAP_VHT_FLAG_* */
    538		if (info->status.rates[0].flags & IEEE80211_TX_RC_SHORT_GI)
    539			*pos |= IEEE80211_RADIOTAP_VHT_FLAG_SGI;
    540		pos++;
    541
    542		/* u8 bandwidth */
    543		if (info->status.rates[0].flags & IEEE80211_TX_RC_40_MHZ_WIDTH)
    544			*pos = 1;
    545		else if (info->status.rates[0].flags & IEEE80211_TX_RC_80_MHZ_WIDTH)
    546			*pos = 4;
    547		else if (info->status.rates[0].flags & IEEE80211_TX_RC_160_MHZ_WIDTH)
    548			*pos = 11;
    549		else /* IEEE80211_TX_RC_{20_MHZ_WIDTH,FIXME:DUP_DATA} */
    550			*pos = 0;
    551		pos++;
    552
    553		/* u8 mcs_nss[4] */
    554		*pos = (ieee80211_rate_get_vht_mcs(&info->status.rates[0]) << 4) |
    555			ieee80211_rate_get_vht_nss(&info->status.rates[0]);
    556		pos += 4;
    557
    558		/* u8 coding */
    559		pos++;
    560		/* u8 group_id */
    561		pos++;
    562		/* u16 partial_aid */
    563		pos += 2;
    564	}
    565}
    566
    567/*
    568 * Handles the tx for TDLS teardown frames.
    569 * If the frame wasn't ACKed by the peer - it will be re-sent through the AP
    570 */
    571static void ieee80211_tdls_td_tx_handle(struct ieee80211_local *local,
    572					struct ieee80211_sub_if_data *sdata,
    573					struct sk_buff *skb, u32 flags)
    574{
    575	struct sk_buff *teardown_skb;
    576	struct sk_buff *orig_teardown_skb;
    577	bool is_teardown = false;
    578
    579	/* Get the teardown data we need and free the lock */
    580	spin_lock(&sdata->u.mgd.teardown_lock);
    581	teardown_skb = sdata->u.mgd.teardown_skb;
    582	orig_teardown_skb = sdata->u.mgd.orig_teardown_skb;
    583	if ((skb == orig_teardown_skb) && teardown_skb) {
    584		sdata->u.mgd.teardown_skb = NULL;
    585		sdata->u.mgd.orig_teardown_skb = NULL;
    586		is_teardown = true;
    587	}
    588	spin_unlock(&sdata->u.mgd.teardown_lock);
    589
    590	if (is_teardown) {
    591		/* This mechanism relies on being able to get ACKs */
    592		WARN_ON(!ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS));
    593
    594		/* Check if peer has ACKed */
    595		if (flags & IEEE80211_TX_STAT_ACK) {
    596			dev_kfree_skb_any(teardown_skb);
    597		} else {
    598			tdls_dbg(sdata,
    599				 "TDLS Resending teardown through AP\n");
    600
    601			ieee80211_subif_start_xmit(teardown_skb, skb->dev);
    602		}
    603	}
    604}
    605
    606static struct ieee80211_sub_if_data *
    607ieee80211_sdata_from_skb(struct ieee80211_local *local, struct sk_buff *skb)
    608{
    609	struct ieee80211_sub_if_data *sdata;
    610
    611	if (skb->dev) {
    612		list_for_each_entry_rcu(sdata, &local->interfaces, list) {
    613			if (!sdata->dev)
    614				continue;
    615
    616			if (skb->dev == sdata->dev)
    617				return sdata;
    618		}
    619
    620		return NULL;
    621	}
    622
    623	return rcu_dereference(local->p2p_sdata);
    624}
    625
    626static void ieee80211_report_ack_skb(struct ieee80211_local *local,
    627				     struct ieee80211_tx_info *info,
    628				     bool acked, bool dropped)
    629{
    630	struct sk_buff *skb;
    631	unsigned long flags;
    632
    633	spin_lock_irqsave(&local->ack_status_lock, flags);
    634	skb = idr_remove(&local->ack_status_frames, info->ack_frame_id);
    635	spin_unlock_irqrestore(&local->ack_status_lock, flags);
    636
    637	if (!skb)
    638		return;
    639
    640	if (info->flags & IEEE80211_TX_INTFL_NL80211_FRAME_TX) {
    641		u64 cookie = IEEE80211_SKB_CB(skb)->ack.cookie;
    642		struct ieee80211_sub_if_data *sdata;
    643		struct ieee80211_hdr *hdr = (void *)skb->data;
    644		bool is_valid_ack_signal =
    645			!!(info->status.flags & IEEE80211_TX_STATUS_ACK_SIGNAL_VALID);
    646
    647		rcu_read_lock();
    648		sdata = ieee80211_sdata_from_skb(local, skb);
    649		if (sdata) {
    650			if (skb->protocol == sdata->control_port_protocol ||
    651			    skb->protocol == cpu_to_be16(ETH_P_PREAUTH))
    652				cfg80211_control_port_tx_status(&sdata->wdev,
    653								cookie,
    654								skb->data,
    655								skb->len,
    656								acked,
    657								GFP_ATOMIC);
    658			else if (ieee80211_is_any_nullfunc(hdr->frame_control))
    659				cfg80211_probe_status(sdata->dev, hdr->addr1,
    660						      cookie, acked,
    661						      info->status.ack_signal,
    662						      is_valid_ack_signal,
    663						      GFP_ATOMIC);
    664			else if (ieee80211_is_mgmt(hdr->frame_control))
    665				cfg80211_mgmt_tx_status(&sdata->wdev, cookie,
    666							skb->data, skb->len,
    667							acked, GFP_ATOMIC);
    668			else
    669				pr_warn("Unknown status report in ack skb\n");
    670
    671		}
    672		rcu_read_unlock();
    673
    674		dev_kfree_skb_any(skb);
    675	} else if (dropped) {
    676		dev_kfree_skb_any(skb);
    677	} else {
    678		/* consumes skb */
    679		skb_complete_wifi_ack(skb, acked);
    680	}
    681}
    682
    683static void ieee80211_report_used_skb(struct ieee80211_local *local,
    684				      struct sk_buff *skb, bool dropped)
    685{
    686	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
    687	u16 tx_time_est = ieee80211_info_get_tx_time_est(info);
    688	struct ieee80211_hdr *hdr = (void *)skb->data;
    689	bool acked = info->flags & IEEE80211_TX_STAT_ACK;
    690
    691	if (dropped)
    692		acked = false;
    693
    694	if (tx_time_est) {
    695		struct sta_info *sta;
    696
    697		rcu_read_lock();
    698
    699		sta = sta_info_get_by_addrs(local, hdr->addr1, hdr->addr2);
    700		ieee80211_sta_update_pending_airtime(local, sta,
    701						     skb_get_queue_mapping(skb),
    702						     tx_time_est,
    703						     true);
    704		rcu_read_unlock();
    705	}
    706
    707	if (info->flags & IEEE80211_TX_INTFL_MLME_CONN_TX) {
    708		struct ieee80211_sub_if_data *sdata;
    709
    710		rcu_read_lock();
    711
    712		sdata = ieee80211_sdata_from_skb(local, skb);
    713
    714		if (!sdata) {
    715			skb->dev = NULL;
    716		} else {
    717			unsigned int hdr_size =
    718				ieee80211_hdrlen(hdr->frame_control);
    719
    720			/* Check to see if packet is a TDLS teardown packet */
    721			if (ieee80211_is_data(hdr->frame_control) &&
    722			    (ieee80211_get_tdls_action(skb, hdr_size) ==
    723			     WLAN_TDLS_TEARDOWN)) {
    724				ieee80211_tdls_td_tx_handle(local, sdata, skb,
    725							    info->flags);
    726			} else if (ieee80211_s1g_is_twt_setup(skb)) {
    727				if (!acked) {
    728					struct sk_buff *qskb;
    729
    730					qskb = skb_clone(skb, GFP_ATOMIC);
    731					if (qskb) {
    732						skb_queue_tail(&sdata->status_queue,
    733							       qskb);
    734						ieee80211_queue_work(&local->hw,
    735								     &sdata->work);
    736					}
    737				}
    738			} else {
    739				ieee80211_mgd_conn_tx_status(sdata,
    740							     hdr->frame_control,
    741							     acked);
    742			}
    743		}
    744
    745		rcu_read_unlock();
    746	} else if (info->ack_frame_id) {
    747		ieee80211_report_ack_skb(local, info, acked, dropped);
    748	}
    749
    750	if (!dropped && skb->destructor) {
    751		skb->wifi_acked_valid = 1;
    752		skb->wifi_acked = acked;
    753	}
    754
    755	ieee80211_led_tx(local);
    756
    757	if (skb_has_frag_list(skb)) {
    758		kfree_skb_list(skb_shinfo(skb)->frag_list);
    759		skb_shinfo(skb)->frag_list = NULL;
    760	}
    761}
    762
    763/*
    764 * Use a static threshold for now, best value to be determined
    765 * by testing ...
    766 * Should it depend on:
    767 *  - on # of retransmissions
    768 *  - current throughput (higher value for higher tpt)?
    769 */
    770#define STA_LOST_PKT_THRESHOLD	50
    771#define STA_LOST_PKT_TIME	HZ		/* 1 sec since last ACK */
    772#define STA_LOST_TDLS_PKT_TIME		(10*HZ) /* 10secs since last ACK */
    773
    774static void ieee80211_lost_packet(struct sta_info *sta,
    775				  struct ieee80211_tx_info *info)
    776{
    777	unsigned long pkt_time = STA_LOST_PKT_TIME;
    778	unsigned int pkt_thr = STA_LOST_PKT_THRESHOLD;
    779
    780	/* If driver relies on its own algorithm for station kickout, skip
    781	 * mac80211 packet loss mechanism.
    782	 */
    783	if (ieee80211_hw_check(&sta->local->hw, REPORTS_LOW_ACK))
    784		return;
    785
    786	/* This packet was aggregated but doesn't carry status info */
    787	if ((info->flags & IEEE80211_TX_CTL_AMPDU) &&
    788	    !(info->flags & IEEE80211_TX_STAT_AMPDU))
    789		return;
    790
    791	sta->deflink.status_stats.lost_packets++;
    792	if (sta->sta.tdls) {
    793		pkt_time = STA_LOST_TDLS_PKT_TIME;
    794		pkt_thr = STA_LOST_PKT_THRESHOLD;
    795	}
    796
    797	/*
    798	 * If we're in TDLS mode, make sure that all STA_LOST_PKT_THRESHOLD
    799	 * of the last packets were lost, and that no ACK was received in the
    800	 * last STA_LOST_TDLS_PKT_TIME ms, before triggering the CQM packet-loss
    801	 * mechanism.
    802	 * For non-TDLS, use STA_LOST_PKT_THRESHOLD and STA_LOST_PKT_TIME
    803	 */
    804	if (sta->deflink.status_stats.lost_packets < pkt_thr ||
    805	    !time_after(jiffies, sta->deflink.status_stats.last_pkt_time + pkt_time))
    806		return;
    807
    808	cfg80211_cqm_pktloss_notify(sta->sdata->dev, sta->sta.addr,
    809				    sta->deflink.status_stats.lost_packets,
    810				    GFP_ATOMIC);
    811	sta->deflink.status_stats.lost_packets = 0;
    812}
    813
    814static int ieee80211_tx_get_rates(struct ieee80211_hw *hw,
    815				  struct ieee80211_tx_info *info,
    816				  int *retry_count)
    817{
    818	int count = -1;
    819	int i;
    820
    821	for (i = 0; i < IEEE80211_TX_MAX_RATES; i++) {
    822		if ((info->flags & IEEE80211_TX_CTL_AMPDU) &&
    823		    !(info->flags & IEEE80211_TX_STAT_AMPDU)) {
    824			/* just the first aggr frame carry status info */
    825			info->status.rates[i].idx = -1;
    826			info->status.rates[i].count = 0;
    827			break;
    828		} else if (info->status.rates[i].idx < 0) {
    829			break;
    830		} else if (i >= hw->max_report_rates) {
    831			/* the HW cannot have attempted that rate */
    832			info->status.rates[i].idx = -1;
    833			info->status.rates[i].count = 0;
    834			break;
    835		}
    836
    837		count += info->status.rates[i].count;
    838	}
    839
    840	if (count < 0)
    841		count = 0;
    842
    843	*retry_count = count;
    844	return i - 1;
    845}
    846
    847void ieee80211_tx_monitor(struct ieee80211_local *local, struct sk_buff *skb,
    848			  struct ieee80211_supported_band *sband,
    849			  int retry_count, int shift, bool send_to_cooked,
    850			  struct ieee80211_tx_status *status)
    851{
    852	struct sk_buff *skb2;
    853	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
    854	struct ieee80211_sub_if_data *sdata;
    855	struct net_device *prev_dev = NULL;
    856	int rtap_len;
    857
    858	/* send frame to monitor interfaces now */
    859	rtap_len = ieee80211_tx_radiotap_len(info, status);
    860	if (WARN_ON_ONCE(skb_headroom(skb) < rtap_len)) {
    861		pr_err("ieee80211_tx_status: headroom too small\n");
    862		dev_kfree_skb(skb);
    863		return;
    864	}
    865	ieee80211_add_tx_radiotap_header(local, sband, skb, retry_count,
    866					 rtap_len, shift, status);
    867
    868	/* XXX: is this sufficient for BPF? */
    869	skb_reset_mac_header(skb);
    870	skb->ip_summed = CHECKSUM_UNNECESSARY;
    871	skb->pkt_type = PACKET_OTHERHOST;
    872	skb->protocol = htons(ETH_P_802_2);
    873	memset(skb->cb, 0, sizeof(skb->cb));
    874
    875	rcu_read_lock();
    876	list_for_each_entry_rcu(sdata, &local->interfaces, list) {
    877		if (sdata->vif.type == NL80211_IFTYPE_MONITOR) {
    878			if (!ieee80211_sdata_running(sdata))
    879				continue;
    880
    881			if ((sdata->u.mntr.flags & MONITOR_FLAG_COOK_FRAMES) &&
    882			    !send_to_cooked)
    883				continue;
    884
    885			if (prev_dev) {
    886				skb2 = skb_clone(skb, GFP_ATOMIC);
    887				if (skb2) {
    888					skb2->dev = prev_dev;
    889					netif_rx(skb2);
    890				}
    891			}
    892
    893			prev_dev = sdata->dev;
    894		}
    895	}
    896	if (prev_dev) {
    897		skb->dev = prev_dev;
    898		netif_rx(skb);
    899		skb = NULL;
    900	}
    901	rcu_read_unlock();
    902	dev_kfree_skb(skb);
    903}
    904
    905static void __ieee80211_tx_status(struct ieee80211_hw *hw,
    906				  struct ieee80211_tx_status *status,
    907				  int rates_idx, int retry_count)
    908{
    909	struct sk_buff *skb = status->skb;
    910	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
    911	struct ieee80211_local *local = hw_to_local(hw);
    912	struct ieee80211_tx_info *info = status->info;
    913	struct sta_info *sta;
    914	__le16 fc;
    915	struct ieee80211_supported_band *sband;
    916	bool send_to_cooked;
    917	bool acked;
    918	bool noack_success;
    919	struct ieee80211_bar *bar;
    920	int shift = 0;
    921	int tid = IEEE80211_NUM_TIDS;
    922
    923	sband = local->hw.wiphy->bands[info->band];
    924	fc = hdr->frame_control;
    925
    926	if (status->sta) {
    927		sta = container_of(status->sta, struct sta_info, sta);
    928		shift = ieee80211_vif_get_shift(&sta->sdata->vif);
    929
    930		if (info->flags & IEEE80211_TX_STATUS_EOSP)
    931			clear_sta_flag(sta, WLAN_STA_SP);
    932
    933		acked = !!(info->flags & IEEE80211_TX_STAT_ACK);
    934		noack_success = !!(info->flags &
    935				   IEEE80211_TX_STAT_NOACK_TRANSMITTED);
    936
    937		/* mesh Peer Service Period support */
    938		if (ieee80211_vif_is_mesh(&sta->sdata->vif) &&
    939		    ieee80211_is_data_qos(fc))
    940			ieee80211_mpsp_trigger_process(
    941				ieee80211_get_qos_ctl(hdr), sta, true, acked);
    942
    943		if (ieee80211_hw_check(&local->hw, HAS_RATE_CONTROL) &&
    944		    (ieee80211_is_data(hdr->frame_control)) &&
    945		    (rates_idx != -1))
    946			sta->deflink.tx_stats.last_rate =
    947				info->status.rates[rates_idx];
    948
    949		if ((info->flags & IEEE80211_TX_STAT_AMPDU_NO_BACK) &&
    950		    (ieee80211_is_data_qos(fc))) {
    951			u16 ssn;
    952			u8 *qc;
    953
    954			qc = ieee80211_get_qos_ctl(hdr);
    955			tid = qc[0] & 0xf;
    956			ssn = ((le16_to_cpu(hdr->seq_ctrl) + 0x10)
    957						& IEEE80211_SCTL_SEQ);
    958			ieee80211_send_bar(&sta->sdata->vif, hdr->addr1,
    959					   tid, ssn);
    960		} else if (ieee80211_is_data_qos(fc)) {
    961			u8 *qc = ieee80211_get_qos_ctl(hdr);
    962
    963			tid = qc[0] & 0xf;
    964		}
    965
    966		if (!acked && ieee80211_is_back_req(fc)) {
    967			u16 control;
    968
    969			/*
    970			 * BAR failed, store the last SSN and retry sending
    971			 * the BAR when the next unicast transmission on the
    972			 * same TID succeeds.
    973			 */
    974			bar = (struct ieee80211_bar *) skb->data;
    975			control = le16_to_cpu(bar->control);
    976			if (!(control & IEEE80211_BAR_CTRL_MULTI_TID)) {
    977				u16 ssn = le16_to_cpu(bar->start_seq_num);
    978
    979				tid = (control &
    980				       IEEE80211_BAR_CTRL_TID_INFO_MASK) >>
    981				      IEEE80211_BAR_CTRL_TID_INFO_SHIFT;
    982
    983				ieee80211_set_bar_pending(sta, tid, ssn);
    984			}
    985		}
    986
    987		if (info->flags & IEEE80211_TX_STAT_TX_FILTERED) {
    988			ieee80211_handle_filtered_frame(local, sta, skb);
    989			return;
    990		} else if (ieee80211_is_data_present(fc)) {
    991			if (!acked && !noack_success)
    992				sta->deflink.status_stats.msdu_failed[tid]++;
    993
    994			sta->deflink.status_stats.msdu_retries[tid] +=
    995				retry_count;
    996		}
    997
    998		if (!(info->flags & IEEE80211_TX_CTL_INJECTED) && acked)
    999			ieee80211_frame_acked(sta, skb);
   1000
   1001	} else if (wiphy_ext_feature_isset(local->hw.wiphy,
   1002					   NL80211_EXT_FEATURE_AIRTIME_FAIRNESS)) {
   1003		struct ieee80211_sub_if_data *sdata;
   1004		struct ieee80211_txq *txq;
   1005		u32 airtime;
   1006
   1007		/* Account airtime to multicast queue */
   1008		sdata = ieee80211_sdata_from_skb(local, skb);
   1009
   1010		if (sdata && (txq = sdata->vif.txq)) {
   1011			airtime = info->status.tx_time ?:
   1012				ieee80211_calc_expected_tx_airtime(hw,
   1013								   &sdata->vif,
   1014								   NULL,
   1015								   skb->len,
   1016								   false);
   1017
   1018			ieee80211_register_airtime(txq, airtime, 0);
   1019		}
   1020	}
   1021
   1022	/* SNMP counters
   1023	 * Fragments are passed to low-level drivers as separate skbs, so these
   1024	 * are actually fragments, not frames. Update frame counters only for
   1025	 * the first fragment of the frame. */
   1026	if ((info->flags & IEEE80211_TX_STAT_ACK) ||
   1027	    (info->flags & IEEE80211_TX_STAT_NOACK_TRANSMITTED)) {
   1028		if (ieee80211_is_first_frag(hdr->seq_ctrl)) {
   1029			I802_DEBUG_INC(local->dot11TransmittedFrameCount);
   1030			if (is_multicast_ether_addr(ieee80211_get_DA(hdr)))
   1031				I802_DEBUG_INC(local->dot11MulticastTransmittedFrameCount);
   1032			if (retry_count > 0)
   1033				I802_DEBUG_INC(local->dot11RetryCount);
   1034			if (retry_count > 1)
   1035				I802_DEBUG_INC(local->dot11MultipleRetryCount);
   1036		}
   1037
   1038		/* This counter shall be incremented for an acknowledged MPDU
   1039		 * with an individual address in the address 1 field or an MPDU
   1040		 * with a multicast address in the address 1 field of type Data
   1041		 * or Management. */
   1042		if (!is_multicast_ether_addr(hdr->addr1) ||
   1043		    ieee80211_is_data(fc) ||
   1044		    ieee80211_is_mgmt(fc))
   1045			I802_DEBUG_INC(local->dot11TransmittedFragmentCount);
   1046	} else {
   1047		if (ieee80211_is_first_frag(hdr->seq_ctrl))
   1048			I802_DEBUG_INC(local->dot11FailedCount);
   1049	}
   1050
   1051	if (ieee80211_is_any_nullfunc(fc) &&
   1052	    ieee80211_has_pm(fc) &&
   1053	    ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS) &&
   1054	    !(info->flags & IEEE80211_TX_CTL_INJECTED) &&
   1055	    local->ps_sdata && !(local->scanning)) {
   1056		if (info->flags & IEEE80211_TX_STAT_ACK)
   1057			local->ps_sdata->u.mgd.flags |=
   1058					IEEE80211_STA_NULLFUNC_ACKED;
   1059		mod_timer(&local->dynamic_ps_timer,
   1060			  jiffies + msecs_to_jiffies(10));
   1061	}
   1062
   1063	ieee80211_report_used_skb(local, skb, false);
   1064
   1065	/* this was a transmitted frame, but now we want to reuse it */
   1066	skb_orphan(skb);
   1067
   1068	/* Need to make a copy before skb->cb gets cleared */
   1069	send_to_cooked = !!(info->flags & IEEE80211_TX_CTL_INJECTED) ||
   1070			 !(ieee80211_is_data(fc));
   1071
   1072	/*
   1073	 * This is a bit racy but we can avoid a lot of work
   1074	 * with this test...
   1075	 */
   1076	if (!local->monitors && (!send_to_cooked || !local->cooked_mntrs)) {
   1077		if (status->free_list)
   1078			list_add_tail(&skb->list, status->free_list);
   1079		else
   1080			dev_kfree_skb(skb);
   1081		return;
   1082	}
   1083
   1084	/* send to monitor interfaces */
   1085	ieee80211_tx_monitor(local, skb, sband, retry_count, shift,
   1086			     send_to_cooked, status);
   1087}
   1088
   1089void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb)
   1090{
   1091	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
   1092	struct ieee80211_local *local = hw_to_local(hw);
   1093	struct ieee80211_tx_status status = {
   1094		.skb = skb,
   1095		.info = IEEE80211_SKB_CB(skb),
   1096	};
   1097	struct sta_info *sta;
   1098
   1099	rcu_read_lock();
   1100
   1101	sta = sta_info_get_by_addrs(local, hdr->addr1, hdr->addr2);
   1102	if (sta)
   1103		status.sta = &sta->sta;
   1104
   1105	ieee80211_tx_status_ext(hw, &status);
   1106	rcu_read_unlock();
   1107}
   1108EXPORT_SYMBOL(ieee80211_tx_status);
   1109
   1110void ieee80211_tx_status_ext(struct ieee80211_hw *hw,
   1111			     struct ieee80211_tx_status *status)
   1112{
   1113	struct ieee80211_local *local = hw_to_local(hw);
   1114	struct ieee80211_tx_info *info = status->info;
   1115	struct ieee80211_sta *pubsta = status->sta;
   1116	struct sk_buff *skb = status->skb;
   1117	struct ieee80211_supported_band *sband;
   1118	struct sta_info *sta = NULL;
   1119	int rates_idx, retry_count;
   1120	bool acked, noack_success, ack_signal_valid;
   1121	u16 tx_time_est;
   1122
   1123	if (pubsta) {
   1124		sta = container_of(pubsta, struct sta_info, sta);
   1125
   1126		if (status->n_rates)
   1127			sta->deflink.tx_stats.last_rate_info =
   1128				status->rates[status->n_rates - 1].rate_idx;
   1129	}
   1130
   1131	if (skb && (tx_time_est =
   1132		    ieee80211_info_get_tx_time_est(IEEE80211_SKB_CB(skb))) > 0) {
   1133		/* Do this here to avoid the expensive lookup of the sta
   1134		 * in ieee80211_report_used_skb().
   1135		 */
   1136		ieee80211_sta_update_pending_airtime(local, sta,
   1137						     skb_get_queue_mapping(skb),
   1138						     tx_time_est,
   1139						     true);
   1140		ieee80211_info_set_tx_time_est(IEEE80211_SKB_CB(skb), 0);
   1141	}
   1142
   1143	if (!status->info)
   1144		goto free;
   1145
   1146	rates_idx = ieee80211_tx_get_rates(hw, info, &retry_count);
   1147
   1148	sband = hw->wiphy->bands[info->band];
   1149
   1150	acked = !!(info->flags & IEEE80211_TX_STAT_ACK);
   1151	noack_success = !!(info->flags & IEEE80211_TX_STAT_NOACK_TRANSMITTED);
   1152	ack_signal_valid =
   1153		!!(info->status.flags & IEEE80211_TX_STATUS_ACK_SIGNAL_VALID);
   1154
   1155	if (pubsta) {
   1156		struct ieee80211_sub_if_data *sdata = sta->sdata;
   1157
   1158		if (!acked && !noack_success)
   1159			sta->deflink.status_stats.retry_failed++;
   1160		sta->deflink.status_stats.retry_count += retry_count;
   1161
   1162		if (ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS)) {
   1163			if (sdata->vif.type == NL80211_IFTYPE_STATION &&
   1164			    skb && !(info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP))
   1165				ieee80211_sta_tx_notify(sdata, (void *) skb->data,
   1166							acked, info->status.tx_time);
   1167
   1168			if (acked) {
   1169				sta->deflink.status_stats.last_ack = jiffies;
   1170
   1171				if (sta->deflink.status_stats.lost_packets)
   1172					sta->deflink.status_stats.lost_packets = 0;
   1173
   1174				/* Track when last packet was ACKed */
   1175				sta->deflink.status_stats.last_pkt_time = jiffies;
   1176
   1177				/* Reset connection monitor */
   1178				if (sdata->vif.type == NL80211_IFTYPE_STATION &&
   1179				    unlikely(sdata->u.mgd.probe_send_count > 0))
   1180					sdata->u.mgd.probe_send_count = 0;
   1181
   1182				if (ack_signal_valid) {
   1183					sta->deflink.status_stats.last_ack_signal =
   1184							 (s8)info->status.ack_signal;
   1185					sta->deflink.status_stats.ack_signal_filled = true;
   1186					ewma_avg_signal_add(&sta->deflink.status_stats.avg_ack_signal,
   1187							    -info->status.ack_signal);
   1188				}
   1189			} else if (test_sta_flag(sta, WLAN_STA_PS_STA)) {
   1190				/*
   1191				 * The STA is in power save mode, so assume
   1192				 * that this TX packet failed because of that.
   1193				 */
   1194				if (skb)
   1195					ieee80211_handle_filtered_frame(local, sta, skb);
   1196				return;
   1197			} else if (noack_success) {
   1198				/* nothing to do here, do not account as lost */
   1199			} else {
   1200				ieee80211_lost_packet(sta, info);
   1201			}
   1202		}
   1203
   1204		rate_control_tx_status(local, sband, status);
   1205		if (ieee80211_vif_is_mesh(&sta->sdata->vif))
   1206			ieee80211s_update_metric(local, sta, status);
   1207	}
   1208
   1209	if (skb && !(info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP))
   1210		return __ieee80211_tx_status(hw, status, rates_idx,
   1211					     retry_count);
   1212
   1213	if (acked || noack_success) {
   1214		I802_DEBUG_INC(local->dot11TransmittedFrameCount);
   1215		if (!pubsta)
   1216			I802_DEBUG_INC(local->dot11MulticastTransmittedFrameCount);
   1217		if (retry_count > 0)
   1218			I802_DEBUG_INC(local->dot11RetryCount);
   1219		if (retry_count > 1)
   1220			I802_DEBUG_INC(local->dot11MultipleRetryCount);
   1221	} else {
   1222		I802_DEBUG_INC(local->dot11FailedCount);
   1223	}
   1224
   1225free:
   1226	if (!skb)
   1227		return;
   1228
   1229	ieee80211_report_used_skb(local, skb, false);
   1230	if (status->free_list)
   1231		list_add_tail(&skb->list, status->free_list);
   1232	else
   1233		dev_kfree_skb(skb);
   1234}
   1235EXPORT_SYMBOL(ieee80211_tx_status_ext);
   1236
   1237void ieee80211_tx_rate_update(struct ieee80211_hw *hw,
   1238			      struct ieee80211_sta *pubsta,
   1239			      struct ieee80211_tx_info *info)
   1240{
   1241	struct ieee80211_local *local = hw_to_local(hw);
   1242	struct ieee80211_supported_band *sband = hw->wiphy->bands[info->band];
   1243	struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
   1244	struct ieee80211_tx_status status = {
   1245		.info = info,
   1246		.sta = pubsta,
   1247	};
   1248
   1249	rate_control_tx_status(local, sband, &status);
   1250
   1251	if (ieee80211_hw_check(&local->hw, HAS_RATE_CONTROL))
   1252		sta->deflink.tx_stats.last_rate = info->status.rates[0];
   1253}
   1254EXPORT_SYMBOL(ieee80211_tx_rate_update);
   1255
   1256void ieee80211_tx_status_8023(struct ieee80211_hw *hw,
   1257			      struct ieee80211_vif *vif,
   1258			      struct sk_buff *skb)
   1259{
   1260	struct ieee80211_sub_if_data *sdata;
   1261	struct ieee80211_tx_status status = {
   1262		.skb = skb,
   1263		.info = IEEE80211_SKB_CB(skb),
   1264	};
   1265	struct sta_info *sta;
   1266
   1267	sdata = vif_to_sdata(vif);
   1268
   1269	rcu_read_lock();
   1270
   1271	if (!ieee80211_lookup_ra_sta(sdata, skb, &sta) && !IS_ERR(sta))
   1272		status.sta = &sta->sta;
   1273
   1274	ieee80211_tx_status_ext(hw, &status);
   1275
   1276	rcu_read_unlock();
   1277}
   1278EXPORT_SYMBOL(ieee80211_tx_status_8023);
   1279
   1280void ieee80211_report_low_ack(struct ieee80211_sta *pubsta, u32 num_packets)
   1281{
   1282	struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
   1283	cfg80211_cqm_pktloss_notify(sta->sdata->dev, sta->sta.addr,
   1284				    num_packets, GFP_ATOMIC);
   1285}
   1286EXPORT_SYMBOL(ieee80211_report_low_ack);
   1287
   1288void ieee80211_free_txskb(struct ieee80211_hw *hw, struct sk_buff *skb)
   1289{
   1290	struct ieee80211_local *local = hw_to_local(hw);
   1291
   1292	ieee80211_report_used_skb(local, skb, true);
   1293	dev_kfree_skb_any(skb);
   1294}
   1295EXPORT_SYMBOL(ieee80211_free_txskb);
   1296
   1297void ieee80211_purge_tx_queue(struct ieee80211_hw *hw,
   1298			      struct sk_buff_head *skbs)
   1299{
   1300	struct sk_buff *skb;
   1301
   1302	while ((skb = __skb_dequeue(skbs)))
   1303		ieee80211_free_txskb(hw, skb);
   1304}