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