status.c 37.3 KB
Newer Older
1
// SPDX-License-Identifier: GPL-2.0-only
2 3 4 5
/*
 * Copyright 2002-2005, Instant802 Networks, Inc.
 * Copyright 2005-2006, Devicescape Software, Inc.
 * 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 16 17 18
#include "ieee80211_i.h"
#include "rate.h"
#include "mesh.h"
#include "led.h"
19
#include "wme.h"
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35


void ieee80211_tx_status_irqsafe(struct ieee80211_hw *hw,
				 struct sk_buff *skb)
{
	struct ieee80211_local *local = hw_to_local(hw);
	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
	int tmp;

	skb->pkt_type = IEEE80211_TX_STATUS_MSG;
	skb_queue_tail(info->flags & IEEE80211_TX_CTL_REQ_TX_STATUS ?
		       &local->skb_queue : &local->skb_queue_unreliable, skb);
	tmp = skb_queue_len(&local->skb_queue) +
		skb_queue_len(&local->skb_queue_unreliable);
	while (tmp > IEEE80211_IRQSAFE_QUEUE_LIMIT &&
	       (skb = skb_dequeue(&local->skb_queue_unreliable))) {
36
		ieee80211_free_txskb(hw, skb);
37 38 39 40 41 42 43 44 45 46 47 48
		tmp--;
		I802_DEBUG_INC(local->tx_status_drop);
	}
	tasklet_schedule(&local->tasklet);
}
EXPORT_SYMBOL(ieee80211_tx_status_irqsafe);

static void ieee80211_handle_filtered_frame(struct ieee80211_local *local,
					    struct sta_info *sta,
					    struct sk_buff *skb)
{
	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
49 50
	struct ieee80211_hdr *hdr = (void *)skb->data;
	int ac;
51

52
	if (info->flags & (IEEE80211_TX_CTL_NO_PS_BUFFER |
53 54
			   IEEE80211_TX_CTL_AMPDU |
			   IEEE80211_TX_CTL_HW_80211_ENCAP)) {
55 56 57 58
		ieee80211_free_txskb(&local->hw, skb);
		return;
	}

59 60 61
	/*
	 * This skb 'survived' a round-trip through the driver, and
	 * hopefully the driver didn't mangle it too badly. However,
62
	 * we can definitely not rely on the control information
63 64 65
	 * being correct. Clear it so we don't get junk there, and
	 * indicate that it needs new processing, but must not be
	 * modified/encrypted again.
66 67
	 */
	memset(&info->control, 0, sizeof(info->control));
68 69 70

	info->control.jiffies = jiffies;
	info->control.vif = &sta->sdata->vif;
71 72
	info->control.flags |= IEEE80211_TX_INTCFL_NEED_TXPROCESSING;
	info->flags |= IEEE80211_TX_INTFL_RETRANSMISSION;
73
	info->flags &= ~IEEE80211_TX_TEMPORARY_FLAGS;
74

75
	sta->deflink.status_stats.filtered++;
76

77 78 79 80 81 82 83 84 85 86
	/*
	 * Clear more-data bit on filtered frames, it might be set
	 * but later frames might time out so it might have to be
	 * clear again ... It's all rather unlikely (this frame
	 * should time out first, right?) but let's not confuse
	 * peers unnecessarily.
	 */
	if (hdr->frame_control & cpu_to_le16(IEEE80211_FCTL_MOREDATA))
		hdr->frame_control &= ~cpu_to_le16(IEEE80211_FCTL_MOREDATA);

87
	if (ieee80211_is_data_qos(hdr->frame_control)) {
Johannes Berg's avatar
Johannes Berg committed
88 89 90 91 92 93 94 95 96 97
		u8 *p = ieee80211_get_qos_ctl(hdr);
		int tid = *p & IEEE80211_QOS_CTL_TID_MASK;

		/*
		 * Clear EOSP if set, this could happen e.g.
		 * if an absence period (us being a P2P GO)
		 * shortens the SP.
		 */
		if (*p & IEEE80211_QOS_CTL_EOSP)
			*p &= ~IEEE80211_QOS_CTL_EOSP;
98
		ac = ieee80211_ac_from_tid(tid);
99 100 101 102
	} else {
		ac = IEEE80211_AC_BE;
	}

103 104 105 106 107
	/*
	 * Clear the TX filter mask for this STA when sending the next
	 * packet. If the STA went to power save mode, this will happen
	 * when it wakes up for the next time.
	 */
108
	set_sta_flag(sta, WLAN_STA_CLEAR_PS_FILT);
109
	ieee80211_clear_fast_xmit(sta);
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139

	/*
	 * This code races in the following way:
	 *
	 *  (1) STA sends frame indicating it will go to sleep and does so
	 *  (2) hardware/firmware adds STA to filter list, passes frame up
	 *  (3) hardware/firmware processes TX fifo and suppresses a frame
	 *  (4) we get TX status before having processed the frame and
	 *	knowing that the STA has gone to sleep.
	 *
	 * This is actually quite unlikely even when both those events are
	 * processed from interrupts coming in quickly after one another or
	 * even at the same time because we queue both TX status events and
	 * RX frames to be processed by a tasklet and process them in the
	 * same order that they were received or TX status last. Hence, there
	 * is no race as long as the frame RX is processed before the next TX
	 * status, which drivers can ensure, see below.
	 *
	 * Note that this can only happen if the hardware or firmware can
	 * actually add STAs to the filter list, if this is done by the
	 * driver in response to set_tim() (which will only reduce the race
	 * this whole filtering tries to solve, not completely solve it)
	 * this situation cannot happen.
	 *
	 * To completely solve this race drivers need to make sure that they
	 *  (a) don't mix the irq-safe/not irq-safe TX status/RX processing
	 *	functions and
	 *  (b) always process RX events before TX status events if ordering
	 *      can be unknown, for example with different interrupt status
	 *	bits.
140 141 142 143
	 *  (c) if PS mode transitions are manual (i.e. the flag
	 *      %IEEE80211_HW_AP_LINK_PS is set), always process PS state
	 *      changes before calling TX status events if ordering can be
	 *	unknown.
144
	 */
145
	if (test_sta_flag(sta, WLAN_STA_PS_STA) &&
146 147
	    skb_queue_len(&sta->tx_filtered[ac]) < STA_MAX_TX_BUFFER) {
		skb_queue_tail(&sta->tx_filtered[ac], skb);
148
		sta_info_recalc_tim(sta);
149 150 151 152 153

		if (!timer_pending(&local->sta_cleanup))
			mod_timer(&local->sta_cleanup,
				  round_jiffies(jiffies +
						STA_INFO_CLEANUP_INTERVAL));
154 155 156
		return;
	}

157
	if (!test_sta_flag(sta, WLAN_STA_PS_STA) &&
158 159 160 161 162 163 164
	    !(info->flags & IEEE80211_TX_INTFL_RETRIED)) {
		/* Software retry the packet once */
		info->flags |= IEEE80211_TX_INTFL_RETRIED;
		ieee80211_add_pending_skb(local, skb);
		return;
	}

