]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/blob - drivers/net/wireless/ath/ath10k/mac.c
NFC: pn533: handle interrupted commands in pn533_recv_frame
[mirror_ubuntu-hirsute-kernel.git] / drivers / net / wireless / ath / ath10k / mac.c
1 /*
2 * Copyright (c) 2005-2011 Atheros Communications Inc.
3 * Copyright (c) 2011-2013 Qualcomm Atheros, Inc.
4 *
5 * Permission to use, copy, modify, and/or distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 */
17
18 #include "mac.h"
19
20 #include <net/mac80211.h>
21 #include <linux/etherdevice.h>
22
23 #include "hif.h"
24 #include "core.h"
25 #include "debug.h"
26 #include "wmi.h"
27 #include "htt.h"
28 #include "txrx.h"
29 #include "testmode.h"
30 #include "wmi.h"
31 #include "wmi-tlv.h"
32 #include "wmi-ops.h"
33 #include "wow.h"
34
35 /*********/
36 /* Rates */
37 /*********/
38
39 static struct ieee80211_rate ath10k_rates[] = {
40 { .bitrate = 10,
41 .hw_value = ATH10K_HW_RATE_CCK_LP_1M },
42 { .bitrate = 20,
43 .hw_value = ATH10K_HW_RATE_CCK_LP_2M,
44 .hw_value_short = ATH10K_HW_RATE_CCK_SP_2M,
45 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
46 { .bitrate = 55,
47 .hw_value = ATH10K_HW_RATE_CCK_LP_5_5M,
48 .hw_value_short = ATH10K_HW_RATE_CCK_SP_5_5M,
49 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
50 { .bitrate = 110,
51 .hw_value = ATH10K_HW_RATE_CCK_LP_11M,
52 .hw_value_short = ATH10K_HW_RATE_CCK_SP_11M,
53 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
54
55 { .bitrate = 60, .hw_value = ATH10K_HW_RATE_OFDM_6M },
56 { .bitrate = 90, .hw_value = ATH10K_HW_RATE_OFDM_9M },
57 { .bitrate = 120, .hw_value = ATH10K_HW_RATE_OFDM_12M },
58 { .bitrate = 180, .hw_value = ATH10K_HW_RATE_OFDM_18M },
59 { .bitrate = 240, .hw_value = ATH10K_HW_RATE_OFDM_24M },
60 { .bitrate = 360, .hw_value = ATH10K_HW_RATE_OFDM_36M },
61 { .bitrate = 480, .hw_value = ATH10K_HW_RATE_OFDM_48M },
62 { .bitrate = 540, .hw_value = ATH10K_HW_RATE_OFDM_54M },
63 };
64
65 #define ATH10K_MAC_FIRST_OFDM_RATE_IDX 4
66
67 #define ath10k_a_rates (ath10k_rates + ATH10K_MAC_FIRST_OFDM_RATE_IDX)
68 #define ath10k_a_rates_size (ARRAY_SIZE(ath10k_rates) - \
69 ATH10K_MAC_FIRST_OFDM_RATE_IDX)
70 #define ath10k_g_rates (ath10k_rates + 0)
71 #define ath10k_g_rates_size (ARRAY_SIZE(ath10k_rates))
72
73 static bool ath10k_mac_bitrate_is_cck(int bitrate)
74 {
75 switch (bitrate) {
76 case 10:
77 case 20:
78 case 55:
79 case 110:
80 return true;
81 }
82
83 return false;
84 }
85
86 static u8 ath10k_mac_bitrate_to_rate(int bitrate)
87 {
88 return DIV_ROUND_UP(bitrate, 5) |
89 (ath10k_mac_bitrate_is_cck(bitrate) ? BIT(7) : 0);
90 }
91
92 u8 ath10k_mac_hw_rate_to_idx(const struct ieee80211_supported_band *sband,
93 u8 hw_rate, bool cck)
94 {
95 const struct ieee80211_rate *rate;
96 int i;
97
98 for (i = 0; i < sband->n_bitrates; i++) {
99 rate = &sband->bitrates[i];
100
101 if (ath10k_mac_bitrate_is_cck(rate->bitrate) != cck)
102 continue;
103
104 if (rate->hw_value == hw_rate)
105 return i;
106 else if (rate->flags & IEEE80211_RATE_SHORT_PREAMBLE &&
107 rate->hw_value_short == hw_rate)
108 return i;
109 }
110
111 return 0;
112 }
113
114 u8 ath10k_mac_bitrate_to_idx(const struct ieee80211_supported_band *sband,
115 u32 bitrate)
116 {
117 int i;
118
119 for (i = 0; i < sband->n_bitrates; i++)
120 if (sband->bitrates[i].bitrate == bitrate)
121 return i;
122
123 return 0;
124 }
125
126 static int ath10k_mac_get_max_vht_mcs_map(u16 mcs_map, int nss)
127 {
128 switch ((mcs_map >> (2 * nss)) & 0x3) {
129 case IEEE80211_VHT_MCS_SUPPORT_0_7: return BIT(8) - 1;
130 case IEEE80211_VHT_MCS_SUPPORT_0_8: return BIT(9) - 1;
131 case IEEE80211_VHT_MCS_SUPPORT_0_9: return BIT(10) - 1;
132 }
133 return 0;
134 }
135
136 static u32
137 ath10k_mac_max_ht_nss(const u8 ht_mcs_mask[IEEE80211_HT_MCS_MASK_LEN])
138 {
139 int nss;
140
141 for (nss = IEEE80211_HT_MCS_MASK_LEN - 1; nss >= 0; nss--)
142 if (ht_mcs_mask[nss])
143 return nss + 1;
144
145 return 1;
146 }
147
148 static u32
149 ath10k_mac_max_vht_nss(const u16 vht_mcs_mask[NL80211_VHT_NSS_MAX])
150 {
151 int nss;
152
153 for (nss = NL80211_VHT_NSS_MAX - 1; nss >= 0; nss--)
154 if (vht_mcs_mask[nss])
155 return nss + 1;
156
157 return 1;
158 }
159
160 /**********/
161 /* Crypto */
162 /**********/
163
164 static int ath10k_send_key(struct ath10k_vif *arvif,
165 struct ieee80211_key_conf *key,
166 enum set_key_cmd cmd,
167 const u8 *macaddr, u32 flags)
168 {
169 struct ath10k *ar = arvif->ar;
170 struct wmi_vdev_install_key_arg arg = {
171 .vdev_id = arvif->vdev_id,
172 .key_idx = key->keyidx,
173 .key_len = key->keylen,
174 .key_data = key->key,
175 .key_flags = flags,
176 .macaddr = macaddr,
177 };
178
179 lockdep_assert_held(&arvif->ar->conf_mutex);
180
181 switch (key->cipher) {
182 case WLAN_CIPHER_SUITE_CCMP:
183 arg.key_cipher = WMI_CIPHER_AES_CCM;
184 key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV_MGMT;
185 break;
186 case WLAN_CIPHER_SUITE_TKIP:
187 arg.key_cipher = WMI_CIPHER_TKIP;
188 arg.key_txmic_len = 8;
189 arg.key_rxmic_len = 8;
190 break;
191 case WLAN_CIPHER_SUITE_WEP40:
192 case WLAN_CIPHER_SUITE_WEP104:
193 arg.key_cipher = WMI_CIPHER_WEP;
194 break;
195 case WLAN_CIPHER_SUITE_AES_CMAC:
196 WARN_ON(1);
197 return -EINVAL;
198 default:
199 ath10k_warn(ar, "cipher %d is not supported\n", key->cipher);
200 return -EOPNOTSUPP;
201 }
202
203 if (test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags))
204 key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
205
206 if (cmd == DISABLE_KEY) {
207 arg.key_cipher = WMI_CIPHER_NONE;
208 arg.key_data = NULL;
209 }
210
211 return ath10k_wmi_vdev_install_key(arvif->ar, &arg);
212 }
213
214 static int ath10k_install_key(struct ath10k_vif *arvif,
215 struct ieee80211_key_conf *key,
216 enum set_key_cmd cmd,
217 const u8 *macaddr, u32 flags)
218 {
219 struct ath10k *ar = arvif->ar;
220 int ret;
221 unsigned long time_left;
222
223 lockdep_assert_held(&ar->conf_mutex);
224
225 reinit_completion(&ar->install_key_done);
226
227 if (arvif->nohwcrypt)
228 return 1;
229
230 ret = ath10k_send_key(arvif, key, cmd, macaddr, flags);
231 if (ret)
232 return ret;
233
234 time_left = wait_for_completion_timeout(&ar->install_key_done, 3 * HZ);
235 if (time_left == 0)
236 return -ETIMEDOUT;
237
238 return 0;
239 }
240
241 static int ath10k_install_peer_wep_keys(struct ath10k_vif *arvif,
242 const u8 *addr)
243 {
244 struct ath10k *ar = arvif->ar;
245 struct ath10k_peer *peer;
246 int ret;
247 int i;
248 u32 flags;
249
250 lockdep_assert_held(&ar->conf_mutex);
251
252 if (WARN_ON(arvif->vif->type != NL80211_IFTYPE_AP &&
253 arvif->vif->type != NL80211_IFTYPE_ADHOC &&
254 arvif->vif->type != NL80211_IFTYPE_MESH_POINT))
255 return -EINVAL;
256
257 spin_lock_bh(&ar->data_lock);
258 peer = ath10k_peer_find(ar, arvif->vdev_id, addr);
259 spin_unlock_bh(&ar->data_lock);
260
261 if (!peer)
262 return -ENOENT;
263
264 for (i = 0; i < ARRAY_SIZE(arvif->wep_keys); i++) {
265 if (arvif->wep_keys[i] == NULL)
266 continue;
267
268 switch (arvif->vif->type) {
269 case NL80211_IFTYPE_AP:
270 flags = WMI_KEY_PAIRWISE;
271
272 if (arvif->def_wep_key_idx == i)
273 flags |= WMI_KEY_TX_USAGE;
274
275 ret = ath10k_install_key(arvif, arvif->wep_keys[i],
276 SET_KEY, addr, flags);
277 if (ret < 0)
278 return ret;
279 break;
280 case NL80211_IFTYPE_ADHOC:
281 ret = ath10k_install_key(arvif, arvif->wep_keys[i],
282 SET_KEY, addr,
283 WMI_KEY_PAIRWISE);
284 if (ret < 0)
285 return ret;
286
287 ret = ath10k_install_key(arvif, arvif->wep_keys[i],
288 SET_KEY, addr, WMI_KEY_GROUP);
289 if (ret < 0)
290 return ret;
291 break;
292 default:
293 WARN_ON(1);
294 return -EINVAL;
295 }
296
297 spin_lock_bh(&ar->data_lock);
298 peer->keys[i] = arvif->wep_keys[i];
299 spin_unlock_bh(&ar->data_lock);
300 }
301
302 /* In some cases (notably with static WEP IBSS with multiple keys)
303 * multicast Tx becomes broken. Both pairwise and groupwise keys are
304 * installed already. Using WMI_KEY_TX_USAGE in different combinations
305 * didn't seem help. Using def_keyid vdev parameter seems to be
306 * effective so use that.
307 *
308 * FIXME: Revisit. Perhaps this can be done in a less hacky way.
309 */
310 if (arvif->vif->type != NL80211_IFTYPE_ADHOC)
311 return 0;
312
313 if (arvif->def_wep_key_idx == -1)
314 return 0;
315
316 ret = ath10k_wmi_vdev_set_param(arvif->ar,
317 arvif->vdev_id,
318 arvif->ar->wmi.vdev_param->def_keyid,
319 arvif->def_wep_key_idx);
320 if (ret) {
321 ath10k_warn(ar, "failed to re-set def wpa key idxon vdev %i: %d\n",
322 arvif->vdev_id, ret);
323 return ret;
324 }
325
326 return 0;
327 }
328
329 static int ath10k_clear_peer_keys(struct ath10k_vif *arvif,
330 const u8 *addr)
331 {
332 struct ath10k *ar = arvif->ar;
333 struct ath10k_peer *peer;
334 int first_errno = 0;
335 int ret;
336 int i;
337 u32 flags = 0;
338
339 lockdep_assert_held(&ar->conf_mutex);
340
341 spin_lock_bh(&ar->data_lock);
342 peer = ath10k_peer_find(ar, arvif->vdev_id, addr);
343 spin_unlock_bh(&ar->data_lock);
344
345 if (!peer)
346 return -ENOENT;
347
348 for (i = 0; i < ARRAY_SIZE(peer->keys); i++) {
349 if (peer->keys[i] == NULL)
350 continue;
351
352 /* key flags are not required to delete the key */
353 ret = ath10k_install_key(arvif, peer->keys[i],
354 DISABLE_KEY, addr, flags);
355 if (ret < 0 && first_errno == 0)
356 first_errno = ret;
357
358 if (ret < 0)
359 ath10k_warn(ar, "failed to remove peer wep key %d: %d\n",
360 i, ret);
361
362 spin_lock_bh(&ar->data_lock);
363 peer->keys[i] = NULL;
364 spin_unlock_bh(&ar->data_lock);
365 }
366
367 return first_errno;
368 }
369
370 bool ath10k_mac_is_peer_wep_key_set(struct ath10k *ar, const u8 *addr,
371 u8 keyidx)
372 {
373 struct ath10k_peer *peer;
374 int i;
375
376 lockdep_assert_held(&ar->data_lock);
377
378 /* We don't know which vdev this peer belongs to,
379 * since WMI doesn't give us that information.
380 *
381 * FIXME: multi-bss needs to be handled.
382 */
383 peer = ath10k_peer_find(ar, 0, addr);
384 if (!peer)
385 return false;
386
387 for (i = 0; i < ARRAY_SIZE(peer->keys); i++) {
388 if (peer->keys[i] && peer->keys[i]->keyidx == keyidx)
389 return true;
390 }
391
392 return false;
393 }
394
395 static int ath10k_clear_vdev_key(struct ath10k_vif *arvif,
396 struct ieee80211_key_conf *key)
397 {
398 struct ath10k *ar = arvif->ar;
399 struct ath10k_peer *peer;
400 u8 addr[ETH_ALEN];
401 int first_errno = 0;
402 int ret;
403 int i;
404 u32 flags = 0;
405
406 lockdep_assert_held(&ar->conf_mutex);
407
408 for (;;) {
409 /* since ath10k_install_key we can't hold data_lock all the
410 * time, so we try to remove the keys incrementally */
411 spin_lock_bh(&ar->data_lock);
412 i = 0;
413 list_for_each_entry(peer, &ar->peers, list) {
414 for (i = 0; i < ARRAY_SIZE(peer->keys); i++) {
415 if (peer->keys[i] == key) {
416 ether_addr_copy(addr, peer->addr);
417 peer->keys[i] = NULL;
418 break;
419 }
420 }
421
422 if (i < ARRAY_SIZE(peer->keys))
423 break;
424 }
425 spin_unlock_bh(&ar->data_lock);
426
427 if (i == ARRAY_SIZE(peer->keys))
428 break;
429 /* key flags are not required to delete the key */
430 ret = ath10k_install_key(arvif, key, DISABLE_KEY, addr, flags);
431 if (ret < 0 && first_errno == 0)
432 first_errno = ret;
433
434 if (ret)
435 ath10k_warn(ar, "failed to remove key for %pM: %d\n",
436 addr, ret);
437 }
438
439 return first_errno;
440 }
441
442 static int ath10k_mac_vif_update_wep_key(struct ath10k_vif *arvif,
443 struct ieee80211_key_conf *key)
444 {
445 struct ath10k *ar = arvif->ar;
446 struct ath10k_peer *peer;
447 int ret;
448
449 lockdep_assert_held(&ar->conf_mutex);
450
451 list_for_each_entry(peer, &ar->peers, list) {
452 if (!memcmp(peer->addr, arvif->vif->addr, ETH_ALEN))
453 continue;
454
455 if (!memcmp(peer->addr, arvif->bssid, ETH_ALEN))
456 continue;
457
458 if (peer->keys[key->keyidx] == key)
459 continue;
460
461 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vif vdev %i update key %i needs update\n",
462 arvif->vdev_id, key->keyidx);
463
464 ret = ath10k_install_peer_wep_keys(arvif, peer->addr);
465 if (ret) {
466 ath10k_warn(ar, "failed to update wep keys on vdev %i for peer %pM: %d\n",
467 arvif->vdev_id, peer->addr, ret);
468 return ret;
469 }
470 }
471
472 return 0;
473 }
474
475 /*********************/
476 /* General utilities */
477 /*********************/
478
479 static inline enum wmi_phy_mode
480 chan_to_phymode(const struct cfg80211_chan_def *chandef)
481 {
482 enum wmi_phy_mode phymode = MODE_UNKNOWN;
483
484 switch (chandef->chan->band) {
485 case IEEE80211_BAND_2GHZ:
486 switch (chandef->width) {
487 case NL80211_CHAN_WIDTH_20_NOHT:
488 if (chandef->chan->flags & IEEE80211_CHAN_NO_OFDM)
489 phymode = MODE_11B;
490 else
491 phymode = MODE_11G;
492 break;
493 case NL80211_CHAN_WIDTH_20:
494 phymode = MODE_11NG_HT20;
495 break;
496 case NL80211_CHAN_WIDTH_40:
497 phymode = MODE_11NG_HT40;
498 break;
499 case NL80211_CHAN_WIDTH_5:
500 case NL80211_CHAN_WIDTH_10:
501 case NL80211_CHAN_WIDTH_80:
502 case NL80211_CHAN_WIDTH_80P80:
503 case NL80211_CHAN_WIDTH_160:
504 phymode = MODE_UNKNOWN;
505 break;
506 }
507 break;
508 case IEEE80211_BAND_5GHZ:
509 switch (chandef->width) {
510 case NL80211_CHAN_WIDTH_20_NOHT:
511 phymode = MODE_11A;
512 break;
513 case NL80211_CHAN_WIDTH_20:
514 phymode = MODE_11NA_HT20;
515 break;
516 case NL80211_CHAN_WIDTH_40:
517 phymode = MODE_11NA_HT40;
518 break;
519 case NL80211_CHAN_WIDTH_80:
520 phymode = MODE_11AC_VHT80;
521 break;
522 case NL80211_CHAN_WIDTH_5:
523 case NL80211_CHAN_WIDTH_10:
524 case NL80211_CHAN_WIDTH_80P80:
525 case NL80211_CHAN_WIDTH_160:
526 phymode = MODE_UNKNOWN;
527 break;
528 }
529 break;
530 default:
531 break;
532 }
533
534 WARN_ON(phymode == MODE_UNKNOWN);
535 return phymode;
536 }
537
538 static u8 ath10k_parse_mpdudensity(u8 mpdudensity)
539 {
540 /*
541 * 802.11n D2.0 defined values for "Minimum MPDU Start Spacing":
542 * 0 for no restriction
543 * 1 for 1/4 us
544 * 2 for 1/2 us
545 * 3 for 1 us
546 * 4 for 2 us
547 * 5 for 4 us
548 * 6 for 8 us
549 * 7 for 16 us
550 */
551 switch (mpdudensity) {
552 case 0:
553 return 0;
554 case 1:
555 case 2:
556 case 3:
557 /* Our lower layer calculations limit our precision to
558 1 microsecond */
559 return 1;
560 case 4:
561 return 2;
562 case 5:
563 return 4;
564 case 6:
565 return 8;
566 case 7:
567 return 16;
568 default:
569 return 0;
570 }
571 }
572
573 int ath10k_mac_vif_chan(struct ieee80211_vif *vif,
574 struct cfg80211_chan_def *def)
575 {
576 struct ieee80211_chanctx_conf *conf;
577
578 rcu_read_lock();
579 conf = rcu_dereference(vif->chanctx_conf);
580 if (!conf) {
581 rcu_read_unlock();
582 return -ENOENT;
583 }
584
585 *def = conf->def;
586 rcu_read_unlock();
587
588 return 0;
589 }
590
591 static void ath10k_mac_num_chanctxs_iter(struct ieee80211_hw *hw,
592 struct ieee80211_chanctx_conf *conf,
593 void *data)
594 {
595 int *num = data;
596
597 (*num)++;
598 }
599
600 static int ath10k_mac_num_chanctxs(struct ath10k *ar)
601 {
602 int num = 0;
603
604 ieee80211_iter_chan_contexts_atomic(ar->hw,
605 ath10k_mac_num_chanctxs_iter,
606 &num);
607
608 return num;
609 }
610
611 static void
612 ath10k_mac_get_any_chandef_iter(struct ieee80211_hw *hw,
613 struct ieee80211_chanctx_conf *conf,
614 void *data)
615 {
616 struct cfg80211_chan_def **def = data;
617
618 *def = &conf->def;
619 }
620
621 static int ath10k_peer_create(struct ath10k *ar, u32 vdev_id, const u8 *addr,
622 enum wmi_peer_type peer_type)
623 {
624 struct ath10k_vif *arvif;
625 int num_peers = 0;
626 int ret;
627
628 lockdep_assert_held(&ar->conf_mutex);
629
630 num_peers = ar->num_peers;
631
632 /* Each vdev consumes a peer entry as well */
633 list_for_each_entry(arvif, &ar->arvifs, list)
634 num_peers++;
635
636 if (num_peers >= ar->max_num_peers)
637 return -ENOBUFS;
638
639 ret = ath10k_wmi_peer_create(ar, vdev_id, addr, peer_type);
640 if (ret) {
641 ath10k_warn(ar, "failed to create wmi peer %pM on vdev %i: %i\n",
642 addr, vdev_id, ret);
643 return ret;
644 }
645
646 ret = ath10k_wait_for_peer_created(ar, vdev_id, addr);
647 if (ret) {
648 ath10k_warn(ar, "failed to wait for created wmi peer %pM on vdev %i: %i\n",
649 addr, vdev_id, ret);
650 return ret;
651 }
652
653 ar->num_peers++;
654
655 return 0;
656 }
657
658 static int ath10k_mac_set_kickout(struct ath10k_vif *arvif)
659 {
660 struct ath10k *ar = arvif->ar;
661 u32 param;
662 int ret;
663
664 param = ar->wmi.pdev_param->sta_kickout_th;
665 ret = ath10k_wmi_pdev_set_param(ar, param,
666 ATH10K_KICKOUT_THRESHOLD);
667 if (ret) {
668 ath10k_warn(ar, "failed to set kickout threshold on vdev %i: %d\n",
669 arvif->vdev_id, ret);
670 return ret;
671 }
672
673 param = ar->wmi.vdev_param->ap_keepalive_min_idle_inactive_time_secs;
674 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param,
675 ATH10K_KEEPALIVE_MIN_IDLE);
676 if (ret) {
677 ath10k_warn(ar, "failed to set keepalive minimum idle time on vdev %i: %d\n",
678 arvif->vdev_id, ret);
679 return ret;
680 }
681
682 param = ar->wmi.vdev_param->ap_keepalive_max_idle_inactive_time_secs;
683 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param,
684 ATH10K_KEEPALIVE_MAX_IDLE);
685 if (ret) {
686 ath10k_warn(ar, "failed to set keepalive maximum idle time on vdev %i: %d\n",
687 arvif->vdev_id, ret);
688 return ret;
689 }
690
691 param = ar->wmi.vdev_param->ap_keepalive_max_unresponsive_time_secs;
692 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param,
693 ATH10K_KEEPALIVE_MAX_UNRESPONSIVE);
694 if (ret) {
695 ath10k_warn(ar, "failed to set keepalive maximum unresponsive time on vdev %i: %d\n",
696 arvif->vdev_id, ret);
697 return ret;
698 }
699
700 return 0;
701 }
702
703 static int ath10k_mac_set_rts(struct ath10k_vif *arvif, u32 value)
704 {
705 struct ath10k *ar = arvif->ar;
706 u32 vdev_param;
707
708 vdev_param = ar->wmi.vdev_param->rts_threshold;
709 return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, value);
710 }
711
712 static int ath10k_peer_delete(struct ath10k *ar, u32 vdev_id, const u8 *addr)
713 {
714 int ret;
715
716 lockdep_assert_held(&ar->conf_mutex);
717
718 ret = ath10k_wmi_peer_delete(ar, vdev_id, addr);
719 if (ret)
720 return ret;
721
722 ret = ath10k_wait_for_peer_deleted(ar, vdev_id, addr);
723 if (ret)
724 return ret;
725
726 ar->num_peers--;
727
728 return 0;
729 }
730
731 static void ath10k_peer_cleanup(struct ath10k *ar, u32 vdev_id)
732 {
733 struct ath10k_peer *peer, *tmp;
734
735 lockdep_assert_held(&ar->conf_mutex);
736
737 spin_lock_bh(&ar->data_lock);
738 list_for_each_entry_safe(peer, tmp, &ar->peers, list) {
739 if (peer->vdev_id != vdev_id)
740 continue;
741
742 ath10k_warn(ar, "removing stale peer %pM from vdev_id %d\n",
743 peer->addr, vdev_id);
744
745 list_del(&peer->list);
746 kfree(peer);
747 ar->num_peers--;
748 }
749 spin_unlock_bh(&ar->data_lock);
750 }
751
752 static void ath10k_peer_cleanup_all(struct ath10k *ar)
753 {
754 struct ath10k_peer *peer, *tmp;
755
756 lockdep_assert_held(&ar->conf_mutex);
757
758 spin_lock_bh(&ar->data_lock);
759 list_for_each_entry_safe(peer, tmp, &ar->peers, list) {
760 list_del(&peer->list);
761 kfree(peer);
762 }
763 spin_unlock_bh(&ar->data_lock);
764
765 ar->num_peers = 0;
766 ar->num_stations = 0;
767 }
768
769 static int ath10k_mac_tdls_peer_update(struct ath10k *ar, u32 vdev_id,
770 struct ieee80211_sta *sta,
771 enum wmi_tdls_peer_state state)
772 {
773 int ret;
774 struct wmi_tdls_peer_update_cmd_arg arg = {};
775 struct wmi_tdls_peer_capab_arg cap = {};
776 struct wmi_channel_arg chan_arg = {};
777
778 lockdep_assert_held(&ar->conf_mutex);
779
780 arg.vdev_id = vdev_id;
781 arg.peer_state = state;
782 ether_addr_copy(arg.addr, sta->addr);
783
784 cap.peer_max_sp = sta->max_sp;
785 cap.peer_uapsd_queues = sta->uapsd_queues;
786
787 if (state == WMI_TDLS_PEER_STATE_CONNECTED &&
788 !sta->tdls_initiator)
789 cap.is_peer_responder = 1;
790
791 ret = ath10k_wmi_tdls_peer_update(ar, &arg, &cap, &chan_arg);
792 if (ret) {
793 ath10k_warn(ar, "failed to update tdls peer %pM on vdev %i: %i\n",
794 arg.addr, vdev_id, ret);
795 return ret;
796 }
797
798 return 0;
799 }
800
801 /************************/
802 /* Interface management */
803 /************************/
804
805 void ath10k_mac_vif_beacon_free(struct ath10k_vif *arvif)
806 {
807 struct ath10k *ar = arvif->ar;
808
809 lockdep_assert_held(&ar->data_lock);
810
811 if (!arvif->beacon)
812 return;
813
814 if (!arvif->beacon_buf)
815 dma_unmap_single(ar->dev, ATH10K_SKB_CB(arvif->beacon)->paddr,
816 arvif->beacon->len, DMA_TO_DEVICE);
817
818 if (WARN_ON(arvif->beacon_state != ATH10K_BEACON_SCHEDULED &&
819 arvif->beacon_state != ATH10K_BEACON_SENT))
820 return;
821
822 dev_kfree_skb_any(arvif->beacon);
823
824 arvif->beacon = NULL;
825 arvif->beacon_state = ATH10K_BEACON_SCHEDULED;
826 }
827
828 static void ath10k_mac_vif_beacon_cleanup(struct ath10k_vif *arvif)
829 {
830 struct ath10k *ar = arvif->ar;
831
832 lockdep_assert_held(&ar->data_lock);
833
834 ath10k_mac_vif_beacon_free(arvif);
835
836 if (arvif->beacon_buf) {
837 dma_free_coherent(ar->dev, IEEE80211_MAX_FRAME_LEN,
838 arvif->beacon_buf, arvif->beacon_paddr);
839 arvif->beacon_buf = NULL;
840 }
841 }
842
843 static inline int ath10k_vdev_setup_sync(struct ath10k *ar)
844 {
845 unsigned long time_left;
846
847 lockdep_assert_held(&ar->conf_mutex);
848
849 if (test_bit(ATH10K_FLAG_CRASH_FLUSH, &ar->dev_flags))
850 return -ESHUTDOWN;
851
852 time_left = wait_for_completion_timeout(&ar->vdev_setup_done,
853 ATH10K_VDEV_SETUP_TIMEOUT_HZ);
854 if (time_left == 0)
855 return -ETIMEDOUT;
856
857 return 0;
858 }
859
860 static int ath10k_monitor_vdev_start(struct ath10k *ar, int vdev_id)
861 {
862 struct cfg80211_chan_def *chandef = NULL;
863 struct ieee80211_channel *channel = NULL;
864 struct wmi_vdev_start_request_arg arg = {};
865 int ret = 0;
866
867 lockdep_assert_held(&ar->conf_mutex);
868
869 ieee80211_iter_chan_contexts_atomic(ar->hw,
870 ath10k_mac_get_any_chandef_iter,
871 &chandef);
872 if (WARN_ON_ONCE(!chandef))
873 return -ENOENT;
874
875 channel = chandef->chan;
876
877 arg.vdev_id = vdev_id;
878 arg.channel.freq = channel->center_freq;
879 arg.channel.band_center_freq1 = chandef->center_freq1;
880
881 /* TODO setup this dynamically, what in case we
882 don't have any vifs? */
883 arg.channel.mode = chan_to_phymode(chandef);
884 arg.channel.chan_radar =
885 !!(channel->flags & IEEE80211_CHAN_RADAR);
886
887 arg.channel.min_power = 0;
888 arg.channel.max_power = channel->max_power * 2;
889 arg.channel.max_reg_power = channel->max_reg_power * 2;
890 arg.channel.max_antenna_gain = channel->max_antenna_gain * 2;
891
892 reinit_completion(&ar->vdev_setup_done);
893
894 ret = ath10k_wmi_vdev_start(ar, &arg);
895 if (ret) {
896 ath10k_warn(ar, "failed to request monitor vdev %i start: %d\n",
897 vdev_id, ret);
898 return ret;
899 }
900
901 ret = ath10k_vdev_setup_sync(ar);
902 if (ret) {
903 ath10k_warn(ar, "failed to synchronize setup for monitor vdev %i start: %d\n",
904 vdev_id, ret);
905 return ret;
906 }
907
908 ret = ath10k_wmi_vdev_up(ar, vdev_id, 0, ar->mac_addr);
909 if (ret) {
910 ath10k_warn(ar, "failed to put up monitor vdev %i: %d\n",
911 vdev_id, ret);
912 goto vdev_stop;
913 }
914
915 ar->monitor_vdev_id = vdev_id;
916
917 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %i started\n",
918 ar->monitor_vdev_id);
919 return 0;
920
921 vdev_stop:
922 ret = ath10k_wmi_vdev_stop(ar, ar->monitor_vdev_id);
923 if (ret)
924 ath10k_warn(ar, "failed to stop monitor vdev %i after start failure: %d\n",
925 ar->monitor_vdev_id, ret);
926
927 return ret;
928 }
929
930 static int ath10k_monitor_vdev_stop(struct ath10k *ar)
931 {
932 int ret = 0;
933
934 lockdep_assert_held(&ar->conf_mutex);
935
936 ret = ath10k_wmi_vdev_down(ar, ar->monitor_vdev_id);
937 if (ret)
938 ath10k_warn(ar, "failed to put down monitor vdev %i: %d\n",
939 ar->monitor_vdev_id, ret);
940
941 reinit_completion(&ar->vdev_setup_done);
942
943 ret = ath10k_wmi_vdev_stop(ar, ar->monitor_vdev_id);
944 if (ret)
945 ath10k_warn(ar, "failed to to request monitor vdev %i stop: %d\n",
946 ar->monitor_vdev_id, ret);
947
948 ret = ath10k_vdev_setup_sync(ar);
949 if (ret)
950 ath10k_warn(ar, "failed to synchronize monitor vdev %i stop: %d\n",
951 ar->monitor_vdev_id, ret);
952
953 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %i stopped\n",
954 ar->monitor_vdev_id);
955 return ret;
956 }
957
958 static int ath10k_monitor_vdev_create(struct ath10k *ar)
959 {
960 int bit, ret = 0;
961
962 lockdep_assert_held(&ar->conf_mutex);
963
964 if (ar->free_vdev_map == 0) {
965 ath10k_warn(ar, "failed to find free vdev id for monitor vdev\n");
966 return -ENOMEM;
967 }
968
969 bit = __ffs64(ar->free_vdev_map);
970
971 ar->monitor_vdev_id = bit;
972
973 ret = ath10k_wmi_vdev_create(ar, ar->monitor_vdev_id,
974 WMI_VDEV_TYPE_MONITOR,
975 0, ar->mac_addr);
976 if (ret) {
977 ath10k_warn(ar, "failed to request monitor vdev %i creation: %d\n",
978 ar->monitor_vdev_id, ret);
979 return ret;
980 }
981
982 ar->free_vdev_map &= ~(1LL << ar->monitor_vdev_id);
983 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %d created\n",
984 ar->monitor_vdev_id);
985
986 return 0;
987 }
988
989 static int ath10k_monitor_vdev_delete(struct ath10k *ar)
990 {
991 int ret = 0;
992
993 lockdep_assert_held(&ar->conf_mutex);
994
995 ret = ath10k_wmi_vdev_delete(ar, ar->monitor_vdev_id);
996 if (ret) {
997 ath10k_warn(ar, "failed to request wmi monitor vdev %i removal: %d\n",
998 ar->monitor_vdev_id, ret);
999 return ret;
1000 }
1001
1002 ar->free_vdev_map |= 1LL << ar->monitor_vdev_id;
1003
1004 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %d deleted\n",
1005 ar->monitor_vdev_id);
1006 return ret;
1007 }
1008
1009 static int ath10k_monitor_start(struct ath10k *ar)
1010 {
1011 int ret;
1012
1013 lockdep_assert_held(&ar->conf_mutex);
1014
1015 ret = ath10k_monitor_vdev_create(ar);
1016 if (ret) {
1017 ath10k_warn(ar, "failed to create monitor vdev: %d\n", ret);
1018 return ret;
1019 }
1020
1021 ret = ath10k_monitor_vdev_start(ar, ar->monitor_vdev_id);
1022 if (ret) {
1023 ath10k_warn(ar, "failed to start monitor vdev: %d\n", ret);
1024 ath10k_monitor_vdev_delete(ar);
1025 return ret;
1026 }
1027
1028 ar->monitor_started = true;
1029 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor started\n");
1030
1031 return 0;
1032 }
1033
1034 static int ath10k_monitor_stop(struct ath10k *ar)
1035 {
1036 int ret;
1037
1038 lockdep_assert_held(&ar->conf_mutex);
1039
1040 ret = ath10k_monitor_vdev_stop(ar);
1041 if (ret) {
1042 ath10k_warn(ar, "failed to stop monitor vdev: %d\n", ret);
1043 return ret;
1044 }
1045
1046 ret = ath10k_monitor_vdev_delete(ar);
1047 if (ret) {
1048 ath10k_warn(ar, "failed to delete monitor vdev: %d\n", ret);
1049 return ret;
1050 }
1051
1052 ar->monitor_started = false;
1053 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor stopped\n");
1054
1055 return 0;
1056 }
1057
1058 static bool ath10k_mac_monitor_vdev_is_needed(struct ath10k *ar)
1059 {
1060 int num_ctx;
1061
1062 /* At least one chanctx is required to derive a channel to start
1063 * monitor vdev on.
1064 */
1065 num_ctx = ath10k_mac_num_chanctxs(ar);
1066 if (num_ctx == 0)
1067 return false;
1068
1069 /* If there's already an existing special monitor interface then don't
1070 * bother creating another monitor vdev.
1071 */
1072 if (ar->monitor_arvif)
1073 return false;
1074
1075 return ar->monitor ||
1076 ar->filter_flags & FIF_OTHER_BSS ||
1077 test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
1078 }
1079
1080 static bool ath10k_mac_monitor_vdev_is_allowed(struct ath10k *ar)
1081 {
1082 int num_ctx;
1083
1084 num_ctx = ath10k_mac_num_chanctxs(ar);
1085
1086 /* FIXME: Current interface combinations and cfg80211/mac80211 code
1087 * shouldn't allow this but make sure to prevent handling the following
1088 * case anyway since multi-channel DFS hasn't been tested at all.
1089 */
1090 if (test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags) && num_ctx > 1)
1091 return false;
1092
1093 return true;
1094 }
1095
1096 static int ath10k_monitor_recalc(struct ath10k *ar)
1097 {
1098 bool needed;
1099 bool allowed;
1100 int ret;
1101
1102 lockdep_assert_held(&ar->conf_mutex);
1103
1104 needed = ath10k_mac_monitor_vdev_is_needed(ar);
1105 allowed = ath10k_mac_monitor_vdev_is_allowed(ar);
1106
1107 ath10k_dbg(ar, ATH10K_DBG_MAC,
1108 "mac monitor recalc started? %d needed? %d allowed? %d\n",
1109 ar->monitor_started, needed, allowed);
1110
1111 if (WARN_ON(needed && !allowed)) {
1112 if (ar->monitor_started) {
1113 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor stopping disallowed monitor\n");
1114
1115 ret = ath10k_monitor_stop(ar);
1116 if (ret)
1117 ath10k_warn(ar, "failed to stop disallowed monitor: %d\n",
1118 ret);
1119 /* not serious */
1120 }
1121
1122 return -EPERM;
1123 }
1124
1125 if (needed == ar->monitor_started)
1126 return 0;
1127
1128 if (needed)
1129 return ath10k_monitor_start(ar);
1130 else
1131 return ath10k_monitor_stop(ar);
1132 }
1133
1134 static int ath10k_recalc_rtscts_prot(struct ath10k_vif *arvif)
1135 {
1136 struct ath10k *ar = arvif->ar;
1137 u32 vdev_param, rts_cts = 0;
1138
1139 lockdep_assert_held(&ar->conf_mutex);
1140
1141 vdev_param = ar->wmi.vdev_param->enable_rtscts;
1142
1143 rts_cts |= SM(WMI_RTSCTS_ENABLED, WMI_RTSCTS_SET);
1144
1145 if (arvif->num_legacy_stations > 0)
1146 rts_cts |= SM(WMI_RTSCTS_ACROSS_SW_RETRIES,
1147 WMI_RTSCTS_PROFILE);
1148 else
1149 rts_cts |= SM(WMI_RTSCTS_FOR_SECOND_RATESERIES,
1150 WMI_RTSCTS_PROFILE);
1151
1152 return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
1153 rts_cts);
1154 }
1155
1156 static int ath10k_start_cac(struct ath10k *ar)
1157 {
1158 int ret;
1159
1160 lockdep_assert_held(&ar->conf_mutex);
1161
1162 set_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
1163
1164 ret = ath10k_monitor_recalc(ar);
1165 if (ret) {
1166 ath10k_warn(ar, "failed to start monitor (cac): %d\n", ret);
1167 clear_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
1168 return ret;
1169 }
1170
1171 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac cac start monitor vdev %d\n",
1172 ar->monitor_vdev_id);
1173
1174 return 0;
1175 }
1176
1177 static int ath10k_stop_cac(struct ath10k *ar)
1178 {
1179 lockdep_assert_held(&ar->conf_mutex);
1180
1181 /* CAC is not running - do nothing */
1182 if (!test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags))
1183 return 0;
1184
1185 clear_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
1186 ath10k_monitor_stop(ar);
1187
1188 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac cac finished\n");
1189
1190 return 0;
1191 }
1192
1193 static void ath10k_mac_has_radar_iter(struct ieee80211_hw *hw,
1194 struct ieee80211_chanctx_conf *conf,
1195 void *data)
1196 {
1197 bool *ret = data;
1198
1199 if (!*ret && conf->radar_enabled)
1200 *ret = true;
1201 }
1202
1203 static bool ath10k_mac_has_radar_enabled(struct ath10k *ar)
1204 {
1205 bool has_radar = false;
1206
1207 ieee80211_iter_chan_contexts_atomic(ar->hw,
1208 ath10k_mac_has_radar_iter,
1209 &has_radar);
1210
1211 return has_radar;
1212 }
1213
1214 static void ath10k_recalc_radar_detection(struct ath10k *ar)
1215 {
1216 int ret;
1217
1218 lockdep_assert_held(&ar->conf_mutex);
1219
1220 ath10k_stop_cac(ar);
1221
1222 if (!ath10k_mac_has_radar_enabled(ar))
1223 return;
1224
1225 if (ar->num_started_vdevs > 0)
1226 return;
1227
1228 ret = ath10k_start_cac(ar);
1229 if (ret) {
1230 /*
1231 * Not possible to start CAC on current channel so starting
1232 * radiation is not allowed, make this channel DFS_UNAVAILABLE
1233 * by indicating that radar was detected.
1234 */
1235 ath10k_warn(ar, "failed to start CAC: %d\n", ret);
1236 ieee80211_radar_detected(ar->hw);
1237 }
1238 }
1239
1240 static int ath10k_vdev_stop(struct ath10k_vif *arvif)
1241 {
1242 struct ath10k *ar = arvif->ar;
1243 int ret;
1244
1245 lockdep_assert_held(&ar->conf_mutex);
1246
1247 reinit_completion(&ar->vdev_setup_done);
1248
1249 ret = ath10k_wmi_vdev_stop(ar, arvif->vdev_id);
1250 if (ret) {
1251 ath10k_warn(ar, "failed to stop WMI vdev %i: %d\n",
1252 arvif->vdev_id, ret);
1253 return ret;
1254 }
1255
1256 ret = ath10k_vdev_setup_sync(ar);
1257 if (ret) {
1258 ath10k_warn(ar, "failed to syncronise setup for vdev %i: %d\n",
1259 arvif->vdev_id, ret);
1260 return ret;
1261 }
1262
1263 WARN_ON(ar->num_started_vdevs == 0);
1264
1265 if (ar->num_started_vdevs != 0) {
1266 ar->num_started_vdevs--;
1267 ath10k_recalc_radar_detection(ar);
1268 }
1269
1270 return ret;
1271 }
1272
1273 static int ath10k_vdev_start_restart(struct ath10k_vif *arvif,
1274 const struct cfg80211_chan_def *chandef,
1275 bool restart)
1276 {
1277 struct ath10k *ar = arvif->ar;
1278 struct wmi_vdev_start_request_arg arg = {};
1279 int ret = 0;
1280
1281 lockdep_assert_held(&ar->conf_mutex);
1282
1283 reinit_completion(&ar->vdev_setup_done);
1284
1285 arg.vdev_id = arvif->vdev_id;
1286 arg.dtim_period = arvif->dtim_period;
1287 arg.bcn_intval = arvif->beacon_interval;
1288
1289 arg.channel.freq = chandef->chan->center_freq;
1290 arg.channel.band_center_freq1 = chandef->center_freq1;
1291 arg.channel.mode = chan_to_phymode(chandef);
1292
1293 arg.channel.min_power = 0;
1294 arg.channel.max_power = chandef->chan->max_power * 2;
1295 arg.channel.max_reg_power = chandef->chan->max_reg_power * 2;
1296 arg.channel.max_antenna_gain = chandef->chan->max_antenna_gain * 2;
1297
1298 if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
1299 arg.ssid = arvif->u.ap.ssid;
1300 arg.ssid_len = arvif->u.ap.ssid_len;
1301 arg.hidden_ssid = arvif->u.ap.hidden_ssid;
1302
1303 /* For now allow DFS for AP mode */
1304 arg.channel.chan_radar =
1305 !!(chandef->chan->flags & IEEE80211_CHAN_RADAR);
1306 } else if (arvif->vdev_type == WMI_VDEV_TYPE_IBSS) {
1307 arg.ssid = arvif->vif->bss_conf.ssid;
1308 arg.ssid_len = arvif->vif->bss_conf.ssid_len;
1309 }
1310
1311 ath10k_dbg(ar, ATH10K_DBG_MAC,
1312 "mac vdev %d start center_freq %d phymode %s\n",
1313 arg.vdev_id, arg.channel.freq,
1314 ath10k_wmi_phymode_str(arg.channel.mode));
1315
1316 if (restart)
1317 ret = ath10k_wmi_vdev_restart(ar, &arg);
1318 else
1319 ret = ath10k_wmi_vdev_start(ar, &arg);
1320
1321 if (ret) {
1322 ath10k_warn(ar, "failed to start WMI vdev %i: %d\n",
1323 arg.vdev_id, ret);
1324 return ret;
1325 }
1326
1327 ret = ath10k_vdev_setup_sync(ar);
1328 if (ret) {
1329 ath10k_warn(ar,
1330 "failed to synchronize setup for vdev %i restart %d: %d\n",
1331 arg.vdev_id, restart, ret);
1332 return ret;
1333 }
1334
1335 ar->num_started_vdevs++;
1336 ath10k_recalc_radar_detection(ar);
1337
1338 return ret;
1339 }
1340
1341 static int ath10k_vdev_start(struct ath10k_vif *arvif,
1342 const struct cfg80211_chan_def *def)
1343 {
1344 return ath10k_vdev_start_restart(arvif, def, false);
1345 }
1346
1347 static int ath10k_vdev_restart(struct ath10k_vif *arvif,
1348 const struct cfg80211_chan_def *def)
1349 {
1350 return ath10k_vdev_start_restart(arvif, def, true);
1351 }
1352
1353 static int ath10k_mac_setup_bcn_p2p_ie(struct ath10k_vif *arvif,
1354 struct sk_buff *bcn)
1355 {
1356 struct ath10k *ar = arvif->ar;
1357 struct ieee80211_mgmt *mgmt;
1358 const u8 *p2p_ie;
1359 int ret;
1360
1361 if (arvif->vif->type != NL80211_IFTYPE_AP || !arvif->vif->p2p)
1362 return 0;
1363
1364 mgmt = (void *)bcn->data;
1365 p2p_ie = cfg80211_find_vendor_ie(WLAN_OUI_WFA, WLAN_OUI_TYPE_WFA_P2P,
1366 mgmt->u.beacon.variable,
1367 bcn->len - (mgmt->u.beacon.variable -
1368 bcn->data));
1369 if (!p2p_ie)
1370 return -ENOENT;
1371
1372 ret = ath10k_wmi_p2p_go_bcn_ie(ar, arvif->vdev_id, p2p_ie);
1373 if (ret) {
1374 ath10k_warn(ar, "failed to submit p2p go bcn ie for vdev %i: %d\n",
1375 arvif->vdev_id, ret);
1376 return ret;
1377 }
1378
1379 return 0;
1380 }
1381
1382 static int ath10k_mac_remove_vendor_ie(struct sk_buff *skb, unsigned int oui,
1383 u8 oui_type, size_t ie_offset)
1384 {
1385 size_t len;
1386 const u8 *next;
1387 const u8 *end;
1388 u8 *ie;
1389
1390 if (WARN_ON(skb->len < ie_offset))
1391 return -EINVAL;
1392
1393 ie = (u8 *)cfg80211_find_vendor_ie(oui, oui_type,
1394 skb->data + ie_offset,
1395 skb->len - ie_offset);
1396 if (!ie)
1397 return -ENOENT;
1398
1399 len = ie[1] + 2;
1400 end = skb->data + skb->len;
1401 next = ie + len;
1402
1403 if (WARN_ON(next > end))
1404 return -EINVAL;
1405
1406 memmove(ie, next, end - next);
1407 skb_trim(skb, skb->len - len);
1408
1409 return 0;
1410 }
1411
1412 static int ath10k_mac_setup_bcn_tmpl(struct ath10k_vif *arvif)
1413 {
1414 struct ath10k *ar = arvif->ar;
1415 struct ieee80211_hw *hw = ar->hw;
1416 struct ieee80211_vif *vif = arvif->vif;
1417 struct ieee80211_mutable_offsets offs = {};
1418 struct sk_buff *bcn;
1419 int ret;
1420
1421 if (!test_bit(WMI_SERVICE_BEACON_OFFLOAD, ar->wmi.svc_map))
1422 return 0;
1423
1424 if (arvif->vdev_type != WMI_VDEV_TYPE_AP &&
1425 arvif->vdev_type != WMI_VDEV_TYPE_IBSS)
1426 return 0;
1427
1428 bcn = ieee80211_beacon_get_template(hw, vif, &offs);
1429 if (!bcn) {
1430 ath10k_warn(ar, "failed to get beacon template from mac80211\n");
1431 return -EPERM;
1432 }
1433
1434 ret = ath10k_mac_setup_bcn_p2p_ie(arvif, bcn);
1435 if (ret) {
1436 ath10k_warn(ar, "failed to setup p2p go bcn ie: %d\n", ret);
1437 kfree_skb(bcn);
1438 return ret;
1439 }
1440
1441 /* P2P IE is inserted by firmware automatically (as configured above)
1442 * so remove it from the base beacon template to avoid duplicate P2P
1443 * IEs in beacon frames.
1444 */
1445 ath10k_mac_remove_vendor_ie(bcn, WLAN_OUI_WFA, WLAN_OUI_TYPE_WFA_P2P,
1446 offsetof(struct ieee80211_mgmt,
1447 u.beacon.variable));
1448
1449 ret = ath10k_wmi_bcn_tmpl(ar, arvif->vdev_id, offs.tim_offset, bcn, 0,
1450 0, NULL, 0);
1451 kfree_skb(bcn);
1452
1453 if (ret) {
1454 ath10k_warn(ar, "failed to submit beacon template command: %d\n",
1455 ret);
1456 return ret;
1457 }
1458
1459 return 0;
1460 }
1461
1462 static int ath10k_mac_setup_prb_tmpl(struct ath10k_vif *arvif)
1463 {
1464 struct ath10k *ar = arvif->ar;
1465 struct ieee80211_hw *hw = ar->hw;
1466 struct ieee80211_vif *vif = arvif->vif;
1467 struct sk_buff *prb;
1468 int ret;
1469
1470 if (!test_bit(WMI_SERVICE_BEACON_OFFLOAD, ar->wmi.svc_map))
1471 return 0;
1472
1473 if (arvif->vdev_type != WMI_VDEV_TYPE_AP)
1474 return 0;
1475
1476 prb = ieee80211_proberesp_get(hw, vif);
1477 if (!prb) {
1478 ath10k_warn(ar, "failed to get probe resp template from mac80211\n");
1479 return -EPERM;
1480 }
1481
1482 ret = ath10k_wmi_prb_tmpl(ar, arvif->vdev_id, prb);
1483 kfree_skb(prb);
1484
1485 if (ret) {
1486 ath10k_warn(ar, "failed to submit probe resp template command: %d\n",
1487 ret);
1488 return ret;
1489 }
1490
1491 return 0;
1492 }
1493
1494 static int ath10k_mac_vif_fix_hidden_ssid(struct ath10k_vif *arvif)
1495 {
1496 struct ath10k *ar = arvif->ar;
1497 struct cfg80211_chan_def def;
1498 int ret;
1499
1500 /* When originally vdev is started during assign_vif_chanctx() some
1501 * information is missing, notably SSID. Firmware revisions with beacon
1502 * offloading require the SSID to be provided during vdev (re)start to
1503 * handle hidden SSID properly.
1504 *
1505 * Vdev restart must be done after vdev has been both started and
1506 * upped. Otherwise some firmware revisions (at least 10.2) fail to
1507 * deliver vdev restart response event causing timeouts during vdev
1508 * syncing in ath10k.
1509 *
1510 * Note: The vdev down/up and template reinstallation could be skipped
1511 * since only wmi-tlv firmware are known to have beacon offload and
1512 * wmi-tlv doesn't seem to misbehave like 10.2 wrt vdev restart
1513 * response delivery. It's probably more robust to keep it as is.
1514 */
1515 if (!test_bit(WMI_SERVICE_BEACON_OFFLOAD, ar->wmi.svc_map))
1516 return 0;
1517
1518 if (WARN_ON(!arvif->is_started))
1519 return -EINVAL;
1520
1521 if (WARN_ON(!arvif->is_up))
1522 return -EINVAL;
1523
1524 if (WARN_ON(ath10k_mac_vif_chan(arvif->vif, &def)))
1525 return -EINVAL;
1526
1527 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id);
1528 if (ret) {
1529 ath10k_warn(ar, "failed to bring down ap vdev %i: %d\n",
1530 arvif->vdev_id, ret);
1531 return ret;
1532 }
1533
1534 /* Vdev down reset beacon & presp templates. Reinstall them. Otherwise
1535 * firmware will crash upon vdev up.
1536 */
1537
1538 ret = ath10k_mac_setup_bcn_tmpl(arvif);
1539 if (ret) {
1540 ath10k_warn(ar, "failed to update beacon template: %d\n", ret);
1541 return ret;
1542 }
1543
1544 ret = ath10k_mac_setup_prb_tmpl(arvif);
1545 if (ret) {
1546 ath10k_warn(ar, "failed to update presp template: %d\n", ret);
1547 return ret;
1548 }
1549
1550 ret = ath10k_vdev_restart(arvif, &def);
1551 if (ret) {
1552 ath10k_warn(ar, "failed to restart ap vdev %i: %d\n",
1553 arvif->vdev_id, ret);
1554 return ret;
1555 }
1556
1557 ret = ath10k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid,
1558 arvif->bssid);
1559 if (ret) {
1560 ath10k_warn(ar, "failed to bring up ap vdev %i: %d\n",
1561 arvif->vdev_id, ret);
1562 return ret;
1563 }
1564
1565 return 0;
1566 }
1567
1568 static void ath10k_control_beaconing(struct ath10k_vif *arvif,
1569 struct ieee80211_bss_conf *info)
1570 {
1571 struct ath10k *ar = arvif->ar;
1572 int ret = 0;
1573
1574 lockdep_assert_held(&arvif->ar->conf_mutex);
1575
1576 if (!info->enable_beacon) {
1577 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id);
1578 if (ret)
1579 ath10k_warn(ar, "failed to down vdev_id %i: %d\n",
1580 arvif->vdev_id, ret);
1581
1582 arvif->is_up = false;
1583
1584 spin_lock_bh(&arvif->ar->data_lock);
1585 ath10k_mac_vif_beacon_free(arvif);
1586 spin_unlock_bh(&arvif->ar->data_lock);
1587
1588 return;
1589 }
1590
1591 arvif->tx_seq_no = 0x1000;
1592
1593 arvif->aid = 0;
1594 ether_addr_copy(arvif->bssid, info->bssid);
1595
1596 ret = ath10k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid,
1597 arvif->bssid);
1598 if (ret) {
1599 ath10k_warn(ar, "failed to bring up vdev %d: %i\n",
1600 arvif->vdev_id, ret);
1601 return;
1602 }
1603
1604 arvif->is_up = true;
1605
1606 ret = ath10k_mac_vif_fix_hidden_ssid(arvif);
1607 if (ret) {
1608 ath10k_warn(ar, "failed to fix hidden ssid for vdev %i, expect trouble: %d\n",
1609 arvif->vdev_id, ret);
1610 return;
1611 }
1612
1613 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d up\n", arvif->vdev_id);
1614 }
1615
1616 static void ath10k_control_ibss(struct ath10k_vif *arvif,
1617 struct ieee80211_bss_conf *info,
1618 const u8 self_peer[ETH_ALEN])
1619 {
1620 struct ath10k *ar = arvif->ar;
1621 u32 vdev_param;
1622 int ret = 0;
1623
1624 lockdep_assert_held(&arvif->ar->conf_mutex);
1625
1626 if (!info->ibss_joined) {
1627 if (is_zero_ether_addr(arvif->bssid))
1628 return;
1629
1630 eth_zero_addr(arvif->bssid);
1631
1632 return;
1633 }
1634
1635 vdev_param = arvif->ar->wmi.vdev_param->atim_window;
1636 ret = ath10k_wmi_vdev_set_param(arvif->ar, arvif->vdev_id, vdev_param,
1637 ATH10K_DEFAULT_ATIM);
1638 if (ret)
1639 ath10k_warn(ar, "failed to set IBSS ATIM for vdev %d: %d\n",
1640 arvif->vdev_id, ret);
1641 }
1642
1643 static int ath10k_mac_vif_recalc_ps_wake_threshold(struct ath10k_vif *arvif)
1644 {
1645 struct ath10k *ar = arvif->ar;
1646 u32 param;
1647 u32 value;
1648 int ret;
1649
1650 lockdep_assert_held(&arvif->ar->conf_mutex);
1651
1652 if (arvif->u.sta.uapsd)
1653 value = WMI_STA_PS_TX_WAKE_THRESHOLD_NEVER;
1654 else
1655 value = WMI_STA_PS_TX_WAKE_THRESHOLD_ALWAYS;
1656
1657 param = WMI_STA_PS_PARAM_TX_WAKE_THRESHOLD;
1658 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, param, value);
1659 if (ret) {
1660 ath10k_warn(ar, "failed to submit ps wake threshold %u on vdev %i: %d\n",
1661 value, arvif->vdev_id, ret);
1662 return ret;
1663 }
1664
1665 return 0;
1666 }
1667
1668 static int ath10k_mac_vif_recalc_ps_poll_count(struct ath10k_vif *arvif)
1669 {
1670 struct ath10k *ar = arvif->ar;
1671 u32 param;
1672 u32 value;
1673 int ret;
1674
1675 lockdep_assert_held(&arvif->ar->conf_mutex);
1676
1677 if (arvif->u.sta.uapsd)
1678 value = WMI_STA_PS_PSPOLL_COUNT_UAPSD;
1679 else
1680 value = WMI_STA_PS_PSPOLL_COUNT_NO_MAX;
1681
1682 param = WMI_STA_PS_PARAM_PSPOLL_COUNT;
1683 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
1684 param, value);
1685 if (ret) {
1686 ath10k_warn(ar, "failed to submit ps poll count %u on vdev %i: %d\n",
1687 value, arvif->vdev_id, ret);
1688 return ret;
1689 }
1690
1691 return 0;
1692 }
1693
1694 static int ath10k_mac_num_vifs_started(struct ath10k *ar)
1695 {
1696 struct ath10k_vif *arvif;
1697 int num = 0;
1698
1699 lockdep_assert_held(&ar->conf_mutex);
1700
1701 list_for_each_entry(arvif, &ar->arvifs, list)
1702 if (arvif->is_started)
1703 num++;
1704
1705 return num;
1706 }
1707
1708 static int ath10k_mac_vif_setup_ps(struct ath10k_vif *arvif)
1709 {
1710 struct ath10k *ar = arvif->ar;
1711 struct ieee80211_vif *vif = arvif->vif;
1712 struct ieee80211_conf *conf = &ar->hw->conf;
1713 enum wmi_sta_powersave_param param;
1714 enum wmi_sta_ps_mode psmode;
1715 int ret;
1716 int ps_timeout;
1717 bool enable_ps;
1718
1719 lockdep_assert_held(&arvif->ar->conf_mutex);
1720
1721 if (arvif->vif->type != NL80211_IFTYPE_STATION)
1722 return 0;
1723
1724 enable_ps = arvif->ps;
1725
1726 if (enable_ps && ath10k_mac_num_vifs_started(ar) > 1 &&
1727 !test_bit(ATH10K_FW_FEATURE_MULTI_VIF_PS_SUPPORT,
1728 ar->fw_features)) {
1729 ath10k_warn(ar, "refusing to enable ps on vdev %i: not supported by fw\n",
1730 arvif->vdev_id);
1731 enable_ps = false;
1732 }
1733
1734 if (!arvif->is_started) {
1735 /* mac80211 can update vif powersave state while disconnected.
1736 * Firmware doesn't behave nicely and consumes more power than
1737 * necessary if PS is disabled on a non-started vdev. Hence
1738 * force-enable PS for non-running vdevs.
1739 */
1740 psmode = WMI_STA_PS_MODE_ENABLED;
1741 } else if (enable_ps) {
1742 psmode = WMI_STA_PS_MODE_ENABLED;
1743 param = WMI_STA_PS_PARAM_INACTIVITY_TIME;
1744
1745 ps_timeout = conf->dynamic_ps_timeout;
1746 if (ps_timeout == 0) {
1747 /* Firmware doesn't like 0 */
1748 ps_timeout = ieee80211_tu_to_usec(
1749 vif->bss_conf.beacon_int) / 1000;
1750 }
1751
1752 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, param,
1753 ps_timeout);
1754 if (ret) {
1755 ath10k_warn(ar, "failed to set inactivity time for vdev %d: %i\n",
1756 arvif->vdev_id, ret);
1757 return ret;
1758 }
1759 } else {
1760 psmode = WMI_STA_PS_MODE_DISABLED;
1761 }
1762
1763 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d psmode %s\n",
1764 arvif->vdev_id, psmode ? "enable" : "disable");
1765
1766 ret = ath10k_wmi_set_psmode(ar, arvif->vdev_id, psmode);
1767 if (ret) {
1768 ath10k_warn(ar, "failed to set PS Mode %d for vdev %d: %d\n",
1769 psmode, arvif->vdev_id, ret);
1770 return ret;
1771 }
1772
1773 return 0;
1774 }
1775
1776 static int ath10k_mac_vif_disable_keepalive(struct ath10k_vif *arvif)
1777 {
1778 struct ath10k *ar = arvif->ar;
1779 struct wmi_sta_keepalive_arg arg = {};
1780 int ret;
1781
1782 lockdep_assert_held(&arvif->ar->conf_mutex);
1783
1784 if (arvif->vdev_type != WMI_VDEV_TYPE_STA)
1785 return 0;
1786
1787 if (!test_bit(WMI_SERVICE_STA_KEEP_ALIVE, ar->wmi.svc_map))
1788 return 0;
1789
1790 /* Some firmware revisions have a bug and ignore the `enabled` field.
1791 * Instead use the interval to disable the keepalive.
1792 */
1793 arg.vdev_id = arvif->vdev_id;
1794 arg.enabled = 1;
1795 arg.method = WMI_STA_KEEPALIVE_METHOD_NULL_FRAME;
1796 arg.interval = WMI_STA_KEEPALIVE_INTERVAL_DISABLE;
1797
1798 ret = ath10k_wmi_sta_keepalive(ar, &arg);
1799 if (ret) {
1800 ath10k_warn(ar, "failed to submit keepalive on vdev %i: %d\n",
1801 arvif->vdev_id, ret);
1802 return ret;
1803 }
1804
1805 return 0;
1806 }
1807
1808 static void ath10k_mac_vif_ap_csa_count_down(struct ath10k_vif *arvif)
1809 {
1810 struct ath10k *ar = arvif->ar;
1811 struct ieee80211_vif *vif = arvif->vif;
1812 int ret;
1813
1814 lockdep_assert_held(&arvif->ar->conf_mutex);
1815
1816 if (WARN_ON(!test_bit(WMI_SERVICE_BEACON_OFFLOAD, ar->wmi.svc_map)))
1817 return;
1818
1819 if (arvif->vdev_type != WMI_VDEV_TYPE_AP)
1820 return;
1821
1822 if (!vif->csa_active)
1823 return;
1824
1825 if (!arvif->is_up)
1826 return;
1827
1828 if (!ieee80211_csa_is_complete(vif)) {
1829 ieee80211_csa_update_counter(vif);
1830
1831 ret = ath10k_mac_setup_bcn_tmpl(arvif);
1832 if (ret)
1833 ath10k_warn(ar, "failed to update bcn tmpl during csa: %d\n",
1834 ret);
1835
1836 ret = ath10k_mac_setup_prb_tmpl(arvif);
1837 if (ret)
1838 ath10k_warn(ar, "failed to update prb tmpl during csa: %d\n",
1839 ret);
1840 } else {
1841 ieee80211_csa_finish(vif);
1842 }
1843 }
1844
1845 static void ath10k_mac_vif_ap_csa_work(struct work_struct *work)
1846 {
1847 struct ath10k_vif *arvif = container_of(work, struct ath10k_vif,
1848 ap_csa_work);
1849 struct ath10k *ar = arvif->ar;
1850
1851 mutex_lock(&ar->conf_mutex);
1852 ath10k_mac_vif_ap_csa_count_down(arvif);
1853 mutex_unlock(&ar->conf_mutex);
1854 }
1855
1856 static void ath10k_mac_handle_beacon_iter(void *data, u8 *mac,
1857 struct ieee80211_vif *vif)
1858 {
1859 struct sk_buff *skb = data;
1860 struct ieee80211_mgmt *mgmt = (void *)skb->data;
1861 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1862
1863 if (vif->type != NL80211_IFTYPE_STATION)
1864 return;
1865
1866 if (!ether_addr_equal(mgmt->bssid, vif->bss_conf.bssid))
1867 return;
1868
1869 cancel_delayed_work(&arvif->connection_loss_work);
1870 }
1871
1872 void ath10k_mac_handle_beacon(struct ath10k *ar, struct sk_buff *skb)
1873 {
1874 ieee80211_iterate_active_interfaces_atomic(ar->hw,
1875 IEEE80211_IFACE_ITER_NORMAL,
1876 ath10k_mac_handle_beacon_iter,
1877 skb);
1878 }
1879
1880 static void ath10k_mac_handle_beacon_miss_iter(void *data, u8 *mac,
1881 struct ieee80211_vif *vif)
1882 {
1883 u32 *vdev_id = data;
1884 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1885 struct ath10k *ar = arvif->ar;
1886 struct ieee80211_hw *hw = ar->hw;
1887
1888 if (arvif->vdev_id != *vdev_id)
1889 return;
1890
1891 if (!arvif->is_up)
1892 return;
1893
1894 ieee80211_beacon_loss(vif);
1895
1896 /* Firmware doesn't report beacon loss events repeatedly. If AP probe
1897 * (done by mac80211) succeeds but beacons do not resume then it
1898 * doesn't make sense to continue operation. Queue connection loss work
1899 * which can be cancelled when beacon is received.
1900 */
1901 ieee80211_queue_delayed_work(hw, &arvif->connection_loss_work,
1902 ATH10K_CONNECTION_LOSS_HZ);
1903 }
1904
1905 void ath10k_mac_handle_beacon_miss(struct ath10k *ar, u32 vdev_id)
1906 {
1907 ieee80211_iterate_active_interfaces_atomic(ar->hw,
1908 IEEE80211_IFACE_ITER_NORMAL,
1909 ath10k_mac_handle_beacon_miss_iter,
1910 &vdev_id);
1911 }
1912
1913 static void ath10k_mac_vif_sta_connection_loss_work(struct work_struct *work)
1914 {
1915 struct ath10k_vif *arvif = container_of(work, struct ath10k_vif,
1916 connection_loss_work.work);
1917 struct ieee80211_vif *vif = arvif->vif;
1918
1919 if (!arvif->is_up)
1920 return;
1921
1922 ieee80211_connection_loss(vif);
1923 }
1924
1925 /**********************/
1926 /* Station management */
1927 /**********************/
1928
1929 static u32 ath10k_peer_assoc_h_listen_intval(struct ath10k *ar,
1930 struct ieee80211_vif *vif)
1931 {
1932 /* Some firmware revisions have unstable STA powersave when listen
1933 * interval is set too high (e.g. 5). The symptoms are firmware doesn't
1934 * generate NullFunc frames properly even if buffered frames have been
1935 * indicated in Beacon TIM. Firmware would seldom wake up to pull
1936 * buffered frames. Often pinging the device from AP would simply fail.
1937 *
1938 * As a workaround set it to 1.
1939 */
1940 if (vif->type == NL80211_IFTYPE_STATION)
1941 return 1;
1942
1943 return ar->hw->conf.listen_interval;
1944 }
1945
1946 static void ath10k_peer_assoc_h_basic(struct ath10k *ar,
1947 struct ieee80211_vif *vif,
1948 struct ieee80211_sta *sta,
1949 struct wmi_peer_assoc_complete_arg *arg)
1950 {
1951 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1952 u32 aid;
1953
1954 lockdep_assert_held(&ar->conf_mutex);
1955
1956 if (vif->type == NL80211_IFTYPE_STATION)
1957 aid = vif->bss_conf.aid;
1958 else
1959 aid = sta->aid;
1960
1961 ether_addr_copy(arg->addr, sta->addr);
1962 arg->vdev_id = arvif->vdev_id;
1963 arg->peer_aid = aid;
1964 arg->peer_flags |= arvif->ar->wmi.peer_flags->auth;
1965 arg->peer_listen_intval = ath10k_peer_assoc_h_listen_intval(ar, vif);
1966 arg->peer_num_spatial_streams = 1;
1967 arg->peer_caps = vif->bss_conf.assoc_capability;
1968 }
1969
1970 static void ath10k_peer_assoc_h_crypto(struct ath10k *ar,
1971 struct ieee80211_vif *vif,
1972 struct ieee80211_sta *sta,
1973 struct wmi_peer_assoc_complete_arg *arg)
1974 {
1975 struct ieee80211_bss_conf *info = &vif->bss_conf;
1976 struct cfg80211_chan_def def;
1977 struct cfg80211_bss *bss;
1978 const u8 *rsnie = NULL;
1979 const u8 *wpaie = NULL;
1980
1981 lockdep_assert_held(&ar->conf_mutex);
1982
1983 if (WARN_ON(ath10k_mac_vif_chan(vif, &def)))
1984 return;
1985
1986 bss = cfg80211_get_bss(ar->hw->wiphy, def.chan, info->bssid, NULL, 0,
1987 IEEE80211_BSS_TYPE_ANY, IEEE80211_PRIVACY_ANY);
1988 if (bss) {
1989 const struct cfg80211_bss_ies *ies;
1990
1991 rcu_read_lock();
1992 rsnie = ieee80211_bss_get_ie(bss, WLAN_EID_RSN);
1993
1994 ies = rcu_dereference(bss->ies);
1995
1996 wpaie = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
1997 WLAN_OUI_TYPE_MICROSOFT_WPA,
1998 ies->data,
1999 ies->len);
2000 rcu_read_unlock();
2001 cfg80211_put_bss(ar->hw->wiphy, bss);
2002 }
2003
2004 /* FIXME: base on RSN IE/WPA IE is a correct idea? */
2005 if (rsnie || wpaie) {
2006 ath10k_dbg(ar, ATH10K_DBG_WMI, "%s: rsn ie found\n", __func__);
2007 arg->peer_flags |= ar->wmi.peer_flags->need_ptk_4_way;
2008 }
2009
2010 if (wpaie) {
2011 ath10k_dbg(ar, ATH10K_DBG_WMI, "%s: wpa ie found\n", __func__);
2012 arg->peer_flags |= ar->wmi.peer_flags->need_gtk_2_way;
2013 }
2014
2015 if (sta->mfp &&
2016 test_bit(ATH10K_FW_FEATURE_MFP_SUPPORT, ar->fw_features)) {
2017 arg->peer_flags |= ar->wmi.peer_flags->pmf;
2018 }
2019 }
2020
2021 static void ath10k_peer_assoc_h_rates(struct ath10k *ar,
2022 struct ieee80211_vif *vif,
2023 struct ieee80211_sta *sta,
2024 struct wmi_peer_assoc_complete_arg *arg)
2025 {
2026 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2027 struct wmi_rate_set_arg *rateset = &arg->peer_legacy_rates;
2028 struct cfg80211_chan_def def;
2029 const struct ieee80211_supported_band *sband;
2030 const struct ieee80211_rate *rates;
2031 enum ieee80211_band band;
2032 u32 ratemask;
2033 u8 rate;
2034 int i;
2035
2036 lockdep_assert_held(&ar->conf_mutex);
2037
2038 if (WARN_ON(ath10k_mac_vif_chan(vif, &def)))
2039 return;
2040
2041 band = def.chan->band;
2042 sband = ar->hw->wiphy->bands[band];
2043 ratemask = sta->supp_rates[band];
2044 ratemask &= arvif->bitrate_mask.control[band].legacy;
2045 rates = sband->bitrates;
2046
2047 rateset->num_rates = 0;
2048
2049 for (i = 0; i < 32; i++, ratemask >>= 1, rates++) {
2050 if (!(ratemask & 1))
2051 continue;
2052
2053 rate = ath10k_mac_bitrate_to_rate(rates->bitrate);
2054 rateset->rates[rateset->num_rates] = rate;
2055 rateset->num_rates++;
2056 }
2057 }
2058
2059 static bool
2060 ath10k_peer_assoc_h_ht_masked(const u8 ht_mcs_mask[IEEE80211_HT_MCS_MASK_LEN])
2061 {
2062 int nss;
2063
2064 for (nss = 0; nss < IEEE80211_HT_MCS_MASK_LEN; nss++)
2065 if (ht_mcs_mask[nss])
2066 return false;
2067
2068 return true;
2069 }
2070
2071 static bool
2072 ath10k_peer_assoc_h_vht_masked(const u16 vht_mcs_mask[NL80211_VHT_NSS_MAX])
2073 {
2074 int nss;
2075
2076 for (nss = 0; nss < NL80211_VHT_NSS_MAX; nss++)
2077 if (vht_mcs_mask[nss])
2078 return false;
2079
2080 return true;
2081 }
2082
2083 static void ath10k_peer_assoc_h_ht(struct ath10k *ar,
2084 struct ieee80211_vif *vif,
2085 struct ieee80211_sta *sta,
2086 struct wmi_peer_assoc_complete_arg *arg)
2087 {
2088 const struct ieee80211_sta_ht_cap *ht_cap = &sta->ht_cap;
2089 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2090 struct cfg80211_chan_def def;
2091 enum ieee80211_band band;
2092 const u8 *ht_mcs_mask;
2093 const u16 *vht_mcs_mask;
2094 int i, n;
2095 u8 max_nss;
2096 u32 stbc;
2097
2098 lockdep_assert_held(&ar->conf_mutex);
2099
2100 if (WARN_ON(ath10k_mac_vif_chan(vif, &def)))
2101 return;
2102
2103 if (!ht_cap->ht_supported)
2104 return;
2105
2106 band = def.chan->band;
2107 ht_mcs_mask = arvif->bitrate_mask.control[band].ht_mcs;
2108 vht_mcs_mask = arvif->bitrate_mask.control[band].vht_mcs;
2109
2110 if (ath10k_peer_assoc_h_ht_masked(ht_mcs_mask) &&
2111 ath10k_peer_assoc_h_vht_masked(vht_mcs_mask))
2112 return;
2113
2114 arg->peer_flags |= ar->wmi.peer_flags->ht;
2115 arg->peer_max_mpdu = (1 << (IEEE80211_HT_MAX_AMPDU_FACTOR +
2116 ht_cap->ampdu_factor)) - 1;
2117
2118 arg->peer_mpdu_density =
2119 ath10k_parse_mpdudensity(ht_cap->ampdu_density);
2120
2121 arg->peer_ht_caps = ht_cap->cap;
2122 arg->peer_rate_caps |= WMI_RC_HT_FLAG;
2123
2124 if (ht_cap->cap & IEEE80211_HT_CAP_LDPC_CODING)
2125 arg->peer_flags |= ar->wmi.peer_flags->ldbc;
2126
2127 if (sta->bandwidth >= IEEE80211_STA_RX_BW_40) {
2128 arg->peer_flags |= ar->wmi.peer_flags->bw40;
2129 arg->peer_rate_caps |= WMI_RC_CW40_FLAG;
2130 }
2131
2132 if (arvif->bitrate_mask.control[band].gi != NL80211_TXRATE_FORCE_LGI) {
2133 if (ht_cap->cap & IEEE80211_HT_CAP_SGI_20)
2134 arg->peer_rate_caps |= WMI_RC_SGI_FLAG;
2135
2136 if (ht_cap->cap & IEEE80211_HT_CAP_SGI_40)
2137 arg->peer_rate_caps |= WMI_RC_SGI_FLAG;
2138 }
2139
2140 if (ht_cap->cap & IEEE80211_HT_CAP_TX_STBC) {
2141 arg->peer_rate_caps |= WMI_RC_TX_STBC_FLAG;
2142 arg->peer_flags |= ar->wmi.peer_flags->stbc;
2143 }
2144
2145 if (ht_cap->cap & IEEE80211_HT_CAP_RX_STBC) {
2146 stbc = ht_cap->cap & IEEE80211_HT_CAP_RX_STBC;
2147 stbc = stbc >> IEEE80211_HT_CAP_RX_STBC_SHIFT;
2148 stbc = stbc << WMI_RC_RX_STBC_FLAG_S;
2149 arg->peer_rate_caps |= stbc;
2150 arg->peer_flags |= ar->wmi.peer_flags->stbc;
2151 }
2152
2153 if (ht_cap->mcs.rx_mask[1] && ht_cap->mcs.rx_mask[2])
2154 arg->peer_rate_caps |= WMI_RC_TS_FLAG;
2155 else if (ht_cap->mcs.rx_mask[1])
2156 arg->peer_rate_caps |= WMI_RC_DS_FLAG;
2157
2158 for (i = 0, n = 0, max_nss = 0; i < IEEE80211_HT_MCS_MASK_LEN * 8; i++)
2159 if ((ht_cap->mcs.rx_mask[i / 8] & BIT(i % 8)) &&
2160 (ht_mcs_mask[i / 8] & BIT(i % 8))) {
2161 max_nss = (i / 8) + 1;
2162 arg->peer_ht_rates.rates[n++] = i;
2163 }
2164
2165 /*
2166 * This is a workaround for HT-enabled STAs which break the spec
2167 * and have no HT capabilities RX mask (no HT RX MCS map).
2168 *
2169 * As per spec, in section 20.3.5 Modulation and coding scheme (MCS),
2170 * MCS 0 through 7 are mandatory in 20MHz with 800 ns GI at all STAs.
2171 *
2172 * Firmware asserts if such situation occurs.
2173 */
2174 if (n == 0) {
2175 arg->peer_ht_rates.num_rates = 8;
2176 for (i = 0; i < arg->peer_ht_rates.num_rates; i++)
2177 arg->peer_ht_rates.rates[i] = i;
2178 } else {
2179 arg->peer_ht_rates.num_rates = n;
2180 arg->peer_num_spatial_streams = min(sta->rx_nss, max_nss);
2181 }
2182
2183 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac ht peer %pM mcs cnt %d nss %d\n",
2184 arg->addr,
2185 arg->peer_ht_rates.num_rates,
2186 arg->peer_num_spatial_streams);
2187 }
2188
2189 static int ath10k_peer_assoc_qos_ap(struct ath10k *ar,
2190 struct ath10k_vif *arvif,
2191 struct ieee80211_sta *sta)
2192 {
2193 u32 uapsd = 0;
2194 u32 max_sp = 0;
2195 int ret = 0;
2196
2197 lockdep_assert_held(&ar->conf_mutex);
2198
2199 if (sta->wme && sta->uapsd_queues) {
2200 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac uapsd_queues 0x%x max_sp %d\n",
2201 sta->uapsd_queues, sta->max_sp);
2202
2203 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_VO)
2204 uapsd |= WMI_AP_PS_UAPSD_AC3_DELIVERY_EN |
2205 WMI_AP_PS_UAPSD_AC3_TRIGGER_EN;
2206 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_VI)
2207 uapsd |= WMI_AP_PS_UAPSD_AC2_DELIVERY_EN |
2208 WMI_AP_PS_UAPSD_AC2_TRIGGER_EN;
2209 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_BK)
2210 uapsd |= WMI_AP_PS_UAPSD_AC1_DELIVERY_EN |
2211 WMI_AP_PS_UAPSD_AC1_TRIGGER_EN;
2212 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_BE)
2213 uapsd |= WMI_AP_PS_UAPSD_AC0_DELIVERY_EN |
2214 WMI_AP_PS_UAPSD_AC0_TRIGGER_EN;
2215
2216 if (sta->max_sp < MAX_WMI_AP_PS_PEER_PARAM_MAX_SP)
2217 max_sp = sta->max_sp;
2218
2219 ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id,
2220 sta->addr,
2221 WMI_AP_PS_PEER_PARAM_UAPSD,
2222 uapsd);
2223 if (ret) {
2224 ath10k_warn(ar, "failed to set ap ps peer param uapsd for vdev %i: %d\n",
2225 arvif->vdev_id, ret);
2226 return ret;
2227 }
2228
2229 ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id,
2230 sta->addr,
2231 WMI_AP_PS_PEER_PARAM_MAX_SP,
2232 max_sp);
2233 if (ret) {
2234 ath10k_warn(ar, "failed to set ap ps peer param max sp for vdev %i: %d\n",
2235 arvif->vdev_id, ret);
2236 return ret;
2237 }
2238
2239 /* TODO setup this based on STA listen interval and
2240 beacon interval. Currently we don't know
2241 sta->listen_interval - mac80211 patch required.
2242 Currently use 10 seconds */
2243 ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id, sta->addr,
2244 WMI_AP_PS_PEER_PARAM_AGEOUT_TIME,
2245 10);
2246 if (ret) {
2247 ath10k_warn(ar, "failed to set ap ps peer param ageout time for vdev %i: %d\n",
2248 arvif->vdev_id, ret);
2249 return ret;
2250 }
2251 }
2252
2253 return 0;
2254 }
2255
2256 static u16
2257 ath10k_peer_assoc_h_vht_limit(u16 tx_mcs_set,
2258 const u16 vht_mcs_limit[NL80211_VHT_NSS_MAX])
2259 {
2260 int idx_limit;
2261 int nss;
2262 u16 mcs_map;
2263 u16 mcs;
2264
2265 for (nss = 0; nss < NL80211_VHT_NSS_MAX; nss++) {
2266 mcs_map = ath10k_mac_get_max_vht_mcs_map(tx_mcs_set, nss) &
2267 vht_mcs_limit[nss];
2268
2269 if (mcs_map)
2270 idx_limit = fls(mcs_map) - 1;
2271 else
2272 idx_limit = -1;
2273
2274 switch (idx_limit) {
2275 case 0: /* fall through */
2276 case 1: /* fall through */
2277 case 2: /* fall through */
2278 case 3: /* fall through */
2279 case 4: /* fall through */
2280 case 5: /* fall through */
2281 case 6: /* fall through */
2282 default:
2283 /* see ath10k_mac_can_set_bitrate_mask() */
2284 WARN_ON(1);
2285 /* fall through */
2286 case -1:
2287 mcs = IEEE80211_VHT_MCS_NOT_SUPPORTED;
2288 break;
2289 case 7:
2290 mcs = IEEE80211_VHT_MCS_SUPPORT_0_7;
2291 break;
2292 case 8:
2293 mcs = IEEE80211_VHT_MCS_SUPPORT_0_8;
2294 break;
2295 case 9:
2296 mcs = IEEE80211_VHT_MCS_SUPPORT_0_9;
2297 break;
2298 }
2299
2300 tx_mcs_set &= ~(0x3 << (nss * 2));
2301 tx_mcs_set |= mcs << (nss * 2);
2302 }
2303
2304 return tx_mcs_set;
2305 }
2306
2307 static void ath10k_peer_assoc_h_vht(struct ath10k *ar,
2308 struct ieee80211_vif *vif,
2309 struct ieee80211_sta *sta,
2310 struct wmi_peer_assoc_complete_arg *arg)
2311 {
2312 const struct ieee80211_sta_vht_cap *vht_cap = &sta->vht_cap;
2313 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2314 struct cfg80211_chan_def def;
2315 enum ieee80211_band band;
2316 const u16 *vht_mcs_mask;
2317 u8 ampdu_factor;
2318
2319 if (WARN_ON(ath10k_mac_vif_chan(vif, &def)))
2320 return;
2321
2322 if (!vht_cap->vht_supported)
2323 return;
2324
2325 band = def.chan->band;
2326 vht_mcs_mask = arvif->bitrate_mask.control[band].vht_mcs;
2327
2328 if (ath10k_peer_assoc_h_vht_masked(vht_mcs_mask))
2329 return;
2330
2331 arg->peer_flags |= ar->wmi.peer_flags->vht;
2332
2333 if (def.chan->band == IEEE80211_BAND_2GHZ)
2334 arg->peer_flags |= ar->wmi.peer_flags->vht_2g;
2335
2336 arg->peer_vht_caps = vht_cap->cap;
2337
2338 ampdu_factor = (vht_cap->cap &
2339 IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK) >>
2340 IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_SHIFT;
2341
2342 /* Workaround: Some Netgear/Linksys 11ac APs set Rx A-MPDU factor to
2343 * zero in VHT IE. Using it would result in degraded throughput.
2344 * arg->peer_max_mpdu at this point contains HT max_mpdu so keep
2345 * it if VHT max_mpdu is smaller. */
2346 arg->peer_max_mpdu = max(arg->peer_max_mpdu,
2347 (1U << (IEEE80211_HT_MAX_AMPDU_FACTOR +
2348 ampdu_factor)) - 1);
2349
2350 if (sta->bandwidth == IEEE80211_STA_RX_BW_80)
2351 arg->peer_flags |= ar->wmi.peer_flags->bw80;
2352
2353 arg->peer_vht_rates.rx_max_rate =
2354 __le16_to_cpu(vht_cap->vht_mcs.rx_highest);
2355 arg->peer_vht_rates.rx_mcs_set =
2356 __le16_to_cpu(vht_cap->vht_mcs.rx_mcs_map);
2357 arg->peer_vht_rates.tx_max_rate =
2358 __le16_to_cpu(vht_cap->vht_mcs.tx_highest);
2359 arg->peer_vht_rates.tx_mcs_set = ath10k_peer_assoc_h_vht_limit(
2360 __le16_to_cpu(vht_cap->vht_mcs.tx_mcs_map), vht_mcs_mask);
2361
2362 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vht peer %pM max_mpdu %d flags 0x%x\n",
2363 sta->addr, arg->peer_max_mpdu, arg->peer_flags);
2364 }
2365
2366 static void ath10k_peer_assoc_h_qos(struct ath10k *ar,
2367 struct ieee80211_vif *vif,
2368 struct ieee80211_sta *sta,
2369 struct wmi_peer_assoc_complete_arg *arg)
2370 {
2371 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2372
2373 switch (arvif->vdev_type) {
2374 case WMI_VDEV_TYPE_AP:
2375 if (sta->wme)
2376 arg->peer_flags |= arvif->ar->wmi.peer_flags->qos;
2377
2378 if (sta->wme && sta->uapsd_queues) {
2379 arg->peer_flags |= arvif->ar->wmi.peer_flags->apsd;
2380 arg->peer_rate_caps |= WMI_RC_UAPSD_FLAG;
2381 }
2382 break;
2383 case WMI_VDEV_TYPE_STA:
2384 if (vif->bss_conf.qos)
2385 arg->peer_flags |= arvif->ar->wmi.peer_flags->qos;
2386 break;
2387 case WMI_VDEV_TYPE_IBSS:
2388 if (sta->wme)
2389 arg->peer_flags |= arvif->ar->wmi.peer_flags->qos;
2390 break;
2391 default:
2392 break;
2393 }
2394
2395 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac peer %pM qos %d\n",
2396 sta->addr, !!(arg->peer_flags &
2397 arvif->ar->wmi.peer_flags->qos));
2398 }
2399
2400 static bool ath10k_mac_sta_has_ofdm_only(struct ieee80211_sta *sta)
2401 {
2402 return sta->supp_rates[IEEE80211_BAND_2GHZ] >>
2403 ATH10K_MAC_FIRST_OFDM_RATE_IDX;
2404 }
2405
2406 static void ath10k_peer_assoc_h_phymode(struct ath10k *ar,
2407 struct ieee80211_vif *vif,
2408 struct ieee80211_sta *sta,
2409 struct wmi_peer_assoc_complete_arg *arg)
2410 {
2411 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2412 struct cfg80211_chan_def def;
2413 enum ieee80211_band band;
2414 const u8 *ht_mcs_mask;
2415 const u16 *vht_mcs_mask;
2416 enum wmi_phy_mode phymode = MODE_UNKNOWN;
2417
2418 if (WARN_ON(ath10k_mac_vif_chan(vif, &def)))
2419 return;
2420
2421 band = def.chan->band;
2422 ht_mcs_mask = arvif->bitrate_mask.control[band].ht_mcs;
2423 vht_mcs_mask = arvif->bitrate_mask.control[band].vht_mcs;
2424
2425 switch (band) {
2426 case IEEE80211_BAND_2GHZ:
2427 if (sta->vht_cap.vht_supported &&
2428 !ath10k_peer_assoc_h_vht_masked(vht_mcs_mask)) {
2429 if (sta->bandwidth == IEEE80211_STA_RX_BW_40)
2430 phymode = MODE_11AC_VHT40;
2431 else
2432 phymode = MODE_11AC_VHT20;
2433 } else if (sta->ht_cap.ht_supported &&
2434 !ath10k_peer_assoc_h_ht_masked(ht_mcs_mask)) {
2435 if (sta->bandwidth == IEEE80211_STA_RX_BW_40)
2436 phymode = MODE_11NG_HT40;
2437 else
2438 phymode = MODE_11NG_HT20;
2439 } else if (ath10k_mac_sta_has_ofdm_only(sta)) {
2440 phymode = MODE_11G;
2441 } else {
2442 phymode = MODE_11B;
2443 }
2444
2445 break;
2446 case IEEE80211_BAND_5GHZ:
2447 /*
2448 * Check VHT first.
2449 */
2450 if (sta->vht_cap.vht_supported &&
2451 !ath10k_peer_assoc_h_vht_masked(vht_mcs_mask)) {
2452 if (sta->bandwidth == IEEE80211_STA_RX_BW_80)
2453 phymode = MODE_11AC_VHT80;
2454 else if (sta->bandwidth == IEEE80211_STA_RX_BW_40)
2455 phymode = MODE_11AC_VHT40;
2456 else if (sta->bandwidth == IEEE80211_STA_RX_BW_20)
2457 phymode = MODE_11AC_VHT20;
2458 } else if (sta->ht_cap.ht_supported &&
2459 !ath10k_peer_assoc_h_ht_masked(ht_mcs_mask)) {
2460 if (sta->bandwidth >= IEEE80211_STA_RX_BW_40)
2461 phymode = MODE_11NA_HT40;
2462 else
2463 phymode = MODE_11NA_HT20;
2464 } else {
2465 phymode = MODE_11A;
2466 }
2467
2468 break;
2469 default:
2470 break;
2471 }
2472
2473 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac peer %pM phymode %s\n",
2474 sta->addr, ath10k_wmi_phymode_str(phymode));
2475
2476 arg->peer_phymode = phymode;
2477 WARN_ON(phymode == MODE_UNKNOWN);
2478 }
2479
2480 static int ath10k_peer_assoc_prepare(struct ath10k *ar,
2481 struct ieee80211_vif *vif,
2482 struct ieee80211_sta *sta,
2483 struct wmi_peer_assoc_complete_arg *arg)
2484 {
2485 lockdep_assert_held(&ar->conf_mutex);
2486
2487 memset(arg, 0, sizeof(*arg));
2488
2489 ath10k_peer_assoc_h_basic(ar, vif, sta, arg);
2490 ath10k_peer_assoc_h_crypto(ar, vif, sta, arg);
2491 ath10k_peer_assoc_h_rates(ar, vif, sta, arg);
2492 ath10k_peer_assoc_h_ht(ar, vif, sta, arg);
2493 ath10k_peer_assoc_h_vht(ar, vif, sta, arg);
2494 ath10k_peer_assoc_h_qos(ar, vif, sta, arg);
2495 ath10k_peer_assoc_h_phymode(ar, vif, sta, arg);
2496
2497 return 0;
2498 }
2499
2500 static const u32 ath10k_smps_map[] = {
2501 [WLAN_HT_CAP_SM_PS_STATIC] = WMI_PEER_SMPS_STATIC,
2502 [WLAN_HT_CAP_SM_PS_DYNAMIC] = WMI_PEER_SMPS_DYNAMIC,
2503 [WLAN_HT_CAP_SM_PS_INVALID] = WMI_PEER_SMPS_PS_NONE,
2504 [WLAN_HT_CAP_SM_PS_DISABLED] = WMI_PEER_SMPS_PS_NONE,
2505 };
2506
2507 static int ath10k_setup_peer_smps(struct ath10k *ar, struct ath10k_vif *arvif,
2508 const u8 *addr,
2509 const struct ieee80211_sta_ht_cap *ht_cap)
2510 {
2511 int smps;
2512
2513 if (!ht_cap->ht_supported)
2514 return 0;
2515
2516 smps = ht_cap->cap & IEEE80211_HT_CAP_SM_PS;
2517 smps >>= IEEE80211_HT_CAP_SM_PS_SHIFT;
2518
2519 if (smps >= ARRAY_SIZE(ath10k_smps_map))
2520 return -EINVAL;
2521
2522 return ath10k_wmi_peer_set_param(ar, arvif->vdev_id, addr,
2523 WMI_PEER_SMPS_STATE,
2524 ath10k_smps_map[smps]);
2525 }
2526
2527 static int ath10k_mac_vif_recalc_txbf(struct ath10k *ar,
2528 struct ieee80211_vif *vif,
2529 struct ieee80211_sta_vht_cap vht_cap)
2530 {
2531 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2532 int ret;
2533 u32 param;
2534 u32 value;
2535
2536 if (ath10k_wmi_get_txbf_conf_scheme(ar) != WMI_TXBF_CONF_AFTER_ASSOC)
2537 return 0;
2538
2539 if (!(ar->vht_cap_info &
2540 (IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE |
2541 IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE |
2542 IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE |
2543 IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE)))
2544 return 0;
2545
2546 param = ar->wmi.vdev_param->txbf;
2547 value = 0;
2548
2549 if (WARN_ON(param == WMI_VDEV_PARAM_UNSUPPORTED))
2550 return 0;
2551
2552 /* The following logic is correct. If a remote STA advertises support
2553 * for being a beamformer then we should enable us being a beamformee.
2554 */
2555
2556 if (ar->vht_cap_info &
2557 (IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE |
2558 IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE)) {
2559 if (vht_cap.cap & IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE)
2560 value |= WMI_VDEV_PARAM_TXBF_SU_TX_BFEE;
2561
2562 if (vht_cap.cap & IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE)
2563 value |= WMI_VDEV_PARAM_TXBF_MU_TX_BFEE;
2564 }
2565
2566 if (ar->vht_cap_info &
2567 (IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE |
2568 IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE)) {
2569 if (vht_cap.cap & IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE)
2570 value |= WMI_VDEV_PARAM_TXBF_SU_TX_BFER;
2571
2572 if (vht_cap.cap & IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE)
2573 value |= WMI_VDEV_PARAM_TXBF_MU_TX_BFER;
2574 }
2575
2576 if (value & WMI_VDEV_PARAM_TXBF_MU_TX_BFEE)
2577 value |= WMI_VDEV_PARAM_TXBF_SU_TX_BFEE;
2578
2579 if (value & WMI_VDEV_PARAM_TXBF_MU_TX_BFER)
2580 value |= WMI_VDEV_PARAM_TXBF_SU_TX_BFER;
2581
2582 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param, value);
2583 if (ret) {
2584 ath10k_warn(ar, "failed to submit vdev param txbf 0x%x: %d\n",
2585 value, ret);
2586 return ret;
2587 }
2588
2589 return 0;
2590 }
2591
2592 /* can be called only in mac80211 callbacks due to `key_count` usage */
2593 static void ath10k_bss_assoc(struct ieee80211_hw *hw,
2594 struct ieee80211_vif *vif,
2595 struct ieee80211_bss_conf *bss_conf)
2596 {
2597 struct ath10k *ar = hw->priv;
2598 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2599 struct ieee80211_sta_ht_cap ht_cap;
2600 struct ieee80211_sta_vht_cap vht_cap;
2601 struct wmi_peer_assoc_complete_arg peer_arg;
2602 struct ieee80211_sta *ap_sta;
2603 int ret;
2604
2605 lockdep_assert_held(&ar->conf_mutex);
2606
2607 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %i assoc bssid %pM aid %d\n",
2608 arvif->vdev_id, arvif->bssid, arvif->aid);
2609
2610 rcu_read_lock();
2611
2612 ap_sta = ieee80211_find_sta(vif, bss_conf->bssid);
2613 if (!ap_sta) {
2614 ath10k_warn(ar, "failed to find station entry for bss %pM vdev %i\n",
2615 bss_conf->bssid, arvif->vdev_id);
2616 rcu_read_unlock();
2617 return;
2618 }
2619
2620 /* ap_sta must be accessed only within rcu section which must be left
2621 * before calling ath10k_setup_peer_smps() which might sleep. */
2622 ht_cap = ap_sta->ht_cap;
2623 vht_cap = ap_sta->vht_cap;
2624
2625 ret = ath10k_peer_assoc_prepare(ar, vif, ap_sta, &peer_arg);
2626 if (ret) {
2627 ath10k_warn(ar, "failed to prepare peer assoc for %pM vdev %i: %d\n",
2628 bss_conf->bssid, arvif->vdev_id, ret);
2629 rcu_read_unlock();
2630 return;
2631 }
2632
2633 rcu_read_unlock();
2634
2635 ret = ath10k_wmi_peer_assoc(ar, &peer_arg);
2636 if (ret) {
2637 ath10k_warn(ar, "failed to run peer assoc for %pM vdev %i: %d\n",
2638 bss_conf->bssid, arvif->vdev_id, ret);
2639 return;
2640 }
2641
2642 ret = ath10k_setup_peer_smps(ar, arvif, bss_conf->bssid, &ht_cap);
2643 if (ret) {
2644 ath10k_warn(ar, "failed to setup peer SMPS for vdev %i: %d\n",
2645 arvif->vdev_id, ret);
2646 return;
2647 }
2648
2649 ret = ath10k_mac_vif_recalc_txbf(ar, vif, vht_cap);
2650 if (ret) {
2651 ath10k_warn(ar, "failed to recalc txbf for vdev %i on bss %pM: %d\n",
2652 arvif->vdev_id, bss_conf->bssid, ret);
2653 return;
2654 }
2655
2656 ath10k_dbg(ar, ATH10K_DBG_MAC,
2657 "mac vdev %d up (associated) bssid %pM aid %d\n",
2658 arvif->vdev_id, bss_conf->bssid, bss_conf->aid);
2659
2660 WARN_ON(arvif->is_up);
2661
2662 arvif->aid = bss_conf->aid;
2663 ether_addr_copy(arvif->bssid, bss_conf->bssid);
2664
2665 ret = ath10k_wmi_vdev_up(ar, arvif->vdev_id, arvif->aid, arvif->bssid);
2666 if (ret) {
2667 ath10k_warn(ar, "failed to set vdev %d up: %d\n",
2668 arvif->vdev_id, ret);
2669 return;
2670 }
2671
2672 arvif->is_up = true;
2673
2674 /* Workaround: Some firmware revisions (tested with qca6174
2675 * WLAN.RM.2.0-00073) have buggy powersave state machine and must be
2676 * poked with peer param command.
2677 */
2678 ret = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, arvif->bssid,
2679 WMI_PEER_DUMMY_VAR, 1);
2680 if (ret) {
2681 ath10k_warn(ar, "failed to poke peer %pM param for ps workaround on vdev %i: %d\n",
2682 arvif->bssid, arvif->vdev_id, ret);
2683 return;
2684 }
2685 }
2686
2687 static void ath10k_bss_disassoc(struct ieee80211_hw *hw,
2688 struct ieee80211_vif *vif)
2689 {
2690 struct ath10k *ar = hw->priv;
2691 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2692 struct ieee80211_sta_vht_cap vht_cap = {};
2693 int ret;
2694
2695 lockdep_assert_held(&ar->conf_mutex);
2696
2697 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %i disassoc bssid %pM\n",
2698 arvif->vdev_id, arvif->bssid);
2699
2700 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id);
2701 if (ret)
2702 ath10k_warn(ar, "faield to down vdev %i: %d\n",
2703 arvif->vdev_id, ret);
2704
2705 arvif->def_wep_key_idx = -1;
2706
2707 ret = ath10k_mac_vif_recalc_txbf(ar, vif, vht_cap);
2708 if (ret) {
2709 ath10k_warn(ar, "failed to recalc txbf for vdev %i: %d\n",
2710 arvif->vdev_id, ret);
2711 return;
2712 }
2713
2714 arvif->is_up = false;
2715
2716 cancel_delayed_work_sync(&arvif->connection_loss_work);
2717 }
2718
2719 static int ath10k_station_assoc(struct ath10k *ar,
2720 struct ieee80211_vif *vif,
2721 struct ieee80211_sta *sta,
2722 bool reassoc)
2723 {
2724 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2725 struct wmi_peer_assoc_complete_arg peer_arg;
2726 int ret = 0;
2727
2728 lockdep_assert_held(&ar->conf_mutex);
2729
2730 ret = ath10k_peer_assoc_prepare(ar, vif, sta, &peer_arg);
2731 if (ret) {
2732 ath10k_warn(ar, "failed to prepare WMI peer assoc for %pM vdev %i: %i\n",
2733 sta->addr, arvif->vdev_id, ret);
2734 return ret;
2735 }
2736
2737 ret = ath10k_wmi_peer_assoc(ar, &peer_arg);
2738 if (ret) {
2739 ath10k_warn(ar, "failed to run peer assoc for STA %pM vdev %i: %d\n",
2740 sta->addr, arvif->vdev_id, ret);
2741 return ret;
2742 }
2743
2744 /* Re-assoc is run only to update supported rates for given station. It
2745 * doesn't make much sense to reconfigure the peer completely.
2746 */
2747 if (!reassoc) {
2748 ret = ath10k_setup_peer_smps(ar, arvif, sta->addr,
2749 &sta->ht_cap);
2750 if (ret) {
2751 ath10k_warn(ar, "failed to setup peer SMPS for vdev %d: %d\n",
2752 arvif->vdev_id, ret);
2753 return ret;
2754 }
2755
2756 ret = ath10k_peer_assoc_qos_ap(ar, arvif, sta);
2757 if (ret) {
2758 ath10k_warn(ar, "failed to set qos params for STA %pM for vdev %i: %d\n",
2759 sta->addr, arvif->vdev_id, ret);
2760 return ret;
2761 }
2762
2763 if (!sta->wme) {
2764 arvif->num_legacy_stations++;
2765 ret = ath10k_recalc_rtscts_prot(arvif);
2766 if (ret) {
2767 ath10k_warn(ar, "failed to recalculate rts/cts prot for vdev %d: %d\n",
2768 arvif->vdev_id, ret);
2769 return ret;
2770 }
2771 }
2772
2773 /* Plumb cached keys only for static WEP */
2774 if (arvif->def_wep_key_idx != -1) {
2775 ret = ath10k_install_peer_wep_keys(arvif, sta->addr);
2776 if (ret) {
2777 ath10k_warn(ar, "failed to install peer wep keys for vdev %i: %d\n",
2778 arvif->vdev_id, ret);
2779 return ret;
2780 }
2781 }
2782 }
2783
2784 return ret;
2785 }
2786
2787 static int ath10k_station_disassoc(struct ath10k *ar,
2788 struct ieee80211_vif *vif,
2789 struct ieee80211_sta *sta)
2790 {
2791 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2792 int ret = 0;
2793
2794 lockdep_assert_held(&ar->conf_mutex);
2795
2796 if (!sta->wme) {
2797 arvif->num_legacy_stations--;
2798 ret = ath10k_recalc_rtscts_prot(arvif);
2799 if (ret) {
2800 ath10k_warn(ar, "failed to recalculate rts/cts prot for vdev %d: %d\n",
2801 arvif->vdev_id, ret);
2802 return ret;
2803 }
2804 }
2805
2806 ret = ath10k_clear_peer_keys(arvif, sta->addr);
2807 if (ret) {
2808 ath10k_warn(ar, "failed to clear all peer wep keys for vdev %i: %d\n",
2809 arvif->vdev_id, ret);
2810 return ret;
2811 }
2812
2813 return ret;
2814 }
2815
2816 /**************/
2817 /* Regulatory */
2818 /**************/
2819
2820 static int ath10k_update_channel_list(struct ath10k *ar)
2821 {
2822 struct ieee80211_hw *hw = ar->hw;
2823 struct ieee80211_supported_band **bands;
2824 enum ieee80211_band band;
2825 struct ieee80211_channel *channel;
2826 struct wmi_scan_chan_list_arg arg = {0};
2827 struct wmi_channel_arg *ch;
2828 bool passive;
2829 int len;
2830 int ret;
2831 int i;
2832
2833 lockdep_assert_held(&ar->conf_mutex);
2834
2835 bands = hw->wiphy->bands;
2836 for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
2837 if (!bands[band])
2838 continue;
2839
2840 for (i = 0; i < bands[band]->n_channels; i++) {
2841 if (bands[band]->channels[i].flags &
2842 IEEE80211_CHAN_DISABLED)
2843 continue;
2844
2845 arg.n_channels++;
2846 }
2847 }
2848
2849 len = sizeof(struct wmi_channel_arg) * arg.n_channels;
2850 arg.channels = kzalloc(len, GFP_KERNEL);
2851 if (!arg.channels)
2852 return -ENOMEM;
2853
2854 ch = arg.channels;
2855 for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
2856 if (!bands[band])
2857 continue;
2858
2859 for (i = 0; i < bands[band]->n_channels; i++) {
2860 channel = &bands[band]->channels[i];
2861
2862 if (channel->flags & IEEE80211_CHAN_DISABLED)
2863 continue;
2864
2865 ch->allow_ht = true;
2866
2867 /* FIXME: when should we really allow VHT? */
2868 ch->allow_vht = true;
2869
2870 ch->allow_ibss =
2871 !(channel->flags & IEEE80211_CHAN_NO_IR);
2872
2873 ch->ht40plus =
2874 !(channel->flags & IEEE80211_CHAN_NO_HT40PLUS);
2875
2876 ch->chan_radar =
2877 !!(channel->flags & IEEE80211_CHAN_RADAR);
2878
2879 passive = channel->flags & IEEE80211_CHAN_NO_IR;
2880 ch->passive = passive;
2881
2882 ch->freq = channel->center_freq;
2883 ch->band_center_freq1 = channel->center_freq;
2884 ch->min_power = 0;
2885 ch->max_power = channel->max_power * 2;
2886 ch->max_reg_power = channel->max_reg_power * 2;
2887 ch->max_antenna_gain = channel->max_antenna_gain * 2;
2888 ch->reg_class_id = 0; /* FIXME */
2889
2890 /* FIXME: why use only legacy modes, why not any
2891 * HT/VHT modes? Would that even make any
2892 * difference? */
2893 if (channel->band == IEEE80211_BAND_2GHZ)
2894 ch->mode = MODE_11G;
2895 else
2896 ch->mode = MODE_11A;
2897
2898 if (WARN_ON_ONCE(ch->mode == MODE_UNKNOWN))
2899 continue;
2900
2901 ath10k_dbg(ar, ATH10K_DBG_WMI,
2902 "mac channel [%zd/%d] freq %d maxpower %d regpower %d antenna %d mode %d\n",
2903 ch - arg.channels, arg.n_channels,
2904 ch->freq, ch->max_power, ch->max_reg_power,
2905 ch->max_antenna_gain, ch->mode);
2906
2907 ch++;
2908 }
2909 }
2910
2911 ret = ath10k_wmi_scan_chan_list(ar, &arg);
2912 kfree(arg.channels);
2913
2914 return ret;
2915 }
2916
2917 static enum wmi_dfs_region
2918 ath10k_mac_get_dfs_region(enum nl80211_dfs_regions dfs_region)
2919 {
2920 switch (dfs_region) {
2921 case NL80211_DFS_UNSET:
2922 return WMI_UNINIT_DFS_DOMAIN;
2923 case NL80211_DFS_FCC:
2924 return WMI_FCC_DFS_DOMAIN;
2925 case NL80211_DFS_ETSI:
2926 return WMI_ETSI_DFS_DOMAIN;
2927 case NL80211_DFS_JP:
2928 return WMI_MKK4_DFS_DOMAIN;
2929 }
2930 return WMI_UNINIT_DFS_DOMAIN;
2931 }
2932
2933 static void ath10k_regd_update(struct ath10k *ar)
2934 {
2935 struct reg_dmn_pair_mapping *regpair;
2936 int ret;
2937 enum wmi_dfs_region wmi_dfs_reg;
2938 enum nl80211_dfs_regions nl_dfs_reg;
2939
2940 lockdep_assert_held(&ar->conf_mutex);
2941
2942 ret = ath10k_update_channel_list(ar);
2943 if (ret)
2944 ath10k_warn(ar, "failed to update channel list: %d\n", ret);
2945
2946 regpair = ar->ath_common.regulatory.regpair;
2947
2948 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector) {
2949 nl_dfs_reg = ar->dfs_detector->region;
2950 wmi_dfs_reg = ath10k_mac_get_dfs_region(nl_dfs_reg);
2951 } else {
2952 wmi_dfs_reg = WMI_UNINIT_DFS_DOMAIN;
2953 }
2954
2955 /* Target allows setting up per-band regdomain but ath_common provides
2956 * a combined one only */
2957 ret = ath10k_wmi_pdev_set_regdomain(ar,
2958 regpair->reg_domain,
2959 regpair->reg_domain, /* 2ghz */
2960 regpair->reg_domain, /* 5ghz */
2961 regpair->reg_2ghz_ctl,
2962 regpair->reg_5ghz_ctl,
2963 wmi_dfs_reg);
2964 if (ret)
2965 ath10k_warn(ar, "failed to set pdev regdomain: %d\n", ret);
2966 }
2967
2968 static void ath10k_reg_notifier(struct wiphy *wiphy,
2969 struct regulatory_request *request)
2970 {
2971 struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
2972 struct ath10k *ar = hw->priv;
2973 bool result;
2974
2975 ath_reg_notifier_apply(wiphy, request, &ar->ath_common.regulatory);
2976
2977 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector) {
2978 ath10k_dbg(ar, ATH10K_DBG_REGULATORY, "dfs region 0x%x\n",
2979 request->dfs_region);
2980 result = ar->dfs_detector->set_dfs_domain(ar->dfs_detector,
2981 request->dfs_region);
2982 if (!result)
2983 ath10k_warn(ar, "DFS region 0x%X not supported, will trigger radar for every pulse\n",
2984 request->dfs_region);
2985 }
2986
2987 mutex_lock(&ar->conf_mutex);
2988 if (ar->state == ATH10K_STATE_ON)
2989 ath10k_regd_update(ar);
2990 mutex_unlock(&ar->conf_mutex);
2991 }
2992
2993 /***************/
2994 /* TX handlers */
2995 /***************/
2996
2997 void ath10k_mac_tx_lock(struct ath10k *ar, int reason)
2998 {
2999 lockdep_assert_held(&ar->htt.tx_lock);
3000
3001 WARN_ON(reason >= ATH10K_TX_PAUSE_MAX);
3002 ar->tx_paused |= BIT(reason);
3003 ieee80211_stop_queues(ar->hw);
3004 }
3005
3006 static void ath10k_mac_tx_unlock_iter(void *data, u8 *mac,
3007 struct ieee80211_vif *vif)
3008 {
3009 struct ath10k *ar = data;
3010 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3011
3012 if (arvif->tx_paused)
3013 return;
3014
3015 ieee80211_wake_queue(ar->hw, arvif->vdev_id);
3016 }
3017
3018 void ath10k_mac_tx_unlock(struct ath10k *ar, int reason)
3019 {
3020 lockdep_assert_held(&ar->htt.tx_lock);
3021
3022 WARN_ON(reason >= ATH10K_TX_PAUSE_MAX);
3023 ar->tx_paused &= ~BIT(reason);
3024
3025 if (ar->tx_paused)
3026 return;
3027
3028 ieee80211_iterate_active_interfaces_atomic(ar->hw,
3029 IEEE80211_IFACE_ITER_RESUME_ALL,
3030 ath10k_mac_tx_unlock_iter,
3031 ar);
3032
3033 ieee80211_wake_queue(ar->hw, ar->hw->offchannel_tx_hw_queue);
3034 }
3035
3036 void ath10k_mac_vif_tx_lock(struct ath10k_vif *arvif, int reason)
3037 {
3038 struct ath10k *ar = arvif->ar;
3039
3040 lockdep_assert_held(&ar->htt.tx_lock);
3041
3042 WARN_ON(reason >= BITS_PER_LONG);
3043 arvif->tx_paused |= BIT(reason);
3044 ieee80211_stop_queue(ar->hw, arvif->vdev_id);
3045 }
3046
3047 void ath10k_mac_vif_tx_unlock(struct ath10k_vif *arvif, int reason)
3048 {
3049 struct ath10k *ar = arvif->ar;
3050
3051 lockdep_assert_held(&ar->htt.tx_lock);
3052
3053 WARN_ON(reason >= BITS_PER_LONG);
3054 arvif->tx_paused &= ~BIT(reason);
3055
3056 if (ar->tx_paused)
3057 return;
3058
3059 if (arvif->tx_paused)
3060 return;
3061
3062 ieee80211_wake_queue(ar->hw, arvif->vdev_id);
3063 }
3064
3065 static void ath10k_mac_vif_handle_tx_pause(struct ath10k_vif *arvif,
3066 enum wmi_tlv_tx_pause_id pause_id,
3067 enum wmi_tlv_tx_pause_action action)
3068 {
3069 struct ath10k *ar = arvif->ar;
3070
3071 lockdep_assert_held(&ar->htt.tx_lock);
3072
3073 switch (action) {
3074 case WMI_TLV_TX_PAUSE_ACTION_STOP:
3075 ath10k_mac_vif_tx_lock(arvif, pause_id);
3076 break;
3077 case WMI_TLV_TX_PAUSE_ACTION_WAKE:
3078 ath10k_mac_vif_tx_unlock(arvif, pause_id);
3079 break;
3080 default:
3081 ath10k_warn(ar, "received unknown tx pause action %d on vdev %i, ignoring\n",
3082 action, arvif->vdev_id);
3083 break;
3084 }
3085 }
3086
3087 struct ath10k_mac_tx_pause {
3088 u32 vdev_id;
3089 enum wmi_tlv_tx_pause_id pause_id;
3090 enum wmi_tlv_tx_pause_action action;
3091 };
3092
3093 static void ath10k_mac_handle_tx_pause_iter(void *data, u8 *mac,
3094 struct ieee80211_vif *vif)
3095 {
3096 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3097 struct ath10k_mac_tx_pause *arg = data;
3098
3099 if (arvif->vdev_id != arg->vdev_id)
3100 return;
3101
3102 ath10k_mac_vif_handle_tx_pause(arvif, arg->pause_id, arg->action);
3103 }
3104
3105 void ath10k_mac_handle_tx_pause_vdev(struct ath10k *ar, u32 vdev_id,
3106 enum wmi_tlv_tx_pause_id pause_id,
3107 enum wmi_tlv_tx_pause_action action)
3108 {
3109 struct ath10k_mac_tx_pause arg = {
3110 .vdev_id = vdev_id,
3111 .pause_id = pause_id,
3112 .action = action,
3113 };
3114
3115 spin_lock_bh(&ar->htt.tx_lock);
3116 ieee80211_iterate_active_interfaces_atomic(ar->hw,
3117 IEEE80211_IFACE_ITER_RESUME_ALL,
3118 ath10k_mac_handle_tx_pause_iter,
3119 &arg);
3120 spin_unlock_bh(&ar->htt.tx_lock);
3121 }
3122
3123 static enum ath10k_hw_txrx_mode
3124 ath10k_mac_tx_h_get_txmode(struct ath10k *ar,
3125 struct ieee80211_vif *vif,
3126 struct ieee80211_sta *sta,
3127 struct sk_buff *skb)
3128 {
3129 const struct ieee80211_hdr *hdr = (void *)skb->data;
3130 __le16 fc = hdr->frame_control;
3131
3132 if (!vif || vif->type == NL80211_IFTYPE_MONITOR)
3133 return ATH10K_HW_TXRX_RAW;
3134
3135 if (ieee80211_is_mgmt(fc))
3136 return ATH10K_HW_TXRX_MGMT;
3137
3138 /* Workaround:
3139 *
3140 * NullFunc frames are mostly used to ping if a client or AP are still
3141 * reachable and responsive. This implies tx status reports must be
3142 * accurate - otherwise either mac80211 or userspace (e.g. hostapd) can
3143 * come to a conclusion that the other end disappeared and tear down
3144 * BSS connection or it can never disconnect from BSS/client (which is
3145 * the case).
3146 *
3147 * Firmware with HTT older than 3.0 delivers incorrect tx status for
3148 * NullFunc frames to driver. However there's a HTT Mgmt Tx command
3149 * which seems to deliver correct tx reports for NullFunc frames. The
3150 * downside of using it is it ignores client powersave state so it can
3151 * end up disconnecting sleeping clients in AP mode. It should fix STA
3152 * mode though because AP don't sleep.
3153 */
3154 if (ar->htt.target_version_major < 3 &&
3155 (ieee80211_is_nullfunc(fc) || ieee80211_is_qos_nullfunc(fc)) &&
3156 !test_bit(ATH10K_FW_FEATURE_HAS_WMI_MGMT_TX, ar->fw_features))
3157 return ATH10K_HW_TXRX_MGMT;
3158
3159 /* Workaround:
3160 *
3161 * Some wmi-tlv firmwares for qca6174 have broken Tx key selection for
3162 * NativeWifi txmode - it selects AP key instead of peer key. It seems
3163 * to work with Ethernet txmode so use it.
3164 *
3165 * FIXME: Check if raw mode works with TDLS.
3166 */
3167 if (ieee80211_is_data_present(fc) && sta && sta->tdls)
3168 return ATH10K_HW_TXRX_ETHERNET;
3169
3170 if (test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags))
3171 return ATH10K_HW_TXRX_RAW;
3172
3173 return ATH10K_HW_TXRX_NATIVE_WIFI;
3174 }
3175
3176 static bool ath10k_tx_h_use_hwcrypto(struct ieee80211_vif *vif,
3177 struct sk_buff *skb)
3178 {
3179 const struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
3180 const struct ieee80211_hdr *hdr = (void *)skb->data;
3181 const u32 mask = IEEE80211_TX_INTFL_DONT_ENCRYPT |
3182 IEEE80211_TX_CTL_INJECTED;
3183
3184 if (!ieee80211_has_protected(hdr->frame_control))
3185 return false;
3186
3187 if ((info->flags & mask) == mask)
3188 return false;
3189
3190 if (vif)
3191 return !ath10k_vif_to_arvif(vif)->nohwcrypt;
3192
3193 return true;
3194 }
3195
3196 /* HTT Tx uses Native Wifi tx mode which expects 802.11 frames without QoS
3197 * Control in the header.
3198 */
3199 static void ath10k_tx_h_nwifi(struct ieee80211_hw *hw, struct sk_buff *skb)
3200 {
3201 struct ieee80211_hdr *hdr = (void *)skb->data;
3202 struct ath10k_skb_cb *cb = ATH10K_SKB_CB(skb);
3203 u8 *qos_ctl;
3204
3205 if (!ieee80211_is_data_qos(hdr->frame_control))
3206 return;
3207
3208 qos_ctl = ieee80211_get_qos_ctl(hdr);
3209 memmove(skb->data + IEEE80211_QOS_CTL_LEN,
3210 skb->data, (void *)qos_ctl - (void *)skb->data);
3211 skb_pull(skb, IEEE80211_QOS_CTL_LEN);
3212
3213 /* Some firmware revisions don't handle sending QoS NullFunc well.
3214 * These frames are mainly used for CQM purposes so it doesn't really
3215 * matter whether QoS NullFunc or NullFunc are sent.
3216 */
3217 hdr = (void *)skb->data;
3218 if (ieee80211_is_qos_nullfunc(hdr->frame_control))
3219 cb->flags &= ~ATH10K_SKB_F_QOS;
3220
3221 hdr->frame_control &= ~__cpu_to_le16(IEEE80211_STYPE_QOS_DATA);
3222 }
3223
3224 static void ath10k_tx_h_8023(struct sk_buff *skb)
3225 {
3226 struct ieee80211_hdr *hdr;
3227 struct rfc1042_hdr *rfc1042;
3228 struct ethhdr *eth;
3229 size_t hdrlen;
3230 u8 da[ETH_ALEN];
3231 u8 sa[ETH_ALEN];
3232 __be16 type;
3233
3234 hdr = (void *)skb->data;
3235 hdrlen = ieee80211_hdrlen(hdr->frame_control);
3236 rfc1042 = (void *)skb->data + hdrlen;
3237
3238 ether_addr_copy(da, ieee80211_get_DA(hdr));
3239 ether_addr_copy(sa, ieee80211_get_SA(hdr));
3240 type = rfc1042->snap_type;
3241
3242 skb_pull(skb, hdrlen + sizeof(*rfc1042));
3243 skb_push(skb, sizeof(*eth));
3244
3245 eth = (void *)skb->data;
3246 ether_addr_copy(eth->h_dest, da);
3247 ether_addr_copy(eth->h_source, sa);
3248 eth->h_proto = type;
3249 }
3250
3251 static void ath10k_tx_h_add_p2p_noa_ie(struct ath10k *ar,
3252 struct ieee80211_vif *vif,
3253 struct sk_buff *skb)
3254 {
3255 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
3256 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3257
3258 /* This is case only for P2P_GO */
3259 if (vif->type != NL80211_IFTYPE_AP || !vif->p2p)
3260 return;
3261
3262 if (unlikely(ieee80211_is_probe_resp(hdr->frame_control))) {
3263 spin_lock_bh(&ar->data_lock);
3264 if (arvif->u.ap.noa_data)
3265 if (!pskb_expand_head(skb, 0, arvif->u.ap.noa_len,
3266 GFP_ATOMIC))
3267 memcpy(skb_put(skb, arvif->u.ap.noa_len),
3268 arvif->u.ap.noa_data,
3269 arvif->u.ap.noa_len);
3270 spin_unlock_bh(&ar->data_lock);
3271 }
3272 }
3273
3274 bool ath10k_mac_tx_frm_has_freq(struct ath10k *ar)
3275 {
3276 /* FIXME: Not really sure since when the behaviour changed. At some
3277 * point new firmware stopped requiring creation of peer entries for
3278 * offchannel tx (and actually creating them causes issues with wmi-htc
3279 * tx credit replenishment and reliability). Assuming it's at least 3.4
3280 * because that's when the `freq` was introduced to TX_FRM HTT command.
3281 */
3282 return (ar->htt.target_version_major >= 3 &&
3283 ar->htt.target_version_minor >= 4 &&
3284 ar->htt.op_version == ATH10K_FW_HTT_OP_VERSION_TLV);
3285 }
3286
3287 static int ath10k_mac_tx_wmi_mgmt(struct ath10k *ar, struct sk_buff *skb)
3288 {
3289 struct sk_buff_head *q = &ar->wmi_mgmt_tx_queue;
3290 int ret = 0;
3291
3292 spin_lock_bh(&ar->data_lock);
3293
3294 if (skb_queue_len(q) == ATH10K_MAX_NUM_MGMT_PENDING) {
3295 ath10k_warn(ar, "wmi mgmt tx queue is full\n");
3296 ret = -ENOSPC;
3297 goto unlock;
3298 }
3299
3300 __skb_queue_tail(q, skb);
3301 ieee80211_queue_work(ar->hw, &ar->wmi_mgmt_tx_work);
3302
3303 unlock:
3304 spin_unlock_bh(&ar->data_lock);
3305
3306 return ret;
3307 }
3308
3309 static void ath10k_mac_tx(struct ath10k *ar, enum ath10k_hw_txrx_mode txmode,
3310 struct sk_buff *skb)
3311 {
3312 struct ath10k_htt *htt = &ar->htt;
3313 int ret = 0;
3314
3315 switch (txmode) {
3316 case ATH10K_HW_TXRX_RAW:
3317 case ATH10K_HW_TXRX_NATIVE_WIFI:
3318 case ATH10K_HW_TXRX_ETHERNET:
3319 ret = ath10k_htt_tx(htt, txmode, skb);
3320 break;
3321 case ATH10K_HW_TXRX_MGMT:
3322 if (test_bit(ATH10K_FW_FEATURE_HAS_WMI_MGMT_TX,
3323 ar->fw_features))
3324 ret = ath10k_mac_tx_wmi_mgmt(ar, skb);
3325 else if (ar->htt.target_version_major >= 3)
3326 ret = ath10k_htt_tx(htt, txmode, skb);
3327 else
3328 ret = ath10k_htt_mgmt_tx(htt, skb);
3329 break;
3330 }
3331
3332 if (ret) {
3333 ath10k_warn(ar, "failed to transmit packet, dropping: %d\n",
3334 ret);
3335 ieee80211_free_txskb(ar->hw, skb);
3336 }
3337 }
3338
3339 void ath10k_offchan_tx_purge(struct ath10k *ar)
3340 {
3341 struct sk_buff *skb;
3342
3343 for (;;) {
3344 skb = skb_dequeue(&ar->offchan_tx_queue);
3345 if (!skb)
3346 break;
3347
3348 ieee80211_free_txskb(ar->hw, skb);
3349 }
3350 }
3351
3352 void ath10k_offchan_tx_work(struct work_struct *work)
3353 {
3354 struct ath10k *ar = container_of(work, struct ath10k, offchan_tx_work);
3355 struct ath10k_peer *peer;
3356 struct ath10k_vif *arvif;
3357 struct ieee80211_hdr *hdr;
3358 struct ieee80211_vif *vif;
3359 struct ieee80211_sta *sta;
3360 struct sk_buff *skb;
3361 const u8 *peer_addr;
3362 enum ath10k_hw_txrx_mode txmode;
3363 int vdev_id;
3364 int ret;
3365 unsigned long time_left;
3366 bool tmp_peer_created = false;
3367
3368 /* FW requirement: We must create a peer before FW will send out
3369 * an offchannel frame. Otherwise the frame will be stuck and
3370 * never transmitted. We delete the peer upon tx completion.
3371 * It is unlikely that a peer for offchannel tx will already be
3372 * present. However it may be in some rare cases so account for that.
3373 * Otherwise we might remove a legitimate peer and break stuff. */
3374
3375 for (;;) {
3376 skb = skb_dequeue(&ar->offchan_tx_queue);
3377 if (!skb)
3378 break;
3379
3380 mutex_lock(&ar->conf_mutex);
3381
3382 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac offchannel skb %p\n",
3383 skb);
3384
3385 hdr = (struct ieee80211_hdr *)skb->data;
3386 peer_addr = ieee80211_get_DA(hdr);
3387
3388 spin_lock_bh(&ar->data_lock);
3389 vdev_id = ar->scan.vdev_id;
3390 peer = ath10k_peer_find(ar, vdev_id, peer_addr);
3391 spin_unlock_bh(&ar->data_lock);
3392
3393 if (peer)
3394 /* FIXME: should this use ath10k_warn()? */
3395 ath10k_dbg(ar, ATH10K_DBG_MAC, "peer %pM on vdev %d already present\n",
3396 peer_addr, vdev_id);
3397
3398 if (!peer) {
3399 ret = ath10k_peer_create(ar, vdev_id, peer_addr,
3400 WMI_PEER_TYPE_DEFAULT);
3401 if (ret)
3402 ath10k_warn(ar, "failed to create peer %pM on vdev %d: %d\n",
3403 peer_addr, vdev_id, ret);
3404 tmp_peer_created = (ret == 0);
3405 }
3406
3407 spin_lock_bh(&ar->data_lock);
3408 reinit_completion(&ar->offchan_tx_completed);
3409 ar->offchan_tx_skb = skb;
3410 spin_unlock_bh(&ar->data_lock);
3411
3412 /* It's safe to access vif and sta - conf_mutex guarantees that
3413 * sta_state() and remove_interface() are locked exclusively
3414 * out wrt to this offchannel worker.
3415 */
3416 arvif = ath10k_get_arvif(ar, vdev_id);
3417 if (arvif) {
3418 vif = arvif->vif;
3419 sta = ieee80211_find_sta(vif, peer_addr);
3420 } else {
3421 vif = NULL;
3422 sta = NULL;
3423 }
3424
3425 txmode = ath10k_mac_tx_h_get_txmode(ar, vif, sta, skb);
3426
3427 ath10k_mac_tx(ar, txmode, skb);
3428
3429 time_left =
3430 wait_for_completion_timeout(&ar->offchan_tx_completed, 3 * HZ);
3431 if (time_left == 0)
3432 ath10k_warn(ar, "timed out waiting for offchannel skb %p\n",
3433 skb);
3434
3435 if (!peer && tmp_peer_created) {
3436 ret = ath10k_peer_delete(ar, vdev_id, peer_addr);
3437 if (ret)
3438 ath10k_warn(ar, "failed to delete peer %pM on vdev %d: %d\n",
3439 peer_addr, vdev_id, ret);
3440 }
3441
3442 mutex_unlock(&ar->conf_mutex);
3443 }
3444 }
3445
3446 void ath10k_mgmt_over_wmi_tx_purge(struct ath10k *ar)
3447 {
3448 struct sk_buff *skb;
3449
3450 for (;;) {
3451 skb = skb_dequeue(&ar->wmi_mgmt_tx_queue);
3452 if (!skb)
3453 break;
3454
3455 ieee80211_free_txskb(ar->hw, skb);
3456 }
3457 }
3458
3459 void ath10k_mgmt_over_wmi_tx_work(struct work_struct *work)
3460 {
3461 struct ath10k *ar = container_of(work, struct ath10k, wmi_mgmt_tx_work);
3462 struct sk_buff *skb;
3463 int ret;
3464
3465 for (;;) {
3466 skb = skb_dequeue(&ar->wmi_mgmt_tx_queue);
3467 if (!skb)
3468 break;
3469
3470 ret = ath10k_wmi_mgmt_tx(ar, skb);
3471 if (ret) {
3472 ath10k_warn(ar, "failed to transmit management frame via WMI: %d\n",
3473 ret);
3474 ieee80211_free_txskb(ar->hw, skb);
3475 }
3476 }
3477 }
3478
3479 /************/
3480 /* Scanning */
3481 /************/
3482
3483 void __ath10k_scan_finish(struct ath10k *ar)
3484 {
3485 lockdep_assert_held(&ar->data_lock);
3486
3487 switch (ar->scan.state) {
3488 case ATH10K_SCAN_IDLE:
3489 break;
3490 case ATH10K_SCAN_RUNNING:
3491 case ATH10K_SCAN_ABORTING:
3492 if (!ar->scan.is_roc)
3493 ieee80211_scan_completed(ar->hw,
3494 (ar->scan.state ==
3495 ATH10K_SCAN_ABORTING));
3496 else if (ar->scan.roc_notify)
3497 ieee80211_remain_on_channel_expired(ar->hw);
3498 /* fall through */
3499 case ATH10K_SCAN_STARTING:
3500 ar->scan.state = ATH10K_SCAN_IDLE;
3501 ar->scan_channel = NULL;
3502 ar->scan.roc_freq = 0;
3503 ath10k_offchan_tx_purge(ar);
3504 cancel_delayed_work(&ar->scan.timeout);
3505 complete_all(&ar->scan.completed);
3506 break;
3507 }
3508 }
3509
3510 void ath10k_scan_finish(struct ath10k *ar)
3511 {
3512 spin_lock_bh(&ar->data_lock);
3513 __ath10k_scan_finish(ar);
3514 spin_unlock_bh(&ar->data_lock);
3515 }
3516
3517 static int ath10k_scan_stop(struct ath10k *ar)
3518 {
3519 struct wmi_stop_scan_arg arg = {
3520 .req_id = 1, /* FIXME */
3521 .req_type = WMI_SCAN_STOP_ONE,
3522 .u.scan_id = ATH10K_SCAN_ID,
3523 };
3524 int ret;
3525
3526 lockdep_assert_held(&ar->conf_mutex);
3527
3528 ret = ath10k_wmi_stop_scan(ar, &arg);
3529 if (ret) {
3530 ath10k_warn(ar, "failed to stop wmi scan: %d\n", ret);
3531 goto out;
3532 }
3533
3534 ret = wait_for_completion_timeout(&ar->scan.completed, 3*HZ);
3535 if (ret == 0) {
3536 ath10k_warn(ar, "failed to receive scan abortion completion: timed out\n");
3537 ret = -ETIMEDOUT;
3538 } else if (ret > 0) {
3539 ret = 0;
3540 }
3541
3542 out:
3543 /* Scan state should be updated upon scan completion but in case
3544 * firmware fails to deliver the event (for whatever reason) it is
3545 * desired to clean up scan state anyway. Firmware may have just
3546 * dropped the scan completion event delivery due to transport pipe
3547 * being overflown with data and/or it can recover on its own before
3548 * next scan request is submitted.
3549 */
3550 spin_lock_bh(&ar->data_lock);
3551 if (ar->scan.state != ATH10K_SCAN_IDLE)
3552 __ath10k_scan_finish(ar);
3553 spin_unlock_bh(&ar->data_lock);
3554
3555 return ret;
3556 }
3557
3558 static void ath10k_scan_abort(struct ath10k *ar)
3559 {
3560 int ret;
3561
3562 lockdep_assert_held(&ar->conf_mutex);
3563
3564 spin_lock_bh(&ar->data_lock);
3565
3566 switch (ar->scan.state) {
3567 case ATH10K_SCAN_IDLE:
3568 /* This can happen if timeout worker kicked in and called
3569 * abortion while scan completion was being processed.
3570 */
3571 break;
3572 case ATH10K_SCAN_STARTING:
3573 case ATH10K_SCAN_ABORTING:
3574 ath10k_warn(ar, "refusing scan abortion due to invalid scan state: %s (%d)\n",
3575 ath10k_scan_state_str(ar->scan.state),
3576 ar->scan.state);
3577 break;
3578 case ATH10K_SCAN_RUNNING:
3579 ar->scan.state = ATH10K_SCAN_ABORTING;
3580 spin_unlock_bh(&ar->data_lock);
3581
3582 ret = ath10k_scan_stop(ar);
3583 if (ret)
3584 ath10k_warn(ar, "failed to abort scan: %d\n", ret);
3585
3586 spin_lock_bh(&ar->data_lock);
3587 break;
3588 }
3589
3590 spin_unlock_bh(&ar->data_lock);
3591 }
3592
3593 void ath10k_scan_timeout_work(struct work_struct *work)
3594 {
3595 struct ath10k *ar = container_of(work, struct ath10k,
3596 scan.timeout.work);
3597
3598 mutex_lock(&ar->conf_mutex);
3599 ath10k_scan_abort(ar);
3600 mutex_unlock(&ar->conf_mutex);
3601 }
3602
3603 static int ath10k_start_scan(struct ath10k *ar,
3604 const struct wmi_start_scan_arg *arg)
3605 {
3606 int ret;
3607
3608 lockdep_assert_held(&ar->conf_mutex);
3609
3610 ret = ath10k_wmi_start_scan(ar, arg);
3611 if (ret)
3612 return ret;
3613
3614 ret = wait_for_completion_timeout(&ar->scan.started, 1*HZ);
3615 if (ret == 0) {
3616 ret = ath10k_scan_stop(ar);
3617 if (ret)
3618 ath10k_warn(ar, "failed to stop scan: %d\n", ret);
3619
3620 return -ETIMEDOUT;
3621 }
3622
3623 /* If we failed to start the scan, return error code at
3624 * this point. This is probably due to some issue in the
3625 * firmware, but no need to wedge the driver due to that...
3626 */
3627 spin_lock_bh(&ar->data_lock);
3628 if (ar->scan.state == ATH10K_SCAN_IDLE) {
3629 spin_unlock_bh(&ar->data_lock);
3630 return -EINVAL;
3631 }
3632 spin_unlock_bh(&ar->data_lock);
3633
3634 return 0;
3635 }
3636
3637 /**********************/
3638 /* mac80211 callbacks */
3639 /**********************/
3640
3641 static void ath10k_tx(struct ieee80211_hw *hw,
3642 struct ieee80211_tx_control *control,
3643 struct sk_buff *skb)
3644 {
3645 struct ath10k *ar = hw->priv;
3646 struct ath10k_skb_cb *skb_cb = ATH10K_SKB_CB(skb);
3647 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
3648 struct ieee80211_vif *vif = info->control.vif;
3649 struct ieee80211_sta *sta = control->sta;
3650 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
3651 enum ath10k_hw_txrx_mode txmode;
3652
3653 /* We should disable CCK RATE due to P2P */
3654 if (info->flags & IEEE80211_TX_CTL_NO_CCK_RATE)
3655 ath10k_dbg(ar, ATH10K_DBG_MAC, "IEEE80211_TX_CTL_NO_CCK_RATE\n");
3656
3657 txmode = ath10k_mac_tx_h_get_txmode(ar, vif, sta, skb);
3658
3659 skb_cb->flags = 0;
3660 if (!ath10k_tx_h_use_hwcrypto(vif, skb))
3661 skb_cb->flags |= ATH10K_SKB_F_NO_HWCRYPT;
3662
3663 if (ieee80211_is_mgmt(hdr->frame_control))
3664 skb_cb->flags |= ATH10K_SKB_F_MGMT;
3665
3666 if (ieee80211_is_data_qos(hdr->frame_control))
3667 skb_cb->flags |= ATH10K_SKB_F_QOS;
3668
3669 skb_cb->vif = vif;
3670
3671 switch (txmode) {
3672 case ATH10K_HW_TXRX_MGMT:
3673 case ATH10K_HW_TXRX_NATIVE_WIFI:
3674 ath10k_tx_h_nwifi(hw, skb);
3675 ath10k_tx_h_add_p2p_noa_ie(ar, vif, skb);
3676 ath10k_tx_h_seq_no(vif, skb);
3677 break;
3678 case ATH10K_HW_TXRX_ETHERNET:
3679 ath10k_tx_h_8023(skb);
3680 break;
3681 case ATH10K_HW_TXRX_RAW:
3682 if (!test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags)) {
3683 WARN_ON_ONCE(1);
3684 ieee80211_free_txskb(hw, skb);
3685 return;
3686 }
3687 }
3688
3689 if (info->flags & IEEE80211_TX_CTL_TX_OFFCHAN) {
3690 if (!ath10k_mac_tx_frm_has_freq(ar)) {
3691 ath10k_dbg(ar, ATH10K_DBG_MAC, "queued offchannel skb %p\n",
3692 skb);
3693
3694 skb_queue_tail(&ar->offchan_tx_queue, skb);
3695 ieee80211_queue_work(hw, &ar->offchan_tx_work);
3696 return;
3697 }
3698 }
3699
3700 ath10k_mac_tx(ar, txmode, skb);
3701 }
3702
3703 /* Must not be called with conf_mutex held as workers can use that also. */
3704 void ath10k_drain_tx(struct ath10k *ar)
3705 {
3706 /* make sure rcu-protected mac80211 tx path itself is drained */
3707 synchronize_net();
3708
3709 ath10k_offchan_tx_purge(ar);
3710 ath10k_mgmt_over_wmi_tx_purge(ar);
3711
3712 cancel_work_sync(&ar->offchan_tx_work);
3713 cancel_work_sync(&ar->wmi_mgmt_tx_work);
3714 }
3715
3716 void ath10k_halt(struct ath10k *ar)
3717 {
3718 struct ath10k_vif *arvif;
3719
3720 lockdep_assert_held(&ar->conf_mutex);
3721
3722 clear_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
3723 ar->filter_flags = 0;
3724 ar->monitor = false;
3725 ar->monitor_arvif = NULL;
3726
3727 if (ar->monitor_started)
3728 ath10k_monitor_stop(ar);
3729
3730 ar->monitor_started = false;
3731 ar->tx_paused = 0;
3732
3733 ath10k_scan_finish(ar);
3734 ath10k_peer_cleanup_all(ar);
3735 ath10k_core_stop(ar);
3736 ath10k_hif_power_down(ar);
3737
3738 spin_lock_bh(&ar->data_lock);
3739 list_for_each_entry(arvif, &ar->arvifs, list)
3740 ath10k_mac_vif_beacon_cleanup(arvif);
3741 spin_unlock_bh(&ar->data_lock);
3742 }
3743
3744 static int ath10k_get_antenna(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant)
3745 {
3746 struct ath10k *ar = hw->priv;
3747
3748 mutex_lock(&ar->conf_mutex);
3749
3750 *tx_ant = ar->cfg_tx_chainmask;
3751 *rx_ant = ar->cfg_rx_chainmask;
3752
3753 mutex_unlock(&ar->conf_mutex);
3754
3755 return 0;
3756 }
3757
3758 static void ath10k_check_chain_mask(struct ath10k *ar, u32 cm, const char *dbg)
3759 {
3760 /* It is not clear that allowing gaps in chainmask
3761 * is helpful. Probably it will not do what user
3762 * is hoping for, so warn in that case.
3763 */
3764 if (cm == 15 || cm == 7 || cm == 3 || cm == 1 || cm == 0)
3765 return;
3766
3767 ath10k_warn(ar, "mac %s antenna chainmask may be invalid: 0x%x. Suggested values: 15, 7, 3, 1 or 0.\n",
3768 dbg, cm);
3769 }
3770
3771 static int ath10k_mac_get_vht_cap_bf_sts(struct ath10k *ar)
3772 {
3773 int nsts = ar->vht_cap_info;
3774
3775 nsts &= IEEE80211_VHT_CAP_BEAMFORMEE_STS_MASK;
3776 nsts >>= IEEE80211_VHT_CAP_BEAMFORMEE_STS_SHIFT;
3777
3778 /* If firmware does not deliver to host number of space-time
3779 * streams supported, assume it support up to 4 BF STS and return
3780 * the value for VHT CAP: nsts-1)
3781 */
3782 if (nsts == 0)
3783 return 3;
3784
3785 return nsts;
3786 }
3787
3788 static int ath10k_mac_get_vht_cap_bf_sound_dim(struct ath10k *ar)
3789 {
3790 int sound_dim = ar->vht_cap_info;
3791
3792 sound_dim &= IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_MASK;
3793 sound_dim >>= IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_SHIFT;
3794
3795 /* If the sounding dimension is not advertised by the firmware,
3796 * let's use a default value of 1
3797 */
3798 if (sound_dim == 0)
3799 return 1;
3800
3801 return sound_dim;
3802 }
3803
3804 static struct ieee80211_sta_vht_cap ath10k_create_vht_cap(struct ath10k *ar)
3805 {
3806 struct ieee80211_sta_vht_cap vht_cap = {0};
3807 u16 mcs_map;
3808 u32 val;
3809 int i;
3810
3811 vht_cap.vht_supported = 1;
3812 vht_cap.cap = ar->vht_cap_info;
3813
3814 if (ar->vht_cap_info & (IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE |
3815 IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE)) {
3816 val = ath10k_mac_get_vht_cap_bf_sts(ar);
3817 val <<= IEEE80211_VHT_CAP_BEAMFORMEE_STS_SHIFT;
3818 val &= IEEE80211_VHT_CAP_BEAMFORMEE_STS_MASK;
3819
3820 vht_cap.cap |= val;
3821 }
3822
3823 if (ar->vht_cap_info & (IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE |
3824 IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE)) {
3825 val = ath10k_mac_get_vht_cap_bf_sound_dim(ar);
3826 val <<= IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_SHIFT;
3827 val &= IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_MASK;
3828
3829 vht_cap.cap |= val;
3830 }
3831
3832 mcs_map = 0;
3833 for (i = 0; i < 8; i++) {
3834 if ((i < ar->num_rf_chains) && (ar->cfg_tx_chainmask & BIT(i)))
3835 mcs_map |= IEEE80211_VHT_MCS_SUPPORT_0_9 << (i * 2);
3836 else
3837 mcs_map |= IEEE80211_VHT_MCS_NOT_SUPPORTED << (i * 2);
3838 }
3839
3840 vht_cap.vht_mcs.rx_mcs_map = cpu_to_le16(mcs_map);
3841 vht_cap.vht_mcs.tx_mcs_map = cpu_to_le16(mcs_map);
3842
3843 return vht_cap;
3844 }
3845
3846 static struct ieee80211_sta_ht_cap ath10k_get_ht_cap(struct ath10k *ar)
3847 {
3848 int i;
3849 struct ieee80211_sta_ht_cap ht_cap = {0};
3850
3851 if (!(ar->ht_cap_info & WMI_HT_CAP_ENABLED))
3852 return ht_cap;
3853
3854 ht_cap.ht_supported = 1;
3855 ht_cap.ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
3856 ht_cap.ampdu_density = IEEE80211_HT_MPDU_DENSITY_8;
3857 ht_cap.cap |= IEEE80211_HT_CAP_SUP_WIDTH_20_40;
3858 ht_cap.cap |= IEEE80211_HT_CAP_DSSSCCK40;
3859 ht_cap.cap |=
3860 WLAN_HT_CAP_SM_PS_DISABLED << IEEE80211_HT_CAP_SM_PS_SHIFT;
3861
3862 if (ar->ht_cap_info & WMI_HT_CAP_HT20_SGI)
3863 ht_cap.cap |= IEEE80211_HT_CAP_SGI_20;
3864
3865 if (ar->ht_cap_info & WMI_HT_CAP_HT40_SGI)
3866 ht_cap.cap |= IEEE80211_HT_CAP_SGI_40;
3867
3868 if (ar->ht_cap_info & WMI_HT_CAP_DYNAMIC_SMPS) {
3869 u32 smps;
3870
3871 smps = WLAN_HT_CAP_SM_PS_DYNAMIC;
3872 smps <<= IEEE80211_HT_CAP_SM_PS_SHIFT;
3873
3874 ht_cap.cap |= smps;
3875 }
3876
3877 if (ar->ht_cap_info & WMI_HT_CAP_TX_STBC)
3878 ht_cap.cap |= IEEE80211_HT_CAP_TX_STBC;
3879
3880 if (ar->ht_cap_info & WMI_HT_CAP_RX_STBC) {
3881 u32 stbc;
3882
3883 stbc = ar->ht_cap_info;
3884 stbc &= WMI_HT_CAP_RX_STBC;
3885 stbc >>= WMI_HT_CAP_RX_STBC_MASK_SHIFT;
3886 stbc <<= IEEE80211_HT_CAP_RX_STBC_SHIFT;
3887 stbc &= IEEE80211_HT_CAP_RX_STBC;
3888
3889 ht_cap.cap |= stbc;
3890 }
3891
3892 if (ar->ht_cap_info & WMI_HT_CAP_LDPC)
3893 ht_cap.cap |= IEEE80211_HT_CAP_LDPC_CODING;
3894
3895 if (ar->ht_cap_info & WMI_HT_CAP_L_SIG_TXOP_PROT)
3896 ht_cap.cap |= IEEE80211_HT_CAP_LSIG_TXOP_PROT;
3897
3898 /* max AMSDU is implicitly taken from vht_cap_info */
3899 if (ar->vht_cap_info & WMI_VHT_CAP_MAX_MPDU_LEN_MASK)
3900 ht_cap.cap |= IEEE80211_HT_CAP_MAX_AMSDU;
3901
3902 for (i = 0; i < ar->num_rf_chains; i++) {
3903 if (ar->cfg_rx_chainmask & BIT(i))
3904 ht_cap.mcs.rx_mask[i] = 0xFF;
3905 }
3906
3907 ht_cap.mcs.tx_params |= IEEE80211_HT_MCS_TX_DEFINED;
3908
3909 return ht_cap;
3910 }
3911
3912 static void ath10k_mac_setup_ht_vht_cap(struct ath10k *ar)
3913 {
3914 struct ieee80211_supported_band *band;
3915 struct ieee80211_sta_vht_cap vht_cap;
3916 struct ieee80211_sta_ht_cap ht_cap;
3917
3918 ht_cap = ath10k_get_ht_cap(ar);
3919 vht_cap = ath10k_create_vht_cap(ar);
3920
3921 if (ar->phy_capability & WHAL_WLAN_11G_CAPABILITY) {
3922 band = &ar->mac.sbands[IEEE80211_BAND_2GHZ];
3923 band->ht_cap = ht_cap;
3924
3925 /* Enable the VHT support at 2.4 GHz */
3926 band->vht_cap = vht_cap;
3927 }
3928 if (ar->phy_capability & WHAL_WLAN_11A_CAPABILITY) {
3929 band = &ar->mac.sbands[IEEE80211_BAND_5GHZ];
3930 band->ht_cap = ht_cap;
3931 band->vht_cap = vht_cap;
3932 }
3933 }
3934
3935 static int __ath10k_set_antenna(struct ath10k *ar, u32 tx_ant, u32 rx_ant)
3936 {
3937 int ret;
3938
3939 lockdep_assert_held(&ar->conf_mutex);
3940
3941 ath10k_check_chain_mask(ar, tx_ant, "tx");
3942 ath10k_check_chain_mask(ar, rx_ant, "rx");
3943
3944 ar->cfg_tx_chainmask = tx_ant;
3945 ar->cfg_rx_chainmask = rx_ant;
3946
3947 if ((ar->state != ATH10K_STATE_ON) &&
3948 (ar->state != ATH10K_STATE_RESTARTED))
3949 return 0;
3950
3951 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->tx_chain_mask,
3952 tx_ant);
3953 if (ret) {
3954 ath10k_warn(ar, "failed to set tx-chainmask: %d, req 0x%x\n",
3955 ret, tx_ant);
3956 return ret;
3957 }
3958
3959 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->rx_chain_mask,
3960 rx_ant);
3961 if (ret) {
3962 ath10k_warn(ar, "failed to set rx-chainmask: %d, req 0x%x\n",
3963 ret, rx_ant);
3964 return ret;
3965 }
3966
3967 /* Reload HT/VHT capability */
3968 ath10k_mac_setup_ht_vht_cap(ar);
3969
3970 return 0;
3971 }
3972
3973 static int ath10k_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant)
3974 {
3975 struct ath10k *ar = hw->priv;
3976 int ret;
3977
3978 mutex_lock(&ar->conf_mutex);
3979 ret = __ath10k_set_antenna(ar, tx_ant, rx_ant);
3980 mutex_unlock(&ar->conf_mutex);
3981 return ret;
3982 }
3983
3984 static int ath10k_start(struct ieee80211_hw *hw)
3985 {
3986 struct ath10k *ar = hw->priv;
3987 u32 param;
3988 int ret = 0;
3989
3990 /*
3991 * This makes sense only when restarting hw. It is harmless to call
3992 * uncoditionally. This is necessary to make sure no HTT/WMI tx
3993 * commands will be submitted while restarting.
3994 */
3995 ath10k_drain_tx(ar);
3996
3997 mutex_lock(&ar->conf_mutex);
3998
3999 switch (ar->state) {
4000 case ATH10K_STATE_OFF:
4001 ar->state = ATH10K_STATE_ON;
4002 break;
4003 case ATH10K_STATE_RESTARTING:
4004 ath10k_halt(ar);
4005 ar->state = ATH10K_STATE_RESTARTED;
4006 break;
4007 case ATH10K_STATE_ON:
4008 case ATH10K_STATE_RESTARTED:
4009 case ATH10K_STATE_WEDGED:
4010 WARN_ON(1);
4011 ret = -EINVAL;
4012 goto err;
4013 case ATH10K_STATE_UTF:
4014 ret = -EBUSY;
4015 goto err;
4016 }
4017
4018 ret = ath10k_hif_power_up(ar);
4019 if (ret) {
4020 ath10k_err(ar, "Could not init hif: %d\n", ret);
4021 goto err_off;
4022 }
4023
4024 ret = ath10k_core_start(ar, ATH10K_FIRMWARE_MODE_NORMAL);
4025 if (ret) {
4026 ath10k_err(ar, "Could not init core: %d\n", ret);
4027 goto err_power_down;
4028 }
4029
4030 param = ar->wmi.pdev_param->pmf_qos;
4031 ret = ath10k_wmi_pdev_set_param(ar, param, 1);
4032 if (ret) {
4033 ath10k_warn(ar, "failed to enable PMF QOS: %d\n", ret);
4034 goto err_core_stop;
4035 }
4036
4037 param = ar->wmi.pdev_param->dynamic_bw;
4038 ret = ath10k_wmi_pdev_set_param(ar, param, 1);
4039 if (ret) {
4040 ath10k_warn(ar, "failed to enable dynamic BW: %d\n", ret);
4041 goto err_core_stop;
4042 }
4043
4044 if (test_bit(WMI_SERVICE_ADAPTIVE_OCS, ar->wmi.svc_map)) {
4045 ret = ath10k_wmi_adaptive_qcs(ar, true);
4046 if (ret) {
4047 ath10k_warn(ar, "failed to enable adaptive qcs: %d\n",
4048 ret);
4049 goto err_core_stop;
4050 }
4051 }
4052
4053 if (test_bit(WMI_SERVICE_BURST, ar->wmi.svc_map)) {
4054 param = ar->wmi.pdev_param->burst_enable;
4055 ret = ath10k_wmi_pdev_set_param(ar, param, 0);
4056 if (ret) {
4057 ath10k_warn(ar, "failed to disable burst: %d\n", ret);
4058 goto err_core_stop;
4059 }
4060 }
4061
4062 __ath10k_set_antenna(ar, ar->cfg_tx_chainmask, ar->cfg_rx_chainmask);
4063
4064 /*
4065 * By default FW set ARP frames ac to voice (6). In that case ARP
4066 * exchange is not working properly for UAPSD enabled AP. ARP requests
4067 * which arrives with access category 0 are processed by network stack
4068 * and send back with access category 0, but FW changes access category
4069 * to 6. Set ARP frames access category to best effort (0) solves
4070 * this problem.
4071 */
4072
4073 param = ar->wmi.pdev_param->arp_ac_override;
4074 ret = ath10k_wmi_pdev_set_param(ar, param, 0);
4075 if (ret) {
4076 ath10k_warn(ar, "failed to set arp ac override parameter: %d\n",
4077 ret);
4078 goto err_core_stop;
4079 }
4080
4081 if (test_bit(ATH10K_FW_FEATURE_SUPPORTS_ADAPTIVE_CCA,
4082 ar->fw_features)) {
4083 ret = ath10k_wmi_pdev_enable_adaptive_cca(ar, 1,
4084 WMI_CCA_DETECT_LEVEL_AUTO,
4085 WMI_CCA_DETECT_MARGIN_AUTO);
4086 if (ret) {
4087 ath10k_warn(ar, "failed to enable adaptive cca: %d\n",
4088 ret);
4089 goto err_core_stop;
4090 }
4091 }
4092
4093 param = ar->wmi.pdev_param->ani_enable;
4094 ret = ath10k_wmi_pdev_set_param(ar, param, 1);
4095 if (ret) {
4096 ath10k_warn(ar, "failed to enable ani by default: %d\n",
4097 ret);
4098 goto err_core_stop;
4099 }
4100
4101 ar->ani_enabled = true;
4102
4103 if (test_bit(WMI_SERVICE_PEER_STATS, ar->wmi.svc_map)) {
4104 param = ar->wmi.pdev_param->peer_stats_update_period;
4105 ret = ath10k_wmi_pdev_set_param(ar, param,
4106 PEER_DEFAULT_STATS_UPDATE_PERIOD);
4107 if (ret) {
4108 ath10k_warn(ar,
4109 "failed to set peer stats period : %d\n",
4110 ret);
4111 goto err_core_stop;
4112 }
4113 }
4114
4115 ar->num_started_vdevs = 0;
4116 ath10k_regd_update(ar);
4117
4118 ath10k_spectral_start(ar);
4119 ath10k_thermal_set_throttling(ar);
4120
4121 mutex_unlock(&ar->conf_mutex);
4122 return 0;
4123
4124 err_core_stop:
4125 ath10k_core_stop(ar);
4126
4127 err_power_down:
4128 ath10k_hif_power_down(ar);
4129
4130 err_off:
4131 ar->state = ATH10K_STATE_OFF;
4132
4133 err:
4134 mutex_unlock(&ar->conf_mutex);
4135 return ret;
4136 }
4137
4138 static void ath10k_stop(struct ieee80211_hw *hw)
4139 {
4140 struct ath10k *ar = hw->priv;
4141
4142 ath10k_drain_tx(ar);
4143
4144 mutex_lock(&ar->conf_mutex);
4145 if (ar->state != ATH10K_STATE_OFF) {
4146 ath10k_halt(ar);
4147 ar->state = ATH10K_STATE_OFF;
4148 }
4149 mutex_unlock(&ar->conf_mutex);
4150
4151 cancel_delayed_work_sync(&ar->scan.timeout);
4152 cancel_work_sync(&ar->restart_work);
4153 }
4154
4155 static int ath10k_config_ps(struct ath10k *ar)
4156 {
4157 struct ath10k_vif *arvif;
4158 int ret = 0;
4159
4160 lockdep_assert_held(&ar->conf_mutex);
4161
4162 list_for_each_entry(arvif, &ar->arvifs, list) {
4163 ret = ath10k_mac_vif_setup_ps(arvif);
4164 if (ret) {
4165 ath10k_warn(ar, "failed to setup powersave: %d\n", ret);
4166 break;
4167 }
4168 }
4169
4170 return ret;
4171 }
4172
4173 static int ath10k_mac_txpower_setup(struct ath10k *ar, int txpower)
4174 {
4175 int ret;
4176 u32 param;
4177
4178 lockdep_assert_held(&ar->conf_mutex);
4179
4180 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac txpower %d\n", txpower);
4181
4182 param = ar->wmi.pdev_param->txpower_limit2g;
4183 ret = ath10k_wmi_pdev_set_param(ar, param, txpower * 2);
4184 if (ret) {
4185 ath10k_warn(ar, "failed to set 2g txpower %d: %d\n",
4186 txpower, ret);
4187 return ret;
4188 }
4189
4190 param = ar->wmi.pdev_param->txpower_limit5g;
4191 ret = ath10k_wmi_pdev_set_param(ar, param, txpower * 2);
4192 if (ret) {
4193 ath10k_warn(ar, "failed to set 5g txpower %d: %d\n",
4194 txpower, ret);
4195 return ret;
4196 }
4197
4198 return 0;
4199 }
4200
4201 static int ath10k_mac_txpower_recalc(struct ath10k *ar)
4202 {
4203 struct ath10k_vif *arvif;
4204 int ret, txpower = -1;
4205
4206 lockdep_assert_held(&ar->conf_mutex);
4207
4208 list_for_each_entry(arvif, &ar->arvifs, list) {
4209 WARN_ON(arvif->txpower < 0);
4210
4211 if (txpower == -1)
4212 txpower = arvif->txpower;
4213 else
4214 txpower = min(txpower, arvif->txpower);
4215 }
4216
4217 if (WARN_ON(txpower == -1))
4218 return -EINVAL;
4219
4220 ret = ath10k_mac_txpower_setup(ar, txpower);
4221 if (ret) {
4222 ath10k_warn(ar, "failed to setup tx power %d: %d\n",
4223 txpower, ret);
4224 return ret;
4225 }
4226
4227 return 0;
4228 }
4229
4230 static int ath10k_config(struct ieee80211_hw *hw, u32 changed)
4231 {
4232 struct ath10k *ar = hw->priv;
4233 struct ieee80211_conf *conf = &hw->conf;
4234 int ret = 0;
4235
4236 mutex_lock(&ar->conf_mutex);
4237
4238 if (changed & IEEE80211_CONF_CHANGE_PS)
4239 ath10k_config_ps(ar);
4240
4241 if (changed & IEEE80211_CONF_CHANGE_MONITOR) {
4242 ar->monitor = conf->flags & IEEE80211_CONF_MONITOR;
4243 ret = ath10k_monitor_recalc(ar);
4244 if (ret)
4245 ath10k_warn(ar, "failed to recalc monitor: %d\n", ret);
4246 }
4247
4248 mutex_unlock(&ar->conf_mutex);
4249 return ret;
4250 }
4251
4252 static u32 get_nss_from_chainmask(u16 chain_mask)
4253 {
4254 if ((chain_mask & 0xf) == 0xf)
4255 return 4;
4256 else if ((chain_mask & 0x7) == 0x7)
4257 return 3;
4258 else if ((chain_mask & 0x3) == 0x3)
4259 return 2;
4260 return 1;
4261 }
4262
4263 static int ath10k_mac_set_txbf_conf(struct ath10k_vif *arvif)
4264 {
4265 u32 value = 0;
4266 struct ath10k *ar = arvif->ar;
4267 int nsts;
4268 int sound_dim;
4269
4270 if (ath10k_wmi_get_txbf_conf_scheme(ar) != WMI_TXBF_CONF_BEFORE_ASSOC)
4271 return 0;
4272
4273 nsts = ath10k_mac_get_vht_cap_bf_sts(ar);
4274 if (ar->vht_cap_info & (IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE |
4275 IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE))
4276 value |= SM(nsts, WMI_TXBF_STS_CAP_OFFSET);
4277
4278 sound_dim = ath10k_mac_get_vht_cap_bf_sound_dim(ar);
4279 if (ar->vht_cap_info & (IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE |
4280 IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE))
4281 value |= SM(sound_dim, WMI_BF_SOUND_DIM_OFFSET);
4282
4283 if (!value)
4284 return 0;
4285
4286 if (ar->vht_cap_info & IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE)
4287 value |= WMI_VDEV_PARAM_TXBF_SU_TX_BFER;
4288
4289 if (ar->vht_cap_info & IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE)
4290 value |= (WMI_VDEV_PARAM_TXBF_MU_TX_BFER |
4291 WMI_VDEV_PARAM_TXBF_SU_TX_BFER);
4292
4293 if (ar->vht_cap_info & IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE)
4294 value |= WMI_VDEV_PARAM_TXBF_SU_TX_BFEE;
4295
4296 if (ar->vht_cap_info & IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE)
4297 value |= (WMI_VDEV_PARAM_TXBF_MU_TX_BFEE |
4298 WMI_VDEV_PARAM_TXBF_SU_TX_BFEE);
4299
4300 return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id,
4301 ar->wmi.vdev_param->txbf, value);
4302 }
4303
4304 /*
4305 * TODO:
4306 * Figure out how to handle WMI_VDEV_SUBTYPE_P2P_DEVICE,
4307 * because we will send mgmt frames without CCK. This requirement
4308 * for P2P_FIND/GO_NEG should be handled by checking CCK flag
4309 * in the TX packet.
4310 */
4311 static int ath10k_add_interface(struct ieee80211_hw *hw,
4312 struct ieee80211_vif *vif)
4313 {
4314 struct ath10k *ar = hw->priv;
4315 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4316 enum wmi_sta_powersave_param param;
4317 int ret = 0;
4318 u32 value;
4319 int bit;
4320 int i;
4321 u32 vdev_param;
4322
4323 vif->driver_flags |= IEEE80211_VIF_SUPPORTS_UAPSD;
4324
4325 mutex_lock(&ar->conf_mutex);
4326
4327 memset(arvif, 0, sizeof(*arvif));
4328
4329 arvif->ar = ar;
4330 arvif->vif = vif;
4331
4332 INIT_LIST_HEAD(&arvif->list);
4333 INIT_WORK(&arvif->ap_csa_work, ath10k_mac_vif_ap_csa_work);
4334 INIT_DELAYED_WORK(&arvif->connection_loss_work,
4335 ath10k_mac_vif_sta_connection_loss_work);
4336
4337 for (i = 0; i < ARRAY_SIZE(arvif->bitrate_mask.control); i++) {
4338 arvif->bitrate_mask.control[i].legacy = 0xffffffff;
4339 memset(arvif->bitrate_mask.control[i].ht_mcs, 0xff,
4340 sizeof(arvif->bitrate_mask.control[i].ht_mcs));
4341 memset(arvif->bitrate_mask.control[i].vht_mcs, 0xff,
4342 sizeof(arvif->bitrate_mask.control[i].vht_mcs));
4343 }
4344
4345 if (ar->num_peers >= ar->max_num_peers) {
4346 ath10k_warn(ar, "refusing vdev creation due to insufficient peer entry resources in firmware\n");
4347 ret = -ENOBUFS;
4348 goto err;
4349 }
4350
4351 if (ar->free_vdev_map == 0) {
4352 ath10k_warn(ar, "Free vdev map is empty, no more interfaces allowed.\n");
4353 ret = -EBUSY;
4354 goto err;
4355 }
4356 bit = __ffs64(ar->free_vdev_map);
4357
4358 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac create vdev %i map %llx\n",
4359 bit, ar->free_vdev_map);
4360
4361 arvif->vdev_id = bit;
4362 arvif->vdev_subtype =
4363 ath10k_wmi_get_vdev_subtype(ar, WMI_VDEV_SUBTYPE_NONE);
4364
4365 switch (vif->type) {
4366 case NL80211_IFTYPE_P2P_DEVICE:
4367 arvif->vdev_type = WMI_VDEV_TYPE_STA;
4368 arvif->vdev_subtype = ath10k_wmi_get_vdev_subtype
4369 (ar, WMI_VDEV_SUBTYPE_P2P_DEVICE);
4370 break;
4371 case NL80211_IFTYPE_UNSPECIFIED:
4372 case NL80211_IFTYPE_STATION:
4373 arvif->vdev_type = WMI_VDEV_TYPE_STA;
4374 if (vif->p2p)
4375 arvif->vdev_subtype = ath10k_wmi_get_vdev_subtype
4376 (ar, WMI_VDEV_SUBTYPE_P2P_CLIENT);
4377 break;
4378 case NL80211_IFTYPE_ADHOC:
4379 arvif->vdev_type = WMI_VDEV_TYPE_IBSS;
4380 break;
4381 case NL80211_IFTYPE_MESH_POINT:
4382 if (test_bit(WMI_SERVICE_MESH_11S, ar->wmi.svc_map)) {
4383 arvif->vdev_subtype = ath10k_wmi_get_vdev_subtype
4384 (ar, WMI_VDEV_SUBTYPE_MESH_11S);
4385 } else if (!test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags)) {
4386 ret = -EINVAL;
4387 ath10k_warn(ar, "must load driver with rawmode=1 to add mesh interfaces\n");
4388 goto err;
4389 }
4390 arvif->vdev_type = WMI_VDEV_TYPE_AP;
4391 break;
4392 case NL80211_IFTYPE_AP:
4393 arvif->vdev_type = WMI_VDEV_TYPE_AP;
4394
4395 if (vif->p2p)
4396 arvif->vdev_subtype = ath10k_wmi_get_vdev_subtype
4397 (ar, WMI_VDEV_SUBTYPE_P2P_GO);
4398 break;
4399 case NL80211_IFTYPE_MONITOR:
4400 arvif->vdev_type = WMI_VDEV_TYPE_MONITOR;
4401 break;
4402 default:
4403 WARN_ON(1);
4404 break;
4405 }
4406
4407 /* Using vdev_id as queue number will make it very easy to do per-vif
4408 * tx queue locking. This shouldn't wrap due to interface combinations
4409 * but do a modulo for correctness sake and prevent using offchannel tx
4410 * queues for regular vif tx.
4411 */
4412 vif->cab_queue = arvif->vdev_id % (IEEE80211_MAX_QUEUES - 1);
4413 for (i = 0; i < ARRAY_SIZE(vif->hw_queue); i++)
4414 vif->hw_queue[i] = arvif->vdev_id % (IEEE80211_MAX_QUEUES - 1);
4415
4416 /* Some firmware revisions don't wait for beacon tx completion before
4417 * sending another SWBA event. This could lead to hardware using old
4418 * (freed) beacon data in some cases, e.g. tx credit starvation
4419 * combined with missed TBTT. This is very very rare.
4420 *
4421 * On non-IOMMU-enabled hosts this could be a possible security issue
4422 * because hw could beacon some random data on the air. On
4423 * IOMMU-enabled hosts DMAR faults would occur in most cases and target
4424 * device would crash.
4425 *
4426 * Since there are no beacon tx completions (implicit nor explicit)
4427 * propagated to host the only workaround for this is to allocate a
4428 * DMA-coherent buffer for a lifetime of a vif and use it for all
4429 * beacon tx commands. Worst case for this approach is some beacons may
4430 * become corrupted, e.g. have garbled IEs or out-of-date TIM bitmap.
4431 */
4432 if (vif->type == NL80211_IFTYPE_ADHOC ||
4433 vif->type == NL80211_IFTYPE_MESH_POINT ||
4434 vif->type == NL80211_IFTYPE_AP) {
4435 arvif->beacon_buf = dma_zalloc_coherent(ar->dev,
4436 IEEE80211_MAX_FRAME_LEN,
4437 &arvif->beacon_paddr,
4438 GFP_ATOMIC);
4439 if (!arvif->beacon_buf) {
4440 ret = -ENOMEM;
4441 ath10k_warn(ar, "failed to allocate beacon buffer: %d\n",
4442 ret);
4443 goto err;
4444 }
4445 }
4446 if (test_bit(ATH10K_FLAG_HW_CRYPTO_DISABLED, &ar->dev_flags))
4447 arvif->nohwcrypt = true;
4448
4449 if (arvif->nohwcrypt &&
4450 !test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags)) {
4451 ath10k_warn(ar, "cryptmode module param needed for sw crypto\n");
4452 goto err;
4453 }
4454
4455 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev create %d (add interface) type %d subtype %d bcnmode %s\n",
4456 arvif->vdev_id, arvif->vdev_type, arvif->vdev_subtype,
4457 arvif->beacon_buf ? "single-buf" : "per-skb");
4458
4459 ret = ath10k_wmi_vdev_create(ar, arvif->vdev_id, arvif->vdev_type,
4460 arvif->vdev_subtype, vif->addr);
4461 if (ret) {
4462 ath10k_warn(ar, "failed to create WMI vdev %i: %d\n",
4463 arvif->vdev_id, ret);
4464 goto err;
4465 }
4466
4467 ar->free_vdev_map &= ~(1LL << arvif->vdev_id);
4468 list_add(&arvif->list, &ar->arvifs);
4469
4470 /* It makes no sense to have firmware do keepalives. mac80211 already
4471 * takes care of this with idle connection polling.
4472 */
4473 ret = ath10k_mac_vif_disable_keepalive(arvif);
4474 if (ret) {
4475 ath10k_warn(ar, "failed to disable keepalive on vdev %i: %d\n",
4476 arvif->vdev_id, ret);
4477 goto err_vdev_delete;
4478 }
4479
4480 arvif->def_wep_key_idx = -1;
4481
4482 vdev_param = ar->wmi.vdev_param->tx_encap_type;
4483 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
4484 ATH10K_HW_TXRX_NATIVE_WIFI);
4485 /* 10.X firmware does not support this VDEV parameter. Do not warn */
4486 if (ret && ret != -EOPNOTSUPP) {
4487 ath10k_warn(ar, "failed to set vdev %i TX encapsulation: %d\n",
4488 arvif->vdev_id, ret);
4489 goto err_vdev_delete;
4490 }
4491
4492 if (ar->cfg_tx_chainmask) {
4493 u16 nss = get_nss_from_chainmask(ar->cfg_tx_chainmask);
4494
4495 vdev_param = ar->wmi.vdev_param->nss;
4496 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
4497 nss);
4498 if (ret) {
4499 ath10k_warn(ar, "failed to set vdev %i chainmask 0x%x, nss %i: %d\n",
4500 arvif->vdev_id, ar->cfg_tx_chainmask, nss,
4501 ret);
4502 goto err_vdev_delete;
4503 }
4504 }
4505
4506 if (arvif->vdev_type == WMI_VDEV_TYPE_AP ||
4507 arvif->vdev_type == WMI_VDEV_TYPE_IBSS) {
4508 ret = ath10k_peer_create(ar, arvif->vdev_id, vif->addr,
4509 WMI_PEER_TYPE_DEFAULT);
4510 if (ret) {
4511 ath10k_warn(ar, "failed to create vdev %i peer for AP/IBSS: %d\n",
4512 arvif->vdev_id, ret);
4513 goto err_vdev_delete;
4514 }
4515 }
4516
4517 if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
4518 ret = ath10k_mac_set_kickout(arvif);
4519 if (ret) {
4520 ath10k_warn(ar, "failed to set vdev %i kickout parameters: %d\n",
4521 arvif->vdev_id, ret);
4522 goto err_peer_delete;
4523 }
4524 }
4525
4526 if (arvif->vdev_type == WMI_VDEV_TYPE_STA) {
4527 param = WMI_STA_PS_PARAM_RX_WAKE_POLICY;
4528 value = WMI_STA_PS_RX_WAKE_POLICY_WAKE;
4529 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
4530 param, value);
4531 if (ret) {
4532 ath10k_warn(ar, "failed to set vdev %i RX wake policy: %d\n",
4533 arvif->vdev_id, ret);
4534 goto err_peer_delete;
4535 }
4536
4537 ret = ath10k_mac_vif_recalc_ps_wake_threshold(arvif);
4538 if (ret) {
4539 ath10k_warn(ar, "failed to recalc ps wake threshold on vdev %i: %d\n",
4540 arvif->vdev_id, ret);
4541 goto err_peer_delete;
4542 }
4543
4544 ret = ath10k_mac_vif_recalc_ps_poll_count(arvif);
4545 if (ret) {
4546 ath10k_warn(ar, "failed to recalc ps poll count on vdev %i: %d\n",
4547 arvif->vdev_id, ret);
4548 goto err_peer_delete;
4549 }
4550 }
4551
4552 ret = ath10k_mac_set_txbf_conf(arvif);
4553 if (ret) {
4554 ath10k_warn(ar, "failed to set txbf for vdev %d: %d\n",
4555 arvif->vdev_id, ret);
4556 goto err_peer_delete;
4557 }
4558
4559 ret = ath10k_mac_set_rts(arvif, ar->hw->wiphy->rts_threshold);
4560 if (ret) {
4561 ath10k_warn(ar, "failed to set rts threshold for vdev %d: %d\n",
4562 arvif->vdev_id, ret);
4563 goto err_peer_delete;
4564 }
4565
4566 arvif->txpower = vif->bss_conf.txpower;
4567 ret = ath10k_mac_txpower_recalc(ar);
4568 if (ret) {
4569 ath10k_warn(ar, "failed to recalc tx power: %d\n", ret);
4570 goto err_peer_delete;
4571 }
4572
4573 if (vif->type == NL80211_IFTYPE_MONITOR) {
4574 ar->monitor_arvif = arvif;
4575 ret = ath10k_monitor_recalc(ar);
4576 if (ret) {
4577 ath10k_warn(ar, "failed to recalc monitor: %d\n", ret);
4578 goto err_peer_delete;
4579 }
4580 }
4581
4582 spin_lock_bh(&ar->htt.tx_lock);
4583 if (!ar->tx_paused)
4584 ieee80211_wake_queue(ar->hw, arvif->vdev_id);
4585 spin_unlock_bh(&ar->htt.tx_lock);
4586
4587 mutex_unlock(&ar->conf_mutex);
4588 return 0;
4589
4590 err_peer_delete:
4591 if (arvif->vdev_type == WMI_VDEV_TYPE_AP ||
4592 arvif->vdev_type == WMI_VDEV_TYPE_IBSS)
4593 ath10k_wmi_peer_delete(ar, arvif->vdev_id, vif->addr);
4594
4595 err_vdev_delete:
4596 ath10k_wmi_vdev_delete(ar, arvif->vdev_id);
4597 ar->free_vdev_map |= 1LL << arvif->vdev_id;
4598 list_del(&arvif->list);
4599
4600 err:
4601 if (arvif->beacon_buf) {
4602 dma_free_coherent(ar->dev, IEEE80211_MAX_FRAME_LEN,
4603 arvif->beacon_buf, arvif->beacon_paddr);
4604 arvif->beacon_buf = NULL;
4605 }
4606
4607 mutex_unlock(&ar->conf_mutex);
4608
4609 return ret;
4610 }
4611
4612 static void ath10k_mac_vif_tx_unlock_all(struct ath10k_vif *arvif)
4613 {
4614 int i;
4615
4616 for (i = 0; i < BITS_PER_LONG; i++)
4617 ath10k_mac_vif_tx_unlock(arvif, i);
4618 }
4619
4620 static void ath10k_remove_interface(struct ieee80211_hw *hw,
4621 struct ieee80211_vif *vif)
4622 {
4623 struct ath10k *ar = hw->priv;
4624 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4625 int ret;
4626
4627 cancel_work_sync(&arvif->ap_csa_work);
4628 cancel_delayed_work_sync(&arvif->connection_loss_work);
4629
4630 mutex_lock(&ar->conf_mutex);
4631
4632 spin_lock_bh(&ar->data_lock);
4633 ath10k_mac_vif_beacon_cleanup(arvif);
4634 spin_unlock_bh(&ar->data_lock);
4635
4636 ret = ath10k_spectral_vif_stop(arvif);
4637 if (ret)
4638 ath10k_warn(ar, "failed to stop spectral for vdev %i: %d\n",
4639 arvif->vdev_id, ret);
4640
4641 ar->free_vdev_map |= 1LL << arvif->vdev_id;
4642 list_del(&arvif->list);
4643
4644 if (arvif->vdev_type == WMI_VDEV_TYPE_AP ||
4645 arvif->vdev_type == WMI_VDEV_TYPE_IBSS) {
4646 ret = ath10k_wmi_peer_delete(arvif->ar, arvif->vdev_id,
4647 vif->addr);
4648 if (ret)
4649 ath10k_warn(ar, "failed to submit AP/IBSS self-peer removal on vdev %i: %d\n",
4650 arvif->vdev_id, ret);
4651
4652 kfree(arvif->u.ap.noa_data);
4653 }
4654
4655 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %i delete (remove interface)\n",
4656 arvif->vdev_id);
4657
4658 ret = ath10k_wmi_vdev_delete(ar, arvif->vdev_id);
4659 if (ret)
4660 ath10k_warn(ar, "failed to delete WMI vdev %i: %d\n",
4661 arvif->vdev_id, ret);
4662
4663 /* Some firmware revisions don't notify host about self-peer removal
4664 * until after associated vdev is deleted.
4665 */
4666 if (arvif->vdev_type == WMI_VDEV_TYPE_AP ||
4667 arvif->vdev_type == WMI_VDEV_TYPE_IBSS) {
4668 ret = ath10k_wait_for_peer_deleted(ar, arvif->vdev_id,
4669 vif->addr);
4670 if (ret)
4671 ath10k_warn(ar, "failed to remove AP self-peer on vdev %i: %d\n",
4672 arvif->vdev_id, ret);
4673
4674 spin_lock_bh(&ar->data_lock);
4675 ar->num_peers--;
4676 spin_unlock_bh(&ar->data_lock);
4677 }
4678
4679 ath10k_peer_cleanup(ar, arvif->vdev_id);
4680
4681 if (vif->type == NL80211_IFTYPE_MONITOR) {
4682 ar->monitor_arvif = NULL;
4683 ret = ath10k_monitor_recalc(ar);
4684 if (ret)
4685 ath10k_warn(ar, "failed to recalc monitor: %d\n", ret);
4686 }
4687
4688 spin_lock_bh(&ar->htt.tx_lock);
4689 ath10k_mac_vif_tx_unlock_all(arvif);
4690 spin_unlock_bh(&ar->htt.tx_lock);
4691
4692 mutex_unlock(&ar->conf_mutex);
4693 }
4694
4695 /*
4696 * FIXME: Has to be verified.
4697 */
4698 #define SUPPORTED_FILTERS \
4699 (FIF_ALLMULTI | \
4700 FIF_CONTROL | \
4701 FIF_PSPOLL | \
4702 FIF_OTHER_BSS | \
4703 FIF_BCN_PRBRESP_PROMISC | \
4704 FIF_PROBE_REQ | \
4705 FIF_FCSFAIL)
4706
4707 static void ath10k_configure_filter(struct ieee80211_hw *hw,
4708 unsigned int changed_flags,
4709 unsigned int *total_flags,
4710 u64 multicast)
4711 {
4712 struct ath10k *ar = hw->priv;
4713 int ret;
4714
4715 mutex_lock(&ar->conf_mutex);
4716
4717 changed_flags &= SUPPORTED_FILTERS;
4718 *total_flags &= SUPPORTED_FILTERS;
4719 ar->filter_flags = *total_flags;
4720
4721 ret = ath10k_monitor_recalc(ar);
4722 if (ret)
4723 ath10k_warn(ar, "failed to recalc montior: %d\n", ret);
4724
4725 mutex_unlock(&ar->conf_mutex);
4726 }
4727
4728 static void ath10k_bss_info_changed(struct ieee80211_hw *hw,
4729 struct ieee80211_vif *vif,
4730 struct ieee80211_bss_conf *info,
4731 u32 changed)
4732 {
4733 struct ath10k *ar = hw->priv;
4734 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4735 int ret = 0;
4736 u32 vdev_param, pdev_param, slottime, preamble;
4737
4738 mutex_lock(&ar->conf_mutex);
4739
4740 if (changed & BSS_CHANGED_IBSS)
4741 ath10k_control_ibss(arvif, info, vif->addr);
4742
4743 if (changed & BSS_CHANGED_BEACON_INT) {
4744 arvif->beacon_interval = info->beacon_int;
4745 vdev_param = ar->wmi.vdev_param->beacon_interval;
4746 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
4747 arvif->beacon_interval);
4748 ath10k_dbg(ar, ATH10K_DBG_MAC,
4749 "mac vdev %d beacon_interval %d\n",
4750 arvif->vdev_id, arvif->beacon_interval);
4751
4752 if (ret)
4753 ath10k_warn(ar, "failed to set beacon interval for vdev %d: %i\n",
4754 arvif->vdev_id, ret);
4755 }
4756
4757 if (changed & BSS_CHANGED_BEACON) {
4758 ath10k_dbg(ar, ATH10K_DBG_MAC,
4759 "vdev %d set beacon tx mode to staggered\n",
4760 arvif->vdev_id);
4761
4762 pdev_param = ar->wmi.pdev_param->beacon_tx_mode;
4763 ret = ath10k_wmi_pdev_set_param(ar, pdev_param,
4764 WMI_BEACON_STAGGERED_MODE);
4765 if (ret)
4766 ath10k_warn(ar, "failed to set beacon mode for vdev %d: %i\n",
4767 arvif->vdev_id, ret);
4768
4769 ret = ath10k_mac_setup_bcn_tmpl(arvif);
4770 if (ret)
4771 ath10k_warn(ar, "failed to update beacon template: %d\n",
4772 ret);
4773
4774 if (ieee80211_vif_is_mesh(vif)) {
4775 /* mesh doesn't use SSID but firmware needs it */
4776 strncpy(arvif->u.ap.ssid, "mesh",
4777 sizeof(arvif->u.ap.ssid));
4778 arvif->u.ap.ssid_len = 4;
4779 }
4780 }
4781
4782 if (changed & BSS_CHANGED_AP_PROBE_RESP) {
4783 ret = ath10k_mac_setup_prb_tmpl(arvif);
4784 if (ret)
4785 ath10k_warn(ar, "failed to setup probe resp template on vdev %i: %d\n",
4786 arvif->vdev_id, ret);
4787 }
4788
4789 if (changed & (BSS_CHANGED_BEACON_INFO | BSS_CHANGED_BEACON)) {
4790 arvif->dtim_period = info->dtim_period;
4791
4792 ath10k_dbg(ar, ATH10K_DBG_MAC,
4793 "mac vdev %d dtim_period %d\n",
4794 arvif->vdev_id, arvif->dtim_period);
4795
4796 vdev_param = ar->wmi.vdev_param->dtim_period;
4797 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
4798 arvif->dtim_period);
4799 if (ret)
4800 ath10k_warn(ar, "failed to set dtim period for vdev %d: %i\n",
4801 arvif->vdev_id, ret);
4802 }
4803
4804 if (changed & BSS_CHANGED_SSID &&
4805 vif->type == NL80211_IFTYPE_AP) {
4806 arvif->u.ap.ssid_len = info->ssid_len;
4807 if (info->ssid_len)
4808 memcpy(arvif->u.ap.ssid, info->ssid, info->ssid_len);
4809 arvif->u.ap.hidden_ssid = info->hidden_ssid;
4810 }
4811
4812 if (changed & BSS_CHANGED_BSSID && !is_zero_ether_addr(info->bssid))
4813 ether_addr_copy(arvif->bssid, info->bssid);
4814
4815 if (changed & BSS_CHANGED_BEACON_ENABLED)
4816 ath10k_control_beaconing(arvif, info);
4817
4818 if (changed & BSS_CHANGED_ERP_CTS_PROT) {
4819 arvif->use_cts_prot = info->use_cts_prot;
4820 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d cts_prot %d\n",
4821 arvif->vdev_id, info->use_cts_prot);
4822
4823 ret = ath10k_recalc_rtscts_prot(arvif);
4824 if (ret)
4825 ath10k_warn(ar, "failed to recalculate rts/cts prot for vdev %d: %d\n",
4826 arvif->vdev_id, ret);
4827
4828 vdev_param = ar->wmi.vdev_param->protection_mode;
4829 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
4830 info->use_cts_prot ? 1 : 0);
4831 if (ret)
4832 ath10k_warn(ar, "failed to set protection mode %d on vdev %i: %d\n",
4833 info->use_cts_prot, arvif->vdev_id, ret);
4834 }
4835
4836 if (changed & BSS_CHANGED_ERP_SLOT) {
4837 if (info->use_short_slot)
4838 slottime = WMI_VDEV_SLOT_TIME_SHORT; /* 9us */
4839
4840 else
4841 slottime = WMI_VDEV_SLOT_TIME_LONG; /* 20us */
4842
4843 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d slot_time %d\n",
4844 arvif->vdev_id, slottime);
4845
4846 vdev_param = ar->wmi.vdev_param->slot_time;
4847 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
4848 slottime);
4849 if (ret)
4850 ath10k_warn(ar, "failed to set erp slot for vdev %d: %i\n",
4851 arvif->vdev_id, ret);
4852 }
4853
4854 if (changed & BSS_CHANGED_ERP_PREAMBLE) {
4855 if (info->use_short_preamble)
4856 preamble = WMI_VDEV_PREAMBLE_SHORT;
4857 else
4858 preamble = WMI_VDEV_PREAMBLE_LONG;
4859
4860 ath10k_dbg(ar, ATH10K_DBG_MAC,
4861 "mac vdev %d preamble %dn",
4862 arvif->vdev_id, preamble);
4863
4864 vdev_param = ar->wmi.vdev_param->preamble;
4865 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
4866 preamble);
4867 if (ret)
4868 ath10k_warn(ar, "failed to set preamble for vdev %d: %i\n",
4869 arvif->vdev_id, ret);
4870 }
4871
4872 if (changed & BSS_CHANGED_ASSOC) {
4873 if (info->assoc) {
4874 /* Workaround: Make sure monitor vdev is not running
4875 * when associating to prevent some firmware revisions
4876 * (e.g. 10.1 and 10.2) from crashing.
4877 */
4878 if (ar->monitor_started)
4879 ath10k_monitor_stop(ar);
4880 ath10k_bss_assoc(hw, vif, info);
4881 ath10k_monitor_recalc(ar);
4882 } else {
4883 ath10k_bss_disassoc(hw, vif);
4884 }
4885 }
4886
4887 if (changed & BSS_CHANGED_TXPOWER) {
4888 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev_id %i txpower %d\n",
4889 arvif->vdev_id, info->txpower);
4890
4891 arvif->txpower = info->txpower;
4892 ret = ath10k_mac_txpower_recalc(ar);
4893 if (ret)
4894 ath10k_warn(ar, "failed to recalc tx power: %d\n", ret);
4895 }
4896
4897 if (changed & BSS_CHANGED_PS) {
4898 arvif->ps = vif->bss_conf.ps;
4899
4900 ret = ath10k_config_ps(ar);
4901 if (ret)
4902 ath10k_warn(ar, "failed to setup ps on vdev %i: %d\n",
4903 arvif->vdev_id, ret);
4904 }
4905
4906 mutex_unlock(&ar->conf_mutex);
4907 }
4908
4909 static int ath10k_hw_scan(struct ieee80211_hw *hw,
4910 struct ieee80211_vif *vif,
4911 struct ieee80211_scan_request *hw_req)
4912 {
4913 struct ath10k *ar = hw->priv;
4914 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4915 struct cfg80211_scan_request *req = &hw_req->req;
4916 struct wmi_start_scan_arg arg;
4917 int ret = 0;
4918 int i;
4919
4920 mutex_lock(&ar->conf_mutex);
4921
4922 spin_lock_bh(&ar->data_lock);
4923 switch (ar->scan.state) {
4924 case ATH10K_SCAN_IDLE:
4925 reinit_completion(&ar->scan.started);
4926 reinit_completion(&ar->scan.completed);
4927 ar->scan.state = ATH10K_SCAN_STARTING;
4928 ar->scan.is_roc = false;
4929 ar->scan.vdev_id = arvif->vdev_id;
4930 ret = 0;
4931 break;
4932 case ATH10K_SCAN_STARTING:
4933 case ATH10K_SCAN_RUNNING:
4934 case ATH10K_SCAN_ABORTING:
4935 ret = -EBUSY;
4936 break;
4937 }
4938 spin_unlock_bh(&ar->data_lock);
4939
4940 if (ret)
4941 goto exit;
4942
4943 memset(&arg, 0, sizeof(arg));
4944 ath10k_wmi_start_scan_init(ar, &arg);
4945 arg.vdev_id = arvif->vdev_id;
4946 arg.scan_id = ATH10K_SCAN_ID;
4947
4948 if (req->ie_len) {
4949 arg.ie_len = req->ie_len;
4950 memcpy(arg.ie, req->ie, arg.ie_len);
4951 }
4952
4953 if (req->n_ssids) {
4954 arg.n_ssids = req->n_ssids;
4955 for (i = 0; i < arg.n_ssids; i++) {
4956 arg.ssids[i].len = req->ssids[i].ssid_len;
4957 arg.ssids[i].ssid = req->ssids[i].ssid;
4958 }
4959 } else {
4960 arg.scan_ctrl_flags |= WMI_SCAN_FLAG_PASSIVE;
4961 }
4962
4963 if (req->n_channels) {
4964 arg.n_channels = req->n_channels;
4965 for (i = 0; i < arg.n_channels; i++)
4966 arg.channels[i] = req->channels[i]->center_freq;
4967 }
4968
4969 ret = ath10k_start_scan(ar, &arg);
4970 if (ret) {
4971 ath10k_warn(ar, "failed to start hw scan: %d\n", ret);
4972 spin_lock_bh(&ar->data_lock);
4973 ar->scan.state = ATH10K_SCAN_IDLE;
4974 spin_unlock_bh(&ar->data_lock);
4975 }
4976
4977 /* Add a 200ms margin to account for event/command processing */
4978 ieee80211_queue_delayed_work(ar->hw, &ar->scan.timeout,
4979 msecs_to_jiffies(arg.max_scan_time +
4980 200));
4981
4982 exit:
4983 mutex_unlock(&ar->conf_mutex);
4984 return ret;
4985 }
4986
4987 static void ath10k_cancel_hw_scan(struct ieee80211_hw *hw,
4988 struct ieee80211_vif *vif)
4989 {
4990 struct ath10k *ar = hw->priv;
4991
4992 mutex_lock(&ar->conf_mutex);
4993 ath10k_scan_abort(ar);
4994 mutex_unlock(&ar->conf_mutex);
4995
4996 cancel_delayed_work_sync(&ar->scan.timeout);
4997 }
4998
4999 static void ath10k_set_key_h_def_keyidx(struct ath10k *ar,
5000 struct ath10k_vif *arvif,
5001 enum set_key_cmd cmd,
5002 struct ieee80211_key_conf *key)
5003 {
5004 u32 vdev_param = arvif->ar->wmi.vdev_param->def_keyid;
5005 int ret;
5006
5007 /* 10.1 firmware branch requires default key index to be set to group
5008 * key index after installing it. Otherwise FW/HW Txes corrupted
5009 * frames with multi-vif APs. This is not required for main firmware
5010 * branch (e.g. 636).
5011 *
5012 * This is also needed for 636 fw for IBSS-RSN to work more reliably.
5013 *
5014 * FIXME: It remains unknown if this is required for multi-vif STA
5015 * interfaces on 10.1.
5016 */
5017
5018 if (arvif->vdev_type != WMI_VDEV_TYPE_AP &&
5019 arvif->vdev_type != WMI_VDEV_TYPE_IBSS)
5020 return;
5021
5022 if (key->cipher == WLAN_CIPHER_SUITE_WEP40)
5023 return;
5024
5025 if (key->cipher == WLAN_CIPHER_SUITE_WEP104)
5026 return;
5027
5028 if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE)
5029 return;
5030
5031 if (cmd != SET_KEY)
5032 return;
5033
5034 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
5035 key->keyidx);
5036 if (ret)
5037 ath10k_warn(ar, "failed to set vdev %i group key as default key: %d\n",
5038 arvif->vdev_id, ret);
5039 }
5040
5041 static int ath10k_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
5042 struct ieee80211_vif *vif, struct ieee80211_sta *sta,
5043 struct ieee80211_key_conf *key)
5044 {
5045 struct ath10k *ar = hw->priv;
5046 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
5047 struct ath10k_peer *peer;
5048 const u8 *peer_addr;
5049 bool is_wep = key->cipher == WLAN_CIPHER_SUITE_WEP40 ||
5050 key->cipher == WLAN_CIPHER_SUITE_WEP104;
5051 int ret = 0;
5052 int ret2;
5053 u32 flags = 0;
5054 u32 flags2;
5055
5056 /* this one needs to be done in software */
5057 if (key->cipher == WLAN_CIPHER_SUITE_AES_CMAC)
5058 return 1;
5059
5060 if (arvif->nohwcrypt)
5061 return 1;
5062
5063 if (key->keyidx > WMI_MAX_KEY_INDEX)
5064 return -ENOSPC;
5065
5066 mutex_lock(&ar->conf_mutex);
5067
5068 if (sta)
5069 peer_addr = sta->addr;
5070 else if (arvif->vdev_type == WMI_VDEV_TYPE_STA)
5071 peer_addr = vif->bss_conf.bssid;
5072 else
5073 peer_addr = vif->addr;
5074
5075 key->hw_key_idx = key->keyidx;
5076
5077 if (is_wep) {
5078 if (cmd == SET_KEY)
5079 arvif->wep_keys[key->keyidx] = key;
5080 else
5081 arvif->wep_keys[key->keyidx] = NULL;
5082 }
5083
5084 /* the peer should not disappear in mid-way (unless FW goes awry) since
5085 * we already hold conf_mutex. we just make sure its there now. */
5086 spin_lock_bh(&ar->data_lock);
5087 peer = ath10k_peer_find(ar, arvif->vdev_id, peer_addr);
5088 spin_unlock_bh(&ar->data_lock);
5089
5090 if (!peer) {
5091 if (cmd == SET_KEY) {
5092 ath10k_warn(ar, "failed to install key for non-existent peer %pM\n",
5093 peer_addr);
5094 ret = -EOPNOTSUPP;
5095 goto exit;
5096 } else {
5097 /* if the peer doesn't exist there is no key to disable
5098 * anymore */
5099 goto exit;
5100 }
5101 }
5102
5103 if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE)
5104 flags |= WMI_KEY_PAIRWISE;
5105 else
5106 flags |= WMI_KEY_GROUP;
5107
5108 if (is_wep) {
5109 if (cmd == DISABLE_KEY)
5110 ath10k_clear_vdev_key(arvif, key);
5111
5112 /* When WEP keys are uploaded it's possible that there are
5113 * stations associated already (e.g. when merging) without any
5114 * keys. Static WEP needs an explicit per-peer key upload.
5115 */
5116 if (vif->type == NL80211_IFTYPE_ADHOC &&
5117 cmd == SET_KEY)
5118 ath10k_mac_vif_update_wep_key(arvif, key);
5119
5120 /* 802.1x never sets the def_wep_key_idx so each set_key()
5121 * call changes default tx key.
5122 *
5123 * Static WEP sets def_wep_key_idx via .set_default_unicast_key
5124 * after first set_key().
5125 */
5126 if (cmd == SET_KEY && arvif->def_wep_key_idx == -1)
5127 flags |= WMI_KEY_TX_USAGE;
5128 }
5129
5130 ret = ath10k_install_key(arvif, key, cmd, peer_addr, flags);
5131 if (ret) {
5132 WARN_ON(ret > 0);
5133 ath10k_warn(ar, "failed to install key for vdev %i peer %pM: %d\n",
5134 arvif->vdev_id, peer_addr, ret);
5135 goto exit;
5136 }
5137
5138 /* mac80211 sets static WEP keys as groupwise while firmware requires
5139 * them to be installed twice as both pairwise and groupwise.
5140 */
5141 if (is_wep && !sta && vif->type == NL80211_IFTYPE_STATION) {
5142 flags2 = flags;
5143 flags2 &= ~WMI_KEY_GROUP;
5144 flags2 |= WMI_KEY_PAIRWISE;
5145
5146 ret = ath10k_install_key(arvif, key, cmd, peer_addr, flags2);
5147 if (ret) {
5148 WARN_ON(ret > 0);
5149 ath10k_warn(ar, "failed to install (ucast) key for vdev %i peer %pM: %d\n",
5150 arvif->vdev_id, peer_addr, ret);
5151 ret2 = ath10k_install_key(arvif, key, DISABLE_KEY,
5152 peer_addr, flags);
5153 if (ret2) {
5154 WARN_ON(ret2 > 0);
5155 ath10k_warn(ar, "failed to disable (mcast) key for vdev %i peer %pM: %d\n",
5156 arvif->vdev_id, peer_addr, ret2);
5157 }
5158 goto exit;
5159 }
5160 }
5161
5162 ath10k_set_key_h_def_keyidx(ar, arvif, cmd, key);
5163
5164 spin_lock_bh(&ar->data_lock);
5165 peer = ath10k_peer_find(ar, arvif->vdev_id, peer_addr);
5166 if (peer && cmd == SET_KEY)
5167 peer->keys[key->keyidx] = key;
5168 else if (peer && cmd == DISABLE_KEY)
5169 peer->keys[key->keyidx] = NULL;
5170 else if (peer == NULL)
5171 /* impossible unless FW goes crazy */
5172 ath10k_warn(ar, "Peer %pM disappeared!\n", peer_addr);
5173 spin_unlock_bh(&ar->data_lock);
5174
5175 exit:
5176 mutex_unlock(&ar->conf_mutex);
5177 return ret;
5178 }
5179
5180 static void ath10k_set_default_unicast_key(struct ieee80211_hw *hw,
5181 struct ieee80211_vif *vif,
5182 int keyidx)
5183 {
5184 struct ath10k *ar = hw->priv;
5185 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
5186 int ret;
5187
5188 mutex_lock(&arvif->ar->conf_mutex);
5189
5190 if (arvif->ar->state != ATH10K_STATE_ON)
5191 goto unlock;
5192
5193 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d set keyidx %d\n",
5194 arvif->vdev_id, keyidx);
5195
5196 ret = ath10k_wmi_vdev_set_param(arvif->ar,
5197 arvif->vdev_id,
5198 arvif->ar->wmi.vdev_param->def_keyid,
5199 keyidx);
5200
5201 if (ret) {
5202 ath10k_warn(ar, "failed to update wep key index for vdev %d: %d\n",
5203 arvif->vdev_id,
5204 ret);
5205 goto unlock;
5206 }
5207
5208 arvif->def_wep_key_idx = keyidx;
5209
5210 unlock:
5211 mutex_unlock(&arvif->ar->conf_mutex);
5212 }
5213
5214 static void ath10k_sta_rc_update_wk(struct work_struct *wk)
5215 {
5216 struct ath10k *ar;
5217 struct ath10k_vif *arvif;
5218 struct ath10k_sta *arsta;
5219 struct ieee80211_sta *sta;
5220 struct cfg80211_chan_def def;
5221 enum ieee80211_band band;
5222 const u8 *ht_mcs_mask;
5223 const u16 *vht_mcs_mask;
5224 u32 changed, bw, nss, smps;
5225 int err;
5226
5227 arsta = container_of(wk, struct ath10k_sta, update_wk);
5228 sta = container_of((void *)arsta, struct ieee80211_sta, drv_priv);
5229 arvif = arsta->arvif;
5230 ar = arvif->ar;
5231
5232 if (WARN_ON(ath10k_mac_vif_chan(arvif->vif, &def)))
5233 return;
5234
5235 band = def.chan->band;
5236 ht_mcs_mask = arvif->bitrate_mask.control[band].ht_mcs;
5237 vht_mcs_mask = arvif->bitrate_mask.control[band].vht_mcs;
5238
5239 spin_lock_bh(&ar->data_lock);
5240
5241 changed = arsta->changed;
5242 arsta->changed = 0;
5243
5244 bw = arsta->bw;
5245 nss = arsta->nss;
5246 smps = arsta->smps;
5247
5248 spin_unlock_bh(&ar->data_lock);
5249
5250 mutex_lock(&ar->conf_mutex);
5251
5252 nss = max_t(u32, 1, nss);
5253 nss = min(nss, max(ath10k_mac_max_ht_nss(ht_mcs_mask),
5254 ath10k_mac_max_vht_nss(vht_mcs_mask)));
5255
5256 if (changed & IEEE80211_RC_BW_CHANGED) {
5257 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM peer bw %d\n",
5258 sta->addr, bw);
5259
5260 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
5261 WMI_PEER_CHAN_WIDTH, bw);
5262 if (err)
5263 ath10k_warn(ar, "failed to update STA %pM peer bw %d: %d\n",
5264 sta->addr, bw, err);
5265 }
5266
5267 if (changed & IEEE80211_RC_NSS_CHANGED) {
5268 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM nss %d\n",
5269 sta->addr, nss);
5270
5271 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
5272 WMI_PEER_NSS, nss);
5273 if (err)
5274 ath10k_warn(ar, "failed to update STA %pM nss %d: %d\n",
5275 sta->addr, nss, err);
5276 }
5277
5278 if (changed & IEEE80211_RC_SMPS_CHANGED) {
5279 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM smps %d\n",
5280 sta->addr, smps);
5281
5282 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
5283 WMI_PEER_SMPS_STATE, smps);
5284 if (err)
5285 ath10k_warn(ar, "failed to update STA %pM smps %d: %d\n",
5286 sta->addr, smps, err);
5287 }
5288
5289 if (changed & IEEE80211_RC_SUPP_RATES_CHANGED ||
5290 changed & IEEE80211_RC_NSS_CHANGED) {
5291 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM supp rates/nss\n",
5292 sta->addr);
5293
5294 err = ath10k_station_assoc(ar, arvif->vif, sta, true);
5295 if (err)
5296 ath10k_warn(ar, "failed to reassociate station: %pM\n",
5297 sta->addr);
5298 }
5299
5300 mutex_unlock(&ar->conf_mutex);
5301 }
5302
5303 static int ath10k_mac_inc_num_stations(struct ath10k_vif *arvif,
5304 struct ieee80211_sta *sta)
5305 {
5306 struct ath10k *ar = arvif->ar;
5307
5308 lockdep_assert_held(&ar->conf_mutex);
5309
5310 if (arvif->vdev_type == WMI_VDEV_TYPE_STA && !sta->tdls)
5311 return 0;
5312
5313 if (ar->num_stations >= ar->max_num_stations)
5314 return -ENOBUFS;
5315
5316 ar->num_stations++;
5317
5318 return 0;
5319 }
5320
5321 static void ath10k_mac_dec_num_stations(struct ath10k_vif *arvif,
5322 struct ieee80211_sta *sta)
5323 {
5324 struct ath10k *ar = arvif->ar;
5325
5326 lockdep_assert_held(&ar->conf_mutex);
5327
5328 if (arvif->vdev_type == WMI_VDEV_TYPE_STA && !sta->tdls)
5329 return;
5330
5331 ar->num_stations--;
5332 }
5333
5334 struct ath10k_mac_tdls_iter_data {
5335 u32 num_tdls_stations;
5336 struct ieee80211_vif *curr_vif;
5337 };
5338
5339 static void ath10k_mac_tdls_vif_stations_count_iter(void *data,
5340 struct ieee80211_sta *sta)
5341 {
5342 struct ath10k_mac_tdls_iter_data *iter_data = data;
5343 struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
5344 struct ieee80211_vif *sta_vif = arsta->arvif->vif;
5345
5346 if (sta->tdls && sta_vif == iter_data->curr_vif)
5347 iter_data->num_tdls_stations++;
5348 }
5349
5350 static int ath10k_mac_tdls_vif_stations_count(struct ieee80211_hw *hw,
5351 struct ieee80211_vif *vif)
5352 {
5353 struct ath10k_mac_tdls_iter_data data = {};
5354
5355 data.curr_vif = vif;
5356
5357 ieee80211_iterate_stations_atomic(hw,
5358 ath10k_mac_tdls_vif_stations_count_iter,
5359 &data);
5360 return data.num_tdls_stations;
5361 }
5362
5363 static void ath10k_mac_tdls_vifs_count_iter(void *data, u8 *mac,
5364 struct ieee80211_vif *vif)
5365 {
5366 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
5367 int *num_tdls_vifs = data;
5368
5369 if (vif->type != NL80211_IFTYPE_STATION)
5370 return;
5371
5372 if (ath10k_mac_tdls_vif_stations_count(arvif->ar->hw, vif) > 0)
5373 (*num_tdls_vifs)++;
5374 }
5375
5376 static int ath10k_mac_tdls_vifs_count(struct ieee80211_hw *hw)
5377 {
5378 int num_tdls_vifs = 0;
5379
5380 ieee80211_iterate_active_interfaces_atomic(hw,
5381 IEEE80211_IFACE_ITER_NORMAL,
5382 ath10k_mac_tdls_vifs_count_iter,
5383 &num_tdls_vifs);
5384 return num_tdls_vifs;
5385 }
5386
5387 static int ath10k_sta_state(struct ieee80211_hw *hw,
5388 struct ieee80211_vif *vif,
5389 struct ieee80211_sta *sta,
5390 enum ieee80211_sta_state old_state,
5391 enum ieee80211_sta_state new_state)
5392 {
5393 struct ath10k *ar = hw->priv;
5394 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
5395 struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
5396 int ret = 0;
5397
5398 if (old_state == IEEE80211_STA_NOTEXIST &&
5399 new_state == IEEE80211_STA_NONE) {
5400 memset(arsta, 0, sizeof(*arsta));
5401 arsta->arvif = arvif;
5402 INIT_WORK(&arsta->update_wk, ath10k_sta_rc_update_wk);
5403 }
5404
5405 /* cancel must be done outside the mutex to avoid deadlock */
5406 if ((old_state == IEEE80211_STA_NONE &&
5407 new_state == IEEE80211_STA_NOTEXIST))
5408 cancel_work_sync(&arsta->update_wk);
5409
5410 mutex_lock(&ar->conf_mutex);
5411
5412 if (old_state == IEEE80211_STA_NOTEXIST &&
5413 new_state == IEEE80211_STA_NONE) {
5414 /*
5415 * New station addition.
5416 */
5417 enum wmi_peer_type peer_type = WMI_PEER_TYPE_DEFAULT;
5418 u32 num_tdls_stations;
5419 u32 num_tdls_vifs;
5420
5421 ath10k_dbg(ar, ATH10K_DBG_MAC,
5422 "mac vdev %d peer create %pM (new sta) sta %d / %d peer %d / %d\n",
5423 arvif->vdev_id, sta->addr,
5424 ar->num_stations + 1, ar->max_num_stations,
5425 ar->num_peers + 1, ar->max_num_peers);
5426
5427 ret = ath10k_mac_inc_num_stations(arvif, sta);
5428 if (ret) {
5429 ath10k_warn(ar, "refusing to associate station: too many connected already (%d)\n",
5430 ar->max_num_stations);
5431 goto exit;
5432 }
5433
5434 if (sta->tdls)
5435 peer_type = WMI_PEER_TYPE_TDLS;
5436
5437 ret = ath10k_peer_create(ar, arvif->vdev_id, sta->addr,
5438 peer_type);
5439 if (ret) {
5440 ath10k_warn(ar, "failed to add peer %pM for vdev %d when adding a new sta: %i\n",
5441 sta->addr, arvif->vdev_id, ret);
5442 ath10k_mac_dec_num_stations(arvif, sta);
5443 goto exit;
5444 }
5445
5446 if (!sta->tdls)
5447 goto exit;
5448
5449 num_tdls_stations = ath10k_mac_tdls_vif_stations_count(hw, vif);
5450 num_tdls_vifs = ath10k_mac_tdls_vifs_count(hw);
5451
5452 if (num_tdls_vifs >= ar->max_num_tdls_vdevs &&
5453 num_tdls_stations == 0) {
5454 ath10k_warn(ar, "vdev %i exceeded maximum number of tdls vdevs %i\n",
5455 arvif->vdev_id, ar->max_num_tdls_vdevs);
5456 ath10k_peer_delete(ar, arvif->vdev_id, sta->addr);
5457 ath10k_mac_dec_num_stations(arvif, sta);
5458 ret = -ENOBUFS;
5459 goto exit;
5460 }
5461
5462 if (num_tdls_stations == 0) {
5463 /* This is the first tdls peer in current vif */
5464 enum wmi_tdls_state state = WMI_TDLS_ENABLE_ACTIVE;
5465
5466 ret = ath10k_wmi_update_fw_tdls_state(ar, arvif->vdev_id,
5467 state);
5468 if (ret) {
5469 ath10k_warn(ar, "failed to update fw tdls state on vdev %i: %i\n",
5470 arvif->vdev_id, ret);
5471 ath10k_peer_delete(ar, arvif->vdev_id,
5472 sta->addr);
5473 ath10k_mac_dec_num_stations(arvif, sta);
5474 goto exit;
5475 }
5476 }
5477
5478 ret = ath10k_mac_tdls_peer_update(ar, arvif->vdev_id, sta,
5479 WMI_TDLS_PEER_STATE_PEERING);
5480 if (ret) {
5481 ath10k_warn(ar,
5482 "failed to update tdls peer %pM for vdev %d when adding a new sta: %i\n",
5483 sta->addr, arvif->vdev_id, ret);
5484 ath10k_peer_delete(ar, arvif->vdev_id, sta->addr);
5485 ath10k_mac_dec_num_stations(arvif, sta);
5486
5487 if (num_tdls_stations != 0)
5488 goto exit;
5489 ath10k_wmi_update_fw_tdls_state(ar, arvif->vdev_id,
5490 WMI_TDLS_DISABLE);
5491 }
5492 } else if ((old_state == IEEE80211_STA_NONE &&
5493 new_state == IEEE80211_STA_NOTEXIST)) {
5494 /*
5495 * Existing station deletion.
5496 */
5497 ath10k_dbg(ar, ATH10K_DBG_MAC,
5498 "mac vdev %d peer delete %pM (sta gone)\n",
5499 arvif->vdev_id, sta->addr);
5500
5501 ret = ath10k_peer_delete(ar, arvif->vdev_id, sta->addr);
5502 if (ret)
5503 ath10k_warn(ar, "failed to delete peer %pM for vdev %d: %i\n",
5504 sta->addr, arvif->vdev_id, ret);
5505
5506 ath10k_mac_dec_num_stations(arvif, sta);
5507
5508 if (!sta->tdls)
5509 goto exit;
5510
5511 if (ath10k_mac_tdls_vif_stations_count(hw, vif))
5512 goto exit;
5513
5514 /* This was the last tdls peer in current vif */
5515 ret = ath10k_wmi_update_fw_tdls_state(ar, arvif->vdev_id,
5516 WMI_TDLS_DISABLE);
5517 if (ret) {
5518 ath10k_warn(ar, "failed to update fw tdls state on vdev %i: %i\n",
5519 arvif->vdev_id, ret);
5520 }
5521 } else if (old_state == IEEE80211_STA_AUTH &&
5522 new_state == IEEE80211_STA_ASSOC &&
5523 (vif->type == NL80211_IFTYPE_AP ||
5524 vif->type == NL80211_IFTYPE_MESH_POINT ||
5525 vif->type == NL80211_IFTYPE_ADHOC)) {
5526 /*
5527 * New association.
5528 */
5529 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac sta %pM associated\n",
5530 sta->addr);
5531
5532 ret = ath10k_station_assoc(ar, vif, sta, false);
5533 if (ret)
5534 ath10k_warn(ar, "failed to associate station %pM for vdev %i: %i\n",
5535 sta->addr, arvif->vdev_id, ret);
5536 } else if (old_state == IEEE80211_STA_ASSOC &&
5537 new_state == IEEE80211_STA_AUTHORIZED &&
5538 sta->tdls) {
5539 /*
5540 * Tdls station authorized.
5541 */
5542 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac tdls sta %pM authorized\n",
5543 sta->addr);
5544
5545 ret = ath10k_station_assoc(ar, vif, sta, false);
5546 if (ret) {
5547 ath10k_warn(ar, "failed to associate tdls station %pM for vdev %i: %i\n",
5548 sta->addr, arvif->vdev_id, ret);
5549 goto exit;
5550 }
5551
5552 ret = ath10k_mac_tdls_peer_update(ar, arvif->vdev_id, sta,
5553 WMI_TDLS_PEER_STATE_CONNECTED);
5554 if (ret)
5555 ath10k_warn(ar, "failed to update tdls peer %pM for vdev %i: %i\n",
5556 sta->addr, arvif->vdev_id, ret);
5557 } else if (old_state == IEEE80211_STA_ASSOC &&
5558 new_state == IEEE80211_STA_AUTH &&
5559 (vif->type == NL80211_IFTYPE_AP ||
5560 vif->type == NL80211_IFTYPE_MESH_POINT ||
5561 vif->type == NL80211_IFTYPE_ADHOC)) {
5562 /*
5563 * Disassociation.
5564 */
5565 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac sta %pM disassociated\n",
5566 sta->addr);
5567
5568 ret = ath10k_station_disassoc(ar, vif, sta);
5569 if (ret)
5570 ath10k_warn(ar, "failed to disassociate station: %pM vdev %i: %i\n",
5571 sta->addr, arvif->vdev_id, ret);
5572 }
5573 exit:
5574 mutex_unlock(&ar->conf_mutex);
5575 return ret;
5576 }
5577
5578 static int ath10k_conf_tx_uapsd(struct ath10k *ar, struct ieee80211_vif *vif,
5579 u16 ac, bool enable)
5580 {
5581 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
5582 struct wmi_sta_uapsd_auto_trig_arg arg = {};
5583 u32 prio = 0, acc = 0;
5584 u32 value = 0;
5585 int ret = 0;
5586
5587 lockdep_assert_held(&ar->conf_mutex);
5588
5589 if (arvif->vdev_type != WMI_VDEV_TYPE_STA)
5590 return 0;
5591
5592 switch (ac) {
5593 case IEEE80211_AC_VO:
5594 value = WMI_STA_PS_UAPSD_AC3_DELIVERY_EN |
5595 WMI_STA_PS_UAPSD_AC3_TRIGGER_EN;
5596 prio = 7;
5597 acc = 3;
5598 break;
5599 case IEEE80211_AC_VI:
5600 value = WMI_STA_PS_UAPSD_AC2_DELIVERY_EN |
5601 WMI_STA_PS_UAPSD_AC2_TRIGGER_EN;
5602 prio = 5;
5603 acc = 2;
5604 break;
5605 case IEEE80211_AC_BE:
5606 value = WMI_STA_PS_UAPSD_AC1_DELIVERY_EN |
5607 WMI_STA_PS_UAPSD_AC1_TRIGGER_EN;
5608 prio = 2;
5609 acc = 1;
5610 break;
5611 case IEEE80211_AC_BK:
5612 value = WMI_STA_PS_UAPSD_AC0_DELIVERY_EN |
5613 WMI_STA_PS_UAPSD_AC0_TRIGGER_EN;
5614 prio = 0;
5615 acc = 0;
5616 break;
5617 }
5618
5619 if (enable)
5620 arvif->u.sta.uapsd |= value;
5621 else
5622 arvif->u.sta.uapsd &= ~value;
5623
5624 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
5625 WMI_STA_PS_PARAM_UAPSD,
5626 arvif->u.sta.uapsd);
5627 if (ret) {
5628 ath10k_warn(ar, "failed to set uapsd params: %d\n", ret);
5629 goto exit;
5630 }
5631
5632 if (arvif->u.sta.uapsd)
5633 value = WMI_STA_PS_RX_WAKE_POLICY_POLL_UAPSD;
5634 else
5635 value = WMI_STA_PS_RX_WAKE_POLICY_WAKE;
5636
5637 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
5638 WMI_STA_PS_PARAM_RX_WAKE_POLICY,
5639 value);
5640 if (ret)
5641 ath10k_warn(ar, "failed to set rx wake param: %d\n", ret);
5642
5643 ret = ath10k_mac_vif_recalc_ps_wake_threshold(arvif);
5644 if (ret) {
5645 ath10k_warn(ar, "failed to recalc ps wake threshold on vdev %i: %d\n",
5646 arvif->vdev_id, ret);
5647 return ret;
5648 }
5649
5650 ret = ath10k_mac_vif_recalc_ps_poll_count(arvif);
5651 if (ret) {
5652 ath10k_warn(ar, "failed to recalc ps poll count on vdev %i: %d\n",
5653 arvif->vdev_id, ret);
5654 return ret;
5655 }
5656
5657 if (test_bit(WMI_SERVICE_STA_UAPSD_BASIC_AUTO_TRIG, ar->wmi.svc_map) ||
5658 test_bit(WMI_SERVICE_STA_UAPSD_VAR_AUTO_TRIG, ar->wmi.svc_map)) {
5659 /* Only userspace can make an educated decision when to send
5660 * trigger frame. The following effectively disables u-UAPSD
5661 * autotrigger in firmware (which is enabled by default
5662 * provided the autotrigger service is available).
5663 */
5664
5665 arg.wmm_ac = acc;
5666 arg.user_priority = prio;
5667 arg.service_interval = 0;
5668 arg.suspend_interval = WMI_STA_UAPSD_MAX_INTERVAL_MSEC;
5669 arg.delay_interval = WMI_STA_UAPSD_MAX_INTERVAL_MSEC;
5670
5671 ret = ath10k_wmi_vdev_sta_uapsd(ar, arvif->vdev_id,
5672 arvif->bssid, &arg, 1);
5673 if (ret) {
5674 ath10k_warn(ar, "failed to set uapsd auto trigger %d\n",
5675 ret);
5676 return ret;
5677 }
5678 }
5679
5680 exit:
5681 return ret;
5682 }
5683
5684 static int ath10k_conf_tx(struct ieee80211_hw *hw,
5685 struct ieee80211_vif *vif, u16 ac,
5686 const struct ieee80211_tx_queue_params *params)
5687 {
5688 struct ath10k *ar = hw->priv;
5689 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
5690 struct wmi_wmm_params_arg *p = NULL;
5691 int ret;
5692
5693 mutex_lock(&ar->conf_mutex);
5694
5695 switch (ac) {
5696 case IEEE80211_AC_VO:
5697 p = &arvif->wmm_params.ac_vo;
5698 break;
5699 case IEEE80211_AC_VI:
5700 p = &arvif->wmm_params.ac_vi;
5701 break;
5702 case IEEE80211_AC_BE:
5703 p = &arvif->wmm_params.ac_be;
5704 break;
5705 case IEEE80211_AC_BK:
5706 p = &arvif->wmm_params.ac_bk;
5707 break;
5708 }
5709
5710 if (WARN_ON(!p)) {
5711 ret = -EINVAL;
5712 goto exit;
5713 }
5714
5715 p->cwmin = params->cw_min;
5716 p->cwmax = params->cw_max;
5717 p->aifs = params->aifs;
5718
5719 /*
5720 * The channel time duration programmed in the HW is in absolute
5721 * microseconds, while mac80211 gives the txop in units of
5722 * 32 microseconds.
5723 */
5724 p->txop = params->txop * 32;
5725
5726 if (ar->wmi.ops->gen_vdev_wmm_conf) {
5727 ret = ath10k_wmi_vdev_wmm_conf(ar, arvif->vdev_id,
5728 &arvif->wmm_params);
5729 if (ret) {
5730 ath10k_warn(ar, "failed to set vdev wmm params on vdev %i: %d\n",
5731 arvif->vdev_id, ret);
5732 goto exit;
5733 }
5734 } else {
5735 /* This won't work well with multi-interface cases but it's
5736 * better than nothing.
5737 */
5738 ret = ath10k_wmi_pdev_set_wmm_params(ar, &arvif->wmm_params);
5739 if (ret) {
5740 ath10k_warn(ar, "failed to set wmm params: %d\n", ret);
5741 goto exit;
5742 }
5743 }
5744
5745 ret = ath10k_conf_tx_uapsd(ar, vif, ac, params->uapsd);
5746 if (ret)
5747 ath10k_warn(ar, "failed to set sta uapsd: %d\n", ret);
5748
5749 exit:
5750 mutex_unlock(&ar->conf_mutex);
5751 return ret;
5752 }
5753
5754 #define ATH10K_ROC_TIMEOUT_HZ (2*HZ)
5755
5756 static int ath10k_remain_on_channel(struct ieee80211_hw *hw,
5757 struct ieee80211_vif *vif,
5758 struct ieee80211_channel *chan,
5759 int duration,
5760 enum ieee80211_roc_type type)
5761 {
5762 struct ath10k *ar = hw->priv;
5763 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
5764 struct wmi_start_scan_arg arg;
5765 int ret = 0;
5766 u32 scan_time_msec;
5767
5768 mutex_lock(&ar->conf_mutex);
5769
5770 spin_lock_bh(&ar->data_lock);
5771 switch (ar->scan.state) {
5772 case ATH10K_SCAN_IDLE:
5773 reinit_completion(&ar->scan.started);
5774 reinit_completion(&ar->scan.completed);
5775 reinit_completion(&ar->scan.on_channel);
5776 ar->scan.state = ATH10K_SCAN_STARTING;
5777 ar->scan.is_roc = true;
5778 ar->scan.vdev_id = arvif->vdev_id;
5779 ar->scan.roc_freq = chan->center_freq;
5780 ar->scan.roc_notify = true;
5781 ret = 0;
5782 break;
5783 case ATH10K_SCAN_STARTING:
5784 case ATH10K_SCAN_RUNNING:
5785 case ATH10K_SCAN_ABORTING:
5786 ret = -EBUSY;
5787 break;
5788 }
5789 spin_unlock_bh(&ar->data_lock);
5790
5791 if (ret)
5792 goto exit;
5793
5794 scan_time_msec = ar->hw->wiphy->max_remain_on_channel_duration * 2;
5795
5796 memset(&arg, 0, sizeof(arg));
5797 ath10k_wmi_start_scan_init(ar, &arg);
5798 arg.vdev_id = arvif->vdev_id;
5799 arg.scan_id = ATH10K_SCAN_ID;
5800 arg.n_channels = 1;
5801 arg.channels[0] = chan->center_freq;
5802 arg.dwell_time_active = scan_time_msec;
5803 arg.dwell_time_passive = scan_time_msec;
5804 arg.max_scan_time = scan_time_msec;
5805 arg.scan_ctrl_flags |= WMI_SCAN_FLAG_PASSIVE;
5806 arg.scan_ctrl_flags |= WMI_SCAN_FILTER_PROBE_REQ;
5807 arg.burst_duration_ms = duration;
5808
5809 ret = ath10k_start_scan(ar, &arg);
5810 if (ret) {
5811 ath10k_warn(ar, "failed to start roc scan: %d\n", ret);
5812 spin_lock_bh(&ar->data_lock);
5813 ar->scan.state = ATH10K_SCAN_IDLE;
5814 spin_unlock_bh(&ar->data_lock);
5815 goto exit;
5816 }
5817
5818 ret = wait_for_completion_timeout(&ar->scan.on_channel, 3*HZ);
5819 if (ret == 0) {
5820 ath10k_warn(ar, "failed to switch to channel for roc scan\n");
5821
5822 ret = ath10k_scan_stop(ar);
5823 if (ret)
5824 ath10k_warn(ar, "failed to stop scan: %d\n", ret);
5825
5826 ret = -ETIMEDOUT;
5827 goto exit;
5828 }
5829
5830 ieee80211_queue_delayed_work(ar->hw, &ar->scan.timeout,
5831 msecs_to_jiffies(duration));
5832
5833 ret = 0;
5834 exit:
5835 mutex_unlock(&ar->conf_mutex);
5836 return ret;
5837 }
5838
5839 static int ath10k_cancel_remain_on_channel(struct ieee80211_hw *hw)
5840 {
5841 struct ath10k *ar = hw->priv;
5842
5843 mutex_lock(&ar->conf_mutex);
5844
5845 spin_lock_bh(&ar->data_lock);
5846 ar->scan.roc_notify = false;
5847 spin_unlock_bh(&ar->data_lock);
5848
5849 ath10k_scan_abort(ar);
5850
5851 mutex_unlock(&ar->conf_mutex);
5852
5853 cancel_delayed_work_sync(&ar->scan.timeout);
5854
5855 return 0;
5856 }
5857
5858 /*
5859 * Both RTS and Fragmentation threshold are interface-specific
5860 * in ath10k, but device-specific in mac80211.
5861 */
5862
5863 static int ath10k_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
5864 {
5865 struct ath10k *ar = hw->priv;
5866 struct ath10k_vif *arvif;
5867 int ret = 0;
5868
5869 mutex_lock(&ar->conf_mutex);
5870 list_for_each_entry(arvif, &ar->arvifs, list) {
5871 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d rts threshold %d\n",
5872 arvif->vdev_id, value);
5873
5874 ret = ath10k_mac_set_rts(arvif, value);
5875 if (ret) {
5876 ath10k_warn(ar, "failed to set rts threshold for vdev %d: %d\n",
5877 arvif->vdev_id, ret);
5878 break;
5879 }
5880 }
5881 mutex_unlock(&ar->conf_mutex);
5882
5883 return ret;
5884 }
5885
5886 static int ath10k_mac_op_set_frag_threshold(struct ieee80211_hw *hw, u32 value)
5887 {
5888 /* Even though there's a WMI enum for fragmentation threshold no known
5889 * firmware actually implements it. Moreover it is not possible to rely
5890 * frame fragmentation to mac80211 because firmware clears the "more
5891 * fragments" bit in frame control making it impossible for remote
5892 * devices to reassemble frames.
5893 *
5894 * Hence implement a dummy callback just to say fragmentation isn't
5895 * supported. This effectively prevents mac80211 from doing frame
5896 * fragmentation in software.
5897 */
5898 return -EOPNOTSUPP;
5899 }
5900
5901 static void ath10k_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
5902 u32 queues, bool drop)
5903 {
5904 struct ath10k *ar = hw->priv;
5905 bool skip;
5906 long time_left;
5907
5908 /* mac80211 doesn't care if we really xmit queued frames or not
5909 * we'll collect those frames either way if we stop/delete vdevs */
5910 if (drop)
5911 return;
5912
5913 mutex_lock(&ar->conf_mutex);
5914
5915 if (ar->state == ATH10K_STATE_WEDGED)
5916 goto skip;
5917
5918 time_left = wait_event_timeout(ar->htt.empty_tx_wq, ({
5919 bool empty;
5920
5921 spin_lock_bh(&ar->htt.tx_lock);
5922 empty = (ar->htt.num_pending_tx == 0);
5923 spin_unlock_bh(&ar->htt.tx_lock);
5924
5925 skip = (ar->state == ATH10K_STATE_WEDGED) ||
5926 test_bit(ATH10K_FLAG_CRASH_FLUSH,
5927 &ar->dev_flags);
5928
5929 (empty || skip);
5930 }), ATH10K_FLUSH_TIMEOUT_HZ);
5931
5932 if (time_left == 0 || skip)
5933 ath10k_warn(ar, "failed to flush transmit queue (skip %i ar-state %i): %ld\n",
5934 skip, ar->state, time_left);
5935
5936 skip:
5937 mutex_unlock(&ar->conf_mutex);
5938 }
5939
5940 /* TODO: Implement this function properly
5941 * For now it is needed to reply to Probe Requests in IBSS mode.
5942 * Propably we need this information from FW.
5943 */
5944 static int ath10k_tx_last_beacon(struct ieee80211_hw *hw)
5945 {
5946 return 1;
5947 }
5948
5949 static void ath10k_reconfig_complete(struct ieee80211_hw *hw,
5950 enum ieee80211_reconfig_type reconfig_type)
5951 {
5952 struct ath10k *ar = hw->priv;
5953
5954 if (reconfig_type != IEEE80211_RECONFIG_TYPE_RESTART)
5955 return;
5956
5957 mutex_lock(&ar->conf_mutex);
5958
5959 /* If device failed to restart it will be in a different state, e.g.
5960 * ATH10K_STATE_WEDGED */
5961 if (ar->state == ATH10K_STATE_RESTARTED) {
5962 ath10k_info(ar, "device successfully recovered\n");
5963 ar->state = ATH10K_STATE_ON;
5964 ieee80211_wake_queues(ar->hw);
5965 }
5966
5967 mutex_unlock(&ar->conf_mutex);
5968 }
5969
5970 static int ath10k_get_survey(struct ieee80211_hw *hw, int idx,
5971 struct survey_info *survey)
5972 {
5973 struct ath10k *ar = hw->priv;
5974 struct ieee80211_supported_band *sband;
5975 struct survey_info *ar_survey = &ar->survey[idx];
5976 int ret = 0;
5977
5978 mutex_lock(&ar->conf_mutex);
5979
5980 sband = hw->wiphy->bands[IEEE80211_BAND_2GHZ];
5981 if (sband && idx >= sband->n_channels) {
5982 idx -= sband->n_channels;
5983 sband = NULL;
5984 }
5985
5986 if (!sband)
5987 sband = hw->wiphy->bands[IEEE80211_BAND_5GHZ];
5988
5989 if (!sband || idx >= sband->n_channels) {
5990 ret = -ENOENT;
5991 goto exit;
5992 }
5993
5994 spin_lock_bh(&ar->data_lock);
5995 memcpy(survey, ar_survey, sizeof(*survey));
5996 spin_unlock_bh(&ar->data_lock);
5997
5998 survey->channel = &sband->channels[idx];
5999
6000 if (ar->rx_channel == survey->channel)
6001 survey->filled |= SURVEY_INFO_IN_USE;
6002
6003 exit:
6004 mutex_unlock(&ar->conf_mutex);
6005 return ret;
6006 }
6007
6008 static bool
6009 ath10k_mac_bitrate_mask_has_single_rate(struct ath10k *ar,
6010 enum ieee80211_band band,
6011 const struct cfg80211_bitrate_mask *mask)
6012 {
6013 int num_rates = 0;
6014 int i;
6015
6016 num_rates += hweight32(mask->control[band].legacy);
6017
6018 for (i = 0; i < ARRAY_SIZE(mask->control[band].ht_mcs); i++)
6019 num_rates += hweight8(mask->control[band].ht_mcs[i]);
6020
6021 for (i = 0; i < ARRAY_SIZE(mask->control[band].vht_mcs); i++)
6022 num_rates += hweight16(mask->control[band].vht_mcs[i]);
6023
6024 return num_rates == 1;
6025 }
6026
6027 static bool
6028 ath10k_mac_bitrate_mask_get_single_nss(struct ath10k *ar,
6029 enum ieee80211_band band,
6030 const struct cfg80211_bitrate_mask *mask,
6031 int *nss)
6032 {
6033 struct ieee80211_supported_band *sband = &ar->mac.sbands[band];
6034 u16 vht_mcs_map = le16_to_cpu(sband->vht_cap.vht_mcs.tx_mcs_map);
6035 u8 ht_nss_mask = 0;
6036 u8 vht_nss_mask = 0;
6037 int i;
6038
6039 if (mask->control[band].legacy)
6040 return false;
6041
6042 for (i = 0; i < ARRAY_SIZE(mask->control[band].ht_mcs); i++) {
6043 if (mask->control[band].ht_mcs[i] == 0)
6044 continue;
6045 else if (mask->control[band].ht_mcs[i] ==
6046 sband->ht_cap.mcs.rx_mask[i])
6047 ht_nss_mask |= BIT(i);
6048 else
6049 return false;
6050 }
6051
6052 for (i = 0; i < ARRAY_SIZE(mask->control[band].vht_mcs); i++) {
6053 if (mask->control[band].vht_mcs[i] == 0)
6054 continue;
6055 else if (mask->control[band].vht_mcs[i] ==
6056 ath10k_mac_get_max_vht_mcs_map(vht_mcs_map, i))
6057 vht_nss_mask |= BIT(i);
6058 else
6059 return false;
6060 }
6061
6062 if (ht_nss_mask != vht_nss_mask)
6063 return false;
6064
6065 if (ht_nss_mask == 0)
6066 return false;
6067
6068 if (BIT(fls(ht_nss_mask)) - 1 != ht_nss_mask)
6069 return false;
6070
6071 *nss = fls(ht_nss_mask);
6072
6073 return true;
6074 }
6075
6076 static int
6077 ath10k_mac_bitrate_mask_get_single_rate(struct ath10k *ar,
6078 enum ieee80211_band band,
6079 const struct cfg80211_bitrate_mask *mask,
6080 u8 *rate, u8 *nss)
6081 {
6082 struct ieee80211_supported_band *sband = &ar->mac.sbands[band];
6083 int rate_idx;
6084 int i;
6085 u16 bitrate;
6086 u8 preamble;
6087 u8 hw_rate;
6088
6089 if (hweight32(mask->control[band].legacy) == 1) {
6090 rate_idx = ffs(mask->control[band].legacy) - 1;
6091
6092 hw_rate = sband->bitrates[rate_idx].hw_value;
6093 bitrate = sband->bitrates[rate_idx].bitrate;
6094
6095 if (ath10k_mac_bitrate_is_cck(bitrate))
6096 preamble = WMI_RATE_PREAMBLE_CCK;
6097 else
6098 preamble = WMI_RATE_PREAMBLE_OFDM;
6099
6100 *nss = 1;
6101 *rate = preamble << 6 |
6102 (*nss - 1) << 4 |
6103 hw_rate << 0;
6104
6105 return 0;
6106 }
6107
6108 for (i = 0; i < ARRAY_SIZE(mask->control[band].ht_mcs); i++) {
6109 if (hweight8(mask->control[band].ht_mcs[i]) == 1) {
6110 *nss = i + 1;
6111 *rate = WMI_RATE_PREAMBLE_HT << 6 |
6112 (*nss - 1) << 4 |
6113 (ffs(mask->control[band].ht_mcs[i]) - 1);
6114
6115 return 0;
6116 }
6117 }
6118
6119 for (i = 0; i < ARRAY_SIZE(mask->control[band].vht_mcs); i++) {
6120 if (hweight16(mask->control[band].vht_mcs[i]) == 1) {
6121 *nss = i + 1;
6122 *rate = WMI_RATE_PREAMBLE_VHT << 6 |
6123 (*nss - 1) << 4 |
6124 (ffs(mask->control[band].vht_mcs[i]) - 1);
6125
6126 return 0;
6127 }
6128 }
6129
6130 return -EINVAL;
6131 }
6132
6133 static int ath10k_mac_set_fixed_rate_params(struct ath10k_vif *arvif,
6134 u8 rate, u8 nss, u8 sgi, u8 ldpc)
6135 {
6136 struct ath10k *ar = arvif->ar;
6137 u32 vdev_param;
6138 int ret;
6139
6140 lockdep_assert_held(&ar->conf_mutex);
6141
6142 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac set fixed rate params vdev %i rate 0x%02hhx nss %hhu sgi %hhu\n",
6143 arvif->vdev_id, rate, nss, sgi);
6144
6145 vdev_param = ar->wmi.vdev_param->fixed_rate;
6146 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, rate);
6147 if (ret) {
6148 ath10k_warn(ar, "failed to set fixed rate param 0x%02x: %d\n",
6149 rate, ret);
6150 return ret;
6151 }
6152
6153 vdev_param = ar->wmi.vdev_param->nss;
6154 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, nss);
6155 if (ret) {
6156 ath10k_warn(ar, "failed to set nss param %d: %d\n", nss, ret);
6157 return ret;
6158 }
6159
6160 vdev_param = ar->wmi.vdev_param->sgi;
6161 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, sgi);
6162 if (ret) {
6163 ath10k_warn(ar, "failed to set sgi param %d: %d\n", sgi, ret);
6164 return ret;
6165 }
6166
6167 vdev_param = ar->wmi.vdev_param->ldpc;
6168 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, ldpc);
6169 if (ret) {
6170 ath10k_warn(ar, "failed to set ldpc param %d: %d\n", ldpc, ret);
6171 return ret;
6172 }
6173
6174 return 0;
6175 }
6176
6177 static bool
6178 ath10k_mac_can_set_bitrate_mask(struct ath10k *ar,
6179 enum ieee80211_band band,
6180 const struct cfg80211_bitrate_mask *mask)
6181 {
6182 int i;
6183 u16 vht_mcs;
6184
6185 /* Due to firmware limitation in WMI_PEER_ASSOC_CMDID it is impossible
6186 * to express all VHT MCS rate masks. Effectively only the following
6187 * ranges can be used: none, 0-7, 0-8 and 0-9.
6188 */
6189 for (i = 0; i < NL80211_VHT_NSS_MAX; i++) {
6190 vht_mcs = mask->control[band].vht_mcs[i];
6191
6192 switch (vht_mcs) {
6193 case 0:
6194 case BIT(8) - 1:
6195 case BIT(9) - 1:
6196 case BIT(10) - 1:
6197 break;
6198 default:
6199 ath10k_warn(ar, "refusing bitrate mask with missing 0-7 VHT MCS rates\n");
6200 return false;
6201 }
6202 }
6203
6204 return true;
6205 }
6206
6207 static void ath10k_mac_set_bitrate_mask_iter(void *data,
6208 struct ieee80211_sta *sta)
6209 {
6210 struct ath10k_vif *arvif = data;
6211 struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
6212 struct ath10k *ar = arvif->ar;
6213
6214 if (arsta->arvif != arvif)
6215 return;
6216
6217 spin_lock_bh(&ar->data_lock);
6218 arsta->changed |= IEEE80211_RC_SUPP_RATES_CHANGED;
6219 spin_unlock_bh(&ar->data_lock);
6220
6221 ieee80211_queue_work(ar->hw, &arsta->update_wk);
6222 }
6223
6224 static int ath10k_mac_op_set_bitrate_mask(struct ieee80211_hw *hw,
6225 struct ieee80211_vif *vif,
6226 const struct cfg80211_bitrate_mask *mask)
6227 {
6228 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
6229 struct cfg80211_chan_def def;
6230 struct ath10k *ar = arvif->ar;
6231 enum ieee80211_band band;
6232 const u8 *ht_mcs_mask;
6233 const u16 *vht_mcs_mask;
6234 u8 rate;
6235 u8 nss;
6236 u8 sgi;
6237 u8 ldpc;
6238 int single_nss;
6239 int ret;
6240
6241 if (ath10k_mac_vif_chan(vif, &def))
6242 return -EPERM;
6243
6244 band = def.chan->band;
6245 ht_mcs_mask = mask->control[band].ht_mcs;
6246 vht_mcs_mask = mask->control[band].vht_mcs;
6247 ldpc = !!(ar->ht_cap_info & WMI_HT_CAP_LDPC);
6248
6249 sgi = mask->control[band].gi;
6250 if (sgi == NL80211_TXRATE_FORCE_LGI)
6251 return -EINVAL;
6252
6253 if (ath10k_mac_bitrate_mask_has_single_rate(ar, band, mask)) {
6254 ret = ath10k_mac_bitrate_mask_get_single_rate(ar, band, mask,
6255 &rate, &nss);
6256 if (ret) {
6257 ath10k_warn(ar, "failed to get single rate for vdev %i: %d\n",
6258 arvif->vdev_id, ret);
6259 return ret;
6260 }
6261 } else if (ath10k_mac_bitrate_mask_get_single_nss(ar, band, mask,
6262 &single_nss)) {
6263 rate = WMI_FIXED_RATE_NONE;
6264 nss = single_nss;
6265 } else {
6266 rate = WMI_FIXED_RATE_NONE;
6267 nss = min(ar->num_rf_chains,
6268 max(ath10k_mac_max_ht_nss(ht_mcs_mask),
6269 ath10k_mac_max_vht_nss(vht_mcs_mask)));
6270
6271 if (!ath10k_mac_can_set_bitrate_mask(ar, band, mask))
6272 return -EINVAL;
6273
6274 mutex_lock(&ar->conf_mutex);
6275
6276 arvif->bitrate_mask = *mask;
6277 ieee80211_iterate_stations_atomic(ar->hw,
6278 ath10k_mac_set_bitrate_mask_iter,
6279 arvif);
6280
6281 mutex_unlock(&ar->conf_mutex);
6282 }
6283
6284 mutex_lock(&ar->conf_mutex);
6285
6286 ret = ath10k_mac_set_fixed_rate_params(arvif, rate, nss, sgi, ldpc);
6287 if (ret) {
6288 ath10k_warn(ar, "failed to set fixed rate params on vdev %i: %d\n",
6289 arvif->vdev_id, ret);
6290 goto exit;
6291 }
6292
6293 exit:
6294 mutex_unlock(&ar->conf_mutex);
6295
6296 return ret;
6297 }
6298
6299 static void ath10k_sta_rc_update(struct ieee80211_hw *hw,
6300 struct ieee80211_vif *vif,
6301 struct ieee80211_sta *sta,
6302 u32 changed)
6303 {
6304 struct ath10k *ar = hw->priv;
6305 struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
6306 u32 bw, smps;
6307
6308 spin_lock_bh(&ar->data_lock);
6309
6310 ath10k_dbg(ar, ATH10K_DBG_MAC,
6311 "mac sta rc update for %pM changed %08x bw %d nss %d smps %d\n",
6312 sta->addr, changed, sta->bandwidth, sta->rx_nss,
6313 sta->smps_mode);
6314
6315 if (changed & IEEE80211_RC_BW_CHANGED) {
6316 bw = WMI_PEER_CHWIDTH_20MHZ;
6317
6318 switch (sta->bandwidth) {
6319 case IEEE80211_STA_RX_BW_20:
6320 bw = WMI_PEER_CHWIDTH_20MHZ;
6321 break;
6322 case IEEE80211_STA_RX_BW_40:
6323 bw = WMI_PEER_CHWIDTH_40MHZ;
6324 break;
6325 case IEEE80211_STA_RX_BW_80:
6326 bw = WMI_PEER_CHWIDTH_80MHZ;
6327 break;
6328 case IEEE80211_STA_RX_BW_160:
6329 ath10k_warn(ar, "Invalid bandwidth %d in rc update for %pM\n",
6330 sta->bandwidth, sta->addr);
6331 bw = WMI_PEER_CHWIDTH_20MHZ;
6332 break;
6333 }
6334
6335 arsta->bw = bw;
6336 }
6337
6338 if (changed & IEEE80211_RC_NSS_CHANGED)
6339 arsta->nss = sta->rx_nss;
6340
6341 if (changed & IEEE80211_RC_SMPS_CHANGED) {
6342 smps = WMI_PEER_SMPS_PS_NONE;
6343
6344 switch (sta->smps_mode) {
6345 case IEEE80211_SMPS_AUTOMATIC:
6346 case IEEE80211_SMPS_OFF:
6347 smps = WMI_PEER_SMPS_PS_NONE;
6348 break;
6349 case IEEE80211_SMPS_STATIC:
6350 smps = WMI_PEER_SMPS_STATIC;
6351 break;
6352 case IEEE80211_SMPS_DYNAMIC:
6353 smps = WMI_PEER_SMPS_DYNAMIC;
6354 break;
6355 case IEEE80211_SMPS_NUM_MODES:
6356 ath10k_warn(ar, "Invalid smps %d in sta rc update for %pM\n",
6357 sta->smps_mode, sta->addr);
6358 smps = WMI_PEER_SMPS_PS_NONE;
6359 break;
6360 }
6361
6362 arsta->smps = smps;
6363 }
6364
6365 arsta->changed |= changed;
6366
6367 spin_unlock_bh(&ar->data_lock);
6368
6369 ieee80211_queue_work(hw, &arsta->update_wk);
6370 }
6371
6372 static u64 ath10k_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
6373 {
6374 /*
6375 * FIXME: Return 0 for time being. Need to figure out whether FW
6376 * has the API to fetch 64-bit local TSF
6377 */
6378
6379 return 0;
6380 }
6381
6382 static int ath10k_ampdu_action(struct ieee80211_hw *hw,
6383 struct ieee80211_vif *vif,
6384 struct ieee80211_ampdu_params *params)
6385 {
6386 struct ath10k *ar = hw->priv;
6387 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
6388 struct ieee80211_sta *sta = params->sta;
6389 enum ieee80211_ampdu_mlme_action action = params->action;
6390 u16 tid = params->tid;
6391
6392 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac ampdu vdev_id %i sta %pM tid %hu action %d\n",
6393 arvif->vdev_id, sta->addr, tid, action);
6394
6395 switch (action) {
6396 case IEEE80211_AMPDU_RX_START:
6397 case IEEE80211_AMPDU_RX_STOP:
6398 /* HTT AddBa/DelBa events trigger mac80211 Rx BA session
6399 * creation/removal. Do we need to verify this?
6400 */
6401 return 0;
6402 case IEEE80211_AMPDU_TX_START:
6403 case IEEE80211_AMPDU_TX_STOP_CONT:
6404 case IEEE80211_AMPDU_TX_STOP_FLUSH:
6405 case IEEE80211_AMPDU_TX_STOP_FLUSH_CONT:
6406 case IEEE80211_AMPDU_TX_OPERATIONAL:
6407 /* Firmware offloads Tx aggregation entirely so deny mac80211
6408 * Tx aggregation requests.
6409 */
6410 return -EOPNOTSUPP;
6411 }
6412
6413 return -EINVAL;
6414 }
6415
6416 static void
6417 ath10k_mac_update_rx_channel(struct ath10k *ar,
6418 struct ieee80211_chanctx_conf *ctx,
6419 struct ieee80211_vif_chanctx_switch *vifs,
6420 int n_vifs)
6421 {
6422 struct cfg80211_chan_def *def = NULL;
6423
6424 /* Both locks are required because ar->rx_channel is modified. This
6425 * allows readers to hold either lock.
6426 */
6427 lockdep_assert_held(&ar->conf_mutex);
6428 lockdep_assert_held(&ar->data_lock);
6429
6430 WARN_ON(ctx && vifs);
6431 WARN_ON(vifs && n_vifs != 1);
6432
6433 /* FIXME: Sort of an optimization and a workaround. Peers and vifs are
6434 * on a linked list now. Doing a lookup peer -> vif -> chanctx for each
6435 * ppdu on Rx may reduce performance on low-end systems. It should be
6436 * possible to make tables/hashmaps to speed the lookup up (be vary of
6437 * cpu data cache lines though regarding sizes) but to keep the initial
6438 * implementation simple and less intrusive fallback to the slow lookup
6439 * only for multi-channel cases. Single-channel cases will remain to
6440 * use the old channel derival and thus performance should not be
6441 * affected much.
6442 */
6443 rcu_read_lock();
6444 if (!ctx && ath10k_mac_num_chanctxs(ar) == 1) {
6445 ieee80211_iter_chan_contexts_atomic(ar->hw,
6446 ath10k_mac_get_any_chandef_iter,
6447 &def);
6448
6449 if (vifs)
6450 def = &vifs[0].new_ctx->def;
6451
6452 ar->rx_channel = def->chan;
6453 } else if (ctx && ath10k_mac_num_chanctxs(ar) == 0) {
6454 ar->rx_channel = ctx->def.chan;
6455 } else {
6456 ar->rx_channel = NULL;
6457 }
6458 rcu_read_unlock();
6459 }
6460
6461 static void
6462 ath10k_mac_update_vif_chan(struct ath10k *ar,
6463 struct ieee80211_vif_chanctx_switch *vifs,
6464 int n_vifs)
6465 {
6466 struct ath10k_vif *arvif;
6467 int ret;
6468 int i;
6469
6470 lockdep_assert_held(&ar->conf_mutex);
6471
6472 /* First stop monitor interface. Some FW versions crash if there's a
6473 * lone monitor interface.
6474 */
6475 if (ar->monitor_started)
6476 ath10k_monitor_stop(ar);
6477
6478 for (i = 0; i < n_vifs; i++) {
6479 arvif = ath10k_vif_to_arvif(vifs[i].vif);
6480
6481 ath10k_dbg(ar, ATH10K_DBG_MAC,
6482 "mac chanctx switch vdev_id %i freq %hu->%hu width %d->%d\n",
6483 arvif->vdev_id,
6484 vifs[i].old_ctx->def.chan->center_freq,
6485 vifs[i].new_ctx->def.chan->center_freq,
6486 vifs[i].old_ctx->def.width,
6487 vifs[i].new_ctx->def.width);
6488
6489 if (WARN_ON(!arvif->is_started))
6490 continue;
6491
6492 if (WARN_ON(!arvif->is_up))
6493 continue;
6494
6495 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id);
6496 if (ret) {
6497 ath10k_warn(ar, "failed to down vdev %d: %d\n",
6498 arvif->vdev_id, ret);
6499 continue;
6500 }
6501 }
6502
6503 /* All relevant vdevs are downed and associated channel resources
6504 * should be available for the channel switch now.
6505 */
6506
6507 spin_lock_bh(&ar->data_lock);
6508 ath10k_mac_update_rx_channel(ar, NULL, vifs, n_vifs);
6509 spin_unlock_bh(&ar->data_lock);
6510
6511 for (i = 0; i < n_vifs; i++) {
6512 arvif = ath10k_vif_to_arvif(vifs[i].vif);
6513
6514 if (WARN_ON(!arvif->is_started))
6515 continue;
6516
6517 if (WARN_ON(!arvif->is_up))
6518 continue;
6519
6520 ret = ath10k_mac_setup_bcn_tmpl(arvif);
6521 if (ret)
6522 ath10k_warn(ar, "failed to update bcn tmpl during csa: %d\n",
6523 ret);
6524
6525 ret = ath10k_mac_setup_prb_tmpl(arvif);
6526 if (ret)
6527 ath10k_warn(ar, "failed to update prb tmpl during csa: %d\n",
6528 ret);
6529
6530 ret = ath10k_vdev_restart(arvif, &vifs[i].new_ctx->def);
6531 if (ret) {
6532 ath10k_warn(ar, "failed to restart vdev %d: %d\n",
6533 arvif->vdev_id, ret);
6534 continue;
6535 }
6536
6537 ret = ath10k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid,
6538 arvif->bssid);
6539 if (ret) {
6540 ath10k_warn(ar, "failed to bring vdev up %d: %d\n",
6541 arvif->vdev_id, ret);
6542 continue;
6543 }
6544 }
6545
6546 ath10k_monitor_recalc(ar);
6547 }
6548
6549 static int
6550 ath10k_mac_op_add_chanctx(struct ieee80211_hw *hw,
6551 struct ieee80211_chanctx_conf *ctx)
6552 {
6553 struct ath10k *ar = hw->priv;
6554
6555 ath10k_dbg(ar, ATH10K_DBG_MAC,
6556 "mac chanctx add freq %hu width %d ptr %p\n",
6557 ctx->def.chan->center_freq, ctx->def.width, ctx);
6558
6559 mutex_lock(&ar->conf_mutex);
6560
6561 spin_lock_bh(&ar->data_lock);
6562 ath10k_mac_update_rx_channel(ar, ctx, NULL, 0);
6563 spin_unlock_bh(&ar->data_lock);
6564
6565 ath10k_recalc_radar_detection(ar);
6566 ath10k_monitor_recalc(ar);
6567
6568 mutex_unlock(&ar->conf_mutex);
6569
6570 return 0;
6571 }
6572
6573 static void
6574 ath10k_mac_op_remove_chanctx(struct ieee80211_hw *hw,
6575 struct ieee80211_chanctx_conf *ctx)
6576 {
6577 struct ath10k *ar = hw->priv;
6578
6579 ath10k_dbg(ar, ATH10K_DBG_MAC,
6580 "mac chanctx remove freq %hu width %d ptr %p\n",
6581 ctx->def.chan->center_freq, ctx->def.width, ctx);
6582
6583 mutex_lock(&ar->conf_mutex);
6584
6585 spin_lock_bh(&ar->data_lock);
6586 ath10k_mac_update_rx_channel(ar, NULL, NULL, 0);
6587 spin_unlock_bh(&ar->data_lock);
6588
6589 ath10k_recalc_radar_detection(ar);
6590 ath10k_monitor_recalc(ar);
6591
6592 mutex_unlock(&ar->conf_mutex);
6593 }
6594
6595 struct ath10k_mac_change_chanctx_arg {
6596 struct ieee80211_chanctx_conf *ctx;
6597 struct ieee80211_vif_chanctx_switch *vifs;
6598 int n_vifs;
6599 int next_vif;
6600 };
6601
6602 static void
6603 ath10k_mac_change_chanctx_cnt_iter(void *data, u8 *mac,
6604 struct ieee80211_vif *vif)
6605 {
6606 struct ath10k_mac_change_chanctx_arg *arg = data;
6607
6608 if (rcu_access_pointer(vif->chanctx_conf) != arg->ctx)
6609 return;
6610
6611 arg->n_vifs++;
6612 }
6613
6614 static void
6615 ath10k_mac_change_chanctx_fill_iter(void *data, u8 *mac,
6616 struct ieee80211_vif *vif)
6617 {
6618 struct ath10k_mac_change_chanctx_arg *arg = data;
6619 struct ieee80211_chanctx_conf *ctx;
6620
6621 ctx = rcu_access_pointer(vif->chanctx_conf);
6622 if (ctx != arg->ctx)
6623 return;
6624
6625 if (WARN_ON(arg->next_vif == arg->n_vifs))
6626 return;
6627
6628 arg->vifs[arg->next_vif].vif = vif;
6629 arg->vifs[arg->next_vif].old_ctx = ctx;
6630 arg->vifs[arg->next_vif].new_ctx = ctx;
6631 arg->next_vif++;
6632 }
6633
6634 static void
6635 ath10k_mac_op_change_chanctx(struct ieee80211_hw *hw,
6636 struct ieee80211_chanctx_conf *ctx,
6637 u32 changed)
6638 {
6639 struct ath10k *ar = hw->priv;
6640 struct ath10k_mac_change_chanctx_arg arg = { .ctx = ctx };
6641
6642 mutex_lock(&ar->conf_mutex);
6643
6644 ath10k_dbg(ar, ATH10K_DBG_MAC,
6645 "mac chanctx change freq %hu width %d ptr %p changed %x\n",
6646 ctx->def.chan->center_freq, ctx->def.width, ctx, changed);
6647
6648 /* This shouldn't really happen because channel switching should use
6649 * switch_vif_chanctx().
6650 */
6651 if (WARN_ON(changed & IEEE80211_CHANCTX_CHANGE_CHANNEL))
6652 goto unlock;
6653
6654 if (changed & IEEE80211_CHANCTX_CHANGE_WIDTH) {
6655 ieee80211_iterate_active_interfaces_atomic(
6656 hw,
6657 IEEE80211_IFACE_ITER_NORMAL,
6658 ath10k_mac_change_chanctx_cnt_iter,
6659 &arg);
6660 if (arg.n_vifs == 0)
6661 goto radar;
6662
6663 arg.vifs = kcalloc(arg.n_vifs, sizeof(arg.vifs[0]),
6664 GFP_KERNEL);
6665 if (!arg.vifs)
6666 goto radar;
6667
6668 ieee80211_iterate_active_interfaces_atomic(
6669 hw,
6670 IEEE80211_IFACE_ITER_NORMAL,
6671 ath10k_mac_change_chanctx_fill_iter,
6672 &arg);
6673 ath10k_mac_update_vif_chan(ar, arg.vifs, arg.n_vifs);
6674 kfree(arg.vifs);
6675 }
6676
6677 radar:
6678 ath10k_recalc_radar_detection(ar);
6679
6680 /* FIXME: How to configure Rx chains properly? */
6681
6682 /* No other actions are actually necessary. Firmware maintains channel
6683 * definitions per vdev internally and there's no host-side channel
6684 * context abstraction to configure, e.g. channel width.
6685 */
6686
6687 unlock:
6688 mutex_unlock(&ar->conf_mutex);
6689 }
6690
6691 static int
6692 ath10k_mac_op_assign_vif_chanctx(struct ieee80211_hw *hw,
6693 struct ieee80211_vif *vif,
6694 struct ieee80211_chanctx_conf *ctx)
6695 {
6696 struct ath10k *ar = hw->priv;
6697 struct ath10k_vif *arvif = (void *)vif->drv_priv;
6698 int ret;
6699
6700 mutex_lock(&ar->conf_mutex);
6701
6702 ath10k_dbg(ar, ATH10K_DBG_MAC,
6703 "mac chanctx assign ptr %p vdev_id %i\n",
6704 ctx, arvif->vdev_id);
6705
6706 if (WARN_ON(arvif->is_started)) {
6707 mutex_unlock(&ar->conf_mutex);
6708 return -EBUSY;
6709 }
6710
6711 ret = ath10k_vdev_start(arvif, &ctx->def);
6712 if (ret) {
6713 ath10k_warn(ar, "failed to start vdev %i addr %pM on freq %d: %d\n",
6714 arvif->vdev_id, vif->addr,
6715 ctx->def.chan->center_freq, ret);
6716 goto err;
6717 }
6718
6719 arvif->is_started = true;
6720
6721 ret = ath10k_mac_vif_setup_ps(arvif);
6722 if (ret) {
6723 ath10k_warn(ar, "failed to update vdev %i ps: %d\n",
6724 arvif->vdev_id, ret);
6725 goto err_stop;
6726 }
6727
6728 if (vif->type == NL80211_IFTYPE_MONITOR) {
6729 ret = ath10k_wmi_vdev_up(ar, arvif->vdev_id, 0, vif->addr);
6730 if (ret) {
6731 ath10k_warn(ar, "failed to up monitor vdev %i: %d\n",
6732 arvif->vdev_id, ret);
6733 goto err_stop;
6734 }
6735
6736 arvif->is_up = true;
6737 }
6738
6739 mutex_unlock(&ar->conf_mutex);
6740 return 0;
6741
6742 err_stop:
6743 ath10k_vdev_stop(arvif);
6744 arvif->is_started = false;
6745 ath10k_mac_vif_setup_ps(arvif);
6746
6747 err:
6748 mutex_unlock(&ar->conf_mutex);
6749 return ret;
6750 }
6751
6752 static void
6753 ath10k_mac_op_unassign_vif_chanctx(struct ieee80211_hw *hw,
6754 struct ieee80211_vif *vif,
6755 struct ieee80211_chanctx_conf *ctx)
6756 {
6757 struct ath10k *ar = hw->priv;
6758 struct ath10k_vif *arvif = (void *)vif->drv_priv;
6759 int ret;
6760
6761 mutex_lock(&ar->conf_mutex);
6762
6763 ath10k_dbg(ar, ATH10K_DBG_MAC,
6764 "mac chanctx unassign ptr %p vdev_id %i\n",
6765 ctx, arvif->vdev_id);
6766
6767 WARN_ON(!arvif->is_started);
6768
6769 if (vif->type == NL80211_IFTYPE_MONITOR) {
6770 WARN_ON(!arvif->is_up);
6771
6772 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id);
6773 if (ret)
6774 ath10k_warn(ar, "failed to down monitor vdev %i: %d\n",
6775 arvif->vdev_id, ret);
6776
6777 arvif->is_up = false;
6778 }
6779
6780 ret = ath10k_vdev_stop(arvif);
6781 if (ret)
6782 ath10k_warn(ar, "failed to stop vdev %i: %d\n",
6783 arvif->vdev_id, ret);
6784
6785 arvif->is_started = false;
6786
6787 mutex_unlock(&ar->conf_mutex);
6788 }
6789
6790 static int
6791 ath10k_mac_op_switch_vif_chanctx(struct ieee80211_hw *hw,
6792 struct ieee80211_vif_chanctx_switch *vifs,
6793 int n_vifs,
6794 enum ieee80211_chanctx_switch_mode mode)
6795 {
6796 struct ath10k *ar = hw->priv;
6797
6798 mutex_lock(&ar->conf_mutex);
6799
6800 ath10k_dbg(ar, ATH10K_DBG_MAC,
6801 "mac chanctx switch n_vifs %d mode %d\n",
6802 n_vifs, mode);
6803 ath10k_mac_update_vif_chan(ar, vifs, n_vifs);
6804
6805 mutex_unlock(&ar->conf_mutex);
6806 return 0;
6807 }
6808
6809 static const struct ieee80211_ops ath10k_ops = {
6810 .tx = ath10k_tx,
6811 .start = ath10k_start,
6812 .stop = ath10k_stop,
6813 .config = ath10k_config,
6814 .add_interface = ath10k_add_interface,
6815 .remove_interface = ath10k_remove_interface,
6816 .configure_filter = ath10k_configure_filter,
6817 .bss_info_changed = ath10k_bss_info_changed,
6818 .hw_scan = ath10k_hw_scan,
6819 .cancel_hw_scan = ath10k_cancel_hw_scan,
6820 .set_key = ath10k_set_key,
6821 .set_default_unicast_key = ath10k_set_default_unicast_key,
6822 .sta_state = ath10k_sta_state,
6823 .conf_tx = ath10k_conf_tx,
6824 .remain_on_channel = ath10k_remain_on_channel,
6825 .cancel_remain_on_channel = ath10k_cancel_remain_on_channel,
6826 .set_rts_threshold = ath10k_set_rts_threshold,
6827 .set_frag_threshold = ath10k_mac_op_set_frag_threshold,
6828 .flush = ath10k_flush,
6829 .tx_last_beacon = ath10k_tx_last_beacon,
6830 .set_antenna = ath10k_set_antenna,
6831 .get_antenna = ath10k_get_antenna,
6832 .reconfig_complete = ath10k_reconfig_complete,
6833 .get_survey = ath10k_get_survey,
6834 .set_bitrate_mask = ath10k_mac_op_set_bitrate_mask,
6835 .sta_rc_update = ath10k_sta_rc_update,
6836 .get_tsf = ath10k_get_tsf,
6837 .ampdu_action = ath10k_ampdu_action,
6838 .get_et_sset_count = ath10k_debug_get_et_sset_count,
6839 .get_et_stats = ath10k_debug_get_et_stats,
6840 .get_et_strings = ath10k_debug_get_et_strings,
6841 .add_chanctx = ath10k_mac_op_add_chanctx,
6842 .remove_chanctx = ath10k_mac_op_remove_chanctx,
6843 .change_chanctx = ath10k_mac_op_change_chanctx,
6844 .assign_vif_chanctx = ath10k_mac_op_assign_vif_chanctx,
6845 .unassign_vif_chanctx = ath10k_mac_op_unassign_vif_chanctx,
6846 .switch_vif_chanctx = ath10k_mac_op_switch_vif_chanctx,
6847
6848 CFG80211_TESTMODE_CMD(ath10k_tm_cmd)
6849
6850 #ifdef CONFIG_PM
6851 .suspend = ath10k_wow_op_suspend,
6852 .resume = ath10k_wow_op_resume,
6853 #endif
6854 #ifdef CONFIG_MAC80211_DEBUGFS
6855 .sta_add_debugfs = ath10k_sta_add_debugfs,
6856 #endif
6857 };
6858
6859 #define CHAN2G(_channel, _freq, _flags) { \
6860 .band = IEEE80211_BAND_2GHZ, \
6861 .hw_value = (_channel), \
6862 .center_freq = (_freq), \
6863 .flags = (_flags), \
6864 .max_antenna_gain = 0, \
6865 .max_power = 30, \
6866 }
6867
6868 #define CHAN5G(_channel, _freq, _flags) { \
6869 .band = IEEE80211_BAND_5GHZ, \
6870 .hw_value = (_channel), \
6871 .center_freq = (_freq), \
6872 .flags = (_flags), \
6873 .max_antenna_gain = 0, \
6874 .max_power = 30, \
6875 }
6876
6877 static const struct ieee80211_channel ath10k_2ghz_channels[] = {
6878 CHAN2G(1, 2412, 0),
6879 CHAN2G(2, 2417, 0),
6880 CHAN2G(3, 2422, 0),
6881 CHAN2G(4, 2427, 0),
6882 CHAN2G(5, 2432, 0),
6883 CHAN2G(6, 2437, 0),
6884 CHAN2G(7, 2442, 0),
6885 CHAN2G(8, 2447, 0),
6886 CHAN2G(9, 2452, 0),
6887 CHAN2G(10, 2457, 0),
6888 CHAN2G(11, 2462, 0),
6889 CHAN2G(12, 2467, 0),
6890 CHAN2G(13, 2472, 0),
6891 CHAN2G(14, 2484, 0),
6892 };
6893
6894 static const struct ieee80211_channel ath10k_5ghz_channels[] = {
6895 CHAN5G(36, 5180, 0),
6896 CHAN5G(40, 5200, 0),
6897 CHAN5G(44, 5220, 0),
6898 CHAN5G(48, 5240, 0),
6899 CHAN5G(52, 5260, 0),
6900 CHAN5G(56, 5280, 0),
6901 CHAN5G(60, 5300, 0),
6902 CHAN5G(64, 5320, 0),
6903 CHAN5G(100, 5500, 0),
6904 CHAN5G(104, 5520, 0),
6905 CHAN5G(108, 5540, 0),
6906 CHAN5G(112, 5560, 0),
6907 CHAN5G(116, 5580, 0),
6908 CHAN5G(120, 5600, 0),
6909 CHAN5G(124, 5620, 0),
6910 CHAN5G(128, 5640, 0),
6911 CHAN5G(132, 5660, 0),
6912 CHAN5G(136, 5680, 0),
6913 CHAN5G(140, 5700, 0),
6914 CHAN5G(144, 5720, 0),
6915 CHAN5G(149, 5745, 0),
6916 CHAN5G(153, 5765, 0),
6917 CHAN5G(157, 5785, 0),
6918 CHAN5G(161, 5805, 0),
6919 CHAN5G(165, 5825, 0),
6920 };
6921
6922 struct ath10k *ath10k_mac_create(size_t priv_size)
6923 {
6924 struct ieee80211_hw *hw;
6925 struct ath10k *ar;
6926
6927 hw = ieee80211_alloc_hw(sizeof(struct ath10k) + priv_size, &ath10k_ops);
6928 if (!hw)
6929 return NULL;
6930
6931 ar = hw->priv;
6932 ar->hw = hw;
6933
6934 return ar;
6935 }
6936
6937 void ath10k_mac_destroy(struct ath10k *ar)
6938 {
6939 ieee80211_free_hw(ar->hw);
6940 }
6941
6942 static const struct ieee80211_iface_limit ath10k_if_limits[] = {
6943 {
6944 .max = 8,
6945 .types = BIT(NL80211_IFTYPE_STATION)
6946 | BIT(NL80211_IFTYPE_P2P_CLIENT)
6947 },
6948 {
6949 .max = 3,
6950 .types = BIT(NL80211_IFTYPE_P2P_GO)
6951 },
6952 {
6953 .max = 1,
6954 .types = BIT(NL80211_IFTYPE_P2P_DEVICE)
6955 },
6956 {
6957 .max = 7,
6958 .types = BIT(NL80211_IFTYPE_AP)
6959 #ifdef CONFIG_MAC80211_MESH
6960 | BIT(NL80211_IFTYPE_MESH_POINT)
6961 #endif
6962 },
6963 };
6964
6965 static const struct ieee80211_iface_limit ath10k_10x_if_limits[] = {
6966 {
6967 .max = 8,
6968 .types = BIT(NL80211_IFTYPE_AP)
6969 #ifdef CONFIG_MAC80211_MESH
6970 | BIT(NL80211_IFTYPE_MESH_POINT)
6971 #endif
6972 },
6973 {
6974 .max = 1,
6975 .types = BIT(NL80211_IFTYPE_STATION)
6976 },
6977 };
6978
6979 static const struct ieee80211_iface_combination ath10k_if_comb[] = {
6980 {
6981 .limits = ath10k_if_limits,
6982 .n_limits = ARRAY_SIZE(ath10k_if_limits),
6983 .max_interfaces = 8,
6984 .num_different_channels = 1,
6985 .beacon_int_infra_match = true,
6986 },
6987 };
6988
6989 static const struct ieee80211_iface_combination ath10k_10x_if_comb[] = {
6990 {
6991 .limits = ath10k_10x_if_limits,
6992 .n_limits = ARRAY_SIZE(ath10k_10x_if_limits),
6993 .max_interfaces = 8,
6994 .num_different_channels = 1,
6995 .beacon_int_infra_match = true,
6996 #ifdef CONFIG_ATH10K_DFS_CERTIFIED
6997 .radar_detect_widths = BIT(NL80211_CHAN_WIDTH_20_NOHT) |
6998 BIT(NL80211_CHAN_WIDTH_20) |
6999 BIT(NL80211_CHAN_WIDTH_40) |
7000 BIT(NL80211_CHAN_WIDTH_80),
7001 #endif
7002 },
7003 };
7004
7005 static const struct ieee80211_iface_limit ath10k_tlv_if_limit[] = {
7006 {
7007 .max = 2,
7008 .types = BIT(NL80211_IFTYPE_STATION),
7009 },
7010 {
7011 .max = 2,
7012 .types = BIT(NL80211_IFTYPE_AP) |
7013 #ifdef CONFIG_MAC80211_MESH
7014 BIT(NL80211_IFTYPE_MESH_POINT) |
7015 #endif
7016 BIT(NL80211_IFTYPE_P2P_CLIENT) |
7017 BIT(NL80211_IFTYPE_P2P_GO),
7018 },
7019 {
7020 .max = 1,
7021 .types = BIT(NL80211_IFTYPE_P2P_DEVICE),
7022 },
7023 };
7024
7025 static const struct ieee80211_iface_limit ath10k_tlv_qcs_if_limit[] = {
7026 {
7027 .max = 2,
7028 .types = BIT(NL80211_IFTYPE_STATION),
7029 },
7030 {
7031 .max = 2,
7032 .types = BIT(NL80211_IFTYPE_P2P_CLIENT),
7033 },
7034 {
7035 .max = 1,
7036 .types = BIT(NL80211_IFTYPE_AP) |
7037 #ifdef CONFIG_MAC80211_MESH
7038 BIT(NL80211_IFTYPE_MESH_POINT) |
7039 #endif
7040 BIT(NL80211_IFTYPE_P2P_GO),
7041 },
7042 {
7043 .max = 1,
7044 .types = BIT(NL80211_IFTYPE_P2P_DEVICE),
7045 },
7046 };
7047
7048 static const struct ieee80211_iface_limit ath10k_tlv_if_limit_ibss[] = {
7049 {
7050 .max = 1,
7051 .types = BIT(NL80211_IFTYPE_STATION),
7052 },
7053 {
7054 .max = 1,
7055 .types = BIT(NL80211_IFTYPE_ADHOC),
7056 },
7057 };
7058
7059 /* FIXME: This is not thouroughly tested. These combinations may over- or
7060 * underestimate hw/fw capabilities.
7061 */
7062 static struct ieee80211_iface_combination ath10k_tlv_if_comb[] = {
7063 {
7064 .limits = ath10k_tlv_if_limit,
7065 .num_different_channels = 1,
7066 .max_interfaces = 4,
7067 .n_limits = ARRAY_SIZE(ath10k_tlv_if_limit),
7068 },
7069 {
7070 .limits = ath10k_tlv_if_limit_ibss,
7071 .num_different_channels = 1,
7072 .max_interfaces = 2,
7073 .n_limits = ARRAY_SIZE(ath10k_tlv_if_limit_ibss),
7074 },
7075 };
7076
7077 static struct ieee80211_iface_combination ath10k_tlv_qcs_if_comb[] = {
7078 {
7079 .limits = ath10k_tlv_if_limit,
7080 .num_different_channels = 1,
7081 .max_interfaces = 4,
7082 .n_limits = ARRAY_SIZE(ath10k_tlv_if_limit),
7083 },
7084 {
7085 .limits = ath10k_tlv_qcs_if_limit,
7086 .num_different_channels = 2,
7087 .max_interfaces = 4,
7088 .n_limits = ARRAY_SIZE(ath10k_tlv_qcs_if_limit),
7089 },
7090 {
7091 .limits = ath10k_tlv_if_limit_ibss,
7092 .num_different_channels = 1,
7093 .max_interfaces = 2,
7094 .n_limits = ARRAY_SIZE(ath10k_tlv_if_limit_ibss),
7095 },
7096 };
7097
7098 static const struct ieee80211_iface_limit ath10k_10_4_if_limits[] = {
7099 {
7100 .max = 1,
7101 .types = BIT(NL80211_IFTYPE_STATION),
7102 },
7103 {
7104 .max = 16,
7105 .types = BIT(NL80211_IFTYPE_AP)
7106 #ifdef CONFIG_MAC80211_MESH
7107 | BIT(NL80211_IFTYPE_MESH_POINT)
7108 #endif
7109 },
7110 };
7111
7112 static const struct ieee80211_iface_combination ath10k_10_4_if_comb[] = {
7113 {
7114 .limits = ath10k_10_4_if_limits,
7115 .n_limits = ARRAY_SIZE(ath10k_10_4_if_limits),
7116 .max_interfaces = 16,
7117 .num_different_channels = 1,
7118 .beacon_int_infra_match = true,
7119 #ifdef CONFIG_ATH10K_DFS_CERTIFIED
7120 .radar_detect_widths = BIT(NL80211_CHAN_WIDTH_20_NOHT) |
7121 BIT(NL80211_CHAN_WIDTH_20) |
7122 BIT(NL80211_CHAN_WIDTH_40) |
7123 BIT(NL80211_CHAN_WIDTH_80),
7124 #endif
7125 },
7126 };
7127
7128 static void ath10k_get_arvif_iter(void *data, u8 *mac,
7129 struct ieee80211_vif *vif)
7130 {
7131 struct ath10k_vif_iter *arvif_iter = data;
7132 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
7133
7134 if (arvif->vdev_id == arvif_iter->vdev_id)
7135 arvif_iter->arvif = arvif;
7136 }
7137
7138 struct ath10k_vif *ath10k_get_arvif(struct ath10k *ar, u32 vdev_id)
7139 {
7140 struct ath10k_vif_iter arvif_iter;
7141 u32 flags;
7142
7143 memset(&arvif_iter, 0, sizeof(struct ath10k_vif_iter));
7144 arvif_iter.vdev_id = vdev_id;
7145
7146 flags = IEEE80211_IFACE_ITER_RESUME_ALL;
7147 ieee80211_iterate_active_interfaces_atomic(ar->hw,
7148 flags,
7149 ath10k_get_arvif_iter,
7150 &arvif_iter);
7151 if (!arvif_iter.arvif) {
7152 ath10k_warn(ar, "No VIF found for vdev %d\n", vdev_id);
7153 return NULL;
7154 }
7155
7156 return arvif_iter.arvif;
7157 }
7158
7159 int ath10k_mac_register(struct ath10k *ar)
7160 {
7161 static const u32 cipher_suites[] = {
7162 WLAN_CIPHER_SUITE_WEP40,
7163 WLAN_CIPHER_SUITE_WEP104,
7164 WLAN_CIPHER_SUITE_TKIP,
7165 WLAN_CIPHER_SUITE_CCMP,
7166 WLAN_CIPHER_SUITE_AES_CMAC,
7167 };
7168 struct ieee80211_supported_band *band;
7169 void *channels;
7170 int ret;
7171
7172 SET_IEEE80211_PERM_ADDR(ar->hw, ar->mac_addr);
7173
7174 SET_IEEE80211_DEV(ar->hw, ar->dev);
7175
7176 BUILD_BUG_ON((ARRAY_SIZE(ath10k_2ghz_channels) +
7177 ARRAY_SIZE(ath10k_5ghz_channels)) !=
7178 ATH10K_NUM_CHANS);
7179
7180 if (ar->phy_capability & WHAL_WLAN_11G_CAPABILITY) {
7181 channels = kmemdup(ath10k_2ghz_channels,
7182 sizeof(ath10k_2ghz_channels),
7183 GFP_KERNEL);
7184 if (!channels) {
7185 ret = -ENOMEM;
7186 goto err_free;
7187 }
7188
7189 band = &ar->mac.sbands[IEEE80211_BAND_2GHZ];
7190 band->n_channels = ARRAY_SIZE(ath10k_2ghz_channels);
7191 band->channels = channels;
7192 band->n_bitrates = ath10k_g_rates_size;
7193 band->bitrates = ath10k_g_rates;
7194
7195 ar->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = band;
7196 }
7197
7198 if (ar->phy_capability & WHAL_WLAN_11A_CAPABILITY) {
7199 channels = kmemdup(ath10k_5ghz_channels,
7200 sizeof(ath10k_5ghz_channels),
7201 GFP_KERNEL);
7202 if (!channels) {
7203 ret = -ENOMEM;
7204 goto err_free;
7205 }
7206
7207 band = &ar->mac.sbands[IEEE80211_BAND_5GHZ];
7208 band->n_channels = ARRAY_SIZE(ath10k_5ghz_channels);
7209 band->channels = channels;
7210 band->n_bitrates = ath10k_a_rates_size;
7211 band->bitrates = ath10k_a_rates;
7212 ar->hw->wiphy->bands[IEEE80211_BAND_5GHZ] = band;
7213 }
7214
7215 ath10k_mac_setup_ht_vht_cap(ar);
7216
7217 ar->hw->wiphy->interface_modes =
7218 BIT(NL80211_IFTYPE_STATION) |
7219 BIT(NL80211_IFTYPE_AP) |
7220 BIT(NL80211_IFTYPE_MESH_POINT);
7221
7222 ar->hw->wiphy->available_antennas_rx = ar->cfg_rx_chainmask;
7223 ar->hw->wiphy->available_antennas_tx = ar->cfg_tx_chainmask;
7224
7225 if (!test_bit(ATH10K_FW_FEATURE_NO_P2P, ar->fw_features))
7226 ar->hw->wiphy->interface_modes |=
7227 BIT(NL80211_IFTYPE_P2P_DEVICE) |
7228 BIT(NL80211_IFTYPE_P2P_CLIENT) |
7229 BIT(NL80211_IFTYPE_P2P_GO);
7230
7231 ieee80211_hw_set(ar->hw, SIGNAL_DBM);
7232 ieee80211_hw_set(ar->hw, SUPPORTS_PS);
7233 ieee80211_hw_set(ar->hw, SUPPORTS_DYNAMIC_PS);
7234 ieee80211_hw_set(ar->hw, MFP_CAPABLE);
7235 ieee80211_hw_set(ar->hw, REPORTS_TX_ACK_STATUS);
7236 ieee80211_hw_set(ar->hw, HAS_RATE_CONTROL);
7237 ieee80211_hw_set(ar->hw, AP_LINK_PS);
7238 ieee80211_hw_set(ar->hw, SPECTRUM_MGMT);
7239 ieee80211_hw_set(ar->hw, SUPPORT_FAST_XMIT);
7240 ieee80211_hw_set(ar->hw, CONNECTION_MONITOR);
7241 ieee80211_hw_set(ar->hw, SUPPORTS_PER_STA_GTK);
7242 ieee80211_hw_set(ar->hw, WANT_MONITOR_VIF);
7243 ieee80211_hw_set(ar->hw, CHANCTX_STA_CSA);
7244 ieee80211_hw_set(ar->hw, QUEUE_CONTROL);
7245
7246 if (!test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags))
7247 ieee80211_hw_set(ar->hw, SW_CRYPTO_CONTROL);
7248
7249 ar->hw->wiphy->features |= NL80211_FEATURE_STATIC_SMPS;
7250 ar->hw->wiphy->flags |= WIPHY_FLAG_IBSS_RSN;
7251
7252 if (ar->ht_cap_info & WMI_HT_CAP_DYNAMIC_SMPS)
7253 ar->hw->wiphy->features |= NL80211_FEATURE_DYNAMIC_SMPS;
7254
7255 if (ar->ht_cap_info & WMI_HT_CAP_ENABLED) {
7256 ieee80211_hw_set(ar->hw, AMPDU_AGGREGATION);
7257 ieee80211_hw_set(ar->hw, TX_AMPDU_SETUP_IN_HW);
7258 }
7259
7260 ar->hw->wiphy->max_scan_ssids = WLAN_SCAN_PARAMS_MAX_SSID;
7261 ar->hw->wiphy->max_scan_ie_len = WLAN_SCAN_PARAMS_MAX_IE_LEN;
7262
7263 ar->hw->vif_data_size = sizeof(struct ath10k_vif);
7264 ar->hw->sta_data_size = sizeof(struct ath10k_sta);
7265
7266 ar->hw->max_listen_interval = ATH10K_MAX_HW_LISTEN_INTERVAL;
7267
7268 if (test_bit(WMI_SERVICE_BEACON_OFFLOAD, ar->wmi.svc_map)) {
7269 ar->hw->wiphy->flags |= WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD;
7270
7271 /* Firmware delivers WPS/P2P Probe Requests frames to driver so
7272 * that userspace (e.g. wpa_supplicant/hostapd) can generate
7273 * correct Probe Responses. This is more of a hack advert..
7274 */
7275 ar->hw->wiphy->probe_resp_offload |=
7276 NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS |
7277 NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS2 |
7278 NL80211_PROBE_RESP_OFFLOAD_SUPPORT_P2P;
7279 }
7280
7281 if (test_bit(WMI_SERVICE_TDLS, ar->wmi.svc_map))
7282 ar->hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_TDLS;
7283
7284 ar->hw->wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
7285 ar->hw->wiphy->flags |= WIPHY_FLAG_HAS_CHANNEL_SWITCH;
7286 ar->hw->wiphy->max_remain_on_channel_duration = 5000;
7287
7288 ar->hw->wiphy->flags |= WIPHY_FLAG_AP_UAPSD;
7289 ar->hw->wiphy->features |= NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE;
7290
7291 ar->hw->wiphy->max_ap_assoc_sta = ar->max_num_stations;
7292
7293 ret = ath10k_wow_init(ar);
7294 if (ret) {
7295 ath10k_warn(ar, "failed to init wow: %d\n", ret);
7296 goto err_free;
7297 }
7298
7299 wiphy_ext_feature_set(ar->hw->wiphy, NL80211_EXT_FEATURE_VHT_IBSS);
7300
7301 /*
7302 * on LL hardware queues are managed entirely by the FW
7303 * so we only advertise to mac we can do the queues thing
7304 */
7305 ar->hw->queues = IEEE80211_MAX_QUEUES;
7306
7307 /* vdev_ids are used as hw queue numbers. Make sure offchan tx queue is
7308 * something that vdev_ids can't reach so that we don't stop the queue
7309 * accidentally.
7310 */
7311 ar->hw->offchannel_tx_hw_queue = IEEE80211_MAX_QUEUES - 1;
7312
7313 switch (ar->wmi.op_version) {
7314 case ATH10K_FW_WMI_OP_VERSION_MAIN:
7315 ar->hw->wiphy->iface_combinations = ath10k_if_comb;
7316 ar->hw->wiphy->n_iface_combinations =
7317 ARRAY_SIZE(ath10k_if_comb);
7318 ar->hw->wiphy->interface_modes |= BIT(NL80211_IFTYPE_ADHOC);
7319 break;
7320 case ATH10K_FW_WMI_OP_VERSION_TLV:
7321 if (test_bit(WMI_SERVICE_ADAPTIVE_OCS, ar->wmi.svc_map)) {
7322 ar->hw->wiphy->iface_combinations =
7323 ath10k_tlv_qcs_if_comb;
7324 ar->hw->wiphy->n_iface_combinations =
7325 ARRAY_SIZE(ath10k_tlv_qcs_if_comb);
7326 } else {
7327 ar->hw->wiphy->iface_combinations = ath10k_tlv_if_comb;
7328 ar->hw->wiphy->n_iface_combinations =
7329 ARRAY_SIZE(ath10k_tlv_if_comb);
7330 }
7331 ar->hw->wiphy->interface_modes |= BIT(NL80211_IFTYPE_ADHOC);
7332 break;
7333 case ATH10K_FW_WMI_OP_VERSION_10_1:
7334 case ATH10K_FW_WMI_OP_VERSION_10_2:
7335 case ATH10K_FW_WMI_OP_VERSION_10_2_4:
7336 ar->hw->wiphy->iface_combinations = ath10k_10x_if_comb;
7337 ar->hw->wiphy->n_iface_combinations =
7338 ARRAY_SIZE(ath10k_10x_if_comb);
7339 break;
7340 case ATH10K_FW_WMI_OP_VERSION_10_4:
7341 ar->hw->wiphy->iface_combinations = ath10k_10_4_if_comb;
7342 ar->hw->wiphy->n_iface_combinations =
7343 ARRAY_SIZE(ath10k_10_4_if_comb);
7344 break;
7345 case ATH10K_FW_WMI_OP_VERSION_UNSET:
7346 case ATH10K_FW_WMI_OP_VERSION_MAX:
7347 WARN_ON(1);
7348 ret = -EINVAL;
7349 goto err_free;
7350 }
7351
7352 if (!test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags))
7353 ar->hw->netdev_features = NETIF_F_HW_CSUM;
7354
7355 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED)) {
7356 /* Init ath dfs pattern detector */
7357 ar->ath_common.debug_mask = ATH_DBG_DFS;
7358 ar->dfs_detector = dfs_pattern_detector_init(&ar->ath_common,
7359 NL80211_DFS_UNSET);
7360
7361 if (!ar->dfs_detector)
7362 ath10k_warn(ar, "failed to initialise DFS pattern detector\n");
7363 }
7364
7365 ret = ath_regd_init(&ar->ath_common.regulatory, ar->hw->wiphy,
7366 ath10k_reg_notifier);
7367 if (ret) {
7368 ath10k_err(ar, "failed to initialise regulatory: %i\n", ret);
7369 goto err_dfs_detector_exit;
7370 }
7371
7372 ar->hw->wiphy->cipher_suites = cipher_suites;
7373 ar->hw->wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
7374
7375 ret = ieee80211_register_hw(ar->hw);
7376 if (ret) {
7377 ath10k_err(ar, "failed to register ieee80211: %d\n", ret);
7378 goto err_dfs_detector_exit;
7379 }
7380
7381 if (!ath_is_world_regd(&ar->ath_common.regulatory)) {
7382 ret = regulatory_hint(ar->hw->wiphy,
7383 ar->ath_common.regulatory.alpha2);
7384 if (ret)
7385 goto err_unregister;
7386 }
7387
7388 return 0;
7389
7390 err_unregister:
7391 ieee80211_unregister_hw(ar->hw);
7392
7393 err_dfs_detector_exit:
7394 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector)
7395 ar->dfs_detector->exit(ar->dfs_detector);
7396
7397 err_free:
7398 kfree(ar->mac.sbands[IEEE80211_BAND_2GHZ].channels);
7399 kfree(ar->mac.sbands[IEEE80211_BAND_5GHZ].channels);
7400
7401 SET_IEEE80211_DEV(ar->hw, NULL);
7402 return ret;
7403 }
7404
7405 void ath10k_mac_unregister(struct ath10k *ar)
7406 {
7407 ieee80211_unregister_hw(ar->hw);
7408
7409 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector)
7410 ar->dfs_detector->exit(ar->dfs_detector);
7411
7412 kfree(ar->mac.sbands[IEEE80211_BAND_2GHZ].channels);
7413 kfree(ar->mac.sbands[IEEE80211_BAND_5GHZ].channels);
7414
7415 SET_IEEE80211_DEV(ar->hw, NULL);
7416 }