Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
[sfrench/cifs-2.6.git] / drivers / net / wireless / ath / ath10k / mac.c
1 /*
2  * Copyright (c) 2005-2011 Atheros Communications Inc.
3  * Copyright (c) 2011-2013 Qualcomm Atheros, Inc.
4  *
5  * Permission to use, copy, modify, and/or distribute this software for any
6  * purpose with or without fee is hereby granted, provided that the above
7  * copyright notice and this permission notice appear in all copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16  */
17
18 #include "mac.h"
19
20 #include <net/mac80211.h>
21 #include <linux/etherdevice.h>
22
23 #include "hif.h"
24 #include "core.h"
25 #include "debug.h"
26 #include "wmi.h"
27 #include "htt.h"
28 #include "txrx.h"
29 #include "testmode.h"
30 #include "wmi.h"
31 #include "wmi-ops.h"
32
33 /**********/
34 /* Crypto */
35 /**********/
36
37 static int ath10k_send_key(struct ath10k_vif *arvif,
38                            struct ieee80211_key_conf *key,
39                            enum set_key_cmd cmd,
40                            const u8 *macaddr, bool def_idx)
41 {
42         struct ath10k *ar = arvif->ar;
43         struct wmi_vdev_install_key_arg arg = {
44                 .vdev_id = arvif->vdev_id,
45                 .key_idx = key->keyidx,
46                 .key_len = key->keylen,
47                 .key_data = key->key,
48                 .macaddr = macaddr,
49         };
50
51         lockdep_assert_held(&arvif->ar->conf_mutex);
52
53         if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE)
54                 arg.key_flags = WMI_KEY_PAIRWISE;
55         else
56                 arg.key_flags = WMI_KEY_GROUP;
57
58         switch (key->cipher) {
59         case WLAN_CIPHER_SUITE_CCMP:
60                 arg.key_cipher = WMI_CIPHER_AES_CCM;
61                 key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV_MGMT;
62                 break;
63         case WLAN_CIPHER_SUITE_TKIP:
64                 arg.key_cipher = WMI_CIPHER_TKIP;
65                 arg.key_txmic_len = 8;
66                 arg.key_rxmic_len = 8;
67                 break;
68         case WLAN_CIPHER_SUITE_WEP40:
69         case WLAN_CIPHER_SUITE_WEP104:
70                 arg.key_cipher = WMI_CIPHER_WEP;
71                 /* AP/IBSS mode requires self-key to be groupwise
72                  * Otherwise pairwise key must be set */
73                 if (memcmp(macaddr, arvif->vif->addr, ETH_ALEN))
74                         arg.key_flags = WMI_KEY_PAIRWISE;
75
76                 if (def_idx)
77                         arg.key_flags |= WMI_KEY_TX_USAGE;
78                 break;
79         case WLAN_CIPHER_SUITE_AES_CMAC:
80                 /* this one needs to be done in software */
81                 return 1;
82         default:
83                 ath10k_warn(ar, "cipher %d is not supported\n", key->cipher);
84                 return -EOPNOTSUPP;
85         }
86
87         if (cmd == DISABLE_KEY) {
88                 arg.key_cipher = WMI_CIPHER_NONE;
89                 arg.key_data = NULL;
90         }
91
92         return ath10k_wmi_vdev_install_key(arvif->ar, &arg);
93 }
94
95 static int ath10k_install_key(struct ath10k_vif *arvif,
96                               struct ieee80211_key_conf *key,
97                               enum set_key_cmd cmd,
98                               const u8 *macaddr, bool def_idx)
99 {
100         struct ath10k *ar = arvif->ar;
101         int ret;
102
103         lockdep_assert_held(&ar->conf_mutex);
104
105         reinit_completion(&ar->install_key_done);
106
107         ret = ath10k_send_key(arvif, key, cmd, macaddr, def_idx);
108         if (ret)
109                 return ret;
110
111         ret = wait_for_completion_timeout(&ar->install_key_done, 3*HZ);
112         if (ret == 0)
113                 return -ETIMEDOUT;
114
115         return 0;
116 }
117
118 static int ath10k_install_peer_wep_keys(struct ath10k_vif *arvif,
119                                         const u8 *addr)
120 {
121         struct ath10k *ar = arvif->ar;
122         struct ath10k_peer *peer;
123         int ret;
124         int i;
125         bool def_idx;
126
127         lockdep_assert_held(&ar->conf_mutex);
128
129         spin_lock_bh(&ar->data_lock);
130         peer = ath10k_peer_find(ar, arvif->vdev_id, addr);
131         spin_unlock_bh(&ar->data_lock);
132
133         if (!peer)
134                 return -ENOENT;
135
136         for (i = 0; i < ARRAY_SIZE(arvif->wep_keys); i++) {
137                 if (arvif->wep_keys[i] == NULL)
138                         continue;
139                 /* set TX_USAGE flag for default key id */
140                 if (arvif->def_wep_key_idx == i)
141                         def_idx = true;
142                 else
143                         def_idx = false;
144
145                 ret = ath10k_install_key(arvif, arvif->wep_keys[i], SET_KEY,
146                                          addr, def_idx);
147                 if (ret)
148                         return ret;
149
150                 spin_lock_bh(&ar->data_lock);
151                 peer->keys[i] = arvif->wep_keys[i];
152                 spin_unlock_bh(&ar->data_lock);
153         }
154
155         return 0;
156 }
157
158 static int ath10k_clear_peer_keys(struct ath10k_vif *arvif,
159                                   const u8 *addr)
160 {
161         struct ath10k *ar = arvif->ar;
162         struct ath10k_peer *peer;
163         int first_errno = 0;
164         int ret;
165         int i;
166
167         lockdep_assert_held(&ar->conf_mutex);
168
169         spin_lock_bh(&ar->data_lock);
170         peer = ath10k_peer_find(ar, arvif->vdev_id, addr);
171         spin_unlock_bh(&ar->data_lock);
172
173         if (!peer)
174                 return -ENOENT;
175
176         for (i = 0; i < ARRAY_SIZE(peer->keys); i++) {
177                 if (peer->keys[i] == NULL)
178                         continue;
179
180                 /* key flags are not required to delete the key */
181                 ret = ath10k_install_key(arvif, peer->keys[i],
182                                          DISABLE_KEY, addr, false);
183                 if (ret && first_errno == 0)
184                         first_errno = ret;
185
186                 if (ret)
187                         ath10k_warn(ar, "failed to remove peer wep key %d: %d\n",
188                                     i, ret);
189
190                 spin_lock_bh(&ar->data_lock);
191                 peer->keys[i] = NULL;
192                 spin_unlock_bh(&ar->data_lock);
193         }
194
195         return first_errno;
196 }
197
198 bool ath10k_mac_is_peer_wep_key_set(struct ath10k *ar, const u8 *addr,
199                                     u8 keyidx)
200 {
201         struct ath10k_peer *peer;
202         int i;
203
204         lockdep_assert_held(&ar->data_lock);
205
206         /* We don't know which vdev this peer belongs to,
207          * since WMI doesn't give us that information.
208          *
209          * FIXME: multi-bss needs to be handled.
210          */
211         peer = ath10k_peer_find(ar, 0, addr);
212         if (!peer)
213                 return false;
214
215         for (i = 0; i < ARRAY_SIZE(peer->keys); i++) {
216                 if (peer->keys[i] && peer->keys[i]->keyidx == keyidx)
217                         return true;
218         }
219
220         return false;
221 }
222
223 static int ath10k_clear_vdev_key(struct ath10k_vif *arvif,
224                                  struct ieee80211_key_conf *key)
225 {
226         struct ath10k *ar = arvif->ar;
227         struct ath10k_peer *peer;
228         u8 addr[ETH_ALEN];
229         int first_errno = 0;
230         int ret;
231         int i;
232
233         lockdep_assert_held(&ar->conf_mutex);
234
235         for (;;) {
236                 /* since ath10k_install_key we can't hold data_lock all the
237                  * time, so we try to remove the keys incrementally */
238                 spin_lock_bh(&ar->data_lock);
239                 i = 0;
240                 list_for_each_entry(peer, &ar->peers, list) {
241                         for (i = 0; i < ARRAY_SIZE(peer->keys); i++) {
242                                 if (peer->keys[i] == key) {
243                                         ether_addr_copy(addr, peer->addr);
244                                         peer->keys[i] = NULL;
245                                         break;
246                                 }
247                         }
248
249                         if (i < ARRAY_SIZE(peer->keys))
250                                 break;
251                 }
252                 spin_unlock_bh(&ar->data_lock);
253
254                 if (i == ARRAY_SIZE(peer->keys))
255                         break;
256                 /* key flags are not required to delete the key */
257                 ret = ath10k_install_key(arvif, key, DISABLE_KEY, addr, false);
258                 if (ret && first_errno == 0)
259                         first_errno = ret;
260
261                 if (ret)
262                         ath10k_warn(ar, "failed to remove key for %pM: %d\n",
263                                     addr, ret);
264         }
265
266         return first_errno;
267 }
268
269 /*********************/
270 /* General utilities */
271 /*********************/
272
273 static inline enum wmi_phy_mode
274 chan_to_phymode(const struct cfg80211_chan_def *chandef)
275 {
276         enum wmi_phy_mode phymode = MODE_UNKNOWN;
277
278         switch (chandef->chan->band) {
279         case IEEE80211_BAND_2GHZ:
280                 switch (chandef->width) {
281                 case NL80211_CHAN_WIDTH_20_NOHT:
282                         if (chandef->chan->flags & IEEE80211_CHAN_NO_OFDM)
283                                 phymode = MODE_11B;
284                         else
285                                 phymode = MODE_11G;
286                         break;
287                 case NL80211_CHAN_WIDTH_20:
288                         phymode = MODE_11NG_HT20;
289                         break;
290                 case NL80211_CHAN_WIDTH_40:
291                         phymode = MODE_11NG_HT40;
292                         break;
293                 case NL80211_CHAN_WIDTH_5:
294                 case NL80211_CHAN_WIDTH_10:
295                 case NL80211_CHAN_WIDTH_80:
296                 case NL80211_CHAN_WIDTH_80P80:
297                 case NL80211_CHAN_WIDTH_160:
298                         phymode = MODE_UNKNOWN;
299                         break;
300                 }
301                 break;
302         case IEEE80211_BAND_5GHZ:
303                 switch (chandef->width) {
304                 case NL80211_CHAN_WIDTH_20_NOHT:
305                         phymode = MODE_11A;
306                         break;
307                 case NL80211_CHAN_WIDTH_20:
308                         phymode = MODE_11NA_HT20;
309                         break;
310                 case NL80211_CHAN_WIDTH_40:
311                         phymode = MODE_11NA_HT40;
312                         break;
313                 case NL80211_CHAN_WIDTH_80:
314                         phymode = MODE_11AC_VHT80;
315                         break;
316                 case NL80211_CHAN_WIDTH_5:
317                 case NL80211_CHAN_WIDTH_10:
318                 case NL80211_CHAN_WIDTH_80P80:
319                 case NL80211_CHAN_WIDTH_160:
320                         phymode = MODE_UNKNOWN;
321                         break;
322                 }
323                 break;
324         default:
325                 break;
326         }
327
328         WARN_ON(phymode == MODE_UNKNOWN);
329         return phymode;
330 }
331
332 static u8 ath10k_parse_mpdudensity(u8 mpdudensity)
333 {
334 /*
335  * 802.11n D2.0 defined values for "Minimum MPDU Start Spacing":
336  *   0 for no restriction
337  *   1 for 1/4 us
338  *   2 for 1/2 us
339  *   3 for 1 us
340  *   4 for 2 us
341  *   5 for 4 us
342  *   6 for 8 us
343  *   7 for 16 us
344  */
345         switch (mpdudensity) {
346         case 0:
347                 return 0;
348         case 1:
349         case 2:
350         case 3:
351         /* Our lower layer calculations limit our precision to
352            1 microsecond */
353                 return 1;
354         case 4:
355                 return 2;
356         case 5:
357                 return 4;
358         case 6:
359                 return 8;
360         case 7:
361                 return 16;
362         default:
363                 return 0;
364         }
365 }
366
367 static int ath10k_peer_create(struct ath10k *ar, u32 vdev_id, const u8 *addr)
368 {
369         int ret;
370
371         lockdep_assert_held(&ar->conf_mutex);
372
373         if (ar->num_peers >= ar->max_num_peers)
374                 return -ENOBUFS;
375
376         ret = ath10k_wmi_peer_create(ar, vdev_id, addr);
377         if (ret) {
378                 ath10k_warn(ar, "failed to create wmi peer %pM on vdev %i: %i\n",
379                             addr, vdev_id, ret);
380                 return ret;
381         }
382
383         ret = ath10k_wait_for_peer_created(ar, vdev_id, addr);
384         if (ret) {
385                 ath10k_warn(ar, "failed to wait for created wmi peer %pM on vdev %i: %i\n",
386                             addr, vdev_id, ret);
387                 return ret;
388         }
389
390         ar->num_peers++;
391
392         return 0;
393 }
394
395 static int ath10k_mac_set_kickout(struct ath10k_vif *arvif)
396 {
397         struct ath10k *ar = arvif->ar;
398         u32 param;
399         int ret;
400
401         param = ar->wmi.pdev_param->sta_kickout_th;
402         ret = ath10k_wmi_pdev_set_param(ar, param,
403                                         ATH10K_KICKOUT_THRESHOLD);
404         if (ret) {
405                 ath10k_warn(ar, "failed to set kickout threshold on vdev %i: %d\n",
406                             arvif->vdev_id, ret);
407                 return ret;
408         }
409
410         param = ar->wmi.vdev_param->ap_keepalive_min_idle_inactive_time_secs;
411         ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param,
412                                         ATH10K_KEEPALIVE_MIN_IDLE);
413         if (ret) {
414                 ath10k_warn(ar, "failed to set keepalive minimum idle time on vdev %i: %d\n",
415                             arvif->vdev_id, ret);
416                 return ret;
417         }
418
419         param = ar->wmi.vdev_param->ap_keepalive_max_idle_inactive_time_secs;
420         ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param,
421                                         ATH10K_KEEPALIVE_MAX_IDLE);
422         if (ret) {
423                 ath10k_warn(ar, "failed to set keepalive maximum idle time on vdev %i: %d\n",
424                             arvif->vdev_id, ret);
425                 return ret;
426         }
427
428         param = ar->wmi.vdev_param->ap_keepalive_max_unresponsive_time_secs;
429         ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param,
430                                         ATH10K_KEEPALIVE_MAX_UNRESPONSIVE);
431         if (ret) {
432                 ath10k_warn(ar, "failed to set keepalive maximum unresponsive time on vdev %i: %d\n",
433                             arvif->vdev_id, ret);
434                 return ret;
435         }
436
437         return 0;
438 }
439
440 static int ath10k_mac_set_rts(struct ath10k_vif *arvif, u32 value)
441 {
442         struct ath10k *ar = arvif->ar;
443         u32 vdev_param;
444
445         vdev_param = ar->wmi.vdev_param->rts_threshold;
446         return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, value);
447 }
448
449 static int ath10k_mac_set_frag(struct ath10k_vif *arvif, u32 value)
450 {
451         struct ath10k *ar = arvif->ar;
452         u32 vdev_param;
453
454         if (value != 0xFFFFFFFF)
455                 value = clamp_t(u32, arvif->ar->hw->wiphy->frag_threshold,
456                                 ATH10K_FRAGMT_THRESHOLD_MIN,
457                                 ATH10K_FRAGMT_THRESHOLD_MAX);
458
459         vdev_param = ar->wmi.vdev_param->fragmentation_threshold;
460         return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, value);
461 }
462
463 static int ath10k_peer_delete(struct ath10k *ar, u32 vdev_id, const u8 *addr)
464 {
465         int ret;
466
467         lockdep_assert_held(&ar->conf_mutex);
468
469         ret = ath10k_wmi_peer_delete(ar, vdev_id, addr);
470         if (ret)
471                 return ret;
472
473         ret = ath10k_wait_for_peer_deleted(ar, vdev_id, addr);
474         if (ret)
475                 return ret;
476
477         ar->num_peers--;
478
479         return 0;
480 }
481
482 static void ath10k_peer_cleanup(struct ath10k *ar, u32 vdev_id)
483 {
484         struct ath10k_peer *peer, *tmp;
485
486         lockdep_assert_held(&ar->conf_mutex);
487
488         spin_lock_bh(&ar->data_lock);
489         list_for_each_entry_safe(peer, tmp, &ar->peers, list) {
490                 if (peer->vdev_id != vdev_id)
491                         continue;
492
493                 ath10k_warn(ar, "removing stale peer %pM from vdev_id %d\n",
494                             peer->addr, vdev_id);
495
496                 list_del(&peer->list);
497                 kfree(peer);
498                 ar->num_peers--;
499         }
500         spin_unlock_bh(&ar->data_lock);
501 }
502
503 static void ath10k_peer_cleanup_all(struct ath10k *ar)
504 {
505         struct ath10k_peer *peer, *tmp;
506
507         lockdep_assert_held(&ar->conf_mutex);
508
509         spin_lock_bh(&ar->data_lock);
510         list_for_each_entry_safe(peer, tmp, &ar->peers, list) {
511                 list_del(&peer->list);
512                 kfree(peer);
513         }
514         spin_unlock_bh(&ar->data_lock);
515
516         ar->num_peers = 0;
517         ar->num_stations = 0;
518 }
519
520 /************************/
521 /* Interface management */
522 /************************/
523
524 void ath10k_mac_vif_beacon_free(struct ath10k_vif *arvif)
525 {
526         struct ath10k *ar = arvif->ar;
527
528         lockdep_assert_held(&ar->data_lock);
529
530         if (!arvif->beacon)
531                 return;
532
533         if (!arvif->beacon_buf)
534                 dma_unmap_single(ar->dev, ATH10K_SKB_CB(arvif->beacon)->paddr,
535                                  arvif->beacon->len, DMA_TO_DEVICE);
536
537         if (WARN_ON(arvif->beacon_state != ATH10K_BEACON_SCHEDULED &&
538                     arvif->beacon_state != ATH10K_BEACON_SENT))
539                 return;
540
541         dev_kfree_skb_any(arvif->beacon);
542
543         arvif->beacon = NULL;
544         arvif->beacon_state = ATH10K_BEACON_SCHEDULED;
545 }
546
547 static void ath10k_mac_vif_beacon_cleanup(struct ath10k_vif *arvif)
548 {
549         struct ath10k *ar = arvif->ar;
550
551         lockdep_assert_held(&ar->data_lock);
552
553         ath10k_mac_vif_beacon_free(arvif);
554
555         if (arvif->beacon_buf) {
556                 dma_free_coherent(ar->dev, IEEE80211_MAX_FRAME_LEN,
557                                   arvif->beacon_buf, arvif->beacon_paddr);
558                 arvif->beacon_buf = NULL;
559         }
560 }
561
562 static inline int ath10k_vdev_setup_sync(struct ath10k *ar)
563 {
564         int ret;
565
566         lockdep_assert_held(&ar->conf_mutex);
567
568         if (test_bit(ATH10K_FLAG_CRASH_FLUSH, &ar->dev_flags))
569                 return -ESHUTDOWN;
570
571         ret = wait_for_completion_timeout(&ar->vdev_setup_done,
572                                           ATH10K_VDEV_SETUP_TIMEOUT_HZ);
573         if (ret == 0)
574                 return -ETIMEDOUT;
575
576         return 0;
577 }
578
579 static int ath10k_monitor_vdev_start(struct ath10k *ar, int vdev_id)
580 {
581         struct cfg80211_chan_def *chandef = &ar->chandef;
582         struct ieee80211_channel *channel = chandef->chan;
583         struct wmi_vdev_start_request_arg arg = {};
584         int ret = 0;
585
586         lockdep_assert_held(&ar->conf_mutex);
587
588         arg.vdev_id = vdev_id;
589         arg.channel.freq = channel->center_freq;
590         arg.channel.band_center_freq1 = chandef->center_freq1;
591
592         /* TODO setup this dynamically, what in case we
593            don't have any vifs? */
594         arg.channel.mode = chan_to_phymode(chandef);
595         arg.channel.chan_radar =
596                         !!(channel->flags & IEEE80211_CHAN_RADAR);
597
598         arg.channel.min_power = 0;
599         arg.channel.max_power = channel->max_power * 2;
600         arg.channel.max_reg_power = channel->max_reg_power * 2;
601         arg.channel.max_antenna_gain = channel->max_antenna_gain * 2;
602
603         reinit_completion(&ar->vdev_setup_done);
604
605         ret = ath10k_wmi_vdev_start(ar, &arg);
606         if (ret) {
607                 ath10k_warn(ar, "failed to request monitor vdev %i start: %d\n",
608                             vdev_id, ret);
609                 return ret;
610         }
611
612         ret = ath10k_vdev_setup_sync(ar);
613         if (ret) {
614                 ath10k_warn(ar, "failed to synchronize setup for monitor vdev %i 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
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
669 static int ath10k_monitor_vdev_create(struct ath10k *ar)
670 {
671         int bit, ret = 0;
672
673         lockdep_assert_held(&ar->conf_mutex);
674
675         if (ar->free_vdev_map == 0) {
676                 ath10k_warn(ar, "failed to find free vdev id for monitor vdev\n");
677                 return -ENOMEM;
678         }
679
680         bit = __ffs64(ar->free_vdev_map);
681
682         ar->monitor_vdev_id = bit;
683
684         ret = ath10k_wmi_vdev_create(ar, ar->monitor_vdev_id,
685                                      WMI_VDEV_TYPE_MONITOR,
686                                      0, ar->mac_addr);
687         if (ret) {
688                 ath10k_warn(ar, "failed to request monitor vdev %i creation: %d\n",
689                             ar->monitor_vdev_id, ret);
690                 return ret;
691         }
692
693         ar->free_vdev_map &= ~(1LL << ar->monitor_vdev_id);
694         ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %d created\n",
695                    ar->monitor_vdev_id);
696
697         return 0;
698 }
699
700 static int ath10k_monitor_vdev_delete(struct ath10k *ar)
701 {
702         int ret = 0;
703
704         lockdep_assert_held(&ar->conf_mutex);
705
706         ret = ath10k_wmi_vdev_delete(ar, ar->monitor_vdev_id);
707         if (ret) {
708                 ath10k_warn(ar, "failed to request wmi monitor vdev %i removal: %d\n",
709                             ar->monitor_vdev_id, ret);
710                 return ret;
711         }
712
713         ar->free_vdev_map |= 1LL << ar->monitor_vdev_id;
714
715         ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %d deleted\n",
716                    ar->monitor_vdev_id);
717         return ret;
718 }
719
720 static int ath10k_monitor_start(struct ath10k *ar)
721 {
722         int ret;
723
724         lockdep_assert_held(&ar->conf_mutex);
725
726         ret = ath10k_monitor_vdev_create(ar);
727         if (ret) {
728                 ath10k_warn(ar, "failed to create monitor vdev: %d\n", ret);
729                 return ret;
730         }
731
732         ret = ath10k_monitor_vdev_start(ar, ar->monitor_vdev_id);
733         if (ret) {
734                 ath10k_warn(ar, "failed to start monitor vdev: %d\n", ret);
735                 ath10k_monitor_vdev_delete(ar);
736                 return ret;
737         }
738
739         ar->monitor_started = true;
740         ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor started\n");
741
742         return 0;
743 }
744
745 static int ath10k_monitor_stop(struct ath10k *ar)
746 {
747         int ret;
748
749         lockdep_assert_held(&ar->conf_mutex);
750
751         ret = ath10k_monitor_vdev_stop(ar);
752         if (ret) {
753                 ath10k_warn(ar, "failed to stop monitor vdev: %d\n", ret);
754                 return ret;
755         }
756
757         ret = ath10k_monitor_vdev_delete(ar);
758         if (ret) {
759                 ath10k_warn(ar, "failed to delete monitor vdev: %d\n", ret);
760                 return ret;
761         }
762
763         ar->monitor_started = false;
764         ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor stopped\n");
765
766         return 0;
767 }
768
769 static int ath10k_monitor_recalc(struct ath10k *ar)
770 {
771         bool should_start;
772
773         lockdep_assert_held(&ar->conf_mutex);
774
775         should_start = ar->monitor ||
776                        ar->filter_flags & FIF_PROMISC_IN_BSS ||
777                        test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
778
779         ath10k_dbg(ar, ATH10K_DBG_MAC,
780                    "mac monitor recalc started? %d should? %d\n",
781                    ar->monitor_started, should_start);
782
783         if (should_start == ar->monitor_started)
784                 return 0;
785
786         if (should_start)
787                 return ath10k_monitor_start(ar);
788
789         return ath10k_monitor_stop(ar);
790 }
791
792 static int ath10k_recalc_rtscts_prot(struct ath10k_vif *arvif)
793 {
794         struct ath10k *ar = arvif->ar;
795         u32 vdev_param, rts_cts = 0;
796
797         lockdep_assert_held(&ar->conf_mutex);
798
799         vdev_param = ar->wmi.vdev_param->enable_rtscts;
800
801         if (arvif->use_cts_prot || arvif->num_legacy_stations > 0)
802                 rts_cts |= SM(WMI_RTSCTS_ENABLED, WMI_RTSCTS_SET);
803
804         if (arvif->num_legacy_stations > 0)
805                 rts_cts |= SM(WMI_RTSCTS_ACROSS_SW_RETRIES,
806                               WMI_RTSCTS_PROFILE);
807
808         return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
809                                          rts_cts);
810 }
811
812 static int ath10k_start_cac(struct ath10k *ar)
813 {
814         int ret;
815
816         lockdep_assert_held(&ar->conf_mutex);
817
818         set_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
819
820         ret = ath10k_monitor_recalc(ar);
821         if (ret) {
822                 ath10k_warn(ar, "failed to start monitor (cac): %d\n", ret);
823                 clear_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
824                 return ret;
825         }
826
827         ath10k_dbg(ar, ATH10K_DBG_MAC, "mac cac start monitor vdev %d\n",
828                    ar->monitor_vdev_id);
829
830         return 0;
831 }
832
833 static int ath10k_stop_cac(struct ath10k *ar)
834 {
835         lockdep_assert_held(&ar->conf_mutex);
836
837         /* CAC is not running - do nothing */
838         if (!test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags))
839                 return 0;
840
841         clear_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
842         ath10k_monitor_stop(ar);
843
844         ath10k_dbg(ar, ATH10K_DBG_MAC, "mac cac finished\n");
845
846         return 0;
847 }
848
849 static void ath10k_recalc_radar_detection(struct ath10k *ar)
850 {
851         int ret;
852
853         lockdep_assert_held(&ar->conf_mutex);
854
855         ath10k_stop_cac(ar);
856
857         if (!ar->radar_enabled)
858                 return;
859
860         if (ar->num_started_vdevs > 0)
861                 return;
862
863         ret = ath10k_start_cac(ar);
864         if (ret) {
865                 /*
866                  * Not possible to start CAC on current channel so starting
867                  * radiation is not allowed, make this channel DFS_UNAVAILABLE
868                  * by indicating that radar was detected.
869                  */
870                 ath10k_warn(ar, "failed to start CAC: %d\n", ret);
871                 ieee80211_radar_detected(ar->hw);
872         }
873 }
874
875 static int ath10k_vdev_start_restart(struct ath10k_vif *arvif, bool restart)
876 {
877         struct ath10k *ar = arvif->ar;
878         struct cfg80211_chan_def *chandef = &ar->chandef;
879         struct wmi_vdev_start_request_arg arg = {};
880         int ret = 0;
881
882         lockdep_assert_held(&ar->conf_mutex);
883
884         reinit_completion(&ar->vdev_setup_done);
885
886         arg.vdev_id = arvif->vdev_id;
887         arg.dtim_period = arvif->dtim_period;
888         arg.bcn_intval = arvif->beacon_interval;
889
890         arg.channel.freq = chandef->chan->center_freq;
891         arg.channel.band_center_freq1 = chandef->center_freq1;
892         arg.channel.mode = chan_to_phymode(chandef);
893
894         arg.channel.min_power = 0;
895         arg.channel.max_power = chandef->chan->max_power * 2;
896         arg.channel.max_reg_power = chandef->chan->max_reg_power * 2;
897         arg.channel.max_antenna_gain = chandef->chan->max_antenna_gain * 2;
898
899         if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
900                 arg.ssid = arvif->u.ap.ssid;
901                 arg.ssid_len = arvif->u.ap.ssid_len;
902                 arg.hidden_ssid = arvif->u.ap.hidden_ssid;
903
904                 /* For now allow DFS for AP mode */
905                 arg.channel.chan_radar =
906                         !!(chandef->chan->flags & IEEE80211_CHAN_RADAR);
907         } else if (arvif->vdev_type == WMI_VDEV_TYPE_IBSS) {
908                 arg.ssid = arvif->vif->bss_conf.ssid;
909                 arg.ssid_len = arvif->vif->bss_conf.ssid_len;
910         }
911
912         ath10k_dbg(ar, ATH10K_DBG_MAC,
913                    "mac vdev %d start center_freq %d phymode %s\n",
914                    arg.vdev_id, arg.channel.freq,
915                    ath10k_wmi_phymode_str(arg.channel.mode));
916
917         if (restart)
918                 ret = ath10k_wmi_vdev_restart(ar, &arg);
919         else
920                 ret = ath10k_wmi_vdev_start(ar, &arg);
921
922         if (ret) {
923                 ath10k_warn(ar, "failed to start WMI vdev %i: %d\n",
924                             arg.vdev_id, ret);
925                 return ret;
926         }
927
928         ret = ath10k_vdev_setup_sync(ar);
929         if (ret) {
930                 ath10k_warn(ar,
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
942 static int ath10k_vdev_start(struct ath10k_vif *arvif)
943 {
944         return ath10k_vdev_start_restart(arvif, false);
945 }
946
947 static int ath10k_vdev_restart(struct ath10k_vif *arvif)
948 {
949         return ath10k_vdev_start_restart(arvif, true);
950 }
951
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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 */
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
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
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
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
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
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
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
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
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
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  */
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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. */
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
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
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
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
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
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
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
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
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
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
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
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
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
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
3184 static u32 get_nss_from_chainmask(u16 chain_mask)
3185 {
3186         if ((chain_mask & 0x15) == 0x15)
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  */
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         if (ar->cfg_tx_chainmask) {
3333                 u16 nss = get_nss_from_chainmask(ar->cfg_tx_chainmask);
3334
3335                 vdev_param = ar->wmi.vdev_param->nss;
3336                 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
3337                                                 nss);
3338                 if (ret) {
3339                         ath10k_warn(ar, "failed to set vdev %i chainmask 0x%x, nss %i: %d\n",
3340                                     arvif->vdev_id, ar->cfg_tx_chainmask, nss,
3341                                     ret);
3342                         goto err_vdev_delete;
3343                 }
3344         }
3345
3346         if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
3347                 ret = ath10k_peer_create(ar, arvif->vdev_id, vif->addr);
3348                 if (ret) {
3349                         ath10k_warn(ar, "failed to create vdev %i peer for AP: %d\n",
3350                                     arvif->vdev_id, ret);
3351                         goto err_vdev_delete;
3352                 }
3353
3354                 ret = ath10k_mac_set_kickout(arvif);
3355                 if (ret) {
3356                         ath10k_warn(ar, "failed to set vdev %i kickout parameters: %d\n",
3357                                     arvif->vdev_id, ret);
3358                         goto err_peer_delete;
3359                 }
3360         }
3361
3362         if (arvif->vdev_type == WMI_VDEV_TYPE_STA) {
3363                 param = WMI_STA_PS_PARAM_RX_WAKE_POLICY;
3364                 value = WMI_STA_PS_RX_WAKE_POLICY_WAKE;
3365                 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
3366                                                   param, value);
3367                 if (ret) {
3368                         ath10k_warn(ar, "failed to set vdev %i RX wake policy: %d\n",
3369                                     arvif->vdev_id, ret);
3370                         goto err_peer_delete;
3371                 }
3372
3373                 ret = ath10k_mac_vif_recalc_ps_wake_threshold(arvif);
3374                 if (ret) {
3375                         ath10k_warn(ar, "failed to recalc ps wake threshold on vdev %i: %d\n",
3376                                     arvif->vdev_id, ret);
3377                         goto err_peer_delete;
3378                 }
3379
3380                 ret = ath10k_mac_vif_recalc_ps_poll_count(arvif);
3381                 if (ret) {
3382                         ath10k_warn(ar, "failed to recalc ps poll count on vdev %i: %d\n",
3383                                     arvif->vdev_id, ret);
3384                         goto err_peer_delete;
3385                 }
3386         }
3387
3388         ret = ath10k_mac_set_rts(arvif, ar->hw->wiphy->rts_threshold);
3389         if (ret) {
3390                 ath10k_warn(ar, "failed to set rts threshold for vdev %d: %d\n",
3391                             arvif->vdev_id, ret);
3392                 goto err_peer_delete;
3393         }
3394
3395         ret = ath10k_mac_set_frag(arvif, ar->hw->wiphy->frag_threshold);
3396         if (ret) {
3397                 ath10k_warn(ar, "failed to set frag threshold for vdev %d: %d\n",
3398                             arvif->vdev_id, ret);
3399                 goto err_peer_delete;
3400         }
3401
3402         arvif->txpower = vif->bss_conf.txpower;
3403         ret = ath10k_mac_txpower_recalc(ar);
3404         if (ret) {
3405                 ath10k_warn(ar, "failed to recalc tx power: %d\n", ret);
3406                 goto err_peer_delete;
3407         }
3408
3409         mutex_unlock(&ar->conf_mutex);
3410         return 0;
3411
3412 err_peer_delete:
3413         if (arvif->vdev_type == WMI_VDEV_TYPE_AP)
3414                 ath10k_wmi_peer_delete(ar, arvif->vdev_id, vif->addr);
3415
3416 err_vdev_delete:
3417         ath10k_wmi_vdev_delete(ar, arvif->vdev_id);
3418         ar->free_vdev_map |= 1LL << arvif->vdev_id;
3419         list_del(&arvif->list);
3420
3421 err:
3422         if (arvif->beacon_buf) {
3423                 dma_free_coherent(ar->dev, IEEE80211_MAX_FRAME_LEN,
3424                                   arvif->beacon_buf, arvif->beacon_paddr);
3425                 arvif->beacon_buf = NULL;
3426         }
3427
3428         mutex_unlock(&ar->conf_mutex);
3429
3430         return ret;
3431 }
3432
3433 static void ath10k_remove_interface(struct ieee80211_hw *hw,
3434                                     struct ieee80211_vif *vif)
3435 {
3436         struct ath10k *ar = hw->priv;
3437         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3438         int ret;
3439
3440         mutex_lock(&ar->conf_mutex);
3441
3442         spin_lock_bh(&ar->data_lock);
3443         ath10k_mac_vif_beacon_cleanup(arvif);
3444         spin_unlock_bh(&ar->data_lock);
3445
3446         ret = ath10k_spectral_vif_stop(arvif);
3447         if (ret)
3448                 ath10k_warn(ar, "failed to stop spectral for vdev %i: %d\n",
3449                             arvif->vdev_id, ret);
3450
3451         ar->free_vdev_map |= 1LL << arvif->vdev_id;
3452         list_del(&arvif->list);
3453
3454         if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
3455                 ret = ath10k_wmi_peer_delete(arvif->ar, arvif->vdev_id,
3456                                              vif->addr);
3457                 if (ret)
3458                         ath10k_warn(ar, "failed to submit AP self-peer removal on vdev %i: %d\n",
3459                                     arvif->vdev_id, ret);
3460
3461                 kfree(arvif->u.ap.noa_data);
3462         }
3463
3464         ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %i delete (remove interface)\n",
3465                    arvif->vdev_id);
3466
3467         ret = ath10k_wmi_vdev_delete(ar, arvif->vdev_id);
3468         if (ret)
3469                 ath10k_warn(ar, "failed to delete WMI vdev %i: %d\n",
3470                             arvif->vdev_id, ret);
3471
3472         /* Some firmware revisions don't notify host about self-peer removal
3473          * until after associated vdev is deleted.
3474          */
3475         if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
3476                 ret = ath10k_wait_for_peer_deleted(ar, arvif->vdev_id,
3477                                                    vif->addr);
3478                 if (ret)
3479                         ath10k_warn(ar, "failed to remove AP self-peer on vdev %i: %d\n",
3480                                     arvif->vdev_id, ret);
3481
3482                 spin_lock_bh(&ar->data_lock);
3483                 ar->num_peers--;
3484                 spin_unlock_bh(&ar->data_lock);
3485         }
3486
3487         ath10k_peer_cleanup(ar, arvif->vdev_id);
3488
3489         mutex_unlock(&ar->conf_mutex);
3490 }
3491
3492 /*
3493  * FIXME: Has to be verified.
3494  */
3495 #define SUPPORTED_FILTERS                       \
3496         (FIF_PROMISC_IN_BSS |                   \
3497         FIF_ALLMULTI |                          \
3498         FIF_CONTROL |                           \
3499         FIF_PSPOLL |                            \
3500         FIF_OTHER_BSS |                         \
3501         FIF_BCN_PRBRESP_PROMISC |               \
3502         FIF_PROBE_REQ |                         \
3503         FIF_FCSFAIL)
3504
3505 static void ath10k_configure_filter(struct ieee80211_hw *hw,
3506                                     unsigned int changed_flags,
3507                                     unsigned int *total_flags,
3508                                     u64 multicast)
3509 {
3510         struct ath10k *ar = hw->priv;
3511         int ret;
3512
3513         mutex_lock(&ar->conf_mutex);
3514
3515         changed_flags &= SUPPORTED_FILTERS;
3516         *total_flags &= SUPPORTED_FILTERS;
3517         ar->filter_flags = *total_flags;
3518
3519         ret = ath10k_monitor_recalc(ar);
3520         if (ret)
3521                 ath10k_warn(ar, "failed to recalc montior: %d\n", ret);
3522
3523         mutex_unlock(&ar->conf_mutex);
3524 }
3525
3526 static void ath10k_bss_info_changed(struct ieee80211_hw *hw,
3527                                     struct ieee80211_vif *vif,
3528                                     struct ieee80211_bss_conf *info,
3529                                     u32 changed)
3530 {
3531         struct ath10k *ar = hw->priv;
3532         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3533         int ret = 0;
3534         u32 vdev_param, pdev_param, slottime, preamble;
3535
3536         mutex_lock(&ar->conf_mutex);
3537
3538         if (changed & BSS_CHANGED_IBSS)
3539                 ath10k_control_ibss(arvif, info, vif->addr);
3540
3541         if (changed & BSS_CHANGED_BEACON_INT) {
3542                 arvif->beacon_interval = info->beacon_int;
3543                 vdev_param = ar->wmi.vdev_param->beacon_interval;
3544                 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
3545                                                 arvif->beacon_interval);
3546                 ath10k_dbg(ar, ATH10K_DBG_MAC,
3547                            "mac vdev %d beacon_interval %d\n",
3548                            arvif->vdev_id, arvif->beacon_interval);
3549
3550                 if (ret)
3551                         ath10k_warn(ar, "failed to set beacon interval for vdev %d: %i\n",
3552                                     arvif->vdev_id, ret);
3553         }
3554
3555         if (changed & BSS_CHANGED_BEACON) {
3556                 ath10k_dbg(ar, ATH10K_DBG_MAC,
3557                            "vdev %d set beacon tx mode to staggered\n",
3558                            arvif->vdev_id);
3559
3560                 pdev_param = ar->wmi.pdev_param->beacon_tx_mode;
3561                 ret = ath10k_wmi_pdev_set_param(ar, pdev_param,
3562                                                 WMI_BEACON_STAGGERED_MODE);
3563                 if (ret)
3564                         ath10k_warn(ar, "failed to set beacon mode for vdev %d: %i\n",
3565                                     arvif->vdev_id, ret);
3566
3567                 ret = ath10k_mac_setup_bcn_tmpl(arvif);
3568                 if (ret)
3569                         ath10k_warn(ar, "failed to update beacon template: %d\n",
3570                                     ret);
3571         }
3572
3573         if (changed & BSS_CHANGED_AP_PROBE_RESP) {
3574                 ret = ath10k_mac_setup_prb_tmpl(arvif);
3575                 if (ret)
3576                         ath10k_warn(ar, "failed to setup probe resp template on vdev %i: %d\n",
3577                                     arvif->vdev_id, ret);
3578         }
3579
3580         if (changed & (BSS_CHANGED_BEACON_INFO | BSS_CHANGED_BEACON)) {
3581                 arvif->dtim_period = info->dtim_period;
3582
3583                 ath10k_dbg(ar, ATH10K_DBG_MAC,
3584                            "mac vdev %d dtim_period %d\n",
3585                            arvif->vdev_id, arvif->dtim_period);
3586
3587                 vdev_param = ar->wmi.vdev_param->dtim_period;
3588                 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
3589                                                 arvif->dtim_period);
3590                 if (ret)
3591                         ath10k_warn(ar, "failed to set dtim period for vdev %d: %i\n",
3592                                     arvif->vdev_id, ret);
3593         }
3594
3595         if (changed & BSS_CHANGED_SSID &&
3596             vif->type == NL80211_IFTYPE_AP) {
3597                 arvif->u.ap.ssid_len = info->ssid_len;
3598                 if (info->ssid_len)
3599                         memcpy(arvif->u.ap.ssid, info->ssid, info->ssid_len);
3600                 arvif->u.ap.hidden_ssid = info->hidden_ssid;
3601         }
3602
3603         if (changed & BSS_CHANGED_BSSID && !is_zero_ether_addr(info->bssid))
3604                 ether_addr_copy(arvif->bssid, info->bssid);
3605
3606         if (changed & BSS_CHANGED_BEACON_ENABLED)
3607                 ath10k_control_beaconing(arvif, info);
3608
3609         if (changed & BSS_CHANGED_ERP_CTS_PROT) {
3610                 arvif->use_cts_prot = info->use_cts_prot;
3611                 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d cts_prot %d\n",
3612                            arvif->vdev_id, info->use_cts_prot);
3613
3614                 ret = ath10k_recalc_rtscts_prot(arvif);
3615                 if (ret)
3616                         ath10k_warn(ar, "failed to recalculate rts/cts prot for vdev %d: %d\n",
3617                                     arvif->vdev_id, ret);
3618         }
3619
3620         if (changed & BSS_CHANGED_ERP_SLOT) {
3621                 if (info->use_short_slot)
3622                         slottime = WMI_VDEV_SLOT_TIME_SHORT; /* 9us */
3623
3624                 else
3625                         slottime = WMI_VDEV_SLOT_TIME_LONG; /* 20us */
3626
3627                 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d slot_time %d\n",
3628                            arvif->vdev_id, slottime);
3629
3630                 vdev_param = ar->wmi.vdev_param->slot_time;
3631                 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
3632                                                 slottime);
3633                 if (ret)
3634                         ath10k_warn(ar, "failed to set erp slot for vdev %d: %i\n",
3635                                     arvif->vdev_id, ret);
3636         }
3637
3638         if (changed & BSS_CHANGED_ERP_PREAMBLE) {
3639                 if (info->use_short_preamble)
3640                         preamble = WMI_VDEV_PREAMBLE_SHORT;
3641                 else
3642                         preamble = WMI_VDEV_PREAMBLE_LONG;
3643
3644                 ath10k_dbg(ar, ATH10K_DBG_MAC,
3645                            "mac vdev %d preamble %dn",
3646                            arvif->vdev_id, preamble);
3647
3648                 vdev_param = ar->wmi.vdev_param->preamble;
3649                 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
3650                                                 preamble);
3651                 if (ret)
3652                         ath10k_warn(ar, "failed to set preamble for vdev %d: %i\n",
3653                                     arvif->vdev_id, ret);
3654         }
3655
3656         if (changed & BSS_CHANGED_ASSOC) {
3657                 if (info->assoc) {
3658                         /* Workaround: Make sure monitor vdev is not running
3659                          * when associating to prevent some firmware revisions
3660                          * (e.g. 10.1 and 10.2) from crashing.
3661                          */
3662                         if (ar->monitor_started)
3663                                 ath10k_monitor_stop(ar);
3664                         ath10k_bss_assoc(hw, vif, info);
3665                         ath10k_monitor_recalc(ar);
3666                 } else {
3667                         ath10k_bss_disassoc(hw, vif);
3668                 }
3669         }
3670
3671         if (changed & BSS_CHANGED_TXPOWER) {
3672                 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev_id %i txpower %d\n",
3673                            arvif->vdev_id, info->txpower);
3674
3675                 arvif->txpower = info->txpower;
3676                 ret = ath10k_mac_txpower_recalc(ar);
3677                 if (ret)
3678                         ath10k_warn(ar, "failed to recalc tx power: %d\n", ret);
3679         }
3680
3681         if (changed & BSS_CHANGED_PS) {
3682                 arvif->ps = vif->bss_conf.ps;
3683
3684                 ret = ath10k_config_ps(ar);
3685                 if (ret)
3686                         ath10k_warn(ar, "failed to setup ps on vdev %i: %d\n",
3687                                     arvif->vdev_id, ret);
3688         }
3689
3690         mutex_unlock(&ar->conf_mutex);
3691 }
3692
3693 static int ath10k_hw_scan(struct ieee80211_hw *hw,
3694                           struct ieee80211_vif *vif,
3695                           struct ieee80211_scan_request *hw_req)
3696 {
3697         struct ath10k *ar = hw->priv;
3698         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3699         struct cfg80211_scan_request *req = &hw_req->req;
3700         struct wmi_start_scan_arg arg;
3701         int ret = 0;
3702         int i;
3703
3704         mutex_lock(&ar->conf_mutex);
3705
3706         spin_lock_bh(&ar->data_lock);
3707         switch (ar->scan.state) {
3708         case ATH10K_SCAN_IDLE:
3709                 reinit_completion(&ar->scan.started);
3710                 reinit_completion(&ar->scan.completed);
3711                 ar->scan.state = ATH10K_SCAN_STARTING;
3712                 ar->scan.is_roc = false;
3713                 ar->scan.vdev_id = arvif->vdev_id;
3714                 ret = 0;
3715                 break;
3716         case ATH10K_SCAN_STARTING:
3717         case ATH10K_SCAN_RUNNING:
3718         case ATH10K_SCAN_ABORTING:
3719                 ret = -EBUSY;
3720                 break;
3721         }
3722         spin_unlock_bh(&ar->data_lock);
3723
3724         if (ret)
3725                 goto exit;
3726
3727         memset(&arg, 0, sizeof(arg));
3728         ath10k_wmi_start_scan_init(ar, &arg);
3729         arg.vdev_id = arvif->vdev_id;
3730         arg.scan_id = ATH10K_SCAN_ID;
3731
3732         if (!req->no_cck)
3733                 arg.scan_ctrl_flags |= WMI_SCAN_ADD_CCK_RATES;
3734
3735         if (req->ie_len) {
3736                 arg.ie_len = req->ie_len;
3737                 memcpy(arg.ie, req->ie, arg.ie_len);
3738         }
3739
3740         if (req->n_ssids) {
3741                 arg.n_ssids = req->n_ssids;
3742                 for (i = 0; i < arg.n_ssids; i++) {
3743                         arg.ssids[i].len  = req->ssids[i].ssid_len;
3744                         arg.ssids[i].ssid = req->ssids[i].ssid;
3745                 }
3746         } else {
3747                 arg.scan_ctrl_flags |= WMI_SCAN_FLAG_PASSIVE;
3748         }
3749
3750         if (req->n_channels) {
3751                 arg.n_channels = req->n_channels;
3752                 for (i = 0; i < arg.n_channels; i++)
3753                         arg.channels[i] = req->channels[i]->center_freq;
3754         }
3755
3756         ret = ath10k_start_scan(ar, &arg);
3757         if (ret) {
3758                 ath10k_warn(ar, "failed to start hw scan: %d\n", ret);
3759                 spin_lock_bh(&ar->data_lock);
3760                 ar->scan.state = ATH10K_SCAN_IDLE;
3761                 spin_unlock_bh(&ar->data_lock);
3762         }
3763
3764 exit:
3765         mutex_unlock(&ar->conf_mutex);
3766         return ret;
3767 }
3768
3769 static void ath10k_cancel_hw_scan(struct ieee80211_hw *hw,
3770                                   struct ieee80211_vif *vif)
3771 {
3772         struct ath10k *ar = hw->priv;
3773
3774         mutex_lock(&ar->conf_mutex);
3775         ath10k_scan_abort(ar);
3776         mutex_unlock(&ar->conf_mutex);
3777
3778         cancel_delayed_work_sync(&ar->scan.timeout);
3779 }
3780
3781 static void ath10k_set_key_h_def_keyidx(struct ath10k *ar,
3782                                         struct ath10k_vif *arvif,
3783                                         enum set_key_cmd cmd,
3784                                         struct ieee80211_key_conf *key)
3785 {
3786         u32 vdev_param = arvif->ar->wmi.vdev_param->def_keyid;
3787         int ret;
3788
3789         /* 10.1 firmware branch requires default key index to be set to group
3790          * key index after installing it. Otherwise FW/HW Txes corrupted
3791          * frames with multi-vif APs. This is not required for main firmware
3792          * branch (e.g. 636).
3793          *
3794          * FIXME: This has been tested only in AP. It remains unknown if this
3795          * is required for multi-vif STA interfaces on 10.1 */
3796
3797         if (arvif->vdev_type != WMI_VDEV_TYPE_AP)
3798                 return;
3799
3800         if (key->cipher == WLAN_CIPHER_SUITE_WEP40)
3801                 return;
3802
3803         if (key->cipher == WLAN_CIPHER_SUITE_WEP104)
3804                 return;
3805
3806         if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE)
3807                 return;
3808
3809         if (cmd != SET_KEY)
3810                 return;
3811
3812         ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
3813                                         key->keyidx);
3814         if (ret)
3815                 ath10k_warn(ar, "failed to set vdev %i group key as default key: %d\n",
3816                             arvif->vdev_id, ret);
3817 }
3818
3819 static int ath10k_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
3820                           struct ieee80211_vif *vif, struct ieee80211_sta *sta,
3821                           struct ieee80211_key_conf *key)
3822 {
3823         struct ath10k *ar = hw->priv;
3824         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3825         struct ath10k_peer *peer;
3826         const u8 *peer_addr;
3827         bool is_wep = key->cipher == WLAN_CIPHER_SUITE_WEP40 ||
3828                       key->cipher == WLAN_CIPHER_SUITE_WEP104;
3829         bool def_idx = false;
3830         int ret = 0;
3831
3832         if (key->keyidx > WMI_MAX_KEY_INDEX)
3833                 return -ENOSPC;
3834
3835         mutex_lock(&ar->conf_mutex);
3836
3837         if (sta)
3838                 peer_addr = sta->addr;
3839         else if (arvif->vdev_type == WMI_VDEV_TYPE_STA)
3840                 peer_addr = vif->bss_conf.bssid;
3841         else
3842                 peer_addr = vif->addr;
3843
3844         key->hw_key_idx = key->keyidx;
3845
3846         /* the peer should not disappear in mid-way (unless FW goes awry) since
3847          * we already hold conf_mutex. we just make sure its there now. */
3848         spin_lock_bh(&ar->data_lock);
3849         peer = ath10k_peer_find(ar, arvif->vdev_id, peer_addr);
3850         spin_unlock_bh(&ar->data_lock);
3851
3852         if (!peer) {
3853                 if (cmd == SET_KEY) {
3854                         ath10k_warn(ar, "failed to install key for non-existent peer %pM\n",
3855                                     peer_addr);
3856                         ret = -EOPNOTSUPP;
3857                         goto exit;
3858                 } else {
3859                         /* if the peer doesn't exist there is no key to disable
3860                          * anymore */
3861                         goto exit;
3862                 }
3863         }
3864
3865         if (is_wep) {
3866                 if (cmd == SET_KEY)
3867                         arvif->wep_keys[key->keyidx] = key;
3868                 else
3869                         arvif->wep_keys[key->keyidx] = NULL;
3870
3871                 if (cmd == DISABLE_KEY)
3872                         ath10k_clear_vdev_key(arvif, key);
3873         }
3874
3875         /* set TX_USAGE flag for all the keys incase of dot1x-WEP. For
3876          * static WEP, do not set this flag for the keys whose key id
3877          * is  greater than default key id.
3878          */
3879         if (arvif->def_wep_key_idx == -1)
3880                 def_idx = true;
3881
3882         ret = ath10k_install_key(arvif, key, cmd, peer_addr, def_idx);
3883         if (ret) {
3884                 ath10k_warn(ar, "failed to install key for vdev %i peer %pM: %d\n",
3885                             arvif->vdev_id, peer_addr, ret);
3886                 goto exit;
3887         }
3888
3889         ath10k_set_key_h_def_keyidx(ar, arvif, cmd, key);
3890
3891         spin_lock_bh(&ar->data_lock);
3892         peer = ath10k_peer_find(ar, arvif->vdev_id, peer_addr);
3893         if (peer && cmd == SET_KEY)
3894                 peer->keys[key->keyidx] = key;
3895         else if (peer && cmd == DISABLE_KEY)
3896                 peer->keys[key->keyidx] = NULL;
3897         else if (peer == NULL)
3898                 /* impossible unless FW goes crazy */
3899                 ath10k_warn(ar, "Peer %pM disappeared!\n", peer_addr);
3900         spin_unlock_bh(&ar->data_lock);
3901
3902 exit:
3903         mutex_unlock(&ar->conf_mutex);
3904         return ret;
3905 }
3906
3907 static void ath10k_set_default_unicast_key(struct ieee80211_hw *hw,
3908                                            struct ieee80211_vif *vif,
3909                                            int keyidx)
3910 {
3911         struct ath10k *ar = hw->priv;
3912         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3913         int ret;
3914
3915         mutex_lock(&arvif->ar->conf_mutex);
3916
3917         if (arvif->ar->state != ATH10K_STATE_ON)
3918                 goto unlock;
3919
3920         ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d set keyidx %d\n",
3921                    arvif->vdev_id, keyidx);
3922
3923         ret = ath10k_wmi_vdev_set_param(arvif->ar,
3924                                         arvif->vdev_id,
3925                                         arvif->ar->wmi.vdev_param->def_keyid,
3926                                         keyidx);
3927
3928         if (ret) {
3929                 ath10k_warn(ar, "failed to update wep key index for vdev %d: %d\n",
3930                             arvif->vdev_id,
3931                             ret);
3932                 goto unlock;
3933         }
3934
3935         arvif->def_wep_key_idx = keyidx;
3936 unlock:
3937         mutex_unlock(&arvif->ar->conf_mutex);
3938 }
3939
3940 static void ath10k_sta_rc_update_wk(struct work_struct *wk)
3941 {
3942         struct ath10k *ar;
3943         struct ath10k_vif *arvif;
3944         struct ath10k_sta *arsta;
3945         struct ieee80211_sta *sta;
3946         u32 changed, bw, nss, smps;
3947         int err;
3948
3949         arsta = container_of(wk, struct ath10k_sta, update_wk);
3950         sta = container_of((void *)arsta, struct ieee80211_sta, drv_priv);
3951         arvif = arsta->arvif;
3952         ar = arvif->ar;
3953
3954         spin_lock_bh(&ar->data_lock);
3955
3956         changed = arsta->changed;
3957         arsta->changed = 0;
3958
3959         bw = arsta->bw;
3960         nss = arsta->nss;
3961         smps = arsta->smps;
3962
3963         spin_unlock_bh(&ar->data_lock);
3964
3965         mutex_lock(&ar->conf_mutex);
3966
3967         if (changed & IEEE80211_RC_BW_CHANGED) {
3968                 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM peer bw %d\n",
3969                            sta->addr, bw);
3970
3971                 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
3972                                                 WMI_PEER_CHAN_WIDTH, bw);
3973                 if (err)
3974                         ath10k_warn(ar, "failed to update STA %pM peer bw %d: %d\n",
3975                                     sta->addr, bw, err);
3976         }
3977
3978         if (changed & IEEE80211_RC_NSS_CHANGED) {
3979                 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM nss %d\n",
3980                            sta->addr, nss);
3981
3982                 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
3983                                                 WMI_PEER_NSS, nss);
3984                 if (err)
3985                         ath10k_warn(ar, "failed to update STA %pM nss %d: %d\n",
3986                                     sta->addr, nss, err);
3987         }
3988
3989         if (changed & IEEE80211_RC_SMPS_CHANGED) {
3990                 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM smps %d\n",
3991                            sta->addr, smps);
3992
3993                 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
3994                                                 WMI_PEER_SMPS_STATE, smps);
3995                 if (err)
3996                         ath10k_warn(ar, "failed to update STA %pM smps %d: %d\n",
3997                                     sta->addr, smps, err);
3998         }
3999
4000         if (changed & IEEE80211_RC_SUPP_RATES_CHANGED ||
4001             changed & IEEE80211_RC_NSS_CHANGED) {
4002                 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM supp rates/nss\n",
4003                            sta->addr);
4004
4005                 err = ath10k_station_assoc(ar, arvif->vif, sta, true);
4006                 if (err)
4007                         ath10k_warn(ar, "failed to reassociate station: %pM\n",
4008                                     sta->addr);
4009         }
4010
4011         mutex_unlock(&ar->conf_mutex);
4012 }
4013
4014 static int ath10k_mac_inc_num_stations(struct ath10k_vif *arvif)
4015 {
4016         struct ath10k *ar = arvif->ar;
4017
4018         lockdep_assert_held(&ar->conf_mutex);
4019
4020         if (arvif->vdev_type != WMI_VDEV_TYPE_AP &&
4021             arvif->vdev_type != WMI_VDEV_TYPE_IBSS)
4022                 return 0;
4023
4024         if (ar->num_stations >= ar->max_num_stations)
4025                 return -ENOBUFS;
4026
4027         ar->num_stations++;
4028
4029         return 0;
4030 }
4031
4032 static void ath10k_mac_dec_num_stations(struct ath10k_vif *arvif)
4033 {
4034         struct ath10k *ar = arvif->ar;
4035
4036         lockdep_assert_held(&ar->conf_mutex);
4037
4038         if (arvif->vdev_type != WMI_VDEV_TYPE_AP &&
4039             arvif->vdev_type != WMI_VDEV_TYPE_IBSS)
4040                 return;
4041
4042         ar->num_stations--;
4043 }
4044
4045 static int ath10k_sta_state(struct ieee80211_hw *hw,
4046                             struct ieee80211_vif *vif,
4047                             struct ieee80211_sta *sta,
4048                             enum ieee80211_sta_state old_state,
4049                             enum ieee80211_sta_state new_state)
4050 {
4051         struct ath10k *ar = hw->priv;
4052         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4053         struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
4054         int ret = 0;
4055
4056         if (old_state == IEEE80211_STA_NOTEXIST &&
4057             new_state == IEEE80211_STA_NONE) {
4058                 memset(arsta, 0, sizeof(*arsta));
4059                 arsta->arvif = arvif;
4060                 INIT_WORK(&arsta->update_wk, ath10k_sta_rc_update_wk);
4061         }
4062
4063         /* cancel must be done outside the mutex to avoid deadlock */
4064         if ((old_state == IEEE80211_STA_NONE &&
4065              new_state == IEEE80211_STA_NOTEXIST))
4066                 cancel_work_sync(&arsta->update_wk);
4067
4068         mutex_lock(&ar->conf_mutex);
4069
4070         if (old_state == IEEE80211_STA_NOTEXIST &&
4071             new_state == IEEE80211_STA_NONE) {
4072                 /*
4073                  * New station addition.
4074                  */
4075                 ath10k_dbg(ar, ATH10K_DBG_MAC,
4076                            "mac vdev %d peer create %pM (new sta) sta %d / %d peer %d / %d\n",
4077                            arvif->vdev_id, sta->addr,
4078                            ar->num_stations + 1, ar->max_num_stations,
4079                            ar->num_peers + 1, ar->max_num_peers);
4080
4081                 ret = ath10k_mac_inc_num_stations(arvif);
4082                 if (ret) {
4083                         ath10k_warn(ar, "refusing to associate station: too many connected already (%d)\n",
4084                                     ar->max_num_stations);
4085                         goto exit;
4086                 }
4087
4088                 ret = ath10k_peer_create(ar, arvif->vdev_id, sta->addr);
4089                 if (ret) {
4090                         ath10k_warn(ar, "failed to add peer %pM for vdev %d when adding a new sta: %i\n",
4091                                     sta->addr, arvif->vdev_id, ret);
4092                         ath10k_mac_dec_num_stations(arvif);
4093                         goto exit;
4094                 }
4095
4096                 if (vif->type == NL80211_IFTYPE_STATION) {
4097                         WARN_ON(arvif->is_started);
4098
4099                         ret = ath10k_vdev_start(arvif);
4100                         if (ret) {
4101                                 ath10k_warn(ar, "failed to start vdev %i: %d\n",
4102                                             arvif->vdev_id, ret);
4103                                 WARN_ON(ath10k_peer_delete(ar, arvif->vdev_id,
4104                                                            sta->addr));
4105                                 ath10k_mac_dec_num_stations(arvif);
4106                                 goto exit;
4107                         }
4108
4109                         arvif->is_started = true;
4110                 }
4111         } else if ((old_state == IEEE80211_STA_NONE &&
4112                     new_state == IEEE80211_STA_NOTEXIST)) {
4113                 /*
4114                  * Existing station deletion.
4115                  */
4116                 ath10k_dbg(ar, ATH10K_DBG_MAC,
4117                            "mac vdev %d peer delete %pM (sta gone)\n",
4118                            arvif->vdev_id, sta->addr);
4119
4120                 if (vif->type == NL80211_IFTYPE_STATION) {
4121                         WARN_ON(!arvif->is_started);
4122
4123                         ret = ath10k_vdev_stop(arvif);
4124                         if (ret)
4125                                 ath10k_warn(ar, "failed to stop vdev %i: %d\n",
4126                                             arvif->vdev_id, ret);
4127
4128                         arvif->is_started = false;
4129                 }
4130
4131                 ret = ath10k_peer_delete(ar, arvif->vdev_id, sta->addr);
4132                 if (ret)
4133                         ath10k_warn(ar, "failed to delete peer %pM for vdev %d: %i\n",
4134                                     sta->addr, arvif->vdev_id, ret);
4135
4136                 ath10k_mac_dec_num_stations(arvif);
4137         } else if (old_state == IEEE80211_STA_AUTH &&
4138                    new_state == IEEE80211_STA_ASSOC &&
4139                    (vif->type == NL80211_IFTYPE_AP ||
4140                     vif->type == NL80211_IFTYPE_ADHOC)) {
4141                 /*
4142                  * New association.
4143                  */
4144                 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac sta %pM associated\n",
4145                            sta->addr);
4146
4147                 ret = ath10k_station_assoc(ar, vif, sta, false);
4148                 if (ret)
4149                         ath10k_warn(ar, "failed to associate station %pM for vdev %i: %i\n",
4150                                     sta->addr, arvif->vdev_id, ret);
4151         } else if (old_state == IEEE80211_STA_ASSOC &&
4152                    new_state == IEEE80211_STA_AUTH &&
4153                    (vif->type == NL80211_IFTYPE_AP ||
4154                     vif->type == NL80211_IFTYPE_ADHOC)) {
4155                 /*
4156                  * Disassociation.
4157                  */
4158                 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac sta %pM disassociated\n",
4159                            sta->addr);
4160
4161                 ret = ath10k_station_disassoc(ar, vif, sta);
4162                 if (ret)
4163                         ath10k_warn(ar, "failed to disassociate station: %pM vdev %i: %i\n",
4164                                     sta->addr, arvif->vdev_id, ret);
4165         }
4166 exit:
4167         mutex_unlock(&ar->conf_mutex);
4168         return ret;
4169 }
4170
4171 static int ath10k_conf_tx_uapsd(struct ath10k *ar, struct ieee80211_vif *vif,
4172                                 u16 ac, bool enable)
4173 {
4174         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4175         struct wmi_sta_uapsd_auto_trig_arg arg = {};
4176         u32 prio = 0, acc = 0;
4177         u32 value = 0;
4178         int ret = 0;
4179
4180         lockdep_assert_held(&ar->conf_mutex);
4181
4182         if (arvif->vdev_type != WMI_VDEV_TYPE_STA)
4183                 return 0;
4184
4185         switch (ac) {
4186         case IEEE80211_AC_VO:
4187                 value = WMI_STA_PS_UAPSD_AC3_DELIVERY_EN |
4188                         WMI_STA_PS_UAPSD_AC3_TRIGGER_EN;
4189                 prio = 7;
4190                 acc = 3;
4191                 break;
4192         case IEEE80211_AC_VI:
4193                 value = WMI_STA_PS_UAPSD_AC2_DELIVERY_EN |
4194                         WMI_STA_PS_UAPSD_AC2_TRIGGER_EN;
4195                 prio = 5;
4196                 acc = 2;
4197                 break;
4198         case IEEE80211_AC_BE:
4199                 value = WMI_STA_PS_UAPSD_AC1_DELIVERY_EN |
4200                         WMI_STA_PS_UAPSD_AC1_TRIGGER_EN;
4201                 prio = 2;
4202                 acc = 1;
4203                 break;
4204         case IEEE80211_AC_BK:
4205                 value = WMI_STA_PS_UAPSD_AC0_DELIVERY_EN |
4206                         WMI_STA_PS_UAPSD_AC0_TRIGGER_EN;
4207                 prio = 0;
4208                 acc = 0;
4209                 break;
4210         }
4211
4212         if (enable)
4213                 arvif->u.sta.uapsd |= value;
4214         else
4215                 arvif->u.sta.uapsd &= ~value;
4216
4217         ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
4218                                           WMI_STA_PS_PARAM_UAPSD,
4219                                           arvif->u.sta.uapsd);
4220         if (ret) {
4221                 ath10k_warn(ar, "failed to set uapsd params: %d\n", ret);
4222                 goto exit;
4223         }
4224
4225         if (arvif->u.sta.uapsd)
4226                 value = WMI_STA_PS_RX_WAKE_POLICY_POLL_UAPSD;
4227         else
4228                 value = WMI_STA_PS_RX_WAKE_POLICY_WAKE;
4229
4230         ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
4231                                           WMI_STA_PS_PARAM_RX_WAKE_POLICY,
4232                                           value);
4233         if (ret)
4234                 ath10k_warn(ar, "failed to set rx wake param: %d\n", ret);
4235
4236         ret = ath10k_mac_vif_recalc_ps_wake_threshold(arvif);
4237         if (ret) {
4238                 ath10k_warn(ar, "failed to recalc ps wake threshold on vdev %i: %d\n",
4239                             arvif->vdev_id, ret);
4240                 return ret;
4241         }
4242
4243         ret = ath10k_mac_vif_recalc_ps_poll_count(arvif);
4244         if (ret) {
4245                 ath10k_warn(ar, "failed to recalc ps poll count on vdev %i: %d\n",
4246                             arvif->vdev_id, ret);
4247                 return ret;
4248         }
4249
4250         if (test_bit(WMI_SERVICE_STA_UAPSD_BASIC_AUTO_TRIG, ar->wmi.svc_map) ||
4251             test_bit(WMI_SERVICE_STA_UAPSD_VAR_AUTO_TRIG, ar->wmi.svc_map)) {
4252                 /* Only userspace can make an educated decision when to send
4253                  * trigger frame. The following effectively disables u-UAPSD
4254                  * autotrigger in firmware (which is enabled by default
4255                  * provided the autotrigger service is available).
4256                  */
4257
4258                 arg.wmm_ac = acc;
4259                 arg.user_priority = prio;
4260                 arg.service_interval = 0;
4261                 arg.suspend_interval = WMI_STA_UAPSD_MAX_INTERVAL_MSEC;
4262                 arg.delay_interval = WMI_STA_UAPSD_MAX_INTERVAL_MSEC;
4263
4264                 ret = ath10k_wmi_vdev_sta_uapsd(ar, arvif->vdev_id,
4265                                                 arvif->bssid, &arg, 1);
4266                 if (ret) {
4267                         ath10k_warn(ar, "failed to set uapsd auto trigger %d\n",
4268                                     ret);
4269                         return ret;
4270                 }
4271         }
4272
4273 exit:
4274         return ret;
4275 }
4276
4277 static int ath10k_conf_tx(struct ieee80211_hw *hw,
4278                           struct ieee80211_vif *vif, u16 ac,
4279                           const struct ieee80211_tx_queue_params *params)
4280 {
4281         struct ath10k *ar = hw->priv;
4282         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4283         struct wmi_wmm_params_arg *p = NULL;
4284         int ret;
4285
4286         mutex_lock(&ar->conf_mutex);
4287
4288         switch (ac) {
4289         case IEEE80211_AC_VO:
4290                 p = &arvif->wmm_params.ac_vo;
4291                 break;
4292         case IEEE80211_AC_VI:
4293                 p = &arvif->wmm_params.ac_vi;
4294                 break;
4295         case IEEE80211_AC_BE:
4296                 p = &arvif->wmm_params.ac_be;
4297                 break;
4298         case IEEE80211_AC_BK:
4299                 p = &arvif->wmm_params.ac_bk;
4300                 break;
4301         }
4302
4303         if (WARN_ON(!p)) {
4304                 ret = -EINVAL;
4305                 goto exit;
4306         }
4307
4308         p->cwmin = params->cw_min;
4309         p->cwmax = params->cw_max;
4310         p->aifs = params->aifs;
4311
4312         /*
4313          * The channel time duration programmed in the HW is in absolute
4314          * microseconds, while mac80211 gives the txop in units of
4315          * 32 microseconds.
4316          */
4317         p->txop = params->txop * 32;
4318
4319         if (ar->wmi.ops->gen_vdev_wmm_conf) {
4320                 ret = ath10k_wmi_vdev_wmm_conf(ar, arvif->vdev_id,
4321                                                &arvif->wmm_params);
4322                 if (ret) {
4323                         ath10k_warn(ar, "failed to set vdev wmm params on vdev %i: %d\n",
4324                                     arvif->vdev_id, ret);
4325                         goto exit;
4326                 }
4327         } else {
4328                 /* This won't work well with multi-interface cases but it's
4329                  * better than nothing.
4330                  */
4331                 ret = ath10k_wmi_pdev_set_wmm_params(ar, &arvif->wmm_params);
4332                 if (ret) {
4333                         ath10k_warn(ar, "failed to set wmm params: %d\n", ret);
4334                         goto exit;
4335                 }
4336         }
4337
4338         ret = ath10k_conf_tx_uapsd(ar, vif, ac, params->uapsd);
4339         if (ret)
4340                 ath10k_warn(ar, "failed to set sta uapsd: %d\n", ret);
4341
4342 exit:
4343         mutex_unlock(&ar->conf_mutex);
4344         return ret;
4345 }
4346
4347 #define ATH10K_ROC_TIMEOUT_HZ (2*HZ)
4348
4349 static int ath10k_remain_on_channel(struct ieee80211_hw *hw,
4350                                     struct ieee80211_vif *vif,
4351                                     struct ieee80211_channel *chan,
4352                                     int duration,
4353                                     enum ieee80211_roc_type type)
4354 {
4355         struct ath10k *ar = hw->priv;
4356         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4357         struct wmi_start_scan_arg arg;
4358         int ret = 0;
4359
4360         mutex_lock(&ar->conf_mutex);
4361
4362         spin_lock_bh(&ar->data_lock);
4363         switch (ar->scan.state) {
4364         case ATH10K_SCAN_IDLE:
4365                 reinit_completion(&ar->scan.started);
4366                 reinit_completion(&ar->scan.completed);
4367                 reinit_completion(&ar->scan.on_channel);
4368                 ar->scan.state = ATH10K_SCAN_STARTING;
4369                 ar->scan.is_roc = true;
4370                 ar->scan.vdev_id = arvif->vdev_id;
4371                 ar->scan.roc_freq = chan->center_freq;
4372                 ret = 0;
4373                 break;
4374         case ATH10K_SCAN_STARTING:
4375         case ATH10K_SCAN_RUNNING:
4376         case ATH10K_SCAN_ABORTING:
4377                 ret = -EBUSY;
4378                 break;
4379         }
4380         spin_unlock_bh(&ar->data_lock);
4381
4382         if (ret)
4383                 goto exit;
4384
4385         duration = max(duration, WMI_SCAN_CHAN_MIN_TIME_MSEC);
4386
4387         memset(&arg, 0, sizeof(arg));
4388         ath10k_wmi_start_scan_init(ar, &arg);
4389         arg.vdev_id = arvif->vdev_id;
4390         arg.scan_id = ATH10K_SCAN_ID;
4391         arg.n_channels = 1;
4392         arg.channels[0] = chan->center_freq;
4393         arg.dwell_time_active = duration;
4394         arg.dwell_time_passive = duration;
4395         arg.max_scan_time = 2 * duration;
4396         arg.scan_ctrl_flags |= WMI_SCAN_FLAG_PASSIVE;
4397         arg.scan_ctrl_flags |= WMI_SCAN_FILTER_PROBE_REQ;
4398
4399         ret = ath10k_start_scan(ar, &arg);
4400         if (ret) {
4401                 ath10k_warn(ar, "failed to start roc scan: %d\n", ret);
4402                 spin_lock_bh(&ar->data_lock);
4403                 ar->scan.state = ATH10K_SCAN_IDLE;
4404                 spin_unlock_bh(&ar->data_lock);
4405                 goto exit;
4406         }
4407
4408         ret = wait_for_completion_timeout(&ar->scan.on_channel, 3*HZ);
4409         if (ret == 0) {
4410                 ath10k_warn(ar, "failed to switch to channel for roc scan\n");
4411
4412                 ret = ath10k_scan_stop(ar);
4413                 if (ret)
4414                         ath10k_warn(ar, "failed to stop scan: %d\n", ret);
4415
4416                 ret = -ETIMEDOUT;
4417                 goto exit;
4418         }
4419
4420         ret = 0;
4421 exit:
4422         mutex_unlock(&ar->conf_mutex);
4423         return ret;
4424 }
4425
4426 static int ath10k_cancel_remain_on_channel(struct ieee80211_hw *hw)
4427 {
4428         struct ath10k *ar = hw->priv;
4429
4430         mutex_lock(&ar->conf_mutex);
4431         ath10k_scan_abort(ar);
4432         mutex_unlock(&ar->conf_mutex);
4433
4434         cancel_delayed_work_sync(&ar->scan.timeout);
4435
4436         return 0;
4437 }
4438
4439 /*
4440  * Both RTS and Fragmentation threshold are interface-specific
4441  * in ath10k, but device-specific in mac80211.
4442  */
4443
4444 static int ath10k_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
4445 {
4446         struct ath10k *ar = hw->priv;
4447         struct ath10k_vif *arvif;
4448         int ret = 0;
4449
4450         mutex_lock(&ar->conf_mutex);
4451         list_for_each_entry(arvif, &ar->arvifs, list) {
4452                 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d rts threshold %d\n",
4453                            arvif->vdev_id, value);
4454
4455                 ret = ath10k_mac_set_rts(arvif, value);
4456                 if (ret) {
4457                         ath10k_warn(ar, "failed to set rts threshold for vdev %d: %d\n",
4458                                     arvif->vdev_id, ret);
4459                         break;
4460                 }
4461         }
4462         mutex_unlock(&ar->conf_mutex);
4463
4464         return ret;
4465 }
4466
4467 static void ath10k_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
4468                          u32 queues, bool drop)
4469 {
4470         struct ath10k *ar = hw->priv;
4471         bool skip;
4472         int ret;
4473
4474         /* mac80211 doesn't care if we really xmit queued frames or not
4475          * we'll collect those frames either way if we stop/delete vdevs */
4476         if (drop)
4477                 return;
4478
4479         mutex_lock(&ar->conf_mutex);
4480
4481         if (ar->state == ATH10K_STATE_WEDGED)
4482                 goto skip;
4483
4484         ret = wait_event_timeout(ar->htt.empty_tx_wq, ({
4485                         bool empty;
4486
4487                         spin_lock_bh(&ar->htt.tx_lock);
4488                         empty = (ar->htt.num_pending_tx == 0);
4489                         spin_unlock_bh(&ar->htt.tx_lock);
4490
4491                         skip = (ar->state == ATH10K_STATE_WEDGED) ||
4492                                test_bit(ATH10K_FLAG_CRASH_FLUSH,
4493                                         &ar->dev_flags);
4494
4495                         (empty || skip);
4496                 }), ATH10K_FLUSH_TIMEOUT_HZ);
4497
4498         if (ret <= 0 || skip)
4499                 ath10k_warn(ar, "failed to flush transmit queue (skip %i ar-state %i): %i\n",
4500                             skip, ar->state, ret);
4501
4502 skip:
4503         mutex_unlock(&ar->conf_mutex);
4504 }
4505
4506 /* TODO: Implement this function properly
4507  * For now it is needed to reply to Probe Requests in IBSS mode.
4508  * Propably we need this information from FW.
4509  */
4510 static int ath10k_tx_last_beacon(struct ieee80211_hw *hw)
4511 {
4512         return 1;
4513 }
4514
4515 #ifdef CONFIG_PM
4516 static int ath10k_suspend(struct ieee80211_hw *hw,
4517                           struct cfg80211_wowlan *wowlan)
4518 {
4519         struct ath10k *ar = hw->priv;
4520         int ret;
4521
4522         mutex_lock(&ar->conf_mutex);
4523
4524         ret = ath10k_wait_for_suspend(ar, WMI_PDEV_SUSPEND);
4525         if (ret) {
4526                 if (ret == -ETIMEDOUT)
4527                         goto resume;
4528                 ret = 1;
4529                 goto exit;
4530         }
4531
4532         ret = ath10k_hif_suspend(ar);
4533         if (ret) {
4534                 ath10k_warn(ar, "failed to suspend hif: %d\n", ret);
4535                 goto resume;
4536         }
4537
4538         ret = 0;
4539         goto exit;
4540 resume:
4541         ret = ath10k_wmi_pdev_resume_target(ar);
4542         if (ret)
4543                 ath10k_warn(ar, "failed to resume target: %d\n", ret);
4544
4545         ret = 1;
4546 exit:
4547         mutex_unlock(&ar->conf_mutex);
4548         return ret;
4549 }
4550
4551 static int ath10k_resume(struct ieee80211_hw *hw)
4552 {
4553         struct ath10k *ar = hw->priv;
4554         int ret;
4555
4556         mutex_lock(&ar->conf_mutex);
4557
4558         ret = ath10k_hif_resume(ar);
4559         if (ret) {
4560                 ath10k_warn(ar, "failed to resume hif: %d\n", ret);
4561                 ret = 1;
4562                 goto exit;
4563         }
4564
4565         ret = ath10k_wmi_pdev_resume_target(ar);
4566         if (ret) {
4567                 ath10k_warn(ar, "failed to resume target: %d\n", ret);
4568                 ret = 1;
4569                 goto exit;
4570         }
4571
4572         ret = 0;
4573 exit:
4574         mutex_unlock(&ar->conf_mutex);
4575         return ret;
4576 }
4577 #endif
4578
4579 static void ath10k_reconfig_complete(struct ieee80211_hw *hw,
4580                                      enum ieee80211_reconfig_type reconfig_type)
4581 {
4582         struct ath10k *ar = hw->priv;
4583
4584         if (reconfig_type != IEEE80211_RECONFIG_TYPE_RESTART)
4585                 return;
4586
4587         mutex_lock(&ar->conf_mutex);
4588
4589         /* If device failed to restart it will be in a different state, e.g.
4590          * ATH10K_STATE_WEDGED */
4591         if (ar->state == ATH10K_STATE_RESTARTED) {
4592                 ath10k_info(ar, "device successfully recovered\n");
4593                 ar->state = ATH10K_STATE_ON;
4594                 ieee80211_wake_queues(ar->hw);
4595         }
4596
4597         mutex_unlock(&ar->conf_mutex);
4598 }
4599
4600 static int ath10k_get_survey(struct ieee80211_hw *hw, int idx,
4601                              struct survey_info *survey)
4602 {
4603         struct ath10k *ar = hw->priv;
4604         struct ieee80211_supported_band *sband;
4605         struct survey_info *ar_survey = &ar->survey[idx];
4606         int ret = 0;
4607
4608         mutex_lock(&ar->conf_mutex);
4609
4610         sband = hw->wiphy->bands[IEEE80211_BAND_2GHZ];
4611         if (sband && idx >= sband->n_channels) {
4612                 idx -= sband->n_channels;
4613                 sband = NULL;
4614         }
4615
4616         if (!sband)
4617                 sband = hw->wiphy->bands[IEEE80211_BAND_5GHZ];
4618
4619         if (!sband || idx >= sband->n_channels) {
4620                 ret = -ENOENT;
4621                 goto exit;
4622         }
4623
4624         spin_lock_bh(&ar->data_lock);
4625         memcpy(survey, ar_survey, sizeof(*survey));
4626         spin_unlock_bh(&ar->data_lock);
4627
4628         survey->channel = &sband->channels[idx];
4629
4630         if (ar->rx_channel == survey->channel)
4631                 survey->filled |= SURVEY_INFO_IN_USE;
4632
4633 exit:
4634         mutex_unlock(&ar->conf_mutex);
4635         return ret;
4636 }
4637
4638 /* Helper table for legacy fixed_rate/bitrate_mask */
4639 static const u8 cck_ofdm_rate[] = {
4640         /* CCK */
4641         3, /* 1Mbps */
4642         2, /* 2Mbps */
4643         1, /* 5.5Mbps */
4644         0, /* 11Mbps */
4645         /* OFDM */
4646         3, /* 6Mbps */
4647         7, /* 9Mbps */
4648         2, /* 12Mbps */
4649         6, /* 18Mbps */
4650         1, /* 24Mbps */
4651         5, /* 36Mbps */
4652         0, /* 48Mbps */
4653         4, /* 54Mbps */
4654 };
4655
4656 /* Check if only one bit set */
4657 static int ath10k_check_single_mask(u32 mask)
4658 {
4659         int bit;
4660
4661         bit = ffs(mask);
4662         if (!bit)
4663                 return 0;
4664
4665         mask &= ~BIT(bit - 1);
4666         if (mask)
4667                 return 2;
4668
4669         return 1;
4670 }
4671
4672 static bool
4673 ath10k_default_bitrate_mask(struct ath10k *ar,
4674                             enum ieee80211_band band,
4675                             const struct cfg80211_bitrate_mask *mask)
4676 {
4677         u32 legacy = 0x00ff;
4678         u8 ht = 0xff, i;
4679         u16 vht = 0x3ff;
4680         u16 nrf = ar->num_rf_chains;
4681
4682         if (ar->cfg_tx_chainmask)
4683                 nrf = get_nss_from_chainmask(ar->cfg_tx_chainmask);
4684
4685         switch (band) {
4686         case IEEE80211_BAND_2GHZ:
4687                 legacy = 0x00fff;
4688                 vht = 0;
4689                 break;
4690         case IEEE80211_BAND_5GHZ:
4691                 break;
4692         default:
4693                 return false;
4694         }
4695
4696         if (mask->control[band].legacy != legacy)
4697                 return false;
4698
4699         for (i = 0; i < nrf; i++)
4700                 if (mask->control[band].ht_mcs[i] != ht)
4701                         return false;
4702
4703         for (i = 0; i < nrf; i++)
4704                 if (mask->control[band].vht_mcs[i] != vht)
4705                         return false;
4706
4707         return true;
4708 }
4709
4710 static bool
4711 ath10k_bitrate_mask_nss(const struct cfg80211_bitrate_mask *mask,
4712                         enum ieee80211_band band,
4713                         u8 *fixed_nss)
4714 {
4715         int ht_nss = 0, vht_nss = 0, i;
4716
4717         /* check legacy */
4718         if (ath10k_check_single_mask(mask->control[band].legacy))
4719                 return false;
4720
4721         /* check HT */
4722         for (i = 0; i < IEEE80211_HT_MCS_MASK_LEN; i++) {
4723                 if (mask->control[band].ht_mcs[i] == 0xff)
4724                         continue;
4725                 else if (mask->control[band].ht_mcs[i] == 0x00)
4726                         break;
4727
4728                 return false;
4729         }
4730
4731         ht_nss = i;
4732
4733         /* check VHT */
4734         for (i = 0; i < NL80211_VHT_NSS_MAX; i++) {
4735                 if (mask->control[band].vht_mcs[i] == 0x03ff)
4736                         continue;
4737                 else if (mask->control[band].vht_mcs[i] == 0x0000)
4738                         break;
4739
4740                 return false;
4741         }
4742
4743         vht_nss = i;
4744
4745         if (ht_nss > 0 && vht_nss > 0)
4746                 return false;
4747
4748         if (ht_nss)
4749                 *fixed_nss = ht_nss;
4750         else if (vht_nss)
4751                 *fixed_nss = vht_nss;
4752         else
4753                 return false;
4754
4755         return true;
4756 }
4757
4758 static bool
4759 ath10k_bitrate_mask_correct(const struct cfg80211_bitrate_mask *mask,
4760                             enum ieee80211_band band,
4761                             enum wmi_rate_preamble *preamble)
4762 {
4763         int legacy = 0, ht = 0, vht = 0, i;
4764
4765         *preamble = WMI_RATE_PREAMBLE_OFDM;
4766
4767         /* check legacy */
4768         legacy = ath10k_check_single_mask(mask->control[band].legacy);
4769         if (legacy > 1)
4770                 return false;
4771
4772         /* check HT */
4773         for (i = 0; i < IEEE80211_HT_MCS_MASK_LEN; i++)
4774                 ht += ath10k_check_single_mask(mask->control[band].ht_mcs[i]);
4775         if (ht > 1)
4776                 return false;
4777
4778         /* check VHT */
4779         for (i = 0; i < NL80211_VHT_NSS_MAX; i++)
4780                 vht += ath10k_check_single_mask(mask->control[band].vht_mcs[i]);
4781         if (vht > 1)
4782                 return false;
4783
4784         /* Currently we support only one fixed_rate */
4785         if ((legacy + ht + vht) != 1)
4786                 return false;
4787
4788         if (ht)
4789                 *preamble = WMI_RATE_PREAMBLE_HT;
4790         else if (vht)
4791                 *preamble = WMI_RATE_PREAMBLE_VHT;
4792
4793         return true;
4794 }
4795
4796 static bool
4797 ath10k_bitrate_mask_rate(struct ath10k *ar,
4798                          const struct cfg80211_bitrate_mask *mask,
4799                          enum ieee80211_band band,
4800                          u8 *fixed_rate,
4801                          u8 *fixed_nss)
4802 {
4803         u8 rate = 0, pream = 0, nss = 0, i;
4804         enum wmi_rate_preamble preamble;
4805
4806         /* Check if single rate correct */
4807         if (!ath10k_bitrate_mask_correct(mask, band, &preamble))
4808                 return false;
4809
4810         pream = preamble;
4811
4812         switch (preamble) {
4813         case WMI_RATE_PREAMBLE_CCK:
4814         case WMI_RATE_PREAMBLE_OFDM:
4815                 i = ffs(mask->control[band].legacy) - 1;
4816
4817                 if (band == IEEE80211_BAND_2GHZ && i < 4)
4818                         pream = WMI_RATE_PREAMBLE_CCK;
4819
4820                 if (band == IEEE80211_BAND_5GHZ)
4821                         i += 4;
4822
4823                 if (i >= ARRAY_SIZE(cck_ofdm_rate))
4824                         return false;
4825
4826                 rate = cck_ofdm_rate[i];
4827                 break;
4828         case WMI_RATE_PREAMBLE_HT:
4829                 for (i = 0; i < IEEE80211_HT_MCS_MASK_LEN; i++)
4830                         if (mask->control[band].ht_mcs[i])
4831                                 break;
4832
4833                 if (i == IEEE80211_HT_MCS_MASK_LEN)
4834                         return false;
4835
4836                 rate = ffs(mask->control[band].ht_mcs[i]) - 1;
4837                 nss = i;
4838                 break;
4839         case WMI_RATE_PREAMBLE_VHT:
4840                 for (i = 0; i < NL80211_VHT_NSS_MAX; i++)
4841                         if (mask->control[band].vht_mcs[i])
4842                                 break;
4843
4844                 if (i == NL80211_VHT_NSS_MAX)
4845                         return false;
4846
4847                 rate = ffs(mask->control[band].vht_mcs[i]) - 1;
4848                 nss = i;
4849                 break;
4850         }
4851
4852         *fixed_nss = nss + 1;
4853         nss <<= 4;
4854         pream <<= 6;
4855
4856         ath10k_dbg(ar, ATH10K_DBG_MAC, "mac fixed rate pream 0x%02x nss 0x%02x rate 0x%02x\n",
4857                    pream, nss, rate);
4858
4859         *fixed_rate = pream | nss | rate;
4860
4861         return true;
4862 }
4863
4864 static bool ath10k_get_fixed_rate_nss(struct ath10k *ar,
4865                                       const struct cfg80211_bitrate_mask *mask,
4866                                       enum ieee80211_band band,
4867                                       u8 *fixed_rate,
4868                                       u8 *fixed_nss)
4869 {
4870         /* First check full NSS mask, if we can simply limit NSS */
4871         if (ath10k_bitrate_mask_nss(mask, band, fixed_nss))
4872                 return true;
4873
4874         /* Next Check single rate is set */
4875         return ath10k_bitrate_mask_rate(ar, mask, band, fixed_rate, fixed_nss);
4876 }
4877
4878 static int ath10k_set_fixed_rate_param(struct ath10k_vif *arvif,
4879                                        u8 fixed_rate,
4880                                        u8 fixed_nss,
4881                                        u8 force_sgi)
4882 {
4883         struct ath10k *ar = arvif->ar;
4884         u32 vdev_param;
4885         int ret = 0;
4886
4887         mutex_lock(&ar->conf_mutex);
4888
4889         if (arvif->fixed_rate == fixed_rate &&
4890             arvif->fixed_nss == fixed_nss &&
4891             arvif->force_sgi == force_sgi)
4892                 goto exit;
4893
4894         if (fixed_rate == WMI_FIXED_RATE_NONE)
4895                 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac disable fixed bitrate mask\n");
4896
4897         if (force_sgi)
4898                 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac force sgi\n");
4899
4900         vdev_param = ar->wmi.vdev_param->fixed_rate;
4901         ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id,
4902                                         vdev_param, fixed_rate);
4903         if (ret) {
4904                 ath10k_warn(ar, "failed to set fixed rate param 0x%02x: %d\n",
4905                             fixed_rate, ret);
4906                 ret = -EINVAL;
4907                 goto exit;
4908         }
4909
4910         arvif->fixed_rate = fixed_rate;
4911
4912         vdev_param = ar->wmi.vdev_param->nss;
4913         ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id,
4914                                         vdev_param, fixed_nss);
4915
4916         if (ret) {
4917                 ath10k_warn(ar, "failed to set fixed nss param %d: %d\n",
4918                             fixed_nss, ret);
4919                 ret = -EINVAL;
4920                 goto exit;
4921         }
4922
4923         arvif->fixed_nss = fixed_nss;
4924
4925         vdev_param = ar->wmi.vdev_param->sgi;
4926         ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
4927                                         force_sgi);
4928
4929         if (ret) {
4930                 ath10k_warn(ar, "failed to set sgi param %d: %d\n",
4931                             force_sgi, ret);
4932                 ret = -EINVAL;
4933                 goto exit;
4934         }
4935
4936         arvif->force_sgi = force_sgi;
4937
4938 exit:
4939         mutex_unlock(&ar->conf_mutex);
4940         return ret;
4941 }
4942
4943 static int ath10k_set_bitrate_mask(struct ieee80211_hw *hw,
4944                                    struct ieee80211_vif *vif,
4945                                    const struct cfg80211_bitrate_mask *mask)
4946 {
4947         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4948         struct ath10k *ar = arvif->ar;
4949         enum ieee80211_band band = ar->hw->conf.chandef.chan->band;
4950         u8 fixed_rate = WMI_FIXED_RATE_NONE;
4951         u8 fixed_nss = ar->num_rf_chains;
4952         u8 force_sgi;
4953
4954         if (ar->cfg_tx_chainmask)
4955                 fixed_nss = get_nss_from_chainmask(ar->cfg_tx_chainmask);
4956
4957         force_sgi = mask->control[band].gi;
4958         if (force_sgi == NL80211_TXRATE_FORCE_LGI)
4959                 return -EINVAL;
4960
4961         if (!ath10k_default_bitrate_mask(ar, band, mask)) {
4962                 if (!ath10k_get_fixed_rate_nss(ar, mask, band,
4963                                                &fixed_rate,
4964                                                &fixed_nss))
4965                         return -EINVAL;
4966         }
4967
4968         if (fixed_rate == WMI_FIXED_RATE_NONE && force_sgi) {
4969                 ath10k_warn(ar, "failed to force SGI usage for default rate settings\n");
4970                 return -EINVAL;
4971         }
4972
4973         return ath10k_set_fixed_rate_param(arvif, fixed_rate,
4974                                            fixed_nss, force_sgi);
4975 }
4976
4977 static void ath10k_sta_rc_update(struct ieee80211_hw *hw,
4978                                  struct ieee80211_vif *vif,
4979                                  struct ieee80211_sta *sta,
4980                                  u32 changed)
4981 {
4982         struct ath10k *ar = hw->priv;
4983         struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
4984         u32 bw, smps;
4985
4986         spin_lock_bh(&ar->data_lock);
4987
4988         ath10k_dbg(ar, ATH10K_DBG_MAC,
4989                    "mac sta rc update for %pM changed %08x bw %d nss %d smps %d\n",
4990                    sta->addr, changed, sta->bandwidth, sta->rx_nss,
4991                    sta->smps_mode);
4992
4993         if (changed & IEEE80211_RC_BW_CHANGED) {
4994                 bw = WMI_PEER_CHWIDTH_20MHZ;
4995
4996                 switch (sta->bandwidth) {
4997                 case IEEE80211_STA_RX_BW_20:
4998                         bw = WMI_PEER_CHWIDTH_20MHZ;
4999                         break;
5000                 case IEEE80211_STA_RX_BW_40:
5001                         bw = WMI_PEER_CHWIDTH_40MHZ;
5002                         break;
5003                 case IEEE80211_STA_RX_BW_80:
5004                         bw = WMI_PEER_CHWIDTH_80MHZ;
5005                         break;
5006                 case IEEE80211_STA_RX_BW_160:
5007                         ath10k_warn(ar, "Invalid bandwidth %d in rc update for %pM\n",
5008                                     sta->bandwidth, sta->addr);
5009                         bw = WMI_PEER_CHWIDTH_20MHZ;
5010                         break;
5011                 }
5012
5013                 arsta->bw = bw;
5014         }
5015
5016         if (changed & IEEE80211_RC_NSS_CHANGED)
5017                 arsta->nss = sta->rx_nss;
5018
5019         if (changed & IEEE80211_RC_SMPS_CHANGED) {
5020                 smps = WMI_PEER_SMPS_PS_NONE;
5021
5022                 switch (sta->smps_mode) {
5023                 case IEEE80211_SMPS_AUTOMATIC:
5024                 case IEEE80211_SMPS_OFF:
5025                         smps = WMI_PEER_SMPS_PS_NONE;
5026                         break;
5027                 case IEEE80211_SMPS_STATIC:
5028                         smps = WMI_PEER_SMPS_STATIC;
5029                         break;
5030                 case IEEE80211_SMPS_DYNAMIC:
5031                         smps = WMI_PEER_SMPS_DYNAMIC;
5032                         break;
5033                 case IEEE80211_SMPS_NUM_MODES:
5034                         ath10k_warn(ar, "Invalid smps %d in sta rc update for %pM\n",
5035                                     sta->smps_mode, sta->addr);
5036                         smps = WMI_PEER_SMPS_PS_NONE;
5037                         break;
5038                 }
5039
5040                 arsta->smps = smps;
5041         }
5042
5043         arsta->changed |= changed;
5044
5045         spin_unlock_bh(&ar->data_lock);
5046
5047         ieee80211_queue_work(hw, &arsta->update_wk);
5048 }
5049
5050 static u64 ath10k_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
5051 {
5052         /*
5053          * FIXME: Return 0 for time being. Need to figure out whether FW
5054          * has the API to fetch 64-bit local TSF
5055          */
5056
5057         return 0;
5058 }
5059
5060 static int ath10k_ampdu_action(struct ieee80211_hw *hw,
5061                                struct ieee80211_vif *vif,
5062                                enum ieee80211_ampdu_mlme_action action,
5063                                struct ieee80211_sta *sta, u16 tid, u16 *ssn,
5064                                u8 buf_size)
5065 {
5066         struct ath10k *ar = hw->priv;
5067         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
5068
5069         ath10k_dbg(ar, ATH10K_DBG_MAC, "mac ampdu vdev_id %i sta %pM tid %hu action %d\n",
5070                    arvif->vdev_id, sta->addr, tid, action);
5071
5072         switch (action) {
5073         case IEEE80211_AMPDU_RX_START:
5074         case IEEE80211_AMPDU_RX_STOP:
5075                 /* HTT AddBa/DelBa events trigger mac80211 Rx BA session
5076                  * creation/removal. Do we need to verify this?
5077                  */
5078                 return 0;
5079         case IEEE80211_AMPDU_TX_START:
5080         case IEEE80211_AMPDU_TX_STOP_CONT:
5081         case IEEE80211_AMPDU_TX_STOP_FLUSH:
5082         case IEEE80211_AMPDU_TX_STOP_FLUSH_CONT:
5083         case IEEE80211_AMPDU_TX_OPERATIONAL:
5084                 /* Firmware offloads Tx aggregation entirely so deny mac80211
5085                  * Tx aggregation requests.
5086                  */
5087                 return -EOPNOTSUPP;
5088         }
5089
5090         return -EINVAL;
5091 }
5092
5093 static const struct ieee80211_ops ath10k_ops = {
5094         .tx                             = ath10k_tx,
5095         .start                          = ath10k_start,
5096         .stop                           = ath10k_stop,
5097         .config                         = ath10k_config,
5098         .add_interface                  = ath10k_add_interface,
5099         .remove_interface               = ath10k_remove_interface,
5100         .configure_filter               = ath10k_configure_filter,
5101         .bss_info_changed               = ath10k_bss_info_changed,
5102         .hw_scan                        = ath10k_hw_scan,
5103         .cancel_hw_scan                 = ath10k_cancel_hw_scan,
5104         .set_key                        = ath10k_set_key,
5105         .set_default_unicast_key        = ath10k_set_default_unicast_key,
5106         .sta_state                      = ath10k_sta_state,
5107         .conf_tx                        = ath10k_conf_tx,
5108         .remain_on_channel              = ath10k_remain_on_channel,
5109         .cancel_remain_on_channel       = ath10k_cancel_remain_on_channel,
5110         .set_rts_threshold              = ath10k_set_rts_threshold,
5111         .flush                          = ath10k_flush,
5112         .tx_last_beacon                 = ath10k_tx_last_beacon,
5113         .set_antenna                    = ath10k_set_antenna,
5114         .get_antenna                    = ath10k_get_antenna,
5115         .reconfig_complete              = ath10k_reconfig_complete,
5116         .get_survey                     = ath10k_get_survey,
5117         .set_bitrate_mask               = ath10k_set_bitrate_mask,
5118         .sta_rc_update                  = ath10k_sta_rc_update,
5119         .get_tsf                        = ath10k_get_tsf,
5120         .ampdu_action                   = ath10k_ampdu_action,
5121         .get_et_sset_count              = ath10k_debug_get_et_sset_count,
5122         .get_et_stats                   = ath10k_debug_get_et_stats,
5123         .get_et_strings                 = ath10k_debug_get_et_strings,
5124
5125         CFG80211_TESTMODE_CMD(ath10k_tm_cmd)
5126
5127 #ifdef CONFIG_PM
5128         .suspend                        = ath10k_suspend,
5129         .resume                         = ath10k_resume,
5130 #endif
5131 #ifdef CONFIG_MAC80211_DEBUGFS
5132         .sta_add_debugfs                = ath10k_sta_add_debugfs,
5133 #endif
5134 };
5135
5136 #define RATETAB_ENT(_rate, _rateid, _flags) { \
5137         .bitrate                = (_rate), \
5138         .flags                  = (_flags), \
5139         .hw_value               = (_rateid), \
5140 }
5141
5142 #define CHAN2G(_channel, _freq, _flags) { \
5143         .band                   = IEEE80211_BAND_2GHZ, \
5144         .hw_value               = (_channel), \
5145         .center_freq            = (_freq), \
5146         .flags                  = (_flags), \
5147         .max_antenna_gain       = 0, \
5148         .max_power              = 30, \
5149 }
5150
5151 #define CHAN5G(_channel, _freq, _flags) { \
5152         .band                   = IEEE80211_BAND_5GHZ, \
5153         .hw_value               = (_channel), \
5154         .center_freq            = (_freq), \
5155         .flags                  = (_flags), \
5156         .max_antenna_gain       = 0, \
5157         .max_power              = 30, \
5158 }
5159
5160 static const struct ieee80211_channel ath10k_2ghz_channels[] = {
5161         CHAN2G(1, 2412, 0),
5162         CHAN2G(2, 2417, 0),
5163         CHAN2G(3, 2422, 0),
5164         CHAN2G(4, 2427, 0),
5165         CHAN2G(5, 2432, 0),
5166         CHAN2G(6, 2437, 0),
5167         CHAN2G(7, 2442, 0),
5168         CHAN2G(8, 2447, 0),
5169         CHAN2G(9, 2452, 0),
5170         CHAN2G(10, 2457, 0),
5171         CHAN2G(11, 2462, 0),
5172         CHAN2G(12, 2467, 0),
5173         CHAN2G(13, 2472, 0),
5174         CHAN2G(14, 2484, 0),
5175 };
5176
5177 static const struct ieee80211_channel ath10k_5ghz_channels[] = {
5178         CHAN5G(36, 5180, 0),
5179         CHAN5G(40, 5200, 0),
5180         CHAN5G(44, 5220, 0),
5181         CHAN5G(48, 5240, 0),
5182         CHAN5G(52, 5260, 0),
5183         CHAN5G(56, 5280, 0),
5184         CHAN5G(60, 5300, 0),
5185         CHAN5G(64, 5320, 0),
5186         CHAN5G(100, 5500, 0),
5187         CHAN5G(104, 5520, 0),
5188         CHAN5G(108, 5540, 0),
5189         CHAN5G(112, 5560, 0),
5190         CHAN5G(116, 5580, 0),
5191         CHAN5G(120, 5600, 0),
5192         CHAN5G(124, 5620, 0),
5193         CHAN5G(128, 5640, 0),
5194         CHAN5G(132, 5660, 0),
5195         CHAN5G(136, 5680, 0),
5196         CHAN5G(140, 5700, 0),
5197         CHAN5G(149, 5745, 0),
5198         CHAN5G(153, 5765, 0),
5199         CHAN5G(157, 5785, 0),
5200         CHAN5G(161, 5805, 0),
5201         CHAN5G(165, 5825, 0),
5202 };
5203
5204 /* Note: Be careful if you re-order these. There is code which depends on this
5205  * ordering.
5206  */
5207 static struct ieee80211_rate ath10k_rates[] = {
5208         /* CCK */
5209         RATETAB_ENT(10,  0x82, 0),
5210         RATETAB_ENT(20,  0x84, 0),
5211         RATETAB_ENT(55,  0x8b, 0),
5212         RATETAB_ENT(110, 0x96, 0),
5213         /* OFDM */
5214         RATETAB_ENT(60,  0x0c, 0),
5215         RATETAB_ENT(90,  0x12, 0),
5216         RATETAB_ENT(120, 0x18, 0),
5217         RATETAB_ENT(180, 0x24, 0),
5218         RATETAB_ENT(240, 0x30, 0),
5219         RATETAB_ENT(360, 0x48, 0),
5220         RATETAB_ENT(480, 0x60, 0),
5221         RATETAB_ENT(540, 0x6c, 0),
5222 };
5223
5224 #define ath10k_a_rates (ath10k_rates + 4)
5225 #define ath10k_a_rates_size (ARRAY_SIZE(ath10k_rates) - 4)
5226 #define ath10k_g_rates (ath10k_rates + 0)
5227 #define ath10k_g_rates_size (ARRAY_SIZE(ath10k_rates))
5228
5229 struct ath10k *ath10k_mac_create(size_t priv_size)
5230 {
5231         struct ieee80211_hw *hw;
5232         struct ath10k *ar;
5233
5234         hw = ieee80211_alloc_hw(sizeof(struct ath10k) + priv_size, &ath10k_ops);
5235         if (!hw)
5236                 return NULL;
5237
5238         ar = hw->priv;
5239         ar->hw = hw;
5240
5241         return ar;
5242 }
5243
5244 void ath10k_mac_destroy(struct ath10k *ar)
5245 {
5246         ieee80211_free_hw(ar->hw);
5247 }
5248
5249 static const struct ieee80211_iface_limit ath10k_if_limits[] = {
5250         {
5251         .max    = 8,
5252         .types  = BIT(NL80211_IFTYPE_STATION)
5253                 | BIT(NL80211_IFTYPE_P2P_CLIENT)
5254         },
5255         {
5256         .max    = 3,
5257         .types  = BIT(NL80211_IFTYPE_P2P_GO)
5258         },
5259         {
5260         .max    = 1,
5261         .types  = BIT(NL80211_IFTYPE_P2P_DEVICE)
5262         },
5263         {
5264         .max    = 7,
5265         .types  = BIT(NL80211_IFTYPE_AP)
5266         },
5267 };
5268
5269 static const struct ieee80211_iface_limit ath10k_10x_if_limits[] = {
5270         {
5271         .max    = 8,
5272         .types  = BIT(NL80211_IFTYPE_AP)
5273         },
5274 };
5275
5276 static const struct ieee80211_iface_combination ath10k_if_comb[] = {
5277         {
5278                 .limits = ath10k_if_limits,
5279                 .n_limits = ARRAY_SIZE(ath10k_if_limits),
5280                 .max_interfaces = 8,
5281                 .num_different_channels = 1,
5282                 .beacon_int_infra_match = true,
5283         },
5284 };
5285
5286 static const struct ieee80211_iface_combination ath10k_10x_if_comb[] = {
5287         {
5288                 .limits = ath10k_10x_if_limits,
5289                 .n_limits = ARRAY_SIZE(ath10k_10x_if_limits),
5290                 .max_interfaces = 8,
5291                 .num_different_channels = 1,
5292                 .beacon_int_infra_match = true,
5293 #ifdef CONFIG_ATH10K_DFS_CERTIFIED
5294                 .radar_detect_widths =  BIT(NL80211_CHAN_WIDTH_20_NOHT) |
5295                                         BIT(NL80211_CHAN_WIDTH_20) |
5296                                         BIT(NL80211_CHAN_WIDTH_40) |
5297                                         BIT(NL80211_CHAN_WIDTH_80),
5298 #endif
5299         },
5300 };
5301
5302 static struct ieee80211_sta_vht_cap ath10k_create_vht_cap(struct ath10k *ar)
5303 {
5304         struct ieee80211_sta_vht_cap vht_cap = {0};
5305         u16 mcs_map;
5306         int i;
5307
5308         vht_cap.vht_supported = 1;
5309         vht_cap.cap = ar->vht_cap_info;
5310
5311         mcs_map = 0;
5312         for (i = 0; i < 8; i++) {
5313                 if (i < ar->num_rf_chains)
5314                         mcs_map |= IEEE80211_VHT_MCS_SUPPORT_0_9 << (i*2);
5315                 else
5316                         mcs_map |= IEEE80211_VHT_MCS_NOT_SUPPORTED << (i*2);
5317         }
5318
5319         vht_cap.vht_mcs.rx_mcs_map = cpu_to_le16(mcs_map);
5320         vht_cap.vht_mcs.tx_mcs_map = cpu_to_le16(mcs_map);
5321
5322         return vht_cap;
5323 }
5324
5325 static struct ieee80211_sta_ht_cap ath10k_get_ht_cap(struct ath10k *ar)
5326 {
5327         int i;
5328         struct ieee80211_sta_ht_cap ht_cap = {0};
5329
5330         if (!(ar->ht_cap_info & WMI_HT_CAP_ENABLED))
5331                 return ht_cap;
5332
5333         ht_cap.ht_supported = 1;
5334         ht_cap.ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
5335         ht_cap.ampdu_density = IEEE80211_HT_MPDU_DENSITY_8;
5336         ht_cap.cap |= IEEE80211_HT_CAP_SUP_WIDTH_20_40;
5337         ht_cap.cap |= IEEE80211_HT_CAP_DSSSCCK40;
5338         ht_cap.cap |= WLAN_HT_CAP_SM_PS_STATIC << IEEE80211_HT_CAP_SM_PS_SHIFT;
5339
5340         if (ar->ht_cap_info & WMI_HT_CAP_HT20_SGI)
5341                 ht_cap.cap |= IEEE80211_HT_CAP_SGI_20;
5342
5343         if (ar->ht_cap_info & WMI_HT_CAP_HT40_SGI)
5344                 ht_cap.cap |= IEEE80211_HT_CAP_SGI_40;
5345
5346         if (ar->ht_cap_info & WMI_HT_CAP_DYNAMIC_SMPS) {
5347                 u32 smps;
5348
5349                 smps   = WLAN_HT_CAP_SM_PS_DYNAMIC;
5350                 smps <<= IEEE80211_HT_CAP_SM_PS_SHIFT;
5351
5352                 ht_cap.cap |= smps;
5353         }
5354
5355         if (ar->ht_cap_info & WMI_HT_CAP_TX_STBC)
5356                 ht_cap.cap |= IEEE80211_HT_CAP_TX_STBC;
5357
5358         if (ar->ht_cap_info & WMI_HT_CAP_RX_STBC) {
5359                 u32 stbc;
5360
5361                 stbc   = ar->ht_cap_info;
5362                 stbc  &= WMI_HT_CAP_RX_STBC;
5363                 stbc >>= WMI_HT_CAP_RX_STBC_MASK_SHIFT;
5364                 stbc <<= IEEE80211_HT_CAP_RX_STBC_SHIFT;
5365                 stbc  &= IEEE80211_HT_CAP_RX_STBC;
5366
5367                 ht_cap.cap |= stbc;
5368         }
5369
5370         if (ar->ht_cap_info & WMI_HT_CAP_LDPC)
5371                 ht_cap.cap |= IEEE80211_HT_CAP_LDPC_CODING;
5372
5373         if (ar->ht_cap_info & WMI_HT_CAP_L_SIG_TXOP_PROT)
5374                 ht_cap.cap |= IEEE80211_HT_CAP_LSIG_TXOP_PROT;
5375
5376         /* max AMSDU is implicitly taken from vht_cap_info */
5377         if (ar->vht_cap_info & WMI_VHT_CAP_MAX_MPDU_LEN_MASK)
5378                 ht_cap.cap |= IEEE80211_HT_CAP_MAX_AMSDU;
5379
5380         for (i = 0; i < ar->num_rf_chains; i++)
5381                 ht_cap.mcs.rx_mask[i] = 0xFF;
5382
5383         ht_cap.mcs.tx_params |= IEEE80211_HT_MCS_TX_DEFINED;
5384
5385         return ht_cap;
5386 }
5387
5388 static void ath10k_get_arvif_iter(void *data, u8 *mac,
5389                                   struct ieee80211_vif *vif)
5390 {
5391         struct ath10k_vif_iter *arvif_iter = data;
5392         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
5393
5394         if (arvif->vdev_id == arvif_iter->vdev_id)
5395                 arvif_iter->arvif = arvif;
5396 }
5397
5398 struct ath10k_vif *ath10k_get_arvif(struct ath10k *ar, u32 vdev_id)
5399 {
5400         struct ath10k_vif_iter arvif_iter;
5401         u32 flags;
5402
5403         memset(&arvif_iter, 0, sizeof(struct ath10k_vif_iter));
5404         arvif_iter.vdev_id = vdev_id;
5405
5406         flags = IEEE80211_IFACE_ITER_RESUME_ALL;
5407         ieee80211_iterate_active_interfaces_atomic(ar->hw,
5408                                                    flags,
5409                                                    ath10k_get_arvif_iter,
5410                                                    &arvif_iter);
5411         if (!arvif_iter.arvif) {
5412                 ath10k_warn(ar, "No VIF found for vdev %d\n", vdev_id);
5413                 return NULL;
5414         }
5415
5416         return arvif_iter.arvif;
5417 }
5418
5419 int ath10k_mac_register(struct ath10k *ar)
5420 {
5421         static const u32 cipher_suites[] = {
5422                 WLAN_CIPHER_SUITE_WEP40,
5423                 WLAN_CIPHER_SUITE_WEP104,
5424                 WLAN_CIPHER_SUITE_TKIP,
5425                 WLAN_CIPHER_SUITE_CCMP,
5426                 WLAN_CIPHER_SUITE_AES_CMAC,
5427         };
5428         struct ieee80211_supported_band *band;
5429         struct ieee80211_sta_vht_cap vht_cap;
5430         struct ieee80211_sta_ht_cap ht_cap;
5431         void *channels;
5432         int ret;
5433
5434         SET_IEEE80211_PERM_ADDR(ar->hw, ar->mac_addr);
5435
5436         SET_IEEE80211_DEV(ar->hw, ar->dev);
5437
5438         ht_cap = ath10k_get_ht_cap(ar);
5439         vht_cap = ath10k_create_vht_cap(ar);
5440
5441         if (ar->phy_capability & WHAL_WLAN_11G_CAPABILITY) {
5442                 channels = kmemdup(ath10k_2ghz_channels,
5443                                    sizeof(ath10k_2ghz_channels),
5444                                    GFP_KERNEL);
5445                 if (!channels) {
5446                         ret = -ENOMEM;
5447                         goto err_free;
5448                 }
5449
5450                 band = &ar->mac.sbands[IEEE80211_BAND_2GHZ];
5451                 band->n_channels = ARRAY_SIZE(ath10k_2ghz_channels);
5452                 band->channels = channels;
5453                 band->n_bitrates = ath10k_g_rates_size;
5454                 band->bitrates = ath10k_g_rates;
5455                 band->ht_cap = ht_cap;
5456
5457                 /* Enable the VHT support at 2.4 GHz */
5458                 band->vht_cap = vht_cap;
5459
5460                 ar->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = band;
5461         }
5462
5463         if (ar->phy_capability & WHAL_WLAN_11A_CAPABILITY) {
5464                 channels = kmemdup(ath10k_5ghz_channels,
5465                                    sizeof(ath10k_5ghz_channels),
5466                                    GFP_KERNEL);
5467                 if (!channels) {
5468                         ret = -ENOMEM;
5469                         goto err_free;
5470                 }
5471
5472                 band = &ar->mac.sbands[IEEE80211_BAND_5GHZ];
5473                 band->n_channels = ARRAY_SIZE(ath10k_5ghz_channels);
5474                 band->channels = channels;
5475                 band->n_bitrates = ath10k_a_rates_size;
5476                 band->bitrates = ath10k_a_rates;
5477                 band->ht_cap = ht_cap;
5478                 band->vht_cap = vht_cap;
5479                 ar->hw->wiphy->bands[IEEE80211_BAND_5GHZ] = band;
5480         }
5481
5482         ar->hw->wiphy->interface_modes =
5483                 BIT(NL80211_IFTYPE_STATION) |
5484                 BIT(NL80211_IFTYPE_AP);
5485
5486         ar->hw->wiphy->available_antennas_rx = ar->supp_rx_chainmask;
5487         ar->hw->wiphy->available_antennas_tx = ar->supp_tx_chainmask;
5488
5489         if (!test_bit(ATH10K_FW_FEATURE_NO_P2P, ar->fw_features))
5490                 ar->hw->wiphy->interface_modes |=
5491                         BIT(NL80211_IFTYPE_P2P_DEVICE) |
5492                         BIT(NL80211_IFTYPE_P2P_CLIENT) |
5493                         BIT(NL80211_IFTYPE_P2P_GO);
5494
5495         ar->hw->flags = IEEE80211_HW_SIGNAL_DBM |
5496                         IEEE80211_HW_SUPPORTS_PS |
5497                         IEEE80211_HW_SUPPORTS_DYNAMIC_PS |
5498                         IEEE80211_HW_MFP_CAPABLE |
5499                         IEEE80211_HW_REPORTS_TX_ACK_STATUS |
5500                         IEEE80211_HW_HAS_RATE_CONTROL |
5501                         IEEE80211_HW_AP_LINK_PS |
5502                         IEEE80211_HW_SPECTRUM_MGMT |
5503                         IEEE80211_HW_SW_CRYPTO_CONTROL;
5504
5505         ar->hw->wiphy->features |= NL80211_FEATURE_STATIC_SMPS;
5506
5507         if (ar->ht_cap_info & WMI_HT_CAP_DYNAMIC_SMPS)
5508                 ar->hw->wiphy->features |= NL80211_FEATURE_DYNAMIC_SMPS;
5509
5510         if (ar->ht_cap_info & WMI_HT_CAP_ENABLED) {
5511                 ar->hw->flags |= IEEE80211_HW_AMPDU_AGGREGATION;
5512                 ar->hw->flags |= IEEE80211_HW_TX_AMPDU_SETUP_IN_HW;
5513         }
5514
5515         ar->hw->wiphy->max_scan_ssids = WLAN_SCAN_PARAMS_MAX_SSID;
5516         ar->hw->wiphy->max_scan_ie_len = WLAN_SCAN_PARAMS_MAX_IE_LEN;
5517
5518         ar->hw->vif_data_size = sizeof(struct ath10k_vif);
5519         ar->hw->sta_data_size = sizeof(struct ath10k_sta);
5520
5521         ar->hw->max_listen_interval = ATH10K_MAX_HW_LISTEN_INTERVAL;
5522
5523         if (test_bit(WMI_SERVICE_BEACON_OFFLOAD, ar->wmi.svc_map)) {
5524                 ar->hw->wiphy->flags |= WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD;
5525
5526                 /* Firmware delivers WPS/P2P Probe Requests frames to driver so
5527                  * that userspace (e.g. wpa_supplicant/hostapd) can generate
5528                  * correct Probe Responses. This is more of a hack advert..
5529                  */
5530                 ar->hw->wiphy->probe_resp_offload |=
5531                         NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS |
5532                         NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS2 |
5533                         NL80211_PROBE_RESP_OFFLOAD_SUPPORT_P2P;
5534         }
5535
5536         ar->hw->wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
5537         ar->hw->wiphy->flags |= WIPHY_FLAG_HAS_CHANNEL_SWITCH;
5538         ar->hw->wiphy->max_remain_on_channel_duration = 5000;
5539
5540         ar->hw->wiphy->flags |= WIPHY_FLAG_AP_UAPSD;
5541         ar->hw->wiphy->features |= NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE;
5542
5543         /*
5544          * on LL hardware queues are managed entirely by the FW
5545          * so we only advertise to mac we can do the queues thing
5546          */
5547         ar->hw->queues = 4;
5548
5549         switch (ar->wmi.op_version) {
5550         case ATH10K_FW_WMI_OP_VERSION_MAIN:
5551         case ATH10K_FW_WMI_OP_VERSION_TLV:
5552                 ar->hw->wiphy->iface_combinations = ath10k_if_comb;
5553                 ar->hw->wiphy->n_iface_combinations =
5554                         ARRAY_SIZE(ath10k_if_comb);
5555                 ar->hw->wiphy->interface_modes |= BIT(NL80211_IFTYPE_ADHOC);
5556                 break;
5557         case ATH10K_FW_WMI_OP_VERSION_10_1:
5558         case ATH10K_FW_WMI_OP_VERSION_10_2:
5559         case ATH10K_FW_WMI_OP_VERSION_10_2_4:
5560                 ar->hw->wiphy->iface_combinations = ath10k_10x_if_comb;
5561                 ar->hw->wiphy->n_iface_combinations =
5562                         ARRAY_SIZE(ath10k_10x_if_comb);
5563                 break;
5564         case ATH10K_FW_WMI_OP_VERSION_UNSET:
5565         case ATH10K_FW_WMI_OP_VERSION_MAX:
5566                 WARN_ON(1);
5567                 ret = -EINVAL;
5568                 goto err_free;
5569         }
5570
5571         ar->hw->netdev_features = NETIF_F_HW_CSUM;
5572
5573         if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED)) {
5574                 /* Init ath dfs pattern detector */
5575                 ar->ath_common.debug_mask = ATH_DBG_DFS;
5576                 ar->dfs_detector = dfs_pattern_detector_init(&ar->ath_common,
5577                                                              NL80211_DFS_UNSET);
5578
5579                 if (!ar->dfs_detector)
5580                         ath10k_warn(ar, "failed to initialise DFS pattern detector\n");
5581         }
5582
5583         ret = ath_regd_init(&ar->ath_common.regulatory, ar->hw->wiphy,
5584                             ath10k_reg_notifier);
5585         if (ret) {
5586                 ath10k_err(ar, "failed to initialise regulatory: %i\n", ret);
5587                 goto err_free;
5588         }
5589
5590         ar->hw->wiphy->cipher_suites = cipher_suites;
5591         ar->hw->wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
5592
5593         ret = ieee80211_register_hw(ar->hw);
5594         if (ret) {
5595                 ath10k_err(ar, "failed to register ieee80211: %d\n", ret);
5596                 goto err_free;
5597         }
5598
5599         if (!ath_is_world_regd(&ar->ath_common.regulatory)) {
5600                 ret = regulatory_hint(ar->hw->wiphy,
5601                                       ar->ath_common.regulatory.alpha2);
5602                 if (ret)
5603                         goto err_unregister;
5604         }
5605
5606         return 0;
5607
5608 err_unregister:
5609         ieee80211_unregister_hw(ar->hw);
5610 err_free:
5611         kfree(ar->mac.sbands[IEEE80211_BAND_2GHZ].channels);
5612         kfree(ar->mac.sbands[IEEE80211_BAND_5GHZ].channels);
5613
5614         return ret;
5615 }
5616
5617 void ath10k_mac_unregister(struct ath10k *ar)
5618 {
5619         ieee80211_unregister_hw(ar->hw);
5620
5621         if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector)
5622                 ar->dfs_detector->exit(ar->dfs_detector);
5623
5624         kfree(ar->mac.sbands[IEEE80211_BAND_2GHZ].channels);
5625         kfree(ar->mac.sbands[IEEE80211_BAND_5GHZ].channels);
5626
5627         SET_IEEE80211_DEV(ar->hw, NULL);
5628 }