Johannes Berg's avatar
Johannes Berg committed
165 166 167 168
	ps_dbg_ratelimited(sta->sdata,
			   "dropped TX filtered frame, queue_len=%d PS=%d @%lu\n",
			   skb_queue_len(&sta->tx_filtered[ac]),
			   !!test_sta_flag(sta, WLAN_STA_PS_STA), jiffies);
169
	ieee80211_free_txskb(&local->hw, skb);
170 171
}

172 173 174 175 176 177 178 179 180
static void ieee80211_check_pending_bar(struct sta_info *sta, u8 *addr, u8 tid)
{
	struct tid_ampdu_tx *tid_tx;

	tid_tx = rcu_dereference(sta->ampdu_mlme.tid_tx[tid]);
	if (!tid_tx || !tid_tx->bar_pending)
		return;

	tid_tx->bar_pending = false;
181
	ieee80211_send_bar(&sta->sdata->vif, addr, tid, tid_tx->failed_bar_ssn);
182 183
}

184 185 186 187 188
static void ieee80211_frame_acked(struct sta_info *sta, struct sk_buff *skb)
{
	struct ieee80211_mgmt *mgmt = (void *) skb->data;
	struct ieee80211_local *local = sta->local;
	struct ieee80211_sub_if_data *sdata = sta->sdata;
189

190 191 192 193 194 195 196 197
	if (ieee80211_is_data_qos(mgmt->frame_control)) {
		struct ieee80211_hdr *hdr = (void *) skb->data;
		u8 *qc = ieee80211_get_qos_ctl(hdr);
		u16 tid = qc[0] & 0xf;

		ieee80211_check_pending_bar(sta, hdr->addr1, tid);
	}

198
	if (ieee80211_is_action(mgmt->frame_control) &&
199
	    !ieee80211_has_protected(mgmt->frame_control) &&
200
	    mgmt->u.action.category == WLAN_CATEGORY_HT &&
201 202
	    mgmt->u.action.u.ht_smps.action == WLAN_HT_ACTION_SMPS &&
	    ieee80211_sdata_running(sdata)) {
203 204
		enum ieee80211_smps_mode smps_mode;

205 206
		switch (mgmt->u.action.u.ht_smps.smps_control) {
		case WLAN_HT_SMPS_CONTROL_DYNAMIC:
207
			smps_mode = IEEE80211_SMPS_DYNAMIC;
208 209
			break;
		case WLAN_HT_SMPS_CONTROL_STATIC:
210
			smps_mode = IEEE80211_SMPS_STATIC;
211 212 213
			break;
		case WLAN_HT_SMPS_CONTROL_DISABLED:
		default: /* shouldn't happen since we don't send that */
214
			smps_mode = IEEE80211_SMPS_OFF;
215 216 217
			break;
		}

218 219 220 221 222 223 224 225
		if (sdata->vif.type == NL80211_IFTYPE_STATION) {
			/*
			 * This update looks racy, but isn't -- if we come
			 * here we've definitely got a station that we're
			 * talking to, and on a managed interface that can
			 * only be the AP. And the only other place updating
			 * this variable in managed mode is before association.
			 */
226
			sdata->deflink.smps_mode = smps_mode;
227 228
			ieee80211_queue_work(&local->hw, &sdata->recalc_smps);
		}
229 230 231
	}
}

232 233 234 235 236 237 238 239 240 241 242 243
static void ieee80211_set_bar_pending(struct sta_info *sta, u8 tid, u16 ssn)
{
	struct tid_ampdu_tx *tid_tx;

	tid_tx = rcu_dereference(sta->ampdu_mlme.tid_tx[tid]);
	if (!tid_tx)
		return;

	tid_tx->failed_bar_ssn = ssn;
	tid_tx->bar_pending = true;
}

244 245
static int ieee80211_tx_radiotap_len(struct ieee80211_tx_info *info,
				     struct ieee80211_tx_status *status)
246
{
247
	struct ieee80211_rate_status *status_rate = NULL;
248 249
	int len = sizeof(struct ieee80211_radiotap_header);

250 251 252
	if (status && status->n_rates)
		status_rate = &status->rates[status->n_rates - 1];

253
	/* IEEE80211_RADIOTAP_RATE rate */
254 255 256 257 258 259
	if (status_rate && !(status_rate->rate_idx.flags &
						(RATE_INFO_FLAGS_MCS |
						 RATE_INFO_FLAGS_DMG |
						 RATE_INFO_FLAGS_EDMG |
						 RATE_INFO_FLAGS_VHT_MCS |
						 RATE_INFO_FLAGS_HE_MCS)))
260 261 262 263
		len += 2;
	else if (info->status.rates[0].idx >= 0 &&
		 !(info->status.rates[0].flags &
		   (IEEE80211_TX_RC_MCS | IEEE80211_TX_RC_VHT_MCS)))
264 265 266 267 268 269 270 271
		len += 2;

	/* IEEE80211_RADIOTAP_TX_FLAGS */
	len += 2;

	/* IEEE80211_RADIOTAP_DATA_RETRIES */
	len += 1;

272 273
	/* IEEE80211_RADIOTAP_MCS
	 * IEEE80211_RADIOTAP_VHT */
274 275
	if (status_rate) {
		if (status_rate->rate_idx.flags & RATE_INFO_FLAGS_MCS)
276
			len += 3;
277
		else if (status_rate->rate_idx.flags & RATE_INFO_FLAGS_VHT_MCS)
278
			len = ALIGN(len, 2) + 12;
279
		else if (status_rate->rate_idx.flags & RATE_INFO_FLAGS_HE_MCS)
280 281
			len = ALIGN(len, 2) + 12;
	} else if (info->status.rates[0].idx >= 0) {
282 283 284 285 286
		if (info->status.rates[0].flags & IEEE80211_TX_RC_MCS)
			len += 3;
		else if (info->status.rates[0].flags & IEEE80211_TX_RC_VHT_MCS)
			len = ALIGN(len, 2) + 12;
	}
287

288 289 290
	return len;
}

291
static void
292
ieee80211_add_tx_radiotap_header(struct ieee80211_local *local,
293
				 struct sk_buff *skb, int retry_count,
294 295
				 int rtap_len, int shift,
				 struct ieee80211_tx_status *status)
