ath10k: prevent invalid ps timeout config
[deliverable/linux.git] / drivers / net / wireless / ath / ath10k / mac.c
1 /*
2 * Copyright (c) 2005-2011 Atheros Communications Inc.
3 * Copyright (c) 2011-2013 Qualcomm Atheros, Inc.
4 *
5 * Permission to use, copy, modify, and/or distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 */
17
18 #include "mac.h"
19
20 #include <net/mac80211.h>
21 #include <linux/etherdevice.h>
22
23 #include "hif.h"
24 #include "core.h"
25 #include "debug.h"
26 #include "wmi.h"
27 #include "htt.h"
28 #include "txrx.h"
29 #include "testmode.h"
30 #include "wmi.h"
31 #include "wmi-ops.h"
32
33 /**********/
34 /* Crypto */
35 /**********/
36
37 static int ath10k_send_key(struct ath10k_vif *arvif,
38 struct ieee80211_key_conf *key,
39 enum set_key_cmd cmd,
40 const u8 *macaddr)
41 {
42 struct ath10k *ar = arvif->ar;
43 struct wmi_vdev_install_key_arg arg = {
44 .vdev_id = arvif->vdev_id,
45 .key_idx = key->keyidx,
46 .key_len = key->keylen,
47 .key_data = key->key,
48 .macaddr = macaddr,
49 };
50
51 lockdep_assert_held(&arvif->ar->conf_mutex);
52
53 if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE)
54 arg.key_flags = WMI_KEY_PAIRWISE;
55 else
56 arg.key_flags = WMI_KEY_GROUP;
57
58 switch (key->cipher) {
59 case WLAN_CIPHER_SUITE_CCMP:
60 arg.key_cipher = WMI_CIPHER_AES_CCM;
61 if (arvif->vdev_type == WMI_VDEV_TYPE_AP)
62 key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV_MGMT;
63 else
64 key->flags |= IEEE80211_KEY_FLAG_SW_MGMT_TX;
65 break;
66 case WLAN_CIPHER_SUITE_TKIP:
67 arg.key_cipher = WMI_CIPHER_TKIP;
68 arg.key_txmic_len = 8;
69 arg.key_rxmic_len = 8;
70 break;
71 case WLAN_CIPHER_SUITE_WEP40:
72 case WLAN_CIPHER_SUITE_WEP104:
73 arg.key_cipher = WMI_CIPHER_WEP;
74 /* AP/IBSS mode requires self-key to be groupwise
75 * Otherwise pairwise key must be set */
76 if (memcmp(macaddr, arvif->vif->addr, ETH_ALEN))
77 arg.key_flags = WMI_KEY_PAIRWISE;
78 break;
79 default:
80 ath10k_warn(ar, "cipher %d is not supported\n", key->cipher);
81 return -EOPNOTSUPP;
82 }
83
84 if (cmd == DISABLE_KEY) {
85 arg.key_cipher = WMI_CIPHER_NONE;
86 arg.key_data = NULL;
87 }
88
89 return ath10k_wmi_vdev_install_key(arvif->ar, &arg);
90 }
91
92 static int ath10k_install_key(struct ath10k_vif *arvif,
93 struct ieee80211_key_conf *key,
94 enum set_key_cmd cmd,
95 const u8 *macaddr)
96 {
97 struct ath10k *ar = arvif->ar;
98 int ret;
99
100 lockdep_assert_held(&ar->conf_mutex);
101
102 reinit_completion(&ar->install_key_done);
103
104 ret = ath10k_send_key(arvif, key, cmd, macaddr);
105 if (ret)
106 return ret;
107
108 ret = wait_for_completion_timeout(&ar->install_key_done, 3*HZ);
109 if (ret == 0)
110 return -ETIMEDOUT;
111
112 return 0;
113 }
114
115 static int ath10k_install_peer_wep_keys(struct ath10k_vif *arvif,
116 const u8 *addr)
117 {
118 struct ath10k *ar = arvif->ar;
119 struct ath10k_peer *peer;
120 int ret;
121 int i;
122
123 lockdep_assert_held(&ar->conf_mutex);
124
125 spin_lock_bh(&ar->data_lock);
126 peer = ath10k_peer_find(ar, arvif->vdev_id, addr);
127 spin_unlock_bh(&ar->data_lock);
128
129 if (!peer)
130 return -ENOENT;
131
132 for (i = 0; i < ARRAY_SIZE(arvif->wep_keys); i++) {
133 if (arvif->wep_keys[i] == NULL)
134 continue;
135
136 ret = ath10k_install_key(arvif, arvif->wep_keys[i], SET_KEY,
137 addr);
138 if (ret)
139 return ret;
140
141 spin_lock_bh(&ar->data_lock);
142 peer->keys[i] = arvif->wep_keys[i];
143 spin_unlock_bh(&ar->data_lock);
144 }
145
146 return 0;
147 }
148
149 static int ath10k_clear_peer_keys(struct ath10k_vif *arvif,
150 const u8 *addr)
151 {
152 struct ath10k *ar = arvif->ar;
153 struct ath10k_peer *peer;
154 int first_errno = 0;
155 int ret;
156 int i;
157
158 lockdep_assert_held(&ar->conf_mutex);
159
160 spin_lock_bh(&ar->data_lock);
161 peer = ath10k_peer_find(ar, arvif->vdev_id, addr);
162 spin_unlock_bh(&ar->data_lock);
163
164 if (!peer)
165 return -ENOENT;
166
167 for (i = 0; i < ARRAY_SIZE(peer->keys); i++) {
168 if (peer->keys[i] == NULL)
169 continue;
170
171 ret = ath10k_install_key(arvif, peer->keys[i],
172 DISABLE_KEY, addr);
173 if (ret && first_errno == 0)
174 first_errno = ret;
175
176 if (ret)
177 ath10k_warn(ar, "failed to remove peer wep key %d: %d\n",
178 i, ret);
179
180 spin_lock_bh(&ar->data_lock);
181 peer->keys[i] = NULL;
182 spin_unlock_bh(&ar->data_lock);
183 }
184
185 return first_errno;
186 }
187
188 bool ath10k_mac_is_peer_wep_key_set(struct ath10k *ar, const u8 *addr,
189 u8 keyidx)
190 {
191 struct ath10k_peer *peer;
192 int i;
193
194 lockdep_assert_held(&ar->data_lock);
195
196 /* We don't know which vdev this peer belongs to,
197 * since WMI doesn't give us that information.
198 *
199 * FIXME: multi-bss needs to be handled.
200 */
201 peer = ath10k_peer_find(ar, 0, addr);
202 if (!peer)
203 return false;
204
205 for (i = 0; i < ARRAY_SIZE(peer->keys); i++) {
206 if (peer->keys[i] && peer->keys[i]->keyidx == keyidx)
207 return true;
208 }
209
210 return false;
211 }
212
213 static int ath10k_clear_vdev_key(struct ath10k_vif *arvif,
214 struct ieee80211_key_conf *key)
215 {
216 struct ath10k *ar = arvif->ar;
217 struct ath10k_peer *peer;
218 u8 addr[ETH_ALEN];
219 int first_errno = 0;
220 int ret;
221 int i;
222
223 lockdep_assert_held(&ar->conf_mutex);
224
225 for (;;) {
226 /* since ath10k_install_key we can't hold data_lock all the
227 * time, so we try to remove the keys incrementally */
228 spin_lock_bh(&ar->data_lock);
229 i = 0;
230 list_for_each_entry(peer, &ar->peers, list) {
231 for (i = 0; i < ARRAY_SIZE(peer->keys); i++) {
232 if (peer->keys[i] == key) {
233 ether_addr_copy(addr, peer->addr);
234 peer->keys[i] = NULL;
235 break;
236 }
237 }
238
239 if (i < ARRAY_SIZE(peer->keys))
240 break;
241 }
242 spin_unlock_bh(&ar->data_lock);
243
244 if (i == ARRAY_SIZE(peer->keys))
245 break;
246
247 ret = ath10k_install_key(arvif, key, DISABLE_KEY, addr);
248 if (ret && first_errno == 0)
249 first_errno = ret;
250
251 if (ret)
252 ath10k_warn(ar, "failed to remove key for %pM: %d\n",
253 addr, ret);
254 }
255
256 return first_errno;
257 }
258
259 /*********************/
260 /* General utilities */
261 /*********************/
262
263 static inline enum wmi_phy_mode
264 chan_to_phymode(const struct cfg80211_chan_def *chandef)
265 {
266 enum wmi_phy_mode phymode = MODE_UNKNOWN;
267
268 switch (chandef->chan->band) {
269 case IEEE80211_BAND_2GHZ:
270 switch (chandef->width) {
271 case NL80211_CHAN_WIDTH_20_NOHT:
272 phymode = MODE_11G;
273 break;
274 case NL80211_CHAN_WIDTH_20:
275 phymode = MODE_11NG_HT20;
276 break;
277 case NL80211_CHAN_WIDTH_40:
278 phymode = MODE_11NG_HT40;
279 break;
280 case NL80211_CHAN_WIDTH_5:
281 case NL80211_CHAN_WIDTH_10:
282 case NL80211_CHAN_WIDTH_80:
283 case NL80211_CHAN_WIDTH_80P80:
284 case NL80211_CHAN_WIDTH_160:
285 phymode = MODE_UNKNOWN;
286 break;
287 }
288 break;
289 case IEEE80211_BAND_5GHZ:
290 switch (chandef->width) {
291 case NL80211_CHAN_WIDTH_20_NOHT:
292 phymode = MODE_11A;
293 break;
294 case NL80211_CHAN_WIDTH_20:
295 phymode = MODE_11NA_HT20;
296 break;
297 case NL80211_CHAN_WIDTH_40:
298 phymode = MODE_11NA_HT40;
299 break;
300 case NL80211_CHAN_WIDTH_80:
301 phymode = MODE_11AC_VHT80;
302 break;
303 case NL80211_CHAN_WIDTH_5:
304 case NL80211_CHAN_WIDTH_10:
305 case NL80211_CHAN_WIDTH_80P80:
306 case NL80211_CHAN_WIDTH_160:
307 phymode = MODE_UNKNOWN;
308 break;
309 }
310 break;
311 default:
312 break;
313 }
314
315 WARN_ON(phymode == MODE_UNKNOWN);
316 return phymode;
317 }
318
319 static u8 ath10k_parse_mpdudensity(u8 mpdudensity)
320 {
321 /*
322 * 802.11n D2.0 defined values for "Minimum MPDU Start Spacing":
323 * 0 for no restriction
324 * 1 for 1/4 us
325 * 2 for 1/2 us
326 * 3 for 1 us
327 * 4 for 2 us
328 * 5 for 4 us
329 * 6 for 8 us
330 * 7 for 16 us
331 */
332 switch (mpdudensity) {
333 case 0:
334 return 0;
335 case 1:
336 case 2:
337 case 3:
338 /* Our lower layer calculations limit our precision to
339 1 microsecond */
340 return 1;
341 case 4:
342 return 2;
343 case 5:
344 return 4;
345 case 6:
346 return 8;
347 case 7:
348 return 16;
349 default:
350 return 0;
351 }
352 }
353
354 static int ath10k_peer_create(struct ath10k *ar, u32 vdev_id, const u8 *addr)
355 {
356 int ret;
357
358 lockdep_assert_held(&ar->conf_mutex);
359
360 if (ar->num_peers >= ar->max_num_peers)
361 return -ENOBUFS;
362
363 ret = ath10k_wmi_peer_create(ar, vdev_id, addr);
364 if (ret) {
365 ath10k_warn(ar, "failed to create wmi peer %pM on vdev %i: %i\n",
366 addr, vdev_id, ret);
367 return ret;
368 }
369
370 ret = ath10k_wait_for_peer_created(ar, vdev_id, addr);
371 if (ret) {
372 ath10k_warn(ar, "failed to wait for created wmi peer %pM on vdev %i: %i\n",
373 addr, vdev_id, ret);
374 return ret;
375 }
376
377 ar->num_peers++;
378
379 return 0;
380 }
381
382 static int ath10k_mac_set_kickout(struct ath10k_vif *arvif)
383 {
384 struct ath10k *ar = arvif->ar;
385 u32 param;
386 int ret;
387
388 param = ar->wmi.pdev_param->sta_kickout_th;
389 ret = ath10k_wmi_pdev_set_param(ar, param,
390 ATH10K_KICKOUT_THRESHOLD);
391 if (ret) {
392 ath10k_warn(ar, "failed to set kickout threshold on vdev %i: %d\n",
393 arvif->vdev_id, ret);
394 return ret;
395 }
396
397 param = ar->wmi.vdev_param->ap_keepalive_min_idle_inactive_time_secs;
398 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param,
399 ATH10K_KEEPALIVE_MIN_IDLE);
400 if (ret) {
401 ath10k_warn(ar, "failed to set keepalive minimum idle time on vdev %i: %d\n",
402 arvif->vdev_id, ret);
403 return ret;
404 }
405
406 param = ar->wmi.vdev_param->ap_keepalive_max_idle_inactive_time_secs;
407 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param,
408 ATH10K_KEEPALIVE_MAX_IDLE);
409 if (ret) {
410 ath10k_warn(ar, "failed to set keepalive maximum idle time on vdev %i: %d\n",
411 arvif->vdev_id, ret);
412 return ret;
413 }
414
415 param = ar->wmi.vdev_param->ap_keepalive_max_unresponsive_time_secs;
416 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param,
417 ATH10K_KEEPALIVE_MAX_UNRESPONSIVE);
418 if (ret) {
419 ath10k_warn(ar, "failed to set keepalive maximum unresponsive time on vdev %i: %d\n",
420 arvif->vdev_id, ret);
421 return ret;
422 }
423
424 return 0;
425 }
426
427 static int ath10k_mac_set_rts(struct ath10k_vif *arvif, u32 value)
428 {
429 struct ath10k *ar = arvif->ar;
430 u32 vdev_param;
431
432 vdev_param = ar->wmi.vdev_param->rts_threshold;
433 return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, value);
434 }
435
436 static int ath10k_mac_set_frag(struct ath10k_vif *arvif, u32 value)
437 {
438 struct ath10k *ar = arvif->ar;
439 u32 vdev_param;
440
441 if (value != 0xFFFFFFFF)
442 value = clamp_t(u32, arvif->ar->hw->wiphy->frag_threshold,
443 ATH10K_FRAGMT_THRESHOLD_MIN,
444 ATH10K_FRAGMT_THRESHOLD_MAX);
445
446 vdev_param = ar->wmi.vdev_param->fragmentation_threshold;
447 return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, value);
448 }
449
450 static int ath10k_peer_delete(struct ath10k *ar, u32 vdev_id, const u8 *addr)
451 {
452 int ret;
453
454 lockdep_assert_held(&ar->conf_mutex);
455
456 ret = ath10k_wmi_peer_delete(ar, vdev_id, addr);
457 if (ret)
458 return ret;
459
460 ret = ath10k_wait_for_peer_deleted(ar, vdev_id, addr);
461 if (ret)
462 return ret;
463
464 ar->num_peers--;
465
466 return 0;
467 }
468
469 static void ath10k_peer_cleanup(struct ath10k *ar, u32 vdev_id)
470 {
471 struct ath10k_peer *peer, *tmp;
472
473 lockdep_assert_held(&ar->conf_mutex);
474
475 spin_lock_bh(&ar->data_lock);
476 list_for_each_entry_safe(peer, tmp, &ar->peers, list) {
477 if (peer->vdev_id != vdev_id)
478 continue;
479
480 ath10k_warn(ar, "removing stale peer %pM from vdev_id %d\n",
481 peer->addr, vdev_id);
482
483 list_del(&peer->list);
484 kfree(peer);
485 ar->num_peers--;
486 }
487 spin_unlock_bh(&ar->data_lock);
488 }
489
490 static void ath10k_peer_cleanup_all(struct ath10k *ar)
491 {
492 struct ath10k_peer *peer, *tmp;
493
494 lockdep_assert_held(&ar->conf_mutex);
495
496 spin_lock_bh(&ar->data_lock);
497 list_for_each_entry_safe(peer, tmp, &ar->peers, list) {
498 list_del(&peer->list);
499 kfree(peer);
500 }
501 spin_unlock_bh(&ar->data_lock);
502
503 ar->num_peers = 0;
504 ar->num_stations = 0;
505 }
506
507 /************************/
508 /* Interface management */
509 /************************/
510
511 void ath10k_mac_vif_beacon_free(struct ath10k_vif *arvif)
512 {
513 struct ath10k *ar = arvif->ar;
514
515 lockdep_assert_held(&ar->data_lock);
516
517 if (!arvif->beacon)
518 return;
519
520 if (!arvif->beacon_buf)
521 dma_unmap_single(ar->dev, ATH10K_SKB_CB(arvif->beacon)->paddr,
522 arvif->beacon->len, DMA_TO_DEVICE);
523
524 dev_kfree_skb_any(arvif->beacon);
525
526 arvif->beacon = NULL;
527 arvif->beacon_sent = false;
528 }
529
530 static void ath10k_mac_vif_beacon_cleanup(struct ath10k_vif *arvif)
531 {
532 struct ath10k *ar = arvif->ar;
533
534 lockdep_assert_held(&ar->data_lock);
535
536 ath10k_mac_vif_beacon_free(arvif);
537
538 if (arvif->beacon_buf) {
539 dma_free_coherent(ar->dev, IEEE80211_MAX_FRAME_LEN,
540 arvif->beacon_buf, arvif->beacon_paddr);
541 arvif->beacon_buf = NULL;
542 }
543 }
544
545 static inline int ath10k_vdev_setup_sync(struct ath10k *ar)
546 {
547 int ret;
548
549 lockdep_assert_held(&ar->conf_mutex);
550
551 if (test_bit(ATH10K_FLAG_CRASH_FLUSH, &ar->dev_flags))
552 return -ESHUTDOWN;
553
554 ret = wait_for_completion_timeout(&ar->vdev_setup_done,
555 ATH10K_VDEV_SETUP_TIMEOUT_HZ);
556 if (ret == 0)
557 return -ETIMEDOUT;
558
559 return 0;
560 }
561
562 static int ath10k_monitor_vdev_start(struct ath10k *ar, int vdev_id)
563 {
564 struct cfg80211_chan_def *chandef = &ar->chandef;
565 struct ieee80211_channel *channel = chandef->chan;
566 struct wmi_vdev_start_request_arg arg = {};
567 int ret = 0;
568
569 lockdep_assert_held(&ar->conf_mutex);
570
571 arg.vdev_id = vdev_id;
572 arg.channel.freq = channel->center_freq;
573 arg.channel.band_center_freq1 = chandef->center_freq1;
574
575 /* TODO setup this dynamically, what in case we
576 don't have any vifs? */
577 arg.channel.mode = chan_to_phymode(chandef);
578 arg.channel.chan_radar =
579 !!(channel->flags & IEEE80211_CHAN_RADAR);
580
581 arg.channel.min_power = 0;
582 arg.channel.max_power = channel->max_power * 2;
583 arg.channel.max_reg_power = channel->max_reg_power * 2;
584 arg.channel.max_antenna_gain = channel->max_antenna_gain * 2;
585
586 reinit_completion(&ar->vdev_setup_done);
587
588 ret = ath10k_wmi_vdev_start(ar, &arg);
589 if (ret) {
590 ath10k_warn(ar, "failed to request monitor vdev %i start: %d\n",
591 vdev_id, ret);
592 return ret;
593 }
594
595 ret = ath10k_vdev_setup_sync(ar);
596 if (ret) {
597 ath10k_warn(ar, "failed to synchronize setup for monitor vdev %i: %d\n",
598 vdev_id, ret);
599 return ret;
600 }
601
602 ret = ath10k_wmi_vdev_up(ar, vdev_id, 0, ar->mac_addr);
603 if (ret) {
604 ath10k_warn(ar, "failed to put up monitor vdev %i: %d\n",
605 vdev_id, ret);
606 goto vdev_stop;
607 }
608
609 ar->monitor_vdev_id = vdev_id;
610
611 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %i started\n",
612 ar->monitor_vdev_id);
613 return 0;
614
615 vdev_stop:
616 ret = ath10k_wmi_vdev_stop(ar, ar->monitor_vdev_id);
617 if (ret)
618 ath10k_warn(ar, "failed to stop monitor vdev %i after start failure: %d\n",
619 ar->monitor_vdev_id, ret);
620
621 return ret;
622 }
623
624 static int ath10k_monitor_vdev_stop(struct ath10k *ar)
625 {
626 int ret = 0;
627
628 lockdep_assert_held(&ar->conf_mutex);
629
630 ret = ath10k_wmi_vdev_down(ar, ar->monitor_vdev_id);
631 if (ret)
632 ath10k_warn(ar, "failed to put down monitor vdev %i: %d\n",
633 ar->monitor_vdev_id, ret);
634
635 reinit_completion(&ar->vdev_setup_done);
636
637 ret = ath10k_wmi_vdev_stop(ar, ar->monitor_vdev_id);
638 if (ret)
639 ath10k_warn(ar, "failed to to request monitor vdev %i stop: %d\n",
640 ar->monitor_vdev_id, ret);
641
642 ret = ath10k_vdev_setup_sync(ar);
643 if (ret)
644 ath10k_warn(ar, "failed to synchronise monitor vdev %i: %d\n",
645 ar->monitor_vdev_id, ret);
646
647 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %i stopped\n",
648 ar->monitor_vdev_id);
649 return ret;
650 }
651
652 static int ath10k_monitor_vdev_create(struct ath10k *ar)
653 {
654 int bit, ret = 0;
655
656 lockdep_assert_held(&ar->conf_mutex);
657
658 if (ar->free_vdev_map == 0) {
659 ath10k_warn(ar, "failed to find free vdev id for monitor vdev\n");
660 return -ENOMEM;
661 }
662
663 bit = __ffs64(ar->free_vdev_map);
664
665 ar->monitor_vdev_id = bit;
666
667 ret = ath10k_wmi_vdev_create(ar, ar->monitor_vdev_id,
668 WMI_VDEV_TYPE_MONITOR,
669 0, ar->mac_addr);
670 if (ret) {
671 ath10k_warn(ar, "failed to request monitor vdev %i creation: %d\n",
672 ar->monitor_vdev_id, ret);
673 return ret;
674 }
675
676 ar->free_vdev_map &= ~(1LL << ar->monitor_vdev_id);
677 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %d created\n",
678 ar->monitor_vdev_id);
679
680 return 0;
681 }
682
683 static int ath10k_monitor_vdev_delete(struct ath10k *ar)
684 {
685 int ret = 0;
686
687 lockdep_assert_held(&ar->conf_mutex);
688
689 ret = ath10k_wmi_vdev_delete(ar, ar->monitor_vdev_id);
690 if (ret) {
691 ath10k_warn(ar, "failed to request wmi monitor vdev %i removal: %d\n",
692 ar->monitor_vdev_id, ret);
693 return ret;
694 }
695
696 ar->free_vdev_map |= 1LL << ar->monitor_vdev_id;
697
698 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %d deleted\n",
699 ar->monitor_vdev_id);
700 return ret;
701 }
702
703 static int ath10k_monitor_start(struct ath10k *ar)
704 {
705 int ret;
706
707 lockdep_assert_held(&ar->conf_mutex);
708
709 ret = ath10k_monitor_vdev_create(ar);
710 if (ret) {
711 ath10k_warn(ar, "failed to create monitor vdev: %d\n", ret);
712 return ret;
713 }
714
715 ret = ath10k_monitor_vdev_start(ar, ar->monitor_vdev_id);
716 if (ret) {
717 ath10k_warn(ar, "failed to start monitor vdev: %d\n", ret);
718 ath10k_monitor_vdev_delete(ar);
719 return ret;
720 }
721
722 ar->monitor_started = true;
723 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor started\n");
724
725 return 0;
726 }
727
728 static int ath10k_monitor_stop(struct ath10k *ar)
729 {
730 int ret;
731
732 lockdep_assert_held(&ar->conf_mutex);
733
734 ret = ath10k_monitor_vdev_stop(ar);
735 if (ret) {
736 ath10k_warn(ar, "failed to stop monitor vdev: %d\n", ret);
737 return ret;
738 }
739
740 ret = ath10k_monitor_vdev_delete(ar);
741 if (ret) {
742 ath10k_warn(ar, "failed to delete monitor vdev: %d\n", ret);
743 return ret;
744 }
745
746 ar->monitor_started = false;
747 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor stopped\n");
748
749 return 0;
750 }
751
752 static int ath10k_monitor_recalc(struct ath10k *ar)
753 {
754 bool should_start;
755
756 lockdep_assert_held(&ar->conf_mutex);
757
758 should_start = ar->monitor ||
759 ar->filter_flags & FIF_PROMISC_IN_BSS ||
760 test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
761
762 ath10k_dbg(ar, ATH10K_DBG_MAC,
763 "mac monitor recalc started? %d should? %d\n",
764 ar->monitor_started, should_start);
765
766 if (should_start == ar->monitor_started)
767 return 0;
768
769 if (should_start)
770 return ath10k_monitor_start(ar);
771
772 return ath10k_monitor_stop(ar);
773 }
774
775 static int ath10k_recalc_rtscts_prot(struct ath10k_vif *arvif)
776 {
777 struct ath10k *ar = arvif->ar;
778 u32 vdev_param, rts_cts = 0;
779
780 lockdep_assert_held(&ar->conf_mutex);
781
782 vdev_param = ar->wmi.vdev_param->enable_rtscts;
783
784 if (arvif->use_cts_prot || arvif->num_legacy_stations > 0)
785 rts_cts |= SM(WMI_RTSCTS_ENABLED, WMI_RTSCTS_SET);
786
787 if (arvif->num_legacy_stations > 0)
788 rts_cts |= SM(WMI_RTSCTS_ACROSS_SW_RETRIES,
789 WMI_RTSCTS_PROFILE);
790
791 return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
792 rts_cts);
793 }
794
795 static int ath10k_start_cac(struct ath10k *ar)
796 {
797 int ret;
798
799 lockdep_assert_held(&ar->conf_mutex);
800
801 set_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
802
803 ret = ath10k_monitor_recalc(ar);
804 if (ret) {
805 ath10k_warn(ar, "failed to start monitor (cac): %d\n", ret);
806 clear_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
807 return ret;
808 }
809
810 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac cac start monitor vdev %d\n",
811 ar->monitor_vdev_id);
812
813 return 0;
814 }
815
816 static int ath10k_stop_cac(struct ath10k *ar)
817 {
818 lockdep_assert_held(&ar->conf_mutex);
819
820 /* CAC is not running - do nothing */
821 if (!test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags))
822 return 0;
823
824 clear_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
825 ath10k_monitor_stop(ar);
826
827 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac cac finished\n");
828
829 return 0;
830 }
831
832 static void ath10k_recalc_radar_detection(struct ath10k *ar)
833 {
834 int ret;
835
836 lockdep_assert_held(&ar->conf_mutex);
837
838 ath10k_stop_cac(ar);
839
840 if (!ar->radar_enabled)
841 return;
842
843 if (ar->num_started_vdevs > 0)
844 return;
845
846 ret = ath10k_start_cac(ar);
847 if (ret) {
848 /*
849 * Not possible to start CAC on current channel so starting
850 * radiation is not allowed, make this channel DFS_UNAVAILABLE
851 * by indicating that radar was detected.
852 */
853 ath10k_warn(ar, "failed to start CAC: %d\n", ret);
854 ieee80211_radar_detected(ar->hw);
855 }
856 }
857
858 static int ath10k_vdev_start_restart(struct ath10k_vif *arvif, bool restart)
859 {
860 struct ath10k *ar = arvif->ar;
861 struct cfg80211_chan_def *chandef = &ar->chandef;
862 struct wmi_vdev_start_request_arg arg = {};
863 int ret = 0;
864
865 lockdep_assert_held(&ar->conf_mutex);
866
867 reinit_completion(&ar->vdev_setup_done);
868
869 arg.vdev_id = arvif->vdev_id;
870 arg.dtim_period = arvif->dtim_period;
871 arg.bcn_intval = arvif->beacon_interval;
872
873 arg.channel.freq = chandef->chan->center_freq;
874 arg.channel.band_center_freq1 = chandef->center_freq1;
875 arg.channel.mode = chan_to_phymode(chandef);
876
877 arg.channel.min_power = 0;
878 arg.channel.max_power = chandef->chan->max_power * 2;
879 arg.channel.max_reg_power = chandef->chan->max_reg_power * 2;
880 arg.channel.max_antenna_gain = chandef->chan->max_antenna_gain * 2;
881
882 if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
883 arg.ssid = arvif->u.ap.ssid;
884 arg.ssid_len = arvif->u.ap.ssid_len;
885 arg.hidden_ssid = arvif->u.ap.hidden_ssid;
886
887 /* For now allow DFS for AP mode */
888 arg.channel.chan_radar =
889 !!(chandef->chan->flags & IEEE80211_CHAN_RADAR);
890 } else if (arvif->vdev_type == WMI_VDEV_TYPE_IBSS) {
891 arg.ssid = arvif->vif->bss_conf.ssid;
892 arg.ssid_len = arvif->vif->bss_conf.ssid_len;
893 }
894
895 ath10k_dbg(ar, ATH10K_DBG_MAC,
896 "mac vdev %d start center_freq %d phymode %s\n",
897 arg.vdev_id, arg.channel.freq,
898 ath10k_wmi_phymode_str(arg.channel.mode));
899
900 if (restart)
901 ret = ath10k_wmi_vdev_restart(ar, &arg);
902 else
903 ret = ath10k_wmi_vdev_start(ar, &arg);
904
905 if (ret) {
906 ath10k_warn(ar, "failed to start WMI vdev %i: %d\n",
907 arg.vdev_id, ret);
908 return ret;
909 }
910
911 ret = ath10k_vdev_setup_sync(ar);
912 if (ret) {
913 ath10k_warn(ar, "failed to synchronise setup for vdev %i: %d\n",
914 arg.vdev_id, ret);
915 return ret;
916 }
917
918 ar->num_started_vdevs++;
919 ath10k_recalc_radar_detection(ar);
920
921 return ret;
922 }
923
924 static int ath10k_vdev_start(struct ath10k_vif *arvif)
925 {
926 return ath10k_vdev_start_restart(arvif, false);
927 }
928
929 static int ath10k_vdev_restart(struct ath10k_vif *arvif)
930 {
931 return ath10k_vdev_start_restart(arvif, true);
932 }
933
934 static int ath10k_vdev_stop(struct ath10k_vif *arvif)
935 {
936 struct ath10k *ar = arvif->ar;
937 int ret;
938
939 lockdep_assert_held(&ar->conf_mutex);
940
941 reinit_completion(&ar->vdev_setup_done);
942
943 ret = ath10k_wmi_vdev_stop(ar, arvif->vdev_id);
944 if (ret) {
945 ath10k_warn(ar, "failed to stop WMI vdev %i: %d\n",
946 arvif->vdev_id, ret);
947 return ret;
948 }
949
950 ret = ath10k_vdev_setup_sync(ar);
951 if (ret) {
952 ath10k_warn(ar, "failed to syncronise setup for vdev %i: %d\n",
953 arvif->vdev_id, ret);
954 return ret;
955 }
956
957 WARN_ON(ar->num_started_vdevs == 0);
958
959 if (ar->num_started_vdevs != 0) {
960 ar->num_started_vdevs--;
961 ath10k_recalc_radar_detection(ar);
962 }
963
964 return ret;
965 }
966
967 static void ath10k_control_beaconing(struct ath10k_vif *arvif,
968 struct ieee80211_bss_conf *info)
969 {
970 struct ath10k *ar = arvif->ar;
971 int ret = 0;
972
973 lockdep_assert_held(&arvif->ar->conf_mutex);
974
975 if (!info->enable_beacon) {
976 ath10k_vdev_stop(arvif);
977
978 arvif->is_started = false;
979 arvif->is_up = false;
980
981 spin_lock_bh(&arvif->ar->data_lock);
982 ath10k_mac_vif_beacon_free(arvif);
983 spin_unlock_bh(&arvif->ar->data_lock);
984
985 return;
986 }
987
988 arvif->tx_seq_no = 0x1000;
989
990 ret = ath10k_vdev_start(arvif);
991 if (ret)
992 return;
993
994 arvif->aid = 0;
995 ether_addr_copy(arvif->bssid, info->bssid);
996
997 ret = ath10k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid,
998 arvif->bssid);
999 if (ret) {
1000 ath10k_warn(ar, "failed to bring up vdev %d: %i\n",
1001 arvif->vdev_id, ret);
1002 ath10k_vdev_stop(arvif);
1003 return;
1004 }
1005
1006 arvif->is_started = true;
1007 arvif->is_up = true;
1008
1009 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d up\n", arvif->vdev_id);
1010 }
1011
1012 static void ath10k_control_ibss(struct ath10k_vif *arvif,
1013 struct ieee80211_bss_conf *info,
1014 const u8 self_peer[ETH_ALEN])
1015 {
1016 struct ath10k *ar = arvif->ar;
1017 u32 vdev_param;
1018 int ret = 0;
1019
1020 lockdep_assert_held(&arvif->ar->conf_mutex);
1021
1022 if (!info->ibss_joined) {
1023 ret = ath10k_peer_delete(arvif->ar, arvif->vdev_id, self_peer);
1024 if (ret)
1025 ath10k_warn(ar, "failed to delete IBSS self peer %pM for vdev %d: %d\n",
1026 self_peer, arvif->vdev_id, ret);
1027
1028 if (is_zero_ether_addr(arvif->bssid))
1029 return;
1030
1031 memset(arvif->bssid, 0, ETH_ALEN);
1032
1033 return;
1034 }
1035
1036 ret = ath10k_peer_create(arvif->ar, arvif->vdev_id, self_peer);
1037 if (ret) {
1038 ath10k_warn(ar, "failed to create IBSS self peer %pM for vdev %d: %d\n",
1039 self_peer, arvif->vdev_id, ret);
1040 return;
1041 }
1042
1043 vdev_param = arvif->ar->wmi.vdev_param->atim_window;
1044 ret = ath10k_wmi_vdev_set_param(arvif->ar, arvif->vdev_id, vdev_param,
1045 ATH10K_DEFAULT_ATIM);
1046 if (ret)
1047 ath10k_warn(ar, "failed to set IBSS ATIM for vdev %d: %d\n",
1048 arvif->vdev_id, ret);
1049 }
1050
1051 static int ath10k_mac_vif_recalc_ps_wake_threshold(struct ath10k_vif *arvif)
1052 {
1053 struct ath10k *ar = arvif->ar;
1054 u32 param;
1055 u32 value;
1056 int ret;
1057
1058 lockdep_assert_held(&arvif->ar->conf_mutex);
1059
1060 if (arvif->u.sta.uapsd)
1061 value = WMI_STA_PS_TX_WAKE_THRESHOLD_NEVER;
1062 else
1063 value = WMI_STA_PS_TX_WAKE_THRESHOLD_ALWAYS;
1064
1065 param = WMI_STA_PS_PARAM_TX_WAKE_THRESHOLD;
1066 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, param, value);
1067 if (ret) {
1068 ath10k_warn(ar, "failed to submit ps wake threshold %u on vdev %i: %d\n",
1069 value, arvif->vdev_id, ret);
1070 return ret;
1071 }
1072
1073 return 0;
1074 }
1075
1076 static int ath10k_mac_vif_recalc_ps_poll_count(struct ath10k_vif *arvif)
1077 {
1078 struct ath10k *ar = arvif->ar;
1079 u32 param;
1080 u32 value;
1081 int ret;
1082
1083 lockdep_assert_held(&arvif->ar->conf_mutex);
1084
1085 if (arvif->u.sta.uapsd)
1086 value = WMI_STA_PS_PSPOLL_COUNT_UAPSD;
1087 else
1088 value = WMI_STA_PS_PSPOLL_COUNT_NO_MAX;
1089
1090 param = WMI_STA_PS_PARAM_PSPOLL_COUNT;
1091 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
1092 param, value);
1093 if (ret) {
1094 ath10k_warn(ar, "failed to submit ps poll count %u on vdev %i: %d\n",
1095 value, arvif->vdev_id, ret);
1096 return ret;
1097 }
1098
1099 return 0;
1100 }
1101
1102 /*
1103 * Review this when mac80211 gains per-interface powersave support.
1104 */
1105 static int ath10k_mac_vif_setup_ps(struct ath10k_vif *arvif)
1106 {
1107 struct ath10k *ar = arvif->ar;
1108 struct ieee80211_vif *vif = arvif->vif;
1109 struct ieee80211_conf *conf = &ar->hw->conf;
1110 enum wmi_sta_powersave_param param;
1111 enum wmi_sta_ps_mode psmode;
1112 int ret;
1113 int ps_timeout;
1114
1115 lockdep_assert_held(&arvif->ar->conf_mutex);
1116
1117 if (arvif->vif->type != NL80211_IFTYPE_STATION)
1118 return 0;
1119
1120 if (conf->flags & IEEE80211_CONF_PS) {
1121 psmode = WMI_STA_PS_MODE_ENABLED;
1122 param = WMI_STA_PS_PARAM_INACTIVITY_TIME;
1123
1124 ps_timeout = conf->dynamic_ps_timeout;
1125 if (ps_timeout == 0) {
1126 /* Firmware doesn't like 0 */
1127 ps_timeout = ieee80211_tu_to_usec(
1128 vif->bss_conf.beacon_int) / 1000;
1129 }
1130
1131 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, param,
1132 ps_timeout);
1133 if (ret) {
1134 ath10k_warn(ar, "failed to set inactivity time for vdev %d: %i\n",
1135 arvif->vdev_id, ret);
1136 return ret;
1137 }
1138 } else {
1139 psmode = WMI_STA_PS_MODE_DISABLED;
1140 }
1141
1142 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d psmode %s\n",
1143 arvif->vdev_id, psmode ? "enable" : "disable");
1144
1145 ret = ath10k_wmi_set_psmode(ar, arvif->vdev_id, psmode);
1146 if (ret) {
1147 ath10k_warn(ar, "failed to set PS Mode %d for vdev %d: %d\n",
1148 psmode, arvif->vdev_id, ret);
1149 return ret;
1150 }
1151
1152 return 0;
1153 }
1154
1155 /**********************/
1156 /* Station management */
1157 /**********************/
1158
1159 static u32 ath10k_peer_assoc_h_listen_intval(struct ath10k *ar,
1160 struct ieee80211_vif *vif)
1161 {
1162 /* Some firmware revisions have unstable STA powersave when listen
1163 * interval is set too high (e.g. 5). The symptoms are firmware doesn't
1164 * generate NullFunc frames properly even if buffered frames have been
1165 * indicated in Beacon TIM. Firmware would seldom wake up to pull
1166 * buffered frames. Often pinging the device from AP would simply fail.
1167 *
1168 * As a workaround set it to 1.
1169 */
1170 if (vif->type == NL80211_IFTYPE_STATION)
1171 return 1;
1172
1173 return ar->hw->conf.listen_interval;
1174 }
1175
1176 static void ath10k_peer_assoc_h_basic(struct ath10k *ar,
1177 struct ieee80211_vif *vif,
1178 struct ieee80211_sta *sta,
1179 struct wmi_peer_assoc_complete_arg *arg)
1180 {
1181 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1182
1183 lockdep_assert_held(&ar->conf_mutex);
1184
1185 ether_addr_copy(arg->addr, sta->addr);
1186 arg->vdev_id = arvif->vdev_id;
1187 arg->peer_aid = sta->aid;
1188 arg->peer_flags |= WMI_PEER_AUTH;
1189 arg->peer_listen_intval = ath10k_peer_assoc_h_listen_intval(ar, vif);
1190 arg->peer_num_spatial_streams = 1;
1191 arg->peer_caps = vif->bss_conf.assoc_capability;
1192 }
1193
1194 static void ath10k_peer_assoc_h_crypto(struct ath10k *ar,
1195 struct ieee80211_vif *vif,
1196 struct wmi_peer_assoc_complete_arg *arg)
1197 {
1198 struct ieee80211_bss_conf *info = &vif->bss_conf;
1199 struct cfg80211_bss *bss;
1200 const u8 *rsnie = NULL;
1201 const u8 *wpaie = NULL;
1202
1203 lockdep_assert_held(&ar->conf_mutex);
1204
1205 bss = cfg80211_get_bss(ar->hw->wiphy, ar->hw->conf.chandef.chan,
1206 info->bssid, NULL, 0, 0, 0);
1207 if (bss) {
1208 const struct cfg80211_bss_ies *ies;
1209
1210 rcu_read_lock();
1211 rsnie = ieee80211_bss_get_ie(bss, WLAN_EID_RSN);
1212
1213 ies = rcu_dereference(bss->ies);
1214
1215 wpaie = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
1216 WLAN_OUI_TYPE_MICROSOFT_WPA,
1217 ies->data,
1218 ies->len);
1219 rcu_read_unlock();
1220 cfg80211_put_bss(ar->hw->wiphy, bss);
1221 }
1222
1223 /* FIXME: base on RSN IE/WPA IE is a correct idea? */
1224 if (rsnie || wpaie) {
1225 ath10k_dbg(ar, ATH10K_DBG_WMI, "%s: rsn ie found\n", __func__);
1226 arg->peer_flags |= WMI_PEER_NEED_PTK_4_WAY;
1227 }
1228
1229 if (wpaie) {
1230 ath10k_dbg(ar, ATH10K_DBG_WMI, "%s: wpa ie found\n", __func__);
1231 arg->peer_flags |= WMI_PEER_NEED_GTK_2_WAY;
1232 }
1233 }
1234
1235 static void ath10k_peer_assoc_h_rates(struct ath10k *ar,
1236 struct ieee80211_sta *sta,
1237 struct wmi_peer_assoc_complete_arg *arg)
1238 {
1239 struct wmi_rate_set_arg *rateset = &arg->peer_legacy_rates;
1240 const struct ieee80211_supported_band *sband;
1241 const struct ieee80211_rate *rates;
1242 u32 ratemask;
1243 int i;
1244
1245 lockdep_assert_held(&ar->conf_mutex);
1246
1247 sband = ar->hw->wiphy->bands[ar->hw->conf.chandef.chan->band];
1248 ratemask = sta->supp_rates[ar->hw->conf.chandef.chan->band];
1249 rates = sband->bitrates;
1250
1251 rateset->num_rates = 0;
1252
1253 for (i = 0; i < 32; i++, ratemask >>= 1, rates++) {
1254 if (!(ratemask & 1))
1255 continue;
1256
1257 rateset->rates[rateset->num_rates] = rates->hw_value;
1258 rateset->num_rates++;
1259 }
1260 }
1261
1262 static void ath10k_peer_assoc_h_ht(struct ath10k *ar,
1263 struct ieee80211_sta *sta,
1264 struct wmi_peer_assoc_complete_arg *arg)
1265 {
1266 const struct ieee80211_sta_ht_cap *ht_cap = &sta->ht_cap;
1267 int i, n;
1268 u32 stbc;
1269
1270 lockdep_assert_held(&ar->conf_mutex);
1271
1272 if (!ht_cap->ht_supported)
1273 return;
1274
1275 arg->peer_flags |= WMI_PEER_HT;
1276 arg->peer_max_mpdu = (1 << (IEEE80211_HT_MAX_AMPDU_FACTOR +
1277 ht_cap->ampdu_factor)) - 1;
1278
1279 arg->peer_mpdu_density =
1280 ath10k_parse_mpdudensity(ht_cap->ampdu_density);
1281
1282 arg->peer_ht_caps = ht_cap->cap;
1283 arg->peer_rate_caps |= WMI_RC_HT_FLAG;
1284
1285 if (ht_cap->cap & IEEE80211_HT_CAP_LDPC_CODING)
1286 arg->peer_flags |= WMI_PEER_LDPC;
1287
1288 if (sta->bandwidth >= IEEE80211_STA_RX_BW_40) {
1289 arg->peer_flags |= WMI_PEER_40MHZ;
1290 arg->peer_rate_caps |= WMI_RC_CW40_FLAG;
1291 }
1292
1293 if (ht_cap->cap & IEEE80211_HT_CAP_SGI_20)
1294 arg->peer_rate_caps |= WMI_RC_SGI_FLAG;
1295
1296 if (ht_cap->cap & IEEE80211_HT_CAP_SGI_40)
1297 arg->peer_rate_caps |= WMI_RC_SGI_FLAG;
1298
1299 if (ht_cap->cap & IEEE80211_HT_CAP_TX_STBC) {
1300 arg->peer_rate_caps |= WMI_RC_TX_STBC_FLAG;
1301 arg->peer_flags |= WMI_PEER_STBC;
1302 }
1303
1304 if (ht_cap->cap & IEEE80211_HT_CAP_RX_STBC) {
1305 stbc = ht_cap->cap & IEEE80211_HT_CAP_RX_STBC;
1306 stbc = stbc >> IEEE80211_HT_CAP_RX_STBC_SHIFT;
1307 stbc = stbc << WMI_RC_RX_STBC_FLAG_S;
1308 arg->peer_rate_caps |= stbc;
1309 arg->peer_flags |= WMI_PEER_STBC;
1310 }
1311
1312 if (ht_cap->mcs.rx_mask[1] && ht_cap->mcs.rx_mask[2])
1313 arg->peer_rate_caps |= WMI_RC_TS_FLAG;
1314 else if (ht_cap->mcs.rx_mask[1])
1315 arg->peer_rate_caps |= WMI_RC_DS_FLAG;
1316
1317 for (i = 0, n = 0; i < IEEE80211_HT_MCS_MASK_LEN*8; i++)
1318 if (ht_cap->mcs.rx_mask[i/8] & (1 << i%8))
1319 arg->peer_ht_rates.rates[n++] = i;
1320
1321 /*
1322 * This is a workaround for HT-enabled STAs which break the spec
1323 * and have no HT capabilities RX mask (no HT RX MCS map).
1324 *
1325 * As per spec, in section 20.3.5 Modulation and coding scheme (MCS),
1326 * MCS 0 through 7 are mandatory in 20MHz with 800 ns GI at all STAs.
1327 *
1328 * Firmware asserts if such situation occurs.
1329 */
1330 if (n == 0) {
1331 arg->peer_ht_rates.num_rates = 8;
1332 for (i = 0; i < arg->peer_ht_rates.num_rates; i++)
1333 arg->peer_ht_rates.rates[i] = i;
1334 } else {
1335 arg->peer_ht_rates.num_rates = n;
1336 arg->peer_num_spatial_streams = sta->rx_nss;
1337 }
1338
1339 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac ht peer %pM mcs cnt %d nss %d\n",
1340 arg->addr,
1341 arg->peer_ht_rates.num_rates,
1342 arg->peer_num_spatial_streams);
1343 }
1344
1345 static int ath10k_peer_assoc_qos_ap(struct ath10k *ar,
1346 struct ath10k_vif *arvif,
1347 struct ieee80211_sta *sta)
1348 {
1349 u32 uapsd = 0;
1350 u32 max_sp = 0;
1351 int ret = 0;
1352
1353 lockdep_assert_held(&ar->conf_mutex);
1354
1355 if (sta->wme && sta->uapsd_queues) {
1356 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac uapsd_queues 0x%x max_sp %d\n",
1357 sta->uapsd_queues, sta->max_sp);
1358
1359 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_VO)
1360 uapsd |= WMI_AP_PS_UAPSD_AC3_DELIVERY_EN |
1361 WMI_AP_PS_UAPSD_AC3_TRIGGER_EN;
1362 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_VI)
1363 uapsd |= WMI_AP_PS_UAPSD_AC2_DELIVERY_EN |
1364 WMI_AP_PS_UAPSD_AC2_TRIGGER_EN;
1365 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_BK)
1366 uapsd |= WMI_AP_PS_UAPSD_AC1_DELIVERY_EN |
1367 WMI_AP_PS_UAPSD_AC1_TRIGGER_EN;
1368 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_BE)
1369 uapsd |= WMI_AP_PS_UAPSD_AC0_DELIVERY_EN |
1370 WMI_AP_PS_UAPSD_AC0_TRIGGER_EN;
1371
1372 if (sta->max_sp < MAX_WMI_AP_PS_PEER_PARAM_MAX_SP)
1373 max_sp = sta->max_sp;
1374
1375 ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id,
1376 sta->addr,
1377 WMI_AP_PS_PEER_PARAM_UAPSD,
1378 uapsd);
1379 if (ret) {
1380 ath10k_warn(ar, "failed to set ap ps peer param uapsd for vdev %i: %d\n",
1381 arvif->vdev_id, ret);
1382 return ret;
1383 }
1384
1385 ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id,
1386 sta->addr,
1387 WMI_AP_PS_PEER_PARAM_MAX_SP,
1388 max_sp);
1389 if (ret) {
1390 ath10k_warn(ar, "failed to set ap ps peer param max sp for vdev %i: %d\n",
1391 arvif->vdev_id, ret);
1392 return ret;
1393 }
1394
1395 /* TODO setup this based on STA listen interval and
1396 beacon interval. Currently we don't know
1397 sta->listen_interval - mac80211 patch required.
1398 Currently use 10 seconds */
1399 ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id, sta->addr,
1400 WMI_AP_PS_PEER_PARAM_AGEOUT_TIME,
1401 10);
1402 if (ret) {
1403 ath10k_warn(ar, "failed to set ap ps peer param ageout time for vdev %i: %d\n",
1404 arvif->vdev_id, ret);
1405 return ret;
1406 }
1407 }
1408
1409 return 0;
1410 }
1411
1412 static void ath10k_peer_assoc_h_vht(struct ath10k *ar,
1413 struct ieee80211_sta *sta,
1414 struct wmi_peer_assoc_complete_arg *arg)
1415 {
1416 const struct ieee80211_sta_vht_cap *vht_cap = &sta->vht_cap;
1417 u8 ampdu_factor;
1418
1419 if (!vht_cap->vht_supported)
1420 return;
1421
1422 arg->peer_flags |= WMI_PEER_VHT;
1423 arg->peer_vht_caps = vht_cap->cap;
1424
1425 ampdu_factor = (vht_cap->cap &
1426 IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK) >>
1427 IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_SHIFT;
1428
1429 /* Workaround: Some Netgear/Linksys 11ac APs set Rx A-MPDU factor to
1430 * zero in VHT IE. Using it would result in degraded throughput.
1431 * arg->peer_max_mpdu at this point contains HT max_mpdu so keep
1432 * it if VHT max_mpdu is smaller. */
1433 arg->peer_max_mpdu = max(arg->peer_max_mpdu,
1434 (1U << (IEEE80211_HT_MAX_AMPDU_FACTOR +
1435 ampdu_factor)) - 1);
1436
1437 if (sta->bandwidth == IEEE80211_STA_RX_BW_80)
1438 arg->peer_flags |= WMI_PEER_80MHZ;
1439
1440 arg->peer_vht_rates.rx_max_rate =
1441 __le16_to_cpu(vht_cap->vht_mcs.rx_highest);
1442 arg->peer_vht_rates.rx_mcs_set =
1443 __le16_to_cpu(vht_cap->vht_mcs.rx_mcs_map);
1444 arg->peer_vht_rates.tx_max_rate =
1445 __le16_to_cpu(vht_cap->vht_mcs.tx_highest);
1446 arg->peer_vht_rates.tx_mcs_set =
1447 __le16_to_cpu(vht_cap->vht_mcs.tx_mcs_map);
1448
1449 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vht peer %pM max_mpdu %d flags 0x%x\n",
1450 sta->addr, arg->peer_max_mpdu, arg->peer_flags);
1451 }
1452
1453 static void ath10k_peer_assoc_h_qos(struct ath10k *ar,
1454 struct ieee80211_vif *vif,
1455 struct ieee80211_sta *sta,
1456 struct wmi_peer_assoc_complete_arg *arg)
1457 {
1458 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1459
1460 switch (arvif->vdev_type) {
1461 case WMI_VDEV_TYPE_AP:
1462 if (sta->wme)
1463 arg->peer_flags |= WMI_PEER_QOS;
1464
1465 if (sta->wme && sta->uapsd_queues) {
1466 arg->peer_flags |= WMI_PEER_APSD;
1467 arg->peer_rate_caps |= WMI_RC_UAPSD_FLAG;
1468 }
1469 break;
1470 case WMI_VDEV_TYPE_STA:
1471 if (vif->bss_conf.qos)
1472 arg->peer_flags |= WMI_PEER_QOS;
1473 break;
1474 default:
1475 break;
1476 }
1477 }
1478
1479 static bool ath10k_mac_sta_has_11g_rates(struct ieee80211_sta *sta)
1480 {
1481 /* First 4 rates in ath10k_rates are CCK (11b) rates. */
1482 return sta->supp_rates[IEEE80211_BAND_2GHZ] >> 4;
1483 }
1484
1485 static void ath10k_peer_assoc_h_phymode(struct ath10k *ar,
1486 struct ieee80211_vif *vif,
1487 struct ieee80211_sta *sta,
1488 struct wmi_peer_assoc_complete_arg *arg)
1489 {
1490 enum wmi_phy_mode phymode = MODE_UNKNOWN;
1491
1492 switch (ar->hw->conf.chandef.chan->band) {
1493 case IEEE80211_BAND_2GHZ:
1494 if (sta->ht_cap.ht_supported) {
1495 if (sta->bandwidth == IEEE80211_STA_RX_BW_40)
1496 phymode = MODE_11NG_HT40;
1497 else
1498 phymode = MODE_11NG_HT20;
1499 } else if (ath10k_mac_sta_has_11g_rates(sta)) {
1500 phymode = MODE_11G;
1501 } else {
1502 phymode = MODE_11B;
1503 }
1504
1505 break;
1506 case IEEE80211_BAND_5GHZ:
1507 /*
1508 * Check VHT first.
1509 */
1510 if (sta->vht_cap.vht_supported) {
1511 if (sta->bandwidth == IEEE80211_STA_RX_BW_80)
1512 phymode = MODE_11AC_VHT80;
1513 else if (sta->bandwidth == IEEE80211_STA_RX_BW_40)
1514 phymode = MODE_11AC_VHT40;
1515 else if (sta->bandwidth == IEEE80211_STA_RX_BW_20)
1516 phymode = MODE_11AC_VHT20;
1517 } else if (sta->ht_cap.ht_supported) {
1518 if (sta->bandwidth == IEEE80211_STA_RX_BW_40)
1519 phymode = MODE_11NA_HT40;
1520 else
1521 phymode = MODE_11NA_HT20;
1522 } else {
1523 phymode = MODE_11A;
1524 }
1525
1526 break;
1527 default:
1528 break;
1529 }
1530
1531 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac peer %pM phymode %s\n",
1532 sta->addr, ath10k_wmi_phymode_str(phymode));
1533
1534 arg->peer_phymode = phymode;
1535 WARN_ON(phymode == MODE_UNKNOWN);
1536 }
1537
1538 static int ath10k_peer_assoc_prepare(struct ath10k *ar,
1539 struct ieee80211_vif *vif,
1540 struct ieee80211_sta *sta,
1541 struct wmi_peer_assoc_complete_arg *arg)
1542 {
1543 lockdep_assert_held(&ar->conf_mutex);
1544
1545 memset(arg, 0, sizeof(*arg));
1546
1547 ath10k_peer_assoc_h_basic(ar, vif, sta, arg);
1548 ath10k_peer_assoc_h_crypto(ar, vif, arg);
1549 ath10k_peer_assoc_h_rates(ar, sta, arg);
1550 ath10k_peer_assoc_h_ht(ar, sta, arg);
1551 ath10k_peer_assoc_h_vht(ar, sta, arg);
1552 ath10k_peer_assoc_h_qos(ar, vif, sta, arg);
1553 ath10k_peer_assoc_h_phymode(ar, vif, sta, arg);
1554
1555 return 0;
1556 }
1557
1558 static const u32 ath10k_smps_map[] = {
1559 [WLAN_HT_CAP_SM_PS_STATIC] = WMI_PEER_SMPS_STATIC,
1560 [WLAN_HT_CAP_SM_PS_DYNAMIC] = WMI_PEER_SMPS_DYNAMIC,
1561 [WLAN_HT_CAP_SM_PS_INVALID] = WMI_PEER_SMPS_PS_NONE,
1562 [WLAN_HT_CAP_SM_PS_DISABLED] = WMI_PEER_SMPS_PS_NONE,
1563 };
1564
1565 static int ath10k_setup_peer_smps(struct ath10k *ar, struct ath10k_vif *arvif,
1566 const u8 *addr,
1567 const struct ieee80211_sta_ht_cap *ht_cap)
1568 {
1569 int smps;
1570
1571 if (!ht_cap->ht_supported)
1572 return 0;
1573
1574 smps = ht_cap->cap & IEEE80211_HT_CAP_SM_PS;
1575 smps >>= IEEE80211_HT_CAP_SM_PS_SHIFT;
1576
1577 if (smps >= ARRAY_SIZE(ath10k_smps_map))
1578 return -EINVAL;
1579
1580 return ath10k_wmi_peer_set_param(ar, arvif->vdev_id, addr,
1581 WMI_PEER_SMPS_STATE,
1582 ath10k_smps_map[smps]);
1583 }
1584
1585 /* can be called only in mac80211 callbacks due to `key_count` usage */
1586 static void ath10k_bss_assoc(struct ieee80211_hw *hw,
1587 struct ieee80211_vif *vif,
1588 struct ieee80211_bss_conf *bss_conf)
1589 {
1590 struct ath10k *ar = hw->priv;
1591 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1592 struct ieee80211_sta_ht_cap ht_cap;
1593 struct wmi_peer_assoc_complete_arg peer_arg;
1594 struct ieee80211_sta *ap_sta;
1595 int ret;
1596
1597 lockdep_assert_held(&ar->conf_mutex);
1598
1599 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %i assoc bssid %pM aid %d\n",
1600 arvif->vdev_id, arvif->bssid, arvif->aid);
1601
1602 rcu_read_lock();
1603
1604 ap_sta = ieee80211_find_sta(vif, bss_conf->bssid);
1605 if (!ap_sta) {
1606 ath10k_warn(ar, "failed to find station entry for bss %pM vdev %i\n",
1607 bss_conf->bssid, arvif->vdev_id);
1608 rcu_read_unlock();
1609 return;
1610 }
1611
1612 /* ap_sta must be accessed only within rcu section which must be left
1613 * before calling ath10k_setup_peer_smps() which might sleep. */
1614 ht_cap = ap_sta->ht_cap;
1615
1616 ret = ath10k_peer_assoc_prepare(ar, vif, ap_sta, &peer_arg);
1617 if (ret) {
1618 ath10k_warn(ar, "failed to prepare peer assoc for %pM vdev %i: %d\n",
1619 bss_conf->bssid, arvif->vdev_id, ret);
1620 rcu_read_unlock();
1621 return;
1622 }
1623
1624 rcu_read_unlock();
1625
1626 ret = ath10k_wmi_peer_assoc(ar, &peer_arg);
1627 if (ret) {
1628 ath10k_warn(ar, "failed to run peer assoc for %pM vdev %i: %d\n",
1629 bss_conf->bssid, arvif->vdev_id, ret);
1630 return;
1631 }
1632
1633 ret = ath10k_setup_peer_smps(ar, arvif, bss_conf->bssid, &ht_cap);
1634 if (ret) {
1635 ath10k_warn(ar, "failed to setup peer SMPS for vdev %i: %d\n",
1636 arvif->vdev_id, ret);
1637 return;
1638 }
1639
1640 ath10k_dbg(ar, ATH10K_DBG_MAC,
1641 "mac vdev %d up (associated) bssid %pM aid %d\n",
1642 arvif->vdev_id, bss_conf->bssid, bss_conf->aid);
1643
1644 WARN_ON(arvif->is_up);
1645
1646 arvif->aid = bss_conf->aid;
1647 ether_addr_copy(arvif->bssid, bss_conf->bssid);
1648
1649 ret = ath10k_wmi_vdev_up(ar, arvif->vdev_id, arvif->aid, arvif->bssid);
1650 if (ret) {
1651 ath10k_warn(ar, "failed to set vdev %d up: %d\n",
1652 arvif->vdev_id, ret);
1653 return;
1654 }
1655
1656 arvif->is_up = true;
1657 }
1658
1659 static void ath10k_bss_disassoc(struct ieee80211_hw *hw,
1660 struct ieee80211_vif *vif)
1661 {
1662 struct ath10k *ar = hw->priv;
1663 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1664 int ret;
1665
1666 lockdep_assert_held(&ar->conf_mutex);
1667
1668 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %i disassoc bssid %pM\n",
1669 arvif->vdev_id, arvif->bssid);
1670
1671 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id);
1672 if (ret)
1673 ath10k_warn(ar, "faield to down vdev %i: %d\n",
1674 arvif->vdev_id, ret);
1675
1676 arvif->def_wep_key_idx = 0;
1677 arvif->is_up = false;
1678 }
1679
1680 static int ath10k_station_assoc(struct ath10k *ar,
1681 struct ieee80211_vif *vif,
1682 struct ieee80211_sta *sta,
1683 bool reassoc)
1684 {
1685 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1686 struct wmi_peer_assoc_complete_arg peer_arg;
1687 int ret = 0;
1688
1689 lockdep_assert_held(&ar->conf_mutex);
1690
1691 ret = ath10k_peer_assoc_prepare(ar, vif, sta, &peer_arg);
1692 if (ret) {
1693 ath10k_warn(ar, "failed to prepare WMI peer assoc for %pM vdev %i: %i\n",
1694 sta->addr, arvif->vdev_id, ret);
1695 return ret;
1696 }
1697
1698 peer_arg.peer_reassoc = reassoc;
1699 ret = ath10k_wmi_peer_assoc(ar, &peer_arg);
1700 if (ret) {
1701 ath10k_warn(ar, "failed to run peer assoc for STA %pM vdev %i: %d\n",
1702 sta->addr, arvif->vdev_id, ret);
1703 return ret;
1704 }
1705
1706 /* Re-assoc is run only to update supported rates for given station. It
1707 * doesn't make much sense to reconfigure the peer completely.
1708 */
1709 if (!reassoc) {
1710 ret = ath10k_setup_peer_smps(ar, arvif, sta->addr,
1711 &sta->ht_cap);
1712 if (ret) {
1713 ath10k_warn(ar, "failed to setup peer SMPS for vdev %d: %d\n",
1714 arvif->vdev_id, ret);
1715 return ret;
1716 }
1717
1718 ret = ath10k_peer_assoc_qos_ap(ar, arvif, sta);
1719 if (ret) {
1720 ath10k_warn(ar, "failed to set qos params for STA %pM for vdev %i: %d\n",
1721 sta->addr, arvif->vdev_id, ret);
1722 return ret;
1723 }
1724
1725 if (!sta->wme) {
1726 arvif->num_legacy_stations++;
1727 ret = ath10k_recalc_rtscts_prot(arvif);
1728 if (ret) {
1729 ath10k_warn(ar, "failed to recalculate rts/cts prot for vdev %d: %d\n",
1730 arvif->vdev_id, ret);
1731 return ret;
1732 }
1733 }
1734
1735 ret = ath10k_install_peer_wep_keys(arvif, sta->addr);
1736 if (ret) {
1737 ath10k_warn(ar, "failed to install peer wep keys for vdev %i: %d\n",
1738 arvif->vdev_id, ret);
1739 return ret;
1740 }
1741 }
1742
1743 return ret;
1744 }
1745
1746 static int ath10k_station_disassoc(struct ath10k *ar,
1747 struct ieee80211_vif *vif,
1748 struct ieee80211_sta *sta)
1749 {
1750 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1751 int ret = 0;
1752
1753 lockdep_assert_held(&ar->conf_mutex);
1754
1755 if (!sta->wme) {
1756 arvif->num_legacy_stations--;
1757 ret = ath10k_recalc_rtscts_prot(arvif);
1758 if (ret) {
1759 ath10k_warn(ar, "failed to recalculate rts/cts prot for vdev %d: %d\n",
1760 arvif->vdev_id, ret);
1761 return ret;
1762 }
1763 }
1764
1765 ret = ath10k_clear_peer_keys(arvif, sta->addr);
1766 if (ret) {
1767 ath10k_warn(ar, "failed to clear all peer wep keys for vdev %i: %d\n",
1768 arvif->vdev_id, ret);
1769 return ret;
1770 }
1771
1772 return ret;
1773 }
1774
1775 /**************/
1776 /* Regulatory */
1777 /**************/
1778
1779 static int ath10k_update_channel_list(struct ath10k *ar)
1780 {
1781 struct ieee80211_hw *hw = ar->hw;
1782 struct ieee80211_supported_band **bands;
1783 enum ieee80211_band band;
1784 struct ieee80211_channel *channel;
1785 struct wmi_scan_chan_list_arg arg = {0};
1786 struct wmi_channel_arg *ch;
1787 bool passive;
1788 int len;
1789 int ret;
1790 int i;
1791
1792 lockdep_assert_held(&ar->conf_mutex);
1793
1794 bands = hw->wiphy->bands;
1795 for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
1796 if (!bands[band])
1797 continue;
1798
1799 for (i = 0; i < bands[band]->n_channels; i++) {
1800 if (bands[band]->channels[i].flags &
1801 IEEE80211_CHAN_DISABLED)
1802 continue;
1803
1804 arg.n_channels++;
1805 }
1806 }
1807
1808 len = sizeof(struct wmi_channel_arg) * arg.n_channels;
1809 arg.channels = kzalloc(len, GFP_KERNEL);
1810 if (!arg.channels)
1811 return -ENOMEM;
1812
1813 ch = arg.channels;
1814 for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
1815 if (!bands[band])
1816 continue;
1817
1818 for (i = 0; i < bands[band]->n_channels; i++) {
1819 channel = &bands[band]->channels[i];
1820
1821 if (channel->flags & IEEE80211_CHAN_DISABLED)
1822 continue;
1823
1824 ch->allow_ht = true;
1825
1826 /* FIXME: when should we really allow VHT? */
1827 ch->allow_vht = true;
1828
1829 ch->allow_ibss =
1830 !(channel->flags & IEEE80211_CHAN_NO_IR);
1831
1832 ch->ht40plus =
1833 !(channel->flags & IEEE80211_CHAN_NO_HT40PLUS);
1834
1835 ch->chan_radar =
1836 !!(channel->flags & IEEE80211_CHAN_RADAR);
1837
1838 passive = channel->flags & IEEE80211_CHAN_NO_IR;
1839 ch->passive = passive;
1840
1841 ch->freq = channel->center_freq;
1842 ch->band_center_freq1 = channel->center_freq;
1843 ch->min_power = 0;
1844 ch->max_power = channel->max_power * 2;
1845 ch->max_reg_power = channel->max_reg_power * 2;
1846 ch->max_antenna_gain = channel->max_antenna_gain * 2;
1847 ch->reg_class_id = 0; /* FIXME */
1848
1849 /* FIXME: why use only legacy modes, why not any
1850 * HT/VHT modes? Would that even make any
1851 * difference? */
1852 if (channel->band == IEEE80211_BAND_2GHZ)
1853 ch->mode = MODE_11G;
1854 else
1855 ch->mode = MODE_11A;
1856
1857 if (WARN_ON_ONCE(ch->mode == MODE_UNKNOWN))
1858 continue;
1859
1860 ath10k_dbg(ar, ATH10K_DBG_WMI,
1861 "mac channel [%zd/%d] freq %d maxpower %d regpower %d antenna %d mode %d\n",
1862 ch - arg.channels, arg.n_channels,
1863 ch->freq, ch->max_power, ch->max_reg_power,
1864 ch->max_antenna_gain, ch->mode);
1865
1866 ch++;
1867 }
1868 }
1869
1870 ret = ath10k_wmi_scan_chan_list(ar, &arg);
1871 kfree(arg.channels);
1872
1873 return ret;
1874 }
1875
1876 static enum wmi_dfs_region
1877 ath10k_mac_get_dfs_region(enum nl80211_dfs_regions dfs_region)
1878 {
1879 switch (dfs_region) {
1880 case NL80211_DFS_UNSET:
1881 return WMI_UNINIT_DFS_DOMAIN;
1882 case NL80211_DFS_FCC:
1883 return WMI_FCC_DFS_DOMAIN;
1884 case NL80211_DFS_ETSI:
1885 return WMI_ETSI_DFS_DOMAIN;
1886 case NL80211_DFS_JP:
1887 return WMI_MKK4_DFS_DOMAIN;
1888 }
1889 return WMI_UNINIT_DFS_DOMAIN;
1890 }
1891
1892 static void ath10k_regd_update(struct ath10k *ar)
1893 {
1894 struct reg_dmn_pair_mapping *regpair;
1895 int ret;
1896 enum wmi_dfs_region wmi_dfs_reg;
1897 enum nl80211_dfs_regions nl_dfs_reg;
1898
1899 lockdep_assert_held(&ar->conf_mutex);
1900
1901 ret = ath10k_update_channel_list(ar);
1902 if (ret)
1903 ath10k_warn(ar, "failed to update channel list: %d\n", ret);
1904
1905 regpair = ar->ath_common.regulatory.regpair;
1906
1907 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector) {
1908 nl_dfs_reg = ar->dfs_detector->region;
1909 wmi_dfs_reg = ath10k_mac_get_dfs_region(nl_dfs_reg);
1910 } else {
1911 wmi_dfs_reg = WMI_UNINIT_DFS_DOMAIN;
1912 }
1913
1914 /* Target allows setting up per-band regdomain but ath_common provides
1915 * a combined one only */
1916 ret = ath10k_wmi_pdev_set_regdomain(ar,
1917 regpair->reg_domain,
1918 regpair->reg_domain, /* 2ghz */
1919 regpair->reg_domain, /* 5ghz */
1920 regpair->reg_2ghz_ctl,
1921 regpair->reg_5ghz_ctl,
1922 wmi_dfs_reg);
1923 if (ret)
1924 ath10k_warn(ar, "failed to set pdev regdomain: %d\n", ret);
1925 }
1926
1927 static void ath10k_reg_notifier(struct wiphy *wiphy,
1928 struct regulatory_request *request)
1929 {
1930 struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
1931 struct ath10k *ar = hw->priv;
1932 bool result;
1933
1934 ath_reg_notifier_apply(wiphy, request, &ar->ath_common.regulatory);
1935
1936 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector) {
1937 ath10k_dbg(ar, ATH10K_DBG_REGULATORY, "dfs region 0x%x\n",
1938 request->dfs_region);
1939 result = ar->dfs_detector->set_dfs_domain(ar->dfs_detector,
1940 request->dfs_region);
1941 if (!result)
1942 ath10k_warn(ar, "DFS region 0x%X not supported, will trigger radar for every pulse\n",
1943 request->dfs_region);
1944 }
1945
1946 mutex_lock(&ar->conf_mutex);
1947 if (ar->state == ATH10K_STATE_ON)
1948 ath10k_regd_update(ar);
1949 mutex_unlock(&ar->conf_mutex);
1950 }
1951
1952 /***************/
1953 /* TX handlers */
1954 /***************/
1955
1956 static u8 ath10k_tx_h_get_tid(struct ieee80211_hdr *hdr)
1957 {
1958 if (ieee80211_is_mgmt(hdr->frame_control))
1959 return HTT_DATA_TX_EXT_TID_MGMT;
1960
1961 if (!ieee80211_is_data_qos(hdr->frame_control))
1962 return HTT_DATA_TX_EXT_TID_NON_QOS_MCAST_BCAST;
1963
1964 if (!is_unicast_ether_addr(ieee80211_get_DA(hdr)))
1965 return HTT_DATA_TX_EXT_TID_NON_QOS_MCAST_BCAST;
1966
1967 return ieee80211_get_qos_ctl(hdr)[0] & IEEE80211_QOS_CTL_TID_MASK;
1968 }
1969
1970 static u8 ath10k_tx_h_get_vdev_id(struct ath10k *ar, struct ieee80211_vif *vif)
1971 {
1972 if (vif)
1973 return ath10k_vif_to_arvif(vif)->vdev_id;
1974
1975 if (ar->monitor_started)
1976 return ar->monitor_vdev_id;
1977
1978 ath10k_warn(ar, "failed to resolve vdev id\n");
1979 return 0;
1980 }
1981
1982 /* HTT Tx uses Native Wifi tx mode which expects 802.11 frames without QoS
1983 * Control in the header.
1984 */
1985 static void ath10k_tx_h_nwifi(struct ieee80211_hw *hw, struct sk_buff *skb)
1986 {
1987 struct ieee80211_hdr *hdr = (void *)skb->data;
1988 struct ath10k_skb_cb *cb = ATH10K_SKB_CB(skb);
1989 u8 *qos_ctl;
1990
1991 if (!ieee80211_is_data_qos(hdr->frame_control))
1992 return;
1993
1994 qos_ctl = ieee80211_get_qos_ctl(hdr);
1995 memmove(skb->data + IEEE80211_QOS_CTL_LEN,
1996 skb->data, (void *)qos_ctl - (void *)skb->data);
1997 skb_pull(skb, IEEE80211_QOS_CTL_LEN);
1998
1999 /* Fw/Hw generates a corrupted QoS Control Field for QoS NullFunc
2000 * frames. Powersave is handled by the fw/hw so QoS NyllFunc frames are
2001 * used only for CQM purposes (e.g. hostapd station keepalive ping) so
2002 * it is safe to downgrade to NullFunc.
2003 */
2004 if (ieee80211_is_qos_nullfunc(hdr->frame_control)) {
2005 hdr->frame_control &= ~__cpu_to_le16(IEEE80211_STYPE_QOS_DATA);
2006 cb->htt.tid = HTT_DATA_TX_EXT_TID_NON_QOS_MCAST_BCAST;
2007 }
2008 }
2009
2010 static void ath10k_tx_wep_key_work(struct work_struct *work)
2011 {
2012 struct ath10k_vif *arvif = container_of(work, struct ath10k_vif,
2013 wep_key_work);
2014 struct ath10k *ar = arvif->ar;
2015 int ret, keyidx = arvif->def_wep_key_newidx;
2016
2017 mutex_lock(&arvif->ar->conf_mutex);
2018
2019 if (arvif->ar->state != ATH10K_STATE_ON)
2020 goto unlock;
2021
2022 if (arvif->def_wep_key_idx == keyidx)
2023 goto unlock;
2024
2025 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d set keyidx %d\n",
2026 arvif->vdev_id, keyidx);
2027
2028 ret = ath10k_wmi_vdev_set_param(arvif->ar,
2029 arvif->vdev_id,
2030 arvif->ar->wmi.vdev_param->def_keyid,
2031 keyidx);
2032 if (ret) {
2033 ath10k_warn(ar, "failed to update wep key index for vdev %d: %d\n",
2034 arvif->vdev_id,
2035 ret);
2036 goto unlock;
2037 }
2038
2039 arvif->def_wep_key_idx = keyidx;
2040
2041 unlock:
2042 mutex_unlock(&arvif->ar->conf_mutex);
2043 }
2044
2045 static void ath10k_tx_h_update_wep_key(struct ieee80211_vif *vif,
2046 struct ieee80211_key_conf *key,
2047 struct sk_buff *skb)
2048 {
2049 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2050 struct ath10k *ar = arvif->ar;
2051 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
2052
2053 if (!ieee80211_has_protected(hdr->frame_control))
2054 return;
2055
2056 if (!key)
2057 return;
2058
2059 if (key->cipher != WLAN_CIPHER_SUITE_WEP40 &&
2060 key->cipher != WLAN_CIPHER_SUITE_WEP104)
2061 return;
2062
2063 if (key->keyidx == arvif->def_wep_key_idx)
2064 return;
2065
2066 /* FIXME: Most likely a few frames will be TXed with an old key. Simply
2067 * queueing frames until key index is updated is not an option because
2068 * sk_buff may need more processing to be done, e.g. offchannel */
2069 arvif->def_wep_key_newidx = key->keyidx;
2070 ieee80211_queue_work(ar->hw, &arvif->wep_key_work);
2071 }
2072
2073 static void ath10k_tx_h_add_p2p_noa_ie(struct ath10k *ar,
2074 struct ieee80211_vif *vif,
2075 struct sk_buff *skb)
2076 {
2077 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
2078 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2079
2080 /* This is case only for P2P_GO */
2081 if (arvif->vdev_type != WMI_VDEV_TYPE_AP ||
2082 arvif->vdev_subtype != WMI_VDEV_SUBTYPE_P2P_GO)
2083 return;
2084
2085 if (unlikely(ieee80211_is_probe_resp(hdr->frame_control))) {
2086 spin_lock_bh(&ar->data_lock);
2087 if (arvif->u.ap.noa_data)
2088 if (!pskb_expand_head(skb, 0, arvif->u.ap.noa_len,
2089 GFP_ATOMIC))
2090 memcpy(skb_put(skb, arvif->u.ap.noa_len),
2091 arvif->u.ap.noa_data,
2092 arvif->u.ap.noa_len);
2093 spin_unlock_bh(&ar->data_lock);
2094 }
2095 }
2096
2097 static bool ath10k_mac_need_offchan_tx_work(struct ath10k *ar)
2098 {
2099 /* FIXME: Not really sure since when the behaviour changed. At some
2100 * point new firmware stopped requiring creation of peer entries for
2101 * offchannel tx (and actually creating them causes issues with wmi-htc
2102 * tx credit replenishment and reliability). Assuming it's at least 3.4
2103 * because that's when the `freq` was introduced to TX_FRM HTT command.
2104 */
2105 return !(ar->htt.target_version_major >= 3 &&
2106 ar->htt.target_version_minor >= 4);
2107 }
2108
2109 static void ath10k_tx_htt(struct ath10k *ar, struct sk_buff *skb)
2110 {
2111 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
2112 int ret = 0;
2113
2114 if (ar->htt.target_version_major >= 3) {
2115 /* Since HTT 3.0 there is no separate mgmt tx command */
2116 ret = ath10k_htt_tx(&ar->htt, skb);
2117 goto exit;
2118 }
2119
2120 if (ieee80211_is_mgmt(hdr->frame_control)) {
2121 if (test_bit(ATH10K_FW_FEATURE_HAS_WMI_MGMT_TX,
2122 ar->fw_features)) {
2123 if (skb_queue_len(&ar->wmi_mgmt_tx_queue) >=
2124 ATH10K_MAX_NUM_MGMT_PENDING) {
2125 ath10k_warn(ar, "reached WMI management transmit queue limit\n");
2126 ret = -EBUSY;
2127 goto exit;
2128 }
2129
2130 skb_queue_tail(&ar->wmi_mgmt_tx_queue, skb);
2131 ieee80211_queue_work(ar->hw, &ar->wmi_mgmt_tx_work);
2132 } else {
2133 ret = ath10k_htt_mgmt_tx(&ar->htt, skb);
2134 }
2135 } else if (!test_bit(ATH10K_FW_FEATURE_HAS_WMI_MGMT_TX,
2136 ar->fw_features) &&
2137 ieee80211_is_nullfunc(hdr->frame_control)) {
2138 /* FW does not report tx status properly for NullFunc frames
2139 * unless they are sent through mgmt tx path. mac80211 sends
2140 * those frames when it detects link/beacon loss and depends
2141 * on the tx status to be correct. */
2142 ret = ath10k_htt_mgmt_tx(&ar->htt, skb);
2143 } else {
2144 ret = ath10k_htt_tx(&ar->htt, skb);
2145 }
2146
2147 exit:
2148 if (ret) {
2149 ath10k_warn(ar, "failed to transmit packet, dropping: %d\n",
2150 ret);
2151 ieee80211_free_txskb(ar->hw, skb);
2152 }
2153 }
2154
2155 void ath10k_offchan_tx_purge(struct ath10k *ar)
2156 {
2157 struct sk_buff *skb;
2158
2159 for (;;) {
2160 skb = skb_dequeue(&ar->offchan_tx_queue);
2161 if (!skb)
2162 break;
2163
2164 ieee80211_free_txskb(ar->hw, skb);
2165 }
2166 }
2167
2168 void ath10k_offchan_tx_work(struct work_struct *work)
2169 {
2170 struct ath10k *ar = container_of(work, struct ath10k, offchan_tx_work);
2171 struct ath10k_peer *peer;
2172 struct ieee80211_hdr *hdr;
2173 struct sk_buff *skb;
2174 const u8 *peer_addr;
2175 int vdev_id;
2176 int ret;
2177
2178 /* FW requirement: We must create a peer before FW will send out
2179 * an offchannel frame. Otherwise the frame will be stuck and
2180 * never transmitted. We delete the peer upon tx completion.
2181 * It is unlikely that a peer for offchannel tx will already be
2182 * present. However it may be in some rare cases so account for that.
2183 * Otherwise we might remove a legitimate peer and break stuff. */
2184
2185 for (;;) {
2186 skb = skb_dequeue(&ar->offchan_tx_queue);
2187 if (!skb)
2188 break;
2189
2190 mutex_lock(&ar->conf_mutex);
2191
2192 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac offchannel skb %p\n",
2193 skb);
2194
2195 hdr = (struct ieee80211_hdr *)skb->data;
2196 peer_addr = ieee80211_get_DA(hdr);
2197 vdev_id = ATH10K_SKB_CB(skb)->vdev_id;
2198
2199 spin_lock_bh(&ar->data_lock);
2200 peer = ath10k_peer_find(ar, vdev_id, peer_addr);
2201 spin_unlock_bh(&ar->data_lock);
2202
2203 if (peer)
2204 /* FIXME: should this use ath10k_warn()? */
2205 ath10k_dbg(ar, ATH10K_DBG_MAC, "peer %pM on vdev %d already present\n",
2206 peer_addr, vdev_id);
2207
2208 if (!peer) {
2209 ret = ath10k_peer_create(ar, vdev_id, peer_addr);
2210 if (ret)
2211 ath10k_warn(ar, "failed to create peer %pM on vdev %d: %d\n",
2212 peer_addr, vdev_id, ret);
2213 }
2214
2215 spin_lock_bh(&ar->data_lock);
2216 reinit_completion(&ar->offchan_tx_completed);
2217 ar->offchan_tx_skb = skb;
2218 spin_unlock_bh(&ar->data_lock);
2219
2220 ath10k_tx_htt(ar, skb);
2221
2222 ret = wait_for_completion_timeout(&ar->offchan_tx_completed,
2223 3 * HZ);
2224 if (ret <= 0)
2225 ath10k_warn(ar, "timed out waiting for offchannel skb %p\n",
2226 skb);
2227
2228 if (!peer) {
2229 ret = ath10k_peer_delete(ar, vdev_id, peer_addr);
2230 if (ret)
2231 ath10k_warn(ar, "failed to delete peer %pM on vdev %d: %d\n",
2232 peer_addr, vdev_id, ret);
2233 }
2234
2235 mutex_unlock(&ar->conf_mutex);
2236 }
2237 }
2238
2239 void ath10k_mgmt_over_wmi_tx_purge(struct ath10k *ar)
2240 {
2241 struct sk_buff *skb;
2242
2243 for (;;) {
2244 skb = skb_dequeue(&ar->wmi_mgmt_tx_queue);
2245 if (!skb)
2246 break;
2247
2248 ieee80211_free_txskb(ar->hw, skb);
2249 }
2250 }
2251
2252 void ath10k_mgmt_over_wmi_tx_work(struct work_struct *work)
2253 {
2254 struct ath10k *ar = container_of(work, struct ath10k, wmi_mgmt_tx_work);
2255 struct sk_buff *skb;
2256 int ret;
2257
2258 for (;;) {
2259 skb = skb_dequeue(&ar->wmi_mgmt_tx_queue);
2260 if (!skb)
2261 break;
2262
2263 ret = ath10k_wmi_mgmt_tx(ar, skb);
2264 if (ret) {
2265 ath10k_warn(ar, "failed to transmit management frame via WMI: %d\n",
2266 ret);
2267 ieee80211_free_txskb(ar->hw, skb);
2268 }
2269 }
2270 }
2271
2272 /************/
2273 /* Scanning */
2274 /************/
2275
2276 void __ath10k_scan_finish(struct ath10k *ar)
2277 {
2278 lockdep_assert_held(&ar->data_lock);
2279
2280 switch (ar->scan.state) {
2281 case ATH10K_SCAN_IDLE:
2282 break;
2283 case ATH10K_SCAN_RUNNING:
2284 if (ar->scan.is_roc)
2285 ieee80211_remain_on_channel_expired(ar->hw);
2286 case ATH10K_SCAN_ABORTING:
2287 if (!ar->scan.is_roc)
2288 ieee80211_scan_completed(ar->hw,
2289 (ar->scan.state ==
2290 ATH10K_SCAN_ABORTING));
2291 /* fall through */
2292 case ATH10K_SCAN_STARTING:
2293 ar->scan.state = ATH10K_SCAN_IDLE;
2294 ar->scan_channel = NULL;
2295 ath10k_offchan_tx_purge(ar);
2296 cancel_delayed_work(&ar->scan.timeout);
2297 complete_all(&ar->scan.completed);
2298 break;
2299 }
2300 }
2301
2302 void ath10k_scan_finish(struct ath10k *ar)
2303 {
2304 spin_lock_bh(&ar->data_lock);
2305 __ath10k_scan_finish(ar);
2306 spin_unlock_bh(&ar->data_lock);
2307 }
2308
2309 static int ath10k_scan_stop(struct ath10k *ar)
2310 {
2311 struct wmi_stop_scan_arg arg = {
2312 .req_id = 1, /* FIXME */
2313 .req_type = WMI_SCAN_STOP_ONE,
2314 .u.scan_id = ATH10K_SCAN_ID,
2315 };
2316 int ret;
2317
2318 lockdep_assert_held(&ar->conf_mutex);
2319
2320 ret = ath10k_wmi_stop_scan(ar, &arg);
2321 if (ret) {
2322 ath10k_warn(ar, "failed to stop wmi scan: %d\n", ret);
2323 goto out;
2324 }
2325
2326 ret = wait_for_completion_timeout(&ar->scan.completed, 3*HZ);
2327 if (ret == 0) {
2328 ath10k_warn(ar, "failed to receive scan abortion completion: timed out\n");
2329 ret = -ETIMEDOUT;
2330 } else if (ret > 0) {
2331 ret = 0;
2332 }
2333
2334 out:
2335 /* Scan state should be updated upon scan completion but in case
2336 * firmware fails to deliver the event (for whatever reason) it is
2337 * desired to clean up scan state anyway. Firmware may have just
2338 * dropped the scan completion event delivery due to transport pipe
2339 * being overflown with data and/or it can recover on its own before
2340 * next scan request is submitted.
2341 */
2342 spin_lock_bh(&ar->data_lock);
2343 if (ar->scan.state != ATH10K_SCAN_IDLE)
2344 __ath10k_scan_finish(ar);
2345 spin_unlock_bh(&ar->data_lock);
2346
2347 return ret;
2348 }
2349
2350 static void ath10k_scan_abort(struct ath10k *ar)
2351 {
2352 int ret;
2353
2354 lockdep_assert_held(&ar->conf_mutex);
2355
2356 spin_lock_bh(&ar->data_lock);
2357
2358 switch (ar->scan.state) {
2359 case ATH10K_SCAN_IDLE:
2360 /* This can happen if timeout worker kicked in and called
2361 * abortion while scan completion was being processed.
2362 */
2363 break;
2364 case ATH10K_SCAN_STARTING:
2365 case ATH10K_SCAN_ABORTING:
2366 ath10k_warn(ar, "refusing scan abortion due to invalid scan state: %s (%d)\n",
2367 ath10k_scan_state_str(ar->scan.state),
2368 ar->scan.state);
2369 break;
2370 case ATH10K_SCAN_RUNNING:
2371 ar->scan.state = ATH10K_SCAN_ABORTING;
2372 spin_unlock_bh(&ar->data_lock);
2373
2374 ret = ath10k_scan_stop(ar);
2375 if (ret)
2376 ath10k_warn(ar, "failed to abort scan: %d\n", ret);
2377
2378 spin_lock_bh(&ar->data_lock);
2379 break;
2380 }
2381
2382 spin_unlock_bh(&ar->data_lock);
2383 }
2384
2385 void ath10k_scan_timeout_work(struct work_struct *work)
2386 {
2387 struct ath10k *ar = container_of(work, struct ath10k,
2388 scan.timeout.work);
2389
2390 mutex_lock(&ar->conf_mutex);
2391 ath10k_scan_abort(ar);
2392 mutex_unlock(&ar->conf_mutex);
2393 }
2394
2395 static int ath10k_start_scan(struct ath10k *ar,
2396 const struct wmi_start_scan_arg *arg)
2397 {
2398 int ret;
2399
2400 lockdep_assert_held(&ar->conf_mutex);
2401
2402 ret = ath10k_wmi_start_scan(ar, arg);
2403 if (ret)
2404 return ret;
2405
2406 ret = wait_for_completion_timeout(&ar->scan.started, 1*HZ);
2407 if (ret == 0) {
2408 ret = ath10k_scan_stop(ar);
2409 if (ret)
2410 ath10k_warn(ar, "failed to stop scan: %d\n", ret);
2411
2412 return -ETIMEDOUT;
2413 }
2414
2415 /* Add a 200ms margin to account for event/command processing */
2416 ieee80211_queue_delayed_work(ar->hw, &ar->scan.timeout,
2417 msecs_to_jiffies(arg->max_scan_time+200));
2418 return 0;
2419 }
2420
2421 /**********************/
2422 /* mac80211 callbacks */
2423 /**********************/
2424
2425 static void ath10k_tx(struct ieee80211_hw *hw,
2426 struct ieee80211_tx_control *control,
2427 struct sk_buff *skb)
2428 {
2429 struct ath10k *ar = hw->priv;
2430 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
2431 struct ieee80211_vif *vif = info->control.vif;
2432 struct ieee80211_key_conf *key = info->control.hw_key;
2433 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
2434
2435 /* We should disable CCK RATE due to P2P */
2436 if (info->flags & IEEE80211_TX_CTL_NO_CCK_RATE)
2437 ath10k_dbg(ar, ATH10K_DBG_MAC, "IEEE80211_TX_CTL_NO_CCK_RATE\n");
2438
2439 ATH10K_SKB_CB(skb)->htt.is_offchan = false;
2440 ATH10K_SKB_CB(skb)->htt.tid = ath10k_tx_h_get_tid(hdr);
2441 ATH10K_SKB_CB(skb)->vdev_id = ath10k_tx_h_get_vdev_id(ar, vif);
2442
2443 /* it makes no sense to process injected frames like that */
2444 if (vif && vif->type != NL80211_IFTYPE_MONITOR) {
2445 ath10k_tx_h_nwifi(hw, skb);
2446 ath10k_tx_h_update_wep_key(vif, key, skb);
2447 ath10k_tx_h_add_p2p_noa_ie(ar, vif, skb);
2448 ath10k_tx_h_seq_no(vif, skb);
2449 }
2450
2451 if (info->flags & IEEE80211_TX_CTL_TX_OFFCHAN) {
2452 spin_lock_bh(&ar->data_lock);
2453 ATH10K_SKB_CB(skb)->htt.freq = ar->scan.roc_freq;
2454 ATH10K_SKB_CB(skb)->vdev_id = ar->scan.vdev_id;
2455 spin_unlock_bh(&ar->data_lock);
2456
2457 if (ath10k_mac_need_offchan_tx_work(ar)) {
2458 ATH10K_SKB_CB(skb)->htt.freq = 0;
2459 ATH10K_SKB_CB(skb)->htt.is_offchan = true;
2460
2461 ath10k_dbg(ar, ATH10K_DBG_MAC, "queued offchannel skb %p\n",
2462 skb);
2463
2464 skb_queue_tail(&ar->offchan_tx_queue, skb);
2465 ieee80211_queue_work(hw, &ar->offchan_tx_work);
2466 return;
2467 }
2468 }
2469
2470 ath10k_tx_htt(ar, skb);
2471 }
2472
2473 /* Must not be called with conf_mutex held as workers can use that also. */
2474 void ath10k_drain_tx(struct ath10k *ar)
2475 {
2476 /* make sure rcu-protected mac80211 tx path itself is drained */
2477 synchronize_net();
2478
2479 ath10k_offchan_tx_purge(ar);
2480 ath10k_mgmt_over_wmi_tx_purge(ar);
2481
2482 cancel_work_sync(&ar->offchan_tx_work);
2483 cancel_work_sync(&ar->wmi_mgmt_tx_work);
2484 }
2485
2486 void ath10k_halt(struct ath10k *ar)
2487 {
2488 struct ath10k_vif *arvif;
2489
2490 lockdep_assert_held(&ar->conf_mutex);
2491
2492 clear_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
2493 ar->filter_flags = 0;
2494 ar->monitor = false;
2495
2496 if (ar->monitor_started)
2497 ath10k_monitor_stop(ar);
2498
2499 ar->monitor_started = false;
2500
2501 ath10k_scan_finish(ar);
2502 ath10k_peer_cleanup_all(ar);
2503 ath10k_core_stop(ar);
2504 ath10k_hif_power_down(ar);
2505
2506 spin_lock_bh(&ar->data_lock);
2507 list_for_each_entry(arvif, &ar->arvifs, list)
2508 ath10k_mac_vif_beacon_cleanup(arvif);
2509 spin_unlock_bh(&ar->data_lock);
2510 }
2511
2512 static int ath10k_get_antenna(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant)
2513 {
2514 struct ath10k *ar = hw->priv;
2515
2516 mutex_lock(&ar->conf_mutex);
2517
2518 if (ar->cfg_tx_chainmask) {
2519 *tx_ant = ar->cfg_tx_chainmask;
2520 *rx_ant = ar->cfg_rx_chainmask;
2521 } else {
2522 *tx_ant = ar->supp_tx_chainmask;
2523 *rx_ant = ar->supp_rx_chainmask;
2524 }
2525
2526 mutex_unlock(&ar->conf_mutex);
2527
2528 return 0;
2529 }
2530
2531 static void ath10k_check_chain_mask(struct ath10k *ar, u32 cm, const char *dbg)
2532 {
2533 /* It is not clear that allowing gaps in chainmask
2534 * is helpful. Probably it will not do what user
2535 * is hoping for, so warn in that case.
2536 */
2537 if (cm == 15 || cm == 7 || cm == 3 || cm == 1 || cm == 0)
2538 return;
2539
2540 ath10k_warn(ar, "mac %s antenna chainmask may be invalid: 0x%x. Suggested values: 15, 7, 3, 1 or 0.\n",
2541 dbg, cm);
2542 }
2543
2544 static int __ath10k_set_antenna(struct ath10k *ar, u32 tx_ant, u32 rx_ant)
2545 {
2546 int ret;
2547
2548 lockdep_assert_held(&ar->conf_mutex);
2549
2550 ath10k_check_chain_mask(ar, tx_ant, "tx");
2551 ath10k_check_chain_mask(ar, rx_ant, "rx");
2552
2553 ar->cfg_tx_chainmask = tx_ant;
2554 ar->cfg_rx_chainmask = rx_ant;
2555
2556 if ((ar->state != ATH10K_STATE_ON) &&
2557 (ar->state != ATH10K_STATE_RESTARTED))
2558 return 0;
2559
2560 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->tx_chain_mask,
2561 tx_ant);
2562 if (ret) {
2563 ath10k_warn(ar, "failed to set tx-chainmask: %d, req 0x%x\n",
2564 ret, tx_ant);
2565 return ret;
2566 }
2567
2568 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->rx_chain_mask,
2569 rx_ant);
2570 if (ret) {
2571 ath10k_warn(ar, "failed to set rx-chainmask: %d, req 0x%x\n",
2572 ret, rx_ant);
2573 return ret;
2574 }
2575
2576 return 0;
2577 }
2578
2579 static int ath10k_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant)
2580 {
2581 struct ath10k *ar = hw->priv;
2582 int ret;
2583
2584 mutex_lock(&ar->conf_mutex);
2585 ret = __ath10k_set_antenna(ar, tx_ant, rx_ant);
2586 mutex_unlock(&ar->conf_mutex);
2587 return ret;
2588 }
2589
2590 static int ath10k_start(struct ieee80211_hw *hw)
2591 {
2592 struct ath10k *ar = hw->priv;
2593 int ret = 0;
2594
2595 /*
2596 * This makes sense only when restarting hw. It is harmless to call
2597 * uncoditionally. This is necessary to make sure no HTT/WMI tx
2598 * commands will be submitted while restarting.
2599 */
2600 ath10k_drain_tx(ar);
2601
2602 mutex_lock(&ar->conf_mutex);
2603
2604 switch (ar->state) {
2605 case ATH10K_STATE_OFF:
2606 ar->state = ATH10K_STATE_ON;
2607 break;
2608 case ATH10K_STATE_RESTARTING:
2609 ath10k_halt(ar);
2610 ar->state = ATH10K_STATE_RESTARTED;
2611 break;
2612 case ATH10K_STATE_ON:
2613 case ATH10K_STATE_RESTARTED:
2614 case ATH10K_STATE_WEDGED:
2615 WARN_ON(1);
2616 ret = -EINVAL;
2617 goto err;
2618 case ATH10K_STATE_UTF:
2619 ret = -EBUSY;
2620 goto err;
2621 }
2622
2623 ret = ath10k_hif_power_up(ar);
2624 if (ret) {
2625 ath10k_err(ar, "Could not init hif: %d\n", ret);
2626 goto err_off;
2627 }
2628
2629 ret = ath10k_core_start(ar, ATH10K_FIRMWARE_MODE_NORMAL);
2630 if (ret) {
2631 ath10k_err(ar, "Could not init core: %d\n", ret);
2632 goto err_power_down;
2633 }
2634
2635 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->pmf_qos, 1);
2636 if (ret) {
2637 ath10k_warn(ar, "failed to enable PMF QOS: %d\n", ret);
2638 goto err_core_stop;
2639 }
2640
2641 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->dynamic_bw, 1);
2642 if (ret) {
2643 ath10k_warn(ar, "failed to enable dynamic BW: %d\n", ret);
2644 goto err_core_stop;
2645 }
2646
2647 if (ar->cfg_tx_chainmask)
2648 __ath10k_set_antenna(ar, ar->cfg_tx_chainmask,
2649 ar->cfg_rx_chainmask);
2650
2651 /*
2652 * By default FW set ARP frames ac to voice (6). In that case ARP
2653 * exchange is not working properly for UAPSD enabled AP. ARP requests
2654 * which arrives with access category 0 are processed by network stack
2655 * and send back with access category 0, but FW changes access category
2656 * to 6. Set ARP frames access category to best effort (0) solves
2657 * this problem.
2658 */
2659
2660 ret = ath10k_wmi_pdev_set_param(ar,
2661 ar->wmi.pdev_param->arp_ac_override, 0);
2662 if (ret) {
2663 ath10k_warn(ar, "failed to set arp ac override parameter: %d\n",
2664 ret);
2665 goto err_core_stop;
2666 }
2667
2668 ar->num_started_vdevs = 0;
2669 ath10k_regd_update(ar);
2670
2671 ath10k_spectral_start(ar);
2672
2673 mutex_unlock(&ar->conf_mutex);
2674 return 0;
2675
2676 err_core_stop:
2677 ath10k_core_stop(ar);
2678
2679 err_power_down:
2680 ath10k_hif_power_down(ar);
2681
2682 err_off:
2683 ar->state = ATH10K_STATE_OFF;
2684
2685 err:
2686 mutex_unlock(&ar->conf_mutex);
2687 return ret;
2688 }
2689
2690 static void ath10k_stop(struct ieee80211_hw *hw)
2691 {
2692 struct ath10k *ar = hw->priv;
2693
2694 ath10k_drain_tx(ar);
2695
2696 mutex_lock(&ar->conf_mutex);
2697 if (ar->state != ATH10K_STATE_OFF) {
2698 ath10k_halt(ar);
2699 ar->state = ATH10K_STATE_OFF;
2700 }
2701 mutex_unlock(&ar->conf_mutex);
2702
2703 cancel_delayed_work_sync(&ar->scan.timeout);
2704 cancel_work_sync(&ar->restart_work);
2705 }
2706
2707 static int ath10k_config_ps(struct ath10k *ar)
2708 {
2709 struct ath10k_vif *arvif;
2710 int ret = 0;
2711
2712 lockdep_assert_held(&ar->conf_mutex);
2713
2714 list_for_each_entry(arvif, &ar->arvifs, list) {
2715 ret = ath10k_mac_vif_setup_ps(arvif);
2716 if (ret) {
2717 ath10k_warn(ar, "failed to setup powersave: %d\n", ret);
2718 break;
2719 }
2720 }
2721
2722 return ret;
2723 }
2724
2725 static const char *chandef_get_width(enum nl80211_chan_width width)
2726 {
2727 switch (width) {
2728 case NL80211_CHAN_WIDTH_20_NOHT:
2729 return "20 (noht)";
2730 case NL80211_CHAN_WIDTH_20:
2731 return "20";
2732 case NL80211_CHAN_WIDTH_40:
2733 return "40";
2734 case NL80211_CHAN_WIDTH_80:
2735 return "80";
2736 case NL80211_CHAN_WIDTH_80P80:
2737 return "80+80";
2738 case NL80211_CHAN_WIDTH_160:
2739 return "160";
2740 case NL80211_CHAN_WIDTH_5:
2741 return "5";
2742 case NL80211_CHAN_WIDTH_10:
2743 return "10";
2744 }
2745 return "?";
2746 }
2747
2748 static void ath10k_config_chan(struct ath10k *ar)
2749 {
2750 struct ath10k_vif *arvif;
2751 int ret;
2752
2753 lockdep_assert_held(&ar->conf_mutex);
2754
2755 ath10k_dbg(ar, ATH10K_DBG_MAC,
2756 "mac config channel to %dMHz (cf1 %dMHz cf2 %dMHz width %s)\n",
2757 ar->chandef.chan->center_freq,
2758 ar->chandef.center_freq1,
2759 ar->chandef.center_freq2,
2760 chandef_get_width(ar->chandef.width));
2761
2762 /* First stop monitor interface. Some FW versions crash if there's a
2763 * lone monitor interface. */
2764 if (ar->monitor_started)
2765 ath10k_monitor_stop(ar);
2766
2767 list_for_each_entry(arvif, &ar->arvifs, list) {
2768 if (!arvif->is_started)
2769 continue;
2770
2771 if (!arvif->is_up)
2772 continue;
2773
2774 if (arvif->vdev_type == WMI_VDEV_TYPE_MONITOR)
2775 continue;
2776
2777 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id);
2778 if (ret) {
2779 ath10k_warn(ar, "failed to down vdev %d: %d\n",
2780 arvif->vdev_id, ret);
2781 continue;
2782 }
2783 }
2784
2785 /* all vdevs are downed now - attempt to restart and re-up them */
2786
2787 list_for_each_entry(arvif, &ar->arvifs, list) {
2788 if (!arvif->is_started)
2789 continue;
2790
2791 if (arvif->vdev_type == WMI_VDEV_TYPE_MONITOR)
2792 continue;
2793
2794 ret = ath10k_vdev_restart(arvif);
2795 if (ret) {
2796 ath10k_warn(ar, "failed to restart vdev %d: %d\n",
2797 arvif->vdev_id, ret);
2798 continue;
2799 }
2800
2801 if (!arvif->is_up)
2802 continue;
2803
2804 ret = ath10k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid,
2805 arvif->bssid);
2806 if (ret) {
2807 ath10k_warn(ar, "failed to bring vdev up %d: %d\n",
2808 arvif->vdev_id, ret);
2809 continue;
2810 }
2811 }
2812
2813 ath10k_monitor_recalc(ar);
2814 }
2815
2816 static int ath10k_mac_txpower_setup(struct ath10k *ar, int txpower)
2817 {
2818 int ret;
2819 u32 param;
2820
2821 lockdep_assert_held(&ar->conf_mutex);
2822
2823 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac txpower %d\n", txpower);
2824
2825 param = ar->wmi.pdev_param->txpower_limit2g;
2826 ret = ath10k_wmi_pdev_set_param(ar, param, txpower * 2);
2827 if (ret) {
2828 ath10k_warn(ar, "failed to set 2g txpower %d: %d\n",
2829 txpower, ret);
2830 return ret;
2831 }
2832
2833 param = ar->wmi.pdev_param->txpower_limit5g;
2834 ret = ath10k_wmi_pdev_set_param(ar, param, txpower * 2);
2835 if (ret) {
2836 ath10k_warn(ar, "failed to set 5g txpower %d: %d\n",
2837 txpower, ret);
2838 return ret;
2839 }
2840
2841 return 0;
2842 }
2843
2844 static int ath10k_mac_txpower_recalc(struct ath10k *ar)
2845 {
2846 struct ath10k_vif *arvif;
2847 int ret, txpower = -1;
2848
2849 lockdep_assert_held(&ar->conf_mutex);
2850
2851 list_for_each_entry(arvif, &ar->arvifs, list) {
2852 WARN_ON(arvif->txpower < 0);
2853
2854 if (txpower == -1)
2855 txpower = arvif->txpower;
2856 else
2857 txpower = min(txpower, arvif->txpower);
2858 }
2859
2860 if (WARN_ON(txpower == -1))
2861 return -EINVAL;
2862
2863 ret = ath10k_mac_txpower_setup(ar, txpower);
2864 if (ret) {
2865 ath10k_warn(ar, "failed to setup tx power %d: %d\n",
2866 txpower, ret);
2867 return ret;
2868 }
2869
2870 return 0;
2871 }
2872
2873 static int ath10k_config(struct ieee80211_hw *hw, u32 changed)
2874 {
2875 struct ath10k *ar = hw->priv;
2876 struct ieee80211_conf *conf = &hw->conf;
2877 int ret = 0;
2878
2879 mutex_lock(&ar->conf_mutex);
2880
2881 if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
2882 ath10k_dbg(ar, ATH10K_DBG_MAC,
2883 "mac config channel %dMHz flags 0x%x radar %d\n",
2884 conf->chandef.chan->center_freq,
2885 conf->chandef.chan->flags,
2886 conf->radar_enabled);
2887
2888 spin_lock_bh(&ar->data_lock);
2889 ar->rx_channel = conf->chandef.chan;
2890 spin_unlock_bh(&ar->data_lock);
2891
2892 ar->radar_enabled = conf->radar_enabled;
2893 ath10k_recalc_radar_detection(ar);
2894
2895 if (!cfg80211_chandef_identical(&ar->chandef, &conf->chandef)) {
2896 ar->chandef = conf->chandef;
2897 ath10k_config_chan(ar);
2898 }
2899 }
2900
2901 if (changed & IEEE80211_CONF_CHANGE_PS)
2902 ath10k_config_ps(ar);
2903
2904 if (changed & IEEE80211_CONF_CHANGE_MONITOR) {
2905 ar->monitor = conf->flags & IEEE80211_CONF_MONITOR;
2906 ret = ath10k_monitor_recalc(ar);
2907 if (ret)
2908 ath10k_warn(ar, "failed to recalc monitor: %d\n", ret);
2909 }
2910
2911 mutex_unlock(&ar->conf_mutex);
2912 return ret;
2913 }
2914
2915 static u32 get_nss_from_chainmask(u16 chain_mask)
2916 {
2917 if ((chain_mask & 0x15) == 0x15)
2918 return 4;
2919 else if ((chain_mask & 0x7) == 0x7)
2920 return 3;
2921 else if ((chain_mask & 0x3) == 0x3)
2922 return 2;
2923 return 1;
2924 }
2925
2926 /*
2927 * TODO:
2928 * Figure out how to handle WMI_VDEV_SUBTYPE_P2P_DEVICE,
2929 * because we will send mgmt frames without CCK. This requirement
2930 * for P2P_FIND/GO_NEG should be handled by checking CCK flag
2931 * in the TX packet.
2932 */
2933 static int ath10k_add_interface(struct ieee80211_hw *hw,
2934 struct ieee80211_vif *vif)
2935 {
2936 struct ath10k *ar = hw->priv;
2937 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2938 enum wmi_sta_powersave_param param;
2939 int ret = 0;
2940 u32 value;
2941 int bit;
2942 u32 vdev_param;
2943
2944 mutex_lock(&ar->conf_mutex);
2945
2946 memset(arvif, 0, sizeof(*arvif));
2947
2948 arvif->ar = ar;
2949 arvif->vif = vif;
2950
2951 INIT_WORK(&arvif->wep_key_work, ath10k_tx_wep_key_work);
2952 INIT_LIST_HEAD(&arvif->list);
2953
2954 if (ar->free_vdev_map == 0) {
2955 ath10k_warn(ar, "Free vdev map is empty, no more interfaces allowed.\n");
2956 ret = -EBUSY;
2957 goto err;
2958 }
2959 bit = __ffs64(ar->free_vdev_map);
2960
2961 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac create vdev %i map %llx\n",
2962 bit, ar->free_vdev_map);
2963
2964 arvif->vdev_id = bit;
2965 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_NONE;
2966
2967 if (ar->p2p)
2968 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_P2P_DEVICE;
2969
2970 switch (vif->type) {
2971 case NL80211_IFTYPE_UNSPECIFIED:
2972 case NL80211_IFTYPE_STATION:
2973 arvif->vdev_type = WMI_VDEV_TYPE_STA;
2974 if (vif->p2p)
2975 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_P2P_CLIENT;
2976 break;
2977 case NL80211_IFTYPE_ADHOC:
2978 arvif->vdev_type = WMI_VDEV_TYPE_IBSS;
2979 break;
2980 case NL80211_IFTYPE_AP:
2981 arvif->vdev_type = WMI_VDEV_TYPE_AP;
2982
2983 if (vif->p2p)
2984 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_P2P_GO;
2985 break;
2986 case NL80211_IFTYPE_MONITOR:
2987 arvif->vdev_type = WMI_VDEV_TYPE_MONITOR;
2988 break;
2989 default:
2990 WARN_ON(1);
2991 break;
2992 }
2993
2994 /* Some firmware revisions don't wait for beacon tx completion before
2995 * sending another SWBA event. This could lead to hardware using old
2996 * (freed) beacon data in some cases, e.g. tx credit starvation
2997 * combined with missed TBTT. This is very very rare.
2998 *
2999 * On non-IOMMU-enabled hosts this could be a possible security issue
3000 * because hw could beacon some random data on the air. On
3001 * IOMMU-enabled hosts DMAR faults would occur in most cases and target
3002 * device would crash.
3003 *
3004 * Since there are no beacon tx completions (implicit nor explicit)
3005 * propagated to host the only workaround for this is to allocate a
3006 * DMA-coherent buffer for a lifetime of a vif and use it for all
3007 * beacon tx commands. Worst case for this approach is some beacons may
3008 * become corrupted, e.g. have garbled IEs or out-of-date TIM bitmap.
3009 */
3010 if (vif->type == NL80211_IFTYPE_ADHOC ||
3011 vif->type == NL80211_IFTYPE_AP) {
3012 arvif->beacon_buf = dma_zalloc_coherent(ar->dev,
3013 IEEE80211_MAX_FRAME_LEN,
3014 &arvif->beacon_paddr,
3015 GFP_ATOMIC);
3016 if (!arvif->beacon_buf) {
3017 ret = -ENOMEM;
3018 ath10k_warn(ar, "failed to allocate beacon buffer: %d\n",
3019 ret);
3020 goto err;
3021 }
3022 }
3023
3024 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev create %d (add interface) type %d subtype %d bcnmode %s\n",
3025 arvif->vdev_id, arvif->vdev_type, arvif->vdev_subtype,
3026 arvif->beacon_buf ? "single-buf" : "per-skb");
3027
3028 ret = ath10k_wmi_vdev_create(ar, arvif->vdev_id, arvif->vdev_type,
3029 arvif->vdev_subtype, vif->addr);
3030 if (ret) {
3031 ath10k_warn(ar, "failed to create WMI vdev %i: %d\n",
3032 arvif->vdev_id, ret);
3033 goto err;
3034 }
3035
3036 ar->free_vdev_map &= ~(1LL << arvif->vdev_id);
3037 list_add(&arvif->list, &ar->arvifs);
3038
3039 vdev_param = ar->wmi.vdev_param->def_keyid;
3040 ret = ath10k_wmi_vdev_set_param(ar, 0, vdev_param,
3041 arvif->def_wep_key_idx);
3042 if (ret) {
3043 ath10k_warn(ar, "failed to set vdev %i default key id: %d\n",
3044 arvif->vdev_id, ret);
3045 goto err_vdev_delete;
3046 }
3047
3048 vdev_param = ar->wmi.vdev_param->tx_encap_type;
3049 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
3050 ATH10K_HW_TXRX_NATIVE_WIFI);
3051 /* 10.X firmware does not support this VDEV parameter. Do not warn */
3052 if (ret && ret != -EOPNOTSUPP) {
3053 ath10k_warn(ar, "failed to set vdev %i TX encapsulation: %d\n",
3054 arvif->vdev_id, ret);
3055 goto err_vdev_delete;
3056 }
3057
3058 if (ar->cfg_tx_chainmask) {
3059 u16 nss = get_nss_from_chainmask(ar->cfg_tx_chainmask);
3060
3061 vdev_param = ar->wmi.vdev_param->nss;
3062 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
3063 nss);
3064 if (ret) {
3065 ath10k_warn(ar, "failed to set vdev %i chainmask 0x%x, nss %i: %d\n",
3066 arvif->vdev_id, ar->cfg_tx_chainmask, nss,
3067 ret);
3068 goto err_vdev_delete;
3069 }
3070 }
3071
3072 if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
3073 ret = ath10k_peer_create(ar, arvif->vdev_id, vif->addr);
3074 if (ret) {
3075 ath10k_warn(ar, "failed to create vdev %i peer for AP: %d\n",
3076 arvif->vdev_id, ret);
3077 goto err_vdev_delete;
3078 }
3079
3080 ret = ath10k_mac_set_kickout(arvif);
3081 if (ret) {
3082 ath10k_warn(ar, "failed to set vdev %i kickout parameters: %d\n",
3083 arvif->vdev_id, ret);
3084 goto err_peer_delete;
3085 }
3086 }
3087
3088 if (arvif->vdev_type == WMI_VDEV_TYPE_STA) {
3089 param = WMI_STA_PS_PARAM_RX_WAKE_POLICY;
3090 value = WMI_STA_PS_RX_WAKE_POLICY_WAKE;
3091 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
3092 param, value);
3093 if (ret) {
3094 ath10k_warn(ar, "failed to set vdev %i RX wake policy: %d\n",
3095 arvif->vdev_id, ret);
3096 goto err_peer_delete;
3097 }
3098
3099 ret = ath10k_mac_vif_recalc_ps_wake_threshold(arvif);
3100 if (ret) {
3101 ath10k_warn(ar, "failed to recalc ps wake threshold on vdev %i: %d\n",
3102 arvif->vdev_id, ret);
3103 goto err_peer_delete;
3104 }
3105
3106 ret = ath10k_mac_vif_recalc_ps_poll_count(arvif);
3107 if (ret) {
3108 ath10k_warn(ar, "failed to recalc ps poll count on vdev %i: %d\n",
3109 arvif->vdev_id, ret);
3110 goto err_peer_delete;
3111 }
3112 }
3113
3114 ret = ath10k_mac_set_rts(arvif, ar->hw->wiphy->rts_threshold);
3115 if (ret) {
3116 ath10k_warn(ar, "failed to set rts threshold for vdev %d: %d\n",
3117 arvif->vdev_id, ret);
3118 goto err_peer_delete;
3119 }
3120
3121 ret = ath10k_mac_set_frag(arvif, ar->hw->wiphy->frag_threshold);
3122 if (ret) {
3123 ath10k_warn(ar, "failed to set frag threshold for vdev %d: %d\n",
3124 arvif->vdev_id, ret);
3125 goto err_peer_delete;
3126 }
3127
3128 arvif->txpower = vif->bss_conf.txpower;
3129 ret = ath10k_mac_txpower_recalc(ar);
3130 if (ret) {
3131 ath10k_warn(ar, "failed to recalc tx power: %d\n", ret);
3132 goto err_peer_delete;
3133 }
3134
3135 mutex_unlock(&ar->conf_mutex);
3136 return 0;
3137
3138 err_peer_delete:
3139 if (arvif->vdev_type == WMI_VDEV_TYPE_AP)
3140 ath10k_wmi_peer_delete(ar, arvif->vdev_id, vif->addr);
3141
3142 err_vdev_delete:
3143 ath10k_wmi_vdev_delete(ar, arvif->vdev_id);
3144 ar->free_vdev_map |= 1LL << arvif->vdev_id;
3145 list_del(&arvif->list);
3146
3147 err:
3148 if (arvif->beacon_buf) {
3149 dma_free_coherent(ar->dev, IEEE80211_MAX_FRAME_LEN,
3150 arvif->beacon_buf, arvif->beacon_paddr);
3151 arvif->beacon_buf = NULL;
3152 }
3153
3154 mutex_unlock(&ar->conf_mutex);
3155
3156 return ret;
3157 }
3158
3159 static void ath10k_remove_interface(struct ieee80211_hw *hw,
3160 struct ieee80211_vif *vif)
3161 {
3162 struct ath10k *ar = hw->priv;
3163 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3164 int ret;
3165
3166 cancel_work_sync(&arvif->wep_key_work);
3167
3168 mutex_lock(&ar->conf_mutex);
3169
3170 spin_lock_bh(&ar->data_lock);
3171 ath10k_mac_vif_beacon_cleanup(arvif);
3172 spin_unlock_bh(&ar->data_lock);
3173
3174 ret = ath10k_spectral_vif_stop(arvif);
3175 if (ret)
3176 ath10k_warn(ar, "failed to stop spectral for vdev %i: %d\n",
3177 arvif->vdev_id, ret);
3178
3179 ar->free_vdev_map |= 1LL << arvif->vdev_id;
3180 list_del(&arvif->list);
3181
3182 if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
3183 ret = ath10k_peer_delete(arvif->ar, arvif->vdev_id, vif->addr);
3184 if (ret)
3185 ath10k_warn(ar, "failed to remove peer for AP vdev %i: %d\n",
3186 arvif->vdev_id, ret);
3187
3188 kfree(arvif->u.ap.noa_data);
3189 }
3190
3191 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %i delete (remove interface)\n",
3192 arvif->vdev_id);
3193
3194 ret = ath10k_wmi_vdev_delete(ar, arvif->vdev_id);
3195 if (ret)
3196 ath10k_warn(ar, "failed to delete WMI vdev %i: %d\n",
3197 arvif->vdev_id, ret);
3198
3199 ath10k_peer_cleanup(ar, arvif->vdev_id);
3200
3201 mutex_unlock(&ar->conf_mutex);
3202 }
3203
3204 /*
3205 * FIXME: Has to be verified.
3206 */
3207 #define SUPPORTED_FILTERS \
3208 (FIF_PROMISC_IN_BSS | \
3209 FIF_ALLMULTI | \
3210 FIF_CONTROL | \
3211 FIF_PSPOLL | \
3212 FIF_OTHER_BSS | \
3213 FIF_BCN_PRBRESP_PROMISC | \
3214 FIF_PROBE_REQ | \
3215 FIF_FCSFAIL)
3216
3217 static void ath10k_configure_filter(struct ieee80211_hw *hw,
3218 unsigned int changed_flags,
3219 unsigned int *total_flags,
3220 u64 multicast)
3221 {
3222 struct ath10k *ar = hw->priv;
3223 int ret;
3224
3225 mutex_lock(&ar->conf_mutex);
3226
3227 changed_flags &= SUPPORTED_FILTERS;
3228 *total_flags &= SUPPORTED_FILTERS;
3229 ar->filter_flags = *total_flags;
3230
3231 ret = ath10k_monitor_recalc(ar);
3232 if (ret)
3233 ath10k_warn(ar, "failed to recalc montior: %d\n", ret);
3234
3235 mutex_unlock(&ar->conf_mutex);
3236 }
3237
3238 static void ath10k_bss_info_changed(struct ieee80211_hw *hw,
3239 struct ieee80211_vif *vif,
3240 struct ieee80211_bss_conf *info,
3241 u32 changed)
3242 {
3243 struct ath10k *ar = hw->priv;
3244 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3245 int ret = 0;
3246 u32 vdev_param, pdev_param, slottime, preamble;
3247
3248 mutex_lock(&ar->conf_mutex);
3249
3250 if (changed & BSS_CHANGED_IBSS)
3251 ath10k_control_ibss(arvif, info, vif->addr);
3252
3253 if (changed & BSS_CHANGED_BEACON_INT) {
3254 arvif->beacon_interval = info->beacon_int;
3255 vdev_param = ar->wmi.vdev_param->beacon_interval;
3256 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
3257 arvif->beacon_interval);
3258 ath10k_dbg(ar, ATH10K_DBG_MAC,
3259 "mac vdev %d beacon_interval %d\n",
3260 arvif->vdev_id, arvif->beacon_interval);
3261
3262 if (ret)
3263 ath10k_warn(ar, "failed to set beacon interval for vdev %d: %i\n",
3264 arvif->vdev_id, ret);
3265 }
3266
3267 if (changed & BSS_CHANGED_BEACON) {
3268 ath10k_dbg(ar, ATH10K_DBG_MAC,
3269 "vdev %d set beacon tx mode to staggered\n",
3270 arvif->vdev_id);
3271
3272 pdev_param = ar->wmi.pdev_param->beacon_tx_mode;
3273 ret = ath10k_wmi_pdev_set_param(ar, pdev_param,
3274 WMI_BEACON_STAGGERED_MODE);
3275 if (ret)
3276 ath10k_warn(ar, "failed to set beacon mode for vdev %d: %i\n",
3277 arvif->vdev_id, ret);
3278 }
3279
3280 if (changed & BSS_CHANGED_BEACON_INFO) {
3281 arvif->dtim_period = info->dtim_period;
3282
3283 ath10k_dbg(ar, ATH10K_DBG_MAC,
3284 "mac vdev %d dtim_period %d\n",
3285 arvif->vdev_id, arvif->dtim_period);
3286
3287 vdev_param = ar->wmi.vdev_param->dtim_period;
3288 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
3289 arvif->dtim_period);
3290 if (ret)
3291 ath10k_warn(ar, "failed to set dtim period for vdev %d: %i\n",
3292 arvif->vdev_id, ret);
3293 }
3294
3295 if (changed & BSS_CHANGED_SSID &&
3296 vif->type == NL80211_IFTYPE_AP) {
3297 arvif->u.ap.ssid_len = info->ssid_len;
3298 if (info->ssid_len)
3299 memcpy(arvif->u.ap.ssid, info->ssid, info->ssid_len);
3300 arvif->u.ap.hidden_ssid = info->hidden_ssid;
3301 }
3302
3303 if (changed & BSS_CHANGED_BSSID && !is_zero_ether_addr(info->bssid))
3304 ether_addr_copy(arvif->bssid, info->bssid);
3305
3306 if (changed & BSS_CHANGED_BEACON_ENABLED)
3307 ath10k_control_beaconing(arvif, info);
3308
3309 if (changed & BSS_CHANGED_ERP_CTS_PROT) {
3310 arvif->use_cts_prot = info->use_cts_prot;
3311 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d cts_prot %d\n",
3312 arvif->vdev_id, info->use_cts_prot);
3313
3314 ret = ath10k_recalc_rtscts_prot(arvif);
3315 if (ret)
3316 ath10k_warn(ar, "failed to recalculate rts/cts prot for vdev %d: %d\n",
3317 arvif->vdev_id, ret);
3318 }
3319
3320 if (changed & BSS_CHANGED_ERP_SLOT) {
3321 if (info->use_short_slot)
3322 slottime = WMI_VDEV_SLOT_TIME_SHORT; /* 9us */
3323
3324 else
3325 slottime = WMI_VDEV_SLOT_TIME_LONG; /* 20us */
3326
3327 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d slot_time %d\n",
3328 arvif->vdev_id, slottime);
3329
3330 vdev_param = ar->wmi.vdev_param->slot_time;
3331 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
3332 slottime);
3333 if (ret)
3334 ath10k_warn(ar, "failed to set erp slot for vdev %d: %i\n",
3335 arvif->vdev_id, ret);
3336 }
3337
3338 if (changed & BSS_CHANGED_ERP_PREAMBLE) {
3339 if (info->use_short_preamble)
3340 preamble = WMI_VDEV_PREAMBLE_SHORT;
3341 else
3342 preamble = WMI_VDEV_PREAMBLE_LONG;
3343
3344 ath10k_dbg(ar, ATH10K_DBG_MAC,
3345 "mac vdev %d preamble %dn",
3346 arvif->vdev_id, preamble);
3347
3348 vdev_param = ar->wmi.vdev_param->preamble;
3349 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
3350 preamble);
3351 if (ret)
3352 ath10k_warn(ar, "failed to set preamble for vdev %d: %i\n",
3353 arvif->vdev_id, ret);
3354 }
3355
3356 if (changed & BSS_CHANGED_ASSOC) {
3357 if (info->assoc) {
3358 /* Workaround: Make sure monitor vdev is not running
3359 * when associating to prevent some firmware revisions
3360 * (e.g. 10.1 and 10.2) from crashing.
3361 */
3362 if (ar->monitor_started)
3363 ath10k_monitor_stop(ar);
3364 ath10k_bss_assoc(hw, vif, info);
3365 ath10k_monitor_recalc(ar);
3366 } else {
3367 ath10k_bss_disassoc(hw, vif);
3368 }
3369 }
3370
3371 if (changed & BSS_CHANGED_TXPOWER) {
3372 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev_id %i txpower %d\n",
3373 arvif->vdev_id, info->txpower);
3374
3375 arvif->txpower = info->txpower;
3376 ret = ath10k_mac_txpower_recalc(ar);
3377 if (ret)
3378 ath10k_warn(ar, "failed to recalc tx power: %d\n", ret);
3379 }
3380
3381 mutex_unlock(&ar->conf_mutex);
3382 }
3383
3384 static int ath10k_hw_scan(struct ieee80211_hw *hw,
3385 struct ieee80211_vif *vif,
3386 struct ieee80211_scan_request *hw_req)
3387 {
3388 struct ath10k *ar = hw->priv;
3389 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3390 struct cfg80211_scan_request *req = &hw_req->req;
3391 struct wmi_start_scan_arg arg;
3392 int ret = 0;
3393 int i;
3394
3395 mutex_lock(&ar->conf_mutex);
3396
3397 spin_lock_bh(&ar->data_lock);
3398 switch (ar->scan.state) {
3399 case ATH10K_SCAN_IDLE:
3400 reinit_completion(&ar->scan.started);
3401 reinit_completion(&ar->scan.completed);
3402 ar->scan.state = ATH10K_SCAN_STARTING;
3403 ar->scan.is_roc = false;
3404 ar->scan.vdev_id = arvif->vdev_id;
3405 ret = 0;
3406 break;
3407 case ATH10K_SCAN_STARTING:
3408 case ATH10K_SCAN_RUNNING:
3409 case ATH10K_SCAN_ABORTING:
3410 ret = -EBUSY;
3411 break;
3412 }
3413 spin_unlock_bh(&ar->data_lock);
3414
3415 if (ret)
3416 goto exit;
3417
3418 memset(&arg, 0, sizeof(arg));
3419 ath10k_wmi_start_scan_init(ar, &arg);
3420 arg.vdev_id = arvif->vdev_id;
3421 arg.scan_id = ATH10K_SCAN_ID;
3422
3423 if (!req->no_cck)
3424 arg.scan_ctrl_flags |= WMI_SCAN_ADD_CCK_RATES;
3425
3426 if (req->ie_len) {
3427 arg.ie_len = req->ie_len;
3428 memcpy(arg.ie, req->ie, arg.ie_len);
3429 }
3430
3431 if (req->n_ssids) {
3432 arg.n_ssids = req->n_ssids;
3433 for (i = 0; i < arg.n_ssids; i++) {
3434 arg.ssids[i].len = req->ssids[i].ssid_len;
3435 arg.ssids[i].ssid = req->ssids[i].ssid;
3436 }
3437 } else {
3438 arg.scan_ctrl_flags |= WMI_SCAN_FLAG_PASSIVE;
3439 }
3440
3441 if (req->n_channels) {
3442 arg.n_channels = req->n_channels;
3443 for (i = 0; i < arg.n_channels; i++)
3444 arg.channels[i] = req->channels[i]->center_freq;
3445 }
3446
3447 ret = ath10k_start_scan(ar, &arg);
3448 if (ret) {
3449 ath10k_warn(ar, "failed to start hw scan: %d\n", ret);
3450 spin_lock_bh(&ar->data_lock);
3451 ar->scan.state = ATH10K_SCAN_IDLE;
3452 spin_unlock_bh(&ar->data_lock);
3453 }
3454
3455 exit:
3456 mutex_unlock(&ar->conf_mutex);
3457 return ret;
3458 }
3459
3460 static void ath10k_cancel_hw_scan(struct ieee80211_hw *hw,
3461 struct ieee80211_vif *vif)
3462 {
3463 struct ath10k *ar = hw->priv;
3464
3465 mutex_lock(&ar->conf_mutex);
3466 ath10k_scan_abort(ar);
3467 mutex_unlock(&ar->conf_mutex);
3468
3469 cancel_delayed_work_sync(&ar->scan.timeout);
3470 }
3471
3472 static void ath10k_set_key_h_def_keyidx(struct ath10k *ar,
3473 struct ath10k_vif *arvif,
3474 enum set_key_cmd cmd,
3475 struct ieee80211_key_conf *key)
3476 {
3477 u32 vdev_param = arvif->ar->wmi.vdev_param->def_keyid;
3478 int ret;
3479
3480 /* 10.1 firmware branch requires default key index to be set to group
3481 * key index after installing it. Otherwise FW/HW Txes corrupted
3482 * frames with multi-vif APs. This is not required for main firmware
3483 * branch (e.g. 636).
3484 *
3485 * FIXME: This has been tested only in AP. It remains unknown if this
3486 * is required for multi-vif STA interfaces on 10.1 */
3487
3488 if (arvif->vdev_type != WMI_VDEV_TYPE_AP)
3489 return;
3490
3491 if (key->cipher == WLAN_CIPHER_SUITE_WEP40)
3492 return;
3493
3494 if (key->cipher == WLAN_CIPHER_SUITE_WEP104)
3495 return;
3496
3497 if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE)
3498 return;
3499
3500 if (cmd != SET_KEY)
3501 return;
3502
3503 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
3504 key->keyidx);
3505 if (ret)
3506 ath10k_warn(ar, "failed to set vdev %i group key as default key: %d\n",
3507 arvif->vdev_id, ret);
3508 }
3509
3510 static int ath10k_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
3511 struct ieee80211_vif *vif, struct ieee80211_sta *sta,
3512 struct ieee80211_key_conf *key)
3513 {
3514 struct ath10k *ar = hw->priv;
3515 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3516 struct ath10k_peer *peer;
3517 const u8 *peer_addr;
3518 bool is_wep = key->cipher == WLAN_CIPHER_SUITE_WEP40 ||
3519 key->cipher == WLAN_CIPHER_SUITE_WEP104;
3520 int ret = 0;
3521
3522 if (key->keyidx > WMI_MAX_KEY_INDEX)
3523 return -ENOSPC;
3524
3525 mutex_lock(&ar->conf_mutex);
3526
3527 if (sta)
3528 peer_addr = sta->addr;
3529 else if (arvif->vdev_type == WMI_VDEV_TYPE_STA)
3530 peer_addr = vif->bss_conf.bssid;
3531 else
3532 peer_addr = vif->addr;
3533
3534 key->hw_key_idx = key->keyidx;
3535
3536 /* the peer should not disappear in mid-way (unless FW goes awry) since
3537 * we already hold conf_mutex. we just make sure its there now. */
3538 spin_lock_bh(&ar->data_lock);
3539 peer = ath10k_peer_find(ar, arvif->vdev_id, peer_addr);
3540 spin_unlock_bh(&ar->data_lock);
3541
3542 if (!peer) {
3543 if (cmd == SET_KEY) {
3544 ath10k_warn(ar, "failed to install key for non-existent peer %pM\n",
3545 peer_addr);
3546 ret = -EOPNOTSUPP;
3547 goto exit;
3548 } else {
3549 /* if the peer doesn't exist there is no key to disable
3550 * anymore */
3551 goto exit;
3552 }
3553 }
3554
3555 if (is_wep) {
3556 if (cmd == SET_KEY)
3557 arvif->wep_keys[key->keyidx] = key;
3558 else
3559 arvif->wep_keys[key->keyidx] = NULL;
3560
3561 if (cmd == DISABLE_KEY)
3562 ath10k_clear_vdev_key(arvif, key);
3563 }
3564
3565 ret = ath10k_install_key(arvif, key, cmd, peer_addr);
3566 if (ret) {
3567 ath10k_warn(ar, "failed to install key for vdev %i peer %pM: %d\n",
3568 arvif->vdev_id, peer_addr, ret);
3569 goto exit;
3570 }
3571
3572 ath10k_set_key_h_def_keyidx(ar, arvif, cmd, key);
3573
3574 spin_lock_bh(&ar->data_lock);
3575 peer = ath10k_peer_find(ar, arvif->vdev_id, peer_addr);
3576 if (peer && cmd == SET_KEY)
3577 peer->keys[key->keyidx] = key;
3578 else if (peer && cmd == DISABLE_KEY)
3579 peer->keys[key->keyidx] = NULL;
3580 else if (peer == NULL)
3581 /* impossible unless FW goes crazy */
3582 ath10k_warn(ar, "Peer %pM disappeared!\n", peer_addr);
3583 spin_unlock_bh(&ar->data_lock);
3584
3585 exit:
3586 mutex_unlock(&ar->conf_mutex);
3587 return ret;
3588 }
3589
3590 static void ath10k_sta_rc_update_wk(struct work_struct *wk)
3591 {
3592 struct ath10k *ar;
3593 struct ath10k_vif *arvif;
3594 struct ath10k_sta *arsta;
3595 struct ieee80211_sta *sta;
3596 u32 changed, bw, nss, smps;
3597 int err;
3598
3599 arsta = container_of(wk, struct ath10k_sta, update_wk);
3600 sta = container_of((void *)arsta, struct ieee80211_sta, drv_priv);
3601 arvif = arsta->arvif;
3602 ar = arvif->ar;
3603
3604 spin_lock_bh(&ar->data_lock);
3605
3606 changed = arsta->changed;
3607 arsta->changed = 0;
3608
3609 bw = arsta->bw;
3610 nss = arsta->nss;
3611 smps = arsta->smps;
3612
3613 spin_unlock_bh(&ar->data_lock);
3614
3615 mutex_lock(&ar->conf_mutex);
3616
3617 if (changed & IEEE80211_RC_BW_CHANGED) {
3618 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM peer bw %d\n",
3619 sta->addr, bw);
3620
3621 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
3622 WMI_PEER_CHAN_WIDTH, bw);
3623 if (err)
3624 ath10k_warn(ar, "failed to update STA %pM peer bw %d: %d\n",
3625 sta->addr, bw, err);
3626 }
3627
3628 if (changed & IEEE80211_RC_NSS_CHANGED) {
3629 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM nss %d\n",
3630 sta->addr, nss);
3631
3632 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
3633 WMI_PEER_NSS, nss);
3634 if (err)
3635 ath10k_warn(ar, "failed to update STA %pM nss %d: %d\n",
3636 sta->addr, nss, err);
3637 }
3638
3639 if (changed & IEEE80211_RC_SMPS_CHANGED) {
3640 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM smps %d\n",
3641 sta->addr, smps);
3642
3643 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
3644 WMI_PEER_SMPS_STATE, smps);
3645 if (err)
3646 ath10k_warn(ar, "failed to update STA %pM smps %d: %d\n",
3647 sta->addr, smps, err);
3648 }
3649
3650 if (changed & IEEE80211_RC_SUPP_RATES_CHANGED) {
3651 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM supp rates\n",
3652 sta->addr);
3653
3654 err = ath10k_station_assoc(ar, arvif->vif, sta, true);
3655 if (err)
3656 ath10k_warn(ar, "failed to reassociate station: %pM\n",
3657 sta->addr);
3658 }
3659
3660 mutex_unlock(&ar->conf_mutex);
3661 }
3662
3663 static int ath10k_mac_inc_num_stations(struct ath10k_vif *arvif)
3664 {
3665 struct ath10k *ar = arvif->ar;
3666
3667 lockdep_assert_held(&ar->conf_mutex);
3668
3669 if (arvif->vdev_type != WMI_VDEV_TYPE_AP &&
3670 arvif->vdev_type != WMI_VDEV_TYPE_IBSS)
3671 return 0;
3672
3673 if (ar->num_stations >= ar->max_num_stations)
3674 return -ENOBUFS;
3675
3676 ar->num_stations++;
3677
3678 return 0;
3679 }
3680
3681 static void ath10k_mac_dec_num_stations(struct ath10k_vif *arvif)
3682 {
3683 struct ath10k *ar = arvif->ar;
3684
3685 lockdep_assert_held(&ar->conf_mutex);
3686
3687 if (arvif->vdev_type != WMI_VDEV_TYPE_AP &&
3688 arvif->vdev_type != WMI_VDEV_TYPE_IBSS)
3689 return;
3690
3691 ar->num_stations--;
3692 }
3693
3694 static int ath10k_sta_state(struct ieee80211_hw *hw,
3695 struct ieee80211_vif *vif,
3696 struct ieee80211_sta *sta,
3697 enum ieee80211_sta_state old_state,
3698 enum ieee80211_sta_state new_state)
3699 {
3700 struct ath10k *ar = hw->priv;
3701 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3702 struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
3703 int ret = 0;
3704
3705 if (old_state == IEEE80211_STA_NOTEXIST &&
3706 new_state == IEEE80211_STA_NONE) {
3707 memset(arsta, 0, sizeof(*arsta));
3708 arsta->arvif = arvif;
3709 INIT_WORK(&arsta->update_wk, ath10k_sta_rc_update_wk);
3710 }
3711
3712 /* cancel must be done outside the mutex to avoid deadlock */
3713 if ((old_state == IEEE80211_STA_NONE &&
3714 new_state == IEEE80211_STA_NOTEXIST))
3715 cancel_work_sync(&arsta->update_wk);
3716
3717 mutex_lock(&ar->conf_mutex);
3718
3719 if (old_state == IEEE80211_STA_NOTEXIST &&
3720 new_state == IEEE80211_STA_NONE) {
3721 /*
3722 * New station addition.
3723 */
3724 ath10k_dbg(ar, ATH10K_DBG_MAC,
3725 "mac vdev %d peer create %pM (new sta) sta %d / %d peer %d / %d\n",
3726 arvif->vdev_id, sta->addr,
3727 ar->num_stations + 1, ar->max_num_stations,
3728 ar->num_peers + 1, ar->max_num_peers);
3729
3730 ret = ath10k_mac_inc_num_stations(arvif);
3731 if (ret) {
3732 ath10k_warn(ar, "refusing to associate station: too many connected already (%d)\n",
3733 ar->max_num_stations);
3734 goto exit;
3735 }
3736
3737 ret = ath10k_peer_create(ar, arvif->vdev_id, sta->addr);
3738 if (ret) {
3739 ath10k_warn(ar, "failed to add peer %pM for vdev %d when adding a new sta: %i\n",
3740 sta->addr, arvif->vdev_id, ret);
3741 ath10k_mac_dec_num_stations(arvif);
3742 goto exit;
3743 }
3744
3745 if (vif->type == NL80211_IFTYPE_STATION) {
3746 WARN_ON(arvif->is_started);
3747
3748 ret = ath10k_vdev_start(arvif);
3749 if (ret) {
3750 ath10k_warn(ar, "failed to start vdev %i: %d\n",
3751 arvif->vdev_id, ret);
3752 WARN_ON(ath10k_peer_delete(ar, arvif->vdev_id,
3753 sta->addr));
3754 ath10k_mac_dec_num_stations(arvif);
3755 goto exit;
3756 }
3757
3758 arvif->is_started = true;
3759 }
3760 } else if ((old_state == IEEE80211_STA_NONE &&
3761 new_state == IEEE80211_STA_NOTEXIST)) {
3762 /*
3763 * Existing station deletion.
3764 */
3765 ath10k_dbg(ar, ATH10K_DBG_MAC,
3766 "mac vdev %d peer delete %pM (sta gone)\n",
3767 arvif->vdev_id, sta->addr);
3768
3769 if (vif->type == NL80211_IFTYPE_STATION) {
3770 WARN_ON(!arvif->is_started);
3771
3772 ret = ath10k_vdev_stop(arvif);
3773 if (ret)
3774 ath10k_warn(ar, "failed to stop vdev %i: %d\n",
3775 arvif->vdev_id, ret);
3776
3777 arvif->is_started = false;
3778 }
3779
3780 ret = ath10k_peer_delete(ar, arvif->vdev_id, sta->addr);
3781 if (ret)
3782 ath10k_warn(ar, "failed to delete peer %pM for vdev %d: %i\n",
3783 sta->addr, arvif->vdev_id, ret);
3784
3785 ath10k_mac_dec_num_stations(arvif);
3786 } else if (old_state == IEEE80211_STA_AUTH &&
3787 new_state == IEEE80211_STA_ASSOC &&
3788 (vif->type == NL80211_IFTYPE_AP ||
3789 vif->type == NL80211_IFTYPE_ADHOC)) {
3790 /*
3791 * New association.
3792 */
3793 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac sta %pM associated\n",
3794 sta->addr);
3795
3796 ret = ath10k_station_assoc(ar, vif, sta, false);
3797 if (ret)
3798 ath10k_warn(ar, "failed to associate station %pM for vdev %i: %i\n",
3799 sta->addr, arvif->vdev_id, ret);
3800 } else if (old_state == IEEE80211_STA_ASSOC &&
3801 new_state == IEEE80211_STA_AUTH &&
3802 (vif->type == NL80211_IFTYPE_AP ||
3803 vif->type == NL80211_IFTYPE_ADHOC)) {
3804 /*
3805 * Disassociation.
3806 */
3807 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac sta %pM disassociated\n",
3808 sta->addr);
3809
3810 ret = ath10k_station_disassoc(ar, vif, sta);
3811 if (ret)
3812 ath10k_warn(ar, "failed to disassociate station: %pM vdev %i: %i\n",
3813 sta->addr, arvif->vdev_id, ret);
3814 }
3815 exit:
3816 mutex_unlock(&ar->conf_mutex);
3817 return ret;
3818 }
3819
3820 static int ath10k_conf_tx_uapsd(struct ath10k *ar, struct ieee80211_vif *vif,
3821 u16 ac, bool enable)
3822 {
3823 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3824 u32 value = 0;
3825 int ret = 0;
3826
3827 lockdep_assert_held(&ar->conf_mutex);
3828
3829 if (arvif->vdev_type != WMI_VDEV_TYPE_STA)
3830 return 0;
3831
3832 switch (ac) {
3833 case IEEE80211_AC_VO:
3834 value = WMI_STA_PS_UAPSD_AC3_DELIVERY_EN |
3835 WMI_STA_PS_UAPSD_AC3_TRIGGER_EN;
3836 break;
3837 case IEEE80211_AC_VI:
3838 value = WMI_STA_PS_UAPSD_AC2_DELIVERY_EN |
3839 WMI_STA_PS_UAPSD_AC2_TRIGGER_EN;
3840 break;
3841 case IEEE80211_AC_BE:
3842 value = WMI_STA_PS_UAPSD_AC1_DELIVERY_EN |
3843 WMI_STA_PS_UAPSD_AC1_TRIGGER_EN;
3844 break;
3845 case IEEE80211_AC_BK:
3846 value = WMI_STA_PS_UAPSD_AC0_DELIVERY_EN |
3847 WMI_STA_PS_UAPSD_AC0_TRIGGER_EN;
3848 break;
3849 }
3850
3851 if (enable)
3852 arvif->u.sta.uapsd |= value;
3853 else
3854 arvif->u.sta.uapsd &= ~value;
3855
3856 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
3857 WMI_STA_PS_PARAM_UAPSD,
3858 arvif->u.sta.uapsd);
3859 if (ret) {
3860 ath10k_warn(ar, "failed to set uapsd params: %d\n", ret);
3861 goto exit;
3862 }
3863
3864 if (arvif->u.sta.uapsd)
3865 value = WMI_STA_PS_RX_WAKE_POLICY_POLL_UAPSD;
3866 else
3867 value = WMI_STA_PS_RX_WAKE_POLICY_WAKE;
3868
3869 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
3870 WMI_STA_PS_PARAM_RX_WAKE_POLICY,
3871 value);
3872 if (ret)
3873 ath10k_warn(ar, "failed to set rx wake param: %d\n", ret);
3874
3875 ret = ath10k_mac_vif_recalc_ps_wake_threshold(arvif);
3876 if (ret) {
3877 ath10k_warn(ar, "failed to recalc ps wake threshold on vdev %i: %d\n",
3878 arvif->vdev_id, ret);
3879 return ret;
3880 }
3881
3882 ret = ath10k_mac_vif_recalc_ps_poll_count(arvif);
3883 if (ret) {
3884 ath10k_warn(ar, "failed to recalc ps poll count on vdev %i: %d\n",
3885 arvif->vdev_id, ret);
3886 return ret;
3887 }
3888
3889 exit:
3890 return ret;
3891 }
3892
3893 static int ath10k_conf_tx(struct ieee80211_hw *hw,
3894 struct ieee80211_vif *vif, u16 ac,
3895 const struct ieee80211_tx_queue_params *params)
3896 {
3897 struct ath10k *ar = hw->priv;
3898 struct wmi_wmm_params_arg *p = NULL;
3899 int ret;
3900
3901 mutex_lock(&ar->conf_mutex);
3902
3903 switch (ac) {
3904 case IEEE80211_AC_VO:
3905 p = &ar->wmm_params.ac_vo;
3906 break;
3907 case IEEE80211_AC_VI:
3908 p = &ar->wmm_params.ac_vi;
3909 break;
3910 case IEEE80211_AC_BE:
3911 p = &ar->wmm_params.ac_be;
3912 break;
3913 case IEEE80211_AC_BK:
3914 p = &ar->wmm_params.ac_bk;
3915 break;
3916 }
3917
3918 if (WARN_ON(!p)) {
3919 ret = -EINVAL;
3920 goto exit;
3921 }
3922
3923 p->cwmin = params->cw_min;
3924 p->cwmax = params->cw_max;
3925 p->aifs = params->aifs;
3926
3927 /*
3928 * The channel time duration programmed in the HW is in absolute
3929 * microseconds, while mac80211 gives the txop in units of
3930 * 32 microseconds.
3931 */
3932 p->txop = params->txop * 32;
3933
3934 /* FIXME: FW accepts wmm params per hw, not per vif */
3935 ret = ath10k_wmi_pdev_set_wmm_params(ar, &ar->wmm_params);
3936 if (ret) {
3937 ath10k_warn(ar, "failed to set wmm params: %d\n", ret);
3938 goto exit;
3939 }
3940
3941 ret = ath10k_conf_tx_uapsd(ar, vif, ac, params->uapsd);
3942 if (ret)
3943 ath10k_warn(ar, "failed to set sta uapsd: %d\n", ret);
3944
3945 exit:
3946 mutex_unlock(&ar->conf_mutex);
3947 return ret;
3948 }
3949
3950 #define ATH10K_ROC_TIMEOUT_HZ (2*HZ)
3951
3952 static int ath10k_remain_on_channel(struct ieee80211_hw *hw,
3953 struct ieee80211_vif *vif,
3954 struct ieee80211_channel *chan,
3955 int duration,
3956 enum ieee80211_roc_type type)
3957 {
3958 struct ath10k *ar = hw->priv;
3959 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3960 struct wmi_start_scan_arg arg;
3961 int ret = 0;
3962
3963 mutex_lock(&ar->conf_mutex);
3964
3965 spin_lock_bh(&ar->data_lock);
3966 switch (ar->scan.state) {
3967 case ATH10K_SCAN_IDLE:
3968 reinit_completion(&ar->scan.started);
3969 reinit_completion(&ar->scan.completed);
3970 reinit_completion(&ar->scan.on_channel);
3971 ar->scan.state = ATH10K_SCAN_STARTING;
3972 ar->scan.is_roc = true;
3973 ar->scan.vdev_id = arvif->vdev_id;
3974 ar->scan.roc_freq = chan->center_freq;
3975 ret = 0;
3976 break;
3977 case ATH10K_SCAN_STARTING:
3978 case ATH10K_SCAN_RUNNING:
3979 case ATH10K_SCAN_ABORTING:
3980 ret = -EBUSY;
3981 break;
3982 }
3983 spin_unlock_bh(&ar->data_lock);
3984
3985 if (ret)
3986 goto exit;
3987
3988 duration = max(duration, WMI_SCAN_CHAN_MIN_TIME_MSEC);
3989
3990 memset(&arg, 0, sizeof(arg));
3991 ath10k_wmi_start_scan_init(ar, &arg);
3992 arg.vdev_id = arvif->vdev_id;
3993 arg.scan_id = ATH10K_SCAN_ID;
3994 arg.n_channels = 1;
3995 arg.channels[0] = chan->center_freq;
3996 arg.dwell_time_active = duration;
3997 arg.dwell_time_passive = duration;
3998 arg.max_scan_time = 2 * duration;
3999 arg.scan_ctrl_flags |= WMI_SCAN_FLAG_PASSIVE;
4000 arg.scan_ctrl_flags |= WMI_SCAN_FILTER_PROBE_REQ;
4001
4002 ret = ath10k_start_scan(ar, &arg);
4003 if (ret) {
4004 ath10k_warn(ar, "failed to start roc scan: %d\n", ret);
4005 spin_lock_bh(&ar->data_lock);
4006 ar->scan.state = ATH10K_SCAN_IDLE;
4007 spin_unlock_bh(&ar->data_lock);
4008 goto exit;
4009 }
4010
4011 ret = wait_for_completion_timeout(&ar->scan.on_channel, 3*HZ);
4012 if (ret == 0) {
4013 ath10k_warn(ar, "failed to switch to channel for roc scan\n");
4014
4015 ret = ath10k_scan_stop(ar);
4016 if (ret)
4017 ath10k_warn(ar, "failed to stop scan: %d\n", ret);
4018
4019 ret = -ETIMEDOUT;
4020 goto exit;
4021 }
4022
4023 ret = 0;
4024 exit:
4025 mutex_unlock(&ar->conf_mutex);
4026 return ret;
4027 }
4028
4029 static int ath10k_cancel_remain_on_channel(struct ieee80211_hw *hw)
4030 {
4031 struct ath10k *ar = hw->priv;
4032
4033 mutex_lock(&ar->conf_mutex);
4034 ath10k_scan_abort(ar);
4035 mutex_unlock(&ar->conf_mutex);
4036
4037 cancel_delayed_work_sync(&ar->scan.timeout);
4038
4039 return 0;
4040 }
4041
4042 /*
4043 * Both RTS and Fragmentation threshold are interface-specific
4044 * in ath10k, but device-specific in mac80211.
4045 */
4046
4047 static int ath10k_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
4048 {
4049 struct ath10k *ar = hw->priv;
4050 struct ath10k_vif *arvif;
4051 int ret = 0;
4052
4053 mutex_lock(&ar->conf_mutex);
4054 list_for_each_entry(arvif, &ar->arvifs, list) {
4055 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d rts threshold %d\n",
4056 arvif->vdev_id, value);
4057
4058 ret = ath10k_mac_set_rts(arvif, value);
4059 if (ret) {
4060 ath10k_warn(ar, "failed to set rts threshold for vdev %d: %d\n",
4061 arvif->vdev_id, ret);
4062 break;
4063 }
4064 }
4065 mutex_unlock(&ar->conf_mutex);
4066
4067 return ret;
4068 }
4069
4070 static void ath10k_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
4071 u32 queues, bool drop)
4072 {
4073 struct ath10k *ar = hw->priv;
4074 bool skip;
4075 int ret;
4076
4077 /* mac80211 doesn't care if we really xmit queued frames or not
4078 * we'll collect those frames either way if we stop/delete vdevs */
4079 if (drop)
4080 return;
4081
4082 mutex_lock(&ar->conf_mutex);
4083
4084 if (ar->state == ATH10K_STATE_WEDGED)
4085 goto skip;
4086
4087 ret = wait_event_timeout(ar->htt.empty_tx_wq, ({
4088 bool empty;
4089
4090 spin_lock_bh(&ar->htt.tx_lock);
4091 empty = (ar->htt.num_pending_tx == 0);
4092 spin_unlock_bh(&ar->htt.tx_lock);
4093
4094 skip = (ar->state == ATH10K_STATE_WEDGED) ||
4095 test_bit(ATH10K_FLAG_CRASH_FLUSH,
4096 &ar->dev_flags);
4097
4098 (empty || skip);
4099 }), ATH10K_FLUSH_TIMEOUT_HZ);
4100
4101 if (ret <= 0 || skip)
4102 ath10k_warn(ar, "failed to flush transmit queue (skip %i ar-state %i): %i\n",
4103 skip, ar->state, ret);
4104
4105 skip:
4106 mutex_unlock(&ar->conf_mutex);
4107 }
4108
4109 /* TODO: Implement this function properly
4110 * For now it is needed to reply to Probe Requests in IBSS mode.
4111 * Propably we need this information from FW.
4112 */
4113 static int ath10k_tx_last_beacon(struct ieee80211_hw *hw)
4114 {
4115 return 1;
4116 }
4117
4118 #ifdef CONFIG_PM
4119 static int ath10k_suspend(struct ieee80211_hw *hw,
4120 struct cfg80211_wowlan *wowlan)
4121 {
4122 struct ath10k *ar = hw->priv;
4123 int ret;
4124
4125 mutex_lock(&ar->conf_mutex);
4126
4127 ret = ath10k_wait_for_suspend(ar, WMI_PDEV_SUSPEND);
4128 if (ret) {
4129 if (ret == -ETIMEDOUT)
4130 goto resume;
4131 ret = 1;
4132 goto exit;
4133 }
4134
4135 ret = ath10k_hif_suspend(ar);
4136 if (ret) {
4137 ath10k_warn(ar, "failed to suspend hif: %d\n", ret);
4138 goto resume;
4139 }
4140
4141 ret = 0;
4142 goto exit;
4143 resume:
4144 ret = ath10k_wmi_pdev_resume_target(ar);
4145 if (ret)
4146 ath10k_warn(ar, "failed to resume target: %d\n", ret);
4147
4148 ret = 1;
4149 exit:
4150 mutex_unlock(&ar->conf_mutex);
4151 return ret;
4152 }
4153
4154 static int ath10k_resume(struct ieee80211_hw *hw)
4155 {
4156 struct ath10k *ar = hw->priv;
4157 int ret;
4158
4159 mutex_lock(&ar->conf_mutex);
4160
4161 ret = ath10k_hif_resume(ar);
4162 if (ret) {
4163 ath10k_warn(ar, "failed to resume hif: %d\n", ret);
4164 ret = 1;
4165 goto exit;
4166 }
4167
4168 ret = ath10k_wmi_pdev_resume_target(ar);
4169 if (ret) {
4170 ath10k_warn(ar, "failed to resume target: %d\n", ret);
4171 ret = 1;
4172 goto exit;
4173 }
4174
4175 ret = 0;
4176 exit:
4177 mutex_unlock(&ar->conf_mutex);
4178 return ret;
4179 }
4180 #endif
4181
4182 static void ath10k_reconfig_complete(struct ieee80211_hw *hw,
4183 enum ieee80211_reconfig_type reconfig_type)
4184 {
4185 struct ath10k *ar = hw->priv;
4186
4187 if (reconfig_type != IEEE80211_RECONFIG_TYPE_RESTART)
4188 return;
4189
4190 mutex_lock(&ar->conf_mutex);
4191
4192 /* If device failed to restart it will be in a different state, e.g.
4193 * ATH10K_STATE_WEDGED */
4194 if (ar->state == ATH10K_STATE_RESTARTED) {
4195 ath10k_info(ar, "device successfully recovered\n");
4196 ar->state = ATH10K_STATE_ON;
4197 ieee80211_wake_queues(ar->hw);
4198 }
4199
4200 mutex_unlock(&ar->conf_mutex);
4201 }
4202
4203 static int ath10k_get_survey(struct ieee80211_hw *hw, int idx,
4204 struct survey_info *survey)
4205 {
4206 struct ath10k *ar = hw->priv;
4207 struct ieee80211_supported_band *sband;
4208 struct survey_info *ar_survey = &ar->survey[idx];
4209 int ret = 0;
4210
4211 mutex_lock(&ar->conf_mutex);
4212
4213 sband = hw->wiphy->bands[IEEE80211_BAND_2GHZ];
4214 if (sband && idx >= sband->n_channels) {
4215 idx -= sband->n_channels;
4216 sband = NULL;
4217 }
4218
4219 if (!sband)
4220 sband = hw->wiphy->bands[IEEE80211_BAND_5GHZ];
4221
4222 if (!sband || idx >= sband->n_channels) {
4223 ret = -ENOENT;
4224 goto exit;
4225 }
4226
4227 spin_lock_bh(&ar->data_lock);
4228 memcpy(survey, ar_survey, sizeof(*survey));
4229 spin_unlock_bh(&ar->data_lock);
4230
4231 survey->channel = &sband->channels[idx];
4232
4233 if (ar->rx_channel == survey->channel)
4234 survey->filled |= SURVEY_INFO_IN_USE;
4235
4236 exit:
4237 mutex_unlock(&ar->conf_mutex);
4238 return ret;
4239 }
4240
4241 /* Helper table for legacy fixed_rate/bitrate_mask */
4242 static const u8 cck_ofdm_rate[] = {
4243 /* CCK */
4244 3, /* 1Mbps */
4245 2, /* 2Mbps */
4246 1, /* 5.5Mbps */
4247 0, /* 11Mbps */
4248 /* OFDM */
4249 3, /* 6Mbps */
4250 7, /* 9Mbps */
4251 2, /* 12Mbps */
4252 6, /* 18Mbps */
4253 1, /* 24Mbps */
4254 5, /* 36Mbps */
4255 0, /* 48Mbps */
4256 4, /* 54Mbps */
4257 };
4258
4259 /* Check if only one bit set */
4260 static int ath10k_check_single_mask(u32 mask)
4261 {
4262 int bit;
4263
4264 bit = ffs(mask);
4265 if (!bit)
4266 return 0;
4267
4268 mask &= ~BIT(bit - 1);
4269 if (mask)
4270 return 2;
4271
4272 return 1;
4273 }
4274
4275 static bool
4276 ath10k_default_bitrate_mask(struct ath10k *ar,
4277 enum ieee80211_band band,
4278 const struct cfg80211_bitrate_mask *mask)
4279 {
4280 u32 legacy = 0x00ff;
4281 u8 ht = 0xff, i;
4282 u16 vht = 0x3ff;
4283 u16 nrf = ar->num_rf_chains;
4284
4285 if (ar->cfg_tx_chainmask)
4286 nrf = get_nss_from_chainmask(ar->cfg_tx_chainmask);
4287
4288 switch (band) {
4289 case IEEE80211_BAND_2GHZ:
4290 legacy = 0x00fff;
4291 vht = 0;
4292 break;
4293 case IEEE80211_BAND_5GHZ:
4294 break;
4295 default:
4296 return false;
4297 }
4298
4299 if (mask->control[band].legacy != legacy)
4300 return false;
4301
4302 for (i = 0; i < nrf; i++)
4303 if (mask->control[band].ht_mcs[i] != ht)
4304 return false;
4305
4306 for (i = 0; i < nrf; i++)
4307 if (mask->control[band].vht_mcs[i] != vht)
4308 return false;
4309
4310 return true;
4311 }
4312
4313 static bool
4314 ath10k_bitrate_mask_nss(const struct cfg80211_bitrate_mask *mask,
4315 enum ieee80211_band band,
4316 u8 *fixed_nss)
4317 {
4318 int ht_nss = 0, vht_nss = 0, i;
4319
4320 /* check legacy */
4321 if (ath10k_check_single_mask(mask->control[band].legacy))
4322 return false;
4323
4324 /* check HT */
4325 for (i = 0; i < IEEE80211_HT_MCS_MASK_LEN; i++) {
4326 if (mask->control[band].ht_mcs[i] == 0xff)
4327 continue;
4328 else if (mask->control[band].ht_mcs[i] == 0x00)
4329 break;
4330
4331 return false;
4332 }
4333
4334 ht_nss = i;
4335
4336 /* check VHT */
4337 for (i = 0; i < NL80211_VHT_NSS_MAX; i++) {
4338 if (mask->control[band].vht_mcs[i] == 0x03ff)
4339 continue;
4340 else if (mask->control[band].vht_mcs[i] == 0x0000)
4341 break;
4342
4343 return false;
4344 }
4345
4346 vht_nss = i;
4347
4348 if (ht_nss > 0 && vht_nss > 0)
4349 return false;
4350
4351 if (ht_nss)
4352 *fixed_nss = ht_nss;
4353 else if (vht_nss)
4354 *fixed_nss = vht_nss;
4355 else
4356 return false;
4357
4358 return true;
4359 }
4360
4361 static bool
4362 ath10k_bitrate_mask_correct(const struct cfg80211_bitrate_mask *mask,
4363 enum ieee80211_band band,
4364 enum wmi_rate_preamble *preamble)
4365 {
4366 int legacy = 0, ht = 0, vht = 0, i;
4367
4368 *preamble = WMI_RATE_PREAMBLE_OFDM;
4369
4370 /* check legacy */
4371 legacy = ath10k_check_single_mask(mask->control[band].legacy);
4372 if (legacy > 1)
4373 return false;
4374
4375 /* check HT */
4376 for (i = 0; i < IEEE80211_HT_MCS_MASK_LEN; i++)
4377 ht += ath10k_check_single_mask(mask->control[band].ht_mcs[i]);
4378 if (ht > 1)
4379 return false;
4380
4381 /* check VHT */
4382 for (i = 0; i < NL80211_VHT_NSS_MAX; i++)
4383 vht += ath10k_check_single_mask(mask->control[band].vht_mcs[i]);
4384 if (vht > 1)
4385 return false;
4386
4387 /* Currently we support only one fixed_rate */
4388 if ((legacy + ht + vht) != 1)
4389 return false;
4390
4391 if (ht)
4392 *preamble = WMI_RATE_PREAMBLE_HT;
4393 else if (vht)
4394 *preamble = WMI_RATE_PREAMBLE_VHT;
4395
4396 return true;
4397 }
4398
4399 static bool
4400 ath10k_bitrate_mask_rate(struct ath10k *ar,
4401 const struct cfg80211_bitrate_mask *mask,
4402 enum ieee80211_band band,
4403 u8 *fixed_rate,
4404 u8 *fixed_nss)
4405 {
4406 u8 rate = 0, pream = 0, nss = 0, i;
4407 enum wmi_rate_preamble preamble;
4408
4409 /* Check if single rate correct */
4410 if (!ath10k_bitrate_mask_correct(mask, band, &preamble))
4411 return false;
4412
4413 pream = preamble;
4414
4415 switch (preamble) {
4416 case WMI_RATE_PREAMBLE_CCK:
4417 case WMI_RATE_PREAMBLE_OFDM:
4418 i = ffs(mask->control[band].legacy) - 1;
4419
4420 if (band == IEEE80211_BAND_2GHZ && i < 4)
4421 pream = WMI_RATE_PREAMBLE_CCK;
4422
4423 if (band == IEEE80211_BAND_5GHZ)
4424 i += 4;
4425
4426 if (i >= ARRAY_SIZE(cck_ofdm_rate))
4427 return false;
4428
4429 rate = cck_ofdm_rate[i];
4430 break;
4431 case WMI_RATE_PREAMBLE_HT:
4432 for (i = 0; i < IEEE80211_HT_MCS_MASK_LEN; i++)
4433 if (mask->control[band].ht_mcs[i])
4434 break;
4435
4436 if (i == IEEE80211_HT_MCS_MASK_LEN)
4437 return false;
4438
4439 rate = ffs(mask->control[band].ht_mcs[i]) - 1;
4440 nss = i;
4441 break;
4442 case WMI_RATE_PREAMBLE_VHT:
4443 for (i = 0; i < NL80211_VHT_NSS_MAX; i++)
4444 if (mask->control[band].vht_mcs[i])
4445 break;
4446
4447 if (i == NL80211_VHT_NSS_MAX)
4448 return false;
4449
4450 rate = ffs(mask->control[band].vht_mcs[i]) - 1;
4451 nss = i;
4452 break;
4453 }
4454
4455 *fixed_nss = nss + 1;
4456 nss <<= 4;
4457 pream <<= 6;
4458
4459 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac fixed rate pream 0x%02x nss 0x%02x rate 0x%02x\n",
4460 pream, nss, rate);
4461
4462 *fixed_rate = pream | nss | rate;
4463
4464 return true;
4465 }
4466
4467 static bool ath10k_get_fixed_rate_nss(struct ath10k *ar,
4468 const struct cfg80211_bitrate_mask *mask,
4469 enum ieee80211_band band,
4470 u8 *fixed_rate,
4471 u8 *fixed_nss)
4472 {
4473 /* First check full NSS mask, if we can simply limit NSS */
4474 if (ath10k_bitrate_mask_nss(mask, band, fixed_nss))
4475 return true;
4476
4477 /* Next Check single rate is set */
4478 return ath10k_bitrate_mask_rate(ar, mask, band, fixed_rate, fixed_nss);
4479 }
4480
4481 static int ath10k_set_fixed_rate_param(struct ath10k_vif *arvif,
4482 u8 fixed_rate,
4483 u8 fixed_nss,
4484 u8 force_sgi)
4485 {
4486 struct ath10k *ar = arvif->ar;
4487 u32 vdev_param;
4488 int ret = 0;
4489
4490 mutex_lock(&ar->conf_mutex);
4491
4492 if (arvif->fixed_rate == fixed_rate &&
4493 arvif->fixed_nss == fixed_nss &&
4494 arvif->force_sgi == force_sgi)
4495 goto exit;
4496
4497 if (fixed_rate == WMI_FIXED_RATE_NONE)
4498 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac disable fixed bitrate mask\n");
4499
4500 if (force_sgi)
4501 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac force sgi\n");
4502
4503 vdev_param = ar->wmi.vdev_param->fixed_rate;
4504 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id,
4505 vdev_param, fixed_rate);
4506 if (ret) {
4507 ath10k_warn(ar, "failed to set fixed rate param 0x%02x: %d\n",
4508 fixed_rate, ret);
4509 ret = -EINVAL;
4510 goto exit;
4511 }
4512
4513 arvif->fixed_rate = fixed_rate;
4514
4515 vdev_param = ar->wmi.vdev_param->nss;
4516 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id,
4517 vdev_param, fixed_nss);
4518
4519 if (ret) {
4520 ath10k_warn(ar, "failed to set fixed nss param %d: %d\n",
4521 fixed_nss, ret);
4522 ret = -EINVAL;
4523 goto exit;
4524 }
4525
4526 arvif->fixed_nss = fixed_nss;
4527
4528 vdev_param = ar->wmi.vdev_param->sgi;
4529 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
4530 force_sgi);
4531
4532 if (ret) {
4533 ath10k_warn(ar, "failed to set sgi param %d: %d\n",
4534 force_sgi, ret);
4535 ret = -EINVAL;
4536 goto exit;
4537 }
4538
4539 arvif->force_sgi = force_sgi;
4540
4541 exit:
4542 mutex_unlock(&ar->conf_mutex);
4543 return ret;
4544 }
4545
4546 static int ath10k_set_bitrate_mask(struct ieee80211_hw *hw,
4547 struct ieee80211_vif *vif,
4548 const struct cfg80211_bitrate_mask *mask)
4549 {
4550 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4551 struct ath10k *ar = arvif->ar;
4552 enum ieee80211_band band = ar->hw->conf.chandef.chan->band;
4553 u8 fixed_rate = WMI_FIXED_RATE_NONE;
4554 u8 fixed_nss = ar->num_rf_chains;
4555 u8 force_sgi;
4556
4557 if (ar->cfg_tx_chainmask)
4558 fixed_nss = get_nss_from_chainmask(ar->cfg_tx_chainmask);
4559
4560 force_sgi = mask->control[band].gi;
4561 if (force_sgi == NL80211_TXRATE_FORCE_LGI)
4562 return -EINVAL;
4563
4564 if (!ath10k_default_bitrate_mask(ar, band, mask)) {
4565 if (!ath10k_get_fixed_rate_nss(ar, mask, band,
4566 &fixed_rate,
4567 &fixed_nss))
4568 return -EINVAL;
4569 }
4570
4571 if (fixed_rate == WMI_FIXED_RATE_NONE && force_sgi) {
4572 ath10k_warn(ar, "failed to force SGI usage for default rate settings\n");
4573 return -EINVAL;
4574 }
4575
4576 return ath10k_set_fixed_rate_param(arvif, fixed_rate,
4577 fixed_nss, force_sgi);
4578 }
4579
4580 static void ath10k_sta_rc_update(struct ieee80211_hw *hw,
4581 struct ieee80211_vif *vif,
4582 struct ieee80211_sta *sta,
4583 u32 changed)
4584 {
4585 struct ath10k *ar = hw->priv;
4586 struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
4587 u32 bw, smps;
4588
4589 spin_lock_bh(&ar->data_lock);
4590
4591 ath10k_dbg(ar, ATH10K_DBG_MAC,
4592 "mac sta rc update for %pM changed %08x bw %d nss %d smps %d\n",
4593 sta->addr, changed, sta->bandwidth, sta->rx_nss,
4594 sta->smps_mode);
4595
4596 if (changed & IEEE80211_RC_BW_CHANGED) {
4597 bw = WMI_PEER_CHWIDTH_20MHZ;
4598
4599 switch (sta->bandwidth) {
4600 case IEEE80211_STA_RX_BW_20:
4601 bw = WMI_PEER_CHWIDTH_20MHZ;
4602 break;
4603 case IEEE80211_STA_RX_BW_40:
4604 bw = WMI_PEER_CHWIDTH_40MHZ;
4605 break;
4606 case IEEE80211_STA_RX_BW_80:
4607 bw = WMI_PEER_CHWIDTH_80MHZ;
4608 break;
4609 case IEEE80211_STA_RX_BW_160:
4610 ath10k_warn(ar, "Invalid bandwith %d in rc update for %pM\n",
4611 sta->bandwidth, sta->addr);
4612 bw = WMI_PEER_CHWIDTH_20MHZ;
4613 break;
4614 }
4615
4616 arsta->bw = bw;
4617 }
4618
4619 if (changed & IEEE80211_RC_NSS_CHANGED)
4620 arsta->nss = sta->rx_nss;
4621
4622 if (changed & IEEE80211_RC_SMPS_CHANGED) {
4623 smps = WMI_PEER_SMPS_PS_NONE;
4624
4625 switch (sta->smps_mode) {
4626 case IEEE80211_SMPS_AUTOMATIC:
4627 case IEEE80211_SMPS_OFF:
4628 smps = WMI_PEER_SMPS_PS_NONE;
4629 break;
4630 case IEEE80211_SMPS_STATIC:
4631 smps = WMI_PEER_SMPS_STATIC;
4632 break;
4633 case IEEE80211_SMPS_DYNAMIC:
4634 smps = WMI_PEER_SMPS_DYNAMIC;
4635 break;
4636 case IEEE80211_SMPS_NUM_MODES:
4637 ath10k_warn(ar, "Invalid smps %d in sta rc update for %pM\n",
4638 sta->smps_mode, sta->addr);
4639 smps = WMI_PEER_SMPS_PS_NONE;
4640 break;
4641 }
4642
4643 arsta->smps = smps;
4644 }
4645
4646 arsta->changed |= changed;
4647
4648 spin_unlock_bh(&ar->data_lock);
4649
4650 ieee80211_queue_work(hw, &arsta->update_wk);
4651 }
4652
4653 static u64 ath10k_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
4654 {
4655 /*
4656 * FIXME: Return 0 for time being. Need to figure out whether FW
4657 * has the API to fetch 64-bit local TSF
4658 */
4659
4660 return 0;
4661 }
4662
4663 static int ath10k_ampdu_action(struct ieee80211_hw *hw,
4664 struct ieee80211_vif *vif,
4665 enum ieee80211_ampdu_mlme_action action,
4666 struct ieee80211_sta *sta, u16 tid, u16 *ssn,
4667 u8 buf_size)
4668 {
4669 struct ath10k *ar = hw->priv;
4670 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4671
4672 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac ampdu vdev_id %i sta %pM tid %hu action %d\n",
4673 arvif->vdev_id, sta->addr, tid, action);
4674
4675 switch (action) {
4676 case IEEE80211_AMPDU_RX_START:
4677 case IEEE80211_AMPDU_RX_STOP:
4678 /* HTT AddBa/DelBa events trigger mac80211 Rx BA session
4679 * creation/removal. Do we need to verify this?
4680 */
4681 return 0;
4682 case IEEE80211_AMPDU_TX_START:
4683 case IEEE80211_AMPDU_TX_STOP_CONT:
4684 case IEEE80211_AMPDU_TX_STOP_FLUSH:
4685 case IEEE80211_AMPDU_TX_STOP_FLUSH_CONT:
4686 case IEEE80211_AMPDU_TX_OPERATIONAL:
4687 /* Firmware offloads Tx aggregation entirely so deny mac80211
4688 * Tx aggregation requests.
4689 */
4690 return -EOPNOTSUPP;
4691 }
4692
4693 return -EINVAL;
4694 }
4695
4696 static const struct ieee80211_ops ath10k_ops = {
4697 .tx = ath10k_tx,
4698 .start = ath10k_start,
4699 .stop = ath10k_stop,
4700 .config = ath10k_config,
4701 .add_interface = ath10k_add_interface,
4702 .remove_interface = ath10k_remove_interface,
4703 .configure_filter = ath10k_configure_filter,
4704 .bss_info_changed = ath10k_bss_info_changed,
4705 .hw_scan = ath10k_hw_scan,
4706 .cancel_hw_scan = ath10k_cancel_hw_scan,
4707 .set_key = ath10k_set_key,
4708 .sta_state = ath10k_sta_state,
4709 .conf_tx = ath10k_conf_tx,
4710 .remain_on_channel = ath10k_remain_on_channel,
4711 .cancel_remain_on_channel = ath10k_cancel_remain_on_channel,
4712 .set_rts_threshold = ath10k_set_rts_threshold,
4713 .flush = ath10k_flush,
4714 .tx_last_beacon = ath10k_tx_last_beacon,
4715 .set_antenna = ath10k_set_antenna,
4716 .get_antenna = ath10k_get_antenna,
4717 .reconfig_complete = ath10k_reconfig_complete,
4718 .get_survey = ath10k_get_survey,
4719 .set_bitrate_mask = ath10k_set_bitrate_mask,
4720 .sta_rc_update = ath10k_sta_rc_update,
4721 .get_tsf = ath10k_get_tsf,
4722 .ampdu_action = ath10k_ampdu_action,
4723 .get_et_sset_count = ath10k_debug_get_et_sset_count,
4724 .get_et_stats = ath10k_debug_get_et_stats,
4725 .get_et_strings = ath10k_debug_get_et_strings,
4726
4727 CFG80211_TESTMODE_CMD(ath10k_tm_cmd)
4728
4729 #ifdef CONFIG_PM
4730 .suspend = ath10k_suspend,
4731 .resume = ath10k_resume,
4732 #endif
4733 };
4734
4735 #define RATETAB_ENT(_rate, _rateid, _flags) { \
4736 .bitrate = (_rate), \
4737 .flags = (_flags), \
4738 .hw_value = (_rateid), \
4739 }
4740
4741 #define CHAN2G(_channel, _freq, _flags) { \
4742 .band = IEEE80211_BAND_2GHZ, \
4743 .hw_value = (_channel), \
4744 .center_freq = (_freq), \
4745 .flags = (_flags), \
4746 .max_antenna_gain = 0, \
4747 .max_power = 30, \
4748 }
4749
4750 #define CHAN5G(_channel, _freq, _flags) { \
4751 .band = IEEE80211_BAND_5GHZ, \
4752 .hw_value = (_channel), \
4753 .center_freq = (_freq), \
4754 .flags = (_flags), \
4755 .max_antenna_gain = 0, \
4756 .max_power = 30, \
4757 }
4758
4759 static const struct ieee80211_channel ath10k_2ghz_channels[] = {
4760 CHAN2G(1, 2412, 0),
4761 CHAN2G(2, 2417, 0),
4762 CHAN2G(3, 2422, 0),
4763 CHAN2G(4, 2427, 0),
4764 CHAN2G(5, 2432, 0),
4765 CHAN2G(6, 2437, 0),
4766 CHAN2G(7, 2442, 0),
4767 CHAN2G(8, 2447, 0),
4768 CHAN2G(9, 2452, 0),
4769 CHAN2G(10, 2457, 0),
4770 CHAN2G(11, 2462, 0),
4771 CHAN2G(12, 2467, 0),
4772 CHAN2G(13, 2472, 0),
4773 CHAN2G(14, 2484, 0),
4774 };
4775
4776 static const struct ieee80211_channel ath10k_5ghz_channels[] = {
4777 CHAN5G(36, 5180, 0),
4778 CHAN5G(40, 5200, 0),
4779 CHAN5G(44, 5220, 0),
4780 CHAN5G(48, 5240, 0),
4781 CHAN5G(52, 5260, 0),
4782 CHAN5G(56, 5280, 0),
4783 CHAN5G(60, 5300, 0),
4784 CHAN5G(64, 5320, 0),
4785 CHAN5G(100, 5500, 0),
4786 CHAN5G(104, 5520, 0),
4787 CHAN5G(108, 5540, 0),
4788 CHAN5G(112, 5560, 0),
4789 CHAN5G(116, 5580, 0),
4790 CHAN5G(120, 5600, 0),
4791 CHAN5G(124, 5620, 0),
4792 CHAN5G(128, 5640, 0),
4793 CHAN5G(132, 5660, 0),
4794 CHAN5G(136, 5680, 0),
4795 CHAN5G(140, 5700, 0),
4796 CHAN5G(149, 5745, 0),
4797 CHAN5G(153, 5765, 0),
4798 CHAN5G(157, 5785, 0),
4799 CHAN5G(161, 5805, 0),
4800 CHAN5G(165, 5825, 0),
4801 };
4802
4803 /* Note: Be careful if you re-order these. There is code which depends on this
4804 * ordering.
4805 */
4806 static struct ieee80211_rate ath10k_rates[] = {
4807 /* CCK */
4808 RATETAB_ENT(10, 0x82, 0),
4809 RATETAB_ENT(20, 0x84, 0),
4810 RATETAB_ENT(55, 0x8b, 0),
4811 RATETAB_ENT(110, 0x96, 0),
4812 /* OFDM */
4813 RATETAB_ENT(60, 0x0c, 0),
4814 RATETAB_ENT(90, 0x12, 0),
4815 RATETAB_ENT(120, 0x18, 0),
4816 RATETAB_ENT(180, 0x24, 0),
4817 RATETAB_ENT(240, 0x30, 0),
4818 RATETAB_ENT(360, 0x48, 0),
4819 RATETAB_ENT(480, 0x60, 0),
4820 RATETAB_ENT(540, 0x6c, 0),
4821 };
4822
4823 #define ath10k_a_rates (ath10k_rates + 4)
4824 #define ath10k_a_rates_size (ARRAY_SIZE(ath10k_rates) - 4)
4825 #define ath10k_g_rates (ath10k_rates + 0)
4826 #define ath10k_g_rates_size (ARRAY_SIZE(ath10k_rates))
4827
4828 struct ath10k *ath10k_mac_create(size_t priv_size)
4829 {
4830 struct ieee80211_hw *hw;
4831 struct ath10k *ar;
4832
4833 hw = ieee80211_alloc_hw(sizeof(struct ath10k) + priv_size, &ath10k_ops);
4834 if (!hw)
4835 return NULL;
4836
4837 ar = hw->priv;
4838 ar->hw = hw;
4839
4840 return ar;
4841 }
4842
4843 void ath10k_mac_destroy(struct ath10k *ar)
4844 {
4845 ieee80211_free_hw(ar->hw);
4846 }
4847
4848 static const struct ieee80211_iface_limit ath10k_if_limits[] = {
4849 {
4850 .max = 8,
4851 .types = BIT(NL80211_IFTYPE_STATION)
4852 | BIT(NL80211_IFTYPE_P2P_CLIENT)
4853 },
4854 {
4855 .max = 3,
4856 .types = BIT(NL80211_IFTYPE_P2P_GO)
4857 },
4858 {
4859 .max = 7,
4860 .types = BIT(NL80211_IFTYPE_AP)
4861 },
4862 };
4863
4864 static const struct ieee80211_iface_limit ath10k_10x_if_limits[] = {
4865 {
4866 .max = 8,
4867 .types = BIT(NL80211_IFTYPE_AP)
4868 },
4869 };
4870
4871 static const struct ieee80211_iface_combination ath10k_if_comb[] = {
4872 {
4873 .limits = ath10k_if_limits,
4874 .n_limits = ARRAY_SIZE(ath10k_if_limits),
4875 .max_interfaces = 8,
4876 .num_different_channels = 1,
4877 .beacon_int_infra_match = true,
4878 },
4879 };
4880
4881 static const struct ieee80211_iface_combination ath10k_10x_if_comb[] = {
4882 {
4883 .limits = ath10k_10x_if_limits,
4884 .n_limits = ARRAY_SIZE(ath10k_10x_if_limits),
4885 .max_interfaces = 8,
4886 .num_different_channels = 1,
4887 .beacon_int_infra_match = true,
4888 #ifdef CONFIG_ATH10K_DFS_CERTIFIED
4889 .radar_detect_widths = BIT(NL80211_CHAN_WIDTH_20_NOHT) |
4890 BIT(NL80211_CHAN_WIDTH_20) |
4891 BIT(NL80211_CHAN_WIDTH_40) |
4892 BIT(NL80211_CHAN_WIDTH_80),
4893 #endif
4894 },
4895 };
4896
4897 static struct ieee80211_sta_vht_cap ath10k_create_vht_cap(struct ath10k *ar)
4898 {
4899 struct ieee80211_sta_vht_cap vht_cap = {0};
4900 u16 mcs_map;
4901 int i;
4902
4903 vht_cap.vht_supported = 1;
4904 vht_cap.cap = ar->vht_cap_info;
4905
4906 mcs_map = 0;
4907 for (i = 0; i < 8; i++) {
4908 if (i < ar->num_rf_chains)
4909 mcs_map |= IEEE80211_VHT_MCS_SUPPORT_0_9 << (i*2);
4910 else
4911 mcs_map |= IEEE80211_VHT_MCS_NOT_SUPPORTED << (i*2);
4912 }
4913
4914 vht_cap.vht_mcs.rx_mcs_map = cpu_to_le16(mcs_map);
4915 vht_cap.vht_mcs.tx_mcs_map = cpu_to_le16(mcs_map);
4916
4917 return vht_cap;
4918 }
4919
4920 static struct ieee80211_sta_ht_cap ath10k_get_ht_cap(struct ath10k *ar)
4921 {
4922 int i;
4923 struct ieee80211_sta_ht_cap ht_cap = {0};
4924
4925 if (!(ar->ht_cap_info & WMI_HT_CAP_ENABLED))
4926 return ht_cap;
4927
4928 ht_cap.ht_supported = 1;
4929 ht_cap.ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
4930 ht_cap.ampdu_density = IEEE80211_HT_MPDU_DENSITY_8;
4931 ht_cap.cap |= IEEE80211_HT_CAP_SUP_WIDTH_20_40;
4932 ht_cap.cap |= IEEE80211_HT_CAP_DSSSCCK40;
4933 ht_cap.cap |= WLAN_HT_CAP_SM_PS_STATIC << IEEE80211_HT_CAP_SM_PS_SHIFT;
4934
4935 if (ar->ht_cap_info & WMI_HT_CAP_HT20_SGI)
4936 ht_cap.cap |= IEEE80211_HT_CAP_SGI_20;
4937
4938 if (ar->ht_cap_info & WMI_HT_CAP_HT40_SGI)
4939 ht_cap.cap |= IEEE80211_HT_CAP_SGI_40;
4940
4941 if (ar->ht_cap_info & WMI_HT_CAP_DYNAMIC_SMPS) {
4942 u32 smps;
4943
4944 smps = WLAN_HT_CAP_SM_PS_DYNAMIC;
4945 smps <<= IEEE80211_HT_CAP_SM_PS_SHIFT;
4946
4947 ht_cap.cap |= smps;
4948 }
4949
4950 if (ar->ht_cap_info & WMI_HT_CAP_TX_STBC)
4951 ht_cap.cap |= IEEE80211_HT_CAP_TX_STBC;
4952
4953 if (ar->ht_cap_info & WMI_HT_CAP_RX_STBC) {
4954 u32 stbc;
4955
4956 stbc = ar->ht_cap_info;
4957 stbc &= WMI_HT_CAP_RX_STBC;
4958 stbc >>= WMI_HT_CAP_RX_STBC_MASK_SHIFT;
4959 stbc <<= IEEE80211_HT_CAP_RX_STBC_SHIFT;
4960 stbc &= IEEE80211_HT_CAP_RX_STBC;
4961
4962 ht_cap.cap |= stbc;
4963 }
4964
4965 if (ar->ht_cap_info & WMI_HT_CAP_LDPC)
4966 ht_cap.cap |= IEEE80211_HT_CAP_LDPC_CODING;
4967
4968 if (ar->ht_cap_info & WMI_HT_CAP_L_SIG_TXOP_PROT)
4969 ht_cap.cap |= IEEE80211_HT_CAP_LSIG_TXOP_PROT;
4970
4971 /* max AMSDU is implicitly taken from vht_cap_info */
4972 if (ar->vht_cap_info & WMI_VHT_CAP_MAX_MPDU_LEN_MASK)
4973 ht_cap.cap |= IEEE80211_HT_CAP_MAX_AMSDU;
4974
4975 for (i = 0; i < ar->num_rf_chains; i++)
4976 ht_cap.mcs.rx_mask[i] = 0xFF;
4977
4978 ht_cap.mcs.tx_params |= IEEE80211_HT_MCS_TX_DEFINED;
4979
4980 return ht_cap;
4981 }
4982
4983 static void ath10k_get_arvif_iter(void *data, u8 *mac,
4984 struct ieee80211_vif *vif)
4985 {
4986 struct ath10k_vif_iter *arvif_iter = data;
4987 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4988
4989 if (arvif->vdev_id == arvif_iter->vdev_id)
4990 arvif_iter->arvif = arvif;
4991 }
4992
4993 struct ath10k_vif *ath10k_get_arvif(struct ath10k *ar, u32 vdev_id)
4994 {
4995 struct ath10k_vif_iter arvif_iter;
4996 u32 flags;
4997
4998 memset(&arvif_iter, 0, sizeof(struct ath10k_vif_iter));
4999 arvif_iter.vdev_id = vdev_id;
5000
5001 flags = IEEE80211_IFACE_ITER_RESUME_ALL;
5002 ieee80211_iterate_active_interfaces_atomic(ar->hw,
5003 flags,
5004 ath10k_get_arvif_iter,
5005 &arvif_iter);
5006 if (!arvif_iter.arvif) {
5007 ath10k_warn(ar, "No VIF found for vdev %d\n", vdev_id);
5008 return NULL;
5009 }
5010
5011 return arvif_iter.arvif;
5012 }
5013
5014 int ath10k_mac_register(struct ath10k *ar)
5015 {
5016 struct ieee80211_supported_band *band;
5017 struct ieee80211_sta_vht_cap vht_cap;
5018 struct ieee80211_sta_ht_cap ht_cap;
5019 void *channels;
5020 int ret;
5021
5022 SET_IEEE80211_PERM_ADDR(ar->hw, ar->mac_addr);
5023
5024 SET_IEEE80211_DEV(ar->hw, ar->dev);
5025
5026 ht_cap = ath10k_get_ht_cap(ar);
5027 vht_cap = ath10k_create_vht_cap(ar);
5028
5029 if (ar->phy_capability & WHAL_WLAN_11G_CAPABILITY) {
5030 channels = kmemdup(ath10k_2ghz_channels,
5031 sizeof(ath10k_2ghz_channels),
5032 GFP_KERNEL);
5033 if (!channels) {
5034 ret = -ENOMEM;
5035 goto err_free;
5036 }
5037
5038 band = &ar->mac.sbands[IEEE80211_BAND_2GHZ];
5039 band->n_channels = ARRAY_SIZE(ath10k_2ghz_channels);
5040 band->channels = channels;
5041 band->n_bitrates = ath10k_g_rates_size;
5042 band->bitrates = ath10k_g_rates;
5043 band->ht_cap = ht_cap;
5044
5045 /* vht is not supported in 2.4 GHz */
5046
5047 ar->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = band;
5048 }
5049
5050 if (ar->phy_capability & WHAL_WLAN_11A_CAPABILITY) {
5051 channels = kmemdup(ath10k_5ghz_channels,
5052 sizeof(ath10k_5ghz_channels),
5053 GFP_KERNEL);
5054 if (!channels) {
5055 ret = -ENOMEM;
5056 goto err_free;
5057 }
5058
5059 band = &ar->mac.sbands[IEEE80211_BAND_5GHZ];
5060 band->n_channels = ARRAY_SIZE(ath10k_5ghz_channels);
5061 band->channels = channels;
5062 band->n_bitrates = ath10k_a_rates_size;
5063 band->bitrates = ath10k_a_rates;
5064 band->ht_cap = ht_cap;
5065 band->vht_cap = vht_cap;
5066 ar->hw->wiphy->bands[IEEE80211_BAND_5GHZ] = band;
5067 }
5068
5069 ar->hw->wiphy->interface_modes =
5070 BIT(NL80211_IFTYPE_STATION) |
5071 BIT(NL80211_IFTYPE_AP);
5072
5073 ar->hw->wiphy->available_antennas_rx = ar->supp_rx_chainmask;
5074 ar->hw->wiphy->available_antennas_tx = ar->supp_tx_chainmask;
5075
5076 if (!test_bit(ATH10K_FW_FEATURE_NO_P2P, ar->fw_features))
5077 ar->hw->wiphy->interface_modes |=
5078 BIT(NL80211_IFTYPE_P2P_CLIENT) |
5079 BIT(NL80211_IFTYPE_P2P_GO);
5080
5081 ar->hw->flags = IEEE80211_HW_SIGNAL_DBM |
5082 IEEE80211_HW_SUPPORTS_PS |
5083 IEEE80211_HW_SUPPORTS_DYNAMIC_PS |
5084 IEEE80211_HW_SUPPORTS_UAPSD |
5085 IEEE80211_HW_MFP_CAPABLE |
5086 IEEE80211_HW_REPORTS_TX_ACK_STATUS |
5087 IEEE80211_HW_HAS_RATE_CONTROL |
5088 IEEE80211_HW_AP_LINK_PS |
5089 IEEE80211_HW_SPECTRUM_MGMT;
5090
5091 ar->hw->wiphy->features |= NL80211_FEATURE_STATIC_SMPS;
5092
5093 if (ar->ht_cap_info & WMI_HT_CAP_DYNAMIC_SMPS)
5094 ar->hw->wiphy->features |= NL80211_FEATURE_DYNAMIC_SMPS;
5095
5096 if (ar->ht_cap_info & WMI_HT_CAP_ENABLED) {
5097 ar->hw->flags |= IEEE80211_HW_AMPDU_AGGREGATION;
5098 ar->hw->flags |= IEEE80211_HW_TX_AMPDU_SETUP_IN_HW;
5099 }
5100
5101 ar->hw->wiphy->max_scan_ssids = WLAN_SCAN_PARAMS_MAX_SSID;
5102 ar->hw->wiphy->max_scan_ie_len = WLAN_SCAN_PARAMS_MAX_IE_LEN;
5103
5104 ar->hw->vif_data_size = sizeof(struct ath10k_vif);
5105 ar->hw->sta_data_size = sizeof(struct ath10k_sta);
5106
5107 ar->hw->max_listen_interval = ATH10K_MAX_HW_LISTEN_INTERVAL;
5108
5109 ar->hw->wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
5110 ar->hw->wiphy->flags |= WIPHY_FLAG_HAS_CHANNEL_SWITCH;
5111 ar->hw->wiphy->max_remain_on_channel_duration = 5000;
5112
5113 ar->hw->wiphy->flags |= WIPHY_FLAG_AP_UAPSD;
5114 ar->hw->wiphy->features |= NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE;
5115
5116 /*
5117 * on LL hardware queues are managed entirely by the FW
5118 * so we only advertise to mac we can do the queues thing
5119 */
5120 ar->hw->queues = 4;
5121
5122 if (test_bit(ATH10K_FW_FEATURE_WMI_10X, ar->fw_features)) {
5123 ar->hw->wiphy->iface_combinations = ath10k_10x_if_comb;
5124 ar->hw->wiphy->n_iface_combinations =
5125 ARRAY_SIZE(ath10k_10x_if_comb);
5126 } else {
5127 ar->hw->wiphy->iface_combinations = ath10k_if_comb;
5128 ar->hw->wiphy->n_iface_combinations =
5129 ARRAY_SIZE(ath10k_if_comb);
5130
5131 ar->hw->wiphy->interface_modes |= BIT(NL80211_IFTYPE_ADHOC);
5132 }
5133
5134 ar->hw->netdev_features = NETIF_F_HW_CSUM;
5135
5136 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED)) {
5137 /* Init ath dfs pattern detector */
5138 ar->ath_common.debug_mask = ATH_DBG_DFS;
5139 ar->dfs_detector = dfs_pattern_detector_init(&ar->ath_common,
5140 NL80211_DFS_UNSET);
5141
5142 if (!ar->dfs_detector)
5143 ath10k_warn(ar, "failed to initialise DFS pattern detector\n");
5144 }
5145
5146 ret = ath_regd_init(&ar->ath_common.regulatory, ar->hw->wiphy,
5147 ath10k_reg_notifier);
5148 if (ret) {
5149 ath10k_err(ar, "failed to initialise regulatory: %i\n", ret);
5150 goto err_free;
5151 }
5152
5153 ret = ieee80211_register_hw(ar->hw);
5154 if (ret) {
5155 ath10k_err(ar, "failed to register ieee80211: %d\n", ret);
5156 goto err_free;
5157 }
5158
5159 if (!ath_is_world_regd(&ar->ath_common.regulatory)) {
5160 ret = regulatory_hint(ar->hw->wiphy,
5161 ar->ath_common.regulatory.alpha2);
5162 if (ret)
5163 goto err_unregister;
5164 }
5165
5166 return 0;
5167
5168 err_unregister:
5169 ieee80211_unregister_hw(ar->hw);
5170 err_free:
5171 kfree(ar->mac.sbands[IEEE80211_BAND_2GHZ].channels);
5172 kfree(ar->mac.sbands[IEEE80211_BAND_5GHZ].channels);
5173
5174 return ret;
5175 }
5176
5177 void ath10k_mac_unregister(struct ath10k *ar)
5178 {
5179 ieee80211_unregister_hw(ar->hw);
5180
5181 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector)
5182 ar->dfs_detector->exit(ar->dfs_detector);
5183
5184 kfree(ar->mac.sbands[IEEE80211_BAND_2GHZ].channels);
5185 kfree(ar->mac.sbands[IEEE80211_BAND_5GHZ].channels);
5186
5187 SET_IEEE80211_DEV(ar->hw, NULL);
5188 }
This page took 0.192069 seconds and 5 git commands to generate.