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