296 297 298 299
{
	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
	struct ieee80211_radiotap_header *rthdr;
300
	struct ieee80211_rate_status *status_rate = NULL;
301
	unsigned char *pos;
302
	u16 legacy_rate = 0;
303
	u16 txflags;
304

305 306 307
	if (status && status->n_rates)
		status_rate = &status->rates[status->n_rates - 1];

308
	rthdr = skb_push(skb, rtap_len);
309 310 311 312

	memset(rthdr, 0, rtap_len);
	rthdr->it_len = cpu_to_le16(rtap_len);
	rthdr->it_present =
313 314
		cpu_to_le32(BIT(IEEE80211_RADIOTAP_TX_FLAGS) |
			    BIT(IEEE80211_RADIOTAP_DATA_RETRIES));
315 316 317 318 319 320 321 322 323
	pos = (unsigned char *)(rthdr + 1);

	/*
	 * XXX: Once radiotap gets the bitmap reset thing the vendor
	 *	extensions proposal contains, we can actually report
	 *	the whole set of tries we did.
	 */

	/* IEEE80211_RADIOTAP_RATE */
324

325 326 327 328 329 330 331 332
	if (status_rate) {
		if (!(status_rate->rate_idx.flags &
						(RATE_INFO_FLAGS_MCS |
						 RATE_INFO_FLAGS_DMG |
						 RATE_INFO_FLAGS_EDMG |
						 RATE_INFO_FLAGS_VHT_MCS |
						 RATE_INFO_FLAGS_HE_MCS)))
			legacy_rate = status_rate->rate_idx.legacy;
333
	} else if (info->status.rates[0].idx >= 0 &&
334
		 !(info->status.rates[0].flags & (IEEE80211_TX_RC_MCS |
335 336 337 338
						  IEEE80211_TX_RC_VHT_MCS))) {
		struct ieee80211_supported_band *sband;

		sband = local->hw.wiphy->bands[info->band];
339 340
		legacy_rate =
			sband->bitrates[info->status.rates[0].idx].bitrate;
341
	}
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 347 348 349 350 351 352 353
		/* padding for tx flags */
		pos += 2;
	}

	/* IEEE80211_RADIOTAP_TX_FLAGS */
	txflags = 0;
	if (!(info->flags & IEEE80211_TX_STAT_ACK) &&
	    !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 362 363 364 365 366 367

	put_unaligned_le16(txflags, pos);
	pos += 2;

	/* IEEE80211_RADIOTAP_DATA_RETRIES */
	/* for now report the total retry_count */
	*pos = retry_count;
	pos++;
368

369 370
	if (status_rate && (status_rate->rate_idx.flags & RATE_INFO_FLAGS_MCS))
	{
371
		rthdr->it_present |= cpu_to_le32(BIT(IEEE80211_RADIOTAP_MCS));
372 373 374
		pos[0] = IEEE80211_RADIOTAP_MCS_HAVE_MCS |
			 IEEE80211_RADIOTAP_MCS_HAVE_GI |
			 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 382 383
	} else if (status_rate && (status_rate->rate_idx.flags &
					RATE_INFO_FLAGS_VHT_MCS))
	{
384 385 386 387
		u16 known = local->hw.radiotap_vht_details &
			(IEEE80211_RADIOTAP_VHT_KNOWN_GI |
			 IEEE80211_RADIOTAP_VHT_KNOWN_BANDWIDTH);

388
		rthdr->it_present |= cpu_to_le32(BIT(IEEE80211_RADIOTAP_VHT));
389 390 391 392 393 394 395 396 397

		/* required alignment from rthdr */
		pos = (u8 *)rthdr + ALIGN(pos - (u8 *)rthdr, 2);

		/* u16 known - IEEE80211_RADIOTAP_VHT_KNOWN_* */
		put_unaligned_le16(known, pos);
		pos += 2;

		/* u8 flags - IEEE80211_RADIOTAP_VHT_FLAG_* */
398
		if (status_rate->rate_idx.flags & RATE_INFO_FLAGS_SHORT_GI)
399 400 401 402
			*pos |= IEEE80211_RADIOTAP_VHT_FLAG_SGI;
		pos++;

		/* u8 bandwidth */
403
		switch (status_rate->rate_idx.bw) {
404 405 406 407
		case RATE_INFO_BW_160:
			*pos = 11;
			break;
		case RATE_INFO_BW_80:
408
			*pos = 4;
409 410 411 412 413 414 415 416
			break;
		case RATE_INFO_BW_40:
			*pos = 1;
			break;
		default:
			*pos = 0;
			break;
		}
417
		pos++;
418 419

		/* u8 mcs_nss[4] */
420 421
		*pos = (status_rate->rate_idx.mcs << 4) |
				status_rate->rate_idx.nss;
422 423 424 425 426 427 428 429
		pos += 4;

		/* u8 coding */
		pos++;
		/* u8 group_id */
		pos++;
		/* u16 partial_aid */
		pos += 2;
430 431 432
	} else if (status_rate && (status_rate->rate_idx.flags &
					RATE_INFO_FLAGS_HE_MCS))
	{
433 434
		struct ieee80211_radiotap_he *he;

435
		rthdr->it_present |= cpu_to_le32(BIT(IEEE80211_RADIOTAP_HE));
436 437 438 439 440 441 442 443 444 445 446 447 448 449

		/* required alignment from rthdr */
		pos = (u8 *)rthdr + ALIGN(pos - (u8 *)rthdr, 2);
		he = (struct ieee80211_radiotap_he *)pos;

		he->data1 = cpu_to_le16(IEEE80211_RADIOTAP_HE_DATA1_FORMAT_SU |
					IEEE80211_RADIOTAP_HE_DATA1_DATA_MCS_KNOWN |
					IEEE80211_RADIOTAP_HE_DATA1_DATA_DCM_KNOWN |
					IEEE80211_RADIOTAP_HE_DATA1_BW_RU_ALLOC_KNOWN);

		he->data2 = cpu_to_le16(IEEE80211_RADIOTAP_HE_DATA2_GI_KNOWN);

#define HE_PREP(f, val) le16_encode_bits(val, IEEE80211_RADIOTAP_HE_##f)

450
		he->data6 |= HE_PREP(DATA6_NSTS, status_rate->rate_idx.nss);
451 452 453 454 455 456 457 458 459

#define CHECK_GI(s) \
	BUILD_BUG_ON(IEEE80211_RADIOTAP_HE_DATA5_GI_##s != \
	(int)NL80211_RATE_INFO_HE_GI_##s)

		CHECK_GI(0_8);
		CHECK_GI(1_6);
		CHECK_GI(3_2);

460 461
		he->data3 |= HE_PREP(DATA3_DATA_MCS, status_rate->rate_idx.mcs);
		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 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495
		case RATE_INFO_BW_20:
			he->data5 |= HE_PREP(DATA5_DATA_BW_RU_ALLOC,
					     IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_20MHZ);
			break;
		case RATE_INFO_BW_40:
			he->data5 |= HE_PREP(DATA5_DATA_BW_RU_ALLOC,
					     IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_40MHZ);
			break;
		case RATE_INFO_BW_80:
			he->data5 |= HE_PREP(DATA5_DATA_BW_RU_ALLOC,
					     IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_80MHZ);
			break;
		case RATE_INFO_BW_160:
			he->data5 |= HE_PREP(DATA5_DATA_BW_RU_ALLOC,
					     IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_160MHZ);
			break;
		case RATE_INFO_BW_HE_RU:
#define CHECK_RU_ALLOC(s) \
	BUILD_BUG_ON(IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_##s##T != \
	NL80211_RATE_INFO_HE_RU_ALLOC_##s + 4)

			CHECK_RU_ALLOC(26);
			CHECK_RU_ALLOC(52);
			CHECK_RU_ALLOC(106);
			CHECK_RU_ALLOC(242);
			CHECK_RU_ALLOC(484);
			CHECK_RU_ALLOC(996);
			CHECK_RU_ALLOC(2x996);

			he->data5 |= HE_PREP(DATA5_DATA_BW_RU_ALLOC,
496
					     status_rate->rate_idx.he_ru_alloc + 4);
497 498
			break;
		default:
499
			WARN_ONCE(1, "Invalid SU BW %d\n", status_rate->rate_idx.bw);
500 501 502 503 504
		}

		pos += sizeof(struct ieee80211_radiotap_he);
	}

505
	if (status_rate || info->status.rates[0].idx < 0)
506 507 508 509 510
		return;

	/* IEEE80211_RADIOTAP_MCS
	 * IEEE80211_RADIOTAP_VHT */
	if (info->status.rates[0].flags & IEEE80211_TX_RC_MCS) {
511
		rthdr->it_present |= cpu_to_le32(BIT(IEEE80211_RADIOTAP_MCS));
512 513 514 515 516 517 518 519 520 521 522
		pos[0] = IEEE80211_RADIOTAP_MCS_HAVE_MCS |
			 IEEE80211_RADIOTAP_MCS_HAVE_GI |
			 IEEE80211_RADIOTAP_MCS_HAVE_BW;
		if (info->status.rates[0].flags & IEEE80211_TX_RC_SHORT_GI)
			pos[1] |= IEEE80211_RADIOTAP_MCS_SGI;
		if (info->status.rates[0].flags & IEEE80211_TX_RC_40_MHZ_WIDTH)
			pos[1] |= IEEE80211_RADIOTAP_MCS_BW_40;
		if (info->status.rates[0].flags & IEEE80211_TX_RC_GREEN_FIELD)
			pos[1] |= IEEE80211_RADIOTAP_MCS_FMT_GF;
		pos[2] = info->status.rates[0].idx;
		pos += 3;
523 524 525 526 527
	} else if (info->status.rates[0].flags & IEEE80211_TX_RC_VHT_MCS) {
		u16 known = local->hw.radiotap_vht_details &
			(IEEE80211_RADIOTAP_VHT_KNOWN_GI |
			 IEEE80211_RADIOTAP_VHT_KNOWN_BANDWIDTH);

528
		rthdr->it_present |= cpu_to_le32(BIT(IEEE80211_RADIOTAP_VHT));
529 530 531

		/* required alignment from rthdr */
		pos = (u8 *)rthdr + ALIGN(pos - (u8 *)rthdr, 2);
532

533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564
		/* u16 known - IEEE80211_RADIOTAP_VHT_KNOWN_* */
		put_unaligned_le16(known, pos);
		pos += 2;

		/* u8 flags - IEEE80211_RADIOTAP_VHT_FLAG_* */
		if (info->status.rates[0].flags & IEEE80211_TX_RC_SHORT_GI)
			*pos |= IEEE80211_RADIOTAP_VHT_FLAG_SGI;
		pos++;

		/* u8 bandwidth */
		if (info->status.rates[0].flags & IEEE80211_TX_RC_40_MHZ_WIDTH)
			*pos = 1;
		else if (info->status.rates[0].flags & IEEE80211_TX_RC_80_MHZ_WIDTH)
			*pos = 4;
		else if (info->status.rates[0].flags & IEEE80211_TX_RC_160_MHZ_WIDTH)
			*pos = 11;
		else /* IEEE80211_TX_RC_{20_MHZ_WIDTH,FIXME:DUP_DATA} */
			*pos = 0;
		pos++;

		/* u8 mcs_nss[4] */
		*pos = (ieee80211_rate_get_vht_mcs(&info->status.rates[0]) << 4) |
			ieee80211_rate_get_vht_nss(&info->status.rates[0]);
		pos += 4;

		/* u8 coding */
		pos++;
		/* u8 group_id */
		pos++;
		/* u16 partial_aid */
		pos += 2;
	}
565 566
}

567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591
/*
 * Handles the tx for TDLS teardown frames.
 * If the frame wasn't ACKed by the peer - it will be re-sent through the AP
 */
static void ieee80211_tdls_td_tx_handle(struct ieee80211_local *local,
					struct ieee80211_sub_if_data *sdata,
					struct sk_buff *skb, u32 flags)
{
	struct sk_buff *teardown_skb;
	struct sk_buff *orig_teardown_skb;
	bool is_teardown = false;

	/* Get the teardown data we need and free the lock */
	spin_lock(&sdata->u.mgd.teardown_lock);
	teardown_skb = sdata->u.mgd.teardown_skb;
	orig_teardown_skb = sdata->u.mgd.orig_teardown_skb;
	if ((skb == orig_teardown_skb) && teardown_skb) {
		sdata->u.mgd.teardown_skb = NULL;
		sdata->u.mgd.orig_teardown_skb = NULL;
		is_teardown = true;
	}
	spin_unlock(&sdata->u.mgd.teardown_lock);

	if (is_teardown) {
		/* This mechanism relies on being able to get ACKs */
592
		WARN_ON(!ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS));
593 594 595 596 597 598 599 600 601 602 603 604 605

		/* Check if peer has ACKed */
		if (flags & IEEE80211_TX_STAT_ACK) {
			dev_kfree_skb_any(teardown_skb);
		} else {
			tdls_dbg(sdata,
				 "TDLS Resending teardown through AP\n");

			ieee80211_subif_start_xmit(teardown_skb, skb->dev);
		}
	}
}

