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