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