606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626
static struct ieee80211_sub_if_data *
ieee80211_sdata_from_skb(struct ieee80211_local *local, struct sk_buff *skb)
{
	struct ieee80211_sub_if_data *sdata;

	if (skb->dev) {
		list_for_each_entry_rcu(sdata, &local->interfaces, list) {
			if (!sdata->dev)
				continue;

			if (skb->dev == sdata->dev)
				return sdata;
		}

		return NULL;
	}

	return rcu_dereference(local->p2p_sdata);
}

static void ieee80211_report_ack_skb(struct ieee80211_local *local,
627 628 629
				     struct sk_buff *orig_skb,
				     bool acked, bool dropped,
				     ktime_t ack_hwtstamp)
630
{
631
	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(orig_skb);
632 633 634 635
	struct sk_buff *skb;
	unsigned long flags;

	spin_lock_irqsave(&local->ack_status_lock, flags);
636
	skb = idr_remove(&local->ack_status_frames, info->ack_frame_id);
637 638 639 640 641 642
	spin_unlock_irqrestore(&local->ack_status_lock, flags);

	if (!skb)
		return;

	if (info->flags & IEEE80211_TX_INTFL_NL80211_FRAME_TX) {
643
		u64 cookie = IEEE80211_SKB_CB(skb)->ack.cookie;
644
		struct ieee80211_sub_if_data *sdata;
645
		struct ieee80211_hdr *hdr = (void *)skb->data;
646 647
		bool is_valid_ack_signal =
			!!(info->status.flags & IEEE80211_TX_STATUS_ACK_SIGNAL_VALID);
648 649 650 651 652 653 654 655 656 657 658 659 660
		struct cfg80211_tx_status status = {
			.cookie = cookie,
			.buf = skb->data,
			.len = skb->len,
			.ack = acked,
		};

		if (ieee80211_is_timing_measurement(orig_skb) ||
		    ieee80211_is_ftm(orig_skb)) {
			status.tx_tstamp =
				ktime_to_ns(skb_hwtstamps(orig_skb)->hwtstamp);
			status.ack_tstamp = ktime_to_ns(ack_hwtstamp);
		}
661 662 663

		rcu_read_lock();
		sdata = ieee80211_sdata_from_skb(local, skb);
664
		if (sdata) {
665 666
			if (skb->protocol == sdata->control_port_protocol ||
			    skb->protocol == cpu_to_be16(ETH_P_PREAUTH))
667 668 669 670 671 672 673
				cfg80211_control_port_tx_status(&sdata->wdev,
								cookie,
								skb->data,
								skb->len,
								acked,
								GFP_ATOMIC);
			else if (ieee80211_is_any_nullfunc(hdr->frame_control))
674
				cfg80211_probe_status(sdata->dev, hdr->addr1,
675 676
						      cookie, acked,
						      info->status.ack_signal,
677
						      is_valid_ack_signal,
678
						      GFP_ATOMIC);
679
			else if (ieee80211_is_mgmt(hdr->frame_control))
680 681 682
				cfg80211_mgmt_tx_status_ext(&sdata->wdev,
							    &status,
							    GFP_ATOMIC);
683
			else
684 685
				pr_warn("Unknown status report in ack skb\n");

686
		}
687 688
		rcu_read_unlock();

689 690
		dev_kfree_skb_any(skb);
	} else if (dropped) {
691 692 693 694 695 696 697
		dev_kfree_skb_any(skb);
	} else {
		/* consumes skb */
		skb_complete_wifi_ack(skb, acked);
	}
}

