xref: /openbmc/linux/drivers/net/wireless/ath/ath10k/mac.c (revision 5fb859f7)
1 // SPDX-License-Identifier: ISC
2 /*
3  * Copyright (c) 2005-2011 Atheros Communications Inc.
4  * Copyright (c) 2011-2017 Qualcomm Atheros, Inc.
5  * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
6  */
7 
8 #include "mac.h"
9 
10 #include <net/cfg80211.h>
11 #include <net/mac80211.h>
12 #include <linux/etherdevice.h>
13 #include <linux/acpi.h>
14 #include <linux/of.h>
15 #include <linux/bitfield.h>
16 
17 #include "hif.h"
18 #include "core.h"
19 #include "debug.h"
20 #include "wmi.h"
21 #include "htt.h"
22 #include "txrx.h"
23 #include "testmode.h"
24 #include "wmi-tlv.h"
25 #include "wmi-ops.h"
26 #include "wow.h"
27 
28 /*********/
29 /* Rates */
30 /*********/
31 
32 static struct ieee80211_rate ath10k_rates[] = {
33 	{ .bitrate = 10,
34 	  .hw_value = ATH10K_HW_RATE_CCK_LP_1M },
35 	{ .bitrate = 20,
36 	  .hw_value = ATH10K_HW_RATE_CCK_LP_2M,
37 	  .hw_value_short = ATH10K_HW_RATE_CCK_SP_2M,
38 	  .flags = IEEE80211_RATE_SHORT_PREAMBLE },
39 	{ .bitrate = 55,
40 	  .hw_value = ATH10K_HW_RATE_CCK_LP_5_5M,
41 	  .hw_value_short = ATH10K_HW_RATE_CCK_SP_5_5M,
42 	  .flags = IEEE80211_RATE_SHORT_PREAMBLE },
43 	{ .bitrate = 110,
44 	  .hw_value = ATH10K_HW_RATE_CCK_LP_11M,
45 	  .hw_value_short = ATH10K_HW_RATE_CCK_SP_11M,
46 	  .flags = IEEE80211_RATE_SHORT_PREAMBLE },
47 
48 	{ .bitrate = 60, .hw_value = ATH10K_HW_RATE_OFDM_6M },
49 	{ .bitrate = 90, .hw_value = ATH10K_HW_RATE_OFDM_9M },
50 	{ .bitrate = 120, .hw_value = ATH10K_HW_RATE_OFDM_12M },
51 	{ .bitrate = 180, .hw_value = ATH10K_HW_RATE_OFDM_18M },
52 	{ .bitrate = 240, .hw_value = ATH10K_HW_RATE_OFDM_24M },
53 	{ .bitrate = 360, .hw_value = ATH10K_HW_RATE_OFDM_36M },
54 	{ .bitrate = 480, .hw_value = ATH10K_HW_RATE_OFDM_48M },
55 	{ .bitrate = 540, .hw_value = ATH10K_HW_RATE_OFDM_54M },
56 };
57 
58 static struct ieee80211_rate ath10k_rates_rev2[] = {
59 	{ .bitrate = 10,
60 	  .hw_value = ATH10K_HW_RATE_REV2_CCK_LP_1M },
61 	{ .bitrate = 20,
62 	  .hw_value = ATH10K_HW_RATE_REV2_CCK_LP_2M,
63 	  .hw_value_short = ATH10K_HW_RATE_REV2_CCK_SP_2M,
64 	  .flags = IEEE80211_RATE_SHORT_PREAMBLE },
65 	{ .bitrate = 55,
66 	  .hw_value = ATH10K_HW_RATE_REV2_CCK_LP_5_5M,
67 	  .hw_value_short = ATH10K_HW_RATE_REV2_CCK_SP_5_5M,
68 	  .flags = IEEE80211_RATE_SHORT_PREAMBLE },
69 	{ .bitrate = 110,
70 	  .hw_value = ATH10K_HW_RATE_REV2_CCK_LP_11M,
71 	  .hw_value_short = ATH10K_HW_RATE_REV2_CCK_SP_11M,
72 	  .flags = IEEE80211_RATE_SHORT_PREAMBLE },
73 
74 	{ .bitrate = 60, .hw_value = ATH10K_HW_RATE_OFDM_6M },
75 	{ .bitrate = 90, .hw_value = ATH10K_HW_RATE_OFDM_9M },
76 	{ .bitrate = 120, .hw_value = ATH10K_HW_RATE_OFDM_12M },
77 	{ .bitrate = 180, .hw_value = ATH10K_HW_RATE_OFDM_18M },
78 	{ .bitrate = 240, .hw_value = ATH10K_HW_RATE_OFDM_24M },
79 	{ .bitrate = 360, .hw_value = ATH10K_HW_RATE_OFDM_36M },
80 	{ .bitrate = 480, .hw_value = ATH10K_HW_RATE_OFDM_48M },
81 	{ .bitrate = 540, .hw_value = ATH10K_HW_RATE_OFDM_54M },
82 };
83 
84 static const struct cfg80211_sar_freq_ranges ath10k_sar_freq_ranges[] = {
85 	{.start_freq = 2402, .end_freq = 2494 },
86 	{.start_freq = 5170, .end_freq = 5875 },
87 };
88 
89 static const struct cfg80211_sar_capa ath10k_sar_capa = {
90 	.type = NL80211_SAR_TYPE_POWER,
91 	.num_freq_ranges = (ARRAY_SIZE(ath10k_sar_freq_ranges)),
92 	.freq_ranges = &ath10k_sar_freq_ranges[0],
93 };
94 
95 #define ATH10K_MAC_FIRST_OFDM_RATE_IDX 4
96 
97 #define ath10k_a_rates (ath10k_rates + ATH10K_MAC_FIRST_OFDM_RATE_IDX)
98 #define ath10k_a_rates_size (ARRAY_SIZE(ath10k_rates) - \
99 			     ATH10K_MAC_FIRST_OFDM_RATE_IDX)
100 #define ath10k_g_rates (ath10k_rates + 0)
101 #define ath10k_g_rates_size (ARRAY_SIZE(ath10k_rates))
102 
103 #define ath10k_g_rates_rev2 (ath10k_rates_rev2 + 0)
104 #define ath10k_g_rates_rev2_size (ARRAY_SIZE(ath10k_rates_rev2))
105 
106 #define ath10k_wmi_legacy_rates ath10k_rates
107 
108 static bool ath10k_mac_bitrate_is_cck(int bitrate)
109 {
110 	switch (bitrate) {
111 	case 10:
112 	case 20:
113 	case 55:
114 	case 110:
115 		return true;
116 	}
117 
118 	return false;
119 }
120 
121 static u8 ath10k_mac_bitrate_to_rate(int bitrate)
122 {
123 	return DIV_ROUND_UP(bitrate, 5) |
124 	       (ath10k_mac_bitrate_is_cck(bitrate) ? BIT(7) : 0);
125 }
126 
127 u8 ath10k_mac_hw_rate_to_idx(const struct ieee80211_supported_band *sband,
128 			     u8 hw_rate, bool cck)
129 {
130 	const struct ieee80211_rate *rate;
131 	int i;
132 
133 	for (i = 0; i < sband->n_bitrates; i++) {
134 		rate = &sband->bitrates[i];
135 
136 		if (ath10k_mac_bitrate_is_cck(rate->bitrate) != cck)
137 			continue;
138 
139 		if (rate->hw_value == hw_rate)
140 			return i;
141 		else if (rate->flags & IEEE80211_RATE_SHORT_PREAMBLE &&
142 			 rate->hw_value_short == hw_rate)
143 			return i;
144 	}
145 
146 	return 0;
147 }
148 
149 u8 ath10k_mac_bitrate_to_idx(const struct ieee80211_supported_band *sband,
150 			     u32 bitrate)
151 {
152 	int i;
153 
154 	for (i = 0; i < sband->n_bitrates; i++)
155 		if (sband->bitrates[i].bitrate == bitrate)
156 			return i;
157 
158 	return 0;
159 }
160 
161 static int ath10k_mac_get_rate_hw_value(int bitrate)
162 {
163 	int i;
164 	u8 hw_value_prefix = 0;
165 
166 	if (ath10k_mac_bitrate_is_cck(bitrate))
167 		hw_value_prefix = WMI_RATE_PREAMBLE_CCK << 6;
168 
169 	for (i = 0; i < ARRAY_SIZE(ath10k_rates); i++) {
170 		if (ath10k_rates[i].bitrate == bitrate)
171 			return hw_value_prefix | ath10k_rates[i].hw_value;
172 	}
173 
174 	return -EINVAL;
175 }
176 
177 static int ath10k_mac_get_max_vht_mcs_map(u16 mcs_map, int nss)
178 {
179 	switch ((mcs_map >> (2 * nss)) & 0x3) {
180 	case IEEE80211_VHT_MCS_SUPPORT_0_7: return BIT(8) - 1;
181 	case IEEE80211_VHT_MCS_SUPPORT_0_8: return BIT(9) - 1;
182 	case IEEE80211_VHT_MCS_SUPPORT_0_9: return BIT(10) - 1;
183 	}
184 	return 0;
185 }
186 
187 static u32
188 ath10k_mac_max_ht_nss(const u8 ht_mcs_mask[IEEE80211_HT_MCS_MASK_LEN])
189 {
190 	int nss;
191 
192 	for (nss = IEEE80211_HT_MCS_MASK_LEN - 1; nss >= 0; nss--)
193 		if (ht_mcs_mask[nss])
194 			return nss + 1;
195 
196 	return 1;
197 }
198 
199 static u32
200 ath10k_mac_max_vht_nss(const u16 vht_mcs_mask[NL80211_VHT_NSS_MAX])
201 {
202 	int nss;
203 
204 	for (nss = NL80211_VHT_NSS_MAX - 1; nss >= 0; nss--)
205 		if (vht_mcs_mask[nss])
206 			return nss + 1;
207 
208 	return 1;
209 }
210 
211 int ath10k_mac_ext_resource_config(struct ath10k *ar, u32 val)
212 {
213 	enum wmi_host_platform_type platform_type;
214 	int ret;
215 
216 	if (test_bit(WMI_SERVICE_TX_MODE_DYNAMIC, ar->wmi.svc_map))
217 		platform_type = WMI_HOST_PLATFORM_LOW_PERF;
218 	else
219 		platform_type = WMI_HOST_PLATFORM_HIGH_PERF;
220 
221 	ret = ath10k_wmi_ext_resource_config(ar, platform_type, val);
222 
223 	if (ret && ret != -EOPNOTSUPP) {
224 		ath10k_warn(ar, "failed to configure ext resource: %d\n", ret);
225 		return ret;
226 	}
227 
228 	return 0;
229 }
230 
231 /**********/
232 /* Crypto */
233 /**********/
234 
235 static int ath10k_send_key(struct ath10k_vif *arvif,
236 			   struct ieee80211_key_conf *key,
237 			   enum set_key_cmd cmd,
238 			   const u8 *macaddr, u32 flags)
239 {
240 	struct ath10k *ar = arvif->ar;
241 	struct wmi_vdev_install_key_arg arg = {
242 		.vdev_id = arvif->vdev_id,
243 		.key_idx = key->keyidx,
244 		.key_len = key->keylen,
245 		.key_data = key->key,
246 		.key_flags = flags,
247 		.macaddr = macaddr,
248 	};
249 
250 	lockdep_assert_held(&arvif->ar->conf_mutex);
251 
252 	switch (key->cipher) {
253 	case WLAN_CIPHER_SUITE_CCMP:
254 		arg.key_cipher = ar->wmi_key_cipher[WMI_CIPHER_AES_CCM];
255 		key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV_MGMT;
256 		break;
257 	case WLAN_CIPHER_SUITE_TKIP:
258 		arg.key_cipher = ar->wmi_key_cipher[WMI_CIPHER_TKIP];
259 		arg.key_txmic_len = 8;
260 		arg.key_rxmic_len = 8;
261 		break;
262 	case WLAN_CIPHER_SUITE_WEP40:
263 	case WLAN_CIPHER_SUITE_WEP104:
264 		arg.key_cipher = ar->wmi_key_cipher[WMI_CIPHER_WEP];
265 		break;
266 	case WLAN_CIPHER_SUITE_CCMP_256:
267 		arg.key_cipher = ar->wmi_key_cipher[WMI_CIPHER_AES_CCM];
268 		break;
269 	case WLAN_CIPHER_SUITE_GCMP:
270 	case WLAN_CIPHER_SUITE_GCMP_256:
271 		arg.key_cipher = ar->wmi_key_cipher[WMI_CIPHER_AES_GCM];
272 		key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV_MGMT;
273 		break;
274 	case WLAN_CIPHER_SUITE_BIP_GMAC_128:
275 	case WLAN_CIPHER_SUITE_BIP_GMAC_256:
276 	case WLAN_CIPHER_SUITE_BIP_CMAC_256:
277 	case WLAN_CIPHER_SUITE_AES_CMAC:
278 		WARN_ON(1);
279 		return -EINVAL;
280 	default:
281 		ath10k_warn(ar, "cipher %d is not supported\n", key->cipher);
282 		return -EOPNOTSUPP;
283 	}
284 
285 	if (test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags))
286 		key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
287 
288 	if (cmd == DISABLE_KEY) {
289 		arg.key_cipher = ar->wmi_key_cipher[WMI_CIPHER_NONE];
290 		arg.key_data = NULL;
291 	}
292 
293 	return ath10k_wmi_vdev_install_key(arvif->ar, &arg);
294 }
295 
296 static int ath10k_install_key(struct ath10k_vif *arvif,
297 			      struct ieee80211_key_conf *key,
298 			      enum set_key_cmd cmd,
299 			      const u8 *macaddr, u32 flags)
300 {
301 	struct ath10k *ar = arvif->ar;
302 	int ret;
303 	unsigned long time_left;
304 
305 	lockdep_assert_held(&ar->conf_mutex);
306 
307 	reinit_completion(&ar->install_key_done);
308 
309 	if (arvif->nohwcrypt)
310 		return 1;
311 
312 	ret = ath10k_send_key(arvif, key, cmd, macaddr, flags);
313 	if (ret)
314 		return ret;
315 
316 	time_left = wait_for_completion_timeout(&ar->install_key_done, 3 * HZ);
317 	if (time_left == 0)
318 		return -ETIMEDOUT;
319 
320 	return 0;
321 }
322 
323 static int ath10k_install_peer_wep_keys(struct ath10k_vif *arvif,
324 					const u8 *addr)
325 {
326 	struct ath10k *ar = arvif->ar;
327 	struct ath10k_peer *peer;
328 	int ret;
329 	int i;
330 	u32 flags;
331 
332 	lockdep_assert_held(&ar->conf_mutex);
333 
334 	if (WARN_ON(arvif->vif->type != NL80211_IFTYPE_AP &&
335 		    arvif->vif->type != NL80211_IFTYPE_ADHOC &&
336 		    arvif->vif->type != NL80211_IFTYPE_MESH_POINT))
337 		return -EINVAL;
338 
339 	spin_lock_bh(&ar->data_lock);
340 	peer = ath10k_peer_find(ar, arvif->vdev_id, addr);
341 	spin_unlock_bh(&ar->data_lock);
342 
343 	if (!peer)
344 		return -ENOENT;
345 
346 	for (i = 0; i < ARRAY_SIZE(arvif->wep_keys); i++) {
347 		if (arvif->wep_keys[i] == NULL)
348 			continue;
349 
350 		switch (arvif->vif->type) {
351 		case NL80211_IFTYPE_AP:
352 			flags = WMI_KEY_PAIRWISE;
353 
354 			if (arvif->def_wep_key_idx == i)
355 				flags |= WMI_KEY_TX_USAGE;
356 
357 			ret = ath10k_install_key(arvif, arvif->wep_keys[i],
358 						 SET_KEY, addr, flags);
359 			if (ret < 0)
360 				return ret;
361 			break;
362 		case NL80211_IFTYPE_ADHOC:
363 			ret = ath10k_install_key(arvif, arvif->wep_keys[i],
364 						 SET_KEY, addr,
365 						 WMI_KEY_PAIRWISE);
366 			if (ret < 0)
367 				return ret;
368 
369 			ret = ath10k_install_key(arvif, arvif->wep_keys[i],
370 						 SET_KEY, addr, WMI_KEY_GROUP);
371 			if (ret < 0)
372 				return ret;
373 			break;
374 		default:
375 			WARN_ON(1);
376 			return -EINVAL;
377 		}
378 
379 		spin_lock_bh(&ar->data_lock);
380 		peer->keys[i] = arvif->wep_keys[i];
381 		spin_unlock_bh(&ar->data_lock);
382 	}
383 
384 	/* In some cases (notably with static WEP IBSS with multiple keys)
385 	 * multicast Tx becomes broken. Both pairwise and groupwise keys are
386 	 * installed already. Using WMI_KEY_TX_USAGE in different combinations
387 	 * didn't seem help. Using def_keyid vdev parameter seems to be
388 	 * effective so use that.
389 	 *
390 	 * FIXME: Revisit. Perhaps this can be done in a less hacky way.
391 	 */
392 	if (arvif->vif->type != NL80211_IFTYPE_ADHOC)
393 		return 0;
394 
395 	if (arvif->def_wep_key_idx == -1)
396 		return 0;
397 
398 	ret = ath10k_wmi_vdev_set_param(arvif->ar,
399 					arvif->vdev_id,
400 					arvif->ar->wmi.vdev_param->def_keyid,
401 					arvif->def_wep_key_idx);
402 	if (ret) {
403 		ath10k_warn(ar, "failed to re-set def wpa key idxon vdev %i: %d\n",
404 			    arvif->vdev_id, ret);
405 		return ret;
406 	}
407 
408 	return 0;
409 }
410 
411 static int ath10k_clear_peer_keys(struct ath10k_vif *arvif,
412 				  const u8 *addr)
413 {
414 	struct ath10k *ar = arvif->ar;
415 	struct ath10k_peer *peer;
416 	int first_errno = 0;
417 	int ret;
418 	int i;
419 	u32 flags = 0;
420 
421 	lockdep_assert_held(&ar->conf_mutex);
422 
423 	spin_lock_bh(&ar->data_lock);
424 	peer = ath10k_peer_find(ar, arvif->vdev_id, addr);
425 	spin_unlock_bh(&ar->data_lock);
426 
427 	if (!peer)
428 		return -ENOENT;
429 
430 	for (i = 0; i < ARRAY_SIZE(peer->keys); i++) {
431 		if (peer->keys[i] == NULL)
432 			continue;
433 
434 		/* key flags are not required to delete the key */
435 		ret = ath10k_install_key(arvif, peer->keys[i],
436 					 DISABLE_KEY, addr, flags);
437 		if (ret < 0 && first_errno == 0)
438 			first_errno = ret;
439 
440 		if (ret < 0)
441 			ath10k_warn(ar, "failed to remove peer wep key %d: %d\n",
442 				    i, ret);
443 
444 		spin_lock_bh(&ar->data_lock);
445 		peer->keys[i] = NULL;
446 		spin_unlock_bh(&ar->data_lock);
447 	}
448 
449 	return first_errno;
450 }
451 
452 bool ath10k_mac_is_peer_wep_key_set(struct ath10k *ar, const u8 *addr,
453 				    u8 keyidx)
454 {
455 	struct ath10k_peer *peer;
456 	int i;
457 
458 	lockdep_assert_held(&ar->data_lock);
459 
460 	/* We don't know which vdev this peer belongs to,
461 	 * since WMI doesn't give us that information.
462 	 *
463 	 * FIXME: multi-bss needs to be handled.
464 	 */
465 	peer = ath10k_peer_find(ar, 0, addr);
466 	if (!peer)
467 		return false;
468 
469 	for (i = 0; i < ARRAY_SIZE(peer->keys); i++) {
470 		if (peer->keys[i] && peer->keys[i]->keyidx == keyidx)
471 			return true;
472 	}
473 
474 	return false;
475 }
476 
477 static int ath10k_clear_vdev_key(struct ath10k_vif *arvif,
478 				 struct ieee80211_key_conf *key)
479 {
480 	struct ath10k *ar = arvif->ar;
481 	struct ath10k_peer *peer;
482 	u8 addr[ETH_ALEN];
483 	int first_errno = 0;
484 	int ret;
485 	int i;
486 	u32 flags = 0;
487 
488 	lockdep_assert_held(&ar->conf_mutex);
489 
490 	for (;;) {
491 		/* since ath10k_install_key we can't hold data_lock all the
492 		 * time, so we try to remove the keys incrementally
493 		 */
494 		spin_lock_bh(&ar->data_lock);
495 		i = 0;
496 		list_for_each_entry(peer, &ar->peers, list) {
497 			for (i = 0; i < ARRAY_SIZE(peer->keys); i++) {
498 				if (peer->keys[i] == key) {
499 					ether_addr_copy(addr, peer->addr);
500 					peer->keys[i] = NULL;
501 					break;
502 				}
503 			}
504 
505 			if (i < ARRAY_SIZE(peer->keys))
506 				break;
507 		}
508 		spin_unlock_bh(&ar->data_lock);
509 
510 		if (i == ARRAY_SIZE(peer->keys))
511 			break;
512 		/* key flags are not required to delete the key */
513 		ret = ath10k_install_key(arvif, key, DISABLE_KEY, addr, flags);
514 		if (ret < 0 && first_errno == 0)
515 			first_errno = ret;
516 
517 		if (ret)
518 			ath10k_warn(ar, "failed to remove key for %pM: %d\n",
519 				    addr, ret);
520 	}
521 
522 	return first_errno;
523 }
524 
525 static int ath10k_mac_vif_update_wep_key(struct ath10k_vif *arvif,
526 					 struct ieee80211_key_conf *key)
527 {
528 	struct ath10k *ar = arvif->ar;
529 	struct ath10k_peer *peer;
530 	int ret;
531 
532 	lockdep_assert_held(&ar->conf_mutex);
533 
534 	list_for_each_entry(peer, &ar->peers, list) {
535 		if (ether_addr_equal(peer->addr, arvif->vif->addr))
536 			continue;
537 
538 		if (ether_addr_equal(peer->addr, arvif->bssid))
539 			continue;
540 
541 		if (peer->keys[key->keyidx] == key)
542 			continue;
543 
544 		ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vif vdev %i update key %i needs update\n",
545 			   arvif->vdev_id, key->keyidx);
546 
547 		ret = ath10k_install_peer_wep_keys(arvif, peer->addr);
548 		if (ret) {
549 			ath10k_warn(ar, "failed to update wep keys on vdev %i for peer %pM: %d\n",
550 				    arvif->vdev_id, peer->addr, ret);
551 			return ret;
552 		}
553 	}
554 
555 	return 0;
556 }
557 
558 /*********************/
559 /* General utilities */
560 /*********************/
561 
562 static inline enum wmi_phy_mode
563 chan_to_phymode(const struct cfg80211_chan_def *chandef)
564 {
565 	enum wmi_phy_mode phymode = MODE_UNKNOWN;
566 
567 	switch (chandef->chan->band) {
568 	case NL80211_BAND_2GHZ:
569 		switch (chandef->width) {
570 		case NL80211_CHAN_WIDTH_20_NOHT:
571 			if (chandef->chan->flags & IEEE80211_CHAN_NO_OFDM)
572 				phymode = MODE_11B;
573 			else
574 				phymode = MODE_11G;
575 			break;
576 		case NL80211_CHAN_WIDTH_20:
577 			phymode = MODE_11NG_HT20;
578 			break;
579 		case NL80211_CHAN_WIDTH_40:
580 			phymode = MODE_11NG_HT40;
581 			break;
582 		default:
583 			phymode = MODE_UNKNOWN;
584 			break;
585 		}
586 		break;
587 	case NL80211_BAND_5GHZ:
588 		switch (chandef->width) {
589 		case NL80211_CHAN_WIDTH_20_NOHT:
590 			phymode = MODE_11A;
591 			break;
592 		case NL80211_CHAN_WIDTH_20:
593 			phymode = MODE_11NA_HT20;
594 			break;
595 		case NL80211_CHAN_WIDTH_40:
596 			phymode = MODE_11NA_HT40;
597 			break;
598 		case NL80211_CHAN_WIDTH_80:
599 			phymode = MODE_11AC_VHT80;
600 			break;
601 		case NL80211_CHAN_WIDTH_160:
602 			phymode = MODE_11AC_VHT160;
603 			break;
604 		case NL80211_CHAN_WIDTH_80P80:
605 			phymode = MODE_11AC_VHT80_80;
606 			break;
607 		default:
608 			phymode = MODE_UNKNOWN;
609 			break;
610 		}
611 		break;
612 	default:
613 		break;
614 	}
615 
616 	WARN_ON(phymode == MODE_UNKNOWN);
617 	return phymode;
618 }
619 
620 static u8 ath10k_parse_mpdudensity(u8 mpdudensity)
621 {
622 /*
623  * 802.11n D2.0 defined values for "Minimum MPDU Start Spacing":
624  *   0 for no restriction
625  *   1 for 1/4 us
626  *   2 for 1/2 us
627  *   3 for 1 us
628  *   4 for 2 us
629  *   5 for 4 us
630  *   6 for 8 us
631  *   7 for 16 us
632  */
633 	switch (mpdudensity) {
634 	case 0:
635 		return 0;
636 	case 1:
637 	case 2:
638 	case 3:
639 	/* Our lower layer calculations limit our precision to
640 	 * 1 microsecond
641 	 */
642 		return 1;
643 	case 4:
644 		return 2;
645 	case 5:
646 		return 4;
647 	case 6:
648 		return 8;
649 	case 7:
650 		return 16;
651 	default:
652 		return 0;
653 	}
654 }
655 
656 int ath10k_mac_vif_chan(struct ieee80211_vif *vif,
657 			struct cfg80211_chan_def *def)
658 {
659 	struct ieee80211_chanctx_conf *conf;
660 
661 	rcu_read_lock();
662 	conf = rcu_dereference(vif->bss_conf.chanctx_conf);
663 	if (!conf) {
664 		rcu_read_unlock();
665 		return -ENOENT;
666 	}
667 
668 	*def = conf->def;
669 	rcu_read_unlock();
670 
671 	return 0;
672 }
673 
674 static void ath10k_mac_num_chanctxs_iter(struct ieee80211_hw *hw,
675 					 struct ieee80211_chanctx_conf *conf,
676 					 void *data)
677 {
678 	int *num = data;
679 
680 	(*num)++;
681 }
682 
683 static int ath10k_mac_num_chanctxs(struct ath10k *ar)
684 {
685 	int num = 0;
686 
687 	ieee80211_iter_chan_contexts_atomic(ar->hw,
688 					    ath10k_mac_num_chanctxs_iter,
689 					    &num);
690 
691 	return num;
692 }
693 
694 static void
695 ath10k_mac_get_any_chandef_iter(struct ieee80211_hw *hw,
696 				struct ieee80211_chanctx_conf *conf,
697 				void *data)
698 {
699 	struct cfg80211_chan_def **def = data;
700 
701 	*def = &conf->def;
702 }
703 
704 static void ath10k_wait_for_peer_delete_done(struct ath10k *ar, u32 vdev_id,
705 					     const u8 *addr)
706 {
707 	unsigned long time_left;
708 	int ret;
709 
710 	if (test_bit(WMI_SERVICE_SYNC_DELETE_CMDS, ar->wmi.svc_map)) {
711 		ret = ath10k_wait_for_peer_deleted(ar, vdev_id, addr);
712 		if (ret) {
713 			ath10k_warn(ar, "failed wait for peer deleted");
714 			return;
715 		}
716 
717 		time_left = wait_for_completion_timeout(&ar->peer_delete_done,
718 							5 * HZ);
719 		if (!time_left)
720 			ath10k_warn(ar, "Timeout in receiving peer delete response\n");
721 	}
722 }
723 
724 static int ath10k_peer_create(struct ath10k *ar,
725 			      struct ieee80211_vif *vif,
726 			      struct ieee80211_sta *sta,
727 			      u32 vdev_id,
728 			      const u8 *addr,
729 			      enum wmi_peer_type peer_type)
730 {
731 	struct ath10k_vif *arvif;
732 	struct ath10k_peer *peer;
733 	int num_peers = 0;
734 	int ret;
735 
736 	lockdep_assert_held(&ar->conf_mutex);
737 
738 	num_peers = ar->num_peers;
739 
740 	/* Each vdev consumes a peer entry as well */
741 	list_for_each_entry(arvif, &ar->arvifs, list)
742 		num_peers++;
743 
744 	if (num_peers >= ar->max_num_peers)
745 		return -ENOBUFS;
746 
747 	ret = ath10k_wmi_peer_create(ar, vdev_id, addr, peer_type);
748 	if (ret) {
749 		ath10k_warn(ar, "failed to create wmi peer %pM on vdev %i: %i\n",
750 			    addr, vdev_id, ret);
751 		return ret;
752 	}
753 
754 	ret = ath10k_wait_for_peer_created(ar, vdev_id, addr);
755 	if (ret) {
756 		ath10k_warn(ar, "failed to wait for created wmi peer %pM on vdev %i: %i\n",
757 			    addr, vdev_id, ret);
758 		return ret;
759 	}
760 
761 	spin_lock_bh(&ar->data_lock);
762 
763 	peer = ath10k_peer_find(ar, vdev_id, addr);
764 	if (!peer) {
765 		spin_unlock_bh(&ar->data_lock);
766 		ath10k_warn(ar, "failed to find peer %pM on vdev %i after creation\n",
767 			    addr, vdev_id);
768 		ath10k_wait_for_peer_delete_done(ar, vdev_id, addr);
769 		return -ENOENT;
770 	}
771 
772 	peer->vif = vif;
773 	peer->sta = sta;
774 
775 	spin_unlock_bh(&ar->data_lock);
776 
777 	ar->num_peers++;
778 
779 	return 0;
780 }
781 
782 static int ath10k_mac_set_kickout(struct ath10k_vif *arvif)
783 {
784 	struct ath10k *ar = arvif->ar;
785 	u32 param;
786 	int ret;
787 
788 	param = ar->wmi.pdev_param->sta_kickout_th;
789 	ret = ath10k_wmi_pdev_set_param(ar, param,
790 					ATH10K_KICKOUT_THRESHOLD);
791 	if (ret) {
792 		ath10k_warn(ar, "failed to set kickout threshold on vdev %i: %d\n",
793 			    arvif->vdev_id, ret);
794 		return ret;
795 	}
796 
797 	param = ar->wmi.vdev_param->ap_keepalive_min_idle_inactive_time_secs;
798 	ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param,
799 					ATH10K_KEEPALIVE_MIN_IDLE);
800 	if (ret) {
801 		ath10k_warn(ar, "failed to set keepalive minimum idle time on vdev %i: %d\n",
802 			    arvif->vdev_id, ret);
803 		return ret;
804 	}
805 
806 	param = ar->wmi.vdev_param->ap_keepalive_max_idle_inactive_time_secs;
807 	ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param,
808 					ATH10K_KEEPALIVE_MAX_IDLE);
809 	if (ret) {
810 		ath10k_warn(ar, "failed to set keepalive maximum idle time on vdev %i: %d\n",
811 			    arvif->vdev_id, ret);
812 		return ret;
813 	}
814 
815 	param = ar->wmi.vdev_param->ap_keepalive_max_unresponsive_time_secs;
816 	ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param,
817 					ATH10K_KEEPALIVE_MAX_UNRESPONSIVE);
818 	if (ret) {
819 		ath10k_warn(ar, "failed to set keepalive maximum unresponsive time on vdev %i: %d\n",
820 			    arvif->vdev_id, ret);
821 		return ret;
822 	}
823 
824 	return 0;
825 }
826 
827 static int ath10k_mac_set_rts(struct ath10k_vif *arvif, u32 value)
828 {
829 	struct ath10k *ar = arvif->ar;
830 	u32 vdev_param;
831 
832 	vdev_param = ar->wmi.vdev_param->rts_threshold;
833 	return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, value);
834 }
835 
836 static int ath10k_peer_delete(struct ath10k *ar, u32 vdev_id, const u8 *addr)
837 {
838 	int ret;
839 
840 	lockdep_assert_held(&ar->conf_mutex);
841 
842 	ret = ath10k_wmi_peer_delete(ar, vdev_id, addr);
843 	if (ret)
844 		return ret;
845 
846 	ret = ath10k_wait_for_peer_deleted(ar, vdev_id, addr);
847 	if (ret)
848 		return ret;
849 
850 	if (test_bit(WMI_SERVICE_SYNC_DELETE_CMDS, ar->wmi.svc_map)) {
851 		unsigned long time_left;
852 
853 		time_left = wait_for_completion_timeout
854 			    (&ar->peer_delete_done, 5 * HZ);
855 
856 		if (!time_left) {
857 			ath10k_warn(ar, "Timeout in receiving peer delete response\n");
858 			return -ETIMEDOUT;
859 		}
860 	}
861 
862 	ar->num_peers--;
863 
864 	return 0;
865 }
866 
867 static void ath10k_peer_cleanup(struct ath10k *ar, u32 vdev_id)
868 {
869 	struct ath10k_peer *peer, *tmp;
870 	int peer_id;
871 	int i;
872 
873 	lockdep_assert_held(&ar->conf_mutex);
874 
875 	spin_lock_bh(&ar->data_lock);
876 	list_for_each_entry_safe(peer, tmp, &ar->peers, list) {
877 		if (peer->vdev_id != vdev_id)
878 			continue;
879 
880 		ath10k_warn(ar, "removing stale peer %pM from vdev_id %d\n",
881 			    peer->addr, vdev_id);
882 
883 		for_each_set_bit(peer_id, peer->peer_ids,
884 				 ATH10K_MAX_NUM_PEER_IDS) {
885 			ar->peer_map[peer_id] = NULL;
886 		}
887 
888 		/* Double check that peer is properly un-referenced from
889 		 * the peer_map
890 		 */
891 		for (i = 0; i < ARRAY_SIZE(ar->peer_map); i++) {
892 			if (ar->peer_map[i] == peer) {
893 				ath10k_warn(ar, "removing stale peer_map entry for %pM (ptr %pK idx %d)\n",
894 					    peer->addr, peer, i);
895 				ar->peer_map[i] = NULL;
896 			}
897 		}
898 
899 		list_del(&peer->list);
900 		kfree(peer);
901 		ar->num_peers--;
902 	}
903 	spin_unlock_bh(&ar->data_lock);
904 }
905 
906 static void ath10k_peer_cleanup_all(struct ath10k *ar)
907 {
908 	struct ath10k_peer *peer, *tmp;
909 	int i;
910 
911 	lockdep_assert_held(&ar->conf_mutex);
912 
913 	spin_lock_bh(&ar->data_lock);
914 	list_for_each_entry_safe(peer, tmp, &ar->peers, list) {
915 		list_del(&peer->list);
916 		kfree(peer);
917 	}
918 
919 	for (i = 0; i < ARRAY_SIZE(ar->peer_map); i++)
920 		ar->peer_map[i] = NULL;
921 
922 	spin_unlock_bh(&ar->data_lock);
923 
924 	ar->num_peers = 0;
925 	ar->num_stations = 0;
926 }
927 
928 static int ath10k_mac_tdls_peer_update(struct ath10k *ar, u32 vdev_id,
929 				       struct ieee80211_sta *sta,
930 				       enum wmi_tdls_peer_state state)
931 {
932 	int ret;
933 	struct wmi_tdls_peer_update_cmd_arg arg = {};
934 	struct wmi_tdls_peer_capab_arg cap = {};
935 	struct wmi_channel_arg chan_arg = {};
936 
937 	lockdep_assert_held(&ar->conf_mutex);
938 
939 	arg.vdev_id = vdev_id;
940 	arg.peer_state = state;
941 	ether_addr_copy(arg.addr, sta->addr);
942 
943 	cap.peer_max_sp = sta->max_sp;
944 	cap.peer_uapsd_queues = sta->uapsd_queues;
945 
946 	if (state == WMI_TDLS_PEER_STATE_CONNECTED &&
947 	    !sta->tdls_initiator)
948 		cap.is_peer_responder = 1;
949 
950 	ret = ath10k_wmi_tdls_peer_update(ar, &arg, &cap, &chan_arg);
951 	if (ret) {
952 		ath10k_warn(ar, "failed to update tdls peer %pM on vdev %i: %i\n",
953 			    arg.addr, vdev_id, ret);
954 		return ret;
955 	}
956 
957 	return 0;
958 }
959 
960 /************************/
961 /* Interface management */
962 /************************/
963 
964 void ath10k_mac_vif_beacon_free(struct ath10k_vif *arvif)
965 {
966 	struct ath10k *ar = arvif->ar;
967 
968 	lockdep_assert_held(&ar->data_lock);
969 
970 	if (!arvif->beacon)
971 		return;
972 
973 	if (!arvif->beacon_buf)
974 		dma_unmap_single(ar->dev, ATH10K_SKB_CB(arvif->beacon)->paddr,
975 				 arvif->beacon->len, DMA_TO_DEVICE);
976 
977 	if (WARN_ON(arvif->beacon_state != ATH10K_BEACON_SCHEDULED &&
978 		    arvif->beacon_state != ATH10K_BEACON_SENT))
979 		return;
980 
981 	dev_kfree_skb_any(arvif->beacon);
982 
983 	arvif->beacon = NULL;
984 	arvif->beacon_state = ATH10K_BEACON_SCHEDULED;
985 }
986 
987 static void ath10k_mac_vif_beacon_cleanup(struct ath10k_vif *arvif)
988 {
989 	struct ath10k *ar = arvif->ar;
990 
991 	lockdep_assert_held(&ar->data_lock);
992 
993 	ath10k_mac_vif_beacon_free(arvif);
994 
995 	if (arvif->beacon_buf) {
996 		if (ar->bus_param.dev_type == ATH10K_DEV_TYPE_HL)
997 			kfree(arvif->beacon_buf);
998 		else
999 			dma_free_coherent(ar->dev, IEEE80211_MAX_FRAME_LEN,
1000 					  arvif->beacon_buf,
1001 					  arvif->beacon_paddr);
1002 		arvif->beacon_buf = NULL;
1003 	}
1004 }
1005 
1006 static inline int ath10k_vdev_setup_sync(struct ath10k *ar)
1007 {
1008 	unsigned long time_left;
1009 
1010 	lockdep_assert_held(&ar->conf_mutex);
1011 
1012 	if (test_bit(ATH10K_FLAG_CRASH_FLUSH, &ar->dev_flags))
1013 		return -ESHUTDOWN;
1014 
1015 	time_left = wait_for_completion_timeout(&ar->vdev_setup_done,
1016 						ATH10K_VDEV_SETUP_TIMEOUT_HZ);
1017 	if (time_left == 0)
1018 		return -ETIMEDOUT;
1019 
1020 	return ar->last_wmi_vdev_start_status;
1021 }
1022 
1023 static int ath10k_monitor_vdev_start(struct ath10k *ar, int vdev_id)
1024 {
1025 	struct cfg80211_chan_def *chandef = NULL;
1026 	struct ieee80211_channel *channel = NULL;
1027 	struct wmi_vdev_start_request_arg arg = {};
1028 	int ret = 0;
1029 
1030 	lockdep_assert_held(&ar->conf_mutex);
1031 
1032 	ieee80211_iter_chan_contexts_atomic(ar->hw,
1033 					    ath10k_mac_get_any_chandef_iter,
1034 					    &chandef);
1035 	if (WARN_ON_ONCE(!chandef))
1036 		return -ENOENT;
1037 
1038 	channel = chandef->chan;
1039 
1040 	arg.vdev_id = vdev_id;
1041 	arg.channel.freq = channel->center_freq;
1042 	arg.channel.band_center_freq1 = chandef->center_freq1;
1043 	arg.channel.band_center_freq2 = chandef->center_freq2;
1044 
1045 	/* TODO setup this dynamically, what in case we
1046 	 * don't have any vifs?
1047 	 */
1048 	arg.channel.mode = chan_to_phymode(chandef);
1049 	arg.channel.chan_radar =
1050 			!!(channel->flags & IEEE80211_CHAN_RADAR);
1051 
1052 	arg.channel.min_power = 0;
1053 	arg.channel.max_power = channel->max_power * 2;
1054 	arg.channel.max_reg_power = channel->max_reg_power * 2;
1055 	arg.channel.max_antenna_gain = channel->max_antenna_gain;
1056 
1057 	reinit_completion(&ar->vdev_setup_done);
1058 	reinit_completion(&ar->vdev_delete_done);
1059 
1060 	ret = ath10k_wmi_vdev_start(ar, &arg);
1061 	if (ret) {
1062 		ath10k_warn(ar, "failed to request monitor vdev %i start: %d\n",
1063 			    vdev_id, ret);
1064 		return ret;
1065 	}
1066 
1067 	ret = ath10k_vdev_setup_sync(ar);
1068 	if (ret) {
1069 		ath10k_warn(ar, "failed to synchronize setup for monitor vdev %i start: %d\n",
1070 			    vdev_id, ret);
1071 		return ret;
1072 	}
1073 
1074 	ret = ath10k_wmi_vdev_up(ar, vdev_id, 0, ar->mac_addr);
1075 	if (ret) {
1076 		ath10k_warn(ar, "failed to put up monitor vdev %i: %d\n",
1077 			    vdev_id, ret);
1078 		goto vdev_stop;
1079 	}
1080 
1081 	ar->monitor_vdev_id = vdev_id;
1082 
1083 	ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %i started\n",
1084 		   ar->monitor_vdev_id);
1085 	return 0;
1086 
1087 vdev_stop:
1088 	ret = ath10k_wmi_vdev_stop(ar, ar->monitor_vdev_id);
1089 	if (ret)
1090 		ath10k_warn(ar, "failed to stop monitor vdev %i after start failure: %d\n",
1091 			    ar->monitor_vdev_id, ret);
1092 
1093 	return ret;
1094 }
1095 
1096 static int ath10k_monitor_vdev_stop(struct ath10k *ar)
1097 {
1098 	int ret = 0;
1099 
1100 	lockdep_assert_held(&ar->conf_mutex);
1101 
1102 	ret = ath10k_wmi_vdev_down(ar, ar->monitor_vdev_id);
1103 	if (ret)
1104 		ath10k_warn(ar, "failed to put down monitor vdev %i: %d\n",
1105 			    ar->monitor_vdev_id, ret);
1106 
1107 	reinit_completion(&ar->vdev_setup_done);
1108 	reinit_completion(&ar->vdev_delete_done);
1109 
1110 	ret = ath10k_wmi_vdev_stop(ar, ar->monitor_vdev_id);
1111 	if (ret)
1112 		ath10k_warn(ar, "failed to request monitor vdev %i stop: %d\n",
1113 			    ar->monitor_vdev_id, ret);
1114 
1115 	ret = ath10k_vdev_setup_sync(ar);
1116 	if (ret)
1117 		ath10k_warn(ar, "failed to synchronize monitor vdev %i stop: %d\n",
1118 			    ar->monitor_vdev_id, ret);
1119 
1120 	ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %i stopped\n",
1121 		   ar->monitor_vdev_id);
1122 	return ret;
1123 }
1124 
1125 static int ath10k_monitor_vdev_create(struct ath10k *ar)
1126 {
1127 	int bit, ret = 0;
1128 
1129 	lockdep_assert_held(&ar->conf_mutex);
1130 
1131 	if (ar->free_vdev_map == 0) {
1132 		ath10k_warn(ar, "failed to find free vdev id for monitor vdev\n");
1133 		return -ENOMEM;
1134 	}
1135 
1136 	bit = __ffs64(ar->free_vdev_map);
1137 
1138 	ar->monitor_vdev_id = bit;
1139 
1140 	ret = ath10k_wmi_vdev_create(ar, ar->monitor_vdev_id,
1141 				     WMI_VDEV_TYPE_MONITOR,
1142 				     0, ar->mac_addr);
1143 	if (ret) {
1144 		ath10k_warn(ar, "failed to request monitor vdev %i creation: %d\n",
1145 			    ar->monitor_vdev_id, ret);
1146 		return ret;
1147 	}
1148 
1149 	ar->free_vdev_map &= ~(1LL << ar->monitor_vdev_id);
1150 	ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %d created\n",
1151 		   ar->monitor_vdev_id);
1152 
1153 	return 0;
1154 }
1155 
1156 static int ath10k_monitor_vdev_delete(struct ath10k *ar)
1157 {
1158 	int ret = 0;
1159 
1160 	lockdep_assert_held(&ar->conf_mutex);
1161 
1162 	ret = ath10k_wmi_vdev_delete(ar, ar->monitor_vdev_id);
1163 	if (ret) {
1164 		ath10k_warn(ar, "failed to request wmi monitor vdev %i removal: %d\n",
1165 			    ar->monitor_vdev_id, ret);
1166 		return ret;
1167 	}
1168 
1169 	ar->free_vdev_map |= 1LL << ar->monitor_vdev_id;
1170 
1171 	ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %d deleted\n",
1172 		   ar->monitor_vdev_id);
1173 	return ret;
1174 }
1175 
1176 static int ath10k_monitor_start(struct ath10k *ar)
1177 {
1178 	int ret;
1179 
1180 	lockdep_assert_held(&ar->conf_mutex);
1181 
1182 	ret = ath10k_monitor_vdev_create(ar);
1183 	if (ret) {
1184 		ath10k_warn(ar, "failed to create monitor vdev: %d\n", ret);
1185 		return ret;
1186 	}
1187 
1188 	ret = ath10k_monitor_vdev_start(ar, ar->monitor_vdev_id);
1189 	if (ret) {
1190 		ath10k_warn(ar, "failed to start monitor vdev: %d\n", ret);
1191 		ath10k_monitor_vdev_delete(ar);
1192 		return ret;
1193 	}
1194 
1195 	ar->monitor_started = true;
1196 	ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor started\n");
1197 
1198 	return 0;
1199 }
1200 
1201 static int ath10k_monitor_stop(struct ath10k *ar)
1202 {
1203 	int ret;
1204 
1205 	lockdep_assert_held(&ar->conf_mutex);
1206 
1207 	ret = ath10k_monitor_vdev_stop(ar);
1208 	if (ret) {
1209 		ath10k_warn(ar, "failed to stop monitor vdev: %d\n", ret);
1210 		return ret;
1211 	}
1212 
1213 	ret = ath10k_monitor_vdev_delete(ar);
1214 	if (ret) {
1215 		ath10k_warn(ar, "failed to delete monitor vdev: %d\n", ret);
1216 		return ret;
1217 	}
1218 
1219 	ar->monitor_started = false;
1220 	ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor stopped\n");
1221 
1222 	return 0;
1223 }
1224 
1225 static bool ath10k_mac_monitor_vdev_is_needed(struct ath10k *ar)
1226 {
1227 	int num_ctx;
1228 
1229 	/* At least one chanctx is required to derive a channel to start
1230 	 * monitor vdev on.
1231 	 */
1232 	num_ctx = ath10k_mac_num_chanctxs(ar);
1233 	if (num_ctx == 0)
1234 		return false;
1235 
1236 	/* If there's already an existing special monitor interface then don't
1237 	 * bother creating another monitor vdev.
1238 	 */
1239 	if (ar->monitor_arvif)
1240 		return false;
1241 
1242 	return ar->monitor ||
1243 	       (!test_bit(ATH10K_FW_FEATURE_ALLOWS_MESH_BCAST,
1244 			  ar->running_fw->fw_file.fw_features) &&
1245 		(ar->filter_flags & FIF_OTHER_BSS)) ||
1246 	       test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
1247 }
1248 
1249 static bool ath10k_mac_monitor_vdev_is_allowed(struct ath10k *ar)
1250 {
1251 	int num_ctx;
1252 
1253 	num_ctx = ath10k_mac_num_chanctxs(ar);
1254 
1255 	/* FIXME: Current interface combinations and cfg80211/mac80211 code
1256 	 * shouldn't allow this but make sure to prevent handling the following
1257 	 * case anyway since multi-channel DFS hasn't been tested at all.
1258 	 */
1259 	if (test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags) && num_ctx > 1)
1260 		return false;
1261 
1262 	return true;
1263 }
1264 
1265 static int ath10k_monitor_recalc(struct ath10k *ar)
1266 {
1267 	bool needed;
1268 	bool allowed;
1269 	int ret;
1270 
1271 	lockdep_assert_held(&ar->conf_mutex);
1272 
1273 	needed = ath10k_mac_monitor_vdev_is_needed(ar);
1274 	allowed = ath10k_mac_monitor_vdev_is_allowed(ar);
1275 
1276 	ath10k_dbg(ar, ATH10K_DBG_MAC,
1277 		   "mac monitor recalc started? %d needed? %d allowed? %d\n",
1278 		   ar->monitor_started, needed, allowed);
1279 
1280 	if (WARN_ON(needed && !allowed)) {
1281 		if (ar->monitor_started) {
1282 			ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor stopping disallowed monitor\n");
1283 
1284 			ret = ath10k_monitor_stop(ar);
1285 			if (ret)
1286 				ath10k_warn(ar, "failed to stop disallowed monitor: %d\n",
1287 					    ret);
1288 				/* not serious */
1289 		}
1290 
1291 		return -EPERM;
1292 	}
1293 
1294 	if (needed == ar->monitor_started)
1295 		return 0;
1296 
1297 	if (needed)
1298 		return ath10k_monitor_start(ar);
1299 	else
1300 		return ath10k_monitor_stop(ar);
1301 }
1302 
1303 static bool ath10k_mac_can_set_cts_prot(struct ath10k_vif *arvif)
1304 {
1305 	struct ath10k *ar = arvif->ar;
1306 
1307 	lockdep_assert_held(&ar->conf_mutex);
1308 
1309 	if (!arvif->is_started) {
1310 		ath10k_dbg(ar, ATH10K_DBG_MAC, "defer cts setup, vdev is not ready yet\n");
1311 		return false;
1312 	}
1313 
1314 	return true;
1315 }
1316 
1317 static int ath10k_mac_set_cts_prot(struct ath10k_vif *arvif)
1318 {
1319 	struct ath10k *ar = arvif->ar;
1320 	u32 vdev_param;
1321 
1322 	lockdep_assert_held(&ar->conf_mutex);
1323 
1324 	vdev_param = ar->wmi.vdev_param->protection_mode;
1325 
1326 	ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d cts_protection %d\n",
1327 		   arvif->vdev_id, arvif->use_cts_prot);
1328 
1329 	return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
1330 					 arvif->use_cts_prot ? 1 : 0);
1331 }
1332 
1333 static int ath10k_recalc_rtscts_prot(struct ath10k_vif *arvif)
1334 {
1335 	struct ath10k *ar = arvif->ar;
1336 	u32 vdev_param, rts_cts = 0;
1337 
1338 	lockdep_assert_held(&ar->conf_mutex);
1339 
1340 	vdev_param = ar->wmi.vdev_param->enable_rtscts;
1341 
1342 	rts_cts |= SM(WMI_RTSCTS_ENABLED, WMI_RTSCTS_SET);
1343 
1344 	if (arvif->num_legacy_stations > 0)
1345 		rts_cts |= SM(WMI_RTSCTS_ACROSS_SW_RETRIES,
1346 			      WMI_RTSCTS_PROFILE);
1347 	else
1348 		rts_cts |= SM(WMI_RTSCTS_FOR_SECOND_RATESERIES,
1349 			      WMI_RTSCTS_PROFILE);
1350 
1351 	ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d recalc rts/cts prot %d\n",
1352 		   arvif->vdev_id, rts_cts);
1353 
1354 	return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
1355 					 rts_cts);
1356 }
1357 
1358 static int ath10k_start_cac(struct ath10k *ar)
1359 {
1360 	int ret;
1361 
1362 	lockdep_assert_held(&ar->conf_mutex);
1363 
1364 	set_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
1365 
1366 	ret = ath10k_monitor_recalc(ar);
1367 	if (ret) {
1368 		ath10k_warn(ar, "failed to start monitor (cac): %d\n", ret);
1369 		clear_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
1370 		return ret;
1371 	}
1372 
1373 	ath10k_dbg(ar, ATH10K_DBG_MAC, "mac cac start monitor vdev %d\n",
1374 		   ar->monitor_vdev_id);
1375 
1376 	return 0;
1377 }
1378 
1379 static int ath10k_stop_cac(struct ath10k *ar)
1380 {
1381 	lockdep_assert_held(&ar->conf_mutex);
1382 
1383 	/* CAC is not running - do nothing */
1384 	if (!test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags))
1385 		return 0;
1386 
1387 	clear_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
1388 	ath10k_monitor_stop(ar);
1389 
1390 	ath10k_dbg(ar, ATH10K_DBG_MAC, "mac cac finished\n");
1391 
1392 	return 0;
1393 }
1394 
1395 static void ath10k_mac_has_radar_iter(struct ieee80211_hw *hw,
1396 				      struct ieee80211_chanctx_conf *conf,
1397 				      void *data)
1398 {
1399 	bool *ret = data;
1400 
1401 	if (!*ret && conf->radar_enabled)
1402 		*ret = true;
1403 }
1404 
1405 static bool ath10k_mac_has_radar_enabled(struct ath10k *ar)
1406 {
1407 	bool has_radar = false;
1408 
1409 	ieee80211_iter_chan_contexts_atomic(ar->hw,
1410 					    ath10k_mac_has_radar_iter,
1411 					    &has_radar);
1412 
1413 	return has_radar;
1414 }
1415 
1416 static void ath10k_recalc_radar_detection(struct ath10k *ar)
1417 {
1418 	int ret;
1419 
1420 	lockdep_assert_held(&ar->conf_mutex);
1421 
1422 	ath10k_stop_cac(ar);
1423 
1424 	if (!ath10k_mac_has_radar_enabled(ar))
1425 		return;
1426 
1427 	if (ar->num_started_vdevs > 0)
1428 		return;
1429 
1430 	ret = ath10k_start_cac(ar);
1431 	if (ret) {
1432 		/*
1433 		 * Not possible to start CAC on current channel so starting
1434 		 * radiation is not allowed, make this channel DFS_UNAVAILABLE
1435 		 * by indicating that radar was detected.
1436 		 */
1437 		ath10k_warn(ar, "failed to start CAC: %d\n", ret);
1438 		ieee80211_radar_detected(ar->hw);
1439 	}
1440 }
1441 
1442 static int ath10k_vdev_stop(struct ath10k_vif *arvif)
1443 {
1444 	struct ath10k *ar = arvif->ar;
1445 	int ret;
1446 
1447 	lockdep_assert_held(&ar->conf_mutex);
1448 
1449 	reinit_completion(&ar->vdev_setup_done);
1450 	reinit_completion(&ar->vdev_delete_done);
1451 
1452 	ret = ath10k_wmi_vdev_stop(ar, arvif->vdev_id);
1453 	if (ret) {
1454 		ath10k_warn(ar, "failed to stop WMI vdev %i: %d\n",
1455 			    arvif->vdev_id, ret);
1456 		return ret;
1457 	}
1458 
1459 	ret = ath10k_vdev_setup_sync(ar);
1460 	if (ret) {
1461 		ath10k_warn(ar, "failed to synchronize setup for vdev %i: %d\n",
1462 			    arvif->vdev_id, ret);
1463 		return ret;
1464 	}
1465 
1466 	WARN_ON(ar->num_started_vdevs == 0);
1467 
1468 	if (ar->num_started_vdevs != 0) {
1469 		ar->num_started_vdevs--;
1470 		ath10k_recalc_radar_detection(ar);
1471 	}
1472 
1473 	return ret;
1474 }
1475 
1476 static int ath10k_vdev_start_restart(struct ath10k_vif *arvif,
1477 				     const struct cfg80211_chan_def *chandef,
1478 				     bool restart)
1479 {
1480 	struct ath10k *ar = arvif->ar;
1481 	struct wmi_vdev_start_request_arg arg = {};
1482 	int ret = 0;
1483 
1484 	lockdep_assert_held(&ar->conf_mutex);
1485 
1486 	reinit_completion(&ar->vdev_setup_done);
1487 	reinit_completion(&ar->vdev_delete_done);
1488 
1489 	arg.vdev_id = arvif->vdev_id;
1490 	arg.dtim_period = arvif->dtim_period;
1491 	arg.bcn_intval = arvif->beacon_interval;
1492 
1493 	arg.channel.freq = chandef->chan->center_freq;
1494 	arg.channel.band_center_freq1 = chandef->center_freq1;
1495 	arg.channel.band_center_freq2 = chandef->center_freq2;
1496 	arg.channel.mode = chan_to_phymode(chandef);
1497 
1498 	arg.channel.min_power = 0;
1499 	arg.channel.max_power = chandef->chan->max_power * 2;
1500 	arg.channel.max_reg_power = chandef->chan->max_reg_power * 2;
1501 	arg.channel.max_antenna_gain = chandef->chan->max_antenna_gain;
1502 
1503 	if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
1504 		arg.ssid = arvif->u.ap.ssid;
1505 		arg.ssid_len = arvif->u.ap.ssid_len;
1506 		arg.hidden_ssid = arvif->u.ap.hidden_ssid;
1507 
1508 		/* For now allow DFS for AP mode */
1509 		arg.channel.chan_radar =
1510 			!!(chandef->chan->flags & IEEE80211_CHAN_RADAR);
1511 	} else if (arvif->vdev_type == WMI_VDEV_TYPE_IBSS) {
1512 		arg.ssid = arvif->vif->cfg.ssid;
1513 		arg.ssid_len = arvif->vif->cfg.ssid_len;
1514 	}
1515 
1516 	ath10k_dbg(ar, ATH10K_DBG_MAC,
1517 		   "mac vdev %d start center_freq %d phymode %s\n",
1518 		   arg.vdev_id, arg.channel.freq,
1519 		   ath10k_wmi_phymode_str(arg.channel.mode));
1520 
1521 	if (restart)
1522 		ret = ath10k_wmi_vdev_restart(ar, &arg);
1523 	else
1524 		ret = ath10k_wmi_vdev_start(ar, &arg);
1525 
1526 	if (ret) {
1527 		ath10k_warn(ar, "failed to start WMI vdev %i: %d\n",
1528 			    arg.vdev_id, ret);
1529 		return ret;
1530 	}
1531 
1532 	ret = ath10k_vdev_setup_sync(ar);
1533 	if (ret) {
1534 		ath10k_warn(ar,
1535 			    "failed to synchronize setup for vdev %i restart %d: %d\n",
1536 			    arg.vdev_id, restart, ret);
1537 		return ret;
1538 	}
1539 
1540 	ar->num_started_vdevs++;
1541 	ath10k_recalc_radar_detection(ar);
1542 
1543 	return ret;
1544 }
1545 
1546 static int ath10k_vdev_start(struct ath10k_vif *arvif,
1547 			     const struct cfg80211_chan_def *def)
1548 {
1549 	return ath10k_vdev_start_restart(arvif, def, false);
1550 }
1551 
1552 static int ath10k_vdev_restart(struct ath10k_vif *arvif,
1553 			       const struct cfg80211_chan_def *def)
1554 {
1555 	return ath10k_vdev_start_restart(arvif, def, true);
1556 }
1557 
1558 static int ath10k_mac_setup_bcn_p2p_ie(struct ath10k_vif *arvif,
1559 				       struct sk_buff *bcn)
1560 {
1561 	struct ath10k *ar = arvif->ar;
1562 	struct ieee80211_mgmt *mgmt;
1563 	const u8 *p2p_ie;
1564 	int ret;
1565 
1566 	if (arvif->vif->type != NL80211_IFTYPE_AP || !arvif->vif->p2p)
1567 		return 0;
1568 
1569 	mgmt = (void *)bcn->data;
1570 	p2p_ie = cfg80211_find_vendor_ie(WLAN_OUI_WFA, WLAN_OUI_TYPE_WFA_P2P,
1571 					 mgmt->u.beacon.variable,
1572 					 bcn->len - (mgmt->u.beacon.variable -
1573 						     bcn->data));
1574 	if (!p2p_ie)
1575 		return -ENOENT;
1576 
1577 	ret = ath10k_wmi_p2p_go_bcn_ie(ar, arvif->vdev_id, p2p_ie);
1578 	if (ret) {
1579 		ath10k_warn(ar, "failed to submit p2p go bcn ie for vdev %i: %d\n",
1580 			    arvif->vdev_id, ret);
1581 		return ret;
1582 	}
1583 
1584 	return 0;
1585 }
1586 
1587 static int ath10k_mac_remove_vendor_ie(struct sk_buff *skb, unsigned int oui,
1588 				       u8 oui_type, size_t ie_offset)
1589 {
1590 	size_t len;
1591 	const u8 *next;
1592 	const u8 *end;
1593 	u8 *ie;
1594 
1595 	if (WARN_ON(skb->len < ie_offset))
1596 		return -EINVAL;
1597 
1598 	ie = (u8 *)cfg80211_find_vendor_ie(oui, oui_type,
1599 					   skb->data + ie_offset,
1600 					   skb->len - ie_offset);
1601 	if (!ie)
1602 		return -ENOENT;
1603 
1604 	len = ie[1] + 2;
1605 	end = skb->data + skb->len;
1606 	next = ie + len;
1607 
1608 	if (WARN_ON(next > end))
1609 		return -EINVAL;
1610 
1611 	memmove(ie, next, end - next);
1612 	skb_trim(skb, skb->len - len);
1613 
1614 	return 0;
1615 }
1616 
1617 static int ath10k_mac_setup_bcn_tmpl(struct ath10k_vif *arvif)
1618 {
1619 	struct ath10k *ar = arvif->ar;
1620 	struct ieee80211_hw *hw = ar->hw;
1621 	struct ieee80211_vif *vif = arvif->vif;
1622 	struct ieee80211_mutable_offsets offs = {};
1623 	struct sk_buff *bcn;
1624 	int ret;
1625 
1626 	if (!test_bit(WMI_SERVICE_BEACON_OFFLOAD, ar->wmi.svc_map))
1627 		return 0;
1628 
1629 	if (arvif->vdev_type != WMI_VDEV_TYPE_AP &&
1630 	    arvif->vdev_type != WMI_VDEV_TYPE_IBSS)
1631 		return 0;
1632 
1633 	bcn = ieee80211_beacon_get_template(hw, vif, &offs, 0);
1634 	if (!bcn) {
1635 		ath10k_warn(ar, "failed to get beacon template from mac80211\n");
1636 		return -EPERM;
1637 	}
1638 
1639 	ret = ath10k_mac_setup_bcn_p2p_ie(arvif, bcn);
1640 	if (ret) {
1641 		ath10k_warn(ar, "failed to setup p2p go bcn ie: %d\n", ret);
1642 		kfree_skb(bcn);
1643 		return ret;
1644 	}
1645 
1646 	/* P2P IE is inserted by firmware automatically (as configured above)
1647 	 * so remove it from the base beacon template to avoid duplicate P2P
1648 	 * IEs in beacon frames.
1649 	 */
1650 	ath10k_mac_remove_vendor_ie(bcn, WLAN_OUI_WFA, WLAN_OUI_TYPE_WFA_P2P,
1651 				    offsetof(struct ieee80211_mgmt,
1652 					     u.beacon.variable));
1653 
1654 	ret = ath10k_wmi_bcn_tmpl(ar, arvif->vdev_id, offs.tim_offset, bcn, 0,
1655 				  0, NULL, 0);
1656 	kfree_skb(bcn);
1657 
1658 	if (ret) {
1659 		ath10k_warn(ar, "failed to submit beacon template command: %d\n",
1660 			    ret);
1661 		return ret;
1662 	}
1663 
1664 	return 0;
1665 }
1666 
1667 static int ath10k_mac_setup_prb_tmpl(struct ath10k_vif *arvif)
1668 {
1669 	struct ath10k *ar = arvif->ar;
1670 	struct ieee80211_hw *hw = ar->hw;
1671 	struct ieee80211_vif *vif = arvif->vif;
1672 	struct sk_buff *prb;
1673 	int ret;
1674 
1675 	if (!test_bit(WMI_SERVICE_BEACON_OFFLOAD, ar->wmi.svc_map))
1676 		return 0;
1677 
1678 	if (arvif->vdev_type != WMI_VDEV_TYPE_AP)
1679 		return 0;
1680 
1681 	 /* For mesh, probe response and beacon share the same template */
1682 	if (ieee80211_vif_is_mesh(vif))
1683 		return 0;
1684 
1685 	prb = ieee80211_proberesp_get(hw, vif);
1686 	if (!prb) {
1687 		ath10k_warn(ar, "failed to get probe resp template from mac80211\n");
1688 		return -EPERM;
1689 	}
1690 
1691 	ret = ath10k_wmi_prb_tmpl(ar, arvif->vdev_id, prb);
1692 	kfree_skb(prb);
1693 
1694 	if (ret) {
1695 		ath10k_warn(ar, "failed to submit probe resp template command: %d\n",
1696 			    ret);
1697 		return ret;
1698 	}
1699 
1700 	return 0;
1701 }
1702 
1703 static int ath10k_mac_vif_fix_hidden_ssid(struct ath10k_vif *arvif)
1704 {
1705 	struct ath10k *ar = arvif->ar;
1706 	struct cfg80211_chan_def def;
1707 	int ret;
1708 
1709 	/* When originally vdev is started during assign_vif_chanctx() some
1710 	 * information is missing, notably SSID. Firmware revisions with beacon
1711 	 * offloading require the SSID to be provided during vdev (re)start to
1712 	 * handle hidden SSID properly.
1713 	 *
1714 	 * Vdev restart must be done after vdev has been both started and
1715 	 * upped. Otherwise some firmware revisions (at least 10.2) fail to
1716 	 * deliver vdev restart response event causing timeouts during vdev
1717 	 * syncing in ath10k.
1718 	 *
1719 	 * Note: The vdev down/up and template reinstallation could be skipped
1720 	 * since only wmi-tlv firmware are known to have beacon offload and
1721 	 * wmi-tlv doesn't seem to misbehave like 10.2 wrt vdev restart
1722 	 * response delivery. It's probably more robust to keep it as is.
1723 	 */
1724 	if (!test_bit(WMI_SERVICE_BEACON_OFFLOAD, ar->wmi.svc_map))
1725 		return 0;
1726 
1727 	if (WARN_ON(!arvif->is_started))
1728 		return -EINVAL;
1729 
1730 	if (WARN_ON(!arvif->is_up))
1731 		return -EINVAL;
1732 
1733 	if (WARN_ON(ath10k_mac_vif_chan(arvif->vif, &def)))
1734 		return -EINVAL;
1735 
1736 	ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id);
1737 	if (ret) {
1738 		ath10k_warn(ar, "failed to bring down ap vdev %i: %d\n",
1739 			    arvif->vdev_id, ret);
1740 		return ret;
1741 	}
1742 
1743 	/* Vdev down reset beacon & presp templates. Reinstall them. Otherwise
1744 	 * firmware will crash upon vdev up.
1745 	 */
1746 
1747 	ret = ath10k_mac_setup_bcn_tmpl(arvif);
1748 	if (ret) {
1749 		ath10k_warn(ar, "failed to update beacon template: %d\n", ret);
1750 		return ret;
1751 	}
1752 
1753 	ret = ath10k_mac_setup_prb_tmpl(arvif);
1754 	if (ret) {
1755 		ath10k_warn(ar, "failed to update presp template: %d\n", ret);
1756 		return ret;
1757 	}
1758 
1759 	ret = ath10k_vdev_restart(arvif, &def);
1760 	if (ret) {
1761 		ath10k_warn(ar, "failed to restart ap vdev %i: %d\n",
1762 			    arvif->vdev_id, ret);
1763 		return ret;
1764 	}
1765 
1766 	ret = ath10k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid,
1767 				 arvif->bssid);
1768 	if (ret) {
1769 		ath10k_warn(ar, "failed to bring up ap vdev %i: %d\n",
1770 			    arvif->vdev_id, ret);
1771 		return ret;
1772 	}
1773 
1774 	return 0;
1775 }
1776 
1777 static void ath10k_control_beaconing(struct ath10k_vif *arvif,
1778 				     struct ieee80211_bss_conf *info)
1779 {
1780 	struct ath10k *ar = arvif->ar;
1781 	int ret = 0;
1782 
1783 	lockdep_assert_held(&arvif->ar->conf_mutex);
1784 
1785 	if (!info->enable_beacon) {
1786 		ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id);
1787 		if (ret)
1788 			ath10k_warn(ar, "failed to down vdev_id %i: %d\n",
1789 				    arvif->vdev_id, ret);
1790 
1791 		arvif->is_up = false;
1792 
1793 		spin_lock_bh(&arvif->ar->data_lock);
1794 		ath10k_mac_vif_beacon_free(arvif);
1795 		spin_unlock_bh(&arvif->ar->data_lock);
1796 
1797 		return;
1798 	}
1799 
1800 	arvif->tx_seq_no = 0x1000;
1801 
1802 	arvif->aid = 0;
1803 	ether_addr_copy(arvif->bssid, info->bssid);
1804 
1805 	ret = ath10k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid,
1806 				 arvif->bssid);
1807 	if (ret) {
1808 		ath10k_warn(ar, "failed to bring up vdev %d: %i\n",
1809 			    arvif->vdev_id, ret);
1810 		return;
1811 	}
1812 
1813 	arvif->is_up = true;
1814 
1815 	ret = ath10k_mac_vif_fix_hidden_ssid(arvif);
1816 	if (ret) {
1817 		ath10k_warn(ar, "failed to fix hidden ssid for vdev %i, expect trouble: %d\n",
1818 			    arvif->vdev_id, ret);
1819 		return;
1820 	}
1821 
1822 	ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d up\n", arvif->vdev_id);
1823 }
1824 
1825 static void ath10k_control_ibss(struct ath10k_vif *arvif,
1826 				struct ieee80211_vif *vif)
1827 {
1828 	struct ath10k *ar = arvif->ar;
1829 	u32 vdev_param;
1830 	int ret = 0;
1831 
1832 	lockdep_assert_held(&arvif->ar->conf_mutex);
1833 
1834 	if (!vif->cfg.ibss_joined) {
1835 		if (is_zero_ether_addr(arvif->bssid))
1836 			return;
1837 
1838 		eth_zero_addr(arvif->bssid);
1839 
1840 		return;
1841 	}
1842 
1843 	vdev_param = arvif->ar->wmi.vdev_param->atim_window;
1844 	ret = ath10k_wmi_vdev_set_param(arvif->ar, arvif->vdev_id, vdev_param,
1845 					ATH10K_DEFAULT_ATIM);
1846 	if (ret)
1847 		ath10k_warn(ar, "failed to set IBSS ATIM for vdev %d: %d\n",
1848 			    arvif->vdev_id, ret);
1849 }
1850 
1851 static int ath10k_mac_vif_recalc_ps_wake_threshold(struct ath10k_vif *arvif)
1852 {
1853 	struct ath10k *ar = arvif->ar;
1854 	u32 param;
1855 	u32 value;
1856 	int ret;
1857 
1858 	lockdep_assert_held(&arvif->ar->conf_mutex);
1859 
1860 	if (arvif->u.sta.uapsd)
1861 		value = WMI_STA_PS_TX_WAKE_THRESHOLD_NEVER;
1862 	else
1863 		value = WMI_STA_PS_TX_WAKE_THRESHOLD_ALWAYS;
1864 
1865 	param = WMI_STA_PS_PARAM_TX_WAKE_THRESHOLD;
1866 	ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, param, value);
1867 	if (ret) {
1868 		ath10k_warn(ar, "failed to submit ps wake threshold %u on vdev %i: %d\n",
1869 			    value, arvif->vdev_id, ret);
1870 		return ret;
1871 	}
1872 
1873 	return 0;
1874 }
1875 
1876 static int ath10k_mac_vif_recalc_ps_poll_count(struct ath10k_vif *arvif)
1877 {
1878 	struct ath10k *ar = arvif->ar;
1879 	u32 param;
1880 	u32 value;
1881 	int ret;
1882 
1883 	lockdep_assert_held(&arvif->ar->conf_mutex);
1884 
1885 	if (arvif->u.sta.uapsd)
1886 		value = WMI_STA_PS_PSPOLL_COUNT_UAPSD;
1887 	else
1888 		value = WMI_STA_PS_PSPOLL_COUNT_NO_MAX;
1889 
1890 	param = WMI_STA_PS_PARAM_PSPOLL_COUNT;
1891 	ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
1892 					  param, value);
1893 	if (ret) {
1894 		ath10k_warn(ar, "failed to submit ps poll count %u on vdev %i: %d\n",
1895 			    value, arvif->vdev_id, ret);
1896 		return ret;
1897 	}
1898 
1899 	return 0;
1900 }
1901 
1902 static int ath10k_mac_num_vifs_started(struct ath10k *ar)
1903 {
1904 	struct ath10k_vif *arvif;
1905 	int num = 0;
1906 
1907 	lockdep_assert_held(&ar->conf_mutex);
1908 
1909 	list_for_each_entry(arvif, &ar->arvifs, list)
1910 		if (arvif->is_started)
1911 			num++;
1912 
1913 	return num;
1914 }
1915 
1916 static int ath10k_mac_vif_setup_ps(struct ath10k_vif *arvif)
1917 {
1918 	struct ath10k *ar = arvif->ar;
1919 	struct ieee80211_vif *vif = arvif->vif;
1920 	struct ieee80211_conf *conf = &ar->hw->conf;
1921 	enum wmi_sta_powersave_param param;
1922 	enum wmi_sta_ps_mode psmode;
1923 	int ret;
1924 	int ps_timeout;
1925 	bool enable_ps;
1926 
1927 	lockdep_assert_held(&arvif->ar->conf_mutex);
1928 
1929 	if (arvif->vif->type != NL80211_IFTYPE_STATION)
1930 		return 0;
1931 
1932 	enable_ps = arvif->ps;
1933 
1934 	if (enable_ps && ath10k_mac_num_vifs_started(ar) > 1 &&
1935 	    !test_bit(ATH10K_FW_FEATURE_MULTI_VIF_PS_SUPPORT,
1936 		      ar->running_fw->fw_file.fw_features)) {
1937 		ath10k_warn(ar, "refusing to enable ps on vdev %i: not supported by fw\n",
1938 			    arvif->vdev_id);
1939 		enable_ps = false;
1940 	}
1941 
1942 	if (!arvif->is_started) {
1943 		/* mac80211 can update vif powersave state while disconnected.
1944 		 * Firmware doesn't behave nicely and consumes more power than
1945 		 * necessary if PS is disabled on a non-started vdev. Hence
1946 		 * force-enable PS for non-running vdevs.
1947 		 */
1948 		psmode = WMI_STA_PS_MODE_ENABLED;
1949 	} else if (enable_ps) {
1950 		psmode = WMI_STA_PS_MODE_ENABLED;
1951 		param = WMI_STA_PS_PARAM_INACTIVITY_TIME;
1952 
1953 		ps_timeout = conf->dynamic_ps_timeout;
1954 		if (ps_timeout == 0) {
1955 			/* Firmware doesn't like 0 */
1956 			ps_timeout = ieee80211_tu_to_usec(
1957 				vif->bss_conf.beacon_int) / 1000;
1958 		}
1959 
1960 		ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, param,
1961 						  ps_timeout);
1962 		if (ret) {
1963 			ath10k_warn(ar, "failed to set inactivity time for vdev %d: %i\n",
1964 				    arvif->vdev_id, ret);
1965 			return ret;
1966 		}
1967 	} else {
1968 		psmode = WMI_STA_PS_MODE_DISABLED;
1969 	}
1970 
1971 	ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d psmode %s\n",
1972 		   arvif->vdev_id, psmode ? "enable" : "disable");
1973 
1974 	ret = ath10k_wmi_set_psmode(ar, arvif->vdev_id, psmode);
1975 	if (ret) {
1976 		ath10k_warn(ar, "failed to set PS Mode %d for vdev %d: %d\n",
1977 			    psmode, arvif->vdev_id, ret);
1978 		return ret;
1979 	}
1980 
1981 	return 0;
1982 }
1983 
1984 static int ath10k_mac_vif_disable_keepalive(struct ath10k_vif *arvif)
1985 {
1986 	struct ath10k *ar = arvif->ar;
1987 	struct wmi_sta_keepalive_arg arg = {};
1988 	int ret;
1989 
1990 	lockdep_assert_held(&arvif->ar->conf_mutex);
1991 
1992 	if (arvif->vdev_type != WMI_VDEV_TYPE_STA)
1993 		return 0;
1994 
1995 	if (!test_bit(WMI_SERVICE_STA_KEEP_ALIVE, ar->wmi.svc_map))
1996 		return 0;
1997 
1998 	/* Some firmware revisions have a bug and ignore the `enabled` field.
1999 	 * Instead use the interval to disable the keepalive.
2000 	 */
2001 	arg.vdev_id = arvif->vdev_id;
2002 	arg.enabled = 1;
2003 	arg.method = WMI_STA_KEEPALIVE_METHOD_NULL_FRAME;
2004 	arg.interval = WMI_STA_KEEPALIVE_INTERVAL_DISABLE;
2005 
2006 	ret = ath10k_wmi_sta_keepalive(ar, &arg);
2007 	if (ret) {
2008 		ath10k_warn(ar, "failed to submit keepalive on vdev %i: %d\n",
2009 			    arvif->vdev_id, ret);
2010 		return ret;
2011 	}
2012 
2013 	return 0;
2014 }
2015 
2016 static void ath10k_mac_vif_ap_csa_count_down(struct ath10k_vif *arvif)
2017 {
2018 	struct ath10k *ar = arvif->ar;
2019 	struct ieee80211_vif *vif = arvif->vif;
2020 	int ret;
2021 
2022 	lockdep_assert_held(&arvif->ar->conf_mutex);
2023 
2024 	if (WARN_ON(!test_bit(WMI_SERVICE_BEACON_OFFLOAD, ar->wmi.svc_map)))
2025 		return;
2026 
2027 	if (arvif->vdev_type != WMI_VDEV_TYPE_AP)
2028 		return;
2029 
2030 	if (!vif->bss_conf.csa_active)
2031 		return;
2032 
2033 	if (!arvif->is_up)
2034 		return;
2035 
2036 	if (!ieee80211_beacon_cntdwn_is_complete(vif)) {
2037 		ieee80211_beacon_update_cntdwn(vif);
2038 
2039 		ret = ath10k_mac_setup_bcn_tmpl(arvif);
2040 		if (ret)
2041 			ath10k_warn(ar, "failed to update bcn tmpl during csa: %d\n",
2042 				    ret);
2043 
2044 		ret = ath10k_mac_setup_prb_tmpl(arvif);
2045 		if (ret)
2046 			ath10k_warn(ar, "failed to update prb tmpl during csa: %d\n",
2047 				    ret);
2048 	} else {
2049 		ieee80211_csa_finish(vif);
2050 	}
2051 }
2052 
2053 static void ath10k_mac_vif_ap_csa_work(struct work_struct *work)
2054 {
2055 	struct ath10k_vif *arvif = container_of(work, struct ath10k_vif,
2056 						ap_csa_work);
2057 	struct ath10k *ar = arvif->ar;
2058 
2059 	mutex_lock(&ar->conf_mutex);
2060 	ath10k_mac_vif_ap_csa_count_down(arvif);
2061 	mutex_unlock(&ar->conf_mutex);
2062 }
2063 
2064 static void ath10k_mac_handle_beacon_iter(void *data, u8 *mac,
2065 					  struct ieee80211_vif *vif)
2066 {
2067 	struct sk_buff *skb = data;
2068 	struct ieee80211_mgmt *mgmt = (void *)skb->data;
2069 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
2070 
2071 	if (vif->type != NL80211_IFTYPE_STATION)
2072 		return;
2073 
2074 	if (!ether_addr_equal(mgmt->bssid, vif->bss_conf.bssid))
2075 		return;
2076 
2077 	cancel_delayed_work(&arvif->connection_loss_work);
2078 }
2079 
2080 void ath10k_mac_handle_beacon(struct ath10k *ar, struct sk_buff *skb)
2081 {
2082 	ieee80211_iterate_active_interfaces_atomic(ar->hw,
2083 						   ATH10K_ITER_NORMAL_FLAGS,
2084 						   ath10k_mac_handle_beacon_iter,
2085 						   skb);
2086 }
2087 
2088 static void ath10k_mac_handle_beacon_miss_iter(void *data, u8 *mac,
2089 					       struct ieee80211_vif *vif)
2090 {
2091 	u32 *vdev_id = data;
2092 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
2093 	struct ath10k *ar = arvif->ar;
2094 	struct ieee80211_hw *hw = ar->hw;
2095 
2096 	if (arvif->vdev_id != *vdev_id)
2097 		return;
2098 
2099 	if (!arvif->is_up)
2100 		return;
2101 
2102 	ieee80211_beacon_loss(vif);
2103 
2104 	/* Firmware doesn't report beacon loss events repeatedly. If AP probe
2105 	 * (done by mac80211) succeeds but beacons do not resume then it
2106 	 * doesn't make sense to continue operation. Queue connection loss work
2107 	 * which can be cancelled when beacon is received.
2108 	 */
2109 	ieee80211_queue_delayed_work(hw, &arvif->connection_loss_work,
2110 				     ATH10K_CONNECTION_LOSS_HZ);
2111 }
2112 
2113 void ath10k_mac_handle_beacon_miss(struct ath10k *ar, u32 vdev_id)
2114 {
2115 	ieee80211_iterate_active_interfaces_atomic(ar->hw,
2116 						   ATH10K_ITER_NORMAL_FLAGS,
2117 						   ath10k_mac_handle_beacon_miss_iter,
2118 						   &vdev_id);
2119 }
2120 
2121 static void ath10k_mac_vif_sta_connection_loss_work(struct work_struct *work)
2122 {
2123 	struct ath10k_vif *arvif = container_of(work, struct ath10k_vif,
2124 						connection_loss_work.work);
2125 	struct ieee80211_vif *vif = arvif->vif;
2126 
2127 	if (!arvif->is_up)
2128 		return;
2129 
2130 	ieee80211_connection_loss(vif);
2131 }
2132 
2133 /**********************/
2134 /* Station management */
2135 /**********************/
2136 
2137 static u32 ath10k_peer_assoc_h_listen_intval(struct ath10k *ar,
2138 					     struct ieee80211_vif *vif)
2139 {
2140 	/* Some firmware revisions have unstable STA powersave when listen
2141 	 * interval is set too high (e.g. 5). The symptoms are firmware doesn't
2142 	 * generate NullFunc frames properly even if buffered frames have been
2143 	 * indicated in Beacon TIM. Firmware would seldom wake up to pull
2144 	 * buffered frames. Often pinging the device from AP would simply fail.
2145 	 *
2146 	 * As a workaround set it to 1.
2147 	 */
2148 	if (vif->type == NL80211_IFTYPE_STATION)
2149 		return 1;
2150 
2151 	return ar->hw->conf.listen_interval;
2152 }
2153 
2154 static void ath10k_peer_assoc_h_basic(struct ath10k *ar,
2155 				      struct ieee80211_vif *vif,
2156 				      struct ieee80211_sta *sta,
2157 				      struct wmi_peer_assoc_complete_arg *arg)
2158 {
2159 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
2160 	u32 aid;
2161 
2162 	lockdep_assert_held(&ar->conf_mutex);
2163 
2164 	if (vif->type == NL80211_IFTYPE_STATION)
2165 		aid = vif->cfg.aid;
2166 	else
2167 		aid = sta->aid;
2168 
2169 	ether_addr_copy(arg->addr, sta->addr);
2170 	arg->vdev_id = arvif->vdev_id;
2171 	arg->peer_aid = aid;
2172 	arg->peer_flags |= arvif->ar->wmi.peer_flags->auth;
2173 	arg->peer_listen_intval = ath10k_peer_assoc_h_listen_intval(ar, vif);
2174 	arg->peer_num_spatial_streams = 1;
2175 	arg->peer_caps = vif->bss_conf.assoc_capability;
2176 }
2177 
2178 static void ath10k_peer_assoc_h_crypto(struct ath10k *ar,
2179 				       struct ieee80211_vif *vif,
2180 				       struct ieee80211_sta *sta,
2181 				       struct wmi_peer_assoc_complete_arg *arg)
2182 {
2183 	struct ieee80211_bss_conf *info = &vif->bss_conf;
2184 	struct cfg80211_chan_def def;
2185 	struct cfg80211_bss *bss;
2186 	const u8 *rsnie = NULL;
2187 	const u8 *wpaie = NULL;
2188 
2189 	lockdep_assert_held(&ar->conf_mutex);
2190 
2191 	if (WARN_ON(ath10k_mac_vif_chan(vif, &def)))
2192 		return;
2193 
2194 	bss = cfg80211_get_bss(ar->hw->wiphy, def.chan, info->bssid,
2195 			       vif->cfg.ssid_len ? vif->cfg.ssid : NULL,
2196 			       vif->cfg.ssid_len,
2197 			       IEEE80211_BSS_TYPE_ANY, IEEE80211_PRIVACY_ANY);
2198 	if (bss) {
2199 		const struct cfg80211_bss_ies *ies;
2200 
2201 		rcu_read_lock();
2202 		rsnie = ieee80211_bss_get_ie(bss, WLAN_EID_RSN);
2203 
2204 		ies = rcu_dereference(bss->ies);
2205 
2206 		wpaie = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
2207 						WLAN_OUI_TYPE_MICROSOFT_WPA,
2208 						ies->data,
2209 						ies->len);
2210 		rcu_read_unlock();
2211 		cfg80211_put_bss(ar->hw->wiphy, bss);
2212 	}
2213 
2214 	/* FIXME: base on RSN IE/WPA IE is a correct idea? */
2215 	if (rsnie || wpaie) {
2216 		ath10k_dbg(ar, ATH10K_DBG_WMI, "%s: rsn ie found\n", __func__);
2217 		arg->peer_flags |= ar->wmi.peer_flags->need_ptk_4_way;
2218 	}
2219 
2220 	if (wpaie) {
2221 		ath10k_dbg(ar, ATH10K_DBG_WMI, "%s: wpa ie found\n", __func__);
2222 		arg->peer_flags |= ar->wmi.peer_flags->need_gtk_2_way;
2223 	}
2224 
2225 	if (sta->mfp &&
2226 	    test_bit(ATH10K_FW_FEATURE_MFP_SUPPORT,
2227 		     ar->running_fw->fw_file.fw_features)) {
2228 		arg->peer_flags |= ar->wmi.peer_flags->pmf;
2229 	}
2230 }
2231 
2232 static void ath10k_peer_assoc_h_rates(struct ath10k *ar,
2233 				      struct ieee80211_vif *vif,
2234 				      struct ieee80211_sta *sta,
2235 				      struct wmi_peer_assoc_complete_arg *arg)
2236 {
2237 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
2238 	struct wmi_rate_set_arg *rateset = &arg->peer_legacy_rates;
2239 	struct cfg80211_chan_def def;
2240 	const struct ieee80211_supported_band *sband;
2241 	const struct ieee80211_rate *rates;
2242 	enum nl80211_band band;
2243 	u32 ratemask;
2244 	u8 rate;
2245 	int i;
2246 
2247 	lockdep_assert_held(&ar->conf_mutex);
2248 
2249 	if (WARN_ON(ath10k_mac_vif_chan(vif, &def)))
2250 		return;
2251 
2252 	band = def.chan->band;
2253 	sband = ar->hw->wiphy->bands[band];
2254 	ratemask = sta->deflink.supp_rates[band];
2255 	ratemask &= arvif->bitrate_mask.control[band].legacy;
2256 	rates = sband->bitrates;
2257 
2258 	rateset->num_rates = 0;
2259 
2260 	for (i = 0; i < 32; i++, ratemask >>= 1, rates++) {
2261 		if (!(ratemask & 1))
2262 			continue;
2263 
2264 		rate = ath10k_mac_bitrate_to_rate(rates->bitrate);
2265 		rateset->rates[rateset->num_rates] = rate;
2266 		rateset->num_rates++;
2267 	}
2268 }
2269 
2270 static bool
2271 ath10k_peer_assoc_h_ht_masked(const u8 ht_mcs_mask[IEEE80211_HT_MCS_MASK_LEN])
2272 {
2273 	int nss;
2274 
2275 	for (nss = 0; nss < IEEE80211_HT_MCS_MASK_LEN; nss++)
2276 		if (ht_mcs_mask[nss])
2277 			return false;
2278 
2279 	return true;
2280 }
2281 
2282 static bool
2283 ath10k_peer_assoc_h_vht_masked(const u16 vht_mcs_mask[NL80211_VHT_NSS_MAX])
2284 {
2285 	int nss;
2286 
2287 	for (nss = 0; nss < NL80211_VHT_NSS_MAX; nss++)
2288 		if (vht_mcs_mask[nss])
2289 			return false;
2290 
2291 	return true;
2292 }
2293 
2294 static void ath10k_peer_assoc_h_ht(struct ath10k *ar,
2295 				   struct ieee80211_vif *vif,
2296 				   struct ieee80211_sta *sta,
2297 				   struct wmi_peer_assoc_complete_arg *arg)
2298 {
2299 	const struct ieee80211_sta_ht_cap *ht_cap = &sta->deflink.ht_cap;
2300 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
2301 	struct cfg80211_chan_def def;
2302 	enum nl80211_band band;
2303 	const u8 *ht_mcs_mask;
2304 	const u16 *vht_mcs_mask;
2305 	int i, n;
2306 	u8 max_nss;
2307 	u32 stbc;
2308 
2309 	lockdep_assert_held(&ar->conf_mutex);
2310 
2311 	if (WARN_ON(ath10k_mac_vif_chan(vif, &def)))
2312 		return;
2313 
2314 	if (!ht_cap->ht_supported)
2315 		return;
2316 
2317 	band = def.chan->band;
2318 	ht_mcs_mask = arvif->bitrate_mask.control[band].ht_mcs;
2319 	vht_mcs_mask = arvif->bitrate_mask.control[band].vht_mcs;
2320 
2321 	if (ath10k_peer_assoc_h_ht_masked(ht_mcs_mask) &&
2322 	    ath10k_peer_assoc_h_vht_masked(vht_mcs_mask))
2323 		return;
2324 
2325 	arg->peer_flags |= ar->wmi.peer_flags->ht;
2326 	arg->peer_max_mpdu = (1 << (IEEE80211_HT_MAX_AMPDU_FACTOR +
2327 				    ht_cap->ampdu_factor)) - 1;
2328 
2329 	arg->peer_mpdu_density =
2330 		ath10k_parse_mpdudensity(ht_cap->ampdu_density);
2331 
2332 	arg->peer_ht_caps = ht_cap->cap;
2333 	arg->peer_rate_caps |= WMI_RC_HT_FLAG;
2334 
2335 	if (ht_cap->cap & IEEE80211_HT_CAP_LDPC_CODING)
2336 		arg->peer_flags |= ar->wmi.peer_flags->ldbc;
2337 
2338 	if (sta->deflink.bandwidth >= IEEE80211_STA_RX_BW_40) {
2339 		arg->peer_flags |= ar->wmi.peer_flags->bw40;
2340 		arg->peer_rate_caps |= WMI_RC_CW40_FLAG;
2341 	}
2342 
2343 	if (arvif->bitrate_mask.control[band].gi != NL80211_TXRATE_FORCE_LGI) {
2344 		if (ht_cap->cap & IEEE80211_HT_CAP_SGI_20)
2345 			arg->peer_rate_caps |= WMI_RC_SGI_FLAG;
2346 
2347 		if (ht_cap->cap & IEEE80211_HT_CAP_SGI_40)
2348 			arg->peer_rate_caps |= WMI_RC_SGI_FLAG;
2349 	}
2350 
2351 	if (ht_cap->cap & IEEE80211_HT_CAP_TX_STBC) {
2352 		arg->peer_rate_caps |= WMI_RC_TX_STBC_FLAG;
2353 		arg->peer_flags |= ar->wmi.peer_flags->stbc;
2354 	}
2355 
2356 	if (ht_cap->cap & IEEE80211_HT_CAP_RX_STBC) {
2357 		stbc = ht_cap->cap & IEEE80211_HT_CAP_RX_STBC;
2358 		stbc = stbc >> IEEE80211_HT_CAP_RX_STBC_SHIFT;
2359 		stbc = stbc << WMI_RC_RX_STBC_FLAG_S;
2360 		arg->peer_rate_caps |= stbc;
2361 		arg->peer_flags |= ar->wmi.peer_flags->stbc;
2362 	}
2363 
2364 	if (ht_cap->mcs.rx_mask[1] && ht_cap->mcs.rx_mask[2])
2365 		arg->peer_rate_caps |= WMI_RC_TS_FLAG;
2366 	else if (ht_cap->mcs.rx_mask[1])
2367 		arg->peer_rate_caps |= WMI_RC_DS_FLAG;
2368 
2369 	for (i = 0, n = 0, max_nss = 0; i < IEEE80211_HT_MCS_MASK_LEN * 8; i++)
2370 		if ((ht_cap->mcs.rx_mask[i / 8] & BIT(i % 8)) &&
2371 		    (ht_mcs_mask[i / 8] & BIT(i % 8))) {
2372 			max_nss = (i / 8) + 1;
2373 			arg->peer_ht_rates.rates[n++] = i;
2374 		}
2375 
2376 	/*
2377 	 * This is a workaround for HT-enabled STAs which break the spec
2378 	 * and have no HT capabilities RX mask (no HT RX MCS map).
2379 	 *
2380 	 * As per spec, in section 20.3.5 Modulation and coding scheme (MCS),
2381 	 * MCS 0 through 7 are mandatory in 20MHz with 800 ns GI at all STAs.
2382 	 *
2383 	 * Firmware asserts if such situation occurs.
2384 	 */
2385 	if (n == 0) {
2386 		arg->peer_ht_rates.num_rates = 8;
2387 		for (i = 0; i < arg->peer_ht_rates.num_rates; i++)
2388 			arg->peer_ht_rates.rates[i] = i;
2389 	} else {
2390 		arg->peer_ht_rates.num_rates = n;
2391 		arg->peer_num_spatial_streams = min(sta->deflink.rx_nss,
2392 						    max_nss);
2393 	}
2394 
2395 	ath10k_dbg(ar, ATH10K_DBG_MAC, "mac ht peer %pM mcs cnt %d nss %d\n",
2396 		   arg->addr,
2397 		   arg->peer_ht_rates.num_rates,
2398 		   arg->peer_num_spatial_streams);
2399 }
2400 
2401 static int ath10k_peer_assoc_qos_ap(struct ath10k *ar,
2402 				    struct ath10k_vif *arvif,
2403 				    struct ieee80211_sta *sta)
2404 {
2405 	u32 uapsd = 0;
2406 	u32 max_sp = 0;
2407 	int ret = 0;
2408 
2409 	lockdep_assert_held(&ar->conf_mutex);
2410 
2411 	if (sta->wme && sta->uapsd_queues) {
2412 		ath10k_dbg(ar, ATH10K_DBG_MAC, "mac uapsd_queues 0x%x max_sp %d\n",
2413 			   sta->uapsd_queues, sta->max_sp);
2414 
2415 		if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_VO)
2416 			uapsd |= WMI_AP_PS_UAPSD_AC3_DELIVERY_EN |
2417 				 WMI_AP_PS_UAPSD_AC3_TRIGGER_EN;
2418 		if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_VI)
2419 			uapsd |= WMI_AP_PS_UAPSD_AC2_DELIVERY_EN |
2420 				 WMI_AP_PS_UAPSD_AC2_TRIGGER_EN;
2421 		if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_BK)
2422 			uapsd |= WMI_AP_PS_UAPSD_AC1_DELIVERY_EN |
2423 				 WMI_AP_PS_UAPSD_AC1_TRIGGER_EN;
2424 		if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_BE)
2425 			uapsd |= WMI_AP_PS_UAPSD_AC0_DELIVERY_EN |
2426 				 WMI_AP_PS_UAPSD_AC0_TRIGGER_EN;
2427 
2428 		if (sta->max_sp < MAX_WMI_AP_PS_PEER_PARAM_MAX_SP)
2429 			max_sp = sta->max_sp;
2430 
2431 		ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id,
2432 						 sta->addr,
2433 						 WMI_AP_PS_PEER_PARAM_UAPSD,
2434 						 uapsd);
2435 		if (ret) {
2436 			ath10k_warn(ar, "failed to set ap ps peer param uapsd for vdev %i: %d\n",
2437 				    arvif->vdev_id, ret);
2438 			return ret;
2439 		}
2440 
2441 		ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id,
2442 						 sta->addr,
2443 						 WMI_AP_PS_PEER_PARAM_MAX_SP,
2444 						 max_sp);
2445 		if (ret) {
2446 			ath10k_warn(ar, "failed to set ap ps peer param max sp for vdev %i: %d\n",
2447 				    arvif->vdev_id, ret);
2448 			return ret;
2449 		}
2450 
2451 		/* TODO setup this based on STA listen interval and
2452 		 * beacon interval. Currently we don't know
2453 		 * sta->listen_interval - mac80211 patch required.
2454 		 * Currently use 10 seconds
2455 		 */
2456 		ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id, sta->addr,
2457 						 WMI_AP_PS_PEER_PARAM_AGEOUT_TIME,
2458 						 10);
2459 		if (ret) {
2460 			ath10k_warn(ar, "failed to set ap ps peer param ageout time for vdev %i: %d\n",
2461 				    arvif->vdev_id, ret);
2462 			return ret;
2463 		}
2464 	}
2465 
2466 	return 0;
2467 }
2468 
2469 static u16
2470 ath10k_peer_assoc_h_vht_limit(u16 tx_mcs_set,
2471 			      const u16 vht_mcs_limit[NL80211_VHT_NSS_MAX])
2472 {
2473 	int idx_limit;
2474 	int nss;
2475 	u16 mcs_map;
2476 	u16 mcs;
2477 
2478 	for (nss = 0; nss < NL80211_VHT_NSS_MAX; nss++) {
2479 		mcs_map = ath10k_mac_get_max_vht_mcs_map(tx_mcs_set, nss) &
2480 			  vht_mcs_limit[nss];
2481 
2482 		if (mcs_map)
2483 			idx_limit = fls(mcs_map) - 1;
2484 		else
2485 			idx_limit = -1;
2486 
2487 		switch (idx_limit) {
2488 		case 0:
2489 		case 1:
2490 		case 2:
2491 		case 3:
2492 		case 4:
2493 		case 5:
2494 		case 6:
2495 		default:
2496 			/* see ath10k_mac_can_set_bitrate_mask() */
2497 			WARN_ON(1);
2498 			fallthrough;
2499 		case -1:
2500 			mcs = IEEE80211_VHT_MCS_NOT_SUPPORTED;
2501 			break;
2502 		case 7:
2503 			mcs = IEEE80211_VHT_MCS_SUPPORT_0_7;
2504 			break;
2505 		case 8:
2506 			mcs = IEEE80211_VHT_MCS_SUPPORT_0_8;
2507 			break;
2508 		case 9:
2509 			mcs = IEEE80211_VHT_MCS_SUPPORT_0_9;
2510 			break;
2511 		}
2512 
2513 		tx_mcs_set &= ~(0x3 << (nss * 2));
2514 		tx_mcs_set |= mcs << (nss * 2);
2515 	}
2516 
2517 	return tx_mcs_set;
2518 }
2519 
2520 static u32 get_160mhz_nss_from_maxrate(int rate)
2521 {
2522 	u32 nss;
2523 
2524 	switch (rate) {
2525 	case 780:
2526 		nss = 1;
2527 		break;
2528 	case 1560:
2529 		nss = 2;
2530 		break;
2531 	case 2106:
2532 		nss = 3; /* not support MCS9 from spec*/
2533 		break;
2534 	case 3120:
2535 		nss = 4;
2536 		break;
2537 	default:
2538 		 nss = 1;
2539 	}
2540 
2541 	return nss;
2542 }
2543 
2544 static void ath10k_peer_assoc_h_vht(struct ath10k *ar,
2545 				    struct ieee80211_vif *vif,
2546 				    struct ieee80211_sta *sta,
2547 				    struct wmi_peer_assoc_complete_arg *arg)
2548 {
2549 	const struct ieee80211_sta_vht_cap *vht_cap = &sta->deflink.vht_cap;
2550 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
2551 	struct ath10k_hw_params *hw = &ar->hw_params;
2552 	struct cfg80211_chan_def def;
2553 	enum nl80211_band band;
2554 	const u16 *vht_mcs_mask;
2555 	u8 ampdu_factor;
2556 	u8 max_nss, vht_mcs;
2557 	int i;
2558 
2559 	if (WARN_ON(ath10k_mac_vif_chan(vif, &def)))
2560 		return;
2561 
2562 	if (!vht_cap->vht_supported)
2563 		return;
2564 
2565 	band = def.chan->band;
2566 	vht_mcs_mask = arvif->bitrate_mask.control[band].vht_mcs;
2567 
2568 	if (ath10k_peer_assoc_h_vht_masked(vht_mcs_mask))
2569 		return;
2570 
2571 	arg->peer_flags |= ar->wmi.peer_flags->vht;
2572 
2573 	if (def.chan->band == NL80211_BAND_2GHZ)
2574 		arg->peer_flags |= ar->wmi.peer_flags->vht_2g;
2575 
2576 	arg->peer_vht_caps = vht_cap->cap;
2577 
2578 	ampdu_factor = (vht_cap->cap &
2579 			IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK) >>
2580 		       IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_SHIFT;
2581 
2582 	/* Workaround: Some Netgear/Linksys 11ac APs set Rx A-MPDU factor to
2583 	 * zero in VHT IE. Using it would result in degraded throughput.
2584 	 * arg->peer_max_mpdu at this point contains HT max_mpdu so keep
2585 	 * it if VHT max_mpdu is smaller.
2586 	 */
2587 	arg->peer_max_mpdu = max(arg->peer_max_mpdu,
2588 				 (1U << (IEEE80211_HT_MAX_AMPDU_FACTOR +
2589 					ampdu_factor)) - 1);
2590 
2591 	if (sta->deflink.bandwidth == IEEE80211_STA_RX_BW_80)
2592 		arg->peer_flags |= ar->wmi.peer_flags->bw80;
2593 
2594 	if (sta->deflink.bandwidth == IEEE80211_STA_RX_BW_160)
2595 		arg->peer_flags |= ar->wmi.peer_flags->bw160;
2596 
2597 	/* Calculate peer NSS capability from VHT capabilities if STA
2598 	 * supports VHT.
2599 	 */
2600 	for (i = 0, max_nss = 0, vht_mcs = 0; i < NL80211_VHT_NSS_MAX; i++) {
2601 		vht_mcs = __le16_to_cpu(vht_cap->vht_mcs.rx_mcs_map) >>
2602 			  (2 * i) & 3;
2603 
2604 		if ((vht_mcs != IEEE80211_VHT_MCS_NOT_SUPPORTED) &&
2605 		    vht_mcs_mask[i])
2606 			max_nss = i + 1;
2607 	}
2608 	arg->peer_num_spatial_streams = min(sta->deflink.rx_nss, max_nss);
2609 	arg->peer_vht_rates.rx_max_rate =
2610 		__le16_to_cpu(vht_cap->vht_mcs.rx_highest);
2611 	arg->peer_vht_rates.rx_mcs_set =
2612 		__le16_to_cpu(vht_cap->vht_mcs.rx_mcs_map);
2613 	arg->peer_vht_rates.tx_max_rate =
2614 		__le16_to_cpu(vht_cap->vht_mcs.tx_highest);
2615 	arg->peer_vht_rates.tx_mcs_set = ath10k_peer_assoc_h_vht_limit(
2616 		__le16_to_cpu(vht_cap->vht_mcs.tx_mcs_map), vht_mcs_mask);
2617 
2618 	/* Configure bandwidth-NSS mapping to FW
2619 	 * for the chip's tx chains setting on 160Mhz bw
2620 	 */
2621 	if (arg->peer_phymode == MODE_11AC_VHT160 ||
2622 	    arg->peer_phymode == MODE_11AC_VHT80_80) {
2623 		u32 rx_nss;
2624 		u32 max_rate;
2625 
2626 		max_rate = arg->peer_vht_rates.rx_max_rate;
2627 		rx_nss = get_160mhz_nss_from_maxrate(max_rate);
2628 
2629 		if (rx_nss == 0)
2630 			rx_nss = arg->peer_num_spatial_streams;
2631 		else
2632 			rx_nss = min(arg->peer_num_spatial_streams, rx_nss);
2633 
2634 		max_rate = hw->vht160_mcs_tx_highest;
2635 		rx_nss = min(rx_nss, get_160mhz_nss_from_maxrate(max_rate));
2636 
2637 		arg->peer_bw_rxnss_override =
2638 			FIELD_PREP(WMI_PEER_NSS_MAP_ENABLE, 1) |
2639 			FIELD_PREP(WMI_PEER_NSS_160MHZ_MASK, (rx_nss - 1));
2640 
2641 		if (arg->peer_phymode == MODE_11AC_VHT80_80) {
2642 			arg->peer_bw_rxnss_override |=
2643 			FIELD_PREP(WMI_PEER_NSS_80_80MHZ_MASK, (rx_nss - 1));
2644 		}
2645 	}
2646 	ath10k_dbg(ar, ATH10K_DBG_MAC,
2647 		   "mac vht peer %pM max_mpdu %d flags 0x%x peer_rx_nss_override 0x%x\n",
2648 		   sta->addr, arg->peer_max_mpdu,
2649 		   arg->peer_flags, arg->peer_bw_rxnss_override);
2650 }
2651 
2652 static void ath10k_peer_assoc_h_qos(struct ath10k *ar,
2653 				    struct ieee80211_vif *vif,
2654 				    struct ieee80211_sta *sta,
2655 				    struct wmi_peer_assoc_complete_arg *arg)
2656 {
2657 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
2658 
2659 	switch (arvif->vdev_type) {
2660 	case WMI_VDEV_TYPE_AP:
2661 		if (sta->wme)
2662 			arg->peer_flags |= arvif->ar->wmi.peer_flags->qos;
2663 
2664 		if (sta->wme && sta->uapsd_queues) {
2665 			arg->peer_flags |= arvif->ar->wmi.peer_flags->apsd;
2666 			arg->peer_rate_caps |= WMI_RC_UAPSD_FLAG;
2667 		}
2668 		break;
2669 	case WMI_VDEV_TYPE_STA:
2670 		if (sta->wme)
2671 			arg->peer_flags |= arvif->ar->wmi.peer_flags->qos;
2672 		break;
2673 	case WMI_VDEV_TYPE_IBSS:
2674 		if (sta->wme)
2675 			arg->peer_flags |= arvif->ar->wmi.peer_flags->qos;
2676 		break;
2677 	default:
2678 		break;
2679 	}
2680 
2681 	ath10k_dbg(ar, ATH10K_DBG_MAC, "mac peer %pM qos %d\n",
2682 		   sta->addr, !!(arg->peer_flags &
2683 		   arvif->ar->wmi.peer_flags->qos));
2684 }
2685 
2686 static bool ath10k_mac_sta_has_ofdm_only(struct ieee80211_sta *sta)
2687 {
2688 	return sta->deflink.supp_rates[NL80211_BAND_2GHZ] >>
2689 	       ATH10K_MAC_FIRST_OFDM_RATE_IDX;
2690 }
2691 
2692 static enum wmi_phy_mode ath10k_mac_get_phymode_vht(struct ath10k *ar,
2693 						    struct ieee80211_sta *sta)
2694 {
2695 	struct ieee80211_sta_vht_cap *vht_cap = &sta->deflink.vht_cap;
2696 
2697 	if (sta->deflink.bandwidth == IEEE80211_STA_RX_BW_160) {
2698 		switch (vht_cap->cap & IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_MASK) {
2699 		case IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ:
2700 			return MODE_11AC_VHT160;
2701 		case IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ:
2702 			return MODE_11AC_VHT80_80;
2703 		default:
2704 			/* not sure if this is a valid case? */
2705 			return MODE_11AC_VHT160;
2706 		}
2707 	}
2708 
2709 	if (sta->deflink.bandwidth == IEEE80211_STA_RX_BW_80)
2710 		return MODE_11AC_VHT80;
2711 
2712 	if (sta->deflink.bandwidth == IEEE80211_STA_RX_BW_40)
2713 		return MODE_11AC_VHT40;
2714 
2715 	if (sta->deflink.bandwidth == IEEE80211_STA_RX_BW_20)
2716 		return MODE_11AC_VHT20;
2717 
2718 	return MODE_UNKNOWN;
2719 }
2720 
2721 static void ath10k_peer_assoc_h_phymode(struct ath10k *ar,
2722 					struct ieee80211_vif *vif,
2723 					struct ieee80211_sta *sta,
2724 					struct wmi_peer_assoc_complete_arg *arg)
2725 {
2726 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
2727 	struct cfg80211_chan_def def;
2728 	enum nl80211_band band;
2729 	const u8 *ht_mcs_mask;
2730 	const u16 *vht_mcs_mask;
2731 	enum wmi_phy_mode phymode = MODE_UNKNOWN;
2732 
2733 	if (WARN_ON(ath10k_mac_vif_chan(vif, &def)))
2734 		return;
2735 
2736 	band = def.chan->band;
2737 	ht_mcs_mask = arvif->bitrate_mask.control[band].ht_mcs;
2738 	vht_mcs_mask = arvif->bitrate_mask.control[band].vht_mcs;
2739 
2740 	switch (band) {
2741 	case NL80211_BAND_2GHZ:
2742 		if (sta->deflink.vht_cap.vht_supported &&
2743 		    !ath10k_peer_assoc_h_vht_masked(vht_mcs_mask)) {
2744 			if (sta->deflink.bandwidth == IEEE80211_STA_RX_BW_40)
2745 				phymode = MODE_11AC_VHT40;
2746 			else
2747 				phymode = MODE_11AC_VHT20;
2748 		} else if (sta->deflink.ht_cap.ht_supported &&
2749 			   !ath10k_peer_assoc_h_ht_masked(ht_mcs_mask)) {
2750 			if (sta->deflink.bandwidth == IEEE80211_STA_RX_BW_40)
2751 				phymode = MODE_11NG_HT40;
2752 			else
2753 				phymode = MODE_11NG_HT20;
2754 		} else if (ath10k_mac_sta_has_ofdm_only(sta)) {
2755 			phymode = MODE_11G;
2756 		} else {
2757 			phymode = MODE_11B;
2758 		}
2759 
2760 		break;
2761 	case NL80211_BAND_5GHZ:
2762 		/*
2763 		 * Check VHT first.
2764 		 */
2765 		if (sta->deflink.vht_cap.vht_supported &&
2766 		    !ath10k_peer_assoc_h_vht_masked(vht_mcs_mask)) {
2767 			phymode = ath10k_mac_get_phymode_vht(ar, sta);
2768 		} else if (sta->deflink.ht_cap.ht_supported &&
2769 			   !ath10k_peer_assoc_h_ht_masked(ht_mcs_mask)) {
2770 			if (sta->deflink.bandwidth >= IEEE80211_STA_RX_BW_40)
2771 				phymode = MODE_11NA_HT40;
2772 			else
2773 				phymode = MODE_11NA_HT20;
2774 		} else {
2775 			phymode = MODE_11A;
2776 		}
2777 
2778 		break;
2779 	default:
2780 		break;
2781 	}
2782 
2783 	ath10k_dbg(ar, ATH10K_DBG_MAC, "mac peer %pM phymode %s\n",
2784 		   sta->addr, ath10k_wmi_phymode_str(phymode));
2785 
2786 	arg->peer_phymode = phymode;
2787 	WARN_ON(phymode == MODE_UNKNOWN);
2788 }
2789 
2790 static int ath10k_peer_assoc_prepare(struct ath10k *ar,
2791 				     struct ieee80211_vif *vif,
2792 				     struct ieee80211_sta *sta,
2793 				     struct wmi_peer_assoc_complete_arg *arg)
2794 {
2795 	lockdep_assert_held(&ar->conf_mutex);
2796 
2797 	memset(arg, 0, sizeof(*arg));
2798 
2799 	ath10k_peer_assoc_h_basic(ar, vif, sta, arg);
2800 	ath10k_peer_assoc_h_crypto(ar, vif, sta, arg);
2801 	ath10k_peer_assoc_h_rates(ar, vif, sta, arg);
2802 	ath10k_peer_assoc_h_ht(ar, vif, sta, arg);
2803 	ath10k_peer_assoc_h_phymode(ar, vif, sta, arg);
2804 	ath10k_peer_assoc_h_vht(ar, vif, sta, arg);
2805 	ath10k_peer_assoc_h_qos(ar, vif, sta, arg);
2806 
2807 	return 0;
2808 }
2809 
2810 static const u32 ath10k_smps_map[] = {
2811 	[WLAN_HT_CAP_SM_PS_STATIC] = WMI_PEER_SMPS_STATIC,
2812 	[WLAN_HT_CAP_SM_PS_DYNAMIC] = WMI_PEER_SMPS_DYNAMIC,
2813 	[WLAN_HT_CAP_SM_PS_INVALID] = WMI_PEER_SMPS_PS_NONE,
2814 	[WLAN_HT_CAP_SM_PS_DISABLED] = WMI_PEER_SMPS_PS_NONE,
2815 };
2816 
2817 static int ath10k_setup_peer_smps(struct ath10k *ar, struct ath10k_vif *arvif,
2818 				  const u8 *addr,
2819 				  const struct ieee80211_sta_ht_cap *ht_cap)
2820 {
2821 	int smps;
2822 
2823 	if (!ht_cap->ht_supported)
2824 		return 0;
2825 
2826 	smps = ht_cap->cap & IEEE80211_HT_CAP_SM_PS;
2827 	smps >>= IEEE80211_HT_CAP_SM_PS_SHIFT;
2828 
2829 	if (smps >= ARRAY_SIZE(ath10k_smps_map))
2830 		return -EINVAL;
2831 
2832 	return ath10k_wmi_peer_set_param(ar, arvif->vdev_id, addr,
2833 					 ar->wmi.peer_param->smps_state,
2834 					 ath10k_smps_map[smps]);
2835 }
2836 
2837 static int ath10k_mac_vif_recalc_txbf(struct ath10k *ar,
2838 				      struct ieee80211_vif *vif,
2839 				      struct ieee80211_sta_vht_cap vht_cap)
2840 {
2841 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
2842 	int ret;
2843 	u32 param;
2844 	u32 value;
2845 
2846 	if (ath10k_wmi_get_txbf_conf_scheme(ar) != WMI_TXBF_CONF_AFTER_ASSOC)
2847 		return 0;
2848 
2849 	if (!(ar->vht_cap_info &
2850 	      (IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE |
2851 	       IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE |
2852 	       IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE |
2853 	       IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE)))
2854 		return 0;
2855 
2856 	param = ar->wmi.vdev_param->txbf;
2857 	value = 0;
2858 
2859 	if (WARN_ON(param == WMI_VDEV_PARAM_UNSUPPORTED))
2860 		return 0;
2861 
2862 	/* The following logic is correct. If a remote STA advertises support
2863 	 * for being a beamformer then we should enable us being a beamformee.
2864 	 */
2865 
2866 	if (ar->vht_cap_info &
2867 	    (IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE |
2868 	     IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE)) {
2869 		if (vht_cap.cap & IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE)
2870 			value |= WMI_VDEV_PARAM_TXBF_SU_TX_BFEE;
2871 
2872 		if (vht_cap.cap & IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE)
2873 			value |= WMI_VDEV_PARAM_TXBF_MU_TX_BFEE;
2874 	}
2875 
2876 	if (ar->vht_cap_info &
2877 	    (IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE |
2878 	     IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE)) {
2879 		if (vht_cap.cap & IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE)
2880 			value |= WMI_VDEV_PARAM_TXBF_SU_TX_BFER;
2881 
2882 		if (vht_cap.cap & IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE)
2883 			value |= WMI_VDEV_PARAM_TXBF_MU_TX_BFER;
2884 	}
2885 
2886 	if (value & WMI_VDEV_PARAM_TXBF_MU_TX_BFEE)
2887 		value |= WMI_VDEV_PARAM_TXBF_SU_TX_BFEE;
2888 
2889 	if (value & WMI_VDEV_PARAM_TXBF_MU_TX_BFER)
2890 		value |= WMI_VDEV_PARAM_TXBF_SU_TX_BFER;
2891 
2892 	ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param, value);
2893 	if (ret) {
2894 		ath10k_warn(ar, "failed to submit vdev param txbf 0x%x: %d\n",
2895 			    value, ret);
2896 		return ret;
2897 	}
2898 
2899 	return 0;
2900 }
2901 
2902 static bool ath10k_mac_is_connected(struct ath10k *ar)
2903 {
2904 	struct ath10k_vif *arvif;
2905 
2906 	list_for_each_entry(arvif, &ar->arvifs, list) {
2907 		if (arvif->is_up && arvif->vdev_type == WMI_VDEV_TYPE_STA)
2908 			return true;
2909 	}
2910 
2911 	return false;
2912 }
2913 
2914 static int ath10k_mac_txpower_setup(struct ath10k *ar, int txpower)
2915 {
2916 	int ret;
2917 	u32 param;
2918 	int tx_power_2g, tx_power_5g;
2919 	bool connected;
2920 
2921 	lockdep_assert_held(&ar->conf_mutex);
2922 
2923 	/* ath10k internally uses unit of 0.5 dBm so multiply by 2 */
2924 	tx_power_2g = txpower * 2;
2925 	tx_power_5g = txpower * 2;
2926 
2927 	connected = ath10k_mac_is_connected(ar);
2928 
2929 	if (connected && ar->tx_power_2g_limit)
2930 		if (tx_power_2g > ar->tx_power_2g_limit)
2931 			tx_power_2g = ar->tx_power_2g_limit;
2932 
2933 	if (connected && ar->tx_power_5g_limit)
2934 		if (tx_power_5g > ar->tx_power_5g_limit)
2935 			tx_power_5g = ar->tx_power_5g_limit;
2936 
2937 	ath10k_dbg(ar, ATH10K_DBG_MAC, "mac txpower 2g: %d, 5g: %d\n",
2938 		   tx_power_2g, tx_power_5g);
2939 
2940 	param = ar->wmi.pdev_param->txpower_limit2g;
2941 	ret = ath10k_wmi_pdev_set_param(ar, param, tx_power_2g);
2942 	if (ret) {
2943 		ath10k_warn(ar, "failed to set 2g txpower %d: %d\n",
2944 			    tx_power_2g, ret);
2945 		return ret;
2946 	}
2947 
2948 	param = ar->wmi.pdev_param->txpower_limit5g;
2949 	ret = ath10k_wmi_pdev_set_param(ar, param, tx_power_5g);
2950 	if (ret) {
2951 		ath10k_warn(ar, "failed to set 5g txpower %d: %d\n",
2952 			    tx_power_5g, ret);
2953 		return ret;
2954 	}
2955 
2956 	return 0;
2957 }
2958 
2959 static int ath10k_mac_txpower_recalc(struct ath10k *ar)
2960 {
2961 	struct ath10k_vif *arvif;
2962 	int ret, txpower = -1;
2963 
2964 	lockdep_assert_held(&ar->conf_mutex);
2965 
2966 	list_for_each_entry(arvif, &ar->arvifs, list) {
2967 		/* txpower not initialized yet? */
2968 		if (arvif->txpower == INT_MIN)
2969 			continue;
2970 
2971 		if (txpower == -1)
2972 			txpower = arvif->txpower;
2973 		else
2974 			txpower = min(txpower, arvif->txpower);
2975 	}
2976 
2977 	if (txpower == -1)
2978 		return 0;
2979 
2980 	ret = ath10k_mac_txpower_setup(ar, txpower);
2981 	if (ret) {
2982 		ath10k_warn(ar, "failed to setup tx power %d: %d\n",
2983 			    txpower, ret);
2984 		return ret;
2985 	}
2986 
2987 	return 0;
2988 }
2989 
2990 static int ath10k_mac_set_sar_power(struct ath10k *ar)
2991 {
2992 	if (!ar->hw_params.dynamic_sar_support)
2993 		return -EOPNOTSUPP;
2994 
2995 	if (!ath10k_mac_is_connected(ar))
2996 		return 0;
2997 
2998 	/* if connected, then arvif->txpower must be valid */
2999 	return ath10k_mac_txpower_recalc(ar);
3000 }
3001 
3002 static int ath10k_mac_set_sar_specs(struct ieee80211_hw *hw,
3003 				    const struct cfg80211_sar_specs *sar)
3004 {
3005 	const struct cfg80211_sar_sub_specs *sub_specs;
3006 	struct ath10k *ar = hw->priv;
3007 	u32 i;
3008 	int ret;
3009 
3010 	mutex_lock(&ar->conf_mutex);
3011 
3012 	if (!ar->hw_params.dynamic_sar_support) {
3013 		ret = -EOPNOTSUPP;
3014 		goto err;
3015 	}
3016 
3017 	if (!sar || sar->type != NL80211_SAR_TYPE_POWER ||
3018 	    sar->num_sub_specs == 0) {
3019 		ret = -EINVAL;
3020 		goto err;
3021 	}
3022 
3023 	sub_specs = sar->sub_specs;
3024 
3025 	/* 0dbm is not a practical value for ath10k, so use 0
3026 	 * as no SAR limitation on it.
3027 	 */
3028 	ar->tx_power_2g_limit = 0;
3029 	ar->tx_power_5g_limit = 0;
3030 
3031 	/* note the power is in 0.25dbm unit, while ath10k uses
3032 	 * 0.5dbm unit.
3033 	 */
3034 	for (i = 0; i < sar->num_sub_specs; i++) {
3035 		if (sub_specs->freq_range_index == 0)
3036 			ar->tx_power_2g_limit = sub_specs->power / 2;
3037 		else if (sub_specs->freq_range_index == 1)
3038 			ar->tx_power_5g_limit = sub_specs->power / 2;
3039 
3040 		sub_specs++;
3041 	}
3042 
3043 	ret = ath10k_mac_set_sar_power(ar);
3044 	if (ret) {
3045 		ath10k_warn(ar, "failed to set sar power: %d", ret);
3046 		goto err;
3047 	}
3048 
3049 err:
3050 	mutex_unlock(&ar->conf_mutex);
3051 	return ret;
3052 }
3053 
3054 /* can be called only in mac80211 callbacks due to `key_count` usage */
3055 static void ath10k_bss_assoc(struct ieee80211_hw *hw,
3056 			     struct ieee80211_vif *vif,
3057 			     struct ieee80211_bss_conf *bss_conf)
3058 {
3059 	struct ath10k *ar = hw->priv;
3060 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
3061 	struct ieee80211_sta_ht_cap ht_cap;
3062 	struct ieee80211_sta_vht_cap vht_cap;
3063 	struct wmi_peer_assoc_complete_arg peer_arg;
3064 	struct ieee80211_sta *ap_sta;
3065 	int ret;
3066 
3067 	lockdep_assert_held(&ar->conf_mutex);
3068 
3069 	ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %i assoc bssid %pM aid %d\n",
3070 		   arvif->vdev_id, arvif->bssid, arvif->aid);
3071 
3072 	rcu_read_lock();
3073 
3074 	ap_sta = ieee80211_find_sta(vif, bss_conf->bssid);
3075 	if (!ap_sta) {
3076 		ath10k_warn(ar, "failed to find station entry for bss %pM vdev %i\n",
3077 			    bss_conf->bssid, arvif->vdev_id);
3078 		rcu_read_unlock();
3079 		return;
3080 	}
3081 
3082 	/* ap_sta must be accessed only within rcu section which must be left
3083 	 * before calling ath10k_setup_peer_smps() which might sleep.
3084 	 */
3085 	ht_cap = ap_sta->deflink.ht_cap;
3086 	vht_cap = ap_sta->deflink.vht_cap;
3087 
3088 	ret = ath10k_peer_assoc_prepare(ar, vif, ap_sta, &peer_arg);
3089 	if (ret) {
3090 		ath10k_warn(ar, "failed to prepare peer assoc for %pM vdev %i: %d\n",
3091 			    bss_conf->bssid, arvif->vdev_id, ret);
3092 		rcu_read_unlock();
3093 		return;
3094 	}
3095 
3096 	rcu_read_unlock();
3097 
3098 	ret = ath10k_wmi_peer_assoc(ar, &peer_arg);
3099 	if (ret) {
3100 		ath10k_warn(ar, "failed to run peer assoc for %pM vdev %i: %d\n",
3101 			    bss_conf->bssid, arvif->vdev_id, ret);
3102 		return;
3103 	}
3104 
3105 	ret = ath10k_setup_peer_smps(ar, arvif, bss_conf->bssid, &ht_cap);
3106 	if (ret) {
3107 		ath10k_warn(ar, "failed to setup peer SMPS for vdev %i: %d\n",
3108 			    arvif->vdev_id, ret);
3109 		return;
3110 	}
3111 
3112 	ret = ath10k_mac_vif_recalc_txbf(ar, vif, vht_cap);
3113 	if (ret) {
3114 		ath10k_warn(ar, "failed to recalc txbf for vdev %i on bss %pM: %d\n",
3115 			    arvif->vdev_id, bss_conf->bssid, ret);
3116 		return;
3117 	}
3118 
3119 	ath10k_dbg(ar, ATH10K_DBG_MAC,
3120 		   "mac vdev %d up (associated) bssid %pM aid %d\n",
3121 		   arvif->vdev_id, bss_conf->bssid, vif->cfg.aid);
3122 
3123 	WARN_ON(arvif->is_up);
3124 
3125 	arvif->aid = vif->cfg.aid;
3126 	ether_addr_copy(arvif->bssid, bss_conf->bssid);
3127 
3128 	ret = ath10k_wmi_pdev_set_param(ar,
3129 					ar->wmi.pdev_param->peer_stats_info_enable, 1);
3130 	if (ret)
3131 		ath10k_warn(ar, "failed to enable peer stats info: %d\n", ret);
3132 
3133 	ret = ath10k_wmi_vdev_up(ar, arvif->vdev_id, arvif->aid, arvif->bssid);
3134 	if (ret) {
3135 		ath10k_warn(ar, "failed to set vdev %d up: %d\n",
3136 			    arvif->vdev_id, ret);
3137 		return;
3138 	}
3139 
3140 	arvif->is_up = true;
3141 
3142 	ath10k_mac_set_sar_power(ar);
3143 
3144 	/* Workaround: Some firmware revisions (tested with qca6174
3145 	 * WLAN.RM.2.0-00073) have buggy powersave state machine and must be
3146 	 * poked with peer param command.
3147 	 */
3148 	ret = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, arvif->bssid,
3149 					ar->wmi.peer_param->dummy_var, 1);
3150 	if (ret) {
3151 		ath10k_warn(ar, "failed to poke peer %pM param for ps workaround on vdev %i: %d\n",
3152 			    arvif->bssid, arvif->vdev_id, ret);
3153 		return;
3154 	}
3155 }
3156 
3157 static void ath10k_bss_disassoc(struct ieee80211_hw *hw,
3158 				struct ieee80211_vif *vif)
3159 {
3160 	struct ath10k *ar = hw->priv;
3161 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
3162 	struct ieee80211_sta_vht_cap vht_cap = {};
3163 	int ret;
3164 
3165 	lockdep_assert_held(&ar->conf_mutex);
3166 
3167 	ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %i disassoc bssid %pM\n",
3168 		   arvif->vdev_id, arvif->bssid);
3169 
3170 	ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id);
3171 	if (ret)
3172 		ath10k_warn(ar, "failed to down vdev %i: %d\n",
3173 			    arvif->vdev_id, ret);
3174 
3175 	arvif->def_wep_key_idx = -1;
3176 
3177 	ret = ath10k_mac_vif_recalc_txbf(ar, vif, vht_cap);
3178 	if (ret) {
3179 		ath10k_warn(ar, "failed to recalc txbf for vdev %i: %d\n",
3180 			    arvif->vdev_id, ret);
3181 		return;
3182 	}
3183 
3184 	arvif->is_up = false;
3185 
3186 	ath10k_mac_txpower_recalc(ar);
3187 
3188 	cancel_delayed_work_sync(&arvif->connection_loss_work);
3189 }
3190 
3191 static int ath10k_new_peer_tid_config(struct ath10k *ar,
3192 				      struct ieee80211_sta *sta,
3193 				      struct ath10k_vif *arvif)
3194 {
3195 	struct wmi_per_peer_per_tid_cfg_arg arg = {};
3196 	struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
3197 	bool config_apply;
3198 	int ret, i;
3199 
3200 	for (i = 0; i < ATH10K_TID_MAX; i++) {
3201 		config_apply = false;
3202 		if (arvif->retry_long[i] || arvif->ampdu[i] ||
3203 		    arvif->rate_ctrl[i] || arvif->rtscts[i]) {
3204 			config_apply = true;
3205 			arg.tid = i;
3206 			arg.vdev_id = arvif->vdev_id;
3207 			arg.retry_count = arvif->retry_long[i];
3208 			arg.aggr_control = arvif->ampdu[i];
3209 			arg.rate_ctrl = arvif->rate_ctrl[i];
3210 			arg.rcode_flags = arvif->rate_code[i];
3211 
3212 			if (arvif->rtscts[i])
3213 				arg.ext_tid_cfg_bitmap =
3214 					WMI_EXT_TID_RTS_CTS_CONFIG;
3215 			else
3216 				arg.ext_tid_cfg_bitmap = 0;
3217 
3218 			arg.rtscts_ctrl = arvif->rtscts[i];
3219 		}
3220 
3221 		if (arvif->noack[i]) {
3222 			arg.ack_policy = arvif->noack[i];
3223 			arg.rate_ctrl = WMI_TID_CONFIG_RATE_CONTROL_DEFAULT_LOWEST_RATE;
3224 			arg.aggr_control = WMI_TID_CONFIG_AGGR_CONTROL_DISABLE;
3225 			config_apply = true;
3226 		}
3227 
3228 		/* Assign default value(-1) to newly connected station.
3229 		 * This is to identify station specific tid configuration not
3230 		 * configured for the station.
3231 		 */
3232 		arsta->retry_long[i] = -1;
3233 		arsta->noack[i] = -1;
3234 		arsta->ampdu[i] = -1;
3235 
3236 		if (!config_apply)
3237 			continue;
3238 
3239 		ether_addr_copy(arg.peer_macaddr.addr, sta->addr);
3240 
3241 		ret = ath10k_wmi_set_per_peer_per_tid_cfg(ar, &arg);
3242 		if (ret) {
3243 			ath10k_warn(ar, "failed to set per tid retry/aggr config for sta %pM: %d\n",
3244 				    sta->addr, ret);
3245 			return ret;
3246 		}
3247 
3248 		memset(&arg, 0, sizeof(arg));
3249 	}
3250 
3251 	return 0;
3252 }
3253 
3254 static int ath10k_station_assoc(struct ath10k *ar,
3255 				struct ieee80211_vif *vif,
3256 				struct ieee80211_sta *sta,
3257 				bool reassoc)
3258 {
3259 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
3260 	struct wmi_peer_assoc_complete_arg peer_arg;
3261 	int ret = 0;
3262 
3263 	lockdep_assert_held(&ar->conf_mutex);
3264 
3265 	ret = ath10k_peer_assoc_prepare(ar, vif, sta, &peer_arg);
3266 	if (ret) {
3267 		ath10k_warn(ar, "failed to prepare WMI peer assoc for %pM vdev %i: %i\n",
3268 			    sta->addr, arvif->vdev_id, ret);
3269 		return ret;
3270 	}
3271 
3272 	ret = ath10k_wmi_peer_assoc(ar, &peer_arg);
3273 	if (ret) {
3274 		ath10k_warn(ar, "failed to run peer assoc for STA %pM vdev %i: %d\n",
3275 			    sta->addr, arvif->vdev_id, ret);
3276 		return ret;
3277 	}
3278 
3279 	/* Re-assoc is run only to update supported rates for given station. It
3280 	 * doesn't make much sense to reconfigure the peer completely.
3281 	 */
3282 	if (!reassoc) {
3283 		ret = ath10k_setup_peer_smps(ar, arvif, sta->addr,
3284 					     &sta->deflink.ht_cap);
3285 		if (ret) {
3286 			ath10k_warn(ar, "failed to setup peer SMPS for vdev %d: %d\n",
3287 				    arvif->vdev_id, ret);
3288 			return ret;
3289 		}
3290 
3291 		ret = ath10k_peer_assoc_qos_ap(ar, arvif, sta);
3292 		if (ret) {
3293 			ath10k_warn(ar, "failed to set qos params for STA %pM for vdev %i: %d\n",
3294 				    sta->addr, arvif->vdev_id, ret);
3295 			return ret;
3296 		}
3297 
3298 		if (!sta->wme) {
3299 			arvif->num_legacy_stations++;
3300 			ret  = ath10k_recalc_rtscts_prot(arvif);
3301 			if (ret) {
3302 				ath10k_warn(ar, "failed to recalculate rts/cts prot for vdev %d: %d\n",
3303 					    arvif->vdev_id, ret);
3304 				return ret;
3305 			}
3306 		}
3307 
3308 		/* Plumb cached keys only for static WEP */
3309 		if ((arvif->def_wep_key_idx != -1) && (!sta->tdls)) {
3310 			ret = ath10k_install_peer_wep_keys(arvif, sta->addr);
3311 			if (ret) {
3312 				ath10k_warn(ar, "failed to install peer wep keys for vdev %i: %d\n",
3313 					    arvif->vdev_id, ret);
3314 				return ret;
3315 			}
3316 		}
3317 	}
3318 
3319 	if (!test_bit(WMI_SERVICE_PEER_TID_CONFIGS_SUPPORT, ar->wmi.svc_map))
3320 		return ret;
3321 
3322 	return ath10k_new_peer_tid_config(ar, sta, arvif);
3323 }
3324 
3325 static int ath10k_station_disassoc(struct ath10k *ar,
3326 				   struct ieee80211_vif *vif,
3327 				   struct ieee80211_sta *sta)
3328 {
3329 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
3330 	int ret = 0;
3331 
3332 	lockdep_assert_held(&ar->conf_mutex);
3333 
3334 	if (!sta->wme) {
3335 		arvif->num_legacy_stations--;
3336 		ret = ath10k_recalc_rtscts_prot(arvif);
3337 		if (ret) {
3338 			ath10k_warn(ar, "failed to recalculate rts/cts prot for vdev %d: %d\n",
3339 				    arvif->vdev_id, ret);
3340 			return ret;
3341 		}
3342 	}
3343 
3344 	ret = ath10k_clear_peer_keys(arvif, sta->addr);
3345 	if (ret) {
3346 		ath10k_warn(ar, "failed to clear all peer wep keys for vdev %i: %d\n",
3347 			    arvif->vdev_id, ret);
3348 		return ret;
3349 	}
3350 
3351 	return ret;
3352 }
3353 
3354 /**************/
3355 /* Regulatory */
3356 /**************/
3357 
3358 static int ath10k_update_channel_list(struct ath10k *ar)
3359 {
3360 	struct ieee80211_hw *hw = ar->hw;
3361 	struct ieee80211_supported_band **bands;
3362 	enum nl80211_band band;
3363 	struct ieee80211_channel *channel;
3364 	struct wmi_scan_chan_list_arg arg = {0};
3365 	struct wmi_channel_arg *ch;
3366 	bool passive;
3367 	int len;
3368 	int ret;
3369 	int i;
3370 
3371 	lockdep_assert_held(&ar->conf_mutex);
3372 
3373 	bands = hw->wiphy->bands;
3374 	for (band = 0; band < NUM_NL80211_BANDS; band++) {
3375 		if (!bands[band])
3376 			continue;
3377 
3378 		for (i = 0; i < bands[band]->n_channels; i++) {
3379 			if (bands[band]->channels[i].flags &
3380 			    IEEE80211_CHAN_DISABLED)
3381 				continue;
3382 
3383 			arg.n_channels++;
3384 		}
3385 	}
3386 
3387 	len = sizeof(struct wmi_channel_arg) * arg.n_channels;
3388 	arg.channels = kzalloc(len, GFP_KERNEL);
3389 	if (!arg.channels)
3390 		return -ENOMEM;
3391 
3392 	ch = arg.channels;
3393 	for (band = 0; band < NUM_NL80211_BANDS; band++) {
3394 		if (!bands[band])
3395 			continue;
3396 
3397 		for (i = 0; i < bands[band]->n_channels; i++) {
3398 			channel = &bands[band]->channels[i];
3399 
3400 			if (channel->flags & IEEE80211_CHAN_DISABLED)
3401 				continue;
3402 
3403 			ch->allow_ht = true;
3404 
3405 			/* FIXME: when should we really allow VHT? */
3406 			ch->allow_vht = true;
3407 
3408 			ch->allow_ibss =
3409 				!(channel->flags & IEEE80211_CHAN_NO_IR);
3410 
3411 			ch->ht40plus =
3412 				!(channel->flags & IEEE80211_CHAN_NO_HT40PLUS);
3413 
3414 			ch->chan_radar =
3415 				!!(channel->flags & IEEE80211_CHAN_RADAR);
3416 
3417 			passive = channel->flags & IEEE80211_CHAN_NO_IR;
3418 			ch->passive = passive;
3419 
3420 			/* the firmware is ignoring the "radar" flag of the
3421 			 * channel and is scanning actively using Probe Requests
3422 			 * on "Radar detection"/DFS channels which are not
3423 			 * marked as "available"
3424 			 */
3425 			ch->passive |= ch->chan_radar;
3426 
3427 			ch->freq = channel->center_freq;
3428 			ch->band_center_freq1 = channel->center_freq;
3429 			ch->min_power = 0;
3430 			ch->max_power = channel->max_power * 2;
3431 			ch->max_reg_power = channel->max_reg_power * 2;
3432 			ch->max_antenna_gain = channel->max_antenna_gain;
3433 			ch->reg_class_id = 0; /* FIXME */
3434 
3435 			/* FIXME: why use only legacy modes, why not any
3436 			 * HT/VHT modes? Would that even make any
3437 			 * difference?
3438 			 */
3439 			if (channel->band == NL80211_BAND_2GHZ)
3440 				ch->mode = MODE_11G;
3441 			else
3442 				ch->mode = MODE_11A;
3443 
3444 			if (WARN_ON_ONCE(ch->mode == MODE_UNKNOWN))
3445 				continue;
3446 
3447 			ath10k_dbg(ar, ATH10K_DBG_WMI,
3448 				   "mac channel [%zd/%d] freq %d maxpower %d regpower %d antenna %d mode %d\n",
3449 				    ch - arg.channels, arg.n_channels,
3450 				   ch->freq, ch->max_power, ch->max_reg_power,
3451 				   ch->max_antenna_gain, ch->mode);
3452 
3453 			ch++;
3454 		}
3455 	}
3456 
3457 	ret = ath10k_wmi_scan_chan_list(ar, &arg);
3458 	kfree(arg.channels);
3459 
3460 	return ret;
3461 }
3462 
3463 static enum wmi_dfs_region
3464 ath10k_mac_get_dfs_region(enum nl80211_dfs_regions dfs_region)
3465 {
3466 	switch (dfs_region) {
3467 	case NL80211_DFS_UNSET:
3468 		return WMI_UNINIT_DFS_DOMAIN;
3469 	case NL80211_DFS_FCC:
3470 		return WMI_FCC_DFS_DOMAIN;
3471 	case NL80211_DFS_ETSI:
3472 		return WMI_ETSI_DFS_DOMAIN;
3473 	case NL80211_DFS_JP:
3474 		return WMI_MKK4_DFS_DOMAIN;
3475 	}
3476 	return WMI_UNINIT_DFS_DOMAIN;
3477 }
3478 
3479 static void ath10k_regd_update(struct ath10k *ar)
3480 {
3481 	struct reg_dmn_pair_mapping *regpair;
3482 	int ret;
3483 	enum wmi_dfs_region wmi_dfs_reg;
3484 	enum nl80211_dfs_regions nl_dfs_reg;
3485 
3486 	lockdep_assert_held(&ar->conf_mutex);
3487 
3488 	ret = ath10k_update_channel_list(ar);
3489 	if (ret)
3490 		ath10k_warn(ar, "failed to update channel list: %d\n", ret);
3491 
3492 	regpair = ar->ath_common.regulatory.regpair;
3493 
3494 	if (IS_ENABLED(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector) {
3495 		nl_dfs_reg = ar->dfs_detector->region;
3496 		wmi_dfs_reg = ath10k_mac_get_dfs_region(nl_dfs_reg);
3497 	} else {
3498 		wmi_dfs_reg = WMI_UNINIT_DFS_DOMAIN;
3499 	}
3500 
3501 	/* Target allows setting up per-band regdomain but ath_common provides
3502 	 * a combined one only
3503 	 */
3504 	ret = ath10k_wmi_pdev_set_regdomain(ar,
3505 					    regpair->reg_domain,
3506 					    regpair->reg_domain, /* 2ghz */
3507 					    regpair->reg_domain, /* 5ghz */
3508 					    regpair->reg_2ghz_ctl,
3509 					    regpair->reg_5ghz_ctl,
3510 					    wmi_dfs_reg);
3511 	if (ret)
3512 		ath10k_warn(ar, "failed to set pdev regdomain: %d\n", ret);
3513 }
3514 
3515 static void ath10k_mac_update_channel_list(struct ath10k *ar,
3516 					   struct ieee80211_supported_band *band)
3517 {
3518 	int i;
3519 
3520 	if (ar->low_5ghz_chan && ar->high_5ghz_chan) {
3521 		for (i = 0; i < band->n_channels; i++) {
3522 			if (band->channels[i].center_freq < ar->low_5ghz_chan ||
3523 			    band->channels[i].center_freq > ar->high_5ghz_chan)
3524 				band->channels[i].flags |=
3525 					IEEE80211_CHAN_DISABLED;
3526 		}
3527 	}
3528 }
3529 
3530 static void ath10k_reg_notifier(struct wiphy *wiphy,
3531 				struct regulatory_request *request)
3532 {
3533 	struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
3534 	struct ath10k *ar = hw->priv;
3535 	bool result;
3536 
3537 	ath_reg_notifier_apply(wiphy, request, &ar->ath_common.regulatory);
3538 
3539 	if (IS_ENABLED(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector) {
3540 		ath10k_dbg(ar, ATH10K_DBG_REGULATORY, "dfs region 0x%x\n",
3541 			   request->dfs_region);
3542 		result = ar->dfs_detector->set_dfs_domain(ar->dfs_detector,
3543 							  request->dfs_region);
3544 		if (!result)
3545 			ath10k_warn(ar, "DFS region 0x%X not supported, will trigger radar for every pulse\n",
3546 				    request->dfs_region);
3547 	}
3548 
3549 	mutex_lock(&ar->conf_mutex);
3550 	if (ar->state == ATH10K_STATE_ON)
3551 		ath10k_regd_update(ar);
3552 	mutex_unlock(&ar->conf_mutex);
3553 
3554 	if (ar->phy_capability & WHAL_WLAN_11A_CAPABILITY)
3555 		ath10k_mac_update_channel_list(ar,
3556 					       ar->hw->wiphy->bands[NL80211_BAND_5GHZ]);
3557 }
3558 
3559 static void ath10k_stop_radar_confirmation(struct ath10k *ar)
3560 {
3561 	spin_lock_bh(&ar->data_lock);
3562 	ar->radar_conf_state = ATH10K_RADAR_CONFIRMATION_STOPPED;
3563 	spin_unlock_bh(&ar->data_lock);
3564 
3565 	cancel_work_sync(&ar->radar_confirmation_work);
3566 }
3567 
3568 /***************/
3569 /* TX handlers */
3570 /***************/
3571 
3572 enum ath10k_mac_tx_path {
3573 	ATH10K_MAC_TX_HTT,
3574 	ATH10K_MAC_TX_HTT_MGMT,
3575 	ATH10K_MAC_TX_WMI_MGMT,
3576 	ATH10K_MAC_TX_UNKNOWN,
3577 };
3578 
3579 void ath10k_mac_tx_lock(struct ath10k *ar, int reason)
3580 {
3581 	lockdep_assert_held(&ar->htt.tx_lock);
3582 
3583 	WARN_ON(reason >= ATH10K_TX_PAUSE_MAX);
3584 	ar->tx_paused |= BIT(reason);
3585 	ieee80211_stop_queues(ar->hw);
3586 }
3587 
3588 static void ath10k_mac_tx_unlock_iter(void *data, u8 *mac,
3589 				      struct ieee80211_vif *vif)
3590 {
3591 	struct ath10k *ar = data;
3592 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
3593 
3594 	if (arvif->tx_paused)
3595 		return;
3596 
3597 	ieee80211_wake_queue(ar->hw, arvif->vdev_id);
3598 }
3599 
3600 void ath10k_mac_tx_unlock(struct ath10k *ar, int reason)
3601 {
3602 	lockdep_assert_held(&ar->htt.tx_lock);
3603 
3604 	WARN_ON(reason >= ATH10K_TX_PAUSE_MAX);
3605 	ar->tx_paused &= ~BIT(reason);
3606 
3607 	if (ar->tx_paused)
3608 		return;
3609 
3610 	ieee80211_iterate_active_interfaces_atomic(ar->hw,
3611 						   ATH10K_ITER_RESUME_FLAGS,
3612 						   ath10k_mac_tx_unlock_iter,
3613 						   ar);
3614 
3615 	ieee80211_wake_queue(ar->hw, ar->hw->offchannel_tx_hw_queue);
3616 }
3617 
3618 void ath10k_mac_vif_tx_lock(struct ath10k_vif *arvif, int reason)
3619 {
3620 	struct ath10k *ar = arvif->ar;
3621 
3622 	lockdep_assert_held(&ar->htt.tx_lock);
3623 
3624 	WARN_ON(reason >= BITS_PER_LONG);
3625 	arvif->tx_paused |= BIT(reason);
3626 	ieee80211_stop_queue(ar->hw, arvif->vdev_id);
3627 }
3628 
3629 void ath10k_mac_vif_tx_unlock(struct ath10k_vif *arvif, int reason)
3630 {
3631 	struct ath10k *ar = arvif->ar;
3632 
3633 	lockdep_assert_held(&ar->htt.tx_lock);
3634 
3635 	WARN_ON(reason >= BITS_PER_LONG);
3636 	arvif->tx_paused &= ~BIT(reason);
3637 
3638 	if (ar->tx_paused)
3639 		return;
3640 
3641 	if (arvif->tx_paused)
3642 		return;
3643 
3644 	ieee80211_wake_queue(ar->hw, arvif->vdev_id);
3645 }
3646 
3647 static void ath10k_mac_vif_handle_tx_pause(struct ath10k_vif *arvif,
3648 					   enum wmi_tlv_tx_pause_id pause_id,
3649 					   enum wmi_tlv_tx_pause_action action)
3650 {
3651 	struct ath10k *ar = arvif->ar;
3652 
3653 	lockdep_assert_held(&ar->htt.tx_lock);
3654 
3655 	switch (action) {
3656 	case WMI_TLV_TX_PAUSE_ACTION_STOP:
3657 		ath10k_mac_vif_tx_lock(arvif, pause_id);
3658 		break;
3659 	case WMI_TLV_TX_PAUSE_ACTION_WAKE:
3660 		ath10k_mac_vif_tx_unlock(arvif, pause_id);
3661 		break;
3662 	default:
3663 		ath10k_dbg(ar, ATH10K_DBG_BOOT,
3664 			   "received unknown tx pause action %d on vdev %i, ignoring\n",
3665 			    action, arvif->vdev_id);
3666 		break;
3667 	}
3668 }
3669 
3670 struct ath10k_mac_tx_pause {
3671 	u32 vdev_id;
3672 	enum wmi_tlv_tx_pause_id pause_id;
3673 	enum wmi_tlv_tx_pause_action action;
3674 };
3675 
3676 static void ath10k_mac_handle_tx_pause_iter(void *data, u8 *mac,
3677 					    struct ieee80211_vif *vif)
3678 {
3679 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
3680 	struct ath10k_mac_tx_pause *arg = data;
3681 
3682 	if (arvif->vdev_id != arg->vdev_id)
3683 		return;
3684 
3685 	ath10k_mac_vif_handle_tx_pause(arvif, arg->pause_id, arg->action);
3686 }
3687 
3688 void ath10k_mac_handle_tx_pause_vdev(struct ath10k *ar, u32 vdev_id,
3689 				     enum wmi_tlv_tx_pause_id pause_id,
3690 				     enum wmi_tlv_tx_pause_action action)
3691 {
3692 	struct ath10k_mac_tx_pause arg = {
3693 		.vdev_id = vdev_id,
3694 		.pause_id = pause_id,
3695 		.action = action,
3696 	};
3697 
3698 	spin_lock_bh(&ar->htt.tx_lock);
3699 	ieee80211_iterate_active_interfaces_atomic(ar->hw,
3700 						   ATH10K_ITER_RESUME_FLAGS,
3701 						   ath10k_mac_handle_tx_pause_iter,
3702 						   &arg);
3703 	spin_unlock_bh(&ar->htt.tx_lock);
3704 }
3705 
3706 static enum ath10k_hw_txrx_mode
3707 ath10k_mac_tx_h_get_txmode(struct ath10k *ar,
3708 			   struct ieee80211_vif *vif,
3709 			   struct ieee80211_sta *sta,
3710 			   struct sk_buff *skb)
3711 {
3712 	const struct ieee80211_hdr *hdr = (void *)skb->data;
3713 	const struct ath10k_skb_cb *skb_cb = ATH10K_SKB_CB(skb);
3714 	__le16 fc = hdr->frame_control;
3715 
3716 	if (IEEE80211_SKB_CB(skb)->flags & IEEE80211_TX_CTL_HW_80211_ENCAP)
3717 		return ATH10K_HW_TXRX_ETHERNET;
3718 
3719 	if (!vif || vif->type == NL80211_IFTYPE_MONITOR)
3720 		return ATH10K_HW_TXRX_RAW;
3721 
3722 	if (ieee80211_is_mgmt(fc))
3723 		return ATH10K_HW_TXRX_MGMT;
3724 
3725 	/* Workaround:
3726 	 *
3727 	 * NullFunc frames are mostly used to ping if a client or AP are still
3728 	 * reachable and responsive. This implies tx status reports must be
3729 	 * accurate - otherwise either mac80211 or userspace (e.g. hostapd) can
3730 	 * come to a conclusion that the other end disappeared and tear down
3731 	 * BSS connection or it can never disconnect from BSS/client (which is
3732 	 * the case).
3733 	 *
3734 	 * Firmware with HTT older than 3.0 delivers incorrect tx status for
3735 	 * NullFunc frames to driver. However there's a HTT Mgmt Tx command
3736 	 * which seems to deliver correct tx reports for NullFunc frames. The
3737 	 * downside of using it is it ignores client powersave state so it can
3738 	 * end up disconnecting sleeping clients in AP mode. It should fix STA
3739 	 * mode though because AP don't sleep.
3740 	 */
3741 	if (ar->htt.target_version_major < 3 &&
3742 	    (ieee80211_is_nullfunc(fc) || ieee80211_is_qos_nullfunc(fc)) &&
3743 	    !test_bit(ATH10K_FW_FEATURE_HAS_WMI_MGMT_TX,
3744 		      ar->running_fw->fw_file.fw_features))
3745 		return ATH10K_HW_TXRX_MGMT;
3746 
3747 	/* Workaround:
3748 	 *
3749 	 * Some wmi-tlv firmwares for qca6174 have broken Tx key selection for
3750 	 * NativeWifi txmode - it selects AP key instead of peer key. It seems
3751 	 * to work with Ethernet txmode so use it.
3752 	 *
3753 	 * FIXME: Check if raw mode works with TDLS.
3754 	 */
3755 	if (ieee80211_is_data_present(fc) && sta && sta->tdls)
3756 		return ATH10K_HW_TXRX_ETHERNET;
3757 
3758 	if (test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags) ||
3759 	    skb_cb->flags & ATH10K_SKB_F_RAW_TX)
3760 		return ATH10K_HW_TXRX_RAW;
3761 
3762 	return ATH10K_HW_TXRX_NATIVE_WIFI;
3763 }
3764 
3765 static bool ath10k_tx_h_use_hwcrypto(struct ieee80211_vif *vif,
3766 				     struct sk_buff *skb)
3767 {
3768 	const struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
3769 	const struct ieee80211_hdr *hdr = (void *)skb->data;
3770 	const u32 mask = IEEE80211_TX_INTFL_DONT_ENCRYPT |
3771 			 IEEE80211_TX_CTL_INJECTED;
3772 
3773 	if (!ieee80211_has_protected(hdr->frame_control))
3774 		return false;
3775 
3776 	if ((info->flags & mask) == mask)
3777 		return false;
3778 
3779 	if (vif)
3780 		return !((struct ath10k_vif *)vif->drv_priv)->nohwcrypt;
3781 
3782 	return true;
3783 }
3784 
3785 /* HTT Tx uses Native Wifi tx mode which expects 802.11 frames without QoS
3786  * Control in the header.
3787  */
3788 static void ath10k_tx_h_nwifi(struct ieee80211_hw *hw, struct sk_buff *skb)
3789 {
3790 	struct ieee80211_hdr *hdr = (void *)skb->data;
3791 	struct ath10k_skb_cb *cb = ATH10K_SKB_CB(skb);
3792 	u8 *qos_ctl;
3793 
3794 	if (!ieee80211_is_data_qos(hdr->frame_control))
3795 		return;
3796 
3797 	qos_ctl = ieee80211_get_qos_ctl(hdr);
3798 	memmove(skb->data + IEEE80211_QOS_CTL_LEN,
3799 		skb->data, (void *)qos_ctl - (void *)skb->data);
3800 	skb_pull(skb, IEEE80211_QOS_CTL_LEN);
3801 
3802 	/* Some firmware revisions don't handle sending QoS NullFunc well.
3803 	 * These frames are mainly used for CQM purposes so it doesn't really
3804 	 * matter whether QoS NullFunc or NullFunc are sent.
3805 	 */
3806 	hdr = (void *)skb->data;
3807 	if (ieee80211_is_qos_nullfunc(hdr->frame_control))
3808 		cb->flags &= ~ATH10K_SKB_F_QOS;
3809 
3810 	hdr->frame_control &= ~__cpu_to_le16(IEEE80211_STYPE_QOS_DATA);
3811 }
3812 
3813 static void ath10k_tx_h_8023(struct sk_buff *skb)
3814 {
3815 	struct ieee80211_hdr *hdr;
3816 	struct rfc1042_hdr *rfc1042;
3817 	struct ethhdr *eth;
3818 	size_t hdrlen;
3819 	u8 da[ETH_ALEN];
3820 	u8 sa[ETH_ALEN];
3821 	__be16 type;
3822 
3823 	hdr = (void *)skb->data;
3824 	hdrlen = ieee80211_hdrlen(hdr->frame_control);
3825 	rfc1042 = (void *)skb->data + hdrlen;
3826 
3827 	ether_addr_copy(da, ieee80211_get_DA(hdr));
3828 	ether_addr_copy(sa, ieee80211_get_SA(hdr));
3829 	type = rfc1042->snap_type;
3830 
3831 	skb_pull(skb, hdrlen + sizeof(*rfc1042));
3832 	skb_push(skb, sizeof(*eth));
3833 
3834 	eth = (void *)skb->data;
3835 	ether_addr_copy(eth->h_dest, da);
3836 	ether_addr_copy(eth->h_source, sa);
3837 	eth->h_proto = type;
3838 }
3839 
3840 static void ath10k_tx_h_add_p2p_noa_ie(struct ath10k *ar,
3841 				       struct ieee80211_vif *vif,
3842 				       struct sk_buff *skb)
3843 {
3844 	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
3845 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
3846 
3847 	/* This is case only for P2P_GO */
3848 	if (vif->type != NL80211_IFTYPE_AP || !vif->p2p)
3849 		return;
3850 
3851 	if (unlikely(ieee80211_is_probe_resp(hdr->frame_control))) {
3852 		spin_lock_bh(&ar->data_lock);
3853 		if (arvif->u.ap.noa_data)
3854 			if (!pskb_expand_head(skb, 0, arvif->u.ap.noa_len,
3855 					      GFP_ATOMIC))
3856 				skb_put_data(skb, arvif->u.ap.noa_data,
3857 					     arvif->u.ap.noa_len);
3858 		spin_unlock_bh(&ar->data_lock);
3859 	}
3860 }
3861 
3862 static void ath10k_mac_tx_h_fill_cb(struct ath10k *ar,
3863 				    struct ieee80211_vif *vif,
3864 				    struct ieee80211_txq *txq,
3865 				    struct ieee80211_sta *sta,
3866 				    struct sk_buff *skb, u16 airtime)
3867 {
3868 	struct ieee80211_hdr *hdr = (void *)skb->data;
3869 	struct ath10k_skb_cb *cb = ATH10K_SKB_CB(skb);
3870 	const struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
3871 	bool is_data = ieee80211_is_data(hdr->frame_control) ||
3872 			ieee80211_is_data_qos(hdr->frame_control);
3873 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
3874 	struct ath10k_sta *arsta;
3875 	u8 tid, *qos_ctl;
3876 	bool noack = false;
3877 
3878 	cb->flags = 0;
3879 
3880 	if (info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP) {
3881 		cb->flags |= ATH10K_SKB_F_QOS;	/* Assume data frames are QoS */
3882 		goto finish_cb_fill;
3883 	}
3884 
3885 	if (!ath10k_tx_h_use_hwcrypto(vif, skb))
3886 		cb->flags |= ATH10K_SKB_F_NO_HWCRYPT;
3887 
3888 	if (ieee80211_is_mgmt(hdr->frame_control))
3889 		cb->flags |= ATH10K_SKB_F_MGMT;
3890 
3891 	if (ieee80211_is_data_qos(hdr->frame_control)) {
3892 		cb->flags |= ATH10K_SKB_F_QOS;
3893 		qos_ctl = ieee80211_get_qos_ctl(hdr);
3894 		tid = (*qos_ctl) & IEEE80211_QOS_CTL_TID_MASK;
3895 
3896 		if (arvif->noack[tid] == WMI_PEER_TID_CONFIG_NOACK)
3897 			noack = true;
3898 
3899 		if (sta) {
3900 			arsta = (struct ath10k_sta *)sta->drv_priv;
3901 
3902 			if (arsta->noack[tid] == WMI_PEER_TID_CONFIG_NOACK)
3903 				noack = true;
3904 
3905 			if (arsta->noack[tid] == WMI_PEER_TID_CONFIG_ACK)
3906 				noack = false;
3907 		}
3908 
3909 		if (noack)
3910 			cb->flags |= ATH10K_SKB_F_NOACK_TID;
3911 	}
3912 
3913 	/* Data frames encrypted in software will be posted to firmware
3914 	 * with tx encap mode set to RAW. Ex: Multicast traffic generated
3915 	 * for a specific VLAN group will always be encrypted in software.
3916 	 */
3917 	if (is_data && ieee80211_has_protected(hdr->frame_control) &&
3918 	    !info->control.hw_key) {
3919 		cb->flags |= ATH10K_SKB_F_NO_HWCRYPT;
3920 		cb->flags |= ATH10K_SKB_F_RAW_TX;
3921 	}
3922 
3923 finish_cb_fill:
3924 	cb->vif = vif;
3925 	cb->txq = txq;
3926 	cb->airtime_est = airtime;
3927 	if (sta) {
3928 		arsta = (struct ath10k_sta *)sta->drv_priv;
3929 		spin_lock_bh(&ar->data_lock);
3930 		cb->ucast_cipher = arsta->ucast_cipher;
3931 		spin_unlock_bh(&ar->data_lock);
3932 	}
3933 }
3934 
3935 bool ath10k_mac_tx_frm_has_freq(struct ath10k *ar)
3936 {
3937 	/* FIXME: Not really sure since when the behaviour changed. At some
3938 	 * point new firmware stopped requiring creation of peer entries for
3939 	 * offchannel tx (and actually creating them causes issues with wmi-htc
3940 	 * tx credit replenishment and reliability). Assuming it's at least 3.4
3941 	 * because that's when the `freq` was introduced to TX_FRM HTT command.
3942 	 */
3943 	return (ar->htt.target_version_major >= 3 &&
3944 		ar->htt.target_version_minor >= 4 &&
3945 		ar->running_fw->fw_file.htt_op_version == ATH10K_FW_HTT_OP_VERSION_TLV);
3946 }
3947 
3948 static int ath10k_mac_tx_wmi_mgmt(struct ath10k *ar, struct sk_buff *skb)
3949 {
3950 	struct sk_buff_head *q = &ar->wmi_mgmt_tx_queue;
3951 
3952 	if (skb_queue_len_lockless(q) >= ATH10K_MAX_NUM_MGMT_PENDING) {
3953 		ath10k_warn(ar, "wmi mgmt tx queue is full\n");
3954 		return -ENOSPC;
3955 	}
3956 
3957 	skb_queue_tail(q, skb);
3958 	ieee80211_queue_work(ar->hw, &ar->wmi_mgmt_tx_work);
3959 
3960 	return 0;
3961 }
3962 
3963 static enum ath10k_mac_tx_path
3964 ath10k_mac_tx_h_get_txpath(struct ath10k *ar,
3965 			   struct sk_buff *skb,
3966 			   enum ath10k_hw_txrx_mode txmode)
3967 {
3968 	switch (txmode) {
3969 	case ATH10K_HW_TXRX_RAW:
3970 	case ATH10K_HW_TXRX_NATIVE_WIFI:
3971 	case ATH10K_HW_TXRX_ETHERNET:
3972 		return ATH10K_MAC_TX_HTT;
3973 	case ATH10K_HW_TXRX_MGMT:
3974 		if (test_bit(ATH10K_FW_FEATURE_HAS_WMI_MGMT_TX,
3975 			     ar->running_fw->fw_file.fw_features) ||
3976 			     test_bit(WMI_SERVICE_MGMT_TX_WMI,
3977 				      ar->wmi.svc_map))
3978 			return ATH10K_MAC_TX_WMI_MGMT;
3979 		else if (ar->htt.target_version_major >= 3)
3980 			return ATH10K_MAC_TX_HTT;
3981 		else
3982 			return ATH10K_MAC_TX_HTT_MGMT;
3983 	}
3984 
3985 	return ATH10K_MAC_TX_UNKNOWN;
3986 }
3987 
3988 static int ath10k_mac_tx_submit(struct ath10k *ar,
3989 				enum ath10k_hw_txrx_mode txmode,
3990 				enum ath10k_mac_tx_path txpath,
3991 				struct sk_buff *skb)
3992 {
3993 	struct ath10k_htt *htt = &ar->htt;
3994 	int ret = -EINVAL;
3995 
3996 	switch (txpath) {
3997 	case ATH10K_MAC_TX_HTT:
3998 		ret = ath10k_htt_tx(htt, txmode, skb);
3999 		break;
4000 	case ATH10K_MAC_TX_HTT_MGMT:
4001 		ret = ath10k_htt_mgmt_tx(htt, skb);
4002 		break;
4003 	case ATH10K_MAC_TX_WMI_MGMT:
4004 		ret = ath10k_mac_tx_wmi_mgmt(ar, skb);
4005 		break;
4006 	case ATH10K_MAC_TX_UNKNOWN:
4007 		WARN_ON_ONCE(1);
4008 		ret = -EINVAL;
4009 		break;
4010 	}
4011 
4012 	if (ret) {
4013 		ath10k_warn(ar, "failed to transmit packet, dropping: %d\n",
4014 			    ret);
4015 		ieee80211_free_txskb(ar->hw, skb);
4016 	}
4017 
4018 	return ret;
4019 }
4020 
4021 /* This function consumes the sk_buff regardless of return value as far as
4022  * caller is concerned so no freeing is necessary afterwards.
4023  */
4024 static int ath10k_mac_tx(struct ath10k *ar,
4025 			 struct ieee80211_vif *vif,
4026 			 enum ath10k_hw_txrx_mode txmode,
4027 			 enum ath10k_mac_tx_path txpath,
4028 			 struct sk_buff *skb, bool noque_offchan)
4029 {
4030 	struct ieee80211_hw *hw = ar->hw;
4031 	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
4032 	const struct ath10k_skb_cb *skb_cb = ATH10K_SKB_CB(skb);
4033 	int ret;
4034 
4035 	/* We should disable CCK RATE due to P2P */
4036 	if (info->flags & IEEE80211_TX_CTL_NO_CCK_RATE)
4037 		ath10k_dbg(ar, ATH10K_DBG_MAC, "IEEE80211_TX_CTL_NO_CCK_RATE\n");
4038 
4039 	switch (txmode) {
4040 	case ATH10K_HW_TXRX_MGMT:
4041 	case ATH10K_HW_TXRX_NATIVE_WIFI:
4042 		ath10k_tx_h_nwifi(hw, skb);
4043 		ath10k_tx_h_add_p2p_noa_ie(ar, vif, skb);
4044 		ath10k_tx_h_seq_no(vif, skb);
4045 		break;
4046 	case ATH10K_HW_TXRX_ETHERNET:
4047 		/* Convert 802.11->802.3 header only if the frame was erlier
4048 		 * encapsulated to 802.11 by mac80211. Otherwise pass it as is.
4049 		 */
4050 		if (!(info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP))
4051 			ath10k_tx_h_8023(skb);
4052 		break;
4053 	case ATH10K_HW_TXRX_RAW:
4054 		if (!test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags) &&
4055 		    !(skb_cb->flags & ATH10K_SKB_F_RAW_TX)) {
4056 			WARN_ON_ONCE(1);
4057 			ieee80211_free_txskb(hw, skb);
4058 			return -ENOTSUPP;
4059 		}
4060 	}
4061 
4062 	if (!noque_offchan && info->flags & IEEE80211_TX_CTL_TX_OFFCHAN) {
4063 		if (!ath10k_mac_tx_frm_has_freq(ar)) {
4064 			ath10k_dbg(ar, ATH10K_DBG_MAC, "mac queued offchannel skb %pK len %d\n",
4065 				   skb, skb->len);
4066 
4067 			skb_queue_tail(&ar->offchan_tx_queue, skb);
4068 			ieee80211_queue_work(hw, &ar->offchan_tx_work);
4069 			return 0;
4070 		}
4071 	}
4072 
4073 	ret = ath10k_mac_tx_submit(ar, txmode, txpath, skb);
4074 	if (ret) {
4075 		ath10k_warn(ar, "failed to submit frame: %d\n", ret);
4076 		return ret;
4077 	}
4078 
4079 	return 0;
4080 }
4081 
4082 void ath10k_offchan_tx_purge(struct ath10k *ar)
4083 {
4084 	struct sk_buff *skb;
4085 
4086 	for (;;) {
4087 		skb = skb_dequeue(&ar->offchan_tx_queue);
4088 		if (!skb)
4089 			break;
4090 
4091 		ieee80211_free_txskb(ar->hw, skb);
4092 	}
4093 }
4094 
4095 void ath10k_offchan_tx_work(struct work_struct *work)
4096 {
4097 	struct ath10k *ar = container_of(work, struct ath10k, offchan_tx_work);
4098 	struct ath10k_peer *peer;
4099 	struct ath10k_vif *arvif;
4100 	enum ath10k_hw_txrx_mode txmode;
4101 	enum ath10k_mac_tx_path txpath;
4102 	struct ieee80211_hdr *hdr;
4103 	struct ieee80211_vif *vif;
4104 	struct ieee80211_sta *sta;
4105 	struct sk_buff *skb;
4106 	const u8 *peer_addr;
4107 	int vdev_id;
4108 	int ret;
4109 	unsigned long time_left;
4110 	bool tmp_peer_created = false;
4111 
4112 	/* FW requirement: We must create a peer before FW will send out
4113 	 * an offchannel frame. Otherwise the frame will be stuck and
4114 	 * never transmitted. We delete the peer upon tx completion.
4115 	 * It is unlikely that a peer for offchannel tx will already be
4116 	 * present. However it may be in some rare cases so account for that.
4117 	 * Otherwise we might remove a legitimate peer and break stuff.
4118 	 */
4119 
4120 	for (;;) {
4121 		skb = skb_dequeue(&ar->offchan_tx_queue);
4122 		if (!skb)
4123 			break;
4124 
4125 		mutex_lock(&ar->conf_mutex);
4126 
4127 		ath10k_dbg(ar, ATH10K_DBG_MAC, "mac offchannel skb %pK len %d\n",
4128 			   skb, skb->len);
4129 
4130 		hdr = (struct ieee80211_hdr *)skb->data;
4131 		peer_addr = ieee80211_get_DA(hdr);
4132 
4133 		spin_lock_bh(&ar->data_lock);
4134 		vdev_id = ar->scan.vdev_id;
4135 		peer = ath10k_peer_find(ar, vdev_id, peer_addr);
4136 		spin_unlock_bh(&ar->data_lock);
4137 
4138 		if (peer) {
4139 			ath10k_warn(ar, "peer %pM on vdev %d already present\n",
4140 				    peer_addr, vdev_id);
4141 		} else {
4142 			ret = ath10k_peer_create(ar, NULL, NULL, vdev_id,
4143 						 peer_addr,
4144 						 WMI_PEER_TYPE_DEFAULT);
4145 			if (ret)
4146 				ath10k_warn(ar, "failed to create peer %pM on vdev %d: %d\n",
4147 					    peer_addr, vdev_id, ret);
4148 			tmp_peer_created = (ret == 0);
4149 		}
4150 
4151 		spin_lock_bh(&ar->data_lock);
4152 		reinit_completion(&ar->offchan_tx_completed);
4153 		ar->offchan_tx_skb = skb;
4154 		spin_unlock_bh(&ar->data_lock);
4155 
4156 		/* It's safe to access vif and sta - conf_mutex guarantees that
4157 		 * sta_state() and remove_interface() are locked exclusively
4158 		 * out wrt to this offchannel worker.
4159 		 */
4160 		arvif = ath10k_get_arvif(ar, vdev_id);
4161 		if (arvif) {
4162 			vif = arvif->vif;
4163 			sta = ieee80211_find_sta(vif, peer_addr);
4164 		} else {
4165 			vif = NULL;
4166 			sta = NULL;
4167 		}
4168 
4169 		txmode = ath10k_mac_tx_h_get_txmode(ar, vif, sta, skb);
4170 		txpath = ath10k_mac_tx_h_get_txpath(ar, skb, txmode);
4171 
4172 		ret = ath10k_mac_tx(ar, vif, txmode, txpath, skb, true);
4173 		if (ret) {
4174 			ath10k_warn(ar, "failed to transmit offchannel frame: %d\n",
4175 				    ret);
4176 			/* not serious */
4177 		}
4178 
4179 		time_left =
4180 		wait_for_completion_timeout(&ar->offchan_tx_completed, 3 * HZ);
4181 		if (time_left == 0)
4182 			ath10k_warn(ar, "timed out waiting for offchannel skb %pK, len: %d\n",
4183 				    skb, skb->len);
4184 
4185 		if (!peer && tmp_peer_created) {
4186 			ret = ath10k_peer_delete(ar, vdev_id, peer_addr);
4187 			if (ret)
4188 				ath10k_warn(ar, "failed to delete peer %pM on vdev %d: %d\n",
4189 					    peer_addr, vdev_id, ret);
4190 		}
4191 
4192 		mutex_unlock(&ar->conf_mutex);
4193 	}
4194 }
4195 
4196 void ath10k_mgmt_over_wmi_tx_purge(struct ath10k *ar)
4197 {
4198 	struct sk_buff *skb;
4199 
4200 	for (;;) {
4201 		skb = skb_dequeue(&ar->wmi_mgmt_tx_queue);
4202 		if (!skb)
4203 			break;
4204 
4205 		ieee80211_free_txskb(ar->hw, skb);
4206 	}
4207 }
4208 
4209 void ath10k_mgmt_over_wmi_tx_work(struct work_struct *work)
4210 {
4211 	struct ath10k *ar = container_of(work, struct ath10k, wmi_mgmt_tx_work);
4212 	struct sk_buff *skb;
4213 	dma_addr_t paddr;
4214 	int ret;
4215 
4216 	for (;;) {
4217 		skb = skb_dequeue(&ar->wmi_mgmt_tx_queue);
4218 		if (!skb)
4219 			break;
4220 
4221 		if (test_bit(ATH10K_FW_FEATURE_MGMT_TX_BY_REF,
4222 			     ar->running_fw->fw_file.fw_features)) {
4223 			paddr = dma_map_single(ar->dev, skb->data,
4224 					       skb->len, DMA_TO_DEVICE);
4225 			if (dma_mapping_error(ar->dev, paddr)) {
4226 				ieee80211_free_txskb(ar->hw, skb);
4227 				continue;
4228 			}
4229 			ret = ath10k_wmi_mgmt_tx_send(ar, skb, paddr);
4230 			if (ret) {
4231 				ath10k_warn(ar, "failed to transmit management frame by ref via WMI: %d\n",
4232 					    ret);
4233 				/* remove this msdu from idr tracking */
4234 				ath10k_wmi_cleanup_mgmt_tx_send(ar, skb);
4235 
4236 				dma_unmap_single(ar->dev, paddr, skb->len,
4237 						 DMA_TO_DEVICE);
4238 				ieee80211_free_txskb(ar->hw, skb);
4239 			}
4240 		} else {
4241 			ret = ath10k_wmi_mgmt_tx(ar, skb);
4242 			if (ret) {
4243 				ath10k_warn(ar, "failed to transmit management frame via WMI: %d\n",
4244 					    ret);
4245 				ieee80211_free_txskb(ar->hw, skb);
4246 			}
4247 		}
4248 	}
4249 }
4250 
4251 static void ath10k_mac_txq_init(struct ieee80211_txq *txq)
4252 {
4253 	struct ath10k_txq *artxq;
4254 
4255 	if (!txq)
4256 		return;
4257 
4258 	artxq = (void *)txq->drv_priv;
4259 	INIT_LIST_HEAD(&artxq->list);
4260 }
4261 
4262 static void ath10k_mac_txq_unref(struct ath10k *ar, struct ieee80211_txq *txq)
4263 {
4264 	struct ath10k_skb_cb *cb;
4265 	struct sk_buff *msdu;
4266 	int msdu_id;
4267 
4268 	if (!txq)
4269 		return;
4270 
4271 	spin_lock_bh(&ar->htt.tx_lock);
4272 	idr_for_each_entry(&ar->htt.pending_tx, msdu, msdu_id) {
4273 		cb = ATH10K_SKB_CB(msdu);
4274 		if (cb->txq == txq)
4275 			cb->txq = NULL;
4276 	}
4277 	spin_unlock_bh(&ar->htt.tx_lock);
4278 }
4279 
4280 struct ieee80211_txq *ath10k_mac_txq_lookup(struct ath10k *ar,
4281 					    u16 peer_id,
4282 					    u8 tid)
4283 {
4284 	struct ath10k_peer *peer;
4285 
4286 	lockdep_assert_held(&ar->data_lock);
4287 
4288 	peer = ar->peer_map[peer_id];
4289 	if (!peer)
4290 		return NULL;
4291 
4292 	if (peer->removed)
4293 		return NULL;
4294 
4295 	if (peer->sta)
4296 		return peer->sta->txq[tid];
4297 	else if (peer->vif)
4298 		return peer->vif->txq;
4299 	else
4300 		return NULL;
4301 }
4302 
4303 static bool ath10k_mac_tx_can_push(struct ieee80211_hw *hw,
4304 				   struct ieee80211_txq *txq)
4305 {
4306 	struct ath10k *ar = hw->priv;
4307 	struct ath10k_txq *artxq = (void *)txq->drv_priv;
4308 
4309 	/* No need to get locks */
4310 	if (ar->htt.tx_q_state.mode == HTT_TX_MODE_SWITCH_PUSH)
4311 		return true;
4312 
4313 	if (ar->htt.num_pending_tx < ar->htt.tx_q_state.num_push_allowed)
4314 		return true;
4315 
4316 	if (artxq->num_fw_queued < artxq->num_push_allowed)
4317 		return true;
4318 
4319 	return false;
4320 }
4321 
4322 /* Return estimated airtime in microsecond, which is calculated using last
4323  * reported TX rate. This is just a rough estimation because host driver has no
4324  * knowledge of the actual transmit rate, retries or aggregation. If actual
4325  * airtime can be reported by firmware, then delta between estimated and actual
4326  * airtime can be adjusted from deficit.
4327  */
4328 #define IEEE80211_ATF_OVERHEAD		100	/* IFS + some slot time */
4329 #define IEEE80211_ATF_OVERHEAD_IFS	16	/* IFS only */
4330 static u16 ath10k_mac_update_airtime(struct ath10k *ar,
4331 				     struct ieee80211_txq *txq,
4332 				     struct sk_buff *skb)
4333 {
4334 	struct ath10k_sta *arsta;
4335 	u32 pktlen;
4336 	u16 airtime = 0;
4337 
4338 	if (!txq || !txq->sta)
4339 		return airtime;
4340 
4341 	if (test_bit(WMI_SERVICE_REPORT_AIRTIME, ar->wmi.svc_map))
4342 		return airtime;
4343 
4344 	spin_lock_bh(&ar->data_lock);
4345 	arsta = (struct ath10k_sta *)txq->sta->drv_priv;
4346 
4347 	pktlen = skb->len + 38; /* Assume MAC header 30, SNAP 8 for most case */
4348 	if (arsta->last_tx_bitrate) {
4349 		/* airtime in us, last_tx_bitrate in 100kbps */
4350 		airtime = (pktlen * 8 * (1000 / 100))
4351 				/ arsta->last_tx_bitrate;
4352 		/* overhead for media access time and IFS */
4353 		airtime += IEEE80211_ATF_OVERHEAD_IFS;
4354 	} else {
4355 		/* This is mostly for throttle excessive BC/MC frames, and the
4356 		 * airtime/rate doesn't need be exact. Airtime of BC/MC frames
4357 		 * in 2G get some discount, which helps prevent very low rate
4358 		 * frames from being blocked for too long.
4359 		 */
4360 		airtime = (pktlen * 8 * (1000 / 100)) / 60; /* 6M */
4361 		airtime += IEEE80211_ATF_OVERHEAD;
4362 	}
4363 	spin_unlock_bh(&ar->data_lock);
4364 
4365 	return airtime;
4366 }
4367 
4368 int ath10k_mac_tx_push_txq(struct ieee80211_hw *hw,
4369 			   struct ieee80211_txq *txq)
4370 {
4371 	struct ath10k *ar = hw->priv;
4372 	struct ath10k_htt *htt = &ar->htt;
4373 	struct ath10k_txq *artxq = (void *)txq->drv_priv;
4374 	struct ieee80211_vif *vif = txq->vif;
4375 	struct ieee80211_sta *sta = txq->sta;
4376 	enum ath10k_hw_txrx_mode txmode;
4377 	enum ath10k_mac_tx_path txpath;
4378 	struct sk_buff *skb;
4379 	struct ieee80211_hdr *hdr;
4380 	size_t skb_len;
4381 	bool is_mgmt, is_presp;
4382 	int ret;
4383 	u16 airtime;
4384 
4385 	spin_lock_bh(&ar->htt.tx_lock);
4386 	ret = ath10k_htt_tx_inc_pending(htt);
4387 	spin_unlock_bh(&ar->htt.tx_lock);
4388 
4389 	if (ret)
4390 		return ret;
4391 
4392 	skb = ieee80211_tx_dequeue_ni(hw, txq);
4393 	if (!skb) {
4394 		spin_lock_bh(&ar->htt.tx_lock);
4395 		ath10k_htt_tx_dec_pending(htt);
4396 		spin_unlock_bh(&ar->htt.tx_lock);
4397 
4398 		return -ENOENT;
4399 	}
4400 
4401 	airtime = ath10k_mac_update_airtime(ar, txq, skb);
4402 	ath10k_mac_tx_h_fill_cb(ar, vif, txq, sta, skb, airtime);
4403 
4404 	skb_len = skb->len;
4405 	txmode = ath10k_mac_tx_h_get_txmode(ar, vif, sta, skb);
4406 	txpath = ath10k_mac_tx_h_get_txpath(ar, skb, txmode);
4407 	is_mgmt = (txpath == ATH10K_MAC_TX_HTT_MGMT);
4408 
4409 	if (is_mgmt) {
4410 		hdr = (struct ieee80211_hdr *)skb->data;
4411 		is_presp = ieee80211_is_probe_resp(hdr->frame_control);
4412 
4413 		spin_lock_bh(&ar->htt.tx_lock);
4414 		ret = ath10k_htt_tx_mgmt_inc_pending(htt, is_mgmt, is_presp);
4415 
4416 		if (ret) {
4417 			ath10k_htt_tx_dec_pending(htt);
4418 			spin_unlock_bh(&ar->htt.tx_lock);
4419 			return ret;
4420 		}
4421 		spin_unlock_bh(&ar->htt.tx_lock);
4422 	}
4423 
4424 	ret = ath10k_mac_tx(ar, vif, txmode, txpath, skb, false);
4425 	if (unlikely(ret)) {
4426 		ath10k_warn(ar, "failed to push frame: %d\n", ret);
4427 
4428 		spin_lock_bh(&ar->htt.tx_lock);
4429 		ath10k_htt_tx_dec_pending(htt);
4430 		if (is_mgmt)
4431 			ath10k_htt_tx_mgmt_dec_pending(htt);
4432 		spin_unlock_bh(&ar->htt.tx_lock);
4433 
4434 		return ret;
4435 	}
4436 
4437 	spin_lock_bh(&ar->htt.tx_lock);
4438 	artxq->num_fw_queued++;
4439 	spin_unlock_bh(&ar->htt.tx_lock);
4440 
4441 	return skb_len;
4442 }
4443 
4444 static int ath10k_mac_schedule_txq(struct ieee80211_hw *hw, u32 ac)
4445 {
4446 	struct ieee80211_txq *txq;
4447 	int ret = 0;
4448 
4449 	ieee80211_txq_schedule_start(hw, ac);
4450 	while ((txq = ieee80211_next_txq(hw, ac))) {
4451 		while (ath10k_mac_tx_can_push(hw, txq)) {
4452 			ret = ath10k_mac_tx_push_txq(hw, txq);
4453 			if (ret < 0)
4454 				break;
4455 		}
4456 		ieee80211_return_txq(hw, txq, false);
4457 		ath10k_htt_tx_txq_update(hw, txq);
4458 		if (ret == -EBUSY)
4459 			break;
4460 	}
4461 	ieee80211_txq_schedule_end(hw, ac);
4462 
4463 	return ret;
4464 }
4465 
4466 void ath10k_mac_tx_push_pending(struct ath10k *ar)
4467 {
4468 	struct ieee80211_hw *hw = ar->hw;
4469 	u32 ac;
4470 
4471 	if (ar->htt.tx_q_state.mode != HTT_TX_MODE_SWITCH_PUSH)
4472 		return;
4473 
4474 	if (ar->htt.num_pending_tx >= (ar->htt.max_num_pending_tx / 2))
4475 		return;
4476 
4477 	rcu_read_lock();
4478 	for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
4479 		if (ath10k_mac_schedule_txq(hw, ac) == -EBUSY)
4480 			break;
4481 	}
4482 	rcu_read_unlock();
4483 }
4484 EXPORT_SYMBOL(ath10k_mac_tx_push_pending);
4485 
4486 /************/
4487 /* Scanning */
4488 /************/
4489 
4490 void __ath10k_scan_finish(struct ath10k *ar)
4491 {
4492 	lockdep_assert_held(&ar->data_lock);
4493 
4494 	switch (ar->scan.state) {
4495 	case ATH10K_SCAN_IDLE:
4496 		break;
4497 	case ATH10K_SCAN_RUNNING:
4498 	case ATH10K_SCAN_ABORTING:
4499 		if (!ar->scan.is_roc) {
4500 			struct cfg80211_scan_info info = {
4501 				.aborted = (ar->scan.state ==
4502 					    ATH10K_SCAN_ABORTING),
4503 			};
4504 
4505 			ieee80211_scan_completed(ar->hw, &info);
4506 		} else if (ar->scan.roc_notify) {
4507 			ieee80211_remain_on_channel_expired(ar->hw);
4508 		}
4509 		fallthrough;
4510 	case ATH10K_SCAN_STARTING:
4511 		ar->scan.state = ATH10K_SCAN_IDLE;
4512 		ar->scan_channel = NULL;
4513 		ar->scan.roc_freq = 0;
4514 		ath10k_offchan_tx_purge(ar);
4515 		cancel_delayed_work(&ar->scan.timeout);
4516 		complete(&ar->scan.completed);
4517 		break;
4518 	}
4519 }
4520 
4521 void ath10k_scan_finish(struct ath10k *ar)
4522 {
4523 	spin_lock_bh(&ar->data_lock);
4524 	__ath10k_scan_finish(ar);
4525 	spin_unlock_bh(&ar->data_lock);
4526 }
4527 
4528 static int ath10k_scan_stop(struct ath10k *ar)
4529 {
4530 	struct wmi_stop_scan_arg arg = {
4531 		.req_id = 1, /* FIXME */
4532 		.req_type = WMI_SCAN_STOP_ONE,
4533 		.u.scan_id = ATH10K_SCAN_ID,
4534 	};
4535 	int ret;
4536 
4537 	lockdep_assert_held(&ar->conf_mutex);
4538 
4539 	ret = ath10k_wmi_stop_scan(ar, &arg);
4540 	if (ret) {
4541 		ath10k_warn(ar, "failed to stop wmi scan: %d\n", ret);
4542 		goto out;
4543 	}
4544 
4545 	ret = wait_for_completion_timeout(&ar->scan.completed, 3 * HZ);
4546 	if (ret == 0) {
4547 		ath10k_warn(ar, "failed to receive scan abortion completion: timed out\n");
4548 		ret = -ETIMEDOUT;
4549 	} else if (ret > 0) {
4550 		ret = 0;
4551 	}
4552 
4553 out:
4554 	/* Scan state should be updated upon scan completion but in case
4555 	 * firmware fails to deliver the event (for whatever reason) it is
4556 	 * desired to clean up scan state anyway. Firmware may have just
4557 	 * dropped the scan completion event delivery due to transport pipe
4558 	 * being overflown with data and/or it can recover on its own before
4559 	 * next scan request is submitted.
4560 	 */
4561 	spin_lock_bh(&ar->data_lock);
4562 	if (ar->scan.state != ATH10K_SCAN_IDLE)
4563 		__ath10k_scan_finish(ar);
4564 	spin_unlock_bh(&ar->data_lock);
4565 
4566 	return ret;
4567 }
4568 
4569 static void ath10k_scan_abort(struct ath10k *ar)
4570 {
4571 	int ret;
4572 
4573 	lockdep_assert_held(&ar->conf_mutex);
4574 
4575 	spin_lock_bh(&ar->data_lock);
4576 
4577 	switch (ar->scan.state) {
4578 	case ATH10K_SCAN_IDLE:
4579 		/* This can happen if timeout worker kicked in and called
4580 		 * abortion while scan completion was being processed.
4581 		 */
4582 		break;
4583 	case ATH10K_SCAN_STARTING:
4584 	case ATH10K_SCAN_ABORTING:
4585 		ath10k_warn(ar, "refusing scan abortion due to invalid scan state: %s (%d)\n",
4586 			    ath10k_scan_state_str(ar->scan.state),
4587 			    ar->scan.state);
4588 		break;
4589 	case ATH10K_SCAN_RUNNING:
4590 		ar->scan.state = ATH10K_SCAN_ABORTING;
4591 		spin_unlock_bh(&ar->data_lock);
4592 
4593 		ret = ath10k_scan_stop(ar);
4594 		if (ret)
4595 			ath10k_warn(ar, "failed to abort scan: %d\n", ret);
4596 
4597 		spin_lock_bh(&ar->data_lock);
4598 		break;
4599 	}
4600 
4601 	spin_unlock_bh(&ar->data_lock);
4602 }
4603 
4604 void ath10k_scan_timeout_work(struct work_struct *work)
4605 {
4606 	struct ath10k *ar = container_of(work, struct ath10k,
4607 					 scan.timeout.work);
4608 
4609 	mutex_lock(&ar->conf_mutex);
4610 	ath10k_scan_abort(ar);
4611 	mutex_unlock(&ar->conf_mutex);
4612 }
4613 
4614 static int ath10k_start_scan(struct ath10k *ar,
4615 			     const struct wmi_start_scan_arg *arg)
4616 {
4617 	int ret;
4618 
4619 	lockdep_assert_held(&ar->conf_mutex);
4620 
4621 	ret = ath10k_wmi_start_scan(ar, arg);
4622 	if (ret)
4623 		return ret;
4624 
4625 	ret = wait_for_completion_timeout(&ar->scan.started, 1 * HZ);
4626 	if (ret == 0) {
4627 		ret = ath10k_scan_stop(ar);
4628 		if (ret)
4629 			ath10k_warn(ar, "failed to stop scan: %d\n", ret);
4630 
4631 		return -ETIMEDOUT;
4632 	}
4633 
4634 	/* If we failed to start the scan, return error code at
4635 	 * this point.  This is probably due to some issue in the
4636 	 * firmware, but no need to wedge the driver due to that...
4637 	 */
4638 	spin_lock_bh(&ar->data_lock);
4639 	if (ar->scan.state == ATH10K_SCAN_IDLE) {
4640 		spin_unlock_bh(&ar->data_lock);
4641 		return -EINVAL;
4642 	}
4643 	spin_unlock_bh(&ar->data_lock);
4644 
4645 	return 0;
4646 }
4647 
4648 /**********************/
4649 /* mac80211 callbacks */
4650 /**********************/
4651 
4652 static void ath10k_mac_op_tx(struct ieee80211_hw *hw,
4653 			     struct ieee80211_tx_control *control,
4654 			     struct sk_buff *skb)
4655 {
4656 	struct ath10k *ar = hw->priv;
4657 	struct ath10k_htt *htt = &ar->htt;
4658 	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
4659 	struct ieee80211_vif *vif = info->control.vif;
4660 	struct ieee80211_sta *sta = control->sta;
4661 	struct ieee80211_txq *txq = NULL;
4662 	enum ath10k_hw_txrx_mode txmode;
4663 	enum ath10k_mac_tx_path txpath;
4664 	bool is_htt;
4665 	bool is_mgmt;
4666 	int ret;
4667 	u16 airtime;
4668 
4669 	airtime = ath10k_mac_update_airtime(ar, txq, skb);
4670 	ath10k_mac_tx_h_fill_cb(ar, vif, txq, sta, skb, airtime);
4671 
4672 	txmode = ath10k_mac_tx_h_get_txmode(ar, vif, sta, skb);
4673 	txpath = ath10k_mac_tx_h_get_txpath(ar, skb, txmode);
4674 	is_htt = (txpath == ATH10K_MAC_TX_HTT ||
4675 		  txpath == ATH10K_MAC_TX_HTT_MGMT);
4676 	is_mgmt = (txpath == ATH10K_MAC_TX_HTT_MGMT);
4677 
4678 	if (is_htt) {
4679 		bool is_presp = false;
4680 
4681 		spin_lock_bh(&ar->htt.tx_lock);
4682 		if (!(info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP)) {
4683 			struct ieee80211_hdr *hdr = (void *)skb->data;
4684 
4685 			is_presp = ieee80211_is_probe_resp(hdr->frame_control);
4686 		}
4687 
4688 		ret = ath10k_htt_tx_inc_pending(htt);
4689 		if (ret) {
4690 			ath10k_warn(ar, "failed to increase tx pending count: %d, dropping\n",
4691 				    ret);
4692 			spin_unlock_bh(&ar->htt.tx_lock);
4693 			ieee80211_free_txskb(ar->hw, skb);
4694 			return;
4695 		}
4696 
4697 		ret = ath10k_htt_tx_mgmt_inc_pending(htt, is_mgmt, is_presp);
4698 		if (ret) {
4699 			ath10k_dbg(ar, ATH10K_DBG_MAC, "failed to increase tx mgmt pending count: %d, dropping\n",
4700 				   ret);
4701 			ath10k_htt_tx_dec_pending(htt);
4702 			spin_unlock_bh(&ar->htt.tx_lock);
4703 			ieee80211_free_txskb(ar->hw, skb);
4704 			return;
4705 		}
4706 		spin_unlock_bh(&ar->htt.tx_lock);
4707 	}
4708 
4709 	ret = ath10k_mac_tx(ar, vif, txmode, txpath, skb, false);
4710 	if (ret) {
4711 		ath10k_warn(ar, "failed to transmit frame: %d\n", ret);
4712 		if (is_htt) {
4713 			spin_lock_bh(&ar->htt.tx_lock);
4714 			ath10k_htt_tx_dec_pending(htt);
4715 			if (is_mgmt)
4716 				ath10k_htt_tx_mgmt_dec_pending(htt);
4717 			spin_unlock_bh(&ar->htt.tx_lock);
4718 		}
4719 		return;
4720 	}
4721 }
4722 
4723 static void ath10k_mac_op_wake_tx_queue(struct ieee80211_hw *hw,
4724 					struct ieee80211_txq *txq)
4725 {
4726 	struct ath10k *ar = hw->priv;
4727 	int ret;
4728 	u8 ac;
4729 
4730 	ath10k_htt_tx_txq_update(hw, txq);
4731 	if (ar->htt.tx_q_state.mode != HTT_TX_MODE_SWITCH_PUSH)
4732 		return;
4733 
4734 	ac = txq->ac;
4735 	ieee80211_txq_schedule_start(hw, ac);
4736 	txq = ieee80211_next_txq(hw, ac);
4737 	if (!txq)
4738 		goto out;
4739 
4740 	while (ath10k_mac_tx_can_push(hw, txq)) {
4741 		ret = ath10k_mac_tx_push_txq(hw, txq);
4742 		if (ret < 0)
4743 			break;
4744 	}
4745 	ieee80211_return_txq(hw, txq, false);
4746 	ath10k_htt_tx_txq_update(hw, txq);
4747 out:
4748 	ieee80211_txq_schedule_end(hw, ac);
4749 }
4750 
4751 /* Must not be called with conf_mutex held as workers can use that also. */
4752 void ath10k_drain_tx(struct ath10k *ar)
4753 {
4754 	lockdep_assert_not_held(&ar->conf_mutex);
4755 
4756 	/* make sure rcu-protected mac80211 tx path itself is drained */
4757 	synchronize_net();
4758 
4759 	ath10k_offchan_tx_purge(ar);
4760 	ath10k_mgmt_over_wmi_tx_purge(ar);
4761 
4762 	cancel_work_sync(&ar->offchan_tx_work);
4763 	cancel_work_sync(&ar->wmi_mgmt_tx_work);
4764 }
4765 
4766 void ath10k_halt(struct ath10k *ar)
4767 {
4768 	struct ath10k_vif *arvif;
4769 
4770 	lockdep_assert_held(&ar->conf_mutex);
4771 
4772 	clear_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
4773 	ar->filter_flags = 0;
4774 	ar->monitor = false;
4775 	ar->monitor_arvif = NULL;
4776 
4777 	if (ar->monitor_started)
4778 		ath10k_monitor_stop(ar);
4779 
4780 	ar->monitor_started = false;
4781 	ar->tx_paused = 0;
4782 
4783 	ath10k_scan_finish(ar);
4784 	ath10k_peer_cleanup_all(ar);
4785 	ath10k_stop_radar_confirmation(ar);
4786 	ath10k_core_stop(ar);
4787 	ath10k_hif_power_down(ar);
4788 
4789 	spin_lock_bh(&ar->data_lock);
4790 	list_for_each_entry(arvif, &ar->arvifs, list)
4791 		ath10k_mac_vif_beacon_cleanup(arvif);
4792 	spin_unlock_bh(&ar->data_lock);
4793 }
4794 
4795 static int ath10k_get_antenna(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant)
4796 {
4797 	struct ath10k *ar = hw->priv;
4798 
4799 	mutex_lock(&ar->conf_mutex);
4800 
4801 	*tx_ant = ar->cfg_tx_chainmask;
4802 	*rx_ant = ar->cfg_rx_chainmask;
4803 
4804 	mutex_unlock(&ar->conf_mutex);
4805 
4806 	return 0;
4807 }
4808 
4809 static bool ath10k_check_chain_mask(struct ath10k *ar, u32 cm, const char *dbg)
4810 {
4811 	/* It is not clear that allowing gaps in chainmask
4812 	 * is helpful.  Probably it will not do what user
4813 	 * is hoping for, so warn in that case.
4814 	 */
4815 	if (cm == 15 || cm == 7 || cm == 3 || cm == 1 || cm == 0)
4816 		return true;
4817 
4818 	ath10k_warn(ar, "mac %s antenna chainmask is invalid: 0x%x.  Suggested values: 15, 7, 3, 1 or 0.\n",
4819 		    dbg, cm);
4820 	return false;
4821 }
4822 
4823 static int ath10k_mac_get_vht_cap_bf_sts(struct ath10k *ar)
4824 {
4825 	int nsts = ar->vht_cap_info;
4826 
4827 	nsts &= IEEE80211_VHT_CAP_BEAMFORMEE_STS_MASK;
4828 	nsts >>= IEEE80211_VHT_CAP_BEAMFORMEE_STS_SHIFT;
4829 
4830 	/* If firmware does not deliver to host number of space-time
4831 	 * streams supported, assume it support up to 4 BF STS and return
4832 	 * the value for VHT CAP: nsts-1)
4833 	 */
4834 	if (nsts == 0)
4835 		return 3;
4836 
4837 	return nsts;
4838 }
4839 
4840 static int ath10k_mac_get_vht_cap_bf_sound_dim(struct ath10k *ar)
4841 {
4842 	int sound_dim = ar->vht_cap_info;
4843 
4844 	sound_dim &= IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_MASK;
4845 	sound_dim >>= IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_SHIFT;
4846 
4847 	/* If the sounding dimension is not advertised by the firmware,
4848 	 * let's use a default value of 1
4849 	 */
4850 	if (sound_dim == 0)
4851 		return 1;
4852 
4853 	return sound_dim;
4854 }
4855 
4856 static struct ieee80211_sta_vht_cap ath10k_create_vht_cap(struct ath10k *ar)
4857 {
4858 	struct ieee80211_sta_vht_cap vht_cap = {0};
4859 	struct ath10k_hw_params *hw = &ar->hw_params;
4860 	u16 mcs_map;
4861 	u32 val;
4862 	int i;
4863 
4864 	vht_cap.vht_supported = 1;
4865 	vht_cap.cap = ar->vht_cap_info;
4866 
4867 	if (ar->vht_cap_info & (IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE |
4868 				IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE)) {
4869 		val = ath10k_mac_get_vht_cap_bf_sts(ar);
4870 		val <<= IEEE80211_VHT_CAP_BEAMFORMEE_STS_SHIFT;
4871 		val &= IEEE80211_VHT_CAP_BEAMFORMEE_STS_MASK;
4872 
4873 		vht_cap.cap |= val;
4874 	}
4875 
4876 	if (ar->vht_cap_info & (IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE |
4877 				IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE)) {
4878 		val = ath10k_mac_get_vht_cap_bf_sound_dim(ar);
4879 		val <<= IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_SHIFT;
4880 		val &= IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_MASK;
4881 
4882 		vht_cap.cap |= val;
4883 	}
4884 
4885 	mcs_map = 0;
4886 	for (i = 0; i < 8; i++) {
4887 		if ((i < ar->num_rf_chains) && (ar->cfg_tx_chainmask & BIT(i)))
4888 			mcs_map |= IEEE80211_VHT_MCS_SUPPORT_0_9 << (i * 2);
4889 		else
4890 			mcs_map |= IEEE80211_VHT_MCS_NOT_SUPPORTED << (i * 2);
4891 	}
4892 
4893 	if (ar->cfg_tx_chainmask <= 1)
4894 		vht_cap.cap &= ~IEEE80211_VHT_CAP_TXSTBC;
4895 
4896 	vht_cap.vht_mcs.rx_mcs_map = cpu_to_le16(mcs_map);
4897 	vht_cap.vht_mcs.tx_mcs_map = cpu_to_le16(mcs_map);
4898 
4899 	/* If we are supporting 160Mhz or 80+80, then the NIC may be able to do
4900 	 * a restricted NSS for 160 or 80+80 vs what it can do for 80Mhz.  Give
4901 	 * user-space a clue if that is the case.
4902 	 */
4903 	if ((vht_cap.cap & IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_MASK) &&
4904 	    (hw->vht160_mcs_rx_highest != 0 ||
4905 	     hw->vht160_mcs_tx_highest != 0)) {
4906 		vht_cap.vht_mcs.rx_highest = cpu_to_le16(hw->vht160_mcs_rx_highest);
4907 		vht_cap.vht_mcs.tx_highest = cpu_to_le16(hw->vht160_mcs_tx_highest);
4908 	}
4909 
4910 	return vht_cap;
4911 }
4912 
4913 static struct ieee80211_sta_ht_cap ath10k_get_ht_cap(struct ath10k *ar)
4914 {
4915 	int i;
4916 	struct ieee80211_sta_ht_cap ht_cap = {0};
4917 
4918 	if (!(ar->ht_cap_info & WMI_HT_CAP_ENABLED))
4919 		return ht_cap;
4920 
4921 	ht_cap.ht_supported = 1;
4922 	ht_cap.ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
4923 	ht_cap.ampdu_density = IEEE80211_HT_MPDU_DENSITY_8;
4924 	ht_cap.cap |= IEEE80211_HT_CAP_SUP_WIDTH_20_40;
4925 	ht_cap.cap |= IEEE80211_HT_CAP_DSSSCCK40;
4926 	ht_cap.cap |=
4927 		WLAN_HT_CAP_SM_PS_DISABLED << IEEE80211_HT_CAP_SM_PS_SHIFT;
4928 
4929 	if (ar->ht_cap_info & WMI_HT_CAP_HT20_SGI)
4930 		ht_cap.cap |= IEEE80211_HT_CAP_SGI_20;
4931 
4932 	if (ar->ht_cap_info & WMI_HT_CAP_HT40_SGI)
4933 		ht_cap.cap |= IEEE80211_HT_CAP_SGI_40;
4934 
4935 	if (ar->ht_cap_info & WMI_HT_CAP_DYNAMIC_SMPS) {
4936 		u32 smps;
4937 
4938 		smps   = WLAN_HT_CAP_SM_PS_DYNAMIC;
4939 		smps <<= IEEE80211_HT_CAP_SM_PS_SHIFT;
4940 
4941 		ht_cap.cap |= smps;
4942 	}
4943 
4944 	if (ar->ht_cap_info & WMI_HT_CAP_TX_STBC && (ar->cfg_tx_chainmask > 1))
4945 		ht_cap.cap |= IEEE80211_HT_CAP_TX_STBC;
4946 
4947 	if (ar->ht_cap_info & WMI_HT_CAP_RX_STBC) {
4948 		u32 stbc;
4949 
4950 		stbc   = ar->ht_cap_info;
4951 		stbc  &= WMI_HT_CAP_RX_STBC;
4952 		stbc >>= WMI_HT_CAP_RX_STBC_MASK_SHIFT;
4953 		stbc <<= IEEE80211_HT_CAP_RX_STBC_SHIFT;
4954 		stbc  &= IEEE80211_HT_CAP_RX_STBC;
4955 
4956 		ht_cap.cap |= stbc;
4957 	}
4958 
4959 	if (ar->ht_cap_info & WMI_HT_CAP_LDPC || (ar->ht_cap_info &
4960 	    WMI_HT_CAP_RX_LDPC && (ar->ht_cap_info & WMI_HT_CAP_TX_LDPC)))
4961 		ht_cap.cap |= IEEE80211_HT_CAP_LDPC_CODING;
4962 
4963 	if (ar->ht_cap_info & WMI_HT_CAP_L_SIG_TXOP_PROT)
4964 		ht_cap.cap |= IEEE80211_HT_CAP_LSIG_TXOP_PROT;
4965 
4966 	/* max AMSDU is implicitly taken from vht_cap_info */
4967 	if (ar->vht_cap_info & WMI_VHT_CAP_MAX_MPDU_LEN_MASK)
4968 		ht_cap.cap |= IEEE80211_HT_CAP_MAX_AMSDU;
4969 
4970 	for (i = 0; i < ar->num_rf_chains; i++) {
4971 		if (ar->cfg_rx_chainmask & BIT(i))
4972 			ht_cap.mcs.rx_mask[i] = 0xFF;
4973 	}
4974 
4975 	ht_cap.mcs.tx_params |= IEEE80211_HT_MCS_TX_DEFINED;
4976 
4977 	return ht_cap;
4978 }
4979 
4980 static void ath10k_mac_setup_ht_vht_cap(struct ath10k *ar)
4981 {
4982 	struct ieee80211_supported_band *band;
4983 	struct ieee80211_sta_vht_cap vht_cap;
4984 	struct ieee80211_sta_ht_cap ht_cap;
4985 
4986 	ht_cap = ath10k_get_ht_cap(ar);
4987 	vht_cap = ath10k_create_vht_cap(ar);
4988 
4989 	if (ar->phy_capability & WHAL_WLAN_11G_CAPABILITY) {
4990 		band = &ar->mac.sbands[NL80211_BAND_2GHZ];
4991 		band->ht_cap = ht_cap;
4992 	}
4993 	if (ar->phy_capability & WHAL_WLAN_11A_CAPABILITY) {
4994 		band = &ar->mac.sbands[NL80211_BAND_5GHZ];
4995 		band->ht_cap = ht_cap;
4996 		band->vht_cap = vht_cap;
4997 	}
4998 }
4999 
5000 static int __ath10k_set_antenna(struct ath10k *ar, u32 tx_ant, u32 rx_ant)
5001 {
5002 	int ret;
5003 	bool is_valid_tx_chain_mask, is_valid_rx_chain_mask;
5004 
5005 	lockdep_assert_held(&ar->conf_mutex);
5006 
5007 	is_valid_tx_chain_mask = ath10k_check_chain_mask(ar, tx_ant, "tx");
5008 	is_valid_rx_chain_mask = ath10k_check_chain_mask(ar, rx_ant, "rx");
5009 
5010 	if (!is_valid_tx_chain_mask || !is_valid_rx_chain_mask)
5011 		return -EINVAL;
5012 
5013 	ar->cfg_tx_chainmask = tx_ant;
5014 	ar->cfg_rx_chainmask = rx_ant;
5015 
5016 	if ((ar->state != ATH10K_STATE_ON) &&
5017 	    (ar->state != ATH10K_STATE_RESTARTED))
5018 		return 0;
5019 
5020 	ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->tx_chain_mask,
5021 					tx_ant);
5022 	if (ret) {
5023 		ath10k_warn(ar, "failed to set tx-chainmask: %d, req 0x%x\n",
5024 			    ret, tx_ant);
5025 		return ret;
5026 	}
5027 
5028 	ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->rx_chain_mask,
5029 					rx_ant);
5030 	if (ret) {
5031 		ath10k_warn(ar, "failed to set rx-chainmask: %d, req 0x%x\n",
5032 			    ret, rx_ant);
5033 		return ret;
5034 	}
5035 
5036 	/* Reload HT/VHT capability */
5037 	ath10k_mac_setup_ht_vht_cap(ar);
5038 
5039 	return 0;
5040 }
5041 
5042 static int ath10k_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant)
5043 {
5044 	struct ath10k *ar = hw->priv;
5045 	int ret;
5046 
5047 	mutex_lock(&ar->conf_mutex);
5048 	ret = __ath10k_set_antenna(ar, tx_ant, rx_ant);
5049 	mutex_unlock(&ar->conf_mutex);
5050 	return ret;
5051 }
5052 
5053 static int __ath10k_fetch_bb_timing_dt(struct ath10k *ar,
5054 				       struct wmi_bb_timing_cfg_arg *bb_timing)
5055 {
5056 	struct device_node *node;
5057 	const char *fem_name;
5058 	int ret;
5059 
5060 	node = ar->dev->of_node;
5061 	if (!node)
5062 		return -ENOENT;
5063 
5064 	ret = of_property_read_string_index(node, "ext-fem-name", 0, &fem_name);
5065 	if (ret)
5066 		return -ENOENT;
5067 
5068 	/*
5069 	 * If external Front End module used in hardware, then default base band timing
5070 	 * parameter cannot be used since they were fine tuned for reference hardware,
5071 	 * so choosing different value suitable for that external FEM.
5072 	 */
5073 	if (!strcmp("microsemi-lx5586", fem_name)) {
5074 		bb_timing->bb_tx_timing = 0x00;
5075 		bb_timing->bb_xpa_timing = 0x0101;
5076 	} else {
5077 		return -ENOENT;
5078 	}
5079 
5080 	ath10k_dbg(ar, ATH10K_DBG_BOOT, "boot bb_tx_timing 0x%x bb_xpa_timing 0x%x\n",
5081 		   bb_timing->bb_tx_timing, bb_timing->bb_xpa_timing);
5082 	return 0;
5083 }
5084 
5085 static int ath10k_mac_rfkill_config(struct ath10k *ar)
5086 {
5087 	u32 param;
5088 	int ret;
5089 
5090 	if (ar->hw_values->rfkill_pin == 0) {
5091 		ath10k_warn(ar, "ath10k does not support hardware rfkill with this device\n");
5092 		return -EOPNOTSUPP;
5093 	}
5094 
5095 	ath10k_dbg(ar, ATH10K_DBG_MAC,
5096 		   "mac rfkill_pin %d rfkill_cfg %d rfkill_on_level %d",
5097 		   ar->hw_values->rfkill_pin, ar->hw_values->rfkill_cfg,
5098 		   ar->hw_values->rfkill_on_level);
5099 
5100 	param = FIELD_PREP(WMI_TLV_RFKILL_CFG_RADIO_LEVEL,
5101 			   ar->hw_values->rfkill_on_level) |
5102 		FIELD_PREP(WMI_TLV_RFKILL_CFG_GPIO_PIN_NUM,
5103 			   ar->hw_values->rfkill_pin) |
5104 		FIELD_PREP(WMI_TLV_RFKILL_CFG_PIN_AS_GPIO,
5105 			   ar->hw_values->rfkill_cfg);
5106 
5107 	ret = ath10k_wmi_pdev_set_param(ar,
5108 					ar->wmi.pdev_param->rfkill_config,
5109 					param);
5110 	if (ret) {
5111 		ath10k_warn(ar,
5112 			    "failed to set rfkill config 0x%x: %d\n",
5113 			    param, ret);
5114 		return ret;
5115 	}
5116 	return 0;
5117 }
5118 
5119 int ath10k_mac_rfkill_enable_radio(struct ath10k *ar, bool enable)
5120 {
5121 	enum wmi_tlv_rfkill_enable_radio param;
5122 	int ret;
5123 
5124 	if (enable)
5125 		param = WMI_TLV_RFKILL_ENABLE_RADIO_ON;
5126 	else
5127 		param = WMI_TLV_RFKILL_ENABLE_RADIO_OFF;
5128 
5129 	ath10k_dbg(ar, ATH10K_DBG_MAC, "mac rfkill enable %d", param);
5130 
5131 	ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->rfkill_enable,
5132 					param);
5133 	if (ret) {
5134 		ath10k_warn(ar, "failed to set rfkill enable param %d: %d\n",
5135 			    param, ret);
5136 		return ret;
5137 	}
5138 
5139 	return 0;
5140 }
5141 
5142 static int ath10k_start(struct ieee80211_hw *hw)
5143 {
5144 	struct ath10k *ar = hw->priv;
5145 	u32 param;
5146 	int ret = 0;
5147 	struct wmi_bb_timing_cfg_arg bb_timing = {0};
5148 
5149 	/*
5150 	 * This makes sense only when restarting hw. It is harmless to call
5151 	 * unconditionally. This is necessary to make sure no HTT/WMI tx
5152 	 * commands will be submitted while restarting.
5153 	 */
5154 	ath10k_drain_tx(ar);
5155 
5156 	mutex_lock(&ar->conf_mutex);
5157 
5158 	switch (ar->state) {
5159 	case ATH10K_STATE_OFF:
5160 		ar->state = ATH10K_STATE_ON;
5161 		break;
5162 	case ATH10K_STATE_RESTARTING:
5163 		ar->state = ATH10K_STATE_RESTARTED;
5164 		break;
5165 	case ATH10K_STATE_ON:
5166 	case ATH10K_STATE_RESTARTED:
5167 	case ATH10K_STATE_WEDGED:
5168 		WARN_ON(1);
5169 		ret = -EINVAL;
5170 		goto err;
5171 	case ATH10K_STATE_UTF:
5172 		ret = -EBUSY;
5173 		goto err;
5174 	}
5175 
5176 	spin_lock_bh(&ar->data_lock);
5177 
5178 	if (ar->hw_rfkill_on) {
5179 		ar->hw_rfkill_on = false;
5180 		spin_unlock_bh(&ar->data_lock);
5181 		goto err;
5182 	}
5183 
5184 	spin_unlock_bh(&ar->data_lock);
5185 
5186 	ret = ath10k_hif_power_up(ar, ATH10K_FIRMWARE_MODE_NORMAL);
5187 	if (ret) {
5188 		ath10k_err(ar, "Could not init hif: %d\n", ret);
5189 		goto err_off;
5190 	}
5191 
5192 	ret = ath10k_core_start(ar, ATH10K_FIRMWARE_MODE_NORMAL,
5193 				&ar->normal_mode_fw);
5194 	if (ret) {
5195 		ath10k_err(ar, "Could not init core: %d\n", ret);
5196 		goto err_power_down;
5197 	}
5198 
5199 	if (ar->sys_cap_info & WMI_TLV_SYS_CAP_INFO_RFKILL) {
5200 		ret = ath10k_mac_rfkill_config(ar);
5201 		if (ret && ret != -EOPNOTSUPP) {
5202 			ath10k_warn(ar, "failed to configure rfkill: %d", ret);
5203 			goto err_core_stop;
5204 		}
5205 	}
5206 
5207 	param = ar->wmi.pdev_param->pmf_qos;
5208 	ret = ath10k_wmi_pdev_set_param(ar, param, 1);
5209 	if (ret) {
5210 		ath10k_warn(ar, "failed to enable PMF QOS: %d\n", ret);
5211 		goto err_core_stop;
5212 	}
5213 
5214 	param = ar->wmi.pdev_param->dynamic_bw;
5215 	ret = ath10k_wmi_pdev_set_param(ar, param, 1);
5216 	if (ret) {
5217 		ath10k_warn(ar, "failed to enable dynamic BW: %d\n", ret);
5218 		goto err_core_stop;
5219 	}
5220 
5221 	if (test_bit(WMI_SERVICE_SPOOF_MAC_SUPPORT, ar->wmi.svc_map)) {
5222 		ret = ath10k_wmi_scan_prob_req_oui(ar, ar->mac_addr);
5223 		if (ret) {
5224 			ath10k_err(ar, "failed to set prob req oui: %i\n", ret);
5225 			goto err_core_stop;
5226 		}
5227 	}
5228 
5229 	if (test_bit(WMI_SERVICE_ADAPTIVE_OCS, ar->wmi.svc_map)) {
5230 		ret = ath10k_wmi_adaptive_qcs(ar, true);
5231 		if (ret) {
5232 			ath10k_warn(ar, "failed to enable adaptive qcs: %d\n",
5233 				    ret);
5234 			goto err_core_stop;
5235 		}
5236 	}
5237 
5238 	if (test_bit(WMI_SERVICE_BURST, ar->wmi.svc_map)) {
5239 		param = ar->wmi.pdev_param->burst_enable;
5240 		ret = ath10k_wmi_pdev_set_param(ar, param, 0);
5241 		if (ret) {
5242 			ath10k_warn(ar, "failed to disable burst: %d\n", ret);
5243 			goto err_core_stop;
5244 		}
5245 	}
5246 
5247 	param = ar->wmi.pdev_param->idle_ps_config;
5248 	ret = ath10k_wmi_pdev_set_param(ar, param, 1);
5249 	if (ret && ret != -EOPNOTSUPP) {
5250 		ath10k_warn(ar, "failed to enable idle_ps_config: %d\n", ret);
5251 		goto err_core_stop;
5252 	}
5253 
5254 	__ath10k_set_antenna(ar, ar->cfg_tx_chainmask, ar->cfg_rx_chainmask);
5255 
5256 	/*
5257 	 * By default FW set ARP frames ac to voice (6). In that case ARP
5258 	 * exchange is not working properly for UAPSD enabled AP. ARP requests
5259 	 * which arrives with access category 0 are processed by network stack
5260 	 * and send back with access category 0, but FW changes access category
5261 	 * to 6. Set ARP frames access category to best effort (0) solves
5262 	 * this problem.
5263 	 */
5264 
5265 	param = ar->wmi.pdev_param->arp_ac_override;
5266 	ret = ath10k_wmi_pdev_set_param(ar, param, 0);
5267 	if (ret) {
5268 		ath10k_warn(ar, "failed to set arp ac override parameter: %d\n",
5269 			    ret);
5270 		goto err_core_stop;
5271 	}
5272 
5273 	if (test_bit(ATH10K_FW_FEATURE_SUPPORTS_ADAPTIVE_CCA,
5274 		     ar->running_fw->fw_file.fw_features)) {
5275 		ret = ath10k_wmi_pdev_enable_adaptive_cca(ar, 1,
5276 							  WMI_CCA_DETECT_LEVEL_AUTO,
5277 							  WMI_CCA_DETECT_MARGIN_AUTO);
5278 		if (ret) {
5279 			ath10k_warn(ar, "failed to enable adaptive cca: %d\n",
5280 				    ret);
5281 			goto err_core_stop;
5282 		}
5283 	}
5284 
5285 	param = ar->wmi.pdev_param->ani_enable;
5286 	ret = ath10k_wmi_pdev_set_param(ar, param, 1);
5287 	if (ret) {
5288 		ath10k_warn(ar, "failed to enable ani by default: %d\n",
5289 			    ret);
5290 		goto err_core_stop;
5291 	}
5292 
5293 	ar->ani_enabled = true;
5294 
5295 	if (ath10k_peer_stats_enabled(ar)) {
5296 		param = ar->wmi.pdev_param->peer_stats_update_period;
5297 		ret = ath10k_wmi_pdev_set_param(ar, param,
5298 						PEER_DEFAULT_STATS_UPDATE_PERIOD);
5299 		if (ret) {
5300 			ath10k_warn(ar,
5301 				    "failed to set peer stats period : %d\n",
5302 				    ret);
5303 			goto err_core_stop;
5304 		}
5305 	}
5306 
5307 	param = ar->wmi.pdev_param->enable_btcoex;
5308 	if (test_bit(WMI_SERVICE_COEX_GPIO, ar->wmi.svc_map) &&
5309 	    test_bit(ATH10K_FW_FEATURE_BTCOEX_PARAM,
5310 		     ar->running_fw->fw_file.fw_features) &&
5311 	    ar->coex_support) {
5312 		ret = ath10k_wmi_pdev_set_param(ar, param, 0);
5313 		if (ret) {
5314 			ath10k_warn(ar,
5315 				    "failed to set btcoex param: %d\n", ret);
5316 			goto err_core_stop;
5317 		}
5318 		clear_bit(ATH10K_FLAG_BTCOEX, &ar->dev_flags);
5319 	}
5320 
5321 	if (test_bit(WMI_SERVICE_BB_TIMING_CONFIG_SUPPORT, ar->wmi.svc_map)) {
5322 		ret = __ath10k_fetch_bb_timing_dt(ar, &bb_timing);
5323 		if (!ret) {
5324 			ret = ath10k_wmi_pdev_bb_timing(ar, &bb_timing);
5325 			if (ret) {
5326 				ath10k_warn(ar,
5327 					    "failed to set bb timings: %d\n",
5328 					    ret);
5329 				goto err_core_stop;
5330 			}
5331 		}
5332 	}
5333 
5334 	ar->num_started_vdevs = 0;
5335 	ath10k_regd_update(ar);
5336 
5337 	ath10k_spectral_start(ar);
5338 	ath10k_thermal_set_throttling(ar);
5339 
5340 	ar->radar_conf_state = ATH10K_RADAR_CONFIRMATION_IDLE;
5341 
5342 	mutex_unlock(&ar->conf_mutex);
5343 	return 0;
5344 
5345 err_core_stop:
5346 	ath10k_core_stop(ar);
5347 
5348 err_power_down:
5349 	ath10k_hif_power_down(ar);
5350 
5351 err_off:
5352 	ar->state = ATH10K_STATE_OFF;
5353 
5354 err:
5355 	mutex_unlock(&ar->conf_mutex);
5356 	return ret;
5357 }
5358 
5359 static void ath10k_stop(struct ieee80211_hw *hw)
5360 {
5361 	struct ath10k *ar = hw->priv;
5362 	u32 opt;
5363 
5364 	ath10k_drain_tx(ar);
5365 
5366 	mutex_lock(&ar->conf_mutex);
5367 	if (ar->state != ATH10K_STATE_OFF) {
5368 		if (!ar->hw_rfkill_on) {
5369 			/* If the current driver state is RESTARTING but not yet
5370 			 * fully RESTARTED because of incoming suspend event,
5371 			 * then ath10k_halt() is already called via
5372 			 * ath10k_core_restart() and should not be called here.
5373 			 */
5374 			if (ar->state != ATH10K_STATE_RESTARTING) {
5375 				ath10k_halt(ar);
5376 			} else {
5377 				/* Suspending here, because when in RESTARTING
5378 				 * state, ath10k_core_stop() skips
5379 				 * ath10k_wait_for_suspend().
5380 				 */
5381 				opt = WMI_PDEV_SUSPEND_AND_DISABLE_INTR;
5382 				ath10k_wait_for_suspend(ar, opt);
5383 			}
5384 		}
5385 		ar->state = ATH10K_STATE_OFF;
5386 	}
5387 	mutex_unlock(&ar->conf_mutex);
5388 
5389 	cancel_work_sync(&ar->set_coverage_class_work);
5390 	cancel_delayed_work_sync(&ar->scan.timeout);
5391 	cancel_work_sync(&ar->restart_work);
5392 }
5393 
5394 static int ath10k_config_ps(struct ath10k *ar)
5395 {
5396 	struct ath10k_vif *arvif;
5397 	int ret = 0;
5398 
5399 	lockdep_assert_held(&ar->conf_mutex);
5400 
5401 	list_for_each_entry(arvif, &ar->arvifs, list) {
5402 		ret = ath10k_mac_vif_setup_ps(arvif);
5403 		if (ret) {
5404 			ath10k_warn(ar, "failed to setup powersave: %d\n", ret);
5405 			break;
5406 		}
5407 	}
5408 
5409 	return ret;
5410 }
5411 
5412 static int ath10k_config(struct ieee80211_hw *hw, u32 changed)
5413 {
5414 	struct ath10k *ar = hw->priv;
5415 	struct ieee80211_conf *conf = &hw->conf;
5416 	int ret = 0;
5417 
5418 	mutex_lock(&ar->conf_mutex);
5419 
5420 	if (changed & IEEE80211_CONF_CHANGE_PS)
5421 		ath10k_config_ps(ar);
5422 
5423 	if (changed & IEEE80211_CONF_CHANGE_MONITOR) {
5424 		ar->monitor = conf->flags & IEEE80211_CONF_MONITOR;
5425 		ret = ath10k_monitor_recalc(ar);
5426 		if (ret)
5427 			ath10k_warn(ar, "failed to recalc monitor: %d\n", ret);
5428 	}
5429 
5430 	mutex_unlock(&ar->conf_mutex);
5431 	return ret;
5432 }
5433 
5434 static u32 get_nss_from_chainmask(u16 chain_mask)
5435 {
5436 	if ((chain_mask & 0xf) == 0xf)
5437 		return 4;
5438 	else if ((chain_mask & 0x7) == 0x7)
5439 		return 3;
5440 	else if ((chain_mask & 0x3) == 0x3)
5441 		return 2;
5442 	return 1;
5443 }
5444 
5445 static int ath10k_mac_set_txbf_conf(struct ath10k_vif *arvif)
5446 {
5447 	u32 value = 0;
5448 	struct ath10k *ar = arvif->ar;
5449 	int nsts;
5450 	int sound_dim;
5451 
5452 	if (ath10k_wmi_get_txbf_conf_scheme(ar) != WMI_TXBF_CONF_BEFORE_ASSOC)
5453 		return 0;
5454 
5455 	nsts = ath10k_mac_get_vht_cap_bf_sts(ar);
5456 	if (ar->vht_cap_info & (IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE |
5457 				IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE))
5458 		value |= SM(nsts, WMI_TXBF_STS_CAP_OFFSET);
5459 
5460 	sound_dim = ath10k_mac_get_vht_cap_bf_sound_dim(ar);
5461 	if (ar->vht_cap_info & (IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE |
5462 				IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE))
5463 		value |= SM(sound_dim, WMI_BF_SOUND_DIM_OFFSET);
5464 
5465 	if (!value)
5466 		return 0;
5467 
5468 	if (ar->vht_cap_info & IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE)
5469 		value |= WMI_VDEV_PARAM_TXBF_SU_TX_BFER;
5470 
5471 	if (ar->vht_cap_info & IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE)
5472 		value |= (WMI_VDEV_PARAM_TXBF_MU_TX_BFER |
5473 			  WMI_VDEV_PARAM_TXBF_SU_TX_BFER);
5474 
5475 	if (ar->vht_cap_info & IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE)
5476 		value |= WMI_VDEV_PARAM_TXBF_SU_TX_BFEE;
5477 
5478 	if (ar->vht_cap_info & IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE)
5479 		value |= (WMI_VDEV_PARAM_TXBF_MU_TX_BFEE |
5480 			  WMI_VDEV_PARAM_TXBF_SU_TX_BFEE);
5481 
5482 	return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id,
5483 					 ar->wmi.vdev_param->txbf, value);
5484 }
5485 
5486 static void ath10k_update_vif_offload(struct ieee80211_hw *hw,
5487 				      struct ieee80211_vif *vif)
5488 {
5489 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
5490 	struct ath10k *ar = hw->priv;
5491 	u32 vdev_param;
5492 	int ret;
5493 
5494 	if (ath10k_frame_mode != ATH10K_HW_TXRX_ETHERNET ||
5495 	    ar->wmi.vdev_param->tx_encap_type == WMI_VDEV_PARAM_UNSUPPORTED ||
5496 	     (vif->type != NL80211_IFTYPE_STATION &&
5497 	      vif->type != NL80211_IFTYPE_AP))
5498 		vif->offload_flags &= ~IEEE80211_OFFLOAD_ENCAP_ENABLED;
5499 
5500 	vdev_param = ar->wmi.vdev_param->tx_encap_type;
5501 	ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
5502 					ATH10K_HW_TXRX_NATIVE_WIFI);
5503 	/* 10.X firmware does not support this VDEV parameter. Do not warn */
5504 	if (ret && ret != -EOPNOTSUPP) {
5505 		ath10k_warn(ar, "failed to set vdev %i TX encapsulation: %d\n",
5506 			    arvif->vdev_id, ret);
5507 	}
5508 }
5509 
5510 /*
5511  * TODO:
5512  * Figure out how to handle WMI_VDEV_SUBTYPE_P2P_DEVICE,
5513  * because we will send mgmt frames without CCK. This requirement
5514  * for P2P_FIND/GO_NEG should be handled by checking CCK flag
5515  * in the TX packet.
5516  */
5517 static int ath10k_add_interface(struct ieee80211_hw *hw,
5518 				struct ieee80211_vif *vif)
5519 {
5520 	struct ath10k *ar = hw->priv;
5521 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
5522 	struct ath10k_peer *peer;
5523 	enum wmi_sta_powersave_param param;
5524 	int ret = 0;
5525 	u32 value;
5526 	int bit;
5527 	int i;
5528 	u32 vdev_param;
5529 
5530 	vif->driver_flags |= IEEE80211_VIF_SUPPORTS_UAPSD;
5531 
5532 	mutex_lock(&ar->conf_mutex);
5533 
5534 	memset(arvif, 0, sizeof(*arvif));
5535 	ath10k_mac_txq_init(vif->txq);
5536 
5537 	arvif->ar = ar;
5538 	arvif->vif = vif;
5539 
5540 	INIT_LIST_HEAD(&arvif->list);
5541 	INIT_WORK(&arvif->ap_csa_work, ath10k_mac_vif_ap_csa_work);
5542 	INIT_DELAYED_WORK(&arvif->connection_loss_work,
5543 			  ath10k_mac_vif_sta_connection_loss_work);
5544 
5545 	for (i = 0; i < ARRAY_SIZE(arvif->bitrate_mask.control); i++) {
5546 		arvif->bitrate_mask.control[i].legacy = 0xffffffff;
5547 		memset(arvif->bitrate_mask.control[i].ht_mcs, 0xff,
5548 		       sizeof(arvif->bitrate_mask.control[i].ht_mcs));
5549 		memset(arvif->bitrate_mask.control[i].vht_mcs, 0xff,
5550 		       sizeof(arvif->bitrate_mask.control[i].vht_mcs));
5551 	}
5552 
5553 	if (ar->num_peers >= ar->max_num_peers) {
5554 		ath10k_warn(ar, "refusing vdev creation due to insufficient peer entry resources in firmware\n");
5555 		ret = -ENOBUFS;
5556 		goto err;
5557 	}
5558 
5559 	if (ar->free_vdev_map == 0) {
5560 		ath10k_warn(ar, "Free vdev map is empty, no more interfaces allowed.\n");
5561 		ret = -EBUSY;
5562 		goto err;
5563 	}
5564 	bit = __ffs64(ar->free_vdev_map);
5565 
5566 	ath10k_dbg(ar, ATH10K_DBG_MAC, "mac create vdev %i map %llx\n",
5567 		   bit, ar->free_vdev_map);
5568 
5569 	arvif->vdev_id = bit;
5570 	arvif->vdev_subtype =
5571 		ath10k_wmi_get_vdev_subtype(ar, WMI_VDEV_SUBTYPE_NONE);
5572 
5573 	switch (vif->type) {
5574 	case NL80211_IFTYPE_P2P_DEVICE:
5575 		arvif->vdev_type = WMI_VDEV_TYPE_STA;
5576 		arvif->vdev_subtype = ath10k_wmi_get_vdev_subtype
5577 					(ar, WMI_VDEV_SUBTYPE_P2P_DEVICE);
5578 		break;
5579 	case NL80211_IFTYPE_UNSPECIFIED:
5580 	case NL80211_IFTYPE_STATION:
5581 		arvif->vdev_type = WMI_VDEV_TYPE_STA;
5582 		if (vif->p2p)
5583 			arvif->vdev_subtype = ath10k_wmi_get_vdev_subtype
5584 					(ar, WMI_VDEV_SUBTYPE_P2P_CLIENT);
5585 		break;
5586 	case NL80211_IFTYPE_ADHOC:
5587 		arvif->vdev_type = WMI_VDEV_TYPE_IBSS;
5588 		break;
5589 	case NL80211_IFTYPE_MESH_POINT:
5590 		if (test_bit(WMI_SERVICE_MESH_11S, ar->wmi.svc_map)) {
5591 			arvif->vdev_subtype = ath10k_wmi_get_vdev_subtype
5592 						(ar, WMI_VDEV_SUBTYPE_MESH_11S);
5593 		} else if (!test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags)) {
5594 			ret = -EINVAL;
5595 			ath10k_warn(ar, "must load driver with rawmode=1 to add mesh interfaces\n");
5596 			goto err;
5597 		}
5598 		arvif->vdev_type = WMI_VDEV_TYPE_AP;
5599 		break;
5600 	case NL80211_IFTYPE_AP:
5601 		arvif->vdev_type = WMI_VDEV_TYPE_AP;
5602 
5603 		if (vif->p2p)
5604 			arvif->vdev_subtype = ath10k_wmi_get_vdev_subtype
5605 						(ar, WMI_VDEV_SUBTYPE_P2P_GO);
5606 		break;
5607 	case NL80211_IFTYPE_MONITOR:
5608 		arvif->vdev_type = WMI_VDEV_TYPE_MONITOR;
5609 		break;
5610 	default:
5611 		WARN_ON(1);
5612 		break;
5613 	}
5614 
5615 	/* Using vdev_id as queue number will make it very easy to do per-vif
5616 	 * tx queue locking. This shouldn't wrap due to interface combinations
5617 	 * but do a modulo for correctness sake and prevent using offchannel tx
5618 	 * queues for regular vif tx.
5619 	 */
5620 	vif->cab_queue = arvif->vdev_id % (IEEE80211_MAX_QUEUES - 1);
5621 	for (i = 0; i < ARRAY_SIZE(vif->hw_queue); i++)
5622 		vif->hw_queue[i] = arvif->vdev_id % (IEEE80211_MAX_QUEUES - 1);
5623 
5624 	/* Some firmware revisions don't wait for beacon tx completion before
5625 	 * sending another SWBA event. This could lead to hardware using old
5626 	 * (freed) beacon data in some cases, e.g. tx credit starvation
5627 	 * combined with missed TBTT. This is very rare.
5628 	 *
5629 	 * On non-IOMMU-enabled hosts this could be a possible security issue
5630 	 * because hw could beacon some random data on the air.  On
5631 	 * IOMMU-enabled hosts DMAR faults would occur in most cases and target
5632 	 * device would crash.
5633 	 *
5634 	 * Since there are no beacon tx completions (implicit nor explicit)
5635 	 * propagated to host the only workaround for this is to allocate a
5636 	 * DMA-coherent buffer for a lifetime of a vif and use it for all
5637 	 * beacon tx commands. Worst case for this approach is some beacons may
5638 	 * become corrupted, e.g. have garbled IEs or out-of-date TIM bitmap.
5639 	 */
5640 	if (vif->type == NL80211_IFTYPE_ADHOC ||
5641 	    vif->type == NL80211_IFTYPE_MESH_POINT ||
5642 	    vif->type == NL80211_IFTYPE_AP) {
5643 		if (ar->bus_param.dev_type == ATH10K_DEV_TYPE_HL) {
5644 			arvif->beacon_buf = kmalloc(IEEE80211_MAX_FRAME_LEN,
5645 						    GFP_KERNEL);
5646 
5647 			/* Using a kernel pointer in place of a dma_addr_t
5648 			 * token can lead to undefined behavior if that
5649 			 * makes it into cache management functions. Use a
5650 			 * known-invalid address token instead, which
5651 			 * avoids the warning and makes it easier to catch
5652 			 * bugs if it does end up getting used.
5653 			 */
5654 			arvif->beacon_paddr = DMA_MAPPING_ERROR;
5655 		} else {
5656 			arvif->beacon_buf =
5657 				dma_alloc_coherent(ar->dev,
5658 						   IEEE80211_MAX_FRAME_LEN,
5659 						   &arvif->beacon_paddr,
5660 						   GFP_ATOMIC);
5661 		}
5662 		if (!arvif->beacon_buf) {
5663 			ret = -ENOMEM;
5664 			ath10k_warn(ar, "failed to allocate beacon buffer: %d\n",
5665 				    ret);
5666 			goto err;
5667 		}
5668 	}
5669 	if (test_bit(ATH10K_FLAG_HW_CRYPTO_DISABLED, &ar->dev_flags))
5670 		arvif->nohwcrypt = true;
5671 
5672 	if (arvif->nohwcrypt &&
5673 	    !test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags)) {
5674 		ret = -EINVAL;
5675 		ath10k_warn(ar, "cryptmode module param needed for sw crypto\n");
5676 		goto err;
5677 	}
5678 
5679 	ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev create %d (add interface) type %d subtype %d bcnmode %s\n",
5680 		   arvif->vdev_id, arvif->vdev_type, arvif->vdev_subtype,
5681 		   arvif->beacon_buf ? "single-buf" : "per-skb");
5682 
5683 	ret = ath10k_wmi_vdev_create(ar, arvif->vdev_id, arvif->vdev_type,
5684 				     arvif->vdev_subtype, vif->addr);
5685 	if (ret) {
5686 		ath10k_warn(ar, "failed to create WMI vdev %i: %d\n",
5687 			    arvif->vdev_id, ret);
5688 		goto err;
5689 	}
5690 
5691 	if (test_bit(WMI_SERVICE_VDEV_DISABLE_4_ADDR_SRC_LRN_SUPPORT,
5692 		     ar->wmi.svc_map)) {
5693 		vdev_param = ar->wmi.vdev_param->disable_4addr_src_lrn;
5694 		ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
5695 						WMI_VDEV_DISABLE_4_ADDR_SRC_LRN);
5696 		if (ret && ret != -EOPNOTSUPP) {
5697 			ath10k_warn(ar, "failed to disable 4addr src lrn vdev %i: %d\n",
5698 				    arvif->vdev_id, ret);
5699 		}
5700 	}
5701 
5702 	ar->free_vdev_map &= ~(1LL << arvif->vdev_id);
5703 	spin_lock_bh(&ar->data_lock);
5704 	list_add(&arvif->list, &ar->arvifs);
5705 	spin_unlock_bh(&ar->data_lock);
5706 
5707 	/* It makes no sense to have firmware do keepalives. mac80211 already
5708 	 * takes care of this with idle connection polling.
5709 	 */
5710 	ret = ath10k_mac_vif_disable_keepalive(arvif);
5711 	if (ret) {
5712 		ath10k_warn(ar, "failed to disable keepalive on vdev %i: %d\n",
5713 			    arvif->vdev_id, ret);
5714 		goto err_vdev_delete;
5715 	}
5716 
5717 	arvif->def_wep_key_idx = -1;
5718 
5719 	ath10k_update_vif_offload(hw, vif);
5720 
5721 	/* Configuring number of spatial stream for monitor interface is causing
5722 	 * target assert in qca9888 and qca6174.
5723 	 */
5724 	if (ar->cfg_tx_chainmask && (vif->type != NL80211_IFTYPE_MONITOR)) {
5725 		u16 nss = get_nss_from_chainmask(ar->cfg_tx_chainmask);
5726 
5727 		vdev_param = ar->wmi.vdev_param->nss;
5728 		ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
5729 						nss);
5730 		if (ret) {
5731 			ath10k_warn(ar, "failed to set vdev %i chainmask 0x%x, nss %i: %d\n",
5732 				    arvif->vdev_id, ar->cfg_tx_chainmask, nss,
5733 				    ret);
5734 			goto err_vdev_delete;
5735 		}
5736 	}
5737 
5738 	if (arvif->vdev_type == WMI_VDEV_TYPE_AP ||
5739 	    arvif->vdev_type == WMI_VDEV_TYPE_IBSS) {
5740 		ret = ath10k_peer_create(ar, vif, NULL, arvif->vdev_id,
5741 					 vif->addr, WMI_PEER_TYPE_DEFAULT);
5742 		if (ret) {
5743 			ath10k_warn(ar, "failed to create vdev %i peer for AP/IBSS: %d\n",
5744 				    arvif->vdev_id, ret);
5745 			goto err_vdev_delete;
5746 		}
5747 
5748 		spin_lock_bh(&ar->data_lock);
5749 
5750 		peer = ath10k_peer_find(ar, arvif->vdev_id, vif->addr);
5751 		if (!peer) {
5752 			ath10k_warn(ar, "failed to lookup peer %pM on vdev %i\n",
5753 				    vif->addr, arvif->vdev_id);
5754 			spin_unlock_bh(&ar->data_lock);
5755 			ret = -ENOENT;
5756 			goto err_peer_delete;
5757 		}
5758 
5759 		arvif->peer_id = find_first_bit(peer->peer_ids,
5760 						ATH10K_MAX_NUM_PEER_IDS);
5761 
5762 		spin_unlock_bh(&ar->data_lock);
5763 	} else {
5764 		arvif->peer_id = HTT_INVALID_PEERID;
5765 	}
5766 
5767 	if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
5768 		ret = ath10k_mac_set_kickout(arvif);
5769 		if (ret) {
5770 			ath10k_warn(ar, "failed to set vdev %i kickout parameters: %d\n",
5771 				    arvif->vdev_id, ret);
5772 			goto err_peer_delete;
5773 		}
5774 	}
5775 
5776 	if (arvif->vdev_type == WMI_VDEV_TYPE_STA) {
5777 		param = WMI_STA_PS_PARAM_RX_WAKE_POLICY;
5778 		value = WMI_STA_PS_RX_WAKE_POLICY_WAKE;
5779 		ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
5780 						  param, value);
5781 		if (ret) {
5782 			ath10k_warn(ar, "failed to set vdev %i RX wake policy: %d\n",
5783 				    arvif->vdev_id, ret);
5784 			goto err_peer_delete;
5785 		}
5786 
5787 		ret = ath10k_mac_vif_recalc_ps_wake_threshold(arvif);
5788 		if (ret) {
5789 			ath10k_warn(ar, "failed to recalc ps wake threshold on vdev %i: %d\n",
5790 				    arvif->vdev_id, ret);
5791 			goto err_peer_delete;
5792 		}
5793 
5794 		ret = ath10k_mac_vif_recalc_ps_poll_count(arvif);
5795 		if (ret) {
5796 			ath10k_warn(ar, "failed to recalc ps poll count on vdev %i: %d\n",
5797 				    arvif->vdev_id, ret);
5798 			goto err_peer_delete;
5799 		}
5800 	}
5801 
5802 	ret = ath10k_mac_set_txbf_conf(arvif);
5803 	if (ret) {
5804 		ath10k_warn(ar, "failed to set txbf for vdev %d: %d\n",
5805 			    arvif->vdev_id, ret);
5806 		goto err_peer_delete;
5807 	}
5808 
5809 	ret = ath10k_mac_set_rts(arvif, ar->hw->wiphy->rts_threshold);
5810 	if (ret) {
5811 		ath10k_warn(ar, "failed to set rts threshold for vdev %d: %d\n",
5812 			    arvif->vdev_id, ret);
5813 		goto err_peer_delete;
5814 	}
5815 
5816 	arvif->txpower = vif->bss_conf.txpower;
5817 	ret = ath10k_mac_txpower_recalc(ar);
5818 	if (ret) {
5819 		ath10k_warn(ar, "failed to recalc tx power: %d\n", ret);
5820 		goto err_peer_delete;
5821 	}
5822 
5823 	if (test_bit(WMI_SERVICE_RTT_RESPONDER_ROLE, ar->wmi.svc_map)) {
5824 		vdev_param = ar->wmi.vdev_param->rtt_responder_role;
5825 		ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
5826 						arvif->ftm_responder);
5827 
5828 		/* It is harmless to not set FTM role. Do not warn */
5829 		if (ret && ret != -EOPNOTSUPP)
5830 			ath10k_warn(ar, "failed to set vdev %i FTM Responder: %d\n",
5831 				    arvif->vdev_id, ret);
5832 	}
5833 
5834 	if (vif->type == NL80211_IFTYPE_MONITOR) {
5835 		ar->monitor_arvif = arvif;
5836 		ret = ath10k_monitor_recalc(ar);
5837 		if (ret) {
5838 			ath10k_warn(ar, "failed to recalc monitor: %d\n", ret);
5839 			goto err_peer_delete;
5840 		}
5841 	}
5842 
5843 	spin_lock_bh(&ar->htt.tx_lock);
5844 	if (!ar->tx_paused)
5845 		ieee80211_wake_queue(ar->hw, arvif->vdev_id);
5846 	spin_unlock_bh(&ar->htt.tx_lock);
5847 
5848 	mutex_unlock(&ar->conf_mutex);
5849 	return 0;
5850 
5851 err_peer_delete:
5852 	if (arvif->vdev_type == WMI_VDEV_TYPE_AP ||
5853 	    arvif->vdev_type == WMI_VDEV_TYPE_IBSS) {
5854 		ath10k_wmi_peer_delete(ar, arvif->vdev_id, vif->addr);
5855 		ath10k_wait_for_peer_delete_done(ar, arvif->vdev_id,
5856 						 vif->addr);
5857 	}
5858 
5859 err_vdev_delete:
5860 	ath10k_wmi_vdev_delete(ar, arvif->vdev_id);
5861 	ar->free_vdev_map |= 1LL << arvif->vdev_id;
5862 	spin_lock_bh(&ar->data_lock);
5863 	list_del(&arvif->list);
5864 	spin_unlock_bh(&ar->data_lock);
5865 
5866 err:
5867 	if (arvif->beacon_buf) {
5868 		if (ar->bus_param.dev_type == ATH10K_DEV_TYPE_HL)
5869 			kfree(arvif->beacon_buf);
5870 		else
5871 			dma_free_coherent(ar->dev, IEEE80211_MAX_FRAME_LEN,
5872 					  arvif->beacon_buf,
5873 					  arvif->beacon_paddr);
5874 		arvif->beacon_buf = NULL;
5875 	}
5876 
5877 	mutex_unlock(&ar->conf_mutex);
5878 
5879 	return ret;
5880 }
5881 
5882 static void ath10k_mac_vif_tx_unlock_all(struct ath10k_vif *arvif)
5883 {
5884 	int i;
5885 
5886 	for (i = 0; i < BITS_PER_LONG; i++)
5887 		ath10k_mac_vif_tx_unlock(arvif, i);
5888 }
5889 
5890 static void ath10k_remove_interface(struct ieee80211_hw *hw,
5891 				    struct ieee80211_vif *vif)
5892 {
5893 	struct ath10k *ar = hw->priv;
5894 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
5895 	struct ath10k_peer *peer;
5896 	unsigned long time_left;
5897 	int ret;
5898 	int i;
5899 
5900 	cancel_work_sync(&arvif->ap_csa_work);
5901 	cancel_delayed_work_sync(&arvif->connection_loss_work);
5902 
5903 	mutex_lock(&ar->conf_mutex);
5904 
5905 	ret = ath10k_spectral_vif_stop(arvif);
5906 	if (ret)
5907 		ath10k_warn(ar, "failed to stop spectral for vdev %i: %d\n",
5908 			    arvif->vdev_id, ret);
5909 
5910 	ar->free_vdev_map |= 1LL << arvif->vdev_id;
5911 	spin_lock_bh(&ar->data_lock);
5912 	list_del(&arvif->list);
5913 	spin_unlock_bh(&ar->data_lock);
5914 
5915 	if (arvif->vdev_type == WMI_VDEV_TYPE_AP ||
5916 	    arvif->vdev_type == WMI_VDEV_TYPE_IBSS) {
5917 		ret = ath10k_wmi_peer_delete(arvif->ar, arvif->vdev_id,
5918 					     vif->addr);
5919 		if (ret)
5920 			ath10k_warn(ar, "failed to submit AP/IBSS self-peer removal on vdev %i: %d\n",
5921 				    arvif->vdev_id, ret);
5922 
5923 		ath10k_wait_for_peer_delete_done(ar, arvif->vdev_id,
5924 						 vif->addr);
5925 		kfree(arvif->u.ap.noa_data);
5926 	}
5927 
5928 	ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %i delete (remove interface)\n",
5929 		   arvif->vdev_id);
5930 
5931 	ret = ath10k_wmi_vdev_delete(ar, arvif->vdev_id);
5932 	if (ret)
5933 		ath10k_warn(ar, "failed to delete WMI vdev %i: %d\n",
5934 			    arvif->vdev_id, ret);
5935 
5936 	if (test_bit(WMI_SERVICE_SYNC_DELETE_CMDS, ar->wmi.svc_map)) {
5937 		time_left = wait_for_completion_timeout(&ar->vdev_delete_done,
5938 							ATH10K_VDEV_DELETE_TIMEOUT_HZ);
5939 		if (time_left == 0) {
5940 			ath10k_warn(ar, "Timeout in receiving vdev delete response\n");
5941 			goto out;
5942 		}
5943 	}
5944 
5945 	/* Some firmware revisions don't notify host about self-peer removal
5946 	 * until after associated vdev is deleted.
5947 	 */
5948 	if (arvif->vdev_type == WMI_VDEV_TYPE_AP ||
5949 	    arvif->vdev_type == WMI_VDEV_TYPE_IBSS) {
5950 		ret = ath10k_wait_for_peer_deleted(ar, arvif->vdev_id,
5951 						   vif->addr);
5952 		if (ret)
5953 			ath10k_warn(ar, "failed to remove AP self-peer on vdev %i: %d\n",
5954 				    arvif->vdev_id, ret);
5955 
5956 		spin_lock_bh(&ar->data_lock);
5957 		ar->num_peers--;
5958 		spin_unlock_bh(&ar->data_lock);
5959 	}
5960 
5961 	spin_lock_bh(&ar->data_lock);
5962 	for (i = 0; i < ARRAY_SIZE(ar->peer_map); i++) {
5963 		peer = ar->peer_map[i];
5964 		if (!peer)
5965 			continue;
5966 
5967 		if (peer->vif == vif) {
5968 			ath10k_warn(ar, "found vif peer %pM entry on vdev %i after it was supposedly removed\n",
5969 				    vif->addr, arvif->vdev_id);
5970 			peer->vif = NULL;
5971 		}
5972 	}
5973 
5974 	/* Clean this up late, less opportunity for firmware to access
5975 	 * DMA memory we have deleted.
5976 	 */
5977 	ath10k_mac_vif_beacon_cleanup(arvif);
5978 	spin_unlock_bh(&ar->data_lock);
5979 
5980 	ath10k_peer_cleanup(ar, arvif->vdev_id);
5981 	ath10k_mac_txq_unref(ar, vif->txq);
5982 
5983 	if (vif->type == NL80211_IFTYPE_MONITOR) {
5984 		ar->monitor_arvif = NULL;
5985 		ret = ath10k_monitor_recalc(ar);
5986 		if (ret)
5987 			ath10k_warn(ar, "failed to recalc monitor: %d\n", ret);
5988 	}
5989 
5990 	ret = ath10k_mac_txpower_recalc(ar);
5991 	if (ret)
5992 		ath10k_warn(ar, "failed to recalc tx power: %d\n", ret);
5993 
5994 	spin_lock_bh(&ar->htt.tx_lock);
5995 	ath10k_mac_vif_tx_unlock_all(arvif);
5996 	spin_unlock_bh(&ar->htt.tx_lock);
5997 
5998 	ath10k_mac_txq_unref(ar, vif->txq);
5999 
6000 out:
6001 	mutex_unlock(&ar->conf_mutex);
6002 }
6003 
6004 /*
6005  * FIXME: Has to be verified.
6006  */
6007 #define SUPPORTED_FILTERS			\
6008 	(FIF_ALLMULTI |				\
6009 	FIF_CONTROL |				\
6010 	FIF_PSPOLL |				\
6011 	FIF_OTHER_BSS |				\
6012 	FIF_BCN_PRBRESP_PROMISC |		\
6013 	FIF_PROBE_REQ |				\
6014 	FIF_FCSFAIL)
6015 
6016 static void ath10k_configure_filter(struct ieee80211_hw *hw,
6017 				    unsigned int changed_flags,
6018 				    unsigned int *total_flags,
6019 				    u64 multicast)
6020 {
6021 	struct ath10k *ar = hw->priv;
6022 	int ret;
6023 
6024 	mutex_lock(&ar->conf_mutex);
6025 
6026 	changed_flags &= SUPPORTED_FILTERS;
6027 	*total_flags &= SUPPORTED_FILTERS;
6028 	ar->filter_flags = *total_flags;
6029 
6030 	ret = ath10k_monitor_recalc(ar);
6031 	if (ret)
6032 		ath10k_warn(ar, "failed to recalc monitor: %d\n", ret);
6033 
6034 	mutex_unlock(&ar->conf_mutex);
6035 }
6036 
6037 static void ath10k_recalculate_mgmt_rate(struct ath10k *ar,
6038 					 struct ieee80211_vif *vif,
6039 					 struct cfg80211_chan_def *def)
6040 {
6041 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
6042 	const struct ieee80211_supported_band *sband;
6043 	u8 basic_rate_idx;
6044 	int hw_rate_code;
6045 	u32 vdev_param;
6046 	u16 bitrate;
6047 	int ret;
6048 
6049 	lockdep_assert_held(&ar->conf_mutex);
6050 
6051 	sband = ar->hw->wiphy->bands[def->chan->band];
6052 	basic_rate_idx = ffs(vif->bss_conf.basic_rates) - 1;
6053 	bitrate = sband->bitrates[basic_rate_idx].bitrate;
6054 
6055 	hw_rate_code = ath10k_mac_get_rate_hw_value(bitrate);
6056 	if (hw_rate_code < 0) {
6057 		ath10k_warn(ar, "bitrate not supported %d\n", bitrate);
6058 		return;
6059 	}
6060 
6061 	vdev_param = ar->wmi.vdev_param->mgmt_rate;
6062 	ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
6063 					hw_rate_code);
6064 	if (ret)
6065 		ath10k_warn(ar, "failed to set mgmt tx rate %d\n", ret);
6066 }
6067 
6068 static void ath10k_bss_info_changed(struct ieee80211_hw *hw,
6069 				    struct ieee80211_vif *vif,
6070 				    struct ieee80211_bss_conf *info,
6071 				    u64 changed)
6072 {
6073 	struct ath10k *ar = hw->priv;
6074 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
6075 	struct cfg80211_chan_def def;
6076 	u32 vdev_param, pdev_param, slottime, preamble;
6077 	u16 bitrate, hw_value;
6078 	u8 rate, rateidx;
6079 	int ret = 0, mcast_rate;
6080 	enum nl80211_band band;
6081 
6082 	mutex_lock(&ar->conf_mutex);
6083 
6084 	if (changed & BSS_CHANGED_IBSS)
6085 		ath10k_control_ibss(arvif, vif);
6086 
6087 	if (changed & BSS_CHANGED_BEACON_INT) {
6088 		arvif->beacon_interval = info->beacon_int;
6089 		vdev_param = ar->wmi.vdev_param->beacon_interval;
6090 		ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
6091 						arvif->beacon_interval);
6092 		ath10k_dbg(ar, ATH10K_DBG_MAC,
6093 			   "mac vdev %d beacon_interval %d\n",
6094 			   arvif->vdev_id, arvif->beacon_interval);
6095 
6096 		if (ret)
6097 			ath10k_warn(ar, "failed to set beacon interval for vdev %d: %i\n",
6098 				    arvif->vdev_id, ret);
6099 	}
6100 
6101 	if (changed & BSS_CHANGED_BEACON) {
6102 		ath10k_dbg(ar, ATH10K_DBG_MAC,
6103 			   "vdev %d set beacon tx mode to staggered\n",
6104 			   arvif->vdev_id);
6105 
6106 		pdev_param = ar->wmi.pdev_param->beacon_tx_mode;
6107 		ret = ath10k_wmi_pdev_set_param(ar, pdev_param,
6108 						WMI_BEACON_STAGGERED_MODE);
6109 		if (ret)
6110 			ath10k_warn(ar, "failed to set beacon mode for vdev %d: %i\n",
6111 				    arvif->vdev_id, ret);
6112 
6113 		ret = ath10k_mac_setup_bcn_tmpl(arvif);
6114 		if (ret)
6115 			ath10k_warn(ar, "failed to update beacon template: %d\n",
6116 				    ret);
6117 
6118 		if (ieee80211_vif_is_mesh(vif)) {
6119 			/* mesh doesn't use SSID but firmware needs it */
6120 			strncpy(arvif->u.ap.ssid, "mesh",
6121 				sizeof(arvif->u.ap.ssid));
6122 			arvif->u.ap.ssid_len = 4;
6123 		}
6124 	}
6125 
6126 	if (changed & BSS_CHANGED_AP_PROBE_RESP) {
6127 		ret = ath10k_mac_setup_prb_tmpl(arvif);
6128 		if (ret)
6129 			ath10k_warn(ar, "failed to setup probe resp template on vdev %i: %d\n",
6130 				    arvif->vdev_id, ret);
6131 	}
6132 
6133 	if (changed & (BSS_CHANGED_BEACON_INFO | BSS_CHANGED_BEACON)) {
6134 		arvif->dtim_period = info->dtim_period;
6135 
6136 		ath10k_dbg(ar, ATH10K_DBG_MAC,
6137 			   "mac vdev %d dtim_period %d\n",
6138 			   arvif->vdev_id, arvif->dtim_period);
6139 
6140 		vdev_param = ar->wmi.vdev_param->dtim_period;
6141 		ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
6142 						arvif->dtim_period);
6143 		if (ret)
6144 			ath10k_warn(ar, "failed to set dtim period for vdev %d: %i\n",
6145 				    arvif->vdev_id, ret);
6146 	}
6147 
6148 	if (changed & BSS_CHANGED_SSID &&
6149 	    vif->type == NL80211_IFTYPE_AP) {
6150 		arvif->u.ap.ssid_len = vif->cfg.ssid_len;
6151 		if (vif->cfg.ssid_len)
6152 			memcpy(arvif->u.ap.ssid, vif->cfg.ssid,
6153 			       vif->cfg.ssid_len);
6154 		arvif->u.ap.hidden_ssid = info->hidden_ssid;
6155 	}
6156 
6157 	if (changed & BSS_CHANGED_BSSID && !is_zero_ether_addr(info->bssid))
6158 		ether_addr_copy(arvif->bssid, info->bssid);
6159 
6160 	if (changed & BSS_CHANGED_FTM_RESPONDER &&
6161 	    arvif->ftm_responder != info->ftm_responder &&
6162 	    test_bit(WMI_SERVICE_RTT_RESPONDER_ROLE, ar->wmi.svc_map)) {
6163 		arvif->ftm_responder = info->ftm_responder;
6164 
6165 		vdev_param = ar->wmi.vdev_param->rtt_responder_role;
6166 		ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
6167 						arvif->ftm_responder);
6168 
6169 		ath10k_dbg(ar, ATH10K_DBG_MAC,
6170 			   "mac vdev %d ftm_responder %d:ret %d\n",
6171 			   arvif->vdev_id, arvif->ftm_responder, ret);
6172 	}
6173 
6174 	if (changed & BSS_CHANGED_BEACON_ENABLED)
6175 		ath10k_control_beaconing(arvif, info);
6176 
6177 	if (changed & BSS_CHANGED_ERP_CTS_PROT) {
6178 		arvif->use_cts_prot = info->use_cts_prot;
6179 
6180 		ret = ath10k_recalc_rtscts_prot(arvif);
6181 		if (ret)
6182 			ath10k_warn(ar, "failed to recalculate rts/cts prot for vdev %d: %d\n",
6183 				    arvif->vdev_id, ret);
6184 
6185 		if (ath10k_mac_can_set_cts_prot(arvif)) {
6186 			ret = ath10k_mac_set_cts_prot(arvif);
6187 			if (ret)
6188 				ath10k_warn(ar, "failed to set cts protection for vdev %d: %d\n",
6189 					    arvif->vdev_id, ret);
6190 		}
6191 	}
6192 
6193 	if (changed & BSS_CHANGED_ERP_SLOT) {
6194 		if (info->use_short_slot)
6195 			slottime = WMI_VDEV_SLOT_TIME_SHORT; /* 9us */
6196 
6197 		else
6198 			slottime = WMI_VDEV_SLOT_TIME_LONG; /* 20us */
6199 
6200 		ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d slot_time %d\n",
6201 			   arvif->vdev_id, slottime);
6202 
6203 		vdev_param = ar->wmi.vdev_param->slot_time;
6204 		ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
6205 						slottime);
6206 		if (ret)
6207 			ath10k_warn(ar, "failed to set erp slot for vdev %d: %i\n",
6208 				    arvif->vdev_id, ret);
6209 	}
6210 
6211 	if (changed & BSS_CHANGED_ERP_PREAMBLE) {
6212 		if (info->use_short_preamble)
6213 			preamble = WMI_VDEV_PREAMBLE_SHORT;
6214 		else
6215 			preamble = WMI_VDEV_PREAMBLE_LONG;
6216 
6217 		ath10k_dbg(ar, ATH10K_DBG_MAC,
6218 			   "mac vdev %d preamble %dn",
6219 			   arvif->vdev_id, preamble);
6220 
6221 		vdev_param = ar->wmi.vdev_param->preamble;
6222 		ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
6223 						preamble);
6224 		if (ret)
6225 			ath10k_warn(ar, "failed to set preamble for vdev %d: %i\n",
6226 				    arvif->vdev_id, ret);
6227 	}
6228 
6229 	if (changed & BSS_CHANGED_ASSOC) {
6230 		if (vif->cfg.assoc) {
6231 			/* Workaround: Make sure monitor vdev is not running
6232 			 * when associating to prevent some firmware revisions
6233 			 * (e.g. 10.1 and 10.2) from crashing.
6234 			 */
6235 			if (ar->monitor_started)
6236 				ath10k_monitor_stop(ar);
6237 			ath10k_bss_assoc(hw, vif, info);
6238 			ath10k_monitor_recalc(ar);
6239 		} else {
6240 			ath10k_bss_disassoc(hw, vif);
6241 		}
6242 	}
6243 
6244 	if (changed & BSS_CHANGED_TXPOWER) {
6245 		ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev_id %i txpower %d\n",
6246 			   arvif->vdev_id, info->txpower);
6247 
6248 		arvif->txpower = info->txpower;
6249 		ret = ath10k_mac_txpower_recalc(ar);
6250 		if (ret)
6251 			ath10k_warn(ar, "failed to recalc tx power: %d\n", ret);
6252 	}
6253 
6254 	if (changed & BSS_CHANGED_PS) {
6255 		arvif->ps = vif->bss_conf.ps;
6256 
6257 		ret = ath10k_config_ps(ar);
6258 		if (ret)
6259 			ath10k_warn(ar, "failed to setup ps on vdev %i: %d\n",
6260 				    arvif->vdev_id, ret);
6261 	}
6262 
6263 	if (changed & BSS_CHANGED_MCAST_RATE &&
6264 	    !ath10k_mac_vif_chan(arvif->vif, &def)) {
6265 		band = def.chan->band;
6266 		mcast_rate = vif->bss_conf.mcast_rate[band];
6267 		if (mcast_rate > 0)
6268 			rateidx = mcast_rate - 1;
6269 		else
6270 			rateidx = ffs(vif->bss_conf.basic_rates) - 1;
6271 
6272 		if (ar->phy_capability & WHAL_WLAN_11A_CAPABILITY)
6273 			rateidx += ATH10K_MAC_FIRST_OFDM_RATE_IDX;
6274 
6275 		bitrate = ath10k_wmi_legacy_rates[rateidx].bitrate;
6276 		hw_value = ath10k_wmi_legacy_rates[rateidx].hw_value;
6277 		if (ath10k_mac_bitrate_is_cck(bitrate))
6278 			preamble = WMI_RATE_PREAMBLE_CCK;
6279 		else
6280 			preamble = WMI_RATE_PREAMBLE_OFDM;
6281 
6282 		rate = ATH10K_HW_RATECODE(hw_value, 0, preamble);
6283 
6284 		ath10k_dbg(ar, ATH10K_DBG_MAC,
6285 			   "mac vdev %d mcast_rate %x\n",
6286 			   arvif->vdev_id, rate);
6287 
6288 		vdev_param = ar->wmi.vdev_param->mcast_data_rate;
6289 		ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id,
6290 						vdev_param, rate);
6291 		if (ret)
6292 			ath10k_warn(ar,
6293 				    "failed to set mcast rate on vdev %i: %d\n",
6294 				    arvif->vdev_id,  ret);
6295 
6296 		vdev_param = ar->wmi.vdev_param->bcast_data_rate;
6297 		ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id,
6298 						vdev_param, rate);
6299 		if (ret)
6300 			ath10k_warn(ar,
6301 				    "failed to set bcast rate on vdev %i: %d\n",
6302 				    arvif->vdev_id,  ret);
6303 	}
6304 
6305 	if (changed & BSS_CHANGED_BASIC_RATES &&
6306 	    !ath10k_mac_vif_chan(arvif->vif, &def))
6307 		ath10k_recalculate_mgmt_rate(ar, vif, &def);
6308 
6309 	mutex_unlock(&ar->conf_mutex);
6310 }
6311 
6312 static void ath10k_mac_op_set_coverage_class(struct ieee80211_hw *hw, s16 value)
6313 {
6314 	struct ath10k *ar = hw->priv;
6315 
6316 	/* This function should never be called if setting the coverage class
6317 	 * is not supported on this hardware.
6318 	 */
6319 	if (!ar->hw_params.hw_ops->set_coverage_class) {
6320 		WARN_ON_ONCE(1);
6321 		return;
6322 	}
6323 	ar->hw_params.hw_ops->set_coverage_class(ar, value);
6324 }
6325 
6326 struct ath10k_mac_tdls_iter_data {
6327 	u32 num_tdls_stations;
6328 	struct ieee80211_vif *curr_vif;
6329 };
6330 
6331 static void ath10k_mac_tdls_vif_stations_count_iter(void *data,
6332 						    struct ieee80211_sta *sta)
6333 {
6334 	struct ath10k_mac_tdls_iter_data *iter_data = data;
6335 	struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
6336 	struct ieee80211_vif *sta_vif = arsta->arvif->vif;
6337 
6338 	if (sta->tdls && sta_vif == iter_data->curr_vif)
6339 		iter_data->num_tdls_stations++;
6340 }
6341 
6342 static int ath10k_mac_tdls_vif_stations_count(struct ieee80211_hw *hw,
6343 					      struct ieee80211_vif *vif)
6344 {
6345 	struct ath10k_mac_tdls_iter_data data = {};
6346 
6347 	data.curr_vif = vif;
6348 
6349 	ieee80211_iterate_stations_atomic(hw,
6350 					  ath10k_mac_tdls_vif_stations_count_iter,
6351 					  &data);
6352 	return data.num_tdls_stations;
6353 }
6354 
6355 static int ath10k_hw_scan(struct ieee80211_hw *hw,
6356 			  struct ieee80211_vif *vif,
6357 			  struct ieee80211_scan_request *hw_req)
6358 {
6359 	struct ath10k *ar = hw->priv;
6360 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
6361 	struct cfg80211_scan_request *req = &hw_req->req;
6362 	struct wmi_start_scan_arg arg;
6363 	int ret = 0;
6364 	int i;
6365 	u32 scan_timeout;
6366 
6367 	mutex_lock(&ar->conf_mutex);
6368 
6369 	if (ath10k_mac_tdls_vif_stations_count(hw, vif) > 0) {
6370 		ret = -EBUSY;
6371 		goto exit;
6372 	}
6373 
6374 	spin_lock_bh(&ar->data_lock);
6375 	switch (ar->scan.state) {
6376 	case ATH10K_SCAN_IDLE:
6377 		reinit_completion(&ar->scan.started);
6378 		reinit_completion(&ar->scan.completed);
6379 		ar->scan.state = ATH10K_SCAN_STARTING;
6380 		ar->scan.is_roc = false;
6381 		ar->scan.vdev_id = arvif->vdev_id;
6382 		ret = 0;
6383 		break;
6384 	case ATH10K_SCAN_STARTING:
6385 	case ATH10K_SCAN_RUNNING:
6386 	case ATH10K_SCAN_ABORTING:
6387 		ret = -EBUSY;
6388 		break;
6389 	}
6390 	spin_unlock_bh(&ar->data_lock);
6391 
6392 	if (ret)
6393 		goto exit;
6394 
6395 	memset(&arg, 0, sizeof(arg));
6396 	ath10k_wmi_start_scan_init(ar, &arg);
6397 	arg.vdev_id = arvif->vdev_id;
6398 	arg.scan_id = ATH10K_SCAN_ID;
6399 
6400 	if (req->ie_len) {
6401 		arg.ie_len = req->ie_len;
6402 		memcpy(arg.ie, req->ie, arg.ie_len);
6403 	}
6404 
6405 	if (req->n_ssids) {
6406 		arg.n_ssids = req->n_ssids;
6407 		for (i = 0; i < arg.n_ssids; i++) {
6408 			arg.ssids[i].len  = req->ssids[i].ssid_len;
6409 			arg.ssids[i].ssid = req->ssids[i].ssid;
6410 		}
6411 	} else {
6412 		arg.scan_ctrl_flags |= WMI_SCAN_FLAG_PASSIVE;
6413 	}
6414 
6415 	if (req->flags & NL80211_SCAN_FLAG_RANDOM_ADDR) {
6416 		arg.scan_ctrl_flags |=  WMI_SCAN_ADD_SPOOFED_MAC_IN_PROBE_REQ;
6417 		ether_addr_copy(arg.mac_addr.addr, req->mac_addr);
6418 		ether_addr_copy(arg.mac_mask.addr, req->mac_addr_mask);
6419 	}
6420 
6421 	if (req->n_channels) {
6422 		arg.n_channels = req->n_channels;
6423 		for (i = 0; i < arg.n_channels; i++)
6424 			arg.channels[i] = req->channels[i]->center_freq;
6425 	}
6426 
6427 	/* if duration is set, default dwell times will be overwritten */
6428 	if (req->duration) {
6429 		arg.dwell_time_active = req->duration;
6430 		arg.dwell_time_passive = req->duration;
6431 		arg.burst_duration_ms = req->duration;
6432 
6433 		scan_timeout = min_t(u32, arg.max_rest_time *
6434 				(arg.n_channels - 1) + (req->duration +
6435 				ATH10K_SCAN_CHANNEL_SWITCH_WMI_EVT_OVERHEAD) *
6436 				arg.n_channels, arg.max_scan_time);
6437 	} else {
6438 		scan_timeout = arg.max_scan_time;
6439 	}
6440 
6441 	/* Add a 200ms margin to account for event/command processing */
6442 	scan_timeout += 200;
6443 
6444 	ret = ath10k_start_scan(ar, &arg);
6445 	if (ret) {
6446 		ath10k_warn(ar, "failed to start hw scan: %d\n", ret);
6447 		spin_lock_bh(&ar->data_lock);
6448 		ar->scan.state = ATH10K_SCAN_IDLE;
6449 		spin_unlock_bh(&ar->data_lock);
6450 	}
6451 
6452 	ieee80211_queue_delayed_work(ar->hw, &ar->scan.timeout,
6453 				     msecs_to_jiffies(scan_timeout));
6454 
6455 exit:
6456 	mutex_unlock(&ar->conf_mutex);
6457 	return ret;
6458 }
6459 
6460 static void ath10k_cancel_hw_scan(struct ieee80211_hw *hw,
6461 				  struct ieee80211_vif *vif)
6462 {
6463 	struct ath10k *ar = hw->priv;
6464 
6465 	mutex_lock(&ar->conf_mutex);
6466 	ath10k_scan_abort(ar);
6467 	mutex_unlock(&ar->conf_mutex);
6468 
6469 	cancel_delayed_work_sync(&ar->scan.timeout);
6470 }
6471 
6472 static void ath10k_set_key_h_def_keyidx(struct ath10k *ar,
6473 					struct ath10k_vif *arvif,
6474 					enum set_key_cmd cmd,
6475 					struct ieee80211_key_conf *key)
6476 {
6477 	u32 vdev_param = arvif->ar->wmi.vdev_param->def_keyid;
6478 	int ret;
6479 
6480 	/* 10.1 firmware branch requires default key index to be set to group
6481 	 * key index after installing it. Otherwise FW/HW Txes corrupted
6482 	 * frames with multi-vif APs. This is not required for main firmware
6483 	 * branch (e.g. 636).
6484 	 *
6485 	 * This is also needed for 636 fw for IBSS-RSN to work more reliably.
6486 	 *
6487 	 * FIXME: It remains unknown if this is required for multi-vif STA
6488 	 * interfaces on 10.1.
6489 	 */
6490 
6491 	if (arvif->vdev_type != WMI_VDEV_TYPE_AP &&
6492 	    arvif->vdev_type != WMI_VDEV_TYPE_IBSS)
6493 		return;
6494 
6495 	if (key->cipher == WLAN_CIPHER_SUITE_WEP40)
6496 		return;
6497 
6498 	if (key->cipher == WLAN_CIPHER_SUITE_WEP104)
6499 		return;
6500 
6501 	if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE)
6502 		return;
6503 
6504 	if (cmd != SET_KEY)
6505 		return;
6506 
6507 	ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
6508 					key->keyidx);
6509 	if (ret)
6510 		ath10k_warn(ar, "failed to set vdev %i group key as default key: %d\n",
6511 			    arvif->vdev_id, ret);
6512 }
6513 
6514 static int ath10k_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
6515 			  struct ieee80211_vif *vif, struct ieee80211_sta *sta,
6516 			  struct ieee80211_key_conf *key)
6517 {
6518 	struct ath10k *ar = hw->priv;
6519 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
6520 	struct ath10k_sta *arsta;
6521 	struct ath10k_peer *peer;
6522 	const u8 *peer_addr;
6523 	bool is_wep = key->cipher == WLAN_CIPHER_SUITE_WEP40 ||
6524 		      key->cipher == WLAN_CIPHER_SUITE_WEP104;
6525 	int ret = 0;
6526 	int ret2;
6527 	u32 flags = 0;
6528 	u32 flags2;
6529 
6530 	/* this one needs to be done in software */
6531 	if (key->cipher == WLAN_CIPHER_SUITE_AES_CMAC ||
6532 	    key->cipher == WLAN_CIPHER_SUITE_BIP_GMAC_128 ||
6533 	    key->cipher == WLAN_CIPHER_SUITE_BIP_GMAC_256 ||
6534 	    key->cipher == WLAN_CIPHER_SUITE_BIP_CMAC_256)
6535 		return 1;
6536 
6537 	if (arvif->nohwcrypt)
6538 		return 1;
6539 
6540 	if (key->keyidx > WMI_MAX_KEY_INDEX)
6541 		return -ENOSPC;
6542 
6543 	mutex_lock(&ar->conf_mutex);
6544 
6545 	if (sta) {
6546 		arsta = (struct ath10k_sta *)sta->drv_priv;
6547 		peer_addr = sta->addr;
6548 		spin_lock_bh(&ar->data_lock);
6549 		arsta->ucast_cipher = key->cipher;
6550 		spin_unlock_bh(&ar->data_lock);
6551 	} else if (arvif->vdev_type == WMI_VDEV_TYPE_STA) {
6552 		peer_addr = vif->bss_conf.bssid;
6553 	} else {
6554 		peer_addr = vif->addr;
6555 	}
6556 
6557 	key->hw_key_idx = key->keyidx;
6558 
6559 	if (is_wep) {
6560 		if (cmd == SET_KEY)
6561 			arvif->wep_keys[key->keyidx] = key;
6562 		else
6563 			arvif->wep_keys[key->keyidx] = NULL;
6564 	}
6565 
6566 	/* the peer should not disappear in mid-way (unless FW goes awry) since
6567 	 * we already hold conf_mutex. we just make sure its there now.
6568 	 */
6569 	spin_lock_bh(&ar->data_lock);
6570 	peer = ath10k_peer_find(ar, arvif->vdev_id, peer_addr);
6571 	spin_unlock_bh(&ar->data_lock);
6572 
6573 	if (!peer) {
6574 		if (cmd == SET_KEY) {
6575 			ath10k_warn(ar, "failed to install key for non-existent peer %pM\n",
6576 				    peer_addr);
6577 			ret = -EOPNOTSUPP;
6578 			goto exit;
6579 		} else {
6580 			/* if the peer doesn't exist there is no key to disable anymore */
6581 			goto exit;
6582 		}
6583 	}
6584 
6585 	if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE)
6586 		flags |= WMI_KEY_PAIRWISE;
6587 	else
6588 		flags |= WMI_KEY_GROUP;
6589 
6590 	if (is_wep) {
6591 		if (cmd == DISABLE_KEY)
6592 			ath10k_clear_vdev_key(arvif, key);
6593 
6594 		/* When WEP keys are uploaded it's possible that there are
6595 		 * stations associated already (e.g. when merging) without any
6596 		 * keys. Static WEP needs an explicit per-peer key upload.
6597 		 */
6598 		if (vif->type == NL80211_IFTYPE_ADHOC &&
6599 		    cmd == SET_KEY)
6600 			ath10k_mac_vif_update_wep_key(arvif, key);
6601 
6602 		/* 802.1x never sets the def_wep_key_idx so each set_key()
6603 		 * call changes default tx key.
6604 		 *
6605 		 * Static WEP sets def_wep_key_idx via .set_default_unicast_key
6606 		 * after first set_key().
6607 		 */
6608 		if (cmd == SET_KEY && arvif->def_wep_key_idx == -1)
6609 			flags |= WMI_KEY_TX_USAGE;
6610 	}
6611 
6612 	ret = ath10k_install_key(arvif, key, cmd, peer_addr, flags);
6613 	if (ret) {
6614 		WARN_ON(ret > 0);
6615 		ath10k_warn(ar, "failed to install key for vdev %i peer %pM: %d\n",
6616 			    arvif->vdev_id, peer_addr, ret);
6617 		goto exit;
6618 	}
6619 
6620 	/* mac80211 sets static WEP keys as groupwise while firmware requires
6621 	 * them to be installed twice as both pairwise and groupwise.
6622 	 */
6623 	if (is_wep && !sta && vif->type == NL80211_IFTYPE_STATION) {
6624 		flags2 = flags;
6625 		flags2 &= ~WMI_KEY_GROUP;
6626 		flags2 |= WMI_KEY_PAIRWISE;
6627 
6628 		ret = ath10k_install_key(arvif, key, cmd, peer_addr, flags2);
6629 		if (ret) {
6630 			WARN_ON(ret > 0);
6631 			ath10k_warn(ar, "failed to install (ucast) key for vdev %i peer %pM: %d\n",
6632 				    arvif->vdev_id, peer_addr, ret);
6633 			ret2 = ath10k_install_key(arvif, key, DISABLE_KEY,
6634 						  peer_addr, flags);
6635 			if (ret2) {
6636 				WARN_ON(ret2 > 0);
6637 				ath10k_warn(ar, "failed to disable (mcast) key for vdev %i peer %pM: %d\n",
6638 					    arvif->vdev_id, peer_addr, ret2);
6639 			}
6640 			goto exit;
6641 		}
6642 	}
6643 
6644 	ath10k_set_key_h_def_keyidx(ar, arvif, cmd, key);
6645 
6646 	spin_lock_bh(&ar->data_lock);
6647 	peer = ath10k_peer_find(ar, arvif->vdev_id, peer_addr);
6648 	if (peer && cmd == SET_KEY)
6649 		peer->keys[key->keyidx] = key;
6650 	else if (peer && cmd == DISABLE_KEY)
6651 		peer->keys[key->keyidx] = NULL;
6652 	else if (peer == NULL)
6653 		/* impossible unless FW goes crazy */
6654 		ath10k_warn(ar, "Peer %pM disappeared!\n", peer_addr);
6655 	spin_unlock_bh(&ar->data_lock);
6656 
6657 	if (sta && sta->tdls)
6658 		ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
6659 					  ar->wmi.peer_param->authorize, 1);
6660 	else if (sta && cmd == SET_KEY && (key->flags & IEEE80211_KEY_FLAG_PAIRWISE))
6661 		ath10k_wmi_peer_set_param(ar, arvif->vdev_id, peer_addr,
6662 					  ar->wmi.peer_param->authorize, 1);
6663 
6664 exit:
6665 	mutex_unlock(&ar->conf_mutex);
6666 	return ret;
6667 }
6668 
6669 static void ath10k_set_default_unicast_key(struct ieee80211_hw *hw,
6670 					   struct ieee80211_vif *vif,
6671 					   int keyidx)
6672 {
6673 	struct ath10k *ar = hw->priv;
6674 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
6675 	int ret;
6676 
6677 	mutex_lock(&arvif->ar->conf_mutex);
6678 
6679 	if (arvif->ar->state != ATH10K_STATE_ON)
6680 		goto unlock;
6681 
6682 	ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d set keyidx %d\n",
6683 		   arvif->vdev_id, keyidx);
6684 
6685 	ret = ath10k_wmi_vdev_set_param(arvif->ar,
6686 					arvif->vdev_id,
6687 					arvif->ar->wmi.vdev_param->def_keyid,
6688 					keyidx);
6689 
6690 	if (ret) {
6691 		ath10k_warn(ar, "failed to update wep key index for vdev %d: %d\n",
6692 			    arvif->vdev_id,
6693 			    ret);
6694 		goto unlock;
6695 	}
6696 
6697 	arvif->def_wep_key_idx = keyidx;
6698 
6699 unlock:
6700 	mutex_unlock(&arvif->ar->conf_mutex);
6701 }
6702 
6703 static void ath10k_sta_rc_update_wk(struct work_struct *wk)
6704 {
6705 	struct ath10k *ar;
6706 	struct ath10k_vif *arvif;
6707 	struct ath10k_sta *arsta;
6708 	struct ieee80211_sta *sta;
6709 	struct cfg80211_chan_def def;
6710 	enum nl80211_band band;
6711 	const u8 *ht_mcs_mask;
6712 	const u16 *vht_mcs_mask;
6713 	u32 changed, bw, nss, smps;
6714 	int err;
6715 
6716 	arsta = container_of(wk, struct ath10k_sta, update_wk);
6717 	sta = container_of((void *)arsta, struct ieee80211_sta, drv_priv);
6718 	arvif = arsta->arvif;
6719 	ar = arvif->ar;
6720 
6721 	if (WARN_ON(ath10k_mac_vif_chan(arvif->vif, &def)))
6722 		return;
6723 
6724 	band = def.chan->band;
6725 	ht_mcs_mask = arvif->bitrate_mask.control[band].ht_mcs;
6726 	vht_mcs_mask = arvif->bitrate_mask.control[band].vht_mcs;
6727 
6728 	spin_lock_bh(&ar->data_lock);
6729 
6730 	changed = arsta->changed;
6731 	arsta->changed = 0;
6732 
6733 	bw = arsta->bw;
6734 	nss = arsta->nss;
6735 	smps = arsta->smps;
6736 
6737 	spin_unlock_bh(&ar->data_lock);
6738 
6739 	mutex_lock(&ar->conf_mutex);
6740 
6741 	nss = max_t(u32, 1, nss);
6742 	nss = min(nss, max(ath10k_mac_max_ht_nss(ht_mcs_mask),
6743 			   ath10k_mac_max_vht_nss(vht_mcs_mask)));
6744 
6745 	if (changed & IEEE80211_RC_BW_CHANGED) {
6746 		enum wmi_phy_mode mode;
6747 
6748 		mode = chan_to_phymode(&def);
6749 		ath10k_dbg(ar, ATH10K_DBG_STA, "mac update sta %pM peer bw %d phymode %d\n",
6750 			   sta->addr, bw, mode);
6751 
6752 		err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
6753 						ar->wmi.peer_param->phymode, mode);
6754 		if (err) {
6755 			ath10k_warn(ar, "failed to update STA %pM peer phymode %d: %d\n",
6756 				    sta->addr, mode, err);
6757 			goto exit;
6758 		}
6759 
6760 		err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
6761 						ar->wmi.peer_param->chan_width, bw);
6762 		if (err)
6763 			ath10k_warn(ar, "failed to update STA %pM peer bw %d: %d\n",
6764 				    sta->addr, bw, err);
6765 	}
6766 
6767 	if (changed & IEEE80211_RC_NSS_CHANGED) {
6768 		ath10k_dbg(ar, ATH10K_DBG_STA, "mac update sta %pM nss %d\n",
6769 			   sta->addr, nss);
6770 
6771 		err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
6772 						ar->wmi.peer_param->nss, nss);
6773 		if (err)
6774 			ath10k_warn(ar, "failed to update STA %pM nss %d: %d\n",
6775 				    sta->addr, nss, err);
6776 	}
6777 
6778 	if (changed & IEEE80211_RC_SMPS_CHANGED) {
6779 		ath10k_dbg(ar, ATH10K_DBG_STA, "mac update sta %pM smps %d\n",
6780 			   sta->addr, smps);
6781 
6782 		err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
6783 						ar->wmi.peer_param->smps_state, smps);
6784 		if (err)
6785 			ath10k_warn(ar, "failed to update STA %pM smps %d: %d\n",
6786 				    sta->addr, smps, err);
6787 	}
6788 
6789 	if (changed & IEEE80211_RC_SUPP_RATES_CHANGED) {
6790 		ath10k_dbg(ar, ATH10K_DBG_STA, "mac update sta %pM supp rates\n",
6791 			   sta->addr);
6792 
6793 		err = ath10k_station_assoc(ar, arvif->vif, sta, true);
6794 		if (err)
6795 			ath10k_warn(ar, "failed to reassociate station: %pM\n",
6796 				    sta->addr);
6797 	}
6798 
6799 exit:
6800 	mutex_unlock(&ar->conf_mutex);
6801 }
6802 
6803 static int ath10k_mac_inc_num_stations(struct ath10k_vif *arvif,
6804 				       struct ieee80211_sta *sta)
6805 {
6806 	struct ath10k *ar = arvif->ar;
6807 
6808 	lockdep_assert_held(&ar->conf_mutex);
6809 
6810 	if (arvif->vdev_type == WMI_VDEV_TYPE_STA && !sta->tdls)
6811 		return 0;
6812 
6813 	if (ar->num_stations >= ar->max_num_stations)
6814 		return -ENOBUFS;
6815 
6816 	ar->num_stations++;
6817 
6818 	return 0;
6819 }
6820 
6821 static void ath10k_mac_dec_num_stations(struct ath10k_vif *arvif,
6822 					struct ieee80211_sta *sta)
6823 {
6824 	struct ath10k *ar = arvif->ar;
6825 
6826 	lockdep_assert_held(&ar->conf_mutex);
6827 
6828 	if (arvif->vdev_type == WMI_VDEV_TYPE_STA && !sta->tdls)
6829 		return;
6830 
6831 	ar->num_stations--;
6832 }
6833 
6834 static int ath10k_sta_set_txpwr(struct ieee80211_hw *hw,
6835 				struct ieee80211_vif *vif,
6836 				struct ieee80211_sta *sta)
6837 {
6838 	struct ath10k *ar = hw->priv;
6839 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
6840 	int ret = 0;
6841 	s16 txpwr;
6842 
6843 	if (sta->deflink.txpwr.type == NL80211_TX_POWER_AUTOMATIC) {
6844 		txpwr = 0;
6845 	} else {
6846 		txpwr = sta->deflink.txpwr.power;
6847 		if (!txpwr)
6848 			return -EINVAL;
6849 	}
6850 
6851 	if (txpwr > ATH10K_TX_POWER_MAX_VAL || txpwr < ATH10K_TX_POWER_MIN_VAL)
6852 		return -EINVAL;
6853 
6854 	mutex_lock(&ar->conf_mutex);
6855 
6856 	ret = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
6857 					ar->wmi.peer_param->use_fixed_power, txpwr);
6858 	if (ret) {
6859 		ath10k_warn(ar, "failed to set tx power for station ret: %d\n",
6860 			    ret);
6861 		goto out;
6862 	}
6863 
6864 out:
6865 	mutex_unlock(&ar->conf_mutex);
6866 	return ret;
6867 }
6868 
6869 struct ath10k_mac_iter_tid_conf_data {
6870 	struct ieee80211_vif *curr_vif;
6871 	struct ath10k *ar;
6872 	bool reset_config;
6873 };
6874 
6875 static bool
6876 ath10k_mac_bitrate_mask_has_single_rate(struct ath10k *ar,
6877 					enum nl80211_band band,
6878 					const struct cfg80211_bitrate_mask *mask,
6879 					int *vht_num_rates)
6880 {
6881 	int num_rates = 0;
6882 	int i, tmp;
6883 
6884 	num_rates += hweight32(mask->control[band].legacy);
6885 
6886 	for (i = 0; i < ARRAY_SIZE(mask->control[band].ht_mcs); i++)
6887 		num_rates += hweight8(mask->control[band].ht_mcs[i]);
6888 
6889 	*vht_num_rates = 0;
6890 	for (i = 0; i < ARRAY_SIZE(mask->control[band].vht_mcs); i++) {
6891 		tmp = hweight16(mask->control[band].vht_mcs[i]);
6892 		num_rates += tmp;
6893 		*vht_num_rates += tmp;
6894 	}
6895 
6896 	return num_rates == 1;
6897 }
6898 
6899 static int
6900 ath10k_mac_bitrate_mask_get_single_rate(struct ath10k *ar,
6901 					enum nl80211_band band,
6902 					const struct cfg80211_bitrate_mask *mask,
6903 					u8 *rate, u8 *nss, bool vht_only)
6904 {
6905 	int rate_idx;
6906 	int i;
6907 	u16 bitrate;
6908 	u8 preamble;
6909 	u8 hw_rate;
6910 
6911 	if (vht_only)
6912 		goto next;
6913 
6914 	if (hweight32(mask->control[band].legacy) == 1) {
6915 		rate_idx = ffs(mask->control[band].legacy) - 1;
6916 
6917 		if (ar->phy_capability & WHAL_WLAN_11A_CAPABILITY)
6918 			rate_idx += ATH10K_MAC_FIRST_OFDM_RATE_IDX;
6919 
6920 		hw_rate = ath10k_wmi_legacy_rates[rate_idx].hw_value;
6921 		bitrate = ath10k_wmi_legacy_rates[rate_idx].bitrate;
6922 
6923 		if (ath10k_mac_bitrate_is_cck(bitrate))
6924 			preamble = WMI_RATE_PREAMBLE_CCK;
6925 		else
6926 			preamble = WMI_RATE_PREAMBLE_OFDM;
6927 
6928 		*nss = 1;
6929 		*rate = preamble << 6 |
6930 			(*nss - 1) << 4 |
6931 			hw_rate << 0;
6932 
6933 		return 0;
6934 	}
6935 
6936 	for (i = 0; i < ARRAY_SIZE(mask->control[band].ht_mcs); i++) {
6937 		if (hweight8(mask->control[band].ht_mcs[i]) == 1) {
6938 			*nss = i + 1;
6939 			*rate = WMI_RATE_PREAMBLE_HT << 6 |
6940 				(*nss - 1) << 4 |
6941 				(ffs(mask->control[band].ht_mcs[i]) - 1);
6942 
6943 			return 0;
6944 		}
6945 	}
6946 
6947 next:
6948 	for (i = 0; i < ARRAY_SIZE(mask->control[band].vht_mcs); i++) {
6949 		if (hweight16(mask->control[band].vht_mcs[i]) == 1) {
6950 			*nss = i + 1;
6951 			*rate = WMI_RATE_PREAMBLE_VHT << 6 |
6952 				(*nss - 1) << 4 |
6953 				(ffs(mask->control[band].vht_mcs[i]) - 1);
6954 
6955 			return 0;
6956 		}
6957 	}
6958 
6959 	return -EINVAL;
6960 }
6961 
6962 static int ath10k_mac_validate_rate_mask(struct ath10k *ar,
6963 					 struct ieee80211_sta *sta,
6964 					 u32 rate_ctrl_flag, u8 nss)
6965 {
6966 	struct ieee80211_sta_ht_cap *ht_cap = &sta->deflink.ht_cap;
6967 	struct ieee80211_sta_vht_cap *vht_cap = &sta->deflink.vht_cap;
6968 
6969 	if (nss > sta->deflink.rx_nss) {
6970 		ath10k_warn(ar, "Invalid nss field, configured %u limit %u\n",
6971 			    nss, sta->deflink.rx_nss);
6972 		return -EINVAL;
6973 	}
6974 
6975 	if (ATH10K_HW_PREAMBLE(rate_ctrl_flag) == WMI_RATE_PREAMBLE_VHT) {
6976 		if (!vht_cap->vht_supported) {
6977 			ath10k_warn(ar, "Invalid VHT rate for sta %pM\n",
6978 				    sta->addr);
6979 			return -EINVAL;
6980 		}
6981 	} else if (ATH10K_HW_PREAMBLE(rate_ctrl_flag) == WMI_RATE_PREAMBLE_HT) {
6982 		if (!ht_cap->ht_supported || vht_cap->vht_supported) {
6983 			ath10k_warn(ar, "Invalid HT rate for sta %pM\n",
6984 				    sta->addr);
6985 			return -EINVAL;
6986 		}
6987 	} else {
6988 		if (ht_cap->ht_supported || vht_cap->vht_supported)
6989 			return -EINVAL;
6990 	}
6991 
6992 	return 0;
6993 }
6994 
6995 static int
6996 ath10k_mac_tid_bitrate_config(struct ath10k *ar,
6997 			      struct ieee80211_vif *vif,
6998 			      struct ieee80211_sta *sta,
6999 			      u32 *rate_ctrl_flag, u8 *rate_ctrl,
7000 			      enum nl80211_tx_rate_setting txrate_type,
7001 			      const struct cfg80211_bitrate_mask *mask)
7002 {
7003 	struct cfg80211_chan_def def;
7004 	enum nl80211_band band;
7005 	u8 nss, rate;
7006 	int vht_num_rates, ret;
7007 
7008 	if (WARN_ON(ath10k_mac_vif_chan(vif, &def)))
7009 		return -EINVAL;
7010 
7011 	if (txrate_type == NL80211_TX_RATE_AUTOMATIC) {
7012 		*rate_ctrl = WMI_TID_CONFIG_RATE_CONTROL_AUTO;
7013 		*rate_ctrl_flag = 0;
7014 		return 0;
7015 	}
7016 
7017 	band = def.chan->band;
7018 
7019 	if (!ath10k_mac_bitrate_mask_has_single_rate(ar, band, mask,
7020 						     &vht_num_rates)) {
7021 		return -EINVAL;
7022 	}
7023 
7024 	ret = ath10k_mac_bitrate_mask_get_single_rate(ar, band, mask,
7025 						      &rate, &nss, false);
7026 	if (ret) {
7027 		ath10k_warn(ar, "failed to get single rate: %d\n",
7028 			    ret);
7029 		return ret;
7030 	}
7031 
7032 	*rate_ctrl_flag = rate;
7033 
7034 	if (sta && ath10k_mac_validate_rate_mask(ar, sta, *rate_ctrl_flag, nss))
7035 		return -EINVAL;
7036 
7037 	if (txrate_type == NL80211_TX_RATE_FIXED)
7038 		*rate_ctrl = WMI_TID_CONFIG_RATE_CONTROL_FIXED_RATE;
7039 	else if (txrate_type == NL80211_TX_RATE_LIMITED &&
7040 		 (test_bit(WMI_SERVICE_EXT_PEER_TID_CONFIGS_SUPPORT,
7041 			   ar->wmi.svc_map)))
7042 		*rate_ctrl = WMI_PEER_TID_CONFIG_RATE_UPPER_CAP;
7043 	else
7044 		return -EOPNOTSUPP;
7045 
7046 	return 0;
7047 }
7048 
7049 static int ath10k_mac_set_tid_config(struct ath10k *ar, struct ieee80211_sta *sta,
7050 				     struct ieee80211_vif *vif, u32 changed,
7051 				     struct wmi_per_peer_per_tid_cfg_arg *arg)
7052 {
7053 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
7054 	struct ath10k_sta *arsta;
7055 	int ret;
7056 
7057 	if (sta) {
7058 		if (!sta->wme)
7059 			return -ENOTSUPP;
7060 
7061 		arsta = (struct ath10k_sta *)sta->drv_priv;
7062 
7063 		if (changed & BIT(NL80211_TID_CONFIG_ATTR_NOACK)) {
7064 			if ((arsta->retry_long[arg->tid] > 0 ||
7065 			     arsta->rate_code[arg->tid] > 0 ||
7066 			     arsta->ampdu[arg->tid] ==
7067 					WMI_TID_CONFIG_AGGR_CONTROL_ENABLE) &&
7068 			     arg->ack_policy == WMI_PEER_TID_CONFIG_NOACK) {
7069 				changed &= ~BIT(NL80211_TID_CONFIG_ATTR_NOACK);
7070 				arg->ack_policy = 0;
7071 				arg->aggr_control = 0;
7072 				arg->rate_ctrl = 0;
7073 				arg->rcode_flags = 0;
7074 			}
7075 		}
7076 
7077 		if (changed & BIT(NL80211_TID_CONFIG_ATTR_AMPDU_CTRL)) {
7078 			if (arsta->noack[arg->tid] == WMI_PEER_TID_CONFIG_NOACK ||
7079 			    arvif->noack[arg->tid] == WMI_PEER_TID_CONFIG_NOACK) {
7080 				arg->aggr_control = 0;
7081 				changed &= ~BIT(NL80211_TID_CONFIG_ATTR_RETRY_LONG);
7082 			}
7083 		}
7084 
7085 		if (changed & (BIT(NL80211_TID_CONFIG_ATTR_TX_RATE) |
7086 		    BIT(NL80211_TID_CONFIG_ATTR_TX_RATE_TYPE))) {
7087 			if (arsta->noack[arg->tid] == WMI_PEER_TID_CONFIG_NOACK ||
7088 			    arvif->noack[arg->tid] == WMI_PEER_TID_CONFIG_NOACK) {
7089 				arg->rate_ctrl = 0;
7090 				arg->rcode_flags = 0;
7091 			}
7092 		}
7093 
7094 		ether_addr_copy(arg->peer_macaddr.addr, sta->addr);
7095 
7096 		ret = ath10k_wmi_set_per_peer_per_tid_cfg(ar, arg);
7097 		if (ret)
7098 			return ret;
7099 
7100 		/* Store the configured parameters in success case */
7101 		if (changed & BIT(NL80211_TID_CONFIG_ATTR_NOACK)) {
7102 			arsta->noack[arg->tid] = arg->ack_policy;
7103 			arg->ack_policy = 0;
7104 			arg->aggr_control = 0;
7105 			arg->rate_ctrl = 0;
7106 			arg->rcode_flags = 0;
7107 		}
7108 
7109 		if (changed & BIT(NL80211_TID_CONFIG_ATTR_RETRY_LONG)) {
7110 			arsta->retry_long[arg->tid] = arg->retry_count;
7111 			arg->retry_count = 0;
7112 		}
7113 
7114 		if (changed & BIT(NL80211_TID_CONFIG_ATTR_AMPDU_CTRL)) {
7115 			arsta->ampdu[arg->tid] = arg->aggr_control;
7116 			arg->aggr_control = 0;
7117 		}
7118 
7119 		if (changed & (BIT(NL80211_TID_CONFIG_ATTR_TX_RATE) |
7120 		    BIT(NL80211_TID_CONFIG_ATTR_TX_RATE_TYPE))) {
7121 			arsta->rate_ctrl[arg->tid] = arg->rate_ctrl;
7122 			arg->rate_ctrl = 0;
7123 			arg->rcode_flags = 0;
7124 		}
7125 
7126 		if (changed & BIT(NL80211_TID_CONFIG_ATTR_RTSCTS_CTRL)) {
7127 			arsta->rtscts[arg->tid] = arg->rtscts_ctrl;
7128 			arg->ext_tid_cfg_bitmap = 0;
7129 		}
7130 	} else {
7131 		if (changed & BIT(NL80211_TID_CONFIG_ATTR_NOACK)) {
7132 			if ((arvif->retry_long[arg->tid] ||
7133 			     arvif->rate_code[arg->tid] ||
7134 			     arvif->ampdu[arg->tid] ==
7135 					WMI_TID_CONFIG_AGGR_CONTROL_ENABLE) &&
7136 			     arg->ack_policy == WMI_PEER_TID_CONFIG_NOACK) {
7137 				changed &= ~BIT(NL80211_TID_CONFIG_ATTR_NOACK);
7138 			} else {
7139 				arvif->noack[arg->tid] = arg->ack_policy;
7140 				arvif->ampdu[arg->tid] = arg->aggr_control;
7141 				arvif->rate_ctrl[arg->tid] = arg->rate_ctrl;
7142 			}
7143 		}
7144 
7145 		if (changed & BIT(NL80211_TID_CONFIG_ATTR_RETRY_LONG)) {
7146 			if (arvif->noack[arg->tid] == WMI_PEER_TID_CONFIG_NOACK)
7147 				changed &= ~BIT(NL80211_TID_CONFIG_ATTR_RETRY_LONG);
7148 			else
7149 				arvif->retry_long[arg->tid] = arg->retry_count;
7150 		}
7151 
7152 		if (changed & BIT(NL80211_TID_CONFIG_ATTR_AMPDU_CTRL)) {
7153 			if (arvif->noack[arg->tid] == WMI_PEER_TID_CONFIG_NOACK)
7154 				changed &= ~BIT(NL80211_TID_CONFIG_ATTR_AMPDU_CTRL);
7155 			else
7156 				arvif->ampdu[arg->tid] = arg->aggr_control;
7157 		}
7158 
7159 		if (changed & (BIT(NL80211_TID_CONFIG_ATTR_TX_RATE) |
7160 		    BIT(NL80211_TID_CONFIG_ATTR_TX_RATE_TYPE))) {
7161 			if (arvif->noack[arg->tid] == WMI_PEER_TID_CONFIG_NOACK) {
7162 				changed &= ~(BIT(NL80211_TID_CONFIG_ATTR_TX_RATE) |
7163 					     BIT(NL80211_TID_CONFIG_ATTR_TX_RATE_TYPE));
7164 			} else {
7165 				arvif->rate_ctrl[arg->tid] = arg->rate_ctrl;
7166 				arvif->rate_code[arg->tid] = arg->rcode_flags;
7167 			}
7168 		}
7169 
7170 		if (changed & BIT(NL80211_TID_CONFIG_ATTR_RTSCTS_CTRL)) {
7171 			arvif->rtscts[arg->tid] = arg->rtscts_ctrl;
7172 			arg->ext_tid_cfg_bitmap = 0;
7173 		}
7174 
7175 		if (changed)
7176 			arvif->tid_conf_changed[arg->tid] |= changed;
7177 	}
7178 
7179 	return 0;
7180 }
7181 
7182 static int
7183 ath10k_mac_parse_tid_config(struct ath10k *ar,
7184 			    struct ieee80211_sta *sta,
7185 			    struct ieee80211_vif *vif,
7186 			    struct cfg80211_tid_cfg *tid_conf,
7187 			    struct wmi_per_peer_per_tid_cfg_arg *arg)
7188 {
7189 	u32 changed = tid_conf->mask;
7190 	int ret = 0, i = 0;
7191 
7192 	if (!changed)
7193 		return -EINVAL;
7194 
7195 	while (i < ATH10K_TID_MAX) {
7196 		if (!(tid_conf->tids & BIT(i))) {
7197 			i++;
7198 			continue;
7199 		}
7200 
7201 		arg->tid = i;
7202 
7203 		if (changed & BIT(NL80211_TID_CONFIG_ATTR_NOACK)) {
7204 			if (tid_conf->noack == NL80211_TID_CONFIG_ENABLE) {
7205 				arg->ack_policy = WMI_PEER_TID_CONFIG_NOACK;
7206 				arg->rate_ctrl =
7207 				WMI_TID_CONFIG_RATE_CONTROL_DEFAULT_LOWEST_RATE;
7208 				arg->aggr_control =
7209 					WMI_TID_CONFIG_AGGR_CONTROL_DISABLE;
7210 			} else {
7211 				arg->ack_policy =
7212 					WMI_PEER_TID_CONFIG_ACK;
7213 				arg->rate_ctrl =
7214 					WMI_TID_CONFIG_RATE_CONTROL_AUTO;
7215 				arg->aggr_control =
7216 					WMI_TID_CONFIG_AGGR_CONTROL_ENABLE;
7217 			}
7218 		}
7219 
7220 		if (changed & BIT(NL80211_TID_CONFIG_ATTR_RETRY_LONG))
7221 			arg->retry_count = tid_conf->retry_long;
7222 
7223 		if (changed & BIT(NL80211_TID_CONFIG_ATTR_AMPDU_CTRL)) {
7224 			if (tid_conf->noack == NL80211_TID_CONFIG_ENABLE)
7225 				arg->aggr_control = WMI_TID_CONFIG_AGGR_CONTROL_ENABLE;
7226 			else
7227 				arg->aggr_control = WMI_TID_CONFIG_AGGR_CONTROL_DISABLE;
7228 		}
7229 
7230 		if (changed & (BIT(NL80211_TID_CONFIG_ATTR_TX_RATE) |
7231 		    BIT(NL80211_TID_CONFIG_ATTR_TX_RATE_TYPE))) {
7232 			ret = ath10k_mac_tid_bitrate_config(ar, vif, sta,
7233 							    &arg->rcode_flags,
7234 							    &arg->rate_ctrl,
7235 							    tid_conf->txrate_type,
7236 							&tid_conf->txrate_mask);
7237 			if (ret) {
7238 				ath10k_warn(ar, "failed to configure bitrate mask %d\n",
7239 					    ret);
7240 				arg->rcode_flags = 0;
7241 				arg->rate_ctrl = 0;
7242 			}
7243 		}
7244 
7245 		if (changed & BIT(NL80211_TID_CONFIG_ATTR_RTSCTS_CTRL)) {
7246 			if (tid_conf->rtscts)
7247 				arg->rtscts_ctrl = tid_conf->rtscts;
7248 
7249 			arg->ext_tid_cfg_bitmap = WMI_EXT_TID_RTS_CTS_CONFIG;
7250 		}
7251 
7252 		ret = ath10k_mac_set_tid_config(ar, sta, vif, changed, arg);
7253 		if (ret)
7254 			return ret;
7255 		i++;
7256 	}
7257 
7258 	return ret;
7259 }
7260 
7261 static int ath10k_mac_reset_tid_config(struct ath10k *ar,
7262 				       struct ieee80211_sta *sta,
7263 				       struct ath10k_vif *arvif,
7264 				       u8 tids)
7265 {
7266 	struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
7267 	struct wmi_per_peer_per_tid_cfg_arg arg;
7268 	int ret = 0, i = 0;
7269 
7270 	arg.vdev_id = arvif->vdev_id;
7271 	while (i < ATH10K_TID_MAX) {
7272 		if (!(tids & BIT(i))) {
7273 			i++;
7274 			continue;
7275 		}
7276 
7277 		arg.tid = i;
7278 		arg.ack_policy = WMI_PEER_TID_CONFIG_ACK;
7279 		arg.retry_count = ATH10K_MAX_RETRY_COUNT;
7280 		arg.rate_ctrl = WMI_TID_CONFIG_RATE_CONTROL_AUTO;
7281 		arg.aggr_control = WMI_TID_CONFIG_AGGR_CONTROL_ENABLE;
7282 		arg.rtscts_ctrl = WMI_TID_CONFIG_RTSCTS_CONTROL_ENABLE;
7283 		arg.ext_tid_cfg_bitmap = WMI_EXT_TID_RTS_CTS_CONFIG;
7284 
7285 		ether_addr_copy(arg.peer_macaddr.addr, sta->addr);
7286 
7287 		ret = ath10k_wmi_set_per_peer_per_tid_cfg(ar, &arg);
7288 		if (ret)
7289 			return ret;
7290 
7291 		if (!arvif->tids_rst) {
7292 			arsta->retry_long[i] = -1;
7293 			arsta->noack[i] = -1;
7294 			arsta->ampdu[i] = -1;
7295 			arsta->rate_code[i] = -1;
7296 			arsta->rate_ctrl[i] = 0;
7297 			arsta->rtscts[i] = -1;
7298 		} else {
7299 			arvif->retry_long[i] = 0;
7300 			arvif->noack[i] = 0;
7301 			arvif->ampdu[i] = 0;
7302 			arvif->rate_code[i] = 0;
7303 			arvif->rate_ctrl[i] = 0;
7304 			arvif->rtscts[i] = 0;
7305 		}
7306 
7307 		i++;
7308 	}
7309 
7310 	return ret;
7311 }
7312 
7313 static void ath10k_sta_tid_cfg_wk(struct work_struct *wk)
7314 {
7315 	struct wmi_per_peer_per_tid_cfg_arg arg = {};
7316 	struct ieee80211_sta *sta;
7317 	struct ath10k_sta *arsta;
7318 	struct ath10k_vif *arvif;
7319 	struct ath10k *ar;
7320 	bool config_apply;
7321 	int ret, i;
7322 	u32 changed;
7323 	u8 nss;
7324 
7325 	arsta = container_of(wk, struct ath10k_sta, tid_config_wk);
7326 	sta = container_of((void *)arsta, struct ieee80211_sta, drv_priv);
7327 	arvif = arsta->arvif;
7328 	ar = arvif->ar;
7329 
7330 	mutex_lock(&ar->conf_mutex);
7331 
7332 	if (arvif->tids_rst) {
7333 		ret = ath10k_mac_reset_tid_config(ar, sta, arvif,
7334 						  arvif->tids_rst);
7335 		goto exit;
7336 	}
7337 
7338 	ether_addr_copy(arg.peer_macaddr.addr, sta->addr);
7339 
7340 	for (i = 0; i < ATH10K_TID_MAX; i++) {
7341 		config_apply = false;
7342 		changed = arvif->tid_conf_changed[i];
7343 
7344 		if (changed & BIT(NL80211_TID_CONFIG_ATTR_NOACK)) {
7345 			if (arsta->noack[i] != -1) {
7346 				arg.ack_policy  = 0;
7347 			} else {
7348 				config_apply = true;
7349 				arg.ack_policy = arvif->noack[i];
7350 				arg.aggr_control = arvif->ampdu[i];
7351 				arg.rate_ctrl = arvif->rate_ctrl[i];
7352 			}
7353 		}
7354 
7355 		if (changed & BIT(NL80211_TID_CONFIG_ATTR_RETRY_LONG)) {
7356 			if (arsta->retry_long[i] != -1 ||
7357 			    arsta->noack[i] == WMI_PEER_TID_CONFIG_NOACK ||
7358 			    arvif->noack[i] == WMI_PEER_TID_CONFIG_NOACK) {
7359 				arg.retry_count = 0;
7360 			} else {
7361 				arg.retry_count = arvif->retry_long[i];
7362 				config_apply = true;
7363 			}
7364 		}
7365 
7366 		if (changed & BIT(NL80211_TID_CONFIG_ATTR_AMPDU_CTRL)) {
7367 			if (arsta->ampdu[i] != -1 ||
7368 			    arsta->noack[i] == WMI_PEER_TID_CONFIG_NOACK ||
7369 			    arvif->noack[i] == WMI_PEER_TID_CONFIG_NOACK) {
7370 				arg.aggr_control = 0;
7371 			} else {
7372 				arg.aggr_control = arvif->ampdu[i];
7373 				config_apply = true;
7374 			}
7375 		}
7376 
7377 		if (changed & (BIT(NL80211_TID_CONFIG_ATTR_TX_RATE) |
7378 		    BIT(NL80211_TID_CONFIG_ATTR_TX_RATE_TYPE))) {
7379 			nss = ATH10K_HW_NSS(arvif->rate_code[i]);
7380 			ret = ath10k_mac_validate_rate_mask(ar, sta,
7381 							    arvif->rate_code[i],
7382 							    nss);
7383 			if (ret &&
7384 			    arvif->rate_ctrl[i] > WMI_TID_CONFIG_RATE_CONTROL_AUTO) {
7385 				arg.rate_ctrl = 0;
7386 				arg.rcode_flags = 0;
7387 			}
7388 
7389 			if (arsta->rate_ctrl[i] >
7390 			    WMI_TID_CONFIG_RATE_CONTROL_AUTO ||
7391 			    arsta->noack[i] == WMI_PEER_TID_CONFIG_NOACK ||
7392 			    arvif->noack[i] == WMI_PEER_TID_CONFIG_NOACK) {
7393 				arg.rate_ctrl = 0;
7394 				arg.rcode_flags = 0;
7395 			} else {
7396 				arg.rate_ctrl = arvif->rate_ctrl[i];
7397 				arg.rcode_flags = arvif->rate_code[i];
7398 				config_apply = true;
7399 			}
7400 		}
7401 
7402 		if (changed & BIT(NL80211_TID_CONFIG_ATTR_RTSCTS_CTRL)) {
7403 			if (arsta->rtscts[i]) {
7404 				arg.rtscts_ctrl = 0;
7405 				arg.ext_tid_cfg_bitmap = 0;
7406 			} else {
7407 				arg.rtscts_ctrl = arvif->rtscts[i] - 1;
7408 				arg.ext_tid_cfg_bitmap =
7409 					WMI_EXT_TID_RTS_CTS_CONFIG;
7410 				config_apply = true;
7411 			}
7412 		}
7413 
7414 		arg.tid = i;
7415 
7416 		if (config_apply) {
7417 			ret = ath10k_wmi_set_per_peer_per_tid_cfg(ar, &arg);
7418 			if (ret)
7419 				ath10k_warn(ar, "failed to set per tid config for sta %pM: %d\n",
7420 					    sta->addr, ret);
7421 		}
7422 
7423 		arg.ack_policy  = 0;
7424 		arg.retry_count  = 0;
7425 		arg.aggr_control  = 0;
7426 		arg.rate_ctrl = 0;
7427 		arg.rcode_flags = 0;
7428 	}
7429 
7430 exit:
7431 	mutex_unlock(&ar->conf_mutex);
7432 }
7433 
7434 static void ath10k_mac_vif_stations_tid_conf(void *data,
7435 					     struct ieee80211_sta *sta)
7436 {
7437 	struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
7438 	struct ath10k_mac_iter_tid_conf_data *iter_data = data;
7439 	struct ieee80211_vif *sta_vif = arsta->arvif->vif;
7440 
7441 	if (sta_vif != iter_data->curr_vif || !sta->wme)
7442 		return;
7443 
7444 	ieee80211_queue_work(iter_data->ar->hw, &arsta->tid_config_wk);
7445 }
7446 
7447 static int ath10k_sta_state(struct ieee80211_hw *hw,
7448 			    struct ieee80211_vif *vif,
7449 			    struct ieee80211_sta *sta,
7450 			    enum ieee80211_sta_state old_state,
7451 			    enum ieee80211_sta_state new_state)
7452 {
7453 	struct ath10k *ar = hw->priv;
7454 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
7455 	struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
7456 	struct ath10k_peer *peer;
7457 	int ret = 0;
7458 	int i;
7459 
7460 	if (old_state == IEEE80211_STA_NOTEXIST &&
7461 	    new_state == IEEE80211_STA_NONE) {
7462 		memset(arsta, 0, sizeof(*arsta));
7463 		arsta->arvif = arvif;
7464 		arsta->peer_ps_state = WMI_PEER_PS_STATE_DISABLED;
7465 		INIT_WORK(&arsta->update_wk, ath10k_sta_rc_update_wk);
7466 		INIT_WORK(&arsta->tid_config_wk, ath10k_sta_tid_cfg_wk);
7467 
7468 		for (i = 0; i < ARRAY_SIZE(sta->txq); i++)
7469 			ath10k_mac_txq_init(sta->txq[i]);
7470 	}
7471 
7472 	/* cancel must be done outside the mutex to avoid deadlock */
7473 	if ((old_state == IEEE80211_STA_NONE &&
7474 	     new_state == IEEE80211_STA_NOTEXIST)) {
7475 		cancel_work_sync(&arsta->update_wk);
7476 		cancel_work_sync(&arsta->tid_config_wk);
7477 	}
7478 
7479 	mutex_lock(&ar->conf_mutex);
7480 
7481 	if (old_state == IEEE80211_STA_NOTEXIST &&
7482 	    new_state == IEEE80211_STA_NONE) {
7483 		/*
7484 		 * New station addition.
7485 		 */
7486 		enum wmi_peer_type peer_type = WMI_PEER_TYPE_DEFAULT;
7487 		u32 num_tdls_stations;
7488 
7489 		ath10k_dbg(ar, ATH10K_DBG_STA,
7490 			   "mac vdev %d peer create %pM (new sta) sta %d / %d peer %d / %d\n",
7491 			   arvif->vdev_id, sta->addr,
7492 			   ar->num_stations + 1, ar->max_num_stations,
7493 			   ar->num_peers + 1, ar->max_num_peers);
7494 
7495 		num_tdls_stations = ath10k_mac_tdls_vif_stations_count(hw, vif);
7496 
7497 		if (sta->tdls) {
7498 			if (num_tdls_stations >= ar->max_num_tdls_vdevs) {
7499 				ath10k_warn(ar, "vdev %i exceeded maximum number of tdls vdevs %i\n",
7500 					    arvif->vdev_id,
7501 					    ar->max_num_tdls_vdevs);
7502 				ret = -ELNRNG;
7503 				goto exit;
7504 			}
7505 			peer_type = WMI_PEER_TYPE_TDLS;
7506 		}
7507 
7508 		ret = ath10k_mac_inc_num_stations(arvif, sta);
7509 		if (ret) {
7510 			ath10k_warn(ar, "refusing to associate station: too many connected already (%d)\n",
7511 				    ar->max_num_stations);
7512 			goto exit;
7513 		}
7514 
7515 		if (ath10k_debug_is_extd_tx_stats_enabled(ar)) {
7516 			arsta->tx_stats = kzalloc(sizeof(*arsta->tx_stats),
7517 						  GFP_KERNEL);
7518 			if (!arsta->tx_stats) {
7519 				ath10k_mac_dec_num_stations(arvif, sta);
7520 				ret = -ENOMEM;
7521 				goto exit;
7522 			}
7523 		}
7524 
7525 		ret = ath10k_peer_create(ar, vif, sta, arvif->vdev_id,
7526 					 sta->addr, peer_type);
7527 		if (ret) {
7528 			ath10k_warn(ar, "failed to add peer %pM for vdev %d when adding a new sta: %i\n",
7529 				    sta->addr, arvif->vdev_id, ret);
7530 			ath10k_mac_dec_num_stations(arvif, sta);
7531 			kfree(arsta->tx_stats);
7532 			goto exit;
7533 		}
7534 
7535 		spin_lock_bh(&ar->data_lock);
7536 
7537 		peer = ath10k_peer_find(ar, arvif->vdev_id, sta->addr);
7538 		if (!peer) {
7539 			ath10k_warn(ar, "failed to lookup peer %pM on vdev %i\n",
7540 				    vif->addr, arvif->vdev_id);
7541 			spin_unlock_bh(&ar->data_lock);
7542 			ath10k_peer_delete(ar, arvif->vdev_id, sta->addr);
7543 			ath10k_mac_dec_num_stations(arvif, sta);
7544 			kfree(arsta->tx_stats);
7545 			ret = -ENOENT;
7546 			goto exit;
7547 		}
7548 
7549 		arsta->peer_id = find_first_bit(peer->peer_ids,
7550 						ATH10K_MAX_NUM_PEER_IDS);
7551 
7552 		spin_unlock_bh(&ar->data_lock);
7553 
7554 		if (!sta->tdls)
7555 			goto exit;
7556 
7557 		ret = ath10k_wmi_update_fw_tdls_state(ar, arvif->vdev_id,
7558 						      WMI_TDLS_ENABLE_ACTIVE);
7559 		if (ret) {
7560 			ath10k_warn(ar, "failed to update fw tdls state on vdev %i: %i\n",
7561 				    arvif->vdev_id, ret);
7562 			ath10k_peer_delete(ar, arvif->vdev_id,
7563 					   sta->addr);
7564 			ath10k_mac_dec_num_stations(arvif, sta);
7565 			kfree(arsta->tx_stats);
7566 			goto exit;
7567 		}
7568 
7569 		ret = ath10k_mac_tdls_peer_update(ar, arvif->vdev_id, sta,
7570 						  WMI_TDLS_PEER_STATE_PEERING);
7571 		if (ret) {
7572 			ath10k_warn(ar,
7573 				    "failed to update tdls peer %pM for vdev %d when adding a new sta: %i\n",
7574 				    sta->addr, arvif->vdev_id, ret);
7575 			ath10k_peer_delete(ar, arvif->vdev_id, sta->addr);
7576 			ath10k_mac_dec_num_stations(arvif, sta);
7577 			kfree(arsta->tx_stats);
7578 
7579 			if (num_tdls_stations != 0)
7580 				goto exit;
7581 			ath10k_wmi_update_fw_tdls_state(ar, arvif->vdev_id,
7582 							WMI_TDLS_DISABLE);
7583 		}
7584 	} else if ((old_state == IEEE80211_STA_NONE &&
7585 		    new_state == IEEE80211_STA_NOTEXIST)) {
7586 		/*
7587 		 * Existing station deletion.
7588 		 */
7589 		ath10k_dbg(ar, ATH10K_DBG_STA,
7590 			   "mac vdev %d peer delete %pM sta %pK (sta gone)\n",
7591 			   arvif->vdev_id, sta->addr, sta);
7592 
7593 		if (sta->tdls) {
7594 			ret = ath10k_mac_tdls_peer_update(ar, arvif->vdev_id,
7595 							  sta,
7596 							  WMI_TDLS_PEER_STATE_TEARDOWN);
7597 			if (ret)
7598 				ath10k_warn(ar, "failed to update tdls peer state for %pM state %d: %i\n",
7599 					    sta->addr,
7600 					    WMI_TDLS_PEER_STATE_TEARDOWN, ret);
7601 		}
7602 
7603 		ret = ath10k_peer_delete(ar, arvif->vdev_id, sta->addr);
7604 		if (ret)
7605 			ath10k_warn(ar, "failed to delete peer %pM for vdev %d: %i\n",
7606 				    sta->addr, arvif->vdev_id, ret);
7607 
7608 		ath10k_mac_dec_num_stations(arvif, sta);
7609 
7610 		spin_lock_bh(&ar->data_lock);
7611 		for (i = 0; i < ARRAY_SIZE(ar->peer_map); i++) {
7612 			peer = ar->peer_map[i];
7613 			if (!peer)
7614 				continue;
7615 
7616 			if (peer->sta == sta) {
7617 				ath10k_warn(ar, "found sta peer %pM (ptr %pK id %d) entry on vdev %i after it was supposedly removed\n",
7618 					    sta->addr, peer, i, arvif->vdev_id);
7619 				peer->sta = NULL;
7620 
7621 				/* Clean up the peer object as well since we
7622 				 * must have failed to do this above.
7623 				 */
7624 				list_del(&peer->list);
7625 				ar->peer_map[i] = NULL;
7626 				kfree(peer);
7627 				ar->num_peers--;
7628 			}
7629 		}
7630 		spin_unlock_bh(&ar->data_lock);
7631 
7632 		if (ath10k_debug_is_extd_tx_stats_enabled(ar)) {
7633 			kfree(arsta->tx_stats);
7634 			arsta->tx_stats = NULL;
7635 		}
7636 
7637 		for (i = 0; i < ARRAY_SIZE(sta->txq); i++)
7638 			ath10k_mac_txq_unref(ar, sta->txq[i]);
7639 
7640 		if (!sta->tdls)
7641 			goto exit;
7642 
7643 		if (ath10k_mac_tdls_vif_stations_count(hw, vif))
7644 			goto exit;
7645 
7646 		/* This was the last tdls peer in current vif */
7647 		ret = ath10k_wmi_update_fw_tdls_state(ar, arvif->vdev_id,
7648 						      WMI_TDLS_DISABLE);
7649 		if (ret) {
7650 			ath10k_warn(ar, "failed to update fw tdls state on vdev %i: %i\n",
7651 				    arvif->vdev_id, ret);
7652 		}
7653 	} else if (old_state == IEEE80211_STA_AUTH &&
7654 		   new_state == IEEE80211_STA_ASSOC &&
7655 		   (vif->type == NL80211_IFTYPE_AP ||
7656 		    vif->type == NL80211_IFTYPE_MESH_POINT ||
7657 		    vif->type == NL80211_IFTYPE_ADHOC)) {
7658 		/*
7659 		 * New association.
7660 		 */
7661 		ath10k_dbg(ar, ATH10K_DBG_STA, "mac sta %pM associated\n",
7662 			   sta->addr);
7663 
7664 		ret = ath10k_station_assoc(ar, vif, sta, false);
7665 		if (ret)
7666 			ath10k_warn(ar, "failed to associate station %pM for vdev %i: %i\n",
7667 				    sta->addr, arvif->vdev_id, ret);
7668 	} else if (old_state == IEEE80211_STA_ASSOC &&
7669 		   new_state == IEEE80211_STA_AUTHORIZED &&
7670 		   sta->tdls) {
7671 		/*
7672 		 * Tdls station authorized.
7673 		 */
7674 		ath10k_dbg(ar, ATH10K_DBG_STA, "mac tdls sta %pM authorized\n",
7675 			   sta->addr);
7676 
7677 		ret = ath10k_station_assoc(ar, vif, sta, false);
7678 		if (ret) {
7679 			ath10k_warn(ar, "failed to associate tdls station %pM for vdev %i: %i\n",
7680 				    sta->addr, arvif->vdev_id, ret);
7681 			goto exit;
7682 		}
7683 
7684 		ret = ath10k_mac_tdls_peer_update(ar, arvif->vdev_id, sta,
7685 						  WMI_TDLS_PEER_STATE_CONNECTED);
7686 		if (ret)
7687 			ath10k_warn(ar, "failed to update tdls peer %pM for vdev %i: %i\n",
7688 				    sta->addr, arvif->vdev_id, ret);
7689 	} else if (old_state == IEEE80211_STA_ASSOC &&
7690 		    new_state == IEEE80211_STA_AUTH &&
7691 		    (vif->type == NL80211_IFTYPE_AP ||
7692 		     vif->type == NL80211_IFTYPE_MESH_POINT ||
7693 		     vif->type == NL80211_IFTYPE_ADHOC)) {
7694 		/*
7695 		 * Disassociation.
7696 		 */
7697 		ath10k_dbg(ar, ATH10K_DBG_STA, "mac sta %pM disassociated\n",
7698 			   sta->addr);
7699 
7700 		ret = ath10k_station_disassoc(ar, vif, sta);
7701 		if (ret)
7702 			ath10k_warn(ar, "failed to disassociate station: %pM vdev %i: %i\n",
7703 				    sta->addr, arvif->vdev_id, ret);
7704 	}
7705 exit:
7706 	mutex_unlock(&ar->conf_mutex);
7707 	return ret;
7708 }
7709 
7710 static int ath10k_conf_tx_uapsd(struct ath10k *ar, struct ieee80211_vif *vif,
7711 				u16 ac, bool enable)
7712 {
7713 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
7714 	struct wmi_sta_uapsd_auto_trig_arg arg = {};
7715 	u32 prio = 0, acc = 0;
7716 	u32 value = 0;
7717 	int ret = 0;
7718 
7719 	lockdep_assert_held(&ar->conf_mutex);
7720 
7721 	if (arvif->vdev_type != WMI_VDEV_TYPE_STA)
7722 		return 0;
7723 
7724 	switch (ac) {
7725 	case IEEE80211_AC_VO:
7726 		value = WMI_STA_PS_UAPSD_AC3_DELIVERY_EN |
7727 			WMI_STA_PS_UAPSD_AC3_TRIGGER_EN;
7728 		prio = 7;
7729 		acc = 3;
7730 		break;
7731 	case IEEE80211_AC_VI:
7732 		value = WMI_STA_PS_UAPSD_AC2_DELIVERY_EN |
7733 			WMI_STA_PS_UAPSD_AC2_TRIGGER_EN;
7734 		prio = 5;
7735 		acc = 2;
7736 		break;
7737 	case IEEE80211_AC_BE:
7738 		value = WMI_STA_PS_UAPSD_AC1_DELIVERY_EN |
7739 			WMI_STA_PS_UAPSD_AC1_TRIGGER_EN;
7740 		prio = 2;
7741 		acc = 1;
7742 		break;
7743 	case IEEE80211_AC_BK:
7744 		value = WMI_STA_PS_UAPSD_AC0_DELIVERY_EN |
7745 			WMI_STA_PS_UAPSD_AC0_TRIGGER_EN;
7746 		prio = 0;
7747 		acc = 0;
7748 		break;
7749 	}
7750 
7751 	if (enable)
7752 		arvif->u.sta.uapsd |= value;
7753 	else
7754 		arvif->u.sta.uapsd &= ~value;
7755 
7756 	ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
7757 					  WMI_STA_PS_PARAM_UAPSD,
7758 					  arvif->u.sta.uapsd);
7759 	if (ret) {
7760 		ath10k_warn(ar, "failed to set uapsd params: %d\n", ret);
7761 		goto exit;
7762 	}
7763 
7764 	if (arvif->u.sta.uapsd)
7765 		value = WMI_STA_PS_RX_WAKE_POLICY_POLL_UAPSD;
7766 	else
7767 		value = WMI_STA_PS_RX_WAKE_POLICY_WAKE;
7768 
7769 	ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
7770 					  WMI_STA_PS_PARAM_RX_WAKE_POLICY,
7771 					  value);
7772 	if (ret)
7773 		ath10k_warn(ar, "failed to set rx wake param: %d\n", ret);
7774 
7775 	ret = ath10k_mac_vif_recalc_ps_wake_threshold(arvif);
7776 	if (ret) {
7777 		ath10k_warn(ar, "failed to recalc ps wake threshold on vdev %i: %d\n",
7778 			    arvif->vdev_id, ret);
7779 		return ret;
7780 	}
7781 
7782 	ret = ath10k_mac_vif_recalc_ps_poll_count(arvif);
7783 	if (ret) {
7784 		ath10k_warn(ar, "failed to recalc ps poll count on vdev %i: %d\n",
7785 			    arvif->vdev_id, ret);
7786 		return ret;
7787 	}
7788 
7789 	if (test_bit(WMI_SERVICE_STA_UAPSD_BASIC_AUTO_TRIG, ar->wmi.svc_map) ||
7790 	    test_bit(WMI_SERVICE_STA_UAPSD_VAR_AUTO_TRIG, ar->wmi.svc_map)) {
7791 		/* Only userspace can make an educated decision when to send
7792 		 * trigger frame. The following effectively disables u-UAPSD
7793 		 * autotrigger in firmware (which is enabled by default
7794 		 * provided the autotrigger service is available).
7795 		 */
7796 
7797 		arg.wmm_ac = acc;
7798 		arg.user_priority = prio;
7799 		arg.service_interval = 0;
7800 		arg.suspend_interval = WMI_STA_UAPSD_MAX_INTERVAL_MSEC;
7801 		arg.delay_interval = WMI_STA_UAPSD_MAX_INTERVAL_MSEC;
7802 
7803 		ret = ath10k_wmi_vdev_sta_uapsd(ar, arvif->vdev_id,
7804 						arvif->bssid, &arg, 1);
7805 		if (ret) {
7806 			ath10k_warn(ar, "failed to set uapsd auto trigger %d\n",
7807 				    ret);
7808 			return ret;
7809 		}
7810 	}
7811 
7812 exit:
7813 	return ret;
7814 }
7815 
7816 static int ath10k_conf_tx(struct ieee80211_hw *hw,
7817 			  struct ieee80211_vif *vif, u16 ac,
7818 			  const struct ieee80211_tx_queue_params *params)
7819 {
7820 	struct ath10k *ar = hw->priv;
7821 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
7822 	struct wmi_wmm_params_arg *p = NULL;
7823 	int ret;
7824 
7825 	mutex_lock(&ar->conf_mutex);
7826 
7827 	switch (ac) {
7828 	case IEEE80211_AC_VO:
7829 		p = &arvif->wmm_params.ac_vo;
7830 		break;
7831 	case IEEE80211_AC_VI:
7832 		p = &arvif->wmm_params.ac_vi;
7833 		break;
7834 	case IEEE80211_AC_BE:
7835 		p = &arvif->wmm_params.ac_be;
7836 		break;
7837 	case IEEE80211_AC_BK:
7838 		p = &arvif->wmm_params.ac_bk;
7839 		break;
7840 	}
7841 
7842 	if (WARN_ON(!p)) {
7843 		ret = -EINVAL;
7844 		goto exit;
7845 	}
7846 
7847 	p->cwmin = params->cw_min;
7848 	p->cwmax = params->cw_max;
7849 	p->aifs = params->aifs;
7850 
7851 	/*
7852 	 * The channel time duration programmed in the HW is in absolute
7853 	 * microseconds, while mac80211 gives the txop in units of
7854 	 * 32 microseconds.
7855 	 */
7856 	p->txop = params->txop * 32;
7857 
7858 	if (ar->wmi.ops->gen_vdev_wmm_conf) {
7859 		ret = ath10k_wmi_vdev_wmm_conf(ar, arvif->vdev_id,
7860 					       &arvif->wmm_params);
7861 		if (ret) {
7862 			ath10k_warn(ar, "failed to set vdev wmm params on vdev %i: %d\n",
7863 				    arvif->vdev_id, ret);
7864 			goto exit;
7865 		}
7866 	} else {
7867 		/* This won't work well with multi-interface cases but it's
7868 		 * better than nothing.
7869 		 */
7870 		ret = ath10k_wmi_pdev_set_wmm_params(ar, &arvif->wmm_params);
7871 		if (ret) {
7872 			ath10k_warn(ar, "failed to set wmm params: %d\n", ret);
7873 			goto exit;
7874 		}
7875 	}
7876 
7877 	ret = ath10k_conf_tx_uapsd(ar, vif, ac, params->uapsd);
7878 	if (ret)
7879 		ath10k_warn(ar, "failed to set sta uapsd: %d\n", ret);
7880 
7881 exit:
7882 	mutex_unlock(&ar->conf_mutex);
7883 	return ret;
7884 }
7885 
7886 static int ath10k_remain_on_channel(struct ieee80211_hw *hw,
7887 				    struct ieee80211_vif *vif,
7888 				    struct ieee80211_channel *chan,
7889 				    int duration,
7890 				    enum ieee80211_roc_type type)
7891 {
7892 	struct ath10k *ar = hw->priv;
7893 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
7894 	struct wmi_start_scan_arg arg;
7895 	int ret = 0;
7896 	u32 scan_time_msec;
7897 
7898 	mutex_lock(&ar->conf_mutex);
7899 
7900 	if (ath10k_mac_tdls_vif_stations_count(hw, vif) > 0) {
7901 		ret = -EBUSY;
7902 		goto exit;
7903 	}
7904 
7905 	spin_lock_bh(&ar->data_lock);
7906 	switch (ar->scan.state) {
7907 	case ATH10K_SCAN_IDLE:
7908 		reinit_completion(&ar->scan.started);
7909 		reinit_completion(&ar->scan.completed);
7910 		reinit_completion(&ar->scan.on_channel);
7911 		ar->scan.state = ATH10K_SCAN_STARTING;
7912 		ar->scan.is_roc = true;
7913 		ar->scan.vdev_id = arvif->vdev_id;
7914 		ar->scan.roc_freq = chan->center_freq;
7915 		ar->scan.roc_notify = true;
7916 		ret = 0;
7917 		break;
7918 	case ATH10K_SCAN_STARTING:
7919 	case ATH10K_SCAN_RUNNING:
7920 	case ATH10K_SCAN_ABORTING:
7921 		ret = -EBUSY;
7922 		break;
7923 	}
7924 	spin_unlock_bh(&ar->data_lock);
7925 
7926 	if (ret)
7927 		goto exit;
7928 
7929 	scan_time_msec = ar->hw->wiphy->max_remain_on_channel_duration * 2;
7930 
7931 	memset(&arg, 0, sizeof(arg));
7932 	ath10k_wmi_start_scan_init(ar, &arg);
7933 	arg.vdev_id = arvif->vdev_id;
7934 	arg.scan_id = ATH10K_SCAN_ID;
7935 	arg.n_channels = 1;
7936 	arg.channels[0] = chan->center_freq;
7937 	arg.dwell_time_active = scan_time_msec;
7938 	arg.dwell_time_passive = scan_time_msec;
7939 	arg.max_scan_time = scan_time_msec;
7940 	arg.scan_ctrl_flags |= WMI_SCAN_FLAG_PASSIVE;
7941 	arg.scan_ctrl_flags |= WMI_SCAN_FILTER_PROBE_REQ;
7942 	arg.burst_duration_ms = duration;
7943 
7944 	ret = ath10k_start_scan(ar, &arg);
7945 	if (ret) {
7946 		ath10k_warn(ar, "failed to start roc scan: %d\n", ret);
7947 		spin_lock_bh(&ar->data_lock);
7948 		ar->scan.state = ATH10K_SCAN_IDLE;
7949 		spin_unlock_bh(&ar->data_lock);
7950 		goto exit;
7951 	}
7952 
7953 	ret = wait_for_completion_timeout(&ar->scan.on_channel, 3 * HZ);
7954 	if (ret == 0) {
7955 		ath10k_warn(ar, "failed to switch to channel for roc scan\n");
7956 
7957 		ret = ath10k_scan_stop(ar);
7958 		if (ret)
7959 			ath10k_warn(ar, "failed to stop scan: %d\n", ret);
7960 
7961 		ret = -ETIMEDOUT;
7962 		goto exit;
7963 	}
7964 
7965 	ieee80211_queue_delayed_work(ar->hw, &ar->scan.timeout,
7966 				     msecs_to_jiffies(duration));
7967 
7968 	ret = 0;
7969 exit:
7970 	mutex_unlock(&ar->conf_mutex);
7971 	return ret;
7972 }
7973 
7974 static int ath10k_cancel_remain_on_channel(struct ieee80211_hw *hw,
7975 					   struct ieee80211_vif *vif)
7976 {
7977 	struct ath10k *ar = hw->priv;
7978 
7979 	mutex_lock(&ar->conf_mutex);
7980 
7981 	spin_lock_bh(&ar->data_lock);
7982 	ar->scan.roc_notify = false;
7983 	spin_unlock_bh(&ar->data_lock);
7984 
7985 	ath10k_scan_abort(ar);
7986 
7987 	mutex_unlock(&ar->conf_mutex);
7988 
7989 	cancel_delayed_work_sync(&ar->scan.timeout);
7990 
7991 	return 0;
7992 }
7993 
7994 /*
7995  * Both RTS and Fragmentation threshold are interface-specific
7996  * in ath10k, but device-specific in mac80211.
7997  */
7998 
7999 static int ath10k_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
8000 {
8001 	struct ath10k *ar = hw->priv;
8002 	struct ath10k_vif *arvif;
8003 	int ret = 0;
8004 
8005 	mutex_lock(&ar->conf_mutex);
8006 	list_for_each_entry(arvif, &ar->arvifs, list) {
8007 		ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d rts threshold %d\n",
8008 			   arvif->vdev_id, value);
8009 
8010 		ret = ath10k_mac_set_rts(arvif, value);
8011 		if (ret) {
8012 			ath10k_warn(ar, "failed to set rts threshold for vdev %d: %d\n",
8013 				    arvif->vdev_id, ret);
8014 			break;
8015 		}
8016 	}
8017 	mutex_unlock(&ar->conf_mutex);
8018 
8019 	return ret;
8020 }
8021 
8022 static int ath10k_mac_op_set_frag_threshold(struct ieee80211_hw *hw, u32 value)
8023 {
8024 	/* Even though there's a WMI enum for fragmentation threshold no known
8025 	 * firmware actually implements it. Moreover it is not possible to rely
8026 	 * frame fragmentation to mac80211 because firmware clears the "more
8027 	 * fragments" bit in frame control making it impossible for remote
8028 	 * devices to reassemble frames.
8029 	 *
8030 	 * Hence implement a dummy callback just to say fragmentation isn't
8031 	 * supported. This effectively prevents mac80211 from doing frame
8032 	 * fragmentation in software.
8033 	 */
8034 	return -EOPNOTSUPP;
8035 }
8036 
8037 void ath10k_mac_wait_tx_complete(struct ath10k *ar)
8038 {
8039 	bool skip;
8040 	long time_left;
8041 
8042 	/* mac80211 doesn't care if we really xmit queued frames or not
8043 	 * we'll collect those frames either way if we stop/delete vdevs
8044 	 */
8045 
8046 	if (ar->state == ATH10K_STATE_WEDGED)
8047 		return;
8048 
8049 	time_left = wait_event_timeout(ar->htt.empty_tx_wq, ({
8050 			bool empty;
8051 
8052 			spin_lock_bh(&ar->htt.tx_lock);
8053 			empty = (ar->htt.num_pending_tx == 0);
8054 			spin_unlock_bh(&ar->htt.tx_lock);
8055 
8056 			skip = (ar->state == ATH10K_STATE_WEDGED) ||
8057 			       test_bit(ATH10K_FLAG_CRASH_FLUSH,
8058 					&ar->dev_flags);
8059 
8060 			(empty || skip);
8061 		}), ATH10K_FLUSH_TIMEOUT_HZ);
8062 
8063 	if (time_left == 0 || skip)
8064 		ath10k_warn(ar, "failed to flush transmit queue (skip %i ar-state %i): %ld\n",
8065 			    skip, ar->state, time_left);
8066 }
8067 
8068 static void ath10k_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
8069 			 u32 queues, bool drop)
8070 {
8071 	struct ath10k *ar = hw->priv;
8072 	struct ath10k_vif *arvif;
8073 	u32 bitmap;
8074 
8075 	if (drop) {
8076 		if (vif && vif->type == NL80211_IFTYPE_STATION) {
8077 			bitmap = ~(1 << WMI_MGMT_TID);
8078 			list_for_each_entry(arvif, &ar->arvifs, list) {
8079 				if (arvif->vdev_type == WMI_VDEV_TYPE_STA)
8080 					ath10k_wmi_peer_flush(ar, arvif->vdev_id,
8081 							      arvif->bssid, bitmap);
8082 			}
8083 			ath10k_htt_flush_tx(&ar->htt);
8084 		}
8085 		return;
8086 	}
8087 
8088 	mutex_lock(&ar->conf_mutex);
8089 	ath10k_mac_wait_tx_complete(ar);
8090 	mutex_unlock(&ar->conf_mutex);
8091 }
8092 
8093 /* TODO: Implement this function properly
8094  * For now it is needed to reply to Probe Requests in IBSS mode.
8095  * Propably we need this information from FW.
8096  */
8097 static int ath10k_tx_last_beacon(struct ieee80211_hw *hw)
8098 {
8099 	return 1;
8100 }
8101 
8102 static void ath10k_reconfig_complete(struct ieee80211_hw *hw,
8103 				     enum ieee80211_reconfig_type reconfig_type)
8104 {
8105 	struct ath10k *ar = hw->priv;
8106 
8107 	if (reconfig_type != IEEE80211_RECONFIG_TYPE_RESTART)
8108 		return;
8109 
8110 	mutex_lock(&ar->conf_mutex);
8111 
8112 	/* If device failed to restart it will be in a different state, e.g.
8113 	 * ATH10K_STATE_WEDGED
8114 	 */
8115 	if (ar->state == ATH10K_STATE_RESTARTED) {
8116 		ath10k_info(ar, "device successfully recovered\n");
8117 		ar->state = ATH10K_STATE_ON;
8118 		ieee80211_wake_queues(ar->hw);
8119 		clear_bit(ATH10K_FLAG_RESTARTING, &ar->dev_flags);
8120 	}
8121 
8122 	mutex_unlock(&ar->conf_mutex);
8123 }
8124 
8125 static void
8126 ath10k_mac_update_bss_chan_survey(struct ath10k *ar,
8127 				  struct ieee80211_channel *channel)
8128 {
8129 	int ret;
8130 	enum wmi_bss_survey_req_type type = WMI_BSS_SURVEY_REQ_TYPE_READ;
8131 
8132 	lockdep_assert_held(&ar->conf_mutex);
8133 
8134 	if (!test_bit(WMI_SERVICE_BSS_CHANNEL_INFO_64, ar->wmi.svc_map) ||
8135 	    (ar->rx_channel != channel))
8136 		return;
8137 
8138 	if (ar->scan.state != ATH10K_SCAN_IDLE) {
8139 		ath10k_dbg(ar, ATH10K_DBG_MAC, "ignoring bss chan info request while scanning..\n");
8140 		return;
8141 	}
8142 
8143 	reinit_completion(&ar->bss_survey_done);
8144 
8145 	ret = ath10k_wmi_pdev_bss_chan_info_request(ar, type);
8146 	if (ret) {
8147 		ath10k_warn(ar, "failed to send pdev bss chan info request\n");
8148 		return;
8149 	}
8150 
8151 	ret = wait_for_completion_timeout(&ar->bss_survey_done, 3 * HZ);
8152 	if (!ret) {
8153 		ath10k_warn(ar, "bss channel survey timed out\n");
8154 		return;
8155 	}
8156 }
8157 
8158 static int ath10k_get_survey(struct ieee80211_hw *hw, int idx,
8159 			     struct survey_info *survey)
8160 {
8161 	struct ath10k *ar = hw->priv;
8162 	struct ieee80211_supported_band *sband;
8163 	struct survey_info *ar_survey = &ar->survey[idx];
8164 	int ret = 0;
8165 
8166 	mutex_lock(&ar->conf_mutex);
8167 
8168 	sband = hw->wiphy->bands[NL80211_BAND_2GHZ];
8169 	if (sband && idx >= sband->n_channels) {
8170 		idx -= sband->n_channels;
8171 		sband = NULL;
8172 	}
8173 
8174 	if (!sband)
8175 		sband = hw->wiphy->bands[NL80211_BAND_5GHZ];
8176 
8177 	if (!sband || idx >= sband->n_channels) {
8178 		ret = -ENOENT;
8179 		goto exit;
8180 	}
8181 
8182 	ath10k_mac_update_bss_chan_survey(ar, &sband->channels[idx]);
8183 
8184 	spin_lock_bh(&ar->data_lock);
8185 	memcpy(survey, ar_survey, sizeof(*survey));
8186 	spin_unlock_bh(&ar->data_lock);
8187 
8188 	survey->channel = &sband->channels[idx];
8189 
8190 	if (ar->rx_channel == survey->channel)
8191 		survey->filled |= SURVEY_INFO_IN_USE;
8192 
8193 exit:
8194 	mutex_unlock(&ar->conf_mutex);
8195 	return ret;
8196 }
8197 
8198 static bool
8199 ath10k_mac_bitrate_mask_get_single_nss(struct ath10k *ar,
8200 				       enum nl80211_band band,
8201 				       const struct cfg80211_bitrate_mask *mask,
8202 				       int *nss)
8203 {
8204 	struct ieee80211_supported_band *sband = &ar->mac.sbands[band];
8205 	u16 vht_mcs_map = le16_to_cpu(sband->vht_cap.vht_mcs.tx_mcs_map);
8206 	u8 ht_nss_mask = 0;
8207 	u8 vht_nss_mask = 0;
8208 	int i;
8209 
8210 	if (mask->control[band].legacy)
8211 		return false;
8212 
8213 	for (i = 0; i < ARRAY_SIZE(mask->control[band].ht_mcs); i++) {
8214 		if (mask->control[band].ht_mcs[i] == 0)
8215 			continue;
8216 		else if (mask->control[band].ht_mcs[i] ==
8217 			 sband->ht_cap.mcs.rx_mask[i])
8218 			ht_nss_mask |= BIT(i);
8219 		else
8220 			return false;
8221 	}
8222 
8223 	for (i = 0; i < ARRAY_SIZE(mask->control[band].vht_mcs); i++) {
8224 		if (mask->control[band].vht_mcs[i] == 0)
8225 			continue;
8226 		else if (mask->control[band].vht_mcs[i] ==
8227 			 ath10k_mac_get_max_vht_mcs_map(vht_mcs_map, i))
8228 			vht_nss_mask |= BIT(i);
8229 		else
8230 			return false;
8231 	}
8232 
8233 	if (ht_nss_mask != vht_nss_mask)
8234 		return false;
8235 
8236 	if (ht_nss_mask == 0)
8237 		return false;
8238 
8239 	if (BIT(fls(ht_nss_mask)) - 1 != ht_nss_mask)
8240 		return false;
8241 
8242 	*nss = fls(ht_nss_mask);
8243 
8244 	return true;
8245 }
8246 
8247 static int ath10k_mac_set_fixed_rate_params(struct ath10k_vif *arvif,
8248 					    u8 rate, u8 nss, u8 sgi, u8 ldpc)
8249 {
8250 	struct ath10k *ar = arvif->ar;
8251 	u32 vdev_param;
8252 	int ret;
8253 
8254 	lockdep_assert_held(&ar->conf_mutex);
8255 
8256 	ath10k_dbg(ar, ATH10K_DBG_MAC, "mac set fixed rate params vdev %i rate 0x%02x nss %u sgi %u\n",
8257 		   arvif->vdev_id, rate, nss, sgi);
8258 
8259 	vdev_param = ar->wmi.vdev_param->fixed_rate;
8260 	ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, rate);
8261 	if (ret) {
8262 		ath10k_warn(ar, "failed to set fixed rate param 0x%02x: %d\n",
8263 			    rate, ret);
8264 		return ret;
8265 	}
8266 
8267 	vdev_param = ar->wmi.vdev_param->nss;
8268 	ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, nss);
8269 	if (ret) {
8270 		ath10k_warn(ar, "failed to set nss param %d: %d\n", nss, ret);
8271 		return ret;
8272 	}
8273 
8274 	vdev_param = ar->wmi.vdev_param->sgi;
8275 	ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, sgi);
8276 	if (ret) {
8277 		ath10k_warn(ar, "failed to set sgi param %d: %d\n", sgi, ret);
8278 		return ret;
8279 	}
8280 
8281 	vdev_param = ar->wmi.vdev_param->ldpc;
8282 	ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, ldpc);
8283 	if (ret) {
8284 		ath10k_warn(ar, "failed to set ldpc param %d: %d\n", ldpc, ret);
8285 		return ret;
8286 	}
8287 
8288 	return 0;
8289 }
8290 
8291 static bool
8292 ath10k_mac_can_set_bitrate_mask(struct ath10k *ar,
8293 				enum nl80211_band band,
8294 				const struct cfg80211_bitrate_mask *mask,
8295 				bool allow_pfr)
8296 {
8297 	int i;
8298 	u16 vht_mcs;
8299 
8300 	/* Due to firmware limitation in WMI_PEER_ASSOC_CMDID it is impossible
8301 	 * to express all VHT MCS rate masks. Effectively only the following
8302 	 * ranges can be used: none, 0-7, 0-8 and 0-9.
8303 	 */
8304 	for (i = 0; i < NL80211_VHT_NSS_MAX; i++) {
8305 		vht_mcs = mask->control[band].vht_mcs[i];
8306 
8307 		switch (vht_mcs) {
8308 		case 0:
8309 		case BIT(8) - 1:
8310 		case BIT(9) - 1:
8311 		case BIT(10) - 1:
8312 			break;
8313 		default:
8314 			if (!allow_pfr)
8315 				ath10k_warn(ar, "refusing bitrate mask with missing 0-7 VHT MCS rates\n");
8316 			return false;
8317 		}
8318 	}
8319 
8320 	return true;
8321 }
8322 
8323 static bool ath10k_mac_set_vht_bitrate_mask_fixup(struct ath10k *ar,
8324 						  struct ath10k_vif *arvif,
8325 						  struct ieee80211_sta *sta)
8326 {
8327 	int err;
8328 	u8 rate = arvif->vht_pfr;
8329 
8330 	/* skip non vht and multiple rate peers */
8331 	if (!sta->deflink.vht_cap.vht_supported || arvif->vht_num_rates != 1)
8332 		return false;
8333 
8334 	err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
8335 					WMI_PEER_PARAM_FIXED_RATE, rate);
8336 	if (err)
8337 		ath10k_warn(ar, "failed to enable STA %pM peer fixed rate: %d\n",
8338 			    sta->addr, err);
8339 
8340 	return true;
8341 }
8342 
8343 static void ath10k_mac_set_bitrate_mask_iter(void *data,
8344 					     struct ieee80211_sta *sta)
8345 {
8346 	struct ath10k_vif *arvif = data;
8347 	struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
8348 	struct ath10k *ar = arvif->ar;
8349 
8350 	if (arsta->arvif != arvif)
8351 		return;
8352 
8353 	if (ath10k_mac_set_vht_bitrate_mask_fixup(ar, arvif, sta))
8354 		return;
8355 
8356 	spin_lock_bh(&ar->data_lock);
8357 	arsta->changed |= IEEE80211_RC_SUPP_RATES_CHANGED;
8358 	spin_unlock_bh(&ar->data_lock);
8359 
8360 	ieee80211_queue_work(ar->hw, &arsta->update_wk);
8361 }
8362 
8363 static void ath10k_mac_clr_bitrate_mask_iter(void *data,
8364 					     struct ieee80211_sta *sta)
8365 {
8366 	struct ath10k_vif *arvif = data;
8367 	struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
8368 	struct ath10k *ar = arvif->ar;
8369 	int err;
8370 
8371 	/* clear vht peers only */
8372 	if (arsta->arvif != arvif || !sta->deflink.vht_cap.vht_supported)
8373 		return;
8374 
8375 	err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
8376 					WMI_PEER_PARAM_FIXED_RATE,
8377 					WMI_FIXED_RATE_NONE);
8378 	if (err)
8379 		ath10k_warn(ar, "failed to clear STA %pM peer fixed rate: %d\n",
8380 			    sta->addr, err);
8381 }
8382 
8383 static int ath10k_mac_op_set_bitrate_mask(struct ieee80211_hw *hw,
8384 					  struct ieee80211_vif *vif,
8385 					  const struct cfg80211_bitrate_mask *mask)
8386 {
8387 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
8388 	struct cfg80211_chan_def def;
8389 	struct ath10k *ar = arvif->ar;
8390 	enum nl80211_band band;
8391 	const u8 *ht_mcs_mask;
8392 	const u16 *vht_mcs_mask;
8393 	u8 rate;
8394 	u8 nss;
8395 	u8 sgi;
8396 	u8 ldpc;
8397 	int single_nss;
8398 	int ret;
8399 	int vht_num_rates, allow_pfr;
8400 	u8 vht_pfr;
8401 	bool update_bitrate_mask = true;
8402 
8403 	if (ath10k_mac_vif_chan(vif, &def))
8404 		return -EPERM;
8405 
8406 	band = def.chan->band;
8407 	ht_mcs_mask = mask->control[band].ht_mcs;
8408 	vht_mcs_mask = mask->control[band].vht_mcs;
8409 	ldpc = !!(ar->ht_cap_info & WMI_HT_CAP_LDPC);
8410 
8411 	sgi = mask->control[band].gi;
8412 	if (sgi == NL80211_TXRATE_FORCE_LGI)
8413 		return -EINVAL;
8414 
8415 	allow_pfr = test_bit(ATH10K_FW_FEATURE_PEER_FIXED_RATE,
8416 			     ar->normal_mode_fw.fw_file.fw_features);
8417 	if (allow_pfr) {
8418 		mutex_lock(&ar->conf_mutex);
8419 		ieee80211_iterate_stations_atomic(ar->hw,
8420 						  ath10k_mac_clr_bitrate_mask_iter,
8421 						  arvif);
8422 		mutex_unlock(&ar->conf_mutex);
8423 	}
8424 
8425 	if (ath10k_mac_bitrate_mask_has_single_rate(ar, band, mask,
8426 						    &vht_num_rates)) {
8427 		ret = ath10k_mac_bitrate_mask_get_single_rate(ar, band, mask,
8428 							      &rate, &nss,
8429 							      false);
8430 		if (ret) {
8431 			ath10k_warn(ar, "failed to get single rate for vdev %i: %d\n",
8432 				    arvif->vdev_id, ret);
8433 			return ret;
8434 		}
8435 	} else if (ath10k_mac_bitrate_mask_get_single_nss(ar, band, mask,
8436 							  &single_nss)) {
8437 		rate = WMI_FIXED_RATE_NONE;
8438 		nss = single_nss;
8439 	} else {
8440 		rate = WMI_FIXED_RATE_NONE;
8441 		nss = min(ar->num_rf_chains,
8442 			  max(ath10k_mac_max_ht_nss(ht_mcs_mask),
8443 			      ath10k_mac_max_vht_nss(vht_mcs_mask)));
8444 
8445 		if (!ath10k_mac_can_set_bitrate_mask(ar, band, mask,
8446 						     allow_pfr)) {
8447 			u8 vht_nss;
8448 
8449 			if (!allow_pfr || vht_num_rates != 1)
8450 				return -EINVAL;
8451 
8452 			/* Reach here, firmware supports peer fixed rate and has
8453 			 * single vht rate, and don't update vif birate_mask, as
8454 			 * the rate only for specific peer.
8455 			 */
8456 			ath10k_mac_bitrate_mask_get_single_rate(ar, band, mask,
8457 								&vht_pfr,
8458 								&vht_nss,
8459 								true);
8460 			update_bitrate_mask = false;
8461 		} else {
8462 			vht_pfr = 0;
8463 		}
8464 
8465 		mutex_lock(&ar->conf_mutex);
8466 
8467 		if (update_bitrate_mask)
8468 			arvif->bitrate_mask = *mask;
8469 		arvif->vht_num_rates = vht_num_rates;
8470 		arvif->vht_pfr = vht_pfr;
8471 		ieee80211_iterate_stations_atomic(ar->hw,
8472 						  ath10k_mac_set_bitrate_mask_iter,
8473 						  arvif);
8474 
8475 		mutex_unlock(&ar->conf_mutex);
8476 	}
8477 
8478 	mutex_lock(&ar->conf_mutex);
8479 
8480 	ret = ath10k_mac_set_fixed_rate_params(arvif, rate, nss, sgi, ldpc);
8481 	if (ret) {
8482 		ath10k_warn(ar, "failed to set fixed rate params on vdev %i: %d\n",
8483 			    arvif->vdev_id, ret);
8484 		goto exit;
8485 	}
8486 
8487 exit:
8488 	mutex_unlock(&ar->conf_mutex);
8489 
8490 	return ret;
8491 }
8492 
8493 static void ath10k_sta_rc_update(struct ieee80211_hw *hw,
8494 				 struct ieee80211_vif *vif,
8495 				 struct ieee80211_sta *sta,
8496 				 u32 changed)
8497 {
8498 	struct ath10k *ar = hw->priv;
8499 	struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
8500 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
8501 	struct ath10k_peer *peer;
8502 	u32 bw, smps;
8503 
8504 	spin_lock_bh(&ar->data_lock);
8505 
8506 	peer = ath10k_peer_find(ar, arvif->vdev_id, sta->addr);
8507 	if (!peer) {
8508 		spin_unlock_bh(&ar->data_lock);
8509 		ath10k_warn(ar, "mac sta rc update failed to find peer %pM on vdev %i\n",
8510 			    sta->addr, arvif->vdev_id);
8511 		return;
8512 	}
8513 
8514 	ath10k_dbg(ar, ATH10K_DBG_STA,
8515 		   "mac sta rc update for %pM changed %08x bw %d nss %d smps %d\n",
8516 		   sta->addr, changed, sta->deflink.bandwidth,
8517 		   sta->deflink.rx_nss,
8518 		   sta->smps_mode);
8519 
8520 	if (changed & IEEE80211_RC_BW_CHANGED) {
8521 		bw = WMI_PEER_CHWIDTH_20MHZ;
8522 
8523 		switch (sta->deflink.bandwidth) {
8524 		case IEEE80211_STA_RX_BW_20:
8525 			bw = WMI_PEER_CHWIDTH_20MHZ;
8526 			break;
8527 		case IEEE80211_STA_RX_BW_40:
8528 			bw = WMI_PEER_CHWIDTH_40MHZ;
8529 			break;
8530 		case IEEE80211_STA_RX_BW_80:
8531 			bw = WMI_PEER_CHWIDTH_80MHZ;
8532 			break;
8533 		case IEEE80211_STA_RX_BW_160:
8534 			bw = WMI_PEER_CHWIDTH_160MHZ;
8535 			break;
8536 		default:
8537 			ath10k_warn(ar, "Invalid bandwidth %d in rc update for %pM\n",
8538 				    sta->deflink.bandwidth, sta->addr);
8539 			bw = WMI_PEER_CHWIDTH_20MHZ;
8540 			break;
8541 		}
8542 
8543 		arsta->bw = bw;
8544 	}
8545 
8546 	if (changed & IEEE80211_RC_NSS_CHANGED)
8547 		arsta->nss = sta->deflink.rx_nss;
8548 
8549 	if (changed & IEEE80211_RC_SMPS_CHANGED) {
8550 		smps = WMI_PEER_SMPS_PS_NONE;
8551 
8552 		switch (sta->smps_mode) {
8553 		case IEEE80211_SMPS_AUTOMATIC:
8554 		case IEEE80211_SMPS_OFF:
8555 			smps = WMI_PEER_SMPS_PS_NONE;
8556 			break;
8557 		case IEEE80211_SMPS_STATIC:
8558 			smps = WMI_PEER_SMPS_STATIC;
8559 			break;
8560 		case IEEE80211_SMPS_DYNAMIC:
8561 			smps = WMI_PEER_SMPS_DYNAMIC;
8562 			break;
8563 		case IEEE80211_SMPS_NUM_MODES:
8564 			ath10k_warn(ar, "Invalid smps %d in sta rc update for %pM\n",
8565 				    sta->smps_mode, sta->addr);
8566 			smps = WMI_PEER_SMPS_PS_NONE;
8567 			break;
8568 		}
8569 
8570 		arsta->smps = smps;
8571 	}
8572 
8573 	arsta->changed |= changed;
8574 
8575 	spin_unlock_bh(&ar->data_lock);
8576 
8577 	ieee80211_queue_work(hw, &arsta->update_wk);
8578 }
8579 
8580 static void ath10k_offset_tsf(struct ieee80211_hw *hw,
8581 			      struct ieee80211_vif *vif, s64 tsf_offset)
8582 {
8583 	struct ath10k *ar = hw->priv;
8584 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
8585 	u32 offset, vdev_param;
8586 	int ret;
8587 
8588 	if (tsf_offset < 0) {
8589 		vdev_param = ar->wmi.vdev_param->dec_tsf;
8590 		offset = -tsf_offset;
8591 	} else {
8592 		vdev_param = ar->wmi.vdev_param->inc_tsf;
8593 		offset = tsf_offset;
8594 	}
8595 
8596 	ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id,
8597 					vdev_param, offset);
8598 
8599 	if (ret && ret != -EOPNOTSUPP)
8600 		ath10k_warn(ar, "failed to set tsf offset %d cmd %d: %d\n",
8601 			    offset, vdev_param, ret);
8602 }
8603 
8604 static int ath10k_ampdu_action(struct ieee80211_hw *hw,
8605 			       struct ieee80211_vif *vif,
8606 			       struct ieee80211_ampdu_params *params)
8607 {
8608 	struct ath10k *ar = hw->priv;
8609 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
8610 	struct ieee80211_sta *sta = params->sta;
8611 	enum ieee80211_ampdu_mlme_action action = params->action;
8612 	u16 tid = params->tid;
8613 
8614 	ath10k_dbg(ar, ATH10K_DBG_MAC, "mac ampdu vdev_id %i sta %pM tid %u action %d\n",
8615 		   arvif->vdev_id, sta->addr, tid, action);
8616 
8617 	switch (action) {
8618 	case IEEE80211_AMPDU_RX_START:
8619 	case IEEE80211_AMPDU_RX_STOP:
8620 		/* HTT AddBa/DelBa events trigger mac80211 Rx BA session
8621 		 * creation/removal. Do we need to verify this?
8622 		 */
8623 		return 0;
8624 	case IEEE80211_AMPDU_TX_START:
8625 	case IEEE80211_AMPDU_TX_STOP_CONT:
8626 	case IEEE80211_AMPDU_TX_STOP_FLUSH:
8627 	case IEEE80211_AMPDU_TX_STOP_FLUSH_CONT:
8628 	case IEEE80211_AMPDU_TX_OPERATIONAL:
8629 		/* Firmware offloads Tx aggregation entirely so deny mac80211
8630 		 * Tx aggregation requests.
8631 		 */
8632 		return -EOPNOTSUPP;
8633 	}
8634 
8635 	return -EINVAL;
8636 }
8637 
8638 static void
8639 ath10k_mac_update_rx_channel(struct ath10k *ar,
8640 			     struct ieee80211_chanctx_conf *ctx,
8641 			     struct ieee80211_vif_chanctx_switch *vifs,
8642 			     int n_vifs)
8643 {
8644 	struct cfg80211_chan_def *def = NULL;
8645 
8646 	/* Both locks are required because ar->rx_channel is modified. This
8647 	 * allows readers to hold either lock.
8648 	 */
8649 	lockdep_assert_held(&ar->conf_mutex);
8650 	lockdep_assert_held(&ar->data_lock);
8651 
8652 	WARN_ON(ctx && vifs);
8653 	WARN_ON(vifs && !n_vifs);
8654 
8655 	/* FIXME: Sort of an optimization and a workaround. Peers and vifs are
8656 	 * on a linked list now. Doing a lookup peer -> vif -> chanctx for each
8657 	 * ppdu on Rx may reduce performance on low-end systems. It should be
8658 	 * possible to make tables/hashmaps to speed the lookup up (be vary of
8659 	 * cpu data cache lines though regarding sizes) but to keep the initial
8660 	 * implementation simple and less intrusive fallback to the slow lookup
8661 	 * only for multi-channel cases. Single-channel cases will remain to
8662 	 * use the old channel derival and thus performance should not be
8663 	 * affected much.
8664 	 */
8665 	rcu_read_lock();
8666 	if (!ctx && ath10k_mac_num_chanctxs(ar) == 1) {
8667 		ieee80211_iter_chan_contexts_atomic(ar->hw,
8668 						    ath10k_mac_get_any_chandef_iter,
8669 						    &def);
8670 
8671 		if (vifs)
8672 			def = &vifs[0].new_ctx->def;
8673 
8674 		ar->rx_channel = def->chan;
8675 	} else if ((ctx && ath10k_mac_num_chanctxs(ar) == 0) ||
8676 		   (ctx && (ar->state == ATH10K_STATE_RESTARTED))) {
8677 		/* During driver restart due to firmware assert, since mac80211
8678 		 * already has valid channel context for given radio, channel
8679 		 * context iteration return num_chanctx > 0. So fix rx_channel
8680 		 * when restart is in progress.
8681 		 */
8682 		ar->rx_channel = ctx->def.chan;
8683 	} else {
8684 		ar->rx_channel = NULL;
8685 	}
8686 	rcu_read_unlock();
8687 }
8688 
8689 static void
8690 ath10k_mac_update_vif_chan(struct ath10k *ar,
8691 			   struct ieee80211_vif_chanctx_switch *vifs,
8692 			   int n_vifs)
8693 {
8694 	struct ath10k_vif *arvif;
8695 	int ret;
8696 	int i;
8697 
8698 	lockdep_assert_held(&ar->conf_mutex);
8699 
8700 	/* First stop monitor interface. Some FW versions crash if there's a
8701 	 * lone monitor interface.
8702 	 */
8703 	if (ar->monitor_started)
8704 		ath10k_monitor_stop(ar);
8705 
8706 	for (i = 0; i < n_vifs; i++) {
8707 		arvif = (void *)vifs[i].vif->drv_priv;
8708 
8709 		ath10k_dbg(ar, ATH10K_DBG_MAC,
8710 			   "mac chanctx switch vdev_id %i freq %u->%u width %d->%d\n",
8711 			   arvif->vdev_id,
8712 			   vifs[i].old_ctx->def.chan->center_freq,
8713 			   vifs[i].new_ctx->def.chan->center_freq,
8714 			   vifs[i].old_ctx->def.width,
8715 			   vifs[i].new_ctx->def.width);
8716 
8717 		if (WARN_ON(!arvif->is_started))
8718 			continue;
8719 
8720 		if (WARN_ON(!arvif->is_up))
8721 			continue;
8722 
8723 		ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id);
8724 		if (ret) {
8725 			ath10k_warn(ar, "failed to down vdev %d: %d\n",
8726 				    arvif->vdev_id, ret);
8727 			continue;
8728 		}
8729 	}
8730 
8731 	/* All relevant vdevs are downed and associated channel resources
8732 	 * should be available for the channel switch now.
8733 	 */
8734 
8735 	spin_lock_bh(&ar->data_lock);
8736 	ath10k_mac_update_rx_channel(ar, NULL, vifs, n_vifs);
8737 	spin_unlock_bh(&ar->data_lock);
8738 
8739 	for (i = 0; i < n_vifs; i++) {
8740 		arvif = (void *)vifs[i].vif->drv_priv;
8741 
8742 		if (WARN_ON(!arvif->is_started))
8743 			continue;
8744 
8745 		if (WARN_ON(!arvif->is_up))
8746 			continue;
8747 
8748 		ret = ath10k_mac_setup_bcn_tmpl(arvif);
8749 		if (ret)
8750 			ath10k_warn(ar, "failed to update bcn tmpl during csa: %d\n",
8751 				    ret);
8752 
8753 		ret = ath10k_mac_setup_prb_tmpl(arvif);
8754 		if (ret)
8755 			ath10k_warn(ar, "failed to update prb tmpl during csa: %d\n",
8756 				    ret);
8757 
8758 		ret = ath10k_vdev_restart(arvif, &vifs[i].new_ctx->def);
8759 		if (ret) {
8760 			ath10k_warn(ar, "failed to restart vdev %d: %d\n",
8761 				    arvif->vdev_id, ret);
8762 			continue;
8763 		}
8764 
8765 		ret = ath10k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid,
8766 					 arvif->bssid);
8767 		if (ret) {
8768 			ath10k_warn(ar, "failed to bring vdev up %d: %d\n",
8769 				    arvif->vdev_id, ret);
8770 			continue;
8771 		}
8772 	}
8773 
8774 	ath10k_monitor_recalc(ar);
8775 }
8776 
8777 static int
8778 ath10k_mac_op_add_chanctx(struct ieee80211_hw *hw,
8779 			  struct ieee80211_chanctx_conf *ctx)
8780 {
8781 	struct ath10k *ar = hw->priv;
8782 
8783 	ath10k_dbg(ar, ATH10K_DBG_MAC,
8784 		   "mac chanctx add freq %u width %d ptr %pK\n",
8785 		   ctx->def.chan->center_freq, ctx->def.width, ctx);
8786 
8787 	mutex_lock(&ar->conf_mutex);
8788 
8789 	spin_lock_bh(&ar->data_lock);
8790 	ath10k_mac_update_rx_channel(ar, ctx, NULL, 0);
8791 	spin_unlock_bh(&ar->data_lock);
8792 
8793 	ath10k_recalc_radar_detection(ar);
8794 	ath10k_monitor_recalc(ar);
8795 
8796 	mutex_unlock(&ar->conf_mutex);
8797 
8798 	return 0;
8799 }
8800 
8801 static void
8802 ath10k_mac_op_remove_chanctx(struct ieee80211_hw *hw,
8803 			     struct ieee80211_chanctx_conf *ctx)
8804 {
8805 	struct ath10k *ar = hw->priv;
8806 
8807 	ath10k_dbg(ar, ATH10K_DBG_MAC,
8808 		   "mac chanctx remove freq %u width %d ptr %pK\n",
8809 		   ctx->def.chan->center_freq, ctx->def.width, ctx);
8810 
8811 	mutex_lock(&ar->conf_mutex);
8812 
8813 	spin_lock_bh(&ar->data_lock);
8814 	ath10k_mac_update_rx_channel(ar, NULL, NULL, 0);
8815 	spin_unlock_bh(&ar->data_lock);
8816 
8817 	ath10k_recalc_radar_detection(ar);
8818 	ath10k_monitor_recalc(ar);
8819 
8820 	mutex_unlock(&ar->conf_mutex);
8821 }
8822 
8823 struct ath10k_mac_change_chanctx_arg {
8824 	struct ieee80211_chanctx_conf *ctx;
8825 	struct ieee80211_vif_chanctx_switch *vifs;
8826 	int n_vifs;
8827 	int next_vif;
8828 };
8829 
8830 static void
8831 ath10k_mac_change_chanctx_cnt_iter(void *data, u8 *mac,
8832 				   struct ieee80211_vif *vif)
8833 {
8834 	struct ath10k_mac_change_chanctx_arg *arg = data;
8835 
8836 	if (rcu_access_pointer(vif->bss_conf.chanctx_conf) != arg->ctx)
8837 		return;
8838 
8839 	arg->n_vifs++;
8840 }
8841 
8842 static void
8843 ath10k_mac_change_chanctx_fill_iter(void *data, u8 *mac,
8844 				    struct ieee80211_vif *vif)
8845 {
8846 	struct ath10k_mac_change_chanctx_arg *arg = data;
8847 	struct ieee80211_chanctx_conf *ctx;
8848 
8849 	ctx = rcu_access_pointer(vif->bss_conf.chanctx_conf);
8850 	if (ctx != arg->ctx)
8851 		return;
8852 
8853 	if (WARN_ON(arg->next_vif == arg->n_vifs))
8854 		return;
8855 
8856 	arg->vifs[arg->next_vif].vif = vif;
8857 	arg->vifs[arg->next_vif].old_ctx = ctx;
8858 	arg->vifs[arg->next_vif].new_ctx = ctx;
8859 	arg->next_vif++;
8860 }
8861 
8862 static void
8863 ath10k_mac_op_change_chanctx(struct ieee80211_hw *hw,
8864 			     struct ieee80211_chanctx_conf *ctx,
8865 			     u32 changed)
8866 {
8867 	struct ath10k *ar = hw->priv;
8868 	struct ath10k_mac_change_chanctx_arg arg = { .ctx = ctx };
8869 
8870 	mutex_lock(&ar->conf_mutex);
8871 
8872 	ath10k_dbg(ar, ATH10K_DBG_MAC,
8873 		   "mac chanctx change freq %u width %d ptr %pK changed %x\n",
8874 		   ctx->def.chan->center_freq, ctx->def.width, ctx, changed);
8875 
8876 	/* This shouldn't really happen because channel switching should use
8877 	 * switch_vif_chanctx().
8878 	 */
8879 	if (WARN_ON(changed & IEEE80211_CHANCTX_CHANGE_CHANNEL))
8880 		goto unlock;
8881 
8882 	if (changed & IEEE80211_CHANCTX_CHANGE_WIDTH) {
8883 		ieee80211_iterate_active_interfaces_atomic(
8884 					hw,
8885 					ATH10K_ITER_NORMAL_FLAGS,
8886 					ath10k_mac_change_chanctx_cnt_iter,
8887 					&arg);
8888 		if (arg.n_vifs == 0)
8889 			goto radar;
8890 
8891 		arg.vifs = kcalloc(arg.n_vifs, sizeof(arg.vifs[0]),
8892 				   GFP_KERNEL);
8893 		if (!arg.vifs)
8894 			goto radar;
8895 
8896 		ieee80211_iterate_active_interfaces_atomic(
8897 					hw,
8898 					ATH10K_ITER_NORMAL_FLAGS,
8899 					ath10k_mac_change_chanctx_fill_iter,
8900 					&arg);
8901 		ath10k_mac_update_vif_chan(ar, arg.vifs, arg.n_vifs);
8902 		kfree(arg.vifs);
8903 	}
8904 
8905 radar:
8906 	ath10k_recalc_radar_detection(ar);
8907 
8908 	/* FIXME: How to configure Rx chains properly? */
8909 
8910 	/* No other actions are actually necessary. Firmware maintains channel
8911 	 * definitions per vdev internally and there's no host-side channel
8912 	 * context abstraction to configure, e.g. channel width.
8913 	 */
8914 
8915 unlock:
8916 	mutex_unlock(&ar->conf_mutex);
8917 }
8918 
8919 static int
8920 ath10k_mac_op_assign_vif_chanctx(struct ieee80211_hw *hw,
8921 				 struct ieee80211_vif *vif,
8922 				 unsigned int link_id,
8923 				 struct ieee80211_chanctx_conf *ctx)
8924 {
8925 	struct ath10k *ar = hw->priv;
8926 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
8927 	int ret;
8928 
8929 	mutex_lock(&ar->conf_mutex);
8930 
8931 	ath10k_dbg(ar, ATH10K_DBG_MAC,
8932 		   "mac chanctx assign ptr %pK vdev_id %i\n",
8933 		   ctx, arvif->vdev_id);
8934 
8935 	if (WARN_ON(arvif->is_started)) {
8936 		mutex_unlock(&ar->conf_mutex);
8937 		return -EBUSY;
8938 	}
8939 
8940 	ret = ath10k_vdev_start(arvif, &ctx->def);
8941 	if (ret) {
8942 		ath10k_warn(ar, "failed to start vdev %i addr %pM on freq %d: %d\n",
8943 			    arvif->vdev_id, vif->addr,
8944 			    ctx->def.chan->center_freq, ret);
8945 		goto err;
8946 	}
8947 
8948 	arvif->is_started = true;
8949 
8950 	ret = ath10k_mac_vif_setup_ps(arvif);
8951 	if (ret) {
8952 		ath10k_warn(ar, "failed to update vdev %i ps: %d\n",
8953 			    arvif->vdev_id, ret);
8954 		goto err_stop;
8955 	}
8956 
8957 	if (vif->type == NL80211_IFTYPE_MONITOR) {
8958 		ret = ath10k_wmi_vdev_up(ar, arvif->vdev_id, 0, vif->addr);
8959 		if (ret) {
8960 			ath10k_warn(ar, "failed to up monitor vdev %i: %d\n",
8961 				    arvif->vdev_id, ret);
8962 			goto err_stop;
8963 		}
8964 
8965 		arvif->is_up = true;
8966 	}
8967 
8968 	if (ath10k_mac_can_set_cts_prot(arvif)) {
8969 		ret = ath10k_mac_set_cts_prot(arvif);
8970 		if (ret)
8971 			ath10k_warn(ar, "failed to set cts protection for vdev %d: %d\n",
8972 				    arvif->vdev_id, ret);
8973 	}
8974 
8975 	if (ath10k_peer_stats_enabled(ar) &&
8976 	    ar->hw_params.tx_stats_over_pktlog) {
8977 		ar->pktlog_filter |= ATH10K_PKTLOG_PEER_STATS;
8978 		ret = ath10k_wmi_pdev_pktlog_enable(ar,
8979 						    ar->pktlog_filter);
8980 		if (ret) {
8981 			ath10k_warn(ar, "failed to enable pktlog %d\n", ret);
8982 			goto err_stop;
8983 		}
8984 	}
8985 
8986 	mutex_unlock(&ar->conf_mutex);
8987 	return 0;
8988 
8989 err_stop:
8990 	ath10k_vdev_stop(arvif);
8991 	arvif->is_started = false;
8992 	ath10k_mac_vif_setup_ps(arvif);
8993 
8994 err:
8995 	mutex_unlock(&ar->conf_mutex);
8996 	return ret;
8997 }
8998 
8999 static void
9000 ath10k_mac_op_unassign_vif_chanctx(struct ieee80211_hw *hw,
9001 				   struct ieee80211_vif *vif,
9002 				   unsigned int link_id,
9003 				   struct ieee80211_chanctx_conf *ctx)
9004 {
9005 	struct ath10k *ar = hw->priv;
9006 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
9007 	int ret;
9008 
9009 	mutex_lock(&ar->conf_mutex);
9010 
9011 	ath10k_dbg(ar, ATH10K_DBG_MAC,
9012 		   "mac chanctx unassign ptr %pK vdev_id %i\n",
9013 		   ctx, arvif->vdev_id);
9014 
9015 	WARN_ON(!arvif->is_started);
9016 
9017 	if (vif->type == NL80211_IFTYPE_MONITOR) {
9018 		WARN_ON(!arvif->is_up);
9019 
9020 		ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id);
9021 		if (ret)
9022 			ath10k_warn(ar, "failed to down monitor vdev %i: %d\n",
9023 				    arvif->vdev_id, ret);
9024 
9025 		arvif->is_up = false;
9026 	}
9027 
9028 	ret = ath10k_vdev_stop(arvif);
9029 	if (ret)
9030 		ath10k_warn(ar, "failed to stop vdev %i: %d\n",
9031 			    arvif->vdev_id, ret);
9032 
9033 	arvif->is_started = false;
9034 
9035 	mutex_unlock(&ar->conf_mutex);
9036 }
9037 
9038 static int
9039 ath10k_mac_op_switch_vif_chanctx(struct ieee80211_hw *hw,
9040 				 struct ieee80211_vif_chanctx_switch *vifs,
9041 				 int n_vifs,
9042 				 enum ieee80211_chanctx_switch_mode mode)
9043 {
9044 	struct ath10k *ar = hw->priv;
9045 
9046 	mutex_lock(&ar->conf_mutex);
9047 
9048 	ath10k_dbg(ar, ATH10K_DBG_MAC,
9049 		   "mac chanctx switch n_vifs %d mode %d\n",
9050 		   n_vifs, mode);
9051 	ath10k_mac_update_vif_chan(ar, vifs, n_vifs);
9052 
9053 	mutex_unlock(&ar->conf_mutex);
9054 	return 0;
9055 }
9056 
9057 static void ath10k_mac_op_sta_pre_rcu_remove(struct ieee80211_hw *hw,
9058 					     struct ieee80211_vif *vif,
9059 					     struct ieee80211_sta *sta)
9060 {
9061 	struct ath10k *ar;
9062 	struct ath10k_peer *peer;
9063 
9064 	ar = hw->priv;
9065 
9066 	list_for_each_entry(peer, &ar->peers, list)
9067 		if (peer->sta == sta)
9068 			peer->removed = true;
9069 }
9070 
9071 /* HT MCS parameters with Nss = 1 */
9072 static const struct ath10k_index_ht_data_rate_type supported_ht_mcs_rate_nss1[] = {
9073 	/* MCS  L20   L40   S20  S40 */
9074 	{0,  { 65,  135,  72,  150} },
9075 	{1,  { 130, 270,  144, 300} },
9076 	{2,  { 195, 405,  217, 450} },
9077 	{3,  { 260, 540,  289, 600} },
9078 	{4,  { 390, 810,  433, 900} },
9079 	{5,  { 520, 1080, 578, 1200} },
9080 	{6,  { 585, 1215, 650, 1350} },
9081 	{7,  { 650, 1350, 722, 1500} }
9082 };
9083 
9084 /* HT MCS parameters with Nss = 2 */
9085 static const struct ath10k_index_ht_data_rate_type supported_ht_mcs_rate_nss2[] = {
9086 	/* MCS  L20    L40   S20   S40 */
9087 	{0,  {130,  270,  144,  300} },
9088 	{1,  {260,  540,  289,  600} },
9089 	{2,  {390,  810,  433,  900} },
9090 	{3,  {520,  1080, 578,  1200} },
9091 	{4,  {780,  1620, 867,  1800} },
9092 	{5,  {1040, 2160, 1156, 2400} },
9093 	{6,  {1170, 2430, 1300, 2700} },
9094 	{7,  {1300, 2700, 1444, 3000} }
9095 };
9096 
9097 /* MCS parameters with Nss = 1 */
9098 static const struct ath10k_index_vht_data_rate_type supported_vht_mcs_rate_nss1[] = {
9099 	/* MCS  L80    S80     L40   S40    L20   S20 */
9100 	{0,  {293,  325},  {135,  150},  {65,   72} },
9101 	{1,  {585,  650},  {270,  300},  {130,  144} },
9102 	{2,  {878,  975},  {405,  450},  {195,  217} },
9103 	{3,  {1170, 1300}, {540,  600},  {260,  289} },
9104 	{4,  {1755, 1950}, {810,  900},  {390,  433} },
9105 	{5,  {2340, 2600}, {1080, 1200}, {520,  578} },
9106 	{6,  {2633, 2925}, {1215, 1350}, {585,  650} },
9107 	{7,  {2925, 3250}, {1350, 1500}, {650,  722} },
9108 	{8,  {3510, 3900}, {1620, 1800}, {780,  867} },
9109 	{9,  {3900, 4333}, {1800, 2000}, {780,  867} }
9110 };
9111 
9112 /*MCS parameters with Nss = 2 */
9113 static const struct ath10k_index_vht_data_rate_type supported_vht_mcs_rate_nss2[] = {
9114 	/* MCS  L80    S80     L40   S40    L20   S20 */
9115 	{0,  {585,  650},  {270,  300},  {130,  144} },
9116 	{1,  {1170, 1300}, {540,  600},  {260,  289} },
9117 	{2,  {1755, 1950}, {810,  900},  {390,  433} },
9118 	{3,  {2340, 2600}, {1080, 1200}, {520,  578} },
9119 	{4,  {3510, 3900}, {1620, 1800}, {780,  867} },
9120 	{5,  {4680, 5200}, {2160, 2400}, {1040, 1156} },
9121 	{6,  {5265, 5850}, {2430, 2700}, {1170, 1300} },
9122 	{7,  {5850, 6500}, {2700, 3000}, {1300, 1444} },
9123 	{8,  {7020, 7800}, {3240, 3600}, {1560, 1733} },
9124 	{9,  {7800, 8667}, {3600, 4000}, {1560, 1733} }
9125 };
9126 
9127 static void ath10k_mac_get_rate_flags_ht(struct ath10k *ar, u32 rate, u8 nss, u8 mcs,
9128 					 u8 *flags, u8 *bw)
9129 {
9130 	struct ath10k_index_ht_data_rate_type *mcs_rate;
9131 	u8 index;
9132 	size_t len_nss1 = ARRAY_SIZE(supported_ht_mcs_rate_nss1);
9133 	size_t len_nss2 = ARRAY_SIZE(supported_ht_mcs_rate_nss2);
9134 
9135 	if (mcs >= (len_nss1 + len_nss2)) {
9136 		ath10k_warn(ar, "not supported mcs %d in current rate table", mcs);
9137 		return;
9138 	}
9139 
9140 	mcs_rate = (struct ath10k_index_ht_data_rate_type *)
9141 		   ((nss == 1) ? &supported_ht_mcs_rate_nss1 :
9142 		   &supported_ht_mcs_rate_nss2);
9143 
9144 	if (mcs >= len_nss1)
9145 		index = mcs - len_nss1;
9146 	else
9147 		index = mcs;
9148 
9149 	if (rate == mcs_rate[index].supported_rate[0]) {
9150 		*bw = RATE_INFO_BW_20;
9151 	} else if (rate == mcs_rate[index].supported_rate[1]) {
9152 		*bw |= RATE_INFO_BW_40;
9153 	} else if (rate == mcs_rate[index].supported_rate[2]) {
9154 		*bw |= RATE_INFO_BW_20;
9155 		*flags |= RATE_INFO_FLAGS_SHORT_GI;
9156 	} else if (rate == mcs_rate[index].supported_rate[3]) {
9157 		*bw |= RATE_INFO_BW_40;
9158 		*flags |= RATE_INFO_FLAGS_SHORT_GI;
9159 	} else {
9160 		ath10k_warn(ar, "invalid ht params rate %d 100kbps nss %d mcs %d",
9161 			    rate, nss, mcs);
9162 	}
9163 }
9164 
9165 static void ath10k_mac_get_rate_flags_vht(struct ath10k *ar, u32 rate, u8 nss, u8 mcs,
9166 					  u8 *flags, u8 *bw)
9167 {
9168 	struct ath10k_index_vht_data_rate_type *mcs_rate;
9169 
9170 	mcs_rate = (struct ath10k_index_vht_data_rate_type *)
9171 		   ((nss == 1) ? &supported_vht_mcs_rate_nss1 :
9172 		   &supported_vht_mcs_rate_nss2);
9173 
9174 	if (rate == mcs_rate[mcs].supported_VHT80_rate[0]) {
9175 		*bw = RATE_INFO_BW_80;
9176 	} else if (rate == mcs_rate[mcs].supported_VHT80_rate[1]) {
9177 		*bw = RATE_INFO_BW_80;
9178 		*flags |= RATE_INFO_FLAGS_SHORT_GI;
9179 	} else if (rate == mcs_rate[mcs].supported_VHT40_rate[0]) {
9180 		*bw = RATE_INFO_BW_40;
9181 	} else if (rate == mcs_rate[mcs].supported_VHT40_rate[1]) {
9182 		*bw = RATE_INFO_BW_40;
9183 		*flags |= RATE_INFO_FLAGS_SHORT_GI;
9184 	} else if (rate == mcs_rate[mcs].supported_VHT20_rate[0]) {
9185 		*bw = RATE_INFO_BW_20;
9186 	} else if (rate == mcs_rate[mcs].supported_VHT20_rate[1]) {
9187 		*bw = RATE_INFO_BW_20;
9188 		*flags |= RATE_INFO_FLAGS_SHORT_GI;
9189 	} else {
9190 		ath10k_warn(ar, "invalid vht params rate %d 100kbps nss %d mcs %d",
9191 			    rate, nss, mcs);
9192 	}
9193 }
9194 
9195 static void ath10k_mac_get_rate_flags(struct ath10k *ar, u32 rate,
9196 				      enum ath10k_phy_mode mode, u8 nss, u8 mcs,
9197 				      u8 *flags, u8 *bw)
9198 {
9199 	if (mode == ATH10K_PHY_MODE_HT) {
9200 		*flags = RATE_INFO_FLAGS_MCS;
9201 		ath10k_mac_get_rate_flags_ht(ar, rate, nss, mcs, flags, bw);
9202 	} else if (mode == ATH10K_PHY_MODE_VHT) {
9203 		*flags = RATE_INFO_FLAGS_VHT_MCS;
9204 		ath10k_mac_get_rate_flags_vht(ar, rate, nss, mcs, flags, bw);
9205 	}
9206 }
9207 
9208 static void ath10k_mac_parse_bitrate(struct ath10k *ar, u32 rate_code,
9209 				     u32 bitrate_kbps, struct rate_info *rate)
9210 {
9211 	enum ath10k_phy_mode mode = ATH10K_PHY_MODE_LEGACY;
9212 	enum wmi_rate_preamble preamble = WMI_TLV_GET_HW_RC_PREAM_V1(rate_code);
9213 	u8 nss = WMI_TLV_GET_HW_RC_NSS_V1(rate_code) + 1;
9214 	u8 mcs = WMI_TLV_GET_HW_RC_RATE_V1(rate_code);
9215 	u8 flags = 0, bw = 0;
9216 
9217 	ath10k_dbg(ar, ATH10K_DBG_MAC, "mac parse rate code 0x%x bitrate %d kbps\n",
9218 		   rate_code, bitrate_kbps);
9219 
9220 	if (preamble == WMI_RATE_PREAMBLE_HT)
9221 		mode = ATH10K_PHY_MODE_HT;
9222 	else if (preamble == WMI_RATE_PREAMBLE_VHT)
9223 		mode = ATH10K_PHY_MODE_VHT;
9224 
9225 	ath10k_mac_get_rate_flags(ar, bitrate_kbps / 100, mode, nss, mcs, &flags, &bw);
9226 
9227 	ath10k_dbg(ar, ATH10K_DBG_MAC,
9228 		   "mac parse bitrate preamble %d mode %d nss %d mcs %d flags %x bw %d\n",
9229 		   preamble, mode, nss, mcs, flags, bw);
9230 
9231 	rate->flags = flags;
9232 	rate->bw = bw;
9233 	rate->legacy = bitrate_kbps / 100;
9234 	rate->nss = nss;
9235 	rate->mcs = mcs;
9236 }
9237 
9238 static void ath10k_mac_sta_get_peer_stats_info(struct ath10k *ar,
9239 					       struct ieee80211_sta *sta,
9240 					       struct station_info *sinfo)
9241 {
9242 	struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
9243 	struct ath10k_peer *peer;
9244 	unsigned long time_left;
9245 	int ret;
9246 
9247 	if (!(ar->hw_params.supports_peer_stats_info &&
9248 	      arsta->arvif->vdev_type == WMI_VDEV_TYPE_STA))
9249 		return;
9250 
9251 	spin_lock_bh(&ar->data_lock);
9252 	peer = ath10k_peer_find(ar, arsta->arvif->vdev_id, sta->addr);
9253 	spin_unlock_bh(&ar->data_lock);
9254 	if (!peer)
9255 		return;
9256 
9257 	reinit_completion(&ar->peer_stats_info_complete);
9258 
9259 	ret = ath10k_wmi_request_peer_stats_info(ar,
9260 						 arsta->arvif->vdev_id,
9261 						 WMI_REQUEST_ONE_PEER_STATS_INFO,
9262 						 arsta->arvif->bssid,
9263 						 0);
9264 	if (ret && ret != -EOPNOTSUPP) {
9265 		ath10k_warn(ar, "could not request peer stats info: %d\n", ret);
9266 		return;
9267 	}
9268 
9269 	time_left = wait_for_completion_timeout(&ar->peer_stats_info_complete, 3 * HZ);
9270 	if (time_left == 0) {
9271 		ath10k_warn(ar, "timed out waiting peer stats info\n");
9272 		return;
9273 	}
9274 
9275 	if (arsta->rx_rate_code != 0 && arsta->rx_bitrate_kbps != 0) {
9276 		ath10k_mac_parse_bitrate(ar, arsta->rx_rate_code,
9277 					 arsta->rx_bitrate_kbps,
9278 					 &sinfo->rxrate);
9279 
9280 		sinfo->filled |= BIT_ULL(NL80211_STA_INFO_RX_BITRATE);
9281 		arsta->rx_rate_code = 0;
9282 		arsta->rx_bitrate_kbps = 0;
9283 	}
9284 
9285 	if (arsta->tx_rate_code != 0 && arsta->tx_bitrate_kbps != 0) {
9286 		ath10k_mac_parse_bitrate(ar, arsta->tx_rate_code,
9287 					 arsta->tx_bitrate_kbps,
9288 					 &sinfo->txrate);
9289 
9290 		sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_BITRATE);
9291 		arsta->tx_rate_code = 0;
9292 		arsta->tx_bitrate_kbps = 0;
9293 	}
9294 }
9295 
9296 static void ath10k_sta_statistics(struct ieee80211_hw *hw,
9297 				  struct ieee80211_vif *vif,
9298 				  struct ieee80211_sta *sta,
9299 				  struct station_info *sinfo)
9300 {
9301 	struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
9302 	struct ath10k *ar = arsta->arvif->ar;
9303 
9304 	if (!ath10k_peer_stats_enabled(ar))
9305 		return;
9306 
9307 	mutex_lock(&ar->conf_mutex);
9308 	ath10k_debug_fw_stats_request(ar);
9309 	mutex_unlock(&ar->conf_mutex);
9310 
9311 	sinfo->rx_duration = arsta->rx_duration;
9312 	sinfo->filled |= BIT_ULL(NL80211_STA_INFO_RX_DURATION);
9313 
9314 	if (arsta->txrate.legacy || arsta->txrate.nss) {
9315 		if (arsta->txrate.legacy) {
9316 			sinfo->txrate.legacy = arsta->txrate.legacy;
9317 		} else {
9318 			sinfo->txrate.mcs = arsta->txrate.mcs;
9319 			sinfo->txrate.nss = arsta->txrate.nss;
9320 			sinfo->txrate.bw = arsta->txrate.bw;
9321 		}
9322 		sinfo->txrate.flags = arsta->txrate.flags;
9323 		sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_BITRATE);
9324 	}
9325 
9326 	if (ar->htt.disable_tx_comp) {
9327 		sinfo->tx_failed = arsta->tx_failed;
9328 		sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_FAILED);
9329 	}
9330 
9331 	sinfo->tx_retries = arsta->tx_retries;
9332 	sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_RETRIES);
9333 
9334 	ath10k_mac_sta_get_peer_stats_info(ar, sta, sinfo);
9335 }
9336 
9337 static int ath10k_mac_op_set_tid_config(struct ieee80211_hw *hw,
9338 					struct ieee80211_vif *vif,
9339 					struct ieee80211_sta *sta,
9340 					struct cfg80211_tid_config *tid_config)
9341 {
9342 	struct ath10k *ar = hw->priv;
9343 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
9344 	struct ath10k_mac_iter_tid_conf_data data = {};
9345 	struct wmi_per_peer_per_tid_cfg_arg arg = {};
9346 	int ret, i;
9347 
9348 	mutex_lock(&ar->conf_mutex);
9349 	arg.vdev_id = arvif->vdev_id;
9350 
9351 	arvif->tids_rst = 0;
9352 	memset(arvif->tid_conf_changed, 0, sizeof(arvif->tid_conf_changed));
9353 
9354 	for (i = 0; i < tid_config->n_tid_conf; i++) {
9355 		ret = ath10k_mac_parse_tid_config(ar, sta, vif,
9356 						  &tid_config->tid_conf[i],
9357 						  &arg);
9358 		if (ret)
9359 			goto exit;
9360 	}
9361 
9362 	ret = 0;
9363 
9364 	if (sta)
9365 		goto exit;
9366 
9367 	arvif->tids_rst = 0;
9368 	data.curr_vif = vif;
9369 	data.ar = ar;
9370 
9371 	ieee80211_iterate_stations_atomic(hw, ath10k_mac_vif_stations_tid_conf,
9372 					  &data);
9373 
9374 exit:
9375 	mutex_unlock(&ar->conf_mutex);
9376 	return ret;
9377 }
9378 
9379 static int ath10k_mac_op_reset_tid_config(struct ieee80211_hw *hw,
9380 					  struct ieee80211_vif *vif,
9381 					  struct ieee80211_sta *sta,
9382 					  u8 tids)
9383 {
9384 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
9385 	struct ath10k_mac_iter_tid_conf_data data = {};
9386 	struct ath10k *ar = hw->priv;
9387 	int ret = 0;
9388 
9389 	mutex_lock(&ar->conf_mutex);
9390 
9391 	if (sta) {
9392 		arvif->tids_rst = 0;
9393 		ret = ath10k_mac_reset_tid_config(ar, sta, arvif, tids);
9394 		goto exit;
9395 	}
9396 
9397 	arvif->tids_rst = tids;
9398 	data.curr_vif = vif;
9399 	data.ar = ar;
9400 	ieee80211_iterate_stations_atomic(hw, ath10k_mac_vif_stations_tid_conf,
9401 					  &data);
9402 
9403 exit:
9404 	mutex_unlock(&ar->conf_mutex);
9405 	return ret;
9406 }
9407 
9408 static const struct ieee80211_ops ath10k_ops = {
9409 	.tx				= ath10k_mac_op_tx,
9410 	.wake_tx_queue			= ath10k_mac_op_wake_tx_queue,
9411 	.start				= ath10k_start,
9412 	.stop				= ath10k_stop,
9413 	.config				= ath10k_config,
9414 	.add_interface			= ath10k_add_interface,
9415 	.update_vif_offload		= ath10k_update_vif_offload,
9416 	.remove_interface		= ath10k_remove_interface,
9417 	.configure_filter		= ath10k_configure_filter,
9418 	.bss_info_changed		= ath10k_bss_info_changed,
9419 	.set_coverage_class		= ath10k_mac_op_set_coverage_class,
9420 	.hw_scan			= ath10k_hw_scan,
9421 	.cancel_hw_scan			= ath10k_cancel_hw_scan,
9422 	.set_key			= ath10k_set_key,
9423 	.set_default_unicast_key        = ath10k_set_default_unicast_key,
9424 	.sta_state			= ath10k_sta_state,
9425 	.sta_set_txpwr			= ath10k_sta_set_txpwr,
9426 	.conf_tx			= ath10k_conf_tx,
9427 	.remain_on_channel		= ath10k_remain_on_channel,
9428 	.cancel_remain_on_channel	= ath10k_cancel_remain_on_channel,
9429 	.set_rts_threshold		= ath10k_set_rts_threshold,
9430 	.set_frag_threshold		= ath10k_mac_op_set_frag_threshold,
9431 	.flush				= ath10k_flush,
9432 	.tx_last_beacon			= ath10k_tx_last_beacon,
9433 	.set_antenna			= ath10k_set_antenna,
9434 	.get_antenna			= ath10k_get_antenna,
9435 	.reconfig_complete		= ath10k_reconfig_complete,
9436 	.get_survey			= ath10k_get_survey,
9437 	.set_bitrate_mask		= ath10k_mac_op_set_bitrate_mask,
9438 	.sta_rc_update			= ath10k_sta_rc_update,
9439 	.offset_tsf			= ath10k_offset_tsf,
9440 	.ampdu_action			= ath10k_ampdu_action,
9441 	.get_et_sset_count		= ath10k_debug_get_et_sset_count,
9442 	.get_et_stats			= ath10k_debug_get_et_stats,
9443 	.get_et_strings			= ath10k_debug_get_et_strings,
9444 	.add_chanctx			= ath10k_mac_op_add_chanctx,
9445 	.remove_chanctx			= ath10k_mac_op_remove_chanctx,
9446 	.change_chanctx			= ath10k_mac_op_change_chanctx,
9447 	.assign_vif_chanctx		= ath10k_mac_op_assign_vif_chanctx,
9448 	.unassign_vif_chanctx		= ath10k_mac_op_unassign_vif_chanctx,
9449 	.switch_vif_chanctx		= ath10k_mac_op_switch_vif_chanctx,
9450 	.sta_pre_rcu_remove		= ath10k_mac_op_sta_pre_rcu_remove,
9451 	.sta_statistics			= ath10k_sta_statistics,
9452 	.set_tid_config			= ath10k_mac_op_set_tid_config,
9453 	.reset_tid_config		= ath10k_mac_op_reset_tid_config,
9454 
9455 	CFG80211_TESTMODE_CMD(ath10k_tm_cmd)
9456 
9457 #ifdef CONFIG_PM
9458 	.suspend			= ath10k_wow_op_suspend,
9459 	.resume				= ath10k_wow_op_resume,
9460 	.set_wakeup			= ath10k_wow_op_set_wakeup,
9461 #endif
9462 #ifdef CONFIG_MAC80211_DEBUGFS
9463 	.sta_add_debugfs		= ath10k_sta_add_debugfs,
9464 #endif
9465 	.set_sar_specs			= ath10k_mac_set_sar_specs,
9466 };
9467 
9468 #define CHAN2G(_channel, _freq, _flags) { \
9469 	.band			= NL80211_BAND_2GHZ, \
9470 	.hw_value		= (_channel), \
9471 	.center_freq		= (_freq), \
9472 	.flags			= (_flags), \
9473 	.max_antenna_gain	= 0, \
9474 	.max_power		= 30, \
9475 }
9476 
9477 #define CHAN5G(_channel, _freq, _flags) { \
9478 	.band			= NL80211_BAND_5GHZ, \
9479 	.hw_value		= (_channel), \
9480 	.center_freq		= (_freq), \
9481 	.flags			= (_flags), \
9482 	.max_antenna_gain	= 0, \
9483 	.max_power		= 30, \
9484 }
9485 
9486 static const struct ieee80211_channel ath10k_2ghz_channels[] = {
9487 	CHAN2G(1, 2412, 0),
9488 	CHAN2G(2, 2417, 0),
9489 	CHAN2G(3, 2422, 0),
9490 	CHAN2G(4, 2427, 0),
9491 	CHAN2G(5, 2432, 0),
9492 	CHAN2G(6, 2437, 0),
9493 	CHAN2G(7, 2442, 0),
9494 	CHAN2G(8, 2447, 0),
9495 	CHAN2G(9, 2452, 0),
9496 	CHAN2G(10, 2457, 0),
9497 	CHAN2G(11, 2462, 0),
9498 	CHAN2G(12, 2467, 0),
9499 	CHAN2G(13, 2472, 0),
9500 	CHAN2G(14, 2484, 0),
9501 };
9502 
9503 static const struct ieee80211_channel ath10k_5ghz_channels[] = {
9504 	CHAN5G(36, 5180, 0),
9505 	CHAN5G(40, 5200, 0),
9506 	CHAN5G(44, 5220, 0),
9507 	CHAN5G(48, 5240, 0),
9508 	CHAN5G(52, 5260, 0),
9509 	CHAN5G(56, 5280, 0),
9510 	CHAN5G(60, 5300, 0),
9511 	CHAN5G(64, 5320, 0),
9512 	CHAN5G(100, 5500, 0),
9513 	CHAN5G(104, 5520, 0),
9514 	CHAN5G(108, 5540, 0),
9515 	CHAN5G(112, 5560, 0),
9516 	CHAN5G(116, 5580, 0),
9517 	CHAN5G(120, 5600, 0),
9518 	CHAN5G(124, 5620, 0),
9519 	CHAN5G(128, 5640, 0),
9520 	CHAN5G(132, 5660, 0),
9521 	CHAN5G(136, 5680, 0),
9522 	CHAN5G(140, 5700, 0),
9523 	CHAN5G(144, 5720, 0),
9524 	CHAN5G(149, 5745, 0),
9525 	CHAN5G(153, 5765, 0),
9526 	CHAN5G(157, 5785, 0),
9527 	CHAN5G(161, 5805, 0),
9528 	CHAN5G(165, 5825, 0),
9529 	CHAN5G(169, 5845, 0),
9530 	CHAN5G(173, 5865, 0),
9531 	/* If you add more, you may need to change ATH10K_MAX_5G_CHAN */
9532 	/* And you will definitely need to change ATH10K_NUM_CHANS in core.h */
9533 };
9534 
9535 struct ath10k *ath10k_mac_create(size_t priv_size)
9536 {
9537 	struct ieee80211_hw *hw;
9538 	struct ieee80211_ops *ops;
9539 	struct ath10k *ar;
9540 
9541 	ops = kmemdup(&ath10k_ops, sizeof(ath10k_ops), GFP_KERNEL);
9542 	if (!ops)
9543 		return NULL;
9544 
9545 	hw = ieee80211_alloc_hw(sizeof(struct ath10k) + priv_size, ops);
9546 	if (!hw) {
9547 		kfree(ops);
9548 		return NULL;
9549 	}
9550 
9551 	ar = hw->priv;
9552 	ar->hw = hw;
9553 	ar->ops = ops;
9554 
9555 	return ar;
9556 }
9557 
9558 void ath10k_mac_destroy(struct ath10k *ar)
9559 {
9560 	struct ieee80211_ops *ops = ar->ops;
9561 
9562 	ieee80211_free_hw(ar->hw);
9563 	kfree(ops);
9564 }
9565 
9566 static const struct ieee80211_iface_limit ath10k_if_limits[] = {
9567 	{
9568 		.max	= 8,
9569 		.types	= BIT(NL80211_IFTYPE_STATION)
9570 			| BIT(NL80211_IFTYPE_P2P_CLIENT)
9571 	},
9572 	{
9573 		.max	= 3,
9574 		.types	= BIT(NL80211_IFTYPE_P2P_GO)
9575 	},
9576 	{
9577 		.max	= 1,
9578 		.types	= BIT(NL80211_IFTYPE_P2P_DEVICE)
9579 	},
9580 	{
9581 		.max	= 7,
9582 		.types	= BIT(NL80211_IFTYPE_AP)
9583 #ifdef CONFIG_MAC80211_MESH
9584 			| BIT(NL80211_IFTYPE_MESH_POINT)
9585 #endif
9586 	},
9587 };
9588 
9589 static const struct ieee80211_iface_limit ath10k_10x_if_limits[] = {
9590 	{
9591 		.max	= 8,
9592 		.types	= BIT(NL80211_IFTYPE_AP)
9593 #ifdef CONFIG_MAC80211_MESH
9594 			| BIT(NL80211_IFTYPE_MESH_POINT)
9595 #endif
9596 	},
9597 	{
9598 		.max	= 1,
9599 		.types	= BIT(NL80211_IFTYPE_STATION)
9600 	},
9601 };
9602 
9603 static const struct ieee80211_iface_combination ath10k_if_comb[] = {
9604 	{
9605 		.limits = ath10k_if_limits,
9606 		.n_limits = ARRAY_SIZE(ath10k_if_limits),
9607 		.max_interfaces = 8,
9608 		.num_different_channels = 1,
9609 		.beacon_int_infra_match = true,
9610 	},
9611 };
9612 
9613 static const struct ieee80211_iface_combination ath10k_10x_if_comb[] = {
9614 	{
9615 		.limits = ath10k_10x_if_limits,
9616 		.n_limits = ARRAY_SIZE(ath10k_10x_if_limits),
9617 		.max_interfaces = 8,
9618 		.num_different_channels = 1,
9619 		.beacon_int_infra_match = true,
9620 		.beacon_int_min_gcd = 1,
9621 #ifdef CONFIG_ATH10K_DFS_CERTIFIED
9622 		.radar_detect_widths =	BIT(NL80211_CHAN_WIDTH_20_NOHT) |
9623 					BIT(NL80211_CHAN_WIDTH_20) |
9624 					BIT(NL80211_CHAN_WIDTH_40) |
9625 					BIT(NL80211_CHAN_WIDTH_80),
9626 #endif
9627 	},
9628 };
9629 
9630 static const struct ieee80211_iface_limit ath10k_tlv_if_limit[] = {
9631 	{
9632 		.max = 2,
9633 		.types = BIT(NL80211_IFTYPE_STATION),
9634 	},
9635 	{
9636 		.max = 2,
9637 		.types = BIT(NL80211_IFTYPE_AP) |
9638 #ifdef CONFIG_MAC80211_MESH
9639 			 BIT(NL80211_IFTYPE_MESH_POINT) |
9640 #endif
9641 			 BIT(NL80211_IFTYPE_P2P_CLIENT) |
9642 			 BIT(NL80211_IFTYPE_P2P_GO),
9643 	},
9644 	{
9645 		.max = 1,
9646 		.types = BIT(NL80211_IFTYPE_P2P_DEVICE),
9647 	},
9648 };
9649 
9650 static const struct ieee80211_iface_limit ath10k_tlv_qcs_if_limit[] = {
9651 	{
9652 		.max = 2,
9653 		.types = BIT(NL80211_IFTYPE_STATION),
9654 	},
9655 	{
9656 		.max = 2,
9657 		.types = BIT(NL80211_IFTYPE_P2P_CLIENT),
9658 	},
9659 	{
9660 		.max = 1,
9661 		.types = BIT(NL80211_IFTYPE_AP) |
9662 #ifdef CONFIG_MAC80211_MESH
9663 			 BIT(NL80211_IFTYPE_MESH_POINT) |
9664 #endif
9665 			 BIT(NL80211_IFTYPE_P2P_GO),
9666 	},
9667 	{
9668 		.max = 1,
9669 		.types = BIT(NL80211_IFTYPE_P2P_DEVICE),
9670 	},
9671 };
9672 
9673 static const struct ieee80211_iface_limit ath10k_tlv_if_limit_ibss[] = {
9674 	{
9675 		.max = 1,
9676 		.types = BIT(NL80211_IFTYPE_STATION),
9677 	},
9678 	{
9679 		.max = 1,
9680 		.types = BIT(NL80211_IFTYPE_ADHOC),
9681 	},
9682 };
9683 
9684 /* FIXME: This is not thouroughly tested. These combinations may over- or
9685  * underestimate hw/fw capabilities.
9686  */
9687 static struct ieee80211_iface_combination ath10k_tlv_if_comb[] = {
9688 	{
9689 		.limits = ath10k_tlv_if_limit,
9690 		.num_different_channels = 1,
9691 		.max_interfaces = 4,
9692 		.n_limits = ARRAY_SIZE(ath10k_tlv_if_limit),
9693 	},
9694 	{
9695 		.limits = ath10k_tlv_if_limit_ibss,
9696 		.num_different_channels = 1,
9697 		.max_interfaces = 2,
9698 		.n_limits = ARRAY_SIZE(ath10k_tlv_if_limit_ibss),
9699 	},
9700 };
9701 
9702 static struct ieee80211_iface_combination ath10k_tlv_qcs_if_comb[] = {
9703 	{
9704 		.limits = ath10k_tlv_if_limit,
9705 		.num_different_channels = 1,
9706 		.max_interfaces = 4,
9707 		.n_limits = ARRAY_SIZE(ath10k_tlv_if_limit),
9708 	},
9709 	{
9710 		.limits = ath10k_tlv_qcs_if_limit,
9711 		.num_different_channels = 2,
9712 		.max_interfaces = 4,
9713 		.n_limits = ARRAY_SIZE(ath10k_tlv_qcs_if_limit),
9714 	},
9715 	{
9716 		.limits = ath10k_tlv_if_limit_ibss,
9717 		.num_different_channels = 1,
9718 		.max_interfaces = 2,
9719 		.n_limits = ARRAY_SIZE(ath10k_tlv_if_limit_ibss),
9720 	},
9721 };
9722 
9723 static const struct ieee80211_iface_limit ath10k_10_4_if_limits[] = {
9724 	{
9725 		.max = 1,
9726 		.types = BIT(NL80211_IFTYPE_STATION),
9727 	},
9728 	{
9729 		.max	= 16,
9730 		.types	= BIT(NL80211_IFTYPE_AP)
9731 #ifdef CONFIG_MAC80211_MESH
9732 			| BIT(NL80211_IFTYPE_MESH_POINT)
9733 #endif
9734 	},
9735 };
9736 
9737 static const struct ieee80211_iface_combination ath10k_10_4_if_comb[] = {
9738 	{
9739 		.limits = ath10k_10_4_if_limits,
9740 		.n_limits = ARRAY_SIZE(ath10k_10_4_if_limits),
9741 		.max_interfaces = 16,
9742 		.num_different_channels = 1,
9743 		.beacon_int_infra_match = true,
9744 		.beacon_int_min_gcd = 1,
9745 #ifdef CONFIG_ATH10K_DFS_CERTIFIED
9746 		.radar_detect_widths =	BIT(NL80211_CHAN_WIDTH_20_NOHT) |
9747 					BIT(NL80211_CHAN_WIDTH_20) |
9748 					BIT(NL80211_CHAN_WIDTH_40) |
9749 					BIT(NL80211_CHAN_WIDTH_80) |
9750 					BIT(NL80211_CHAN_WIDTH_80P80) |
9751 					BIT(NL80211_CHAN_WIDTH_160),
9752 #endif
9753 	},
9754 };
9755 
9756 static const struct
9757 ieee80211_iface_combination ath10k_10_4_bcn_int_if_comb[] = {
9758 	{
9759 		.limits = ath10k_10_4_if_limits,
9760 		.n_limits = ARRAY_SIZE(ath10k_10_4_if_limits),
9761 		.max_interfaces = 16,
9762 		.num_different_channels = 1,
9763 		.beacon_int_infra_match = true,
9764 		.beacon_int_min_gcd = 100,
9765 #ifdef CONFIG_ATH10K_DFS_CERTIFIED
9766 		.radar_detect_widths =  BIT(NL80211_CHAN_WIDTH_20_NOHT) |
9767 					BIT(NL80211_CHAN_WIDTH_20) |
9768 					BIT(NL80211_CHAN_WIDTH_40) |
9769 					BIT(NL80211_CHAN_WIDTH_80) |
9770 					BIT(NL80211_CHAN_WIDTH_80P80) |
9771 					BIT(NL80211_CHAN_WIDTH_160),
9772 #endif
9773 	},
9774 };
9775 
9776 static void ath10k_get_arvif_iter(void *data, u8 *mac,
9777 				  struct ieee80211_vif *vif)
9778 {
9779 	struct ath10k_vif_iter *arvif_iter = data;
9780 	struct ath10k_vif *arvif = (void *)vif->drv_priv;
9781 
9782 	if (arvif->vdev_id == arvif_iter->vdev_id)
9783 		arvif_iter->arvif = arvif;
9784 }
9785 
9786 struct ath10k_vif *ath10k_get_arvif(struct ath10k *ar, u32 vdev_id)
9787 {
9788 	struct ath10k_vif_iter arvif_iter;
9789 
9790 	memset(&arvif_iter, 0, sizeof(struct ath10k_vif_iter));
9791 	arvif_iter.vdev_id = vdev_id;
9792 
9793 	ieee80211_iterate_active_interfaces_atomic(ar->hw,
9794 						   ATH10K_ITER_RESUME_FLAGS,
9795 						   ath10k_get_arvif_iter,
9796 						   &arvif_iter);
9797 	if (!arvif_iter.arvif) {
9798 		ath10k_warn(ar, "No VIF found for vdev %d\n", vdev_id);
9799 		return NULL;
9800 	}
9801 
9802 	return arvif_iter.arvif;
9803 }
9804 
9805 #define WRD_METHOD "WRDD"
9806 #define WRDD_WIFI  (0x07)
9807 
9808 static u32 ath10k_mac_wrdd_get_mcc(struct ath10k *ar, union acpi_object *wrdd)
9809 {
9810 	union acpi_object *mcc_pkg;
9811 	union acpi_object *domain_type;
9812 	union acpi_object *mcc_value;
9813 	u32 i;
9814 
9815 	if (wrdd->type != ACPI_TYPE_PACKAGE ||
9816 	    wrdd->package.count < 2 ||
9817 	    wrdd->package.elements[0].type != ACPI_TYPE_INTEGER ||
9818 	    wrdd->package.elements[0].integer.value != 0) {
9819 		ath10k_warn(ar, "ignoring malformed/unsupported wrdd structure\n");
9820 		return 0;
9821 	}
9822 
9823 	for (i = 1; i < wrdd->package.count; ++i) {
9824 		mcc_pkg = &wrdd->package.elements[i];
9825 
9826 		if (mcc_pkg->type != ACPI_TYPE_PACKAGE)
9827 			continue;
9828 		if (mcc_pkg->package.count < 2)
9829 			continue;
9830 		if (mcc_pkg->package.elements[0].type != ACPI_TYPE_INTEGER ||
9831 		    mcc_pkg->package.elements[1].type != ACPI_TYPE_INTEGER)
9832 			continue;
9833 
9834 		domain_type = &mcc_pkg->package.elements[0];
9835 		if (domain_type->integer.value != WRDD_WIFI)
9836 			continue;
9837 
9838 		mcc_value = &mcc_pkg->package.elements[1];
9839 		return mcc_value->integer.value;
9840 	}
9841 	return 0;
9842 }
9843 
9844 static int ath10k_mac_get_wrdd_regulatory(struct ath10k *ar, u16 *rd)
9845 {
9846 	acpi_handle root_handle;
9847 	acpi_handle handle;
9848 	struct acpi_buffer wrdd = {ACPI_ALLOCATE_BUFFER, NULL};
9849 	acpi_status status;
9850 	u32 alpha2_code;
9851 	char alpha2[3];
9852 
9853 	root_handle = ACPI_HANDLE(ar->dev);
9854 	if (!root_handle)
9855 		return -EOPNOTSUPP;
9856 
9857 	status = acpi_get_handle(root_handle, (acpi_string)WRD_METHOD, &handle);
9858 	if (ACPI_FAILURE(status)) {
9859 		ath10k_dbg(ar, ATH10K_DBG_BOOT,
9860 			   "failed to get wrd method %d\n", status);
9861 		return -EIO;
9862 	}
9863 
9864 	status = acpi_evaluate_object(handle, NULL, NULL, &wrdd);
9865 	if (ACPI_FAILURE(status)) {
9866 		ath10k_dbg(ar, ATH10K_DBG_BOOT,
9867 			   "failed to call wrdc %d\n", status);
9868 		return -EIO;
9869 	}
9870 
9871 	alpha2_code = ath10k_mac_wrdd_get_mcc(ar, wrdd.pointer);
9872 	kfree(wrdd.pointer);
9873 	if (!alpha2_code)
9874 		return -EIO;
9875 
9876 	alpha2[0] = (alpha2_code >> 8) & 0xff;
9877 	alpha2[1] = (alpha2_code >> 0) & 0xff;
9878 	alpha2[2] = '\0';
9879 
9880 	ath10k_dbg(ar, ATH10K_DBG_BOOT,
9881 		   "regulatory hint from WRDD (alpha2-code): %s\n", alpha2);
9882 
9883 	*rd = ath_regd_find_country_by_name(alpha2);
9884 	if (*rd == 0xffff)
9885 		return -EIO;
9886 
9887 	*rd |= COUNTRY_ERD_FLAG;
9888 	return 0;
9889 }
9890 
9891 static int ath10k_mac_init_rd(struct ath10k *ar)
9892 {
9893 	int ret;
9894 	u16 rd;
9895 
9896 	ret = ath10k_mac_get_wrdd_regulatory(ar, &rd);
9897 	if (ret) {
9898 		ath10k_dbg(ar, ATH10K_DBG_BOOT,
9899 			   "fallback to eeprom programmed regulatory settings\n");
9900 		rd = ar->hw_eeprom_rd;
9901 	}
9902 
9903 	ar->ath_common.regulatory.current_rd = rd;
9904 	return 0;
9905 }
9906 
9907 int ath10k_mac_register(struct ath10k *ar)
9908 {
9909 	static const u32 cipher_suites[] = {
9910 		WLAN_CIPHER_SUITE_WEP40,
9911 		WLAN_CIPHER_SUITE_WEP104,
9912 		WLAN_CIPHER_SUITE_TKIP,
9913 		WLAN_CIPHER_SUITE_CCMP,
9914 
9915 		/* Do not add hardware supported ciphers before this line.
9916 		 * Allow software encryption for all chips. Don't forget to
9917 		 * update n_cipher_suites below.
9918 		 */
9919 		WLAN_CIPHER_SUITE_AES_CMAC,
9920 		WLAN_CIPHER_SUITE_BIP_CMAC_256,
9921 		WLAN_CIPHER_SUITE_BIP_GMAC_128,
9922 		WLAN_CIPHER_SUITE_BIP_GMAC_256,
9923 
9924 		/* Only QCA99x0 and QCA4019 varients support GCMP-128, GCMP-256
9925 		 * and CCMP-256 in hardware.
9926 		 */
9927 		WLAN_CIPHER_SUITE_GCMP,
9928 		WLAN_CIPHER_SUITE_GCMP_256,
9929 		WLAN_CIPHER_SUITE_CCMP_256,
9930 	};
9931 	struct ieee80211_supported_band *band;
9932 	void *channels;
9933 	int ret;
9934 
9935 	if (!is_valid_ether_addr(ar->mac_addr)) {
9936 		ath10k_warn(ar, "invalid MAC address; choosing random\n");
9937 		eth_random_addr(ar->mac_addr);
9938 	}
9939 	SET_IEEE80211_PERM_ADDR(ar->hw, ar->mac_addr);
9940 
9941 	SET_IEEE80211_DEV(ar->hw, ar->dev);
9942 
9943 	BUILD_BUG_ON((ARRAY_SIZE(ath10k_2ghz_channels) +
9944 		      ARRAY_SIZE(ath10k_5ghz_channels)) !=
9945 		     ATH10K_NUM_CHANS);
9946 
9947 	if (ar->phy_capability & WHAL_WLAN_11G_CAPABILITY) {
9948 		channels = kmemdup(ath10k_2ghz_channels,
9949 				   sizeof(ath10k_2ghz_channels),
9950 				   GFP_KERNEL);
9951 		if (!channels) {
9952 			ret = -ENOMEM;
9953 			goto err_free;
9954 		}
9955 
9956 		band = &ar->mac.sbands[NL80211_BAND_2GHZ];
9957 		band->n_channels = ARRAY_SIZE(ath10k_2ghz_channels);
9958 		band->channels = channels;
9959 
9960 		if (ar->hw_params.cck_rate_map_rev2) {
9961 			band->n_bitrates = ath10k_g_rates_rev2_size;
9962 			band->bitrates = ath10k_g_rates_rev2;
9963 		} else {
9964 			band->n_bitrates = ath10k_g_rates_size;
9965 			band->bitrates = ath10k_g_rates;
9966 		}
9967 
9968 		ar->hw->wiphy->bands[NL80211_BAND_2GHZ] = band;
9969 	}
9970 
9971 	if (ar->phy_capability & WHAL_WLAN_11A_CAPABILITY) {
9972 		channels = kmemdup(ath10k_5ghz_channels,
9973 				   sizeof(ath10k_5ghz_channels),
9974 				   GFP_KERNEL);
9975 		if (!channels) {
9976 			ret = -ENOMEM;
9977 			goto err_free;
9978 		}
9979 
9980 		band = &ar->mac.sbands[NL80211_BAND_5GHZ];
9981 		band->n_channels = ARRAY_SIZE(ath10k_5ghz_channels);
9982 		band->channels = channels;
9983 		band->n_bitrates = ath10k_a_rates_size;
9984 		band->bitrates = ath10k_a_rates;
9985 		ar->hw->wiphy->bands[NL80211_BAND_5GHZ] = band;
9986 	}
9987 
9988 	wiphy_read_of_freq_limits(ar->hw->wiphy);
9989 	ath10k_mac_setup_ht_vht_cap(ar);
9990 
9991 	ar->hw->wiphy->interface_modes =
9992 		BIT(NL80211_IFTYPE_STATION) |
9993 		BIT(NL80211_IFTYPE_AP) |
9994 		BIT(NL80211_IFTYPE_MESH_POINT);
9995 
9996 	ar->hw->wiphy->available_antennas_rx = ar->cfg_rx_chainmask;
9997 	ar->hw->wiphy->available_antennas_tx = ar->cfg_tx_chainmask;
9998 
9999 	if (!test_bit(ATH10K_FW_FEATURE_NO_P2P, ar->normal_mode_fw.fw_file.fw_features))
10000 		ar->hw->wiphy->interface_modes |=
10001 			BIT(NL80211_IFTYPE_P2P_DEVICE) |
10002 			BIT(NL80211_IFTYPE_P2P_CLIENT) |
10003 			BIT(NL80211_IFTYPE_P2P_GO);
10004 
10005 	ieee80211_hw_set(ar->hw, SIGNAL_DBM);
10006 
10007 	if (!test_bit(ATH10K_FW_FEATURE_NO_PS,
10008 		      ar->running_fw->fw_file.fw_features)) {
10009 		ieee80211_hw_set(ar->hw, SUPPORTS_PS);
10010 		ieee80211_hw_set(ar->hw, SUPPORTS_DYNAMIC_PS);
10011 	}
10012 
10013 	ieee80211_hw_set(ar->hw, MFP_CAPABLE);
10014 	ieee80211_hw_set(ar->hw, REPORTS_TX_ACK_STATUS);
10015 	ieee80211_hw_set(ar->hw, HAS_RATE_CONTROL);
10016 	ieee80211_hw_set(ar->hw, AP_LINK_PS);
10017 	ieee80211_hw_set(ar->hw, SPECTRUM_MGMT);
10018 	ieee80211_hw_set(ar->hw, SUPPORT_FAST_XMIT);
10019 	ieee80211_hw_set(ar->hw, CONNECTION_MONITOR);
10020 	ieee80211_hw_set(ar->hw, SUPPORTS_PER_STA_GTK);
10021 	ieee80211_hw_set(ar->hw, WANT_MONITOR_VIF);
10022 	ieee80211_hw_set(ar->hw, CHANCTX_STA_CSA);
10023 	ieee80211_hw_set(ar->hw, QUEUE_CONTROL);
10024 	ieee80211_hw_set(ar->hw, SUPPORTS_TX_FRAG);
10025 	ieee80211_hw_set(ar->hw, REPORTS_LOW_ACK);
10026 
10027 	if (!test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags))
10028 		ieee80211_hw_set(ar->hw, SW_CRYPTO_CONTROL);
10029 
10030 	ar->hw->wiphy->features |= NL80211_FEATURE_STATIC_SMPS;
10031 	ar->hw->wiphy->flags |= WIPHY_FLAG_IBSS_RSN;
10032 
10033 	if (ar->ht_cap_info & WMI_HT_CAP_DYNAMIC_SMPS)
10034 		ar->hw->wiphy->features |= NL80211_FEATURE_DYNAMIC_SMPS;
10035 
10036 	if (ar->ht_cap_info & WMI_HT_CAP_ENABLED) {
10037 		ieee80211_hw_set(ar->hw, AMPDU_AGGREGATION);
10038 		ieee80211_hw_set(ar->hw, TX_AMPDU_SETUP_IN_HW);
10039 	}
10040 
10041 	ar->hw->wiphy->max_scan_ssids = WLAN_SCAN_PARAMS_MAX_SSID;
10042 	ar->hw->wiphy->max_scan_ie_len = WLAN_SCAN_PARAMS_MAX_IE_LEN;
10043 
10044 	if (test_bit(WMI_SERVICE_NLO, ar->wmi.svc_map)) {
10045 		ar->hw->wiphy->max_sched_scan_ssids = WMI_PNO_MAX_SUPP_NETWORKS;
10046 		ar->hw->wiphy->max_match_sets = WMI_PNO_MAX_SUPP_NETWORKS;
10047 		ar->hw->wiphy->max_sched_scan_ie_len = WMI_PNO_MAX_IE_LENGTH;
10048 		ar->hw->wiphy->max_sched_scan_plans = WMI_PNO_MAX_SCHED_SCAN_PLANS;
10049 		ar->hw->wiphy->max_sched_scan_plan_interval =
10050 			WMI_PNO_MAX_SCHED_SCAN_PLAN_INT;
10051 		ar->hw->wiphy->max_sched_scan_plan_iterations =
10052 			WMI_PNO_MAX_SCHED_SCAN_PLAN_ITRNS;
10053 		ar->hw->wiphy->features |= NL80211_FEATURE_ND_RANDOM_MAC_ADDR;
10054 	}
10055 
10056 	ar->hw->vif_data_size = sizeof(struct ath10k_vif);
10057 	ar->hw->sta_data_size = sizeof(struct ath10k_sta);
10058 	ar->hw->txq_data_size = sizeof(struct ath10k_txq);
10059 
10060 	ar->hw->max_listen_interval = ATH10K_MAX_HW_LISTEN_INTERVAL;
10061 
10062 	if (test_bit(WMI_SERVICE_BEACON_OFFLOAD, ar->wmi.svc_map)) {
10063 		ar->hw->wiphy->flags |= WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD;
10064 
10065 		/* Firmware delivers WPS/P2P Probe Requests frames to driver so
10066 		 * that userspace (e.g. wpa_supplicant/hostapd) can generate
10067 		 * correct Probe Responses. This is more of a hack advert..
10068 		 */
10069 		ar->hw->wiphy->probe_resp_offload |=
10070 			NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS |
10071 			NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS2 |
10072 			NL80211_PROBE_RESP_OFFLOAD_SUPPORT_P2P;
10073 	}
10074 
10075 	if (test_bit(WMI_SERVICE_TDLS, ar->wmi.svc_map) ||
10076 	    test_bit(WMI_SERVICE_TDLS_EXPLICIT_MODE_ONLY, ar->wmi.svc_map)) {
10077 		ar->hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_TDLS;
10078 		if (test_bit(WMI_SERVICE_TDLS_WIDER_BANDWIDTH, ar->wmi.svc_map))
10079 			ieee80211_hw_set(ar->hw, TDLS_WIDER_BW);
10080 	}
10081 
10082 	if (test_bit(WMI_SERVICE_TDLS_UAPSD_BUFFER_STA, ar->wmi.svc_map))
10083 		ieee80211_hw_set(ar->hw, SUPPORTS_TDLS_BUFFER_STA);
10084 
10085 	if (ath10k_frame_mode == ATH10K_HW_TXRX_ETHERNET) {
10086 		if (ar->wmi.vdev_param->tx_encap_type !=
10087 		    WMI_VDEV_PARAM_UNSUPPORTED)
10088 			ieee80211_hw_set(ar->hw, SUPPORTS_TX_ENCAP_OFFLOAD);
10089 	}
10090 
10091 	ar->hw->wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
10092 	ar->hw->wiphy->flags |= WIPHY_FLAG_HAS_CHANNEL_SWITCH;
10093 	ar->hw->wiphy->max_remain_on_channel_duration = 5000;
10094 
10095 	ar->hw->wiphy->flags |= WIPHY_FLAG_AP_UAPSD;
10096 	ar->hw->wiphy->features |= NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE |
10097 				   NL80211_FEATURE_AP_SCAN;
10098 
10099 	ar->hw->wiphy->max_ap_assoc_sta = ar->max_num_stations;
10100 
10101 	ret = ath10k_wow_init(ar);
10102 	if (ret) {
10103 		ath10k_warn(ar, "failed to init wow: %d\n", ret);
10104 		goto err_free;
10105 	}
10106 
10107 	wiphy_ext_feature_set(ar->hw->wiphy, NL80211_EXT_FEATURE_VHT_IBSS);
10108 	wiphy_ext_feature_set(ar->hw->wiphy,
10109 			      NL80211_EXT_FEATURE_SET_SCAN_DWELL);
10110 	wiphy_ext_feature_set(ar->hw->wiphy, NL80211_EXT_FEATURE_AQL);
10111 
10112 	if (test_bit(WMI_SERVICE_TX_DATA_ACK_RSSI, ar->wmi.svc_map) ||
10113 	    test_bit(WMI_SERVICE_HTT_MGMT_TX_COMP_VALID_FLAGS, ar->wmi.svc_map))
10114 		wiphy_ext_feature_set(ar->hw->wiphy,
10115 				      NL80211_EXT_FEATURE_ACK_SIGNAL_SUPPORT);
10116 
10117 	if (ath10k_peer_stats_enabled(ar) ||
10118 	    test_bit(WMI_SERVICE_REPORT_AIRTIME, ar->wmi.svc_map))
10119 		wiphy_ext_feature_set(ar->hw->wiphy,
10120 				      NL80211_EXT_FEATURE_AIRTIME_FAIRNESS);
10121 
10122 	if (test_bit(WMI_SERVICE_RTT_RESPONDER_ROLE, ar->wmi.svc_map))
10123 		wiphy_ext_feature_set(ar->hw->wiphy,
10124 				      NL80211_EXT_FEATURE_ENABLE_FTM_RESPONDER);
10125 
10126 	if (test_bit(WMI_SERVICE_TX_PWR_PER_PEER, ar->wmi.svc_map))
10127 		wiphy_ext_feature_set(ar->hw->wiphy,
10128 				      NL80211_EXT_FEATURE_STA_TX_PWR);
10129 
10130 	if (test_bit(WMI_SERVICE_PEER_TID_CONFIGS_SUPPORT, ar->wmi.svc_map)) {
10131 		ar->hw->wiphy->tid_config_support.vif |=
10132 				BIT(NL80211_TID_CONFIG_ATTR_NOACK) |
10133 				BIT(NL80211_TID_CONFIG_ATTR_RETRY_SHORT) |
10134 				BIT(NL80211_TID_CONFIG_ATTR_RETRY_LONG) |
10135 				BIT(NL80211_TID_CONFIG_ATTR_AMPDU_CTRL) |
10136 				BIT(NL80211_TID_CONFIG_ATTR_TX_RATE) |
10137 				BIT(NL80211_TID_CONFIG_ATTR_TX_RATE_TYPE);
10138 
10139 		if (test_bit(WMI_SERVICE_EXT_PEER_TID_CONFIGS_SUPPORT,
10140 			     ar->wmi.svc_map)) {
10141 			ar->hw->wiphy->tid_config_support.vif |=
10142 				BIT(NL80211_TID_CONFIG_ATTR_RTSCTS_CTRL);
10143 		}
10144 
10145 		ar->hw->wiphy->tid_config_support.peer =
10146 				ar->hw->wiphy->tid_config_support.vif;
10147 		ar->hw->wiphy->max_data_retry_count = ATH10K_MAX_RETRY_COUNT;
10148 	} else {
10149 		ar->ops->set_tid_config = NULL;
10150 	}
10151 	/*
10152 	 * on LL hardware queues are managed entirely by the FW
10153 	 * so we only advertise to mac we can do the queues thing
10154 	 */
10155 	ar->hw->queues = IEEE80211_MAX_QUEUES;
10156 
10157 	/* vdev_ids are used as hw queue numbers. Make sure offchan tx queue is
10158 	 * something that vdev_ids can't reach so that we don't stop the queue
10159 	 * accidentally.
10160 	 */
10161 	ar->hw->offchannel_tx_hw_queue = IEEE80211_MAX_QUEUES - 1;
10162 
10163 	switch (ar->running_fw->fw_file.wmi_op_version) {
10164 	case ATH10K_FW_WMI_OP_VERSION_MAIN:
10165 		ar->hw->wiphy->iface_combinations = ath10k_if_comb;
10166 		ar->hw->wiphy->n_iface_combinations =
10167 			ARRAY_SIZE(ath10k_if_comb);
10168 		ar->hw->wiphy->interface_modes |= BIT(NL80211_IFTYPE_ADHOC);
10169 		break;
10170 	case ATH10K_FW_WMI_OP_VERSION_TLV:
10171 		if (test_bit(WMI_SERVICE_ADAPTIVE_OCS, ar->wmi.svc_map)) {
10172 			ar->hw->wiphy->iface_combinations =
10173 				ath10k_tlv_qcs_if_comb;
10174 			ar->hw->wiphy->n_iface_combinations =
10175 				ARRAY_SIZE(ath10k_tlv_qcs_if_comb);
10176 		} else {
10177 			ar->hw->wiphy->iface_combinations = ath10k_tlv_if_comb;
10178 			ar->hw->wiphy->n_iface_combinations =
10179 				ARRAY_SIZE(ath10k_tlv_if_comb);
10180 		}
10181 		ar->hw->wiphy->interface_modes |= BIT(NL80211_IFTYPE_ADHOC);
10182 		break;
10183 	case ATH10K_FW_WMI_OP_VERSION_10_1:
10184 	case ATH10K_FW_WMI_OP_VERSION_10_2:
10185 	case ATH10K_FW_WMI_OP_VERSION_10_2_4:
10186 		ar->hw->wiphy->iface_combinations = ath10k_10x_if_comb;
10187 		ar->hw->wiphy->n_iface_combinations =
10188 			ARRAY_SIZE(ath10k_10x_if_comb);
10189 		break;
10190 	case ATH10K_FW_WMI_OP_VERSION_10_4:
10191 		ar->hw->wiphy->iface_combinations = ath10k_10_4_if_comb;
10192 		ar->hw->wiphy->n_iface_combinations =
10193 			ARRAY_SIZE(ath10k_10_4_if_comb);
10194 		if (test_bit(WMI_SERVICE_VDEV_DIFFERENT_BEACON_INTERVAL_SUPPORT,
10195 			     ar->wmi.svc_map)) {
10196 			ar->hw->wiphy->iface_combinations =
10197 				ath10k_10_4_bcn_int_if_comb;
10198 			ar->hw->wiphy->n_iface_combinations =
10199 				ARRAY_SIZE(ath10k_10_4_bcn_int_if_comb);
10200 		}
10201 		break;
10202 	case ATH10K_FW_WMI_OP_VERSION_UNSET:
10203 	case ATH10K_FW_WMI_OP_VERSION_MAX:
10204 		WARN_ON(1);
10205 		ret = -EINVAL;
10206 		goto err_free;
10207 	}
10208 
10209 	if (ar->hw_params.dynamic_sar_support)
10210 		ar->hw->wiphy->sar_capa = &ath10k_sar_capa;
10211 
10212 	if (!test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags))
10213 		ar->hw->netdev_features = NETIF_F_HW_CSUM;
10214 
10215 	if (IS_ENABLED(CONFIG_ATH10K_DFS_CERTIFIED)) {
10216 		/* Init ath dfs pattern detector */
10217 		ar->ath_common.debug_mask = ATH_DBG_DFS;
10218 		ar->dfs_detector = dfs_pattern_detector_init(&ar->ath_common,
10219 							     NL80211_DFS_UNSET);
10220 
10221 		if (!ar->dfs_detector)
10222 			ath10k_warn(ar, "failed to initialise DFS pattern detector\n");
10223 	}
10224 
10225 	ret = ath10k_mac_init_rd(ar);
10226 	if (ret) {
10227 		ath10k_err(ar, "failed to derive regdom: %d\n", ret);
10228 		goto err_dfs_detector_exit;
10229 	}
10230 
10231 	/* Disable set_coverage_class for chipsets that do not support it. */
10232 	if (!ar->hw_params.hw_ops->set_coverage_class)
10233 		ar->ops->set_coverage_class = NULL;
10234 
10235 	ret = ath_regd_init(&ar->ath_common.regulatory, ar->hw->wiphy,
10236 			    ath10k_reg_notifier);
10237 	if (ret) {
10238 		ath10k_err(ar, "failed to initialise regulatory: %i\n", ret);
10239 		goto err_dfs_detector_exit;
10240 	}
10241 
10242 	if (test_bit(WMI_SERVICE_SPOOF_MAC_SUPPORT, ar->wmi.svc_map)) {
10243 		ar->hw->wiphy->features |=
10244 			NL80211_FEATURE_SCAN_RANDOM_MAC_ADDR;
10245 	}
10246 
10247 	ar->hw->wiphy->cipher_suites = cipher_suites;
10248 
10249 	/* QCA988x and QCA6174 family chips do not support CCMP-256, GCMP-128
10250 	 * and GCMP-256 ciphers in hardware. Fetch number of ciphers supported
10251 	 * from chip specific hw_param table.
10252 	 */
10253 	if (!ar->hw_params.n_cipher_suites ||
10254 	    ar->hw_params.n_cipher_suites > ARRAY_SIZE(cipher_suites)) {
10255 		ath10k_err(ar, "invalid hw_params.n_cipher_suites %d\n",
10256 			   ar->hw_params.n_cipher_suites);
10257 		ar->hw_params.n_cipher_suites = 8;
10258 	}
10259 	ar->hw->wiphy->n_cipher_suites = ar->hw_params.n_cipher_suites;
10260 
10261 	wiphy_ext_feature_set(ar->hw->wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
10262 
10263 	ar->hw->weight_multiplier = ATH10K_AIRTIME_WEIGHT_MULTIPLIER;
10264 
10265 	ret = ieee80211_register_hw(ar->hw);
10266 	if (ret) {
10267 		ath10k_err(ar, "failed to register ieee80211: %d\n", ret);
10268 		goto err_dfs_detector_exit;
10269 	}
10270 
10271 	if (test_bit(WMI_SERVICE_PER_PACKET_SW_ENCRYPT, ar->wmi.svc_map)) {
10272 		ar->hw->wiphy->interface_modes |= BIT(NL80211_IFTYPE_AP_VLAN);
10273 		ar->hw->wiphy->software_iftypes |= BIT(NL80211_IFTYPE_AP_VLAN);
10274 	}
10275 
10276 	if (!ath_is_world_regd(&ar->ath_common.reg_world_copy) &&
10277 	    !ath_is_world_regd(&ar->ath_common.regulatory)) {
10278 		ret = regulatory_hint(ar->hw->wiphy,
10279 				      ar->ath_common.regulatory.alpha2);
10280 		if (ret)
10281 			goto err_unregister;
10282 	}
10283 
10284 	return 0;
10285 
10286 err_unregister:
10287 	ieee80211_unregister_hw(ar->hw);
10288 
10289 err_dfs_detector_exit:
10290 	if (IS_ENABLED(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector)
10291 		ar->dfs_detector->exit(ar->dfs_detector);
10292 
10293 err_free:
10294 	kfree(ar->mac.sbands[NL80211_BAND_2GHZ].channels);
10295 	kfree(ar->mac.sbands[NL80211_BAND_5GHZ].channels);
10296 
10297 	SET_IEEE80211_DEV(ar->hw, NULL);
10298 	return ret;
10299 }
10300 
10301 void ath10k_mac_unregister(struct ath10k *ar)
10302 {
10303 	ieee80211_unregister_hw(ar->hw);
10304 
10305 	if (IS_ENABLED(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector)
10306 		ar->dfs_detector->exit(ar->dfs_detector);
10307 
10308 	kfree(ar->mac.sbands[NL80211_BAND_2GHZ].channels);
10309 	kfree(ar->mac.sbands[NL80211_BAND_5GHZ].channels);
10310 
10311 	SET_IEEE80211_DEV(ar->hw, NULL);
10312 }
10313