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