698
static void ieee80211_report_used_skb(struct ieee80211_local *local,
699 700
				      struct sk_buff *skb, bool dropped,
				      ktime_t ack_hwtstamp)
701 702
{
	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
703
	u16 tx_time_est = ieee80211_info_get_tx_time_est(info);
704 705 706 707 708 709
	struct ieee80211_hdr *hdr = (void *)skb->data;
	bool acked = info->flags & IEEE80211_TX_STAT_ACK;

	if (dropped)
		acked = false;

710 711 712 713 714 715 716 717 718 719 720 721 722
	if (tx_time_est) {
		struct sta_info *sta;

		rcu_read_lock();

		sta = sta_info_get_by_addrs(local, hdr->addr1, hdr->addr2);
		ieee80211_sta_update_pending_airtime(local, sta,
						     skb_get_queue_mapping(skb),
						     tx_time_est,
						     true);
		rcu_read_unlock();
	}

723
	if (info->flags & IEEE80211_TX_INTFL_MLME_CONN_TX) {
724
		struct ieee80211_sub_if_data *sdata;
725 726 727

		rcu_read_lock();

728
		sdata = ieee80211_sdata_from_skb(local, skb);
729

730
		if (!sdata) {
731
			skb->dev = NULL;
732
		} else if (!dropped) {
733 734 735 736 737 738
			unsigned int hdr_size =
				ieee80211_hdrlen(hdr->frame_control);

			/* Check to see if packet is a TDLS teardown packet */
			if (ieee80211_is_data(hdr->frame_control) &&
			    (ieee80211_get_tdls_action(skb, hdr_size) ==
739
			     WLAN_TDLS_TEARDOWN)) {
740 741
				ieee80211_tdls_td_tx_handle(local, sdata, skb,
							    info->flags);
742 743 744 745 746 747 748 749 750 751 752 753 754
			} else if (ieee80211_s1g_is_twt_setup(skb)) {
				if (!acked) {
					struct sk_buff *qskb;

					qskb = skb_clone(skb, GFP_ATOMIC);
					if (qskb) {
						skb_queue_tail(&sdata->status_queue,
							       qskb);
						ieee80211_queue_work(&local->hw,
								     &sdata->work);
					}
				}
			} else {
755 756 757
				ieee80211_mgd_conn_tx_status(sdata,
							     hdr->frame_control,
							     acked);
758
			}
759 760 761
		}

		rcu_read_unlock();
762
	} else if (info->ack_frame_id) {
763 764
		ieee80211_report_ack_skb(local, skb, acked, dropped,
					 ack_hwtstamp);
765
	}
766 767 768 769 770

	if (!dropped && skb->destructor) {
		skb->wifi_acked_valid = 1;
		skb->wifi_acked = acked;
	}
771 772

	ieee80211_led_tx(local);
773 774 775 776 777

	if (skb_has_frag_list(skb)) {
		kfree_skb_list(skb_shinfo(skb)->frag_list);
		skb_shinfo(skb)->frag_list = NULL;
	}
778 779
}

780 781 782 783 784 785 786 787
/*
 * Use a static threshold for now, best value to be determined
 * by testing ...
 * Should it depend on:
 *  - on # of retransmissions
 *  - current throughput (higher value for higher tpt)?
 */
#define STA_LOST_PKT_THRESHOLD	50
788
#define STA_LOST_PKT_TIME	HZ		/* 1 sec since last ACK */
789
#define STA_LOST_TDLS_PKT_TIME		(10*HZ) /* 10secs since last ACK */
790

791 792
static void ieee80211_lost_packet(struct sta_info *sta,
				  struct ieee80211_tx_info *info)
