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