793
{
794 795 796
	unsigned long pkt_time = STA_LOST_PKT_TIME;
	unsigned int pkt_thr = STA_LOST_PKT_THRESHOLD;

797 798 799 800 801 802
	/* If driver relies on its own algorithm for station kickout, skip
	 * mac80211 packet loss mechanism.
	 */
	if (ieee80211_hw_check(&sta->local->hw, REPORTS_LOW_ACK))
		return;

803 804 805 806 807
	/* This packet was aggregated but doesn't carry status info */
	if ((info->flags & IEEE80211_TX_CTL_AMPDU) &&
	    !(info->flags & IEEE80211_TX_STAT_AMPDU))
		return;

808
	sta->deflink.status_stats.lost_packets++;
809 810 811 812
	if (sta->sta.tdls) {
		pkt_time = STA_LOST_TDLS_PKT_TIME;
		pkt_thr = STA_LOST_PKT_THRESHOLD;
	}
813 814

	/*
815
	 * If we're in TDLS mode, make sure that all STA_LOST_PKT_THRESHOLD
816 817 818
	 * of the last packets were lost, and that no ACK was received in the
	 * last STA_LOST_TDLS_PKT_TIME ms, before triggering the CQM packet-loss
	 * mechanism.
819
	 * For non-TDLS, use STA_LOST_PKT_THRESHOLD and STA_LOST_PKT_TIME
820
	 */
821 822
	if (sta->deflink.status_stats.lost_packets < pkt_thr ||
	    !time_after(jiffies, sta->deflink.status_stats.last_pkt_time + pkt_time))
823 824 825
		return;

	cfg80211_cqm_pktloss_notify(sta->sdata->dev, sta->sta.addr,
826 827 828
				    sta->deflink.status_stats.lost_packets,
				    GFP_ATOMIC);
	sta->deflink.status_stats.lost_packets = 0;
829 830
}

831 832 833
static int ieee80211_tx_get_rates(struct ieee80211_hw *hw,
				  struct ieee80211_tx_info *info,
				  int *retry_count)
834
{
835 836
	int count = -1;
	int i;
837 838

	for (i = 0; i < IEEE80211_TX_MAX_RATES; i++) {
839 840 841 842 843 844 845
		if ((info->flags & IEEE80211_TX_CTL_AMPDU) &&
		    !(info->flags & IEEE80211_TX_STAT_AMPDU)) {
			/* just the first aggr frame carry status info */
			info->status.rates[i].idx = -1;
			info->status.rates[i].count = 0;
			break;
		} else if (info->status.rates[i].idx < 0) {
846 847 848
			break;
		} else if (i >= hw->max_report_rates) {
			/* the HW cannot have attempted that rate */
849 850
			info->status.rates[i].idx = -1;
			info->status.rates[i].count = 0;
851
			break;
852 853
		}

854
		count += info->status.rates[i].count;
855
	}
856

857 858 859 860
	if (count < 0)
		count = 0;

	*retry_count = count;
861
	return i - 1;
862 863
}

864
void ieee80211_tx_monitor(struct ieee80211_local *local, struct sk_buff *skb,
865 866
			  int retry_count, int shift, bool send_to_cooked,
			  struct ieee80211_tx_status *status)
867 868
{
	struct sk_buff *skb2;
869 870 871 872 873 874
	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
	struct ieee80211_sub_if_data *sdata;
	struct net_device *prev_dev = NULL;
	int rtap_len;

	/* send frame to monitor interfaces now */
875
	rtap_len = ieee80211_tx_radiotap_len(info, status);
876 877 878 879 880
	if (WARN_ON_ONCE(skb_headroom(skb) < rtap_len)) {
		pr_err("ieee80211_tx_status: headroom too small\n");
		dev_kfree_skb(skb);
		return;
	}
881
	ieee80211_add_tx_radiotap_header(local, skb, retry_count,
882
					 rtap_len, shift, status);
883 884

	/* XXX: is this sufficient for BPF? */
885
	skb_reset_mac_header(skb);
886 887 888 889 890 891 892 893 894 895 896
	skb->ip_summed = CHECKSUM_UNNECESSARY;
	skb->pkt_type = PACKET_OTHERHOST;
	skb->protocol = htons(ETH_P_802_2);
	memset(skb->cb, 0, sizeof(skb->cb));

	rcu_read_lock();
	list_for_each_entry_rcu(sdata, &local->interfaces, list) {
		if (sdata->vif.type == NL80211_IFTYPE_MONITOR) {
			if (!ieee80211_sdata_running(sdata))
				continue;

897
			if ((sdata->u.mntr.flags & MONITOR_FLAG_COOK_FRAMES) &&
898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920
			    !send_to_cooked)
				continue;

			if (prev_dev) {
				skb2 = skb_clone(skb, GFP_ATOMIC);
				if (skb2) {
					skb2->dev = prev_dev;
					netif_rx(skb2);
				}
			}

			prev_dev = sdata->dev;
		}
	}
	if (prev_dev) {
		skb->dev = prev_dev;
		netif_rx(skb);
		skb = NULL;
	}
	rcu_read_unlock();
	dev_kfree_skb(skb);
}

921
static void __ieee80211_tx_status(struct ieee80211_hw *hw,
922 923
				  struct ieee80211_tx_status *status,
				  int rates_idx, int retry_count)
924
{
925
	struct sk_buff *skb = status->skb;
926 927
	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
	struct ieee80211_local *local = hw_to_local(hw);
928 929
	struct ieee80211_tx_info *info = status->info;
	struct sta_info *sta;
930 931 932
	__le16 fc;
	bool send_to_cooked;
	bool acked;
933
	bool noack_success;
934 935
	struct ieee80211_bar *bar;
	int shift = 0;
936
	int tid = IEEE80211_NUM_TIDS;
937

938
	fc = hdr->frame_control;
939

940 941
	if (status->sta) {
		sta = container_of(status->sta, struct sta_info, sta);
942 943
		shift = ieee80211_vif_get_shift(&sta->sdata->vif);

Johannes Berg's avatar
Johannes Berg committed
944
		if (info->flags & IEEE80211_TX_STATUS_EOSP)
945
			clear_sta_flag(sta, WLAN_STA_SP);
Johannes Berg's avatar
Johannes Berg committed
946

947
		acked = !!(info->flags & IEEE80211_TX_STAT_ACK);
948 949
		noack_success = !!(info->flags &
				   IEEE80211_TX_STAT_NOACK_TRANSMITTED);
950 951 952 953 954 955 956

		/* mesh Peer Service Period support */
		if (ieee80211_vif_is_mesh(&sta->sdata->vif) &&
		    ieee80211_is_data_qos(fc))
			ieee80211_mpsp_trigger_process(
				ieee80211_get_qos_ctl(hdr), sta, true, acked);

957
		if (ieee80211_hw_check(&local->hw, HAS_RATE_CONTROL) &&
958
		    (ieee80211_is_data(hdr->frame_control)) &&
959
		    (rates_idx != -1))
960
			sta->deflink.tx_stats.last_rate =
961
				info->status.rates[rates_idx];
962

963 964
		if ((info->flags & IEEE80211_TX_STAT_AMPDU_NO_BACK) &&
		    (ieee80211_is_data_qos(fc))) {
965
			u16 ssn;
966 967 968 969 970 971
			u8 *qc;

			qc = ieee80211_get_qos_ctl(hdr);
			tid = qc[0] & 0xf;
			ssn = ((le16_to_cpu(hdr->seq_ctrl) + 0x10)
						& IEEE80211_SCTL_SEQ);
972
			ieee80211_send_bar(&sta->sdata->vif, hdr->addr1,
973
					   tid, ssn);
974 975 976 977
		} else if (ieee80211_is_data_qos(fc)) {
			u8 *qc = ieee80211_get_qos_ctl(hdr);

			tid = qc[0] & 0xf;
978 979
		}

980
		if (!acked && ieee80211_is_back_req(fc)) {
981
			u16 control;
982

983
			/*
984 985 986
			 * BAR failed, store the last SSN and retry sending
			 * the BAR when the next unicast transmission on the
			 * same TID succeeds.
987 988
			 */
			bar = (struct ieee80211_bar *) skb->data;
989 990
			control = le16_to_cpu(bar->control);
			if (!(control & IEEE80211_BAR_CTRL_MULTI_TID)) {
991 992
				u16 ssn = le16_to_cpu(bar->start_seq_num);

993
				tid = (control &
994 995
				       IEEE80211_BAR_CTRL_TID_INFO_MASK) >>
				      IEEE80211_BAR_CTRL_TID_INFO_SHIFT;
996

997
				ieee80211_set_bar_pending(sta, tid, ssn);
998 999 1000
			}
		}

1001 1002 1003
		if (info->flags & IEEE80211_TX_STAT_TX_FILTERED) {
			ieee80211_handle_filtered_frame(local, sta, skb);
			return;
1004
		} else if (ieee80211_is_data_present(fc)) {
1005
			if (!acked && !noack_success)
1006
				sta->deflink.status_stats.msdu_failed[tid]++;
1007

1008
			sta->deflink.status_stats.msdu_retries[tid] +=
1009
				retry_count;
1010 1011
		}

1012
		if (!(info->flags & IEEE80211_TX_CTL_INJECTED) && acked)
1013
			ieee80211_frame_acked(sta, skb);
1014

1015 1016 1017 1018 1019 1020
	}

	/* SNMP counters
	 * Fragments are passed to low-level drivers as separate skbs, so these
	 * are actually fragments, not frames. Update frame counters only for
	 * the first fragment of the frame. */
1021 1022
	if ((info->flags & IEEE80211_TX_STAT_ACK) ||
	    (info->flags & IEEE80211_TX_STAT_NOACK_TRANSMITTED)) {
1023
		if (ieee80211_is_first_frag(hdr->seq_ctrl)) {
1024
			I802_DEBUG_INC(local->dot11TransmittedFrameCount);
1025
			if (is_multicast_ether_addr(ieee80211_get_DA(hdr)))
1026
				I802_DEBUG_INC(local->dot11MulticastTransmittedFrameCount);
1027
			if (retry_count > 0)
1028
				I802_DEBUG_INC(local->dot11RetryCount);
1029
			if (retry_count > 1)
1030
				I802_DEBUG_INC(local->dot11MultipleRetryCount);
1031 1032 1033 1034 1035 1036 1037
		}

		/* This counter shall be incremented for an acknowledged MPDU
		 * with an individual address in the address 1 field or an MPDU
		 * with a multicast address in the address 1 field of type Data
		 * or Management. */
		if (!is_multicast_ether_addr(hdr->addr1) ||
1038 1039
		    ieee80211_is_data(fc) ||
		    ieee80211_is_mgmt(fc))
1040
			I802_DEBUG_INC(local->dot11TransmittedFragmentCount);
1041
	} else {
1042
		if (ieee80211_is_first_frag(hdr->seq_ctrl))
1043
			I802_DEBUG_INC(local->dot11FailedCount);
1044 1045
	}

1046
	if (ieee80211_is_any_nullfunc(fc) &&
1047
	    ieee80211_has_pm(fc) &&
1048
	    ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS) &&
1049 1050
	    !(info->flags & IEEE80211_TX_CTL_INJECTED) &&
	    local->ps_sdata && !(local->scanning)) {
1051
		if (info->flags & IEEE80211_TX_STAT_ACK)
1052 1053
			local->ps_sdata->u.mgd.flags |=
					IEEE80211_STA_NULLFUNC_ACKED;
1054 1055
		mod_timer(&local->dynamic_ps_timer,
			  jiffies + msecs_to_jiffies(10));
1056 1057
	}

1058
	ieee80211_report_used_skb(local, skb, false, status->ack_hwtstamp);
1059

1060 1061 1062
	/* this was a transmitted frame, but now we want to reuse it */
	skb_orphan(skb);

1063 1064
	/* Need to make a copy before skb->cb gets cleared */
	send_to_cooked = !!(info->flags & IEEE80211_TX_CTL_INJECTED) ||
1065
			 !(ieee80211_is_data(fc));
1066

1067 1068 1069 1070
	/*
	 * This is a bit racy but we can avoid a lot of work
	 * with this test...
	 */
1071
	if (!local->monitors && (!send_to_cooked || !local->cooked_mntrs)) {
1072 1073 1074 1075
		if (status->free_list)
			list_add_tail(&skb->list, status->free_list);
		else
			dev_kfree_skb(skb);
1076 1077 1078
		return;
	}

1079
	/* send to monitor interfaces */
1080
	ieee80211_tx_monitor(local, skb, retry_count, shift,
1081
			     send_to_cooked, status);
1082
}
1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095

void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb)
{
	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
	struct ieee80211_local *local = hw_to_local(hw);
	struct ieee80211_tx_status status = {
		.skb = skb,
		.info = IEEE80211_SKB_CB(skb),
	};
	struct sta_info *sta;

	rcu_read_lock();

1096 1097
	sta = sta_info_get_by_addrs(local, hdr->addr1, hdr->addr2);
	if (sta)
1098 1099
		status.sta = &sta->sta;

1100
	ieee80211_tx_status_ext(hw, &status);
1101 1102
	rcu_read_unlock();
}
1103
EXPORT_SYMBOL(ieee80211_tx_status);
1104

1105 1106
void ieee80211_tx_status_ext(struct ieee80211_hw *hw,
			     struct ieee80211_tx_status *status)
1107 1108
{
	struct ieee80211_local *local = hw_to_local(hw);
1109 1110
	struct ieee80211_tx_info *info = status->info;
	struct ieee80211_sta *pubsta = status->sta;
1111 1112
	struct sk_buff *skb = status->skb;
	struct sta_info *sta = NULL;
1113
	int rates_idx, retry_count;
1114
	bool acked, noack_success, ack_signal_valid;
1115
	u16 tx_time_est;
1116

1117 1118 1119
	if (pubsta) {
		sta = container_of(pubsta, struct sta_info, sta);

1120 1121 1122
		if (status->n_rates)
			sta->deflink.tx_stats.last_rate_info =
				status->rates[status->n_rates - 1].rate_idx;
1123 1124
	}

1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139
	if (skb && (tx_time_est =
		    ieee80211_info_get_tx_time_est(IEEE80211_SKB_CB(skb))) > 0) {
		/* Do this here to avoid the expensive lookup of the sta
		 * in ieee80211_report_used_skb().
		 */
		ieee80211_sta_update_pending_airtime(local, sta,
						     skb_get_queue_mapping(skb),
						     tx_time_est,
						     true);
		ieee80211_info_set_tx_time_est(IEEE80211_SKB_CB(skb), 0);
	}

	if (!status->info)
		goto free;

1140
	rates_idx = ieee80211_tx_get_rates(hw, info, &retry_count);
1141 1142 1143

	acked = !!(info->flags & IEEE80211_TX_STAT_ACK);
	noack_success = !!(info->flags & IEEE80211_TX_STAT_NOACK_TRANSMITTED);
1144 1145
	ack_signal_valid =
		!!(info->status.flags & IEEE80211_TX_STATUS_ACK_SIGNAL_VALID);
1146 1147

	if (pubsta) {
1148 1149
		struct ieee80211_sub_if_data *sdata = sta->sdata;

1150
		if (!acked && !noack_success)
1151 1152
			sta->deflink.status_stats.retry_failed++;
		sta->deflink.status_stats.retry_count += retry_count;
1153

1154
		if (ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS)) {
1155 1156 1157 1158 1159
			if (sdata->vif.type == NL80211_IFTYPE_STATION &&
			    skb && !(info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP))
				ieee80211_sta_tx_notify(sdata, (void *) skb->data,
							acked, info->status.tx_time);

1160
			if (acked) {
1161
				sta->deflink.status_stats.last_ack = jiffies;
1162

1163 1164
				if (sta->deflink.status_stats.lost_packets)
					sta->deflink.status_stats.lost_packets = 0;
1165

1166
				/* Track when last packet was ACKed */
1167
				sta->deflink.status_stats.last_pkt_time = jiffies;
1168

1169 1170 1171 1172 1173
				/* Reset connection monitor */
				if (sdata->vif.type == NL80211_IFTYPE_STATION &&
				    unlikely(sdata->u.mgd.probe_send_count > 0))
					sdata->u.mgd.probe_send_count = 0;

1174
				if (ack_signal_valid) {
1175
					sta->deflink.status_stats.last_ack_signal =
1176
							 (s8)info->status.ack_signal;
1177 1178
					sta->deflink.status_stats.ack_signal_filled = true;
					ewma_avg_signal_add(&sta->deflink.status_stats.avg_ack_signal,
1179 1180 1181
							    -info->status.ack_signal);
				}
			} else if (test_sta_flag(sta, WLAN_STA_PS_STA)) {
1182 1183 1184 1185 1186 1187
				/*
				 * The STA is in power save mode, so assume
				 * that this TX packet failed because of that.
				 */
				if (skb)
					ieee80211_handle_filtered_frame(local, sta, skb);
1188 1189 1190 1191 1192 1193
				return;
			} else if (noack_success) {
				/* nothing to do here, do not account as lost */
			} else {
				ieee80211_lost_packet(sta, info);
			}
1194 1195
		}

1196
		rate_control_tx_status(local, status);
1197 1198
		if (ieee80211_vif_is_mesh(&sta->sdata->vif))
			ieee80211s_update_metric(local, sta, status);
1199 1200
	}

1201
	if (skb && !(info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP))
1202 1203 1204
		return __ieee80211_tx_status(hw, status, rates_idx,
					     retry_count);

1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215
	if (acked || noack_success) {
		I802_DEBUG_INC(local->dot11TransmittedFrameCount);
		if (!pubsta)
			I802_DEBUG_INC(local->dot11MulticastTransmittedFrameCount);
		if (retry_count > 0)
			I802_DEBUG_INC(local->dot11RetryCount);
		if (retry_count > 1)
			I802_DEBUG_INC(local->dot11MultipleRetryCount);
	} else {
		I802_DEBUG_INC(local->dot11FailedCount);
	}
1216

1217
free:
1218 1219 1220
	if (!skb)
		return;

1221
	ieee80211_report_used_skb(local, skb, false, status->ack_hwtstamp);
1222 1223 1224 1225
	if (status->free_list)
		list_add_tail(&skb->list, status->free_list);
	else
		dev_kfree_skb(skb);
1226
}
1227
EXPORT_SYMBOL(ieee80211_tx_status_ext);
1228

1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239
void ieee80211_tx_rate_update(struct ieee80211_hw *hw,
			      struct ieee80211_sta *pubsta,
			      struct ieee80211_tx_info *info)
{
	struct ieee80211_local *local = hw_to_local(hw);
	struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
	struct ieee80211_tx_status status = {
		.info = info,
		.sta = pubsta,
	};

1240
	rate_control_tx_status(local, &status);
1241 1242

	if (ieee80211_hw_check(&local->hw, HAS_RATE_CONTROL))
1243
		sta->deflink.tx_stats.last_rate = info->status.rates[0];
1244 1245 1246
}
EXPORT_SYMBOL(ieee80211_tx_rate_update);

1247 1248 1249 1250 1251
void ieee80211_tx_status_8023(struct ieee80211_hw *hw,
			      struct ieee80211_vif *vif,
			      struct sk_buff *skb)
{
	struct ieee80211_sub_if_data *sdata;
1252 1253 1254 1255
	struct ieee80211_tx_status status = {
		.skb = skb,
		.info = IEEE80211_SKB_CB(skb),
	};
1256 1257 1258 1259 1260 1261
	struct sta_info *sta;

	sdata = vif_to_sdata(vif);

	rcu_read_lock();

1262 1263
	if (!ieee80211_lookup_ra_sta(sdata, skb, &sta) && !IS_ERR(sta))
		status.sta = &sta->sta;
1264

1265
	ieee80211_tx_status_ext(hw, &status);
1266 1267 1268 1269 1270

	rcu_read_unlock();
}
EXPORT_SYMBOL(ieee80211_tx_status_8023);

1271 1272 1273 1274 1275 1276 1277
void ieee80211_report_low_ack(struct ieee80211_sta *pubsta, u32 num_packets)
{
	struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
	cfg80211_cqm_pktloss_notify(sta->sdata->dev, sta->sta.addr,
				    num_packets, GFP_ATOMIC);
}
EXPORT_SYMBOL(ieee80211_report_low_ack);
1278 1279 1280

void ieee80211_free_txskb(struct ieee80211_hw *hw, struct sk_buff *skb)
{
1281
	struct ieee80211_local *local = hw_to_local(hw);
1282
	ktime_t kt = ktime_set(0, 0);
1283

1284
	ieee80211_report_used_skb(local, skb, true, kt);
1285 1286 1287
	dev_kfree_skb_any(skb);
}
EXPORT_SYMBOL(ieee80211_free_txskb);
1288 1289 1290 1291 1292 1293 1294 1295 1296

void ieee80211_purge_tx_queue(struct ieee80211_hw *hw,
			      struct sk_buff_head *skbs)
{
	struct sk_buff *skb;

	while ((skb = __skb_dequeue(skbs)))
		ieee80211_free_txskb(hw, skb);
}