]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - drivers/net/wireless/ath/ath10k/mac.c
Merge branch 'for-4.8/core' of git://git.kernel.dk/linux-block
[karo-tx-linux.git] / drivers / net / wireless / ath / ath10k / mac.c
1 /*
2  * Copyright (c) 2005-2011 Atheros Communications Inc.
3  * Copyright (c) 2011-2013 Qualcomm Atheros, Inc.
4  *
5  * Permission to use, copy, modify, and/or distribute this software for any
6  * purpose with or without fee is hereby granted, provided that the above
7  * copyright notice and this permission notice appear in all copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16  */
17
18 #include "mac.h"
19
20 #include <net/mac80211.h>
21 #include <linux/etherdevice.h>
22
23 #include "hif.h"
24 #include "core.h"
25 #include "debug.h"
26 #include "wmi.h"
27 #include "htt.h"
28 #include "txrx.h"
29 #include "testmode.h"
30 #include "wmi.h"
31 #include "wmi-tlv.h"
32 #include "wmi-ops.h"
33 #include "wow.h"
34
35 /*********/
36 /* Rates */
37 /*********/
38
39 static struct ieee80211_rate ath10k_rates[] = {
40         { .bitrate = 10,
41           .hw_value = ATH10K_HW_RATE_CCK_LP_1M },
42         { .bitrate = 20,
43           .hw_value = ATH10K_HW_RATE_CCK_LP_2M,
44           .hw_value_short = ATH10K_HW_RATE_CCK_SP_2M,
45           .flags = IEEE80211_RATE_SHORT_PREAMBLE },
46         { .bitrate = 55,
47           .hw_value = ATH10K_HW_RATE_CCK_LP_5_5M,
48           .hw_value_short = ATH10K_HW_RATE_CCK_SP_5_5M,
49           .flags = IEEE80211_RATE_SHORT_PREAMBLE },
50         { .bitrate = 110,
51           .hw_value = ATH10K_HW_RATE_CCK_LP_11M,
52           .hw_value_short = ATH10K_HW_RATE_CCK_SP_11M,
53           .flags = IEEE80211_RATE_SHORT_PREAMBLE },
54
55         { .bitrate = 60, .hw_value = ATH10K_HW_RATE_OFDM_6M },
56         { .bitrate = 90, .hw_value = ATH10K_HW_RATE_OFDM_9M },
57         { .bitrate = 120, .hw_value = ATH10K_HW_RATE_OFDM_12M },
58         { .bitrate = 180, .hw_value = ATH10K_HW_RATE_OFDM_18M },
59         { .bitrate = 240, .hw_value = ATH10K_HW_RATE_OFDM_24M },
60         { .bitrate = 360, .hw_value = ATH10K_HW_RATE_OFDM_36M },
61         { .bitrate = 480, .hw_value = ATH10K_HW_RATE_OFDM_48M },
62         { .bitrate = 540, .hw_value = ATH10K_HW_RATE_OFDM_54M },
63 };
64
65 #define ATH10K_MAC_FIRST_OFDM_RATE_IDX 4
66
67 #define ath10k_a_rates (ath10k_rates + ATH10K_MAC_FIRST_OFDM_RATE_IDX)
68 #define ath10k_a_rates_size (ARRAY_SIZE(ath10k_rates) - \
69                              ATH10K_MAC_FIRST_OFDM_RATE_IDX)
70 #define ath10k_g_rates (ath10k_rates + 0)
71 #define ath10k_g_rates_size (ARRAY_SIZE(ath10k_rates))
72
73 static bool ath10k_mac_bitrate_is_cck(int bitrate)
74 {
75         switch (bitrate) {
76         case 10:
77         case 20:
78         case 55:
79         case 110:
80                 return true;
81         }
82
83         return false;
84 }
85
86 static u8 ath10k_mac_bitrate_to_rate(int bitrate)
87 {
88         return DIV_ROUND_UP(bitrate, 5) |
89                (ath10k_mac_bitrate_is_cck(bitrate) ? BIT(7) : 0);
90 }
91
92 u8 ath10k_mac_hw_rate_to_idx(const struct ieee80211_supported_band *sband,
93                              u8 hw_rate, bool cck)
94 {
95         const struct ieee80211_rate *rate;
96         int i;
97
98         for (i = 0; i < sband->n_bitrates; i++) {
99                 rate = &sband->bitrates[i];
100
101                 if (ath10k_mac_bitrate_is_cck(rate->bitrate) != cck)
102                         continue;
103
104                 if (rate->hw_value == hw_rate)
105                         return i;
106                 else if (rate->flags & IEEE80211_RATE_SHORT_PREAMBLE &&
107                          rate->hw_value_short == hw_rate)
108                         return i;
109         }
110
111         return 0;
112 }
113
114 u8 ath10k_mac_bitrate_to_idx(const struct ieee80211_supported_band *sband,
115                              u32 bitrate)
116 {
117         int i;
118
119         for (i = 0; i < sband->n_bitrates; i++)
120                 if (sband->bitrates[i].bitrate == bitrate)
121                         return i;
122
123         return 0;
124 }
125
126 static int ath10k_mac_get_max_vht_mcs_map(u16 mcs_map, int nss)
127 {
128         switch ((mcs_map >> (2 * nss)) & 0x3) {
129         case IEEE80211_VHT_MCS_SUPPORT_0_7: return BIT(8) - 1;
130         case IEEE80211_VHT_MCS_SUPPORT_0_8: return BIT(9) - 1;
131         case IEEE80211_VHT_MCS_SUPPORT_0_9: return BIT(10) - 1;
132         }
133         return 0;
134 }
135
136 static u32
137 ath10k_mac_max_ht_nss(const u8 ht_mcs_mask[IEEE80211_HT_MCS_MASK_LEN])
138 {
139         int nss;
140
141         for (nss = IEEE80211_HT_MCS_MASK_LEN - 1; nss >= 0; nss--)
142                 if (ht_mcs_mask[nss])
143                         return nss + 1;
144
145         return 1;
146 }
147
148 static u32
149 ath10k_mac_max_vht_nss(const u16 vht_mcs_mask[NL80211_VHT_NSS_MAX])
150 {
151         int nss;
152
153         for (nss = NL80211_VHT_NSS_MAX - 1; nss >= 0; nss--)
154                 if (vht_mcs_mask[nss])
155                         return nss + 1;
156
157         return 1;
158 }
159
160 int ath10k_mac_ext_resource_config(struct ath10k *ar, u32 val)
161 {
162         enum wmi_host_platform_type platform_type;
163         int ret;
164
165         if (test_bit(WMI_SERVICE_TX_MODE_DYNAMIC, ar->wmi.svc_map))
166                 platform_type = WMI_HOST_PLATFORM_LOW_PERF;
167         else
168                 platform_type = WMI_HOST_PLATFORM_HIGH_PERF;
169
170         ret = ath10k_wmi_ext_resource_config(ar, platform_type, val);
171
172         if (ret && ret != -EOPNOTSUPP) {
173                 ath10k_warn(ar, "failed to configure ext resource: %d\n", ret);
174                 return ret;
175         }
176
177         return 0;
178 }
179
180 /**********/
181 /* Crypto */
182 /**********/
183
184 static int ath10k_send_key(struct ath10k_vif *arvif,
185                            struct ieee80211_key_conf *key,
186                            enum set_key_cmd cmd,
187                            const u8 *macaddr, u32 flags)
188 {
189         struct ath10k *ar = arvif->ar;
190         struct wmi_vdev_install_key_arg arg = {
191                 .vdev_id = arvif->vdev_id,
192                 .key_idx = key->keyidx,
193                 .key_len = key->keylen,
194                 .key_data = key->key,
195                 .key_flags = flags,
196                 .macaddr = macaddr,
197         };
198
199         lockdep_assert_held(&arvif->ar->conf_mutex);
200
201         switch (key->cipher) {
202         case WLAN_CIPHER_SUITE_CCMP:
203                 arg.key_cipher = WMI_CIPHER_AES_CCM;
204                 key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV_MGMT;
205                 break;
206         case WLAN_CIPHER_SUITE_TKIP:
207                 arg.key_cipher = WMI_CIPHER_TKIP;
208                 arg.key_txmic_len = 8;
209                 arg.key_rxmic_len = 8;
210                 break;
211         case WLAN_CIPHER_SUITE_WEP40:
212         case WLAN_CIPHER_SUITE_WEP104:
213                 arg.key_cipher = WMI_CIPHER_WEP;
214                 break;
215         case WLAN_CIPHER_SUITE_AES_CMAC:
216                 WARN_ON(1);
217                 return -EINVAL;
218         default:
219                 ath10k_warn(ar, "cipher %d is not supported\n", key->cipher);
220                 return -EOPNOTSUPP;
221         }
222
223         if (test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags))
224                 key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
225
226         if (cmd == DISABLE_KEY) {
227                 arg.key_cipher = WMI_CIPHER_NONE;
228                 arg.key_data = NULL;
229         }
230
231         return ath10k_wmi_vdev_install_key(arvif->ar, &arg);
232 }
233
234 static int ath10k_install_key(struct ath10k_vif *arvif,
235                               struct ieee80211_key_conf *key,
236                               enum set_key_cmd cmd,
237                               const u8 *macaddr, u32 flags)
238 {
239         struct ath10k *ar = arvif->ar;
240         int ret;
241         unsigned long time_left;
242
243         lockdep_assert_held(&ar->conf_mutex);
244
245         reinit_completion(&ar->install_key_done);
246
247         if (arvif->nohwcrypt)
248                 return 1;
249
250         ret = ath10k_send_key(arvif, key, cmd, macaddr, flags);
251         if (ret)
252                 return ret;
253
254         time_left = wait_for_completion_timeout(&ar->install_key_done, 3 * HZ);
255         if (time_left == 0)
256                 return -ETIMEDOUT;
257
258         return 0;
259 }
260
261 static int ath10k_install_peer_wep_keys(struct ath10k_vif *arvif,
262                                         const u8 *addr)
263 {
264         struct ath10k *ar = arvif->ar;
265         struct ath10k_peer *peer;
266         int ret;
267         int i;
268         u32 flags;
269
270         lockdep_assert_held(&ar->conf_mutex);
271
272         if (WARN_ON(arvif->vif->type != NL80211_IFTYPE_AP &&
273                     arvif->vif->type != NL80211_IFTYPE_ADHOC &&
274                     arvif->vif->type != NL80211_IFTYPE_MESH_POINT))
275                 return -EINVAL;
276
277         spin_lock_bh(&ar->data_lock);
278         peer = ath10k_peer_find(ar, arvif->vdev_id, addr);
279         spin_unlock_bh(&ar->data_lock);
280
281         if (!peer)
282                 return -ENOENT;
283
284         for (i = 0; i < ARRAY_SIZE(arvif->wep_keys); i++) {
285                 if (arvif->wep_keys[i] == NULL)
286                         continue;
287
288                 switch (arvif->vif->type) {
289                 case NL80211_IFTYPE_AP:
290                         flags = WMI_KEY_PAIRWISE;
291
292                         if (arvif->def_wep_key_idx == i)
293                                 flags |= WMI_KEY_TX_USAGE;
294
295                         ret = ath10k_install_key(arvif, arvif->wep_keys[i],
296                                                  SET_KEY, addr, flags);
297                         if (ret < 0)
298                                 return ret;
299                         break;
300                 case NL80211_IFTYPE_ADHOC:
301                         ret = ath10k_install_key(arvif, arvif->wep_keys[i],
302                                                  SET_KEY, addr,
303                                                  WMI_KEY_PAIRWISE);
304                         if (ret < 0)
305                                 return ret;
306
307                         ret = ath10k_install_key(arvif, arvif->wep_keys[i],
308                                                  SET_KEY, addr, WMI_KEY_GROUP);
309                         if (ret < 0)
310                                 return ret;
311                         break;
312                 default:
313                         WARN_ON(1);
314                         return -EINVAL;
315                 }
316
317                 spin_lock_bh(&ar->data_lock);
318                 peer->keys[i] = arvif->wep_keys[i];
319                 spin_unlock_bh(&ar->data_lock);
320         }
321
322         /* In some cases (notably with static WEP IBSS with multiple keys)
323          * multicast Tx becomes broken. Both pairwise and groupwise keys are
324          * installed already. Using WMI_KEY_TX_USAGE in different combinations
325          * didn't seem help. Using def_keyid vdev parameter seems to be
326          * effective so use that.
327          *
328          * FIXME: Revisit. Perhaps this can be done in a less hacky way.
329          */
330         if (arvif->vif->type != NL80211_IFTYPE_ADHOC)
331                 return 0;
332
333         if (arvif->def_wep_key_idx == -1)
334                 return 0;
335
336         ret = ath10k_wmi_vdev_set_param(arvif->ar,
337                                         arvif->vdev_id,
338                                         arvif->ar->wmi.vdev_param->def_keyid,
339                                         arvif->def_wep_key_idx);
340         if (ret) {
341                 ath10k_warn(ar, "failed to re-set def wpa key idxon vdev %i: %d\n",
342                             arvif->vdev_id, ret);
343                 return ret;
344         }
345
346         return 0;
347 }
348
349 static int ath10k_clear_peer_keys(struct ath10k_vif *arvif,
350                                   const u8 *addr)
351 {
352         struct ath10k *ar = arvif->ar;
353         struct ath10k_peer *peer;
354         int first_errno = 0;
355         int ret;
356         int i;
357         u32 flags = 0;
358
359         lockdep_assert_held(&ar->conf_mutex);
360
361         spin_lock_bh(&ar->data_lock);
362         peer = ath10k_peer_find(ar, arvif->vdev_id, addr);
363         spin_unlock_bh(&ar->data_lock);
364
365         if (!peer)
366                 return -ENOENT;
367
368         for (i = 0; i < ARRAY_SIZE(peer->keys); i++) {
369                 if (peer->keys[i] == NULL)
370                         continue;
371
372                 /* key flags are not required to delete the key */
373                 ret = ath10k_install_key(arvif, peer->keys[i],
374                                          DISABLE_KEY, addr, flags);
375                 if (ret < 0 && first_errno == 0)
376                         first_errno = ret;
377
378                 if (ret < 0)
379                         ath10k_warn(ar, "failed to remove peer wep key %d: %d\n",
380                                     i, ret);
381
382                 spin_lock_bh(&ar->data_lock);
383                 peer->keys[i] = NULL;
384                 spin_unlock_bh(&ar->data_lock);
385         }
386
387         return first_errno;
388 }
389
390 bool ath10k_mac_is_peer_wep_key_set(struct ath10k *ar, const u8 *addr,
391                                     u8 keyidx)
392 {
393         struct ath10k_peer *peer;
394         int i;
395
396         lockdep_assert_held(&ar->data_lock);
397
398         /* We don't know which vdev this peer belongs to,
399          * since WMI doesn't give us that information.
400          *
401          * FIXME: multi-bss needs to be handled.
402          */
403         peer = ath10k_peer_find(ar, 0, addr);
404         if (!peer)
405                 return false;
406
407         for (i = 0; i < ARRAY_SIZE(peer->keys); i++) {
408                 if (peer->keys[i] && peer->keys[i]->keyidx == keyidx)
409                         return true;
410         }
411
412         return false;
413 }
414
415 static int ath10k_clear_vdev_key(struct ath10k_vif *arvif,
416                                  struct ieee80211_key_conf *key)
417 {
418         struct ath10k *ar = arvif->ar;
419         struct ath10k_peer *peer;
420         u8 addr[ETH_ALEN];
421         int first_errno = 0;
422         int ret;
423         int i;
424         u32 flags = 0;
425
426         lockdep_assert_held(&ar->conf_mutex);
427
428         for (;;) {
429                 /* since ath10k_install_key we can't hold data_lock all the
430                  * time, so we try to remove the keys incrementally */
431                 spin_lock_bh(&ar->data_lock);
432                 i = 0;
433                 list_for_each_entry(peer, &ar->peers, list) {
434                         for (i = 0; i < ARRAY_SIZE(peer->keys); i++) {
435                                 if (peer->keys[i] == key) {
436                                         ether_addr_copy(addr, peer->addr);
437                                         peer->keys[i] = NULL;
438                                         break;
439                                 }
440                         }
441
442                         if (i < ARRAY_SIZE(peer->keys))
443                                 break;
444                 }
445                 spin_unlock_bh(&ar->data_lock);
446
447                 if (i == ARRAY_SIZE(peer->keys))
448                         break;
449                 /* key flags are not required to delete the key */
450                 ret = ath10k_install_key(arvif, key, DISABLE_KEY, addr, flags);
451                 if (ret < 0 && first_errno == 0)
452                         first_errno = ret;
453
454                 if (ret)
455                         ath10k_warn(ar, "failed to remove key for %pM: %d\n",
456                                     addr, ret);
457         }
458
459         return first_errno;
460 }
461
462 static int ath10k_mac_vif_update_wep_key(struct ath10k_vif *arvif,
463                                          struct ieee80211_key_conf *key)
464 {
465         struct ath10k *ar = arvif->ar;
466         struct ath10k_peer *peer;
467         int ret;
468
469         lockdep_assert_held(&ar->conf_mutex);
470
471         list_for_each_entry(peer, &ar->peers, list) {
472                 if (ether_addr_equal(peer->addr, arvif->vif->addr))
473                         continue;
474
475                 if (ether_addr_equal(peer->addr, arvif->bssid))
476                         continue;
477
478                 if (peer->keys[key->keyidx] == key)
479                         continue;
480
481                 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vif vdev %i update key %i needs update\n",
482                            arvif->vdev_id, key->keyidx);
483
484                 ret = ath10k_install_peer_wep_keys(arvif, peer->addr);
485                 if (ret) {
486                         ath10k_warn(ar, "failed to update wep keys on vdev %i for peer %pM: %d\n",
487                                     arvif->vdev_id, peer->addr, ret);
488                         return ret;
489                 }
490         }
491
492         return 0;
493 }
494
495 /*********************/
496 /* General utilities */
497 /*********************/
498
499 static inline enum wmi_phy_mode
500 chan_to_phymode(const struct cfg80211_chan_def *chandef)
501 {
502         enum wmi_phy_mode phymode = MODE_UNKNOWN;
503
504         switch (chandef->chan->band) {
505         case NL80211_BAND_2GHZ:
506                 switch (chandef->width) {
507                 case NL80211_CHAN_WIDTH_20_NOHT:
508                         if (chandef->chan->flags & IEEE80211_CHAN_NO_OFDM)
509                                 phymode = MODE_11B;
510                         else
511                                 phymode = MODE_11G;
512                         break;
513                 case NL80211_CHAN_WIDTH_20:
514                         phymode = MODE_11NG_HT20;
515                         break;
516                 case NL80211_CHAN_WIDTH_40:
517                         phymode = MODE_11NG_HT40;
518                         break;
519                 case NL80211_CHAN_WIDTH_5:
520                 case NL80211_CHAN_WIDTH_10:
521                 case NL80211_CHAN_WIDTH_80:
522                 case NL80211_CHAN_WIDTH_80P80:
523                 case NL80211_CHAN_WIDTH_160:
524                         phymode = MODE_UNKNOWN;
525                         break;
526                 }
527                 break;
528         case NL80211_BAND_5GHZ:
529                 switch (chandef->width) {
530                 case NL80211_CHAN_WIDTH_20_NOHT:
531                         phymode = MODE_11A;
532                         break;
533                 case NL80211_CHAN_WIDTH_20:
534                         phymode = MODE_11NA_HT20;
535                         break;
536                 case NL80211_CHAN_WIDTH_40:
537                         phymode = MODE_11NA_HT40;
538                         break;
539                 case NL80211_CHAN_WIDTH_80:
540                         phymode = MODE_11AC_VHT80;
541                         break;
542                 case NL80211_CHAN_WIDTH_5:
543                 case NL80211_CHAN_WIDTH_10:
544                 case NL80211_CHAN_WIDTH_80P80:
545                 case NL80211_CHAN_WIDTH_160:
546                         phymode = MODE_UNKNOWN;
547                         break;
548                 }
549                 break;
550         default:
551                 break;
552         }
553
554         WARN_ON(phymode == MODE_UNKNOWN);
555         return phymode;
556 }
557
558 static u8 ath10k_parse_mpdudensity(u8 mpdudensity)
559 {
560 /*
561  * 802.11n D2.0 defined values for "Minimum MPDU Start Spacing":
562  *   0 for no restriction
563  *   1 for 1/4 us
564  *   2 for 1/2 us
565  *   3 for 1 us
566  *   4 for 2 us
567  *   5 for 4 us
568  *   6 for 8 us
569  *   7 for 16 us
570  */
571         switch (mpdudensity) {
572         case 0:
573                 return 0;
574         case 1:
575         case 2:
576         case 3:
577         /* Our lower layer calculations limit our precision to
578            1 microsecond */
579                 return 1;
580         case 4:
581                 return 2;
582         case 5:
583                 return 4;
584         case 6:
585                 return 8;
586         case 7:
587                 return 16;
588         default:
589                 return 0;
590         }
591 }
592
593 int ath10k_mac_vif_chan(struct ieee80211_vif *vif,
594                         struct cfg80211_chan_def *def)
595 {
596         struct ieee80211_chanctx_conf *conf;
597
598         rcu_read_lock();
599         conf = rcu_dereference(vif->chanctx_conf);
600         if (!conf) {
601                 rcu_read_unlock();
602                 return -ENOENT;
603         }
604
605         *def = conf->def;
606         rcu_read_unlock();
607
608         return 0;
609 }
610
611 static void ath10k_mac_num_chanctxs_iter(struct ieee80211_hw *hw,
612                                          struct ieee80211_chanctx_conf *conf,
613                                          void *data)
614 {
615         int *num = data;
616
617         (*num)++;
618 }
619
620 static int ath10k_mac_num_chanctxs(struct ath10k *ar)
621 {
622         int num = 0;
623
624         ieee80211_iter_chan_contexts_atomic(ar->hw,
625                                             ath10k_mac_num_chanctxs_iter,
626                                             &num);
627
628         return num;
629 }
630
631 static void
632 ath10k_mac_get_any_chandef_iter(struct ieee80211_hw *hw,
633                                 struct ieee80211_chanctx_conf *conf,
634                                 void *data)
635 {
636         struct cfg80211_chan_def **def = data;
637
638         *def = &conf->def;
639 }
640
641 static int ath10k_peer_create(struct ath10k *ar,
642                               struct ieee80211_vif *vif,
643                               struct ieee80211_sta *sta,
644                               u32 vdev_id,
645                               const u8 *addr,
646                               enum wmi_peer_type peer_type)
647 {
648         struct ath10k_vif *arvif;
649         struct ath10k_peer *peer;
650         int num_peers = 0;
651         int ret;
652
653         lockdep_assert_held(&ar->conf_mutex);
654
655         num_peers = ar->num_peers;
656
657         /* Each vdev consumes a peer entry as well */
658         list_for_each_entry(arvif, &ar->arvifs, list)
659                 num_peers++;
660
661         if (num_peers >= ar->max_num_peers)
662                 return -ENOBUFS;
663
664         ret = ath10k_wmi_peer_create(ar, vdev_id, addr, peer_type);
665         if (ret) {
666                 ath10k_warn(ar, "failed to create wmi peer %pM on vdev %i: %i\n",
667                             addr, vdev_id, ret);
668                 return ret;
669         }
670
671         ret = ath10k_wait_for_peer_created(ar, vdev_id, addr);
672         if (ret) {
673                 ath10k_warn(ar, "failed to wait for created wmi peer %pM on vdev %i: %i\n",
674                             addr, vdev_id, ret);
675                 return ret;
676         }
677
678         spin_lock_bh(&ar->data_lock);
679
680         peer = ath10k_peer_find(ar, vdev_id, addr);
681         if (!peer) {
682                 spin_unlock_bh(&ar->data_lock);
683                 ath10k_warn(ar, "failed to find peer %pM on vdev %i after creation\n",
684                             addr, vdev_id);
685                 ath10k_wmi_peer_delete(ar, vdev_id, addr);
686                 return -ENOENT;
687         }
688
689         peer->vif = vif;
690         peer->sta = sta;
691
692         spin_unlock_bh(&ar->data_lock);
693
694         ar->num_peers++;
695
696         return 0;
697 }
698
699 static int ath10k_mac_set_kickout(struct ath10k_vif *arvif)
700 {
701         struct ath10k *ar = arvif->ar;
702         u32 param;
703         int ret;
704
705         param = ar->wmi.pdev_param->sta_kickout_th;
706         ret = ath10k_wmi_pdev_set_param(ar, param,
707                                         ATH10K_KICKOUT_THRESHOLD);
708         if (ret) {
709                 ath10k_warn(ar, "failed to set kickout threshold on vdev %i: %d\n",
710                             arvif->vdev_id, ret);
711                 return ret;
712         }
713
714         param = ar->wmi.vdev_param->ap_keepalive_min_idle_inactive_time_secs;
715         ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param,
716                                         ATH10K_KEEPALIVE_MIN_IDLE);
717         if (ret) {
718                 ath10k_warn(ar, "failed to set keepalive minimum idle time on vdev %i: %d\n",
719                             arvif->vdev_id, ret);
720                 return ret;
721         }
722
723         param = ar->wmi.vdev_param->ap_keepalive_max_idle_inactive_time_secs;
724         ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param,
725                                         ATH10K_KEEPALIVE_MAX_IDLE);
726         if (ret) {
727                 ath10k_warn(ar, "failed to set keepalive maximum idle time on vdev %i: %d\n",
728                             arvif->vdev_id, ret);
729                 return ret;
730         }
731
732         param = ar->wmi.vdev_param->ap_keepalive_max_unresponsive_time_secs;
733         ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param,
734                                         ATH10K_KEEPALIVE_MAX_UNRESPONSIVE);
735         if (ret) {
736                 ath10k_warn(ar, "failed to set keepalive maximum unresponsive time on vdev %i: %d\n",
737                             arvif->vdev_id, ret);
738                 return ret;
739         }
740
741         return 0;
742 }
743
744 static int ath10k_mac_set_rts(struct ath10k_vif *arvif, u32 value)
745 {
746         struct ath10k *ar = arvif->ar;
747         u32 vdev_param;
748
749         vdev_param = ar->wmi.vdev_param->rts_threshold;
750         return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, value);
751 }
752
753 static int ath10k_peer_delete(struct ath10k *ar, u32 vdev_id, const u8 *addr)
754 {
755         int ret;
756
757         lockdep_assert_held(&ar->conf_mutex);
758
759         ret = ath10k_wmi_peer_delete(ar, vdev_id, addr);
760         if (ret)
761                 return ret;
762
763         ret = ath10k_wait_for_peer_deleted(ar, vdev_id, addr);
764         if (ret)
765                 return ret;
766
767         ar->num_peers--;
768
769         return 0;
770 }
771
772 static void ath10k_peer_cleanup(struct ath10k *ar, u32 vdev_id)
773 {
774         struct ath10k_peer *peer, *tmp;
775         int peer_id;
776
777         lockdep_assert_held(&ar->conf_mutex);
778
779         spin_lock_bh(&ar->data_lock);
780         list_for_each_entry_safe(peer, tmp, &ar->peers, list) {
781                 if (peer->vdev_id != vdev_id)
782                         continue;
783
784                 ath10k_warn(ar, "removing stale peer %pM from vdev_id %d\n",
785                             peer->addr, vdev_id);
786
787                 for_each_set_bit(peer_id, peer->peer_ids,
788                                  ATH10K_MAX_NUM_PEER_IDS) {
789                         ar->peer_map[peer_id] = NULL;
790                 }
791
792                 list_del(&peer->list);
793                 kfree(peer);
794                 ar->num_peers--;
795         }
796         spin_unlock_bh(&ar->data_lock);
797 }
798
799 static void ath10k_peer_cleanup_all(struct ath10k *ar)
800 {
801         struct ath10k_peer *peer, *tmp;
802
803         lockdep_assert_held(&ar->conf_mutex);
804
805         spin_lock_bh(&ar->data_lock);
806         list_for_each_entry_safe(peer, tmp, &ar->peers, list) {
807                 list_del(&peer->list);
808                 kfree(peer);
809         }
810         spin_unlock_bh(&ar->data_lock);
811
812         ar->num_peers = 0;
813         ar->num_stations = 0;
814 }
815
816 static int ath10k_mac_tdls_peer_update(struct ath10k *ar, u32 vdev_id,
817                                        struct ieee80211_sta *sta,
818                                        enum wmi_tdls_peer_state state)
819 {
820         int ret;
821         struct wmi_tdls_peer_update_cmd_arg arg = {};
822         struct wmi_tdls_peer_capab_arg cap = {};
823         struct wmi_channel_arg chan_arg = {};
824
825         lockdep_assert_held(&ar->conf_mutex);
826
827         arg.vdev_id = vdev_id;
828         arg.peer_state = state;
829         ether_addr_copy(arg.addr, sta->addr);
830
831         cap.peer_max_sp = sta->max_sp;
832         cap.peer_uapsd_queues = sta->uapsd_queues;
833
834         if (state == WMI_TDLS_PEER_STATE_CONNECTED &&
835             !sta->tdls_initiator)
836                 cap.is_peer_responder = 1;
837
838         ret = ath10k_wmi_tdls_peer_update(ar, &arg, &cap, &chan_arg);
839         if (ret) {
840                 ath10k_warn(ar, "failed to update tdls peer %pM on vdev %i: %i\n",
841                             arg.addr, vdev_id, ret);
842                 return ret;
843         }
844
845         return 0;
846 }
847
848 /************************/
849 /* Interface management */
850 /************************/
851
852 void ath10k_mac_vif_beacon_free(struct ath10k_vif *arvif)
853 {
854         struct ath10k *ar = arvif->ar;
855
856         lockdep_assert_held(&ar->data_lock);
857
858         if (!arvif->beacon)
859                 return;
860
861         if (!arvif->beacon_buf)
862                 dma_unmap_single(ar->dev, ATH10K_SKB_CB(arvif->beacon)->paddr,
863                                  arvif->beacon->len, DMA_TO_DEVICE);
864
865         if (WARN_ON(arvif->beacon_state != ATH10K_BEACON_SCHEDULED &&
866                     arvif->beacon_state != ATH10K_BEACON_SENT))
867                 return;
868
869         dev_kfree_skb_any(arvif->beacon);
870
871         arvif->beacon = NULL;
872         arvif->beacon_state = ATH10K_BEACON_SCHEDULED;
873 }
874
875 static void ath10k_mac_vif_beacon_cleanup(struct ath10k_vif *arvif)
876 {
877         struct ath10k *ar = arvif->ar;
878
879         lockdep_assert_held(&ar->data_lock);
880
881         ath10k_mac_vif_beacon_free(arvif);
882
883         if (arvif->beacon_buf) {
884                 dma_free_coherent(ar->dev, IEEE80211_MAX_FRAME_LEN,
885                                   arvif->beacon_buf, arvif->beacon_paddr);
886                 arvif->beacon_buf = NULL;
887         }
888 }
889
890 static inline int ath10k_vdev_setup_sync(struct ath10k *ar)
891 {
892         unsigned long time_left;
893
894         lockdep_assert_held(&ar->conf_mutex);
895
896         if (test_bit(ATH10K_FLAG_CRASH_FLUSH, &ar->dev_flags))
897                 return -ESHUTDOWN;
898
899         time_left = wait_for_completion_timeout(&ar->vdev_setup_done,
900                                                 ATH10K_VDEV_SETUP_TIMEOUT_HZ);
901         if (time_left == 0)
902                 return -ETIMEDOUT;
903
904         return 0;
905 }
906
907 static int ath10k_monitor_vdev_start(struct ath10k *ar, int vdev_id)
908 {
909         struct cfg80211_chan_def *chandef = NULL;
910         struct ieee80211_channel *channel = NULL;
911         struct wmi_vdev_start_request_arg arg = {};
912         int ret = 0;
913
914         lockdep_assert_held(&ar->conf_mutex);
915
916         ieee80211_iter_chan_contexts_atomic(ar->hw,
917                                             ath10k_mac_get_any_chandef_iter,
918                                             &chandef);
919         if (WARN_ON_ONCE(!chandef))
920                 return -ENOENT;
921
922         channel = chandef->chan;
923
924         arg.vdev_id = vdev_id;
925         arg.channel.freq = channel->center_freq;
926         arg.channel.band_center_freq1 = chandef->center_freq1;
927
928         /* TODO setup this dynamically, what in case we
929            don't have any vifs? */
930         arg.channel.mode = chan_to_phymode(chandef);
931         arg.channel.chan_radar =
932                         !!(channel->flags & IEEE80211_CHAN_RADAR);
933
934         arg.channel.min_power = 0;
935         arg.channel.max_power = channel->max_power * 2;
936         arg.channel.max_reg_power = channel->max_reg_power * 2;
937         arg.channel.max_antenna_gain = channel->max_antenna_gain * 2;
938
939         reinit_completion(&ar->vdev_setup_done);
940
941         ret = ath10k_wmi_vdev_start(ar, &arg);
942         if (ret) {
943                 ath10k_warn(ar, "failed to request monitor vdev %i start: %d\n",
944                             vdev_id, ret);
945                 return ret;
946         }
947
948         ret = ath10k_vdev_setup_sync(ar);
949         if (ret) {
950                 ath10k_warn(ar, "failed to synchronize setup for monitor vdev %i start: %d\n",
951                             vdev_id, ret);
952                 return ret;
953         }
954
955         ret = ath10k_wmi_vdev_up(ar, vdev_id, 0, ar->mac_addr);
956         if (ret) {
957                 ath10k_warn(ar, "failed to put up monitor vdev %i: %d\n",
958                             vdev_id, ret);
959                 goto vdev_stop;
960         }
961
962         ar->monitor_vdev_id = vdev_id;
963
964         ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %i started\n",
965                    ar->monitor_vdev_id);
966         return 0;
967
968 vdev_stop:
969         ret = ath10k_wmi_vdev_stop(ar, ar->monitor_vdev_id);
970         if (ret)
971                 ath10k_warn(ar, "failed to stop monitor vdev %i after start failure: %d\n",
972                             ar->monitor_vdev_id, ret);
973
974         return ret;
975 }
976
977 static int ath10k_monitor_vdev_stop(struct ath10k *ar)
978 {
979         int ret = 0;
980
981         lockdep_assert_held(&ar->conf_mutex);
982
983         ret = ath10k_wmi_vdev_down(ar, ar->monitor_vdev_id);
984         if (ret)
985                 ath10k_warn(ar, "failed to put down monitor vdev %i: %d\n",
986                             ar->monitor_vdev_id, ret);
987
988         reinit_completion(&ar->vdev_setup_done);
989
990         ret = ath10k_wmi_vdev_stop(ar, ar->monitor_vdev_id);
991         if (ret)
992                 ath10k_warn(ar, "failed to to request monitor vdev %i stop: %d\n",
993                             ar->monitor_vdev_id, ret);
994
995         ret = ath10k_vdev_setup_sync(ar);
996         if (ret)
997                 ath10k_warn(ar, "failed to synchronize monitor vdev %i stop: %d\n",
998                             ar->monitor_vdev_id, ret);
999
1000         ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %i stopped\n",
1001                    ar->monitor_vdev_id);
1002         return ret;
1003 }
1004
1005 static int ath10k_monitor_vdev_create(struct ath10k *ar)
1006 {
1007         int bit, ret = 0;
1008
1009         lockdep_assert_held(&ar->conf_mutex);
1010
1011         if (ar->free_vdev_map == 0) {
1012                 ath10k_warn(ar, "failed to find free vdev id for monitor vdev\n");
1013                 return -ENOMEM;
1014         }
1015
1016         bit = __ffs64(ar->free_vdev_map);
1017
1018         ar->monitor_vdev_id = bit;
1019
1020         ret = ath10k_wmi_vdev_create(ar, ar->monitor_vdev_id,
1021                                      WMI_VDEV_TYPE_MONITOR,
1022                                      0, ar->mac_addr);
1023         if (ret) {
1024                 ath10k_warn(ar, "failed to request monitor vdev %i creation: %d\n",
1025                             ar->monitor_vdev_id, ret);
1026                 return ret;
1027         }
1028
1029         ar->free_vdev_map &= ~(1LL << ar->monitor_vdev_id);
1030         ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %d created\n",
1031                    ar->monitor_vdev_id);
1032
1033         return 0;
1034 }
1035
1036 static int ath10k_monitor_vdev_delete(struct ath10k *ar)
1037 {
1038         int ret = 0;
1039
1040         lockdep_assert_held(&ar->conf_mutex);
1041
1042         ret = ath10k_wmi_vdev_delete(ar, ar->monitor_vdev_id);
1043         if (ret) {
1044                 ath10k_warn(ar, "failed to request wmi monitor vdev %i removal: %d\n",
1045                             ar->monitor_vdev_id, ret);
1046                 return ret;
1047         }
1048
1049         ar->free_vdev_map |= 1LL << ar->monitor_vdev_id;
1050
1051         ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %d deleted\n",
1052                    ar->monitor_vdev_id);
1053         return ret;
1054 }
1055
1056 static int ath10k_monitor_start(struct ath10k *ar)
1057 {
1058         int ret;
1059
1060         lockdep_assert_held(&ar->conf_mutex);
1061
1062         ret = ath10k_monitor_vdev_create(ar);
1063         if (ret) {
1064                 ath10k_warn(ar, "failed to create monitor vdev: %d\n", ret);
1065                 return ret;
1066         }
1067
1068         ret = ath10k_monitor_vdev_start(ar, ar->monitor_vdev_id);
1069         if (ret) {
1070                 ath10k_warn(ar, "failed to start monitor vdev: %d\n", ret);
1071                 ath10k_monitor_vdev_delete(ar);
1072                 return ret;
1073         }
1074
1075         ar->monitor_started = true;
1076         ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor started\n");
1077
1078         return 0;
1079 }
1080
1081 static int ath10k_monitor_stop(struct ath10k *ar)
1082 {
1083         int ret;
1084
1085         lockdep_assert_held(&ar->conf_mutex);
1086
1087         ret = ath10k_monitor_vdev_stop(ar);
1088         if (ret) {
1089                 ath10k_warn(ar, "failed to stop monitor vdev: %d\n", ret);
1090                 return ret;
1091         }
1092
1093         ret = ath10k_monitor_vdev_delete(ar);
1094         if (ret) {
1095                 ath10k_warn(ar, "failed to delete monitor vdev: %d\n", ret);
1096                 return ret;
1097         }
1098
1099         ar->monitor_started = false;
1100         ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor stopped\n");
1101
1102         return 0;
1103 }
1104
1105 static bool ath10k_mac_monitor_vdev_is_needed(struct ath10k *ar)
1106 {
1107         int num_ctx;
1108
1109         /* At least one chanctx is required to derive a channel to start
1110          * monitor vdev on.
1111          */
1112         num_ctx = ath10k_mac_num_chanctxs(ar);
1113         if (num_ctx == 0)
1114                 return false;
1115
1116         /* If there's already an existing special monitor interface then don't
1117          * bother creating another monitor vdev.
1118          */
1119         if (ar->monitor_arvif)
1120                 return false;
1121
1122         return ar->monitor ||
1123                ar->filter_flags & FIF_OTHER_BSS ||
1124                test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
1125 }
1126
1127 static bool ath10k_mac_monitor_vdev_is_allowed(struct ath10k *ar)
1128 {
1129         int num_ctx;
1130
1131         num_ctx = ath10k_mac_num_chanctxs(ar);
1132
1133         /* FIXME: Current interface combinations and cfg80211/mac80211 code
1134          * shouldn't allow this but make sure to prevent handling the following
1135          * case anyway since multi-channel DFS hasn't been tested at all.
1136          */
1137         if (test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags) && num_ctx > 1)
1138                 return false;
1139
1140         return true;
1141 }
1142
1143 static int ath10k_monitor_recalc(struct ath10k *ar)
1144 {
1145         bool needed;
1146         bool allowed;
1147         int ret;
1148
1149         lockdep_assert_held(&ar->conf_mutex);
1150
1151         needed = ath10k_mac_monitor_vdev_is_needed(ar);
1152         allowed = ath10k_mac_monitor_vdev_is_allowed(ar);
1153
1154         ath10k_dbg(ar, ATH10K_DBG_MAC,
1155                    "mac monitor recalc started? %d needed? %d allowed? %d\n",
1156                    ar->monitor_started, needed, allowed);
1157
1158         if (WARN_ON(needed && !allowed)) {
1159                 if (ar->monitor_started) {
1160                         ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor stopping disallowed monitor\n");
1161
1162                         ret = ath10k_monitor_stop(ar);
1163                         if (ret)
1164                                 ath10k_warn(ar, "failed to stop disallowed monitor: %d\n",
1165                                             ret);
1166                                 /* not serious */
1167                 }
1168
1169                 return -EPERM;
1170         }
1171
1172         if (needed == ar->monitor_started)
1173                 return 0;
1174
1175         if (needed)
1176                 return ath10k_monitor_start(ar);
1177         else
1178                 return ath10k_monitor_stop(ar);
1179 }
1180
1181 static int ath10k_recalc_rtscts_prot(struct ath10k_vif *arvif)
1182 {
1183         struct ath10k *ar = arvif->ar;
1184         u32 vdev_param, rts_cts = 0;
1185
1186         lockdep_assert_held(&ar->conf_mutex);
1187
1188         vdev_param = ar->wmi.vdev_param->enable_rtscts;
1189
1190         rts_cts |= SM(WMI_RTSCTS_ENABLED, WMI_RTSCTS_SET);
1191
1192         if (arvif->num_legacy_stations > 0)
1193                 rts_cts |= SM(WMI_RTSCTS_ACROSS_SW_RETRIES,
1194                               WMI_RTSCTS_PROFILE);
1195         else
1196                 rts_cts |= SM(WMI_RTSCTS_FOR_SECOND_RATESERIES,
1197                               WMI_RTSCTS_PROFILE);
1198
1199         return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
1200                                          rts_cts);
1201 }
1202
1203 static int ath10k_start_cac(struct ath10k *ar)
1204 {
1205         int ret;
1206
1207         lockdep_assert_held(&ar->conf_mutex);
1208
1209         set_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
1210
1211         ret = ath10k_monitor_recalc(ar);
1212         if (ret) {
1213                 ath10k_warn(ar, "failed to start monitor (cac): %d\n", ret);
1214                 clear_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
1215                 return ret;
1216         }
1217
1218         ath10k_dbg(ar, ATH10K_DBG_MAC, "mac cac start monitor vdev %d\n",
1219                    ar->monitor_vdev_id);
1220
1221         return 0;
1222 }
1223
1224 static int ath10k_stop_cac(struct ath10k *ar)
1225 {
1226         lockdep_assert_held(&ar->conf_mutex);
1227
1228         /* CAC is not running - do nothing */
1229         if (!test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags))
1230                 return 0;
1231
1232         clear_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
1233         ath10k_monitor_stop(ar);
1234
1235         ath10k_dbg(ar, ATH10K_DBG_MAC, "mac cac finished\n");
1236
1237         return 0;
1238 }
1239
1240 static void ath10k_mac_has_radar_iter(struct ieee80211_hw *hw,
1241                                       struct ieee80211_chanctx_conf *conf,
1242                                       void *data)
1243 {
1244         bool *ret = data;
1245
1246         if (!*ret && conf->radar_enabled)
1247                 *ret = true;
1248 }
1249
1250 static bool ath10k_mac_has_radar_enabled(struct ath10k *ar)
1251 {
1252         bool has_radar = false;
1253
1254         ieee80211_iter_chan_contexts_atomic(ar->hw,
1255                                             ath10k_mac_has_radar_iter,
1256                                             &has_radar);
1257
1258         return has_radar;
1259 }
1260
1261 static void ath10k_recalc_radar_detection(struct ath10k *ar)
1262 {
1263         int ret;
1264
1265         lockdep_assert_held(&ar->conf_mutex);
1266
1267         ath10k_stop_cac(ar);
1268
1269         if (!ath10k_mac_has_radar_enabled(ar))
1270                 return;
1271
1272         if (ar->num_started_vdevs > 0)
1273                 return;
1274
1275         ret = ath10k_start_cac(ar);
1276         if (ret) {
1277                 /*
1278                  * Not possible to start CAC on current channel so starting
1279                  * radiation is not allowed, make this channel DFS_UNAVAILABLE
1280                  * by indicating that radar was detected.
1281                  */
1282                 ath10k_warn(ar, "failed to start CAC: %d\n", ret);
1283                 ieee80211_radar_detected(ar->hw);
1284         }
1285 }
1286
1287 static int ath10k_vdev_stop(struct ath10k_vif *arvif)
1288 {
1289         struct ath10k *ar = arvif->ar;
1290         int ret;
1291
1292         lockdep_assert_held(&ar->conf_mutex);
1293
1294         reinit_completion(&ar->vdev_setup_done);
1295
1296         ret = ath10k_wmi_vdev_stop(ar, arvif->vdev_id);
1297         if (ret) {
1298                 ath10k_warn(ar, "failed to stop WMI vdev %i: %d\n",
1299                             arvif->vdev_id, ret);
1300                 return ret;
1301         }
1302
1303         ret = ath10k_vdev_setup_sync(ar);
1304         if (ret) {
1305                 ath10k_warn(ar, "failed to syncronise setup for vdev %i: %d\n",
1306                             arvif->vdev_id, ret);
1307                 return ret;
1308         }
1309
1310         WARN_ON(ar->num_started_vdevs == 0);
1311
1312         if (ar->num_started_vdevs != 0) {
1313                 ar->num_started_vdevs--;
1314                 ath10k_recalc_radar_detection(ar);
1315         }
1316
1317         return ret;
1318 }
1319
1320 static int ath10k_vdev_start_restart(struct ath10k_vif *arvif,
1321                                      const struct cfg80211_chan_def *chandef,
1322                                      bool restart)
1323 {
1324         struct ath10k *ar = arvif->ar;
1325         struct wmi_vdev_start_request_arg arg = {};
1326         int ret = 0;
1327
1328         lockdep_assert_held(&ar->conf_mutex);
1329
1330         reinit_completion(&ar->vdev_setup_done);
1331
1332         arg.vdev_id = arvif->vdev_id;
1333         arg.dtim_period = arvif->dtim_period;
1334         arg.bcn_intval = arvif->beacon_interval;
1335
1336         arg.channel.freq = chandef->chan->center_freq;
1337         arg.channel.band_center_freq1 = chandef->center_freq1;
1338         arg.channel.mode = chan_to_phymode(chandef);
1339
1340         arg.channel.min_power = 0;
1341         arg.channel.max_power = chandef->chan->max_power * 2;
1342         arg.channel.max_reg_power = chandef->chan->max_reg_power * 2;
1343         arg.channel.max_antenna_gain = chandef->chan->max_antenna_gain * 2;
1344
1345         if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
1346                 arg.ssid = arvif->u.ap.ssid;
1347                 arg.ssid_len = arvif->u.ap.ssid_len;
1348                 arg.hidden_ssid = arvif->u.ap.hidden_ssid;
1349
1350                 /* For now allow DFS for AP mode */
1351                 arg.channel.chan_radar =
1352                         !!(chandef->chan->flags & IEEE80211_CHAN_RADAR);
1353         } else if (arvif->vdev_type == WMI_VDEV_TYPE_IBSS) {
1354                 arg.ssid = arvif->vif->bss_conf.ssid;
1355                 arg.ssid_len = arvif->vif->bss_conf.ssid_len;
1356         }
1357
1358         ath10k_dbg(ar, ATH10K_DBG_MAC,
1359                    "mac vdev %d start center_freq %d phymode %s\n",
1360                    arg.vdev_id, arg.channel.freq,
1361                    ath10k_wmi_phymode_str(arg.channel.mode));
1362
1363         if (restart)
1364                 ret = ath10k_wmi_vdev_restart(ar, &arg);
1365         else
1366                 ret = ath10k_wmi_vdev_start(ar, &arg);
1367
1368         if (ret) {
1369                 ath10k_warn(ar, "failed to start WMI vdev %i: %d\n",
1370                             arg.vdev_id, ret);
1371                 return ret;
1372         }
1373
1374         ret = ath10k_vdev_setup_sync(ar);
1375         if (ret) {
1376                 ath10k_warn(ar,
1377                             "failed to synchronize setup for vdev %i restart %d: %d\n",
1378                             arg.vdev_id, restart, ret);
1379                 return ret;
1380         }
1381
1382         ar->num_started_vdevs++;
1383         ath10k_recalc_radar_detection(ar);
1384
1385         return ret;
1386 }
1387
1388 static int ath10k_vdev_start(struct ath10k_vif *arvif,
1389                              const struct cfg80211_chan_def *def)
1390 {
1391         return ath10k_vdev_start_restart(arvif, def, false);
1392 }
1393
1394 static int ath10k_vdev_restart(struct ath10k_vif *arvif,
1395                                const struct cfg80211_chan_def *def)
1396 {
1397         return ath10k_vdev_start_restart(arvif, def, true);
1398 }
1399
1400 static int ath10k_mac_setup_bcn_p2p_ie(struct ath10k_vif *arvif,
1401                                        struct sk_buff *bcn)
1402 {
1403         struct ath10k *ar = arvif->ar;
1404         struct ieee80211_mgmt *mgmt;
1405         const u8 *p2p_ie;
1406         int ret;
1407
1408         if (arvif->vif->type != NL80211_IFTYPE_AP || !arvif->vif->p2p)
1409                 return 0;
1410
1411         mgmt = (void *)bcn->data;
1412         p2p_ie = cfg80211_find_vendor_ie(WLAN_OUI_WFA, WLAN_OUI_TYPE_WFA_P2P,
1413                                          mgmt->u.beacon.variable,
1414                                          bcn->len - (mgmt->u.beacon.variable -
1415                                                      bcn->data));
1416         if (!p2p_ie)
1417                 return -ENOENT;
1418
1419         ret = ath10k_wmi_p2p_go_bcn_ie(ar, arvif->vdev_id, p2p_ie);
1420         if (ret) {
1421                 ath10k_warn(ar, "failed to submit p2p go bcn ie for vdev %i: %d\n",
1422                             arvif->vdev_id, ret);
1423                 return ret;
1424         }
1425
1426         return 0;
1427 }
1428
1429 static int ath10k_mac_remove_vendor_ie(struct sk_buff *skb, unsigned int oui,
1430                                        u8 oui_type, size_t ie_offset)
1431 {
1432         size_t len;
1433         const u8 *next;
1434         const u8 *end;
1435         u8 *ie;
1436
1437         if (WARN_ON(skb->len < ie_offset))
1438                 return -EINVAL;
1439
1440         ie = (u8 *)cfg80211_find_vendor_ie(oui, oui_type,
1441                                            skb->data + ie_offset,
1442                                            skb->len - ie_offset);
1443         if (!ie)
1444                 return -ENOENT;
1445
1446         len = ie[1] + 2;
1447         end = skb->data + skb->len;
1448         next = ie + len;
1449
1450         if (WARN_ON(next > end))
1451                 return -EINVAL;
1452
1453         memmove(ie, next, end - next);
1454         skb_trim(skb, skb->len - len);
1455
1456         return 0;
1457 }
1458
1459 static int ath10k_mac_setup_bcn_tmpl(struct ath10k_vif *arvif)
1460 {
1461         struct ath10k *ar = arvif->ar;
1462         struct ieee80211_hw *hw = ar->hw;
1463         struct ieee80211_vif *vif = arvif->vif;
1464         struct ieee80211_mutable_offsets offs = {};
1465         struct sk_buff *bcn;
1466         int ret;
1467
1468         if (!test_bit(WMI_SERVICE_BEACON_OFFLOAD, ar->wmi.svc_map))
1469                 return 0;
1470
1471         if (arvif->vdev_type != WMI_VDEV_TYPE_AP &&
1472             arvif->vdev_type != WMI_VDEV_TYPE_IBSS)
1473                 return 0;
1474
1475         bcn = ieee80211_beacon_get_template(hw, vif, &offs);
1476         if (!bcn) {
1477                 ath10k_warn(ar, "failed to get beacon template from mac80211\n");
1478                 return -EPERM;
1479         }
1480
1481         ret = ath10k_mac_setup_bcn_p2p_ie(arvif, bcn);
1482         if (ret) {
1483                 ath10k_warn(ar, "failed to setup p2p go bcn ie: %d\n", ret);
1484                 kfree_skb(bcn);
1485                 return ret;
1486         }
1487
1488         /* P2P IE is inserted by firmware automatically (as configured above)
1489          * so remove it from the base beacon template to avoid duplicate P2P
1490          * IEs in beacon frames.
1491          */
1492         ath10k_mac_remove_vendor_ie(bcn, WLAN_OUI_WFA, WLAN_OUI_TYPE_WFA_P2P,
1493                                     offsetof(struct ieee80211_mgmt,
1494                                              u.beacon.variable));
1495
1496         ret = ath10k_wmi_bcn_tmpl(ar, arvif->vdev_id, offs.tim_offset, bcn, 0,
1497                                   0, NULL, 0);
1498         kfree_skb(bcn);
1499
1500         if (ret) {
1501                 ath10k_warn(ar, "failed to submit beacon template command: %d\n",
1502                             ret);
1503                 return ret;
1504         }
1505
1506         return 0;
1507 }
1508
1509 static int ath10k_mac_setup_prb_tmpl(struct ath10k_vif *arvif)
1510 {
1511         struct ath10k *ar = arvif->ar;
1512         struct ieee80211_hw *hw = ar->hw;
1513         struct ieee80211_vif *vif = arvif->vif;
1514         struct sk_buff *prb;
1515         int ret;
1516
1517         if (!test_bit(WMI_SERVICE_BEACON_OFFLOAD, ar->wmi.svc_map))
1518                 return 0;
1519
1520         if (arvif->vdev_type != WMI_VDEV_TYPE_AP)
1521                 return 0;
1522
1523         prb = ieee80211_proberesp_get(hw, vif);
1524         if (!prb) {
1525                 ath10k_warn(ar, "failed to get probe resp template from mac80211\n");
1526                 return -EPERM;
1527         }
1528
1529         ret = ath10k_wmi_prb_tmpl(ar, arvif->vdev_id, prb);
1530         kfree_skb(prb);
1531
1532         if (ret) {
1533                 ath10k_warn(ar, "failed to submit probe resp template command: %d\n",
1534                             ret);
1535                 return ret;
1536         }
1537
1538         return 0;
1539 }
1540
1541 static int ath10k_mac_vif_fix_hidden_ssid(struct ath10k_vif *arvif)
1542 {
1543         struct ath10k *ar = arvif->ar;
1544         struct cfg80211_chan_def def;
1545         int ret;
1546
1547         /* When originally vdev is started during assign_vif_chanctx() some
1548          * information is missing, notably SSID. Firmware revisions with beacon
1549          * offloading require the SSID to be provided during vdev (re)start to
1550          * handle hidden SSID properly.
1551          *
1552          * Vdev restart must be done after vdev has been both started and
1553          * upped. Otherwise some firmware revisions (at least 10.2) fail to
1554          * deliver vdev restart response event causing timeouts during vdev
1555          * syncing in ath10k.
1556          *
1557          * Note: The vdev down/up and template reinstallation could be skipped
1558          * since only wmi-tlv firmware are known to have beacon offload and
1559          * wmi-tlv doesn't seem to misbehave like 10.2 wrt vdev restart
1560          * response delivery. It's probably more robust to keep it as is.
1561          */
1562         if (!test_bit(WMI_SERVICE_BEACON_OFFLOAD, ar->wmi.svc_map))
1563                 return 0;
1564
1565         if (WARN_ON(!arvif->is_started))
1566                 return -EINVAL;
1567
1568         if (WARN_ON(!arvif->is_up))
1569                 return -EINVAL;
1570
1571         if (WARN_ON(ath10k_mac_vif_chan(arvif->vif, &def)))
1572                 return -EINVAL;
1573
1574         ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id);
1575         if (ret) {
1576                 ath10k_warn(ar, "failed to bring down ap vdev %i: %d\n",
1577                             arvif->vdev_id, ret);
1578                 return ret;
1579         }
1580
1581         /* Vdev down reset beacon & presp templates. Reinstall them. Otherwise
1582          * firmware will crash upon vdev up.
1583          */
1584
1585         ret = ath10k_mac_setup_bcn_tmpl(arvif);
1586         if (ret) {
1587                 ath10k_warn(ar, "failed to update beacon template: %d\n", ret);
1588                 return ret;
1589         }
1590
1591         ret = ath10k_mac_setup_prb_tmpl(arvif);
1592         if (ret) {
1593                 ath10k_warn(ar, "failed to update presp template: %d\n", ret);
1594                 return ret;
1595         }
1596
1597         ret = ath10k_vdev_restart(arvif, &def);
1598         if (ret) {
1599                 ath10k_warn(ar, "failed to restart ap vdev %i: %d\n",
1600                             arvif->vdev_id, ret);
1601                 return ret;
1602         }
1603
1604         ret = ath10k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid,
1605                                  arvif->bssid);
1606         if (ret) {
1607                 ath10k_warn(ar, "failed to bring up ap vdev %i: %d\n",
1608                             arvif->vdev_id, ret);
1609                 return ret;
1610         }
1611
1612         return 0;
1613 }
1614
1615 static void ath10k_control_beaconing(struct ath10k_vif *arvif,
1616                                      struct ieee80211_bss_conf *info)
1617 {
1618         struct ath10k *ar = arvif->ar;
1619         int ret = 0;
1620
1621         lockdep_assert_held(&arvif->ar->conf_mutex);
1622
1623         if (!info->enable_beacon) {
1624                 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id);
1625                 if (ret)
1626                         ath10k_warn(ar, "failed to down vdev_id %i: %d\n",
1627                                     arvif->vdev_id, ret);
1628
1629                 arvif->is_up = false;
1630
1631                 spin_lock_bh(&arvif->ar->data_lock);
1632                 ath10k_mac_vif_beacon_free(arvif);
1633                 spin_unlock_bh(&arvif->ar->data_lock);
1634
1635                 return;
1636         }
1637
1638         arvif->tx_seq_no = 0x1000;
1639
1640         arvif->aid = 0;
1641         ether_addr_copy(arvif->bssid, info->bssid);
1642
1643         ret = ath10k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid,
1644                                  arvif->bssid);
1645         if (ret) {
1646                 ath10k_warn(ar, "failed to bring up vdev %d: %i\n",
1647                             arvif->vdev_id, ret);
1648                 return;
1649         }
1650
1651         arvif->is_up = true;
1652
1653         ret = ath10k_mac_vif_fix_hidden_ssid(arvif);
1654         if (ret) {
1655                 ath10k_warn(ar, "failed to fix hidden ssid for vdev %i, expect trouble: %d\n",
1656                             arvif->vdev_id, ret);
1657                 return;
1658         }
1659
1660         ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d up\n", arvif->vdev_id);
1661 }
1662
1663 static void ath10k_control_ibss(struct ath10k_vif *arvif,
1664                                 struct ieee80211_bss_conf *info,
1665                                 const u8 self_peer[ETH_ALEN])
1666 {
1667         struct ath10k *ar = arvif->ar;
1668         u32 vdev_param;
1669         int ret = 0;
1670
1671         lockdep_assert_held(&arvif->ar->conf_mutex);
1672
1673         if (!info->ibss_joined) {
1674                 if (is_zero_ether_addr(arvif->bssid))
1675                         return;
1676
1677                 eth_zero_addr(arvif->bssid);
1678
1679                 return;
1680         }
1681
1682         vdev_param = arvif->ar->wmi.vdev_param->atim_window;
1683         ret = ath10k_wmi_vdev_set_param(arvif->ar, arvif->vdev_id, vdev_param,
1684                                         ATH10K_DEFAULT_ATIM);
1685         if (ret)
1686                 ath10k_warn(ar, "failed to set IBSS ATIM for vdev %d: %d\n",
1687                             arvif->vdev_id, ret);
1688 }
1689
1690 static int ath10k_mac_vif_recalc_ps_wake_threshold(struct ath10k_vif *arvif)
1691 {
1692         struct ath10k *ar = arvif->ar;
1693         u32 param;
1694         u32 value;
1695         int ret;
1696
1697         lockdep_assert_held(&arvif->ar->conf_mutex);
1698
1699         if (arvif->u.sta.uapsd)
1700                 value = WMI_STA_PS_TX_WAKE_THRESHOLD_NEVER;
1701         else
1702                 value = WMI_STA_PS_TX_WAKE_THRESHOLD_ALWAYS;
1703
1704         param = WMI_STA_PS_PARAM_TX_WAKE_THRESHOLD;
1705         ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, param, value);
1706         if (ret) {
1707                 ath10k_warn(ar, "failed to submit ps wake threshold %u on vdev %i: %d\n",
1708                             value, arvif->vdev_id, ret);
1709                 return ret;
1710         }
1711
1712         return 0;
1713 }
1714
1715 static int ath10k_mac_vif_recalc_ps_poll_count(struct ath10k_vif *arvif)
1716 {
1717         struct ath10k *ar = arvif->ar;
1718         u32 param;
1719         u32 value;
1720         int ret;
1721
1722         lockdep_assert_held(&arvif->ar->conf_mutex);
1723
1724         if (arvif->u.sta.uapsd)
1725                 value = WMI_STA_PS_PSPOLL_COUNT_UAPSD;
1726         else
1727                 value = WMI_STA_PS_PSPOLL_COUNT_NO_MAX;
1728
1729         param = WMI_STA_PS_PARAM_PSPOLL_COUNT;
1730         ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
1731                                           param, value);
1732         if (ret) {
1733                 ath10k_warn(ar, "failed to submit ps poll count %u on vdev %i: %d\n",
1734                             value, arvif->vdev_id, ret);
1735                 return ret;
1736         }
1737
1738         return 0;
1739 }
1740
1741 static int ath10k_mac_num_vifs_started(struct ath10k *ar)
1742 {
1743         struct ath10k_vif *arvif;
1744         int num = 0;
1745
1746         lockdep_assert_held(&ar->conf_mutex);
1747
1748         list_for_each_entry(arvif, &ar->arvifs, list)
1749                 if (arvif->is_started)
1750                         num++;
1751
1752         return num;
1753 }
1754
1755 static int ath10k_mac_vif_setup_ps(struct ath10k_vif *arvif)
1756 {
1757         struct ath10k *ar = arvif->ar;
1758         struct ieee80211_vif *vif = arvif->vif;
1759         struct ieee80211_conf *conf = &ar->hw->conf;
1760         enum wmi_sta_powersave_param param;
1761         enum wmi_sta_ps_mode psmode;
1762         int ret;
1763         int ps_timeout;
1764         bool enable_ps;
1765
1766         lockdep_assert_held(&arvif->ar->conf_mutex);
1767
1768         if (arvif->vif->type != NL80211_IFTYPE_STATION)
1769                 return 0;
1770
1771         enable_ps = arvif->ps;
1772
1773         if (enable_ps && ath10k_mac_num_vifs_started(ar) > 1 &&
1774             !test_bit(ATH10K_FW_FEATURE_MULTI_VIF_PS_SUPPORT,
1775                       ar->running_fw->fw_file.fw_features)) {
1776                 ath10k_warn(ar, "refusing to enable ps on vdev %i: not supported by fw\n",
1777                             arvif->vdev_id);
1778                 enable_ps = false;
1779         }
1780
1781         if (!arvif->is_started) {
1782                 /* mac80211 can update vif powersave state while disconnected.
1783                  * Firmware doesn't behave nicely and consumes more power than
1784                  * necessary if PS is disabled on a non-started vdev. Hence
1785                  * force-enable PS for non-running vdevs.
1786                  */
1787                 psmode = WMI_STA_PS_MODE_ENABLED;
1788         } else if (enable_ps) {
1789                 psmode = WMI_STA_PS_MODE_ENABLED;
1790                 param = WMI_STA_PS_PARAM_INACTIVITY_TIME;
1791
1792                 ps_timeout = conf->dynamic_ps_timeout;
1793                 if (ps_timeout == 0) {
1794                         /* Firmware doesn't like 0 */
1795                         ps_timeout = ieee80211_tu_to_usec(
1796                                 vif->bss_conf.beacon_int) / 1000;
1797                 }
1798
1799                 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, param,
1800                                                   ps_timeout);
1801                 if (ret) {
1802                         ath10k_warn(ar, "failed to set inactivity time for vdev %d: %i\n",
1803                                     arvif->vdev_id, ret);
1804                         return ret;
1805                 }
1806         } else {
1807                 psmode = WMI_STA_PS_MODE_DISABLED;
1808         }
1809
1810         ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d psmode %s\n",
1811                    arvif->vdev_id, psmode ? "enable" : "disable");
1812
1813         ret = ath10k_wmi_set_psmode(ar, arvif->vdev_id, psmode);
1814         if (ret) {
1815                 ath10k_warn(ar, "failed to set PS Mode %d for vdev %d: %d\n",
1816                             psmode, arvif->vdev_id, ret);
1817                 return ret;
1818         }
1819
1820         return 0;
1821 }
1822
1823 static int ath10k_mac_vif_disable_keepalive(struct ath10k_vif *arvif)
1824 {
1825         struct ath10k *ar = arvif->ar;
1826         struct wmi_sta_keepalive_arg arg = {};
1827         int ret;
1828
1829         lockdep_assert_held(&arvif->ar->conf_mutex);
1830
1831         if (arvif->vdev_type != WMI_VDEV_TYPE_STA)
1832                 return 0;
1833
1834         if (!test_bit(WMI_SERVICE_STA_KEEP_ALIVE, ar->wmi.svc_map))
1835                 return 0;
1836
1837         /* Some firmware revisions have a bug and ignore the `enabled` field.
1838          * Instead use the interval to disable the keepalive.
1839          */
1840         arg.vdev_id = arvif->vdev_id;
1841         arg.enabled = 1;
1842         arg.method = WMI_STA_KEEPALIVE_METHOD_NULL_FRAME;
1843         arg.interval = WMI_STA_KEEPALIVE_INTERVAL_DISABLE;
1844
1845         ret = ath10k_wmi_sta_keepalive(ar, &arg);
1846         if (ret) {
1847                 ath10k_warn(ar, "failed to submit keepalive on vdev %i: %d\n",
1848                             arvif->vdev_id, ret);
1849                 return ret;
1850         }
1851
1852         return 0;
1853 }
1854
1855 static void ath10k_mac_vif_ap_csa_count_down(struct ath10k_vif *arvif)
1856 {
1857         struct ath10k *ar = arvif->ar;
1858         struct ieee80211_vif *vif = arvif->vif;
1859         int ret;
1860
1861         lockdep_assert_held(&arvif->ar->conf_mutex);
1862
1863         if (WARN_ON(!test_bit(WMI_SERVICE_BEACON_OFFLOAD, ar->wmi.svc_map)))
1864                 return;
1865
1866         if (arvif->vdev_type != WMI_VDEV_TYPE_AP)
1867                 return;
1868
1869         if (!vif->csa_active)
1870                 return;
1871
1872         if (!arvif->is_up)
1873                 return;
1874
1875         if (!ieee80211_csa_is_complete(vif)) {
1876                 ieee80211_csa_update_counter(vif);
1877
1878                 ret = ath10k_mac_setup_bcn_tmpl(arvif);
1879                 if (ret)
1880                         ath10k_warn(ar, "failed to update bcn tmpl during csa: %d\n",
1881                                     ret);
1882
1883                 ret = ath10k_mac_setup_prb_tmpl(arvif);
1884                 if (ret)
1885                         ath10k_warn(ar, "failed to update prb tmpl during csa: %d\n",
1886                                     ret);
1887         } else {
1888                 ieee80211_csa_finish(vif);
1889         }
1890 }
1891
1892 static void ath10k_mac_vif_ap_csa_work(struct work_struct *work)
1893 {
1894         struct ath10k_vif *arvif = container_of(work, struct ath10k_vif,
1895                                                 ap_csa_work);
1896         struct ath10k *ar = arvif->ar;
1897
1898         mutex_lock(&ar->conf_mutex);
1899         ath10k_mac_vif_ap_csa_count_down(arvif);
1900         mutex_unlock(&ar->conf_mutex);
1901 }
1902
1903 static void ath10k_mac_handle_beacon_iter(void *data, u8 *mac,
1904                                           struct ieee80211_vif *vif)
1905 {
1906         struct sk_buff *skb = data;
1907         struct ieee80211_mgmt *mgmt = (void *)skb->data;
1908         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1909
1910         if (vif->type != NL80211_IFTYPE_STATION)
1911                 return;
1912
1913         if (!ether_addr_equal(mgmt->bssid, vif->bss_conf.bssid))
1914                 return;
1915
1916         cancel_delayed_work(&arvif->connection_loss_work);
1917 }
1918
1919 void ath10k_mac_handle_beacon(struct ath10k *ar, struct sk_buff *skb)
1920 {
1921         ieee80211_iterate_active_interfaces_atomic(ar->hw,
1922                                                    IEEE80211_IFACE_ITER_NORMAL,
1923                                                    ath10k_mac_handle_beacon_iter,
1924                                                    skb);
1925 }
1926
1927 static void ath10k_mac_handle_beacon_miss_iter(void *data, u8 *mac,
1928                                                struct ieee80211_vif *vif)
1929 {
1930         u32 *vdev_id = data;
1931         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1932         struct ath10k *ar = arvif->ar;
1933         struct ieee80211_hw *hw = ar->hw;
1934
1935         if (arvif->vdev_id != *vdev_id)
1936                 return;
1937
1938         if (!arvif->is_up)
1939                 return;
1940
1941         ieee80211_beacon_loss(vif);
1942
1943         /* Firmware doesn't report beacon loss events repeatedly. If AP probe
1944          * (done by mac80211) succeeds but beacons do not resume then it
1945          * doesn't make sense to continue operation. Queue connection loss work
1946          * which can be cancelled when beacon is received.
1947          */
1948         ieee80211_queue_delayed_work(hw, &arvif->connection_loss_work,
1949                                      ATH10K_CONNECTION_LOSS_HZ);
1950 }
1951
1952 void ath10k_mac_handle_beacon_miss(struct ath10k *ar, u32 vdev_id)
1953 {
1954         ieee80211_iterate_active_interfaces_atomic(ar->hw,
1955                                                    IEEE80211_IFACE_ITER_NORMAL,
1956                                                    ath10k_mac_handle_beacon_miss_iter,
1957                                                    &vdev_id);
1958 }
1959
1960 static void ath10k_mac_vif_sta_connection_loss_work(struct work_struct *work)
1961 {
1962         struct ath10k_vif *arvif = container_of(work, struct ath10k_vif,
1963                                                 connection_loss_work.work);
1964         struct ieee80211_vif *vif = arvif->vif;
1965
1966         if (!arvif->is_up)
1967                 return;
1968
1969         ieee80211_connection_loss(vif);
1970 }
1971
1972 /**********************/
1973 /* Station management */
1974 /**********************/
1975
1976 static u32 ath10k_peer_assoc_h_listen_intval(struct ath10k *ar,
1977                                              struct ieee80211_vif *vif)
1978 {
1979         /* Some firmware revisions have unstable STA powersave when listen
1980          * interval is set too high (e.g. 5). The symptoms are firmware doesn't
1981          * generate NullFunc frames properly even if buffered frames have been
1982          * indicated in Beacon TIM. Firmware would seldom wake up to pull
1983          * buffered frames. Often pinging the device from AP would simply fail.
1984          *
1985          * As a workaround set it to 1.
1986          */
1987         if (vif->type == NL80211_IFTYPE_STATION)
1988                 return 1;
1989
1990         return ar->hw->conf.listen_interval;
1991 }
1992
1993 static void ath10k_peer_assoc_h_basic(struct ath10k *ar,
1994                                       struct ieee80211_vif *vif,
1995                                       struct ieee80211_sta *sta,
1996                                       struct wmi_peer_assoc_complete_arg *arg)
1997 {
1998         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1999         u32 aid;
2000
2001         lockdep_assert_held(&ar->conf_mutex);
2002
2003         if (vif->type == NL80211_IFTYPE_STATION)
2004                 aid = vif->bss_conf.aid;
2005         else
2006                 aid = sta->aid;
2007
2008         ether_addr_copy(arg->addr, sta->addr);
2009         arg->vdev_id = arvif->vdev_id;
2010         arg->peer_aid = aid;
2011         arg->peer_flags |= arvif->ar->wmi.peer_flags->auth;
2012         arg->peer_listen_intval = ath10k_peer_assoc_h_listen_intval(ar, vif);
2013         arg->peer_num_spatial_streams = 1;
2014         arg->peer_caps = vif->bss_conf.assoc_capability;
2015 }
2016
2017 static void ath10k_peer_assoc_h_crypto(struct ath10k *ar,
2018                                        struct ieee80211_vif *vif,
2019                                        struct ieee80211_sta *sta,
2020                                        struct wmi_peer_assoc_complete_arg *arg)
2021 {
2022         struct ieee80211_bss_conf *info = &vif->bss_conf;
2023         struct cfg80211_chan_def def;
2024         struct cfg80211_bss *bss;
2025         const u8 *rsnie = NULL;
2026         const u8 *wpaie = NULL;
2027
2028         lockdep_assert_held(&ar->conf_mutex);
2029
2030         if (WARN_ON(ath10k_mac_vif_chan(vif, &def)))
2031                 return;
2032
2033         bss = cfg80211_get_bss(ar->hw->wiphy, def.chan, info->bssid, NULL, 0,
2034                                IEEE80211_BSS_TYPE_ANY, IEEE80211_PRIVACY_ANY);
2035         if (bss) {
2036                 const struct cfg80211_bss_ies *ies;
2037
2038                 rcu_read_lock();
2039                 rsnie = ieee80211_bss_get_ie(bss, WLAN_EID_RSN);
2040
2041                 ies = rcu_dereference(bss->ies);
2042
2043                 wpaie = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
2044                                                 WLAN_OUI_TYPE_MICROSOFT_WPA,
2045                                                 ies->data,
2046                                                 ies->len);
2047                 rcu_read_unlock();
2048                 cfg80211_put_bss(ar->hw->wiphy, bss);
2049         }
2050
2051         /* FIXME: base on RSN IE/WPA IE is a correct idea? */
2052         if (rsnie || wpaie) {
2053                 ath10k_dbg(ar, ATH10K_DBG_WMI, "%s: rsn ie found\n", __func__);
2054                 arg->peer_flags |= ar->wmi.peer_flags->need_ptk_4_way;
2055         }
2056
2057         if (wpaie) {
2058                 ath10k_dbg(ar, ATH10K_DBG_WMI, "%s: wpa ie found\n", __func__);
2059                 arg->peer_flags |= ar->wmi.peer_flags->need_gtk_2_way;
2060         }
2061
2062         if (sta->mfp &&
2063             test_bit(ATH10K_FW_FEATURE_MFP_SUPPORT,
2064                      ar->running_fw->fw_file.fw_features)) {
2065                 arg->peer_flags |= ar->wmi.peer_flags->pmf;
2066         }
2067 }
2068
2069 static void ath10k_peer_assoc_h_rates(struct ath10k *ar,
2070                                       struct ieee80211_vif *vif,
2071                                       struct ieee80211_sta *sta,
2072                                       struct wmi_peer_assoc_complete_arg *arg)
2073 {
2074         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2075         struct wmi_rate_set_arg *rateset = &arg->peer_legacy_rates;
2076         struct cfg80211_chan_def def;
2077         const struct ieee80211_supported_band *sband;
2078         const struct ieee80211_rate *rates;
2079         enum nl80211_band band;
2080         u32 ratemask;
2081         u8 rate;
2082         int i;
2083
2084         lockdep_assert_held(&ar->conf_mutex);
2085
2086         if (WARN_ON(ath10k_mac_vif_chan(vif, &def)))
2087                 return;
2088
2089         band = def.chan->band;
2090         sband = ar->hw->wiphy->bands[band];
2091         ratemask = sta->supp_rates[band];
2092         ratemask &= arvif->bitrate_mask.control[band].legacy;
2093         rates = sband->bitrates;
2094
2095         rateset->num_rates = 0;
2096
2097         for (i = 0; i < 32; i++, ratemask >>= 1, rates++) {
2098                 if (!(ratemask & 1))
2099                         continue;
2100
2101                 rate = ath10k_mac_bitrate_to_rate(rates->bitrate);
2102                 rateset->rates[rateset->num_rates] = rate;
2103                 rateset->num_rates++;
2104         }
2105 }
2106
2107 static bool
2108 ath10k_peer_assoc_h_ht_masked(const u8 ht_mcs_mask[IEEE80211_HT_MCS_MASK_LEN])
2109 {
2110         int nss;
2111
2112         for (nss = 0; nss < IEEE80211_HT_MCS_MASK_LEN; nss++)
2113                 if (ht_mcs_mask[nss])
2114                         return false;
2115
2116         return true;
2117 }
2118
2119 static bool
2120 ath10k_peer_assoc_h_vht_masked(const u16 vht_mcs_mask[NL80211_VHT_NSS_MAX])
2121 {
2122         int nss;
2123
2124         for (nss = 0; nss < NL80211_VHT_NSS_MAX; nss++)
2125                 if (vht_mcs_mask[nss])
2126                         return false;
2127
2128         return true;
2129 }
2130
2131 static void ath10k_peer_assoc_h_ht(struct ath10k *ar,
2132                                    struct ieee80211_vif *vif,
2133                                    struct ieee80211_sta *sta,
2134                                    struct wmi_peer_assoc_complete_arg *arg)
2135 {
2136         const struct ieee80211_sta_ht_cap *ht_cap = &sta->ht_cap;
2137         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2138         struct cfg80211_chan_def def;
2139         enum nl80211_band band;
2140         const u8 *ht_mcs_mask;
2141         const u16 *vht_mcs_mask;
2142         int i, n;
2143         u8 max_nss;
2144         u32 stbc;
2145
2146         lockdep_assert_held(&ar->conf_mutex);
2147
2148         if (WARN_ON(ath10k_mac_vif_chan(vif, &def)))
2149                 return;
2150
2151         if (!ht_cap->ht_supported)
2152                 return;
2153
2154         band = def.chan->band;
2155         ht_mcs_mask = arvif->bitrate_mask.control[band].ht_mcs;
2156         vht_mcs_mask = arvif->bitrate_mask.control[band].vht_mcs;
2157
2158         if (ath10k_peer_assoc_h_ht_masked(ht_mcs_mask) &&
2159             ath10k_peer_assoc_h_vht_masked(vht_mcs_mask))
2160                 return;
2161
2162         arg->peer_flags |= ar->wmi.peer_flags->ht;
2163         arg->peer_max_mpdu = (1 << (IEEE80211_HT_MAX_AMPDU_FACTOR +
2164                                     ht_cap->ampdu_factor)) - 1;
2165
2166         arg->peer_mpdu_density =
2167                 ath10k_parse_mpdudensity(ht_cap->ampdu_density);
2168
2169         arg->peer_ht_caps = ht_cap->cap;
2170         arg->peer_rate_caps |= WMI_RC_HT_FLAG;
2171
2172         if (ht_cap->cap & IEEE80211_HT_CAP_LDPC_CODING)
2173                 arg->peer_flags |= ar->wmi.peer_flags->ldbc;
2174
2175         if (sta->bandwidth >= IEEE80211_STA_RX_BW_40) {
2176                 arg->peer_flags |= ar->wmi.peer_flags->bw40;
2177                 arg->peer_rate_caps |= WMI_RC_CW40_FLAG;
2178         }
2179
2180         if (arvif->bitrate_mask.control[band].gi != NL80211_TXRATE_FORCE_LGI) {
2181                 if (ht_cap->cap & IEEE80211_HT_CAP_SGI_20)
2182                         arg->peer_rate_caps |= WMI_RC_SGI_FLAG;
2183
2184                 if (ht_cap->cap & IEEE80211_HT_CAP_SGI_40)
2185                         arg->peer_rate_caps |= WMI_RC_SGI_FLAG;
2186         }
2187
2188         if (ht_cap->cap & IEEE80211_HT_CAP_TX_STBC) {
2189                 arg->peer_rate_caps |= WMI_RC_TX_STBC_FLAG;
2190                 arg->peer_flags |= ar->wmi.peer_flags->stbc;
2191         }
2192
2193         if (ht_cap->cap & IEEE80211_HT_CAP_RX_STBC) {
2194                 stbc = ht_cap->cap & IEEE80211_HT_CAP_RX_STBC;
2195                 stbc = stbc >> IEEE80211_HT_CAP_RX_STBC_SHIFT;
2196                 stbc = stbc << WMI_RC_RX_STBC_FLAG_S;
2197                 arg->peer_rate_caps |= stbc;
2198                 arg->peer_flags |= ar->wmi.peer_flags->stbc;
2199         }
2200
2201         if (ht_cap->mcs.rx_mask[1] && ht_cap->mcs.rx_mask[2])
2202                 arg->peer_rate_caps |= WMI_RC_TS_FLAG;
2203         else if (ht_cap->mcs.rx_mask[1])
2204                 arg->peer_rate_caps |= WMI_RC_DS_FLAG;
2205
2206         for (i = 0, n = 0, max_nss = 0; i < IEEE80211_HT_MCS_MASK_LEN * 8; i++)
2207                 if ((ht_cap->mcs.rx_mask[i / 8] & BIT(i % 8)) &&
2208                     (ht_mcs_mask[i / 8] & BIT(i % 8))) {
2209                         max_nss = (i / 8) + 1;
2210                         arg->peer_ht_rates.rates[n++] = i;
2211                 }
2212
2213         /*
2214          * This is a workaround for HT-enabled STAs which break the spec
2215          * and have no HT capabilities RX mask (no HT RX MCS map).
2216          *
2217          * As per spec, in section 20.3.5 Modulation and coding scheme (MCS),
2218          * MCS 0 through 7 are mandatory in 20MHz with 800 ns GI at all STAs.
2219          *
2220          * Firmware asserts if such situation occurs.
2221          */
2222         if (n == 0) {
2223                 arg->peer_ht_rates.num_rates = 8;
2224                 for (i = 0; i < arg->peer_ht_rates.num_rates; i++)
2225                         arg->peer_ht_rates.rates[i] = i;
2226         } else {
2227                 arg->peer_ht_rates.num_rates = n;
2228                 arg->peer_num_spatial_streams = min(sta->rx_nss, max_nss);
2229         }
2230
2231         ath10k_dbg(ar, ATH10K_DBG_MAC, "mac ht peer %pM mcs cnt %d nss %d\n",
2232                    arg->addr,
2233                    arg->peer_ht_rates.num_rates,
2234                    arg->peer_num_spatial_streams);
2235 }
2236
2237 static int ath10k_peer_assoc_qos_ap(struct ath10k *ar,
2238                                     struct ath10k_vif *arvif,
2239                                     struct ieee80211_sta *sta)
2240 {
2241         u32 uapsd = 0;
2242         u32 max_sp = 0;
2243         int ret = 0;
2244
2245         lockdep_assert_held(&ar->conf_mutex);
2246
2247         if (sta->wme && sta->uapsd_queues) {
2248                 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac uapsd_queues 0x%x max_sp %d\n",
2249                            sta->uapsd_queues, sta->max_sp);
2250
2251                 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_VO)
2252                         uapsd |= WMI_AP_PS_UAPSD_AC3_DELIVERY_EN |
2253                                  WMI_AP_PS_UAPSD_AC3_TRIGGER_EN;
2254                 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_VI)
2255                         uapsd |= WMI_AP_PS_UAPSD_AC2_DELIVERY_EN |
2256                                  WMI_AP_PS_UAPSD_AC2_TRIGGER_EN;
2257                 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_BK)
2258                         uapsd |= WMI_AP_PS_UAPSD_AC1_DELIVERY_EN |
2259                                  WMI_AP_PS_UAPSD_AC1_TRIGGER_EN;
2260                 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_BE)
2261                         uapsd |= WMI_AP_PS_UAPSD_AC0_DELIVERY_EN |
2262                                  WMI_AP_PS_UAPSD_AC0_TRIGGER_EN;
2263
2264                 if (sta->max_sp < MAX_WMI_AP_PS_PEER_PARAM_MAX_SP)
2265                         max_sp = sta->max_sp;
2266
2267                 ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id,
2268                                                  sta->addr,
2269                                                  WMI_AP_PS_PEER_PARAM_UAPSD,
2270                                                  uapsd);
2271                 if (ret) {
2272                         ath10k_warn(ar, "failed to set ap ps peer param uapsd for vdev %i: %d\n",
2273                                     arvif->vdev_id, ret);
2274                         return ret;
2275                 }
2276
2277                 ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id,
2278                                                  sta->addr,
2279                                                  WMI_AP_PS_PEER_PARAM_MAX_SP,
2280                                                  max_sp);
2281                 if (ret) {
2282                         ath10k_warn(ar, "failed to set ap ps peer param max sp for vdev %i: %d\n",
2283                                     arvif->vdev_id, ret);
2284                         return ret;
2285                 }
2286
2287                 /* TODO setup this based on STA listen interval and
2288                    beacon interval. Currently we don't know
2289                    sta->listen_interval - mac80211 patch required.
2290                    Currently use 10 seconds */
2291                 ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id, sta->addr,
2292                                                  WMI_AP_PS_PEER_PARAM_AGEOUT_TIME,
2293                                                  10);
2294                 if (ret) {
2295                         ath10k_warn(ar, "failed to set ap ps peer param ageout time for vdev %i: %d\n",
2296                                     arvif->vdev_id, ret);
2297                         return ret;
2298                 }
2299         }
2300
2301         return 0;
2302 }
2303
2304 static u16
2305 ath10k_peer_assoc_h_vht_limit(u16 tx_mcs_set,
2306                               const u16 vht_mcs_limit[NL80211_VHT_NSS_MAX])
2307 {
2308         int idx_limit;
2309         int nss;
2310         u16 mcs_map;
2311         u16 mcs;
2312
2313         for (nss = 0; nss < NL80211_VHT_NSS_MAX; nss++) {
2314                 mcs_map = ath10k_mac_get_max_vht_mcs_map(tx_mcs_set, nss) &
2315                           vht_mcs_limit[nss];
2316
2317                 if (mcs_map)
2318                         idx_limit = fls(mcs_map) - 1;
2319                 else
2320                         idx_limit = -1;
2321
2322                 switch (idx_limit) {
2323                 case 0: /* fall through */
2324                 case 1: /* fall through */
2325                 case 2: /* fall through */
2326                 case 3: /* fall through */
2327                 case 4: /* fall through */
2328                 case 5: /* fall through */
2329                 case 6: /* fall through */
2330                 default:
2331                         /* see ath10k_mac_can_set_bitrate_mask() */
2332                         WARN_ON(1);
2333                         /* fall through */
2334                 case -1:
2335                         mcs = IEEE80211_VHT_MCS_NOT_SUPPORTED;
2336                         break;
2337                 case 7:
2338                         mcs = IEEE80211_VHT_MCS_SUPPORT_0_7;
2339                         break;
2340                 case 8:
2341                         mcs = IEEE80211_VHT_MCS_SUPPORT_0_8;
2342                         break;
2343                 case 9:
2344                         mcs = IEEE80211_VHT_MCS_SUPPORT_0_9;
2345                         break;
2346                 }
2347
2348                 tx_mcs_set &= ~(0x3 << (nss * 2));
2349                 tx_mcs_set |= mcs << (nss * 2);
2350         }
2351
2352         return tx_mcs_set;
2353 }
2354
2355 static void ath10k_peer_assoc_h_vht(struct ath10k *ar,
2356                                     struct ieee80211_vif *vif,
2357                                     struct ieee80211_sta *sta,
2358                                     struct wmi_peer_assoc_complete_arg *arg)
2359 {
2360         const struct ieee80211_sta_vht_cap *vht_cap = &sta->vht_cap;
2361         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2362         struct cfg80211_chan_def def;
2363         enum nl80211_band band;
2364         const u16 *vht_mcs_mask;
2365         u8 ampdu_factor;
2366
2367         if (WARN_ON(ath10k_mac_vif_chan(vif, &def)))
2368                 return;
2369
2370         if (!vht_cap->vht_supported)
2371                 return;
2372
2373         band = def.chan->band;
2374         vht_mcs_mask = arvif->bitrate_mask.control[band].vht_mcs;
2375
2376         if (ath10k_peer_assoc_h_vht_masked(vht_mcs_mask))
2377                 return;
2378
2379         arg->peer_flags |= ar->wmi.peer_flags->vht;
2380
2381         if (def.chan->band == NL80211_BAND_2GHZ)
2382                 arg->peer_flags |= ar->wmi.peer_flags->vht_2g;
2383
2384         arg->peer_vht_caps = vht_cap->cap;
2385
2386         ampdu_factor = (vht_cap->cap &
2387                         IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK) >>
2388                        IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_SHIFT;
2389
2390         /* Workaround: Some Netgear/Linksys 11ac APs set Rx A-MPDU factor to
2391          * zero in VHT IE. Using it would result in degraded throughput.
2392          * arg->peer_max_mpdu at this point contains HT max_mpdu so keep
2393          * it if VHT max_mpdu is smaller. */
2394         arg->peer_max_mpdu = max(arg->peer_max_mpdu,
2395                                  (1U << (IEEE80211_HT_MAX_AMPDU_FACTOR +
2396                                         ampdu_factor)) - 1);
2397
2398         if (sta->bandwidth == IEEE80211_STA_RX_BW_80)
2399                 arg->peer_flags |= ar->wmi.peer_flags->bw80;
2400
2401         arg->peer_vht_rates.rx_max_rate =
2402                 __le16_to_cpu(vht_cap->vht_mcs.rx_highest);
2403         arg->peer_vht_rates.rx_mcs_set =
2404                 __le16_to_cpu(vht_cap->vht_mcs.rx_mcs_map);
2405         arg->peer_vht_rates.tx_max_rate =
2406                 __le16_to_cpu(vht_cap->vht_mcs.tx_highest);
2407         arg->peer_vht_rates.tx_mcs_set = ath10k_peer_assoc_h_vht_limit(
2408                 __le16_to_cpu(vht_cap->vht_mcs.tx_mcs_map), vht_mcs_mask);
2409
2410         ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vht peer %pM max_mpdu %d flags 0x%x\n",
2411                    sta->addr, arg->peer_max_mpdu, arg->peer_flags);
2412 }
2413
2414 static void ath10k_peer_assoc_h_qos(struct ath10k *ar,
2415                                     struct ieee80211_vif *vif,
2416                                     struct ieee80211_sta *sta,
2417                                     struct wmi_peer_assoc_complete_arg *arg)
2418 {
2419         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2420
2421         switch (arvif->vdev_type) {
2422         case WMI_VDEV_TYPE_AP:
2423                 if (sta->wme)
2424                         arg->peer_flags |= arvif->ar->wmi.peer_flags->qos;
2425
2426                 if (sta->wme && sta->uapsd_queues) {
2427                         arg->peer_flags |= arvif->ar->wmi.peer_flags->apsd;
2428                         arg->peer_rate_caps |= WMI_RC_UAPSD_FLAG;
2429                 }
2430                 break;
2431         case WMI_VDEV_TYPE_STA:
2432                 if (vif->bss_conf.qos)
2433                         arg->peer_flags |= arvif->ar->wmi.peer_flags->qos;
2434                 break;
2435         case WMI_VDEV_TYPE_IBSS:
2436                 if (sta->wme)
2437                         arg->peer_flags |= arvif->ar->wmi.peer_flags->qos;
2438                 break;
2439         default:
2440                 break;
2441         }
2442
2443         ath10k_dbg(ar, ATH10K_DBG_MAC, "mac peer %pM qos %d\n",
2444                    sta->addr, !!(arg->peer_flags &
2445                    arvif->ar->wmi.peer_flags->qos));
2446 }
2447
2448 static bool ath10k_mac_sta_has_ofdm_only(struct ieee80211_sta *sta)
2449 {
2450         return sta->supp_rates[NL80211_BAND_2GHZ] >>
2451                ATH10K_MAC_FIRST_OFDM_RATE_IDX;
2452 }
2453
2454 static void ath10k_peer_assoc_h_phymode(struct ath10k *ar,
2455                                         struct ieee80211_vif *vif,
2456                                         struct ieee80211_sta *sta,
2457                                         struct wmi_peer_assoc_complete_arg *arg)
2458 {
2459         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2460         struct cfg80211_chan_def def;
2461         enum nl80211_band band;
2462         const u8 *ht_mcs_mask;
2463         const u16 *vht_mcs_mask;
2464         enum wmi_phy_mode phymode = MODE_UNKNOWN;
2465
2466         if (WARN_ON(ath10k_mac_vif_chan(vif, &def)))
2467                 return;
2468
2469         band = def.chan->band;
2470         ht_mcs_mask = arvif->bitrate_mask.control[band].ht_mcs;
2471         vht_mcs_mask = arvif->bitrate_mask.control[band].vht_mcs;
2472
2473         switch (band) {
2474         case NL80211_BAND_2GHZ:
2475                 if (sta->vht_cap.vht_supported &&
2476                     !ath10k_peer_assoc_h_vht_masked(vht_mcs_mask)) {
2477                         if (sta->bandwidth == IEEE80211_STA_RX_BW_40)
2478                                 phymode = MODE_11AC_VHT40;
2479                         else
2480                                 phymode = MODE_11AC_VHT20;
2481                 } else if (sta->ht_cap.ht_supported &&
2482                            !ath10k_peer_assoc_h_ht_masked(ht_mcs_mask)) {
2483                         if (sta->bandwidth == IEEE80211_STA_RX_BW_40)
2484                                 phymode = MODE_11NG_HT40;
2485                         else
2486                                 phymode = MODE_11NG_HT20;
2487                 } else if (ath10k_mac_sta_has_ofdm_only(sta)) {
2488                         phymode = MODE_11G;
2489                 } else {
2490                         phymode = MODE_11B;
2491                 }
2492
2493                 break;
2494         case NL80211_BAND_5GHZ:
2495                 /*
2496                  * Check VHT first.
2497                  */
2498                 if (sta->vht_cap.vht_supported &&
2499                     !ath10k_peer_assoc_h_vht_masked(vht_mcs_mask)) {
2500                         if (sta->bandwidth == IEEE80211_STA_RX_BW_80)
2501                                 phymode = MODE_11AC_VHT80;
2502                         else if (sta->bandwidth == IEEE80211_STA_RX_BW_40)
2503                                 phymode = MODE_11AC_VHT40;
2504                         else if (sta->bandwidth == IEEE80211_STA_RX_BW_20)
2505                                 phymode = MODE_11AC_VHT20;
2506                 } else if (sta->ht_cap.ht_supported &&
2507                            !ath10k_peer_assoc_h_ht_masked(ht_mcs_mask)) {
2508                         if (sta->bandwidth >= IEEE80211_STA_RX_BW_40)
2509                                 phymode = MODE_11NA_HT40;
2510                         else
2511                                 phymode = MODE_11NA_HT20;
2512                 } else {
2513                         phymode = MODE_11A;
2514                 }
2515
2516                 break;
2517         default:
2518                 break;
2519         }
2520
2521         ath10k_dbg(ar, ATH10K_DBG_MAC, "mac peer %pM phymode %s\n",
2522                    sta->addr, ath10k_wmi_phymode_str(phymode));
2523
2524         arg->peer_phymode = phymode;
2525         WARN_ON(phymode == MODE_UNKNOWN);
2526 }
2527
2528 static int ath10k_peer_assoc_prepare(struct ath10k *ar,
2529                                      struct ieee80211_vif *vif,
2530                                      struct ieee80211_sta *sta,
2531                                      struct wmi_peer_assoc_complete_arg *arg)
2532 {
2533         lockdep_assert_held(&ar->conf_mutex);
2534
2535         memset(arg, 0, sizeof(*arg));
2536
2537         ath10k_peer_assoc_h_basic(ar, vif, sta, arg);
2538         ath10k_peer_assoc_h_crypto(ar, vif, sta, arg);
2539         ath10k_peer_assoc_h_rates(ar, vif, sta, arg);
2540         ath10k_peer_assoc_h_ht(ar, vif, sta, arg);
2541         ath10k_peer_assoc_h_vht(ar, vif, sta, arg);
2542         ath10k_peer_assoc_h_qos(ar, vif, sta, arg);
2543         ath10k_peer_assoc_h_phymode(ar, vif, sta, arg);
2544
2545         return 0;
2546 }
2547
2548 static const u32 ath10k_smps_map[] = {
2549         [WLAN_HT_CAP_SM_PS_STATIC] = WMI_PEER_SMPS_STATIC,
2550         [WLAN_HT_CAP_SM_PS_DYNAMIC] = WMI_PEER_SMPS_DYNAMIC,
2551         [WLAN_HT_CAP_SM_PS_INVALID] = WMI_PEER_SMPS_PS_NONE,
2552         [WLAN_HT_CAP_SM_PS_DISABLED] = WMI_PEER_SMPS_PS_NONE,
2553 };
2554
2555 static int ath10k_setup_peer_smps(struct ath10k *ar, struct ath10k_vif *arvif,
2556                                   const u8 *addr,
2557                                   const struct ieee80211_sta_ht_cap *ht_cap)
2558 {
2559         int smps;
2560
2561         if (!ht_cap->ht_supported)
2562                 return 0;
2563
2564         smps = ht_cap->cap & IEEE80211_HT_CAP_SM_PS;
2565         smps >>= IEEE80211_HT_CAP_SM_PS_SHIFT;
2566
2567         if (smps >= ARRAY_SIZE(ath10k_smps_map))
2568                 return -EINVAL;
2569
2570         return ath10k_wmi_peer_set_param(ar, arvif->vdev_id, addr,
2571                                          WMI_PEER_SMPS_STATE,
2572                                          ath10k_smps_map[smps]);
2573 }
2574
2575 static int ath10k_mac_vif_recalc_txbf(struct ath10k *ar,
2576                                       struct ieee80211_vif *vif,
2577                                       struct ieee80211_sta_vht_cap vht_cap)
2578 {
2579         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2580         int ret;
2581         u32 param;
2582         u32 value;
2583
2584         if (ath10k_wmi_get_txbf_conf_scheme(ar) != WMI_TXBF_CONF_AFTER_ASSOC)
2585                 return 0;
2586
2587         if (!(ar->vht_cap_info &
2588               (IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE |
2589                IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE |
2590                IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE |
2591                IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE)))
2592                 return 0;
2593
2594         param = ar->wmi.vdev_param->txbf;
2595         value = 0;
2596
2597         if (WARN_ON(param == WMI_VDEV_PARAM_UNSUPPORTED))
2598                 return 0;
2599
2600         /* The following logic is correct. If a remote STA advertises support
2601          * for being a beamformer then we should enable us being a beamformee.
2602          */
2603
2604         if (ar->vht_cap_info &
2605             (IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE |
2606              IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE)) {
2607                 if (vht_cap.cap & IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE)
2608                         value |= WMI_VDEV_PARAM_TXBF_SU_TX_BFEE;
2609
2610                 if (vht_cap.cap & IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE)
2611                         value |= WMI_VDEV_PARAM_TXBF_MU_TX_BFEE;
2612         }
2613
2614         if (ar->vht_cap_info &
2615             (IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE |
2616              IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE)) {
2617                 if (vht_cap.cap & IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE)
2618                         value |= WMI_VDEV_PARAM_TXBF_SU_TX_BFER;
2619
2620                 if (vht_cap.cap & IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE)
2621                         value |= WMI_VDEV_PARAM_TXBF_MU_TX_BFER;
2622         }
2623
2624         if (value & WMI_VDEV_PARAM_TXBF_MU_TX_BFEE)
2625                 value |= WMI_VDEV_PARAM_TXBF_SU_TX_BFEE;
2626
2627         if (value & WMI_VDEV_PARAM_TXBF_MU_TX_BFER)
2628                 value |= WMI_VDEV_PARAM_TXBF_SU_TX_BFER;
2629
2630         ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param, value);
2631         if (ret) {
2632                 ath10k_warn(ar, "failed to submit vdev param txbf 0x%x: %d\n",
2633                             value, ret);
2634                 return ret;
2635         }
2636
2637         return 0;
2638 }
2639
2640 /* can be called only in mac80211 callbacks due to `key_count` usage */
2641 static void ath10k_bss_assoc(struct ieee80211_hw *hw,
2642                              struct ieee80211_vif *vif,
2643                              struct ieee80211_bss_conf *bss_conf)
2644 {
2645         struct ath10k *ar = hw->priv;
2646         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2647         struct ieee80211_sta_ht_cap ht_cap;
2648         struct ieee80211_sta_vht_cap vht_cap;
2649         struct wmi_peer_assoc_complete_arg peer_arg;
2650         struct ieee80211_sta *ap_sta;
2651         int ret;
2652
2653         lockdep_assert_held(&ar->conf_mutex);
2654
2655         ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %i assoc bssid %pM aid %d\n",
2656                    arvif->vdev_id, arvif->bssid, arvif->aid);
2657
2658         rcu_read_lock();
2659
2660         ap_sta = ieee80211_find_sta(vif, bss_conf->bssid);
2661         if (!ap_sta) {
2662                 ath10k_warn(ar, "failed to find station entry for bss %pM vdev %i\n",
2663                             bss_conf->bssid, arvif->vdev_id);
2664                 rcu_read_unlock();
2665                 return;
2666         }
2667
2668         /* ap_sta must be accessed only within rcu section which must be left
2669          * before calling ath10k_setup_peer_smps() which might sleep. */
2670         ht_cap = ap_sta->ht_cap;
2671         vht_cap = ap_sta->vht_cap;
2672
2673         ret = ath10k_peer_assoc_prepare(ar, vif, ap_sta, &peer_arg);
2674         if (ret) {
2675                 ath10k_warn(ar, "failed to prepare peer assoc for %pM vdev %i: %d\n",
2676                             bss_conf->bssid, arvif->vdev_id, ret);
2677                 rcu_read_unlock();
2678                 return;
2679         }
2680
2681         rcu_read_unlock();
2682
2683         ret = ath10k_wmi_peer_assoc(ar, &peer_arg);
2684         if (ret) {
2685                 ath10k_warn(ar, "failed to run peer assoc for %pM vdev %i: %d\n",
2686                             bss_conf->bssid, arvif->vdev_id, ret);
2687                 return;
2688         }
2689
2690         ret = ath10k_setup_peer_smps(ar, arvif, bss_conf->bssid, &ht_cap);
2691         if (ret) {
2692                 ath10k_warn(ar, "failed to setup peer SMPS for vdev %i: %d\n",
2693                             arvif->vdev_id, ret);
2694                 return;
2695         }
2696
2697         ret = ath10k_mac_vif_recalc_txbf(ar, vif, vht_cap);
2698         if (ret) {
2699                 ath10k_warn(ar, "failed to recalc txbf for vdev %i on bss %pM: %d\n",
2700                             arvif->vdev_id, bss_conf->bssid, ret);
2701                 return;
2702         }
2703
2704         ath10k_dbg(ar, ATH10K_DBG_MAC,
2705                    "mac vdev %d up (associated) bssid %pM aid %d\n",
2706                    arvif->vdev_id, bss_conf->bssid, bss_conf->aid);
2707
2708         WARN_ON(arvif->is_up);
2709
2710         arvif->aid = bss_conf->aid;
2711         ether_addr_copy(arvif->bssid, bss_conf->bssid);
2712
2713         ret = ath10k_wmi_vdev_up(ar, arvif->vdev_id, arvif->aid, arvif->bssid);
2714         if (ret) {
2715                 ath10k_warn(ar, "failed to set vdev %d up: %d\n",
2716                             arvif->vdev_id, ret);
2717                 return;
2718         }
2719
2720         arvif->is_up = true;
2721
2722         /* Workaround: Some firmware revisions (tested with qca6174
2723          * WLAN.RM.2.0-00073) have buggy powersave state machine and must be
2724          * poked with peer param command.
2725          */
2726         ret = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, arvif->bssid,
2727                                         WMI_PEER_DUMMY_VAR, 1);
2728         if (ret) {
2729                 ath10k_warn(ar, "failed to poke peer %pM param for ps workaround on vdev %i: %d\n",
2730                             arvif->bssid, arvif->vdev_id, ret);
2731                 return;
2732         }
2733 }
2734
2735 static void ath10k_bss_disassoc(struct ieee80211_hw *hw,
2736                                 struct ieee80211_vif *vif)
2737 {
2738         struct ath10k *ar = hw->priv;
2739         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2740         struct ieee80211_sta_vht_cap vht_cap = {};
2741         int ret;
2742
2743         lockdep_assert_held(&ar->conf_mutex);
2744
2745         ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %i disassoc bssid %pM\n",
2746                    arvif->vdev_id, arvif->bssid);
2747
2748         ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id);
2749         if (ret)
2750                 ath10k_warn(ar, "faield to down vdev %i: %d\n",
2751                             arvif->vdev_id, ret);
2752
2753         arvif->def_wep_key_idx = -1;
2754
2755         ret = ath10k_mac_vif_recalc_txbf(ar, vif, vht_cap);
2756         if (ret) {
2757                 ath10k_warn(ar, "failed to recalc txbf for vdev %i: %d\n",
2758                             arvif->vdev_id, ret);
2759                 return;
2760         }
2761
2762         arvif->is_up = false;
2763
2764         cancel_delayed_work_sync(&arvif->connection_loss_work);
2765 }
2766
2767 static int ath10k_station_assoc(struct ath10k *ar,
2768                                 struct ieee80211_vif *vif,
2769                                 struct ieee80211_sta *sta,
2770                                 bool reassoc)
2771 {
2772         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2773         struct wmi_peer_assoc_complete_arg peer_arg;
2774         int ret = 0;
2775
2776         lockdep_assert_held(&ar->conf_mutex);
2777
2778         ret = ath10k_peer_assoc_prepare(ar, vif, sta, &peer_arg);
2779         if (ret) {
2780                 ath10k_warn(ar, "failed to prepare WMI peer assoc for %pM vdev %i: %i\n",
2781                             sta->addr, arvif->vdev_id, ret);
2782                 return ret;
2783         }
2784
2785         ret = ath10k_wmi_peer_assoc(ar, &peer_arg);
2786         if (ret) {
2787                 ath10k_warn(ar, "failed to run peer assoc for STA %pM vdev %i: %d\n",
2788                             sta->addr, arvif->vdev_id, ret);
2789                 return ret;
2790         }
2791
2792         /* Re-assoc is run only to update supported rates for given station. It
2793          * doesn't make much sense to reconfigure the peer completely.
2794          */
2795         if (!reassoc) {
2796                 ret = ath10k_setup_peer_smps(ar, arvif, sta->addr,
2797                                              &sta->ht_cap);
2798                 if (ret) {
2799                         ath10k_warn(ar, "failed to setup peer SMPS for vdev %d: %d\n",
2800                                     arvif->vdev_id, ret);
2801                         return ret;
2802                 }
2803
2804                 ret = ath10k_peer_assoc_qos_ap(ar, arvif, sta);
2805                 if (ret) {
2806                         ath10k_warn(ar, "failed to set qos params for STA %pM for vdev %i: %d\n",
2807                                     sta->addr, arvif->vdev_id, ret);
2808                         return ret;
2809                 }
2810
2811                 if (!sta->wme) {
2812                         arvif->num_legacy_stations++;
2813                         ret  = ath10k_recalc_rtscts_prot(arvif);
2814                         if (ret) {
2815                                 ath10k_warn(ar, "failed to recalculate rts/cts prot for vdev %d: %d\n",
2816                                             arvif->vdev_id, ret);
2817                                 return ret;
2818                         }
2819                 }
2820
2821                 /* Plumb cached keys only for static WEP */
2822                 if (arvif->def_wep_key_idx != -1) {
2823                         ret = ath10k_install_peer_wep_keys(arvif, sta->addr);
2824                         if (ret) {
2825                                 ath10k_warn(ar, "failed to install peer wep keys for vdev %i: %d\n",
2826                                             arvif->vdev_id, ret);
2827                                 return ret;
2828                         }
2829                 }
2830         }
2831
2832         return ret;
2833 }
2834
2835 static int ath10k_station_disassoc(struct ath10k *ar,
2836                                    struct ieee80211_vif *vif,
2837                                    struct ieee80211_sta *sta)
2838 {
2839         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2840         int ret = 0;
2841
2842         lockdep_assert_held(&ar->conf_mutex);
2843
2844         if (!sta->wme) {
2845                 arvif->num_legacy_stations--;
2846                 ret = ath10k_recalc_rtscts_prot(arvif);
2847                 if (ret) {
2848                         ath10k_warn(ar, "failed to recalculate rts/cts prot for vdev %d: %d\n",
2849                                     arvif->vdev_id, ret);
2850                         return ret;
2851                 }
2852         }
2853
2854         ret = ath10k_clear_peer_keys(arvif, sta->addr);
2855         if (ret) {
2856                 ath10k_warn(ar, "failed to clear all peer wep keys for vdev %i: %d\n",
2857                             arvif->vdev_id, ret);
2858                 return ret;
2859         }
2860
2861         return ret;
2862 }
2863
2864 /**************/
2865 /* Regulatory */
2866 /**************/
2867
2868 static int ath10k_update_channel_list(struct ath10k *ar)
2869 {
2870         struct ieee80211_hw *hw = ar->hw;
2871         struct ieee80211_supported_band **bands;
2872         enum nl80211_band band;
2873         struct ieee80211_channel *channel;
2874         struct wmi_scan_chan_list_arg arg = {0};
2875         struct wmi_channel_arg *ch;
2876         bool passive;
2877         int len;
2878         int ret;
2879         int i;
2880
2881         lockdep_assert_held(&ar->conf_mutex);
2882
2883         bands = hw->wiphy->bands;
2884         for (band = 0; band < NUM_NL80211_BANDS; band++) {
2885                 if (!bands[band])
2886                         continue;
2887
2888                 for (i = 0; i < bands[band]->n_channels; i++) {
2889                         if (bands[band]->channels[i].flags &
2890                             IEEE80211_CHAN_DISABLED)
2891                                 continue;
2892
2893                         arg.n_channels++;
2894                 }
2895         }
2896
2897         len = sizeof(struct wmi_channel_arg) * arg.n_channels;
2898         arg.channels = kzalloc(len, GFP_KERNEL);
2899         if (!arg.channels)
2900                 return -ENOMEM;
2901
2902         ch = arg.channels;
2903         for (band = 0; band < NUM_NL80211_BANDS; band++) {
2904                 if (!bands[band])
2905                         continue;
2906
2907                 for (i = 0; i < bands[band]->n_channels; i++) {
2908                         channel = &bands[band]->channels[i];
2909
2910                         if (channel->flags & IEEE80211_CHAN_DISABLED)
2911                                 continue;
2912
2913                         ch->allow_ht   = true;
2914
2915                         /* FIXME: when should we really allow VHT? */
2916                         ch->allow_vht = true;
2917
2918                         ch->allow_ibss =
2919                                 !(channel->flags & IEEE80211_CHAN_NO_IR);
2920
2921                         ch->ht40plus =
2922                                 !(channel->flags & IEEE80211_CHAN_NO_HT40PLUS);
2923
2924                         ch->chan_radar =
2925                                 !!(channel->flags & IEEE80211_CHAN_RADAR);
2926
2927                         passive = channel->flags & IEEE80211_CHAN_NO_IR;
2928                         ch->passive = passive;
2929
2930                         ch->freq = channel->center_freq;
2931                         ch->band_center_freq1 = channel->center_freq;
2932                         ch->min_power = 0;
2933                         ch->max_power = channel->max_power * 2;
2934                         ch->max_reg_power = channel->max_reg_power * 2;
2935                         ch->max_antenna_gain = channel->max_antenna_gain * 2;
2936                         ch->reg_class_id = 0; /* FIXME */
2937
2938                         /* FIXME: why use only legacy modes, why not any
2939                          * HT/VHT modes? Would that even make any
2940                          * difference? */
2941                         if (channel->band == NL80211_BAND_2GHZ)
2942                                 ch->mode = MODE_11G;
2943                         else
2944                                 ch->mode = MODE_11A;
2945
2946                         if (WARN_ON_ONCE(ch->mode == MODE_UNKNOWN))
2947                                 continue;
2948
2949                         ath10k_dbg(ar, ATH10K_DBG_WMI,
2950                                    "mac channel [%zd/%d] freq %d maxpower %d regpower %d antenna %d mode %d\n",
2951                                     ch - arg.channels, arg.n_channels,
2952                                    ch->freq, ch->max_power, ch->max_reg_power,
2953                                    ch->max_antenna_gain, ch->mode);
2954
2955                         ch++;
2956                 }
2957         }
2958
2959         ret = ath10k_wmi_scan_chan_list(ar, &arg);
2960         kfree(arg.channels);
2961
2962         return ret;
2963 }
2964
2965 static enum wmi_dfs_region
2966 ath10k_mac_get_dfs_region(enum nl80211_dfs_regions dfs_region)
2967 {
2968         switch (dfs_region) {
2969         case NL80211_DFS_UNSET:
2970                 return WMI_UNINIT_DFS_DOMAIN;
2971         case NL80211_DFS_FCC:
2972                 return WMI_FCC_DFS_DOMAIN;
2973         case NL80211_DFS_ETSI:
2974                 return WMI_ETSI_DFS_DOMAIN;
2975         case NL80211_DFS_JP:
2976                 return WMI_MKK4_DFS_DOMAIN;
2977         }
2978         return WMI_UNINIT_DFS_DOMAIN;
2979 }
2980
2981 static void ath10k_regd_update(struct ath10k *ar)
2982 {
2983         struct reg_dmn_pair_mapping *regpair;
2984         int ret;
2985         enum wmi_dfs_region wmi_dfs_reg;
2986         enum nl80211_dfs_regions nl_dfs_reg;
2987
2988         lockdep_assert_held(&ar->conf_mutex);
2989
2990         ret = ath10k_update_channel_list(ar);
2991         if (ret)
2992                 ath10k_warn(ar, "failed to update channel list: %d\n", ret);
2993
2994         regpair = ar->ath_common.regulatory.regpair;
2995
2996         if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector) {
2997                 nl_dfs_reg = ar->dfs_detector->region;
2998                 wmi_dfs_reg = ath10k_mac_get_dfs_region(nl_dfs_reg);
2999         } else {
3000                 wmi_dfs_reg = WMI_UNINIT_DFS_DOMAIN;
3001         }
3002
3003         /* Target allows setting up per-band regdomain but ath_common provides
3004          * a combined one only */
3005         ret = ath10k_wmi_pdev_set_regdomain(ar,
3006                                             regpair->reg_domain,
3007                                             regpair->reg_domain, /* 2ghz */
3008                                             regpair->reg_domain, /* 5ghz */
3009                                             regpair->reg_2ghz_ctl,
3010                                             regpair->reg_5ghz_ctl,
3011                                             wmi_dfs_reg);
3012         if (ret)
3013                 ath10k_warn(ar, "failed to set pdev regdomain: %d\n", ret);
3014 }
3015
3016 static void ath10k_reg_notifier(struct wiphy *wiphy,
3017                                 struct regulatory_request *request)
3018 {
3019         struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
3020         struct ath10k *ar = hw->priv;
3021         bool result;
3022
3023         ath_reg_notifier_apply(wiphy, request, &ar->ath_common.regulatory);
3024
3025         if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector) {
3026                 ath10k_dbg(ar, ATH10K_DBG_REGULATORY, "dfs region 0x%x\n",
3027                            request->dfs_region);
3028                 result = ar->dfs_detector->set_dfs_domain(ar->dfs_detector,
3029                                                           request->dfs_region);
3030                 if (!result)
3031                         ath10k_warn(ar, "DFS region 0x%X not supported, will trigger radar for every pulse\n",
3032                                     request->dfs_region);
3033         }
3034
3035         mutex_lock(&ar->conf_mutex);
3036         if (ar->state == ATH10K_STATE_ON)
3037                 ath10k_regd_update(ar);
3038         mutex_unlock(&ar->conf_mutex);
3039 }
3040
3041 /***************/
3042 /* TX handlers */
3043 /***************/
3044
3045 enum ath10k_mac_tx_path {
3046         ATH10K_MAC_TX_HTT,
3047         ATH10K_MAC_TX_HTT_MGMT,
3048         ATH10K_MAC_TX_WMI_MGMT,
3049         ATH10K_MAC_TX_UNKNOWN,
3050 };
3051
3052 void ath10k_mac_tx_lock(struct ath10k *ar, int reason)
3053 {
3054         lockdep_assert_held(&ar->htt.tx_lock);
3055
3056         WARN_ON(reason >= ATH10K_TX_PAUSE_MAX);
3057         ar->tx_paused |= BIT(reason);
3058         ieee80211_stop_queues(ar->hw);
3059 }
3060
3061 static void ath10k_mac_tx_unlock_iter(void *data, u8 *mac,
3062                                       struct ieee80211_vif *vif)
3063 {
3064         struct ath10k *ar = data;
3065         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3066
3067         if (arvif->tx_paused)
3068                 return;
3069
3070         ieee80211_wake_queue(ar->hw, arvif->vdev_id);
3071 }
3072
3073 void ath10k_mac_tx_unlock(struct ath10k *ar, int reason)
3074 {
3075         lockdep_assert_held(&ar->htt.tx_lock);
3076
3077         WARN_ON(reason >= ATH10K_TX_PAUSE_MAX);
3078         ar->tx_paused &= ~BIT(reason);
3079
3080         if (ar->tx_paused)
3081                 return;
3082
3083         ieee80211_iterate_active_interfaces_atomic(ar->hw,
3084                                                    IEEE80211_IFACE_ITER_RESUME_ALL,
3085                                                    ath10k_mac_tx_unlock_iter,
3086                                                    ar);
3087
3088         ieee80211_wake_queue(ar->hw, ar->hw->offchannel_tx_hw_queue);
3089 }
3090
3091 void ath10k_mac_vif_tx_lock(struct ath10k_vif *arvif, int reason)
3092 {
3093         struct ath10k *ar = arvif->ar;
3094
3095         lockdep_assert_held(&ar->htt.tx_lock);
3096
3097         WARN_ON(reason >= BITS_PER_LONG);
3098         arvif->tx_paused |= BIT(reason);
3099         ieee80211_stop_queue(ar->hw, arvif->vdev_id);
3100 }
3101
3102 void ath10k_mac_vif_tx_unlock(struct ath10k_vif *arvif, int reason)
3103 {
3104         struct ath10k *ar = arvif->ar;
3105
3106         lockdep_assert_held(&ar->htt.tx_lock);
3107
3108         WARN_ON(reason >= BITS_PER_LONG);
3109         arvif->tx_paused &= ~BIT(reason);
3110
3111         if (ar->tx_paused)
3112                 return;
3113
3114         if (arvif->tx_paused)
3115                 return;
3116
3117         ieee80211_wake_queue(ar->hw, arvif->vdev_id);
3118 }
3119
3120 static void ath10k_mac_vif_handle_tx_pause(struct ath10k_vif *arvif,
3121                                            enum wmi_tlv_tx_pause_id pause_id,
3122                                            enum wmi_tlv_tx_pause_action action)
3123 {
3124         struct ath10k *ar = arvif->ar;
3125
3126         lockdep_assert_held(&ar->htt.tx_lock);
3127
3128         switch (action) {
3129         case WMI_TLV_TX_PAUSE_ACTION_STOP:
3130                 ath10k_mac_vif_tx_lock(arvif, pause_id);
3131                 break;
3132         case WMI_TLV_TX_PAUSE_ACTION_WAKE:
3133                 ath10k_mac_vif_tx_unlock(arvif, pause_id);
3134                 break;
3135         default:
3136                 ath10k_warn(ar, "received unknown tx pause action %d on vdev %i, ignoring\n",
3137                             action, arvif->vdev_id);
3138                 break;
3139         }
3140 }
3141
3142 struct ath10k_mac_tx_pause {
3143         u32 vdev_id;
3144         enum wmi_tlv_tx_pause_id pause_id;
3145         enum wmi_tlv_tx_pause_action action;
3146 };
3147
3148 static void ath10k_mac_handle_tx_pause_iter(void *data, u8 *mac,
3149                                             struct ieee80211_vif *vif)
3150 {
3151         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3152         struct ath10k_mac_tx_pause *arg = data;
3153
3154         if (arvif->vdev_id != arg->vdev_id)
3155                 return;
3156
3157         ath10k_mac_vif_handle_tx_pause(arvif, arg->pause_id, arg->action);
3158 }
3159
3160 void ath10k_mac_handle_tx_pause_vdev(struct ath10k *ar, u32 vdev_id,
3161                                      enum wmi_tlv_tx_pause_id pause_id,
3162                                      enum wmi_tlv_tx_pause_action action)
3163 {
3164         struct ath10k_mac_tx_pause arg = {
3165                 .vdev_id = vdev_id,
3166                 .pause_id = pause_id,
3167                 .action = action,
3168         };
3169
3170         spin_lock_bh(&ar->htt.tx_lock);
3171         ieee80211_iterate_active_interfaces_atomic(ar->hw,
3172                                                    IEEE80211_IFACE_ITER_RESUME_ALL,
3173                                                    ath10k_mac_handle_tx_pause_iter,
3174                                                    &arg);
3175         spin_unlock_bh(&ar->htt.tx_lock);
3176 }
3177
3178 static enum ath10k_hw_txrx_mode
3179 ath10k_mac_tx_h_get_txmode(struct ath10k *ar,
3180                            struct ieee80211_vif *vif,
3181                            struct ieee80211_sta *sta,
3182                            struct sk_buff *skb)
3183 {
3184         const struct ieee80211_hdr *hdr = (void *)skb->data;
3185         __le16 fc = hdr->frame_control;
3186
3187         if (!vif || vif->type == NL80211_IFTYPE_MONITOR)
3188                 return ATH10K_HW_TXRX_RAW;
3189
3190         if (ieee80211_is_mgmt(fc))
3191                 return ATH10K_HW_TXRX_MGMT;
3192
3193         /* Workaround:
3194          *
3195          * NullFunc frames are mostly used to ping if a client or AP are still
3196          * reachable and responsive. This implies tx status reports must be
3197          * accurate - otherwise either mac80211 or userspace (e.g. hostapd) can
3198          * come to a conclusion that the other end disappeared and tear down
3199          * BSS connection or it can never disconnect from BSS/client (which is
3200          * the case).
3201          *
3202          * Firmware with HTT older than 3.0 delivers incorrect tx status for
3203          * NullFunc frames to driver. However there's a HTT Mgmt Tx command
3204          * which seems to deliver correct tx reports for NullFunc frames. The
3205          * downside of using it is it ignores client powersave state so it can
3206          * end up disconnecting sleeping clients in AP mode. It should fix STA
3207          * mode though because AP don't sleep.
3208          */
3209         if (ar->htt.target_version_major < 3 &&
3210             (ieee80211_is_nullfunc(fc) || ieee80211_is_qos_nullfunc(fc)) &&
3211             !test_bit(ATH10K_FW_FEATURE_HAS_WMI_MGMT_TX,
3212                       ar->running_fw->fw_file.fw_features))
3213                 return ATH10K_HW_TXRX_MGMT;
3214
3215         /* Workaround:
3216          *
3217          * Some wmi-tlv firmwares for qca6174 have broken Tx key selection for
3218          * NativeWifi txmode - it selects AP key instead of peer key. It seems
3219          * to work with Ethernet txmode so use it.
3220          *
3221          * FIXME: Check if raw mode works with TDLS.
3222          */
3223         if (ieee80211_is_data_present(fc) && sta && sta->tdls)
3224                 return ATH10K_HW_TXRX_ETHERNET;
3225
3226         if (test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags))
3227                 return ATH10K_HW_TXRX_RAW;
3228
3229         return ATH10K_HW_TXRX_NATIVE_WIFI;
3230 }
3231
3232 static bool ath10k_tx_h_use_hwcrypto(struct ieee80211_vif *vif,
3233                                      struct sk_buff *skb)
3234 {
3235         const struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
3236         const struct ieee80211_hdr *hdr = (void *)skb->data;
3237         const u32 mask = IEEE80211_TX_INTFL_DONT_ENCRYPT |
3238                          IEEE80211_TX_CTL_INJECTED;
3239
3240         if (!ieee80211_has_protected(hdr->frame_control))
3241                 return false;
3242
3243         if ((info->flags & mask) == mask)
3244                 return false;
3245
3246         if (vif)
3247                 return !ath10k_vif_to_arvif(vif)->nohwcrypt;
3248
3249         return true;
3250 }
3251
3252 /* HTT Tx uses Native Wifi tx mode which expects 802.11 frames without QoS
3253  * Control in the header.
3254  */
3255 static void ath10k_tx_h_nwifi(struct ieee80211_hw *hw, struct sk_buff *skb)
3256 {
3257         struct ieee80211_hdr *hdr = (void *)skb->data;
3258         struct ath10k_skb_cb *cb = ATH10K_SKB_CB(skb);
3259         u8 *qos_ctl;
3260
3261         if (!ieee80211_is_data_qos(hdr->frame_control))
3262                 return;
3263
3264         qos_ctl = ieee80211_get_qos_ctl(hdr);
3265         memmove(skb->data + IEEE80211_QOS_CTL_LEN,
3266                 skb->data, (void *)qos_ctl - (void *)skb->data);
3267         skb_pull(skb, IEEE80211_QOS_CTL_LEN);
3268
3269         /* Some firmware revisions don't handle sending QoS NullFunc well.
3270          * These frames are mainly used for CQM purposes so it doesn't really
3271          * matter whether QoS NullFunc or NullFunc are sent.
3272          */
3273         hdr = (void *)skb->data;
3274         if (ieee80211_is_qos_nullfunc(hdr->frame_control))
3275                 cb->flags &= ~ATH10K_SKB_F_QOS;
3276
3277         hdr->frame_control &= ~__cpu_to_le16(IEEE80211_STYPE_QOS_DATA);
3278 }
3279
3280 static void ath10k_tx_h_8023(struct sk_buff *skb)
3281 {
3282         struct ieee80211_hdr *hdr;
3283         struct rfc1042_hdr *rfc1042;
3284         struct ethhdr *eth;
3285         size_t hdrlen;
3286         u8 da[ETH_ALEN];
3287         u8 sa[ETH_ALEN];
3288         __be16 type;
3289
3290         hdr = (void *)skb->data;
3291         hdrlen = ieee80211_hdrlen(hdr->frame_control);
3292         rfc1042 = (void *)skb->data + hdrlen;
3293
3294         ether_addr_copy(da, ieee80211_get_DA(hdr));
3295         ether_addr_copy(sa, ieee80211_get_SA(hdr));
3296         type = rfc1042->snap_type;
3297
3298         skb_pull(skb, hdrlen + sizeof(*rfc1042));
3299         skb_push(skb, sizeof(*eth));
3300
3301         eth = (void *)skb->data;
3302         ether_addr_copy(eth->h_dest, da);
3303         ether_addr_copy(eth->h_source, sa);
3304         eth->h_proto = type;
3305 }
3306
3307 static void ath10k_tx_h_add_p2p_noa_ie(struct ath10k *ar,
3308                                        struct ieee80211_vif *vif,
3309                                        struct sk_buff *skb)
3310 {
3311         struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
3312         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3313
3314         /* This is case only for P2P_GO */
3315         if (vif->type != NL80211_IFTYPE_AP || !vif->p2p)
3316                 return;
3317
3318         if (unlikely(ieee80211_is_probe_resp(hdr->frame_control))) {
3319                 spin_lock_bh(&ar->data_lock);
3320                 if (arvif->u.ap.noa_data)
3321                         if (!pskb_expand_head(skb, 0, arvif->u.ap.noa_len,
3322                                               GFP_ATOMIC))
3323                                 memcpy(skb_put(skb, arvif->u.ap.noa_len),
3324                                        arvif->u.ap.noa_data,
3325                                        arvif->u.ap.noa_len);
3326                 spin_unlock_bh(&ar->data_lock);
3327         }
3328 }
3329
3330 static void ath10k_mac_tx_h_fill_cb(struct ath10k *ar,
3331                                     struct ieee80211_vif *vif,
3332                                     struct ieee80211_txq *txq,
3333                                     struct sk_buff *skb)
3334 {
3335         struct ieee80211_hdr *hdr = (void *)skb->data;
3336         struct ath10k_skb_cb *cb = ATH10K_SKB_CB(skb);
3337
3338         cb->flags = 0;
3339         if (!ath10k_tx_h_use_hwcrypto(vif, skb))
3340                 cb->flags |= ATH10K_SKB_F_NO_HWCRYPT;
3341
3342         if (ieee80211_is_mgmt(hdr->frame_control))
3343                 cb->flags |= ATH10K_SKB_F_MGMT;
3344
3345         if (ieee80211_is_data_qos(hdr->frame_control))
3346                 cb->flags |= ATH10K_SKB_F_QOS;
3347
3348         cb->vif = vif;
3349         cb->txq = txq;
3350 }
3351
3352 bool ath10k_mac_tx_frm_has_freq(struct ath10k *ar)
3353 {
3354         /* FIXME: Not really sure since when the behaviour changed. At some
3355          * point new firmware stopped requiring creation of peer entries for
3356          * offchannel tx (and actually creating them causes issues with wmi-htc
3357          * tx credit replenishment and reliability). Assuming it's at least 3.4
3358          * because that's when the `freq` was introduced to TX_FRM HTT command.
3359          */
3360         return (ar->htt.target_version_major >= 3 &&
3361                 ar->htt.target_version_minor >= 4 &&
3362                 ar->running_fw->fw_file.htt_op_version == ATH10K_FW_HTT_OP_VERSION_TLV);
3363 }
3364
3365 static int ath10k_mac_tx_wmi_mgmt(struct ath10k *ar, struct sk_buff *skb)
3366 {
3367         struct sk_buff_head *q = &ar->wmi_mgmt_tx_queue;
3368         int ret = 0;
3369
3370         spin_lock_bh(&ar->data_lock);
3371
3372         if (skb_queue_len(q) == ATH10K_MAX_NUM_MGMT_PENDING) {
3373                 ath10k_warn(ar, "wmi mgmt tx queue is full\n");
3374                 ret = -ENOSPC;
3375                 goto unlock;
3376         }
3377
3378         __skb_queue_tail(q, skb);
3379         ieee80211_queue_work(ar->hw, &ar->wmi_mgmt_tx_work);
3380
3381 unlock:
3382         spin_unlock_bh(&ar->data_lock);
3383
3384         return ret;
3385 }
3386
3387 static enum ath10k_mac_tx_path
3388 ath10k_mac_tx_h_get_txpath(struct ath10k *ar,
3389                            struct sk_buff *skb,
3390                            enum ath10k_hw_txrx_mode txmode)
3391 {
3392         switch (txmode) {
3393         case ATH10K_HW_TXRX_RAW:
3394         case ATH10K_HW_TXRX_NATIVE_WIFI:
3395         case ATH10K_HW_TXRX_ETHERNET:
3396                 return ATH10K_MAC_TX_HTT;
3397         case ATH10K_HW_TXRX_MGMT:
3398                 if (test_bit(ATH10K_FW_FEATURE_HAS_WMI_MGMT_TX,
3399                              ar->running_fw->fw_file.fw_features))
3400                         return ATH10K_MAC_TX_WMI_MGMT;
3401                 else if (ar->htt.target_version_major >= 3)
3402                         return ATH10K_MAC_TX_HTT;
3403                 else
3404                         return ATH10K_MAC_TX_HTT_MGMT;
3405         }
3406
3407         return ATH10K_MAC_TX_UNKNOWN;
3408 }
3409
3410 static int ath10k_mac_tx_submit(struct ath10k *ar,
3411                                 enum ath10k_hw_txrx_mode txmode,
3412                                 enum ath10k_mac_tx_path txpath,
3413                                 struct sk_buff *skb)
3414 {
3415         struct ath10k_htt *htt = &ar->htt;
3416         int ret = -EINVAL;
3417
3418         switch (txpath) {
3419         case ATH10K_MAC_TX_HTT:
3420                 ret = ath10k_htt_tx(htt, txmode, skb);
3421                 break;
3422         case ATH10K_MAC_TX_HTT_MGMT:
3423                 ret = ath10k_htt_mgmt_tx(htt, skb);
3424                 break;
3425         case ATH10K_MAC_TX_WMI_MGMT:
3426                 ret = ath10k_mac_tx_wmi_mgmt(ar, skb);
3427                 break;
3428         case ATH10K_MAC_TX_UNKNOWN:
3429                 WARN_ON_ONCE(1);
3430                 ret = -EINVAL;
3431                 break;
3432         }
3433
3434         if (ret) {
3435                 ath10k_warn(ar, "failed to transmit packet, dropping: %d\n",
3436                             ret);
3437                 ieee80211_free_txskb(ar->hw, skb);
3438         }
3439
3440         return ret;
3441 }
3442
3443 /* This function consumes the sk_buff regardless of return value as far as
3444  * caller is concerned so no freeing is necessary afterwards.
3445  */
3446 static int ath10k_mac_tx(struct ath10k *ar,
3447                          struct ieee80211_vif *vif,
3448                          struct ieee80211_sta *sta,
3449                          enum ath10k_hw_txrx_mode txmode,
3450                          enum ath10k_mac_tx_path txpath,
3451                          struct sk_buff *skb)
3452 {
3453         struct ieee80211_hw *hw = ar->hw;
3454         struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
3455         int ret;
3456
3457         /* We should disable CCK RATE due to P2P */
3458         if (info->flags & IEEE80211_TX_CTL_NO_CCK_RATE)
3459                 ath10k_dbg(ar, ATH10K_DBG_MAC, "IEEE80211_TX_CTL_NO_CCK_RATE\n");
3460
3461         switch (txmode) {
3462         case ATH10K_HW_TXRX_MGMT:
3463         case ATH10K_HW_TXRX_NATIVE_WIFI:
3464                 ath10k_tx_h_nwifi(hw, skb);
3465                 ath10k_tx_h_add_p2p_noa_ie(ar, vif, skb);
3466                 ath10k_tx_h_seq_no(vif, skb);
3467                 break;
3468         case ATH10K_HW_TXRX_ETHERNET:
3469                 ath10k_tx_h_8023(skb);
3470                 break;
3471         case ATH10K_HW_TXRX_RAW:
3472                 if (!test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags)) {
3473                         WARN_ON_ONCE(1);
3474                         ieee80211_free_txskb(hw, skb);
3475                         return -ENOTSUPP;
3476                 }
3477         }
3478
3479         if (info->flags & IEEE80211_TX_CTL_TX_OFFCHAN) {
3480                 if (!ath10k_mac_tx_frm_has_freq(ar)) {
3481                         ath10k_dbg(ar, ATH10K_DBG_MAC, "queued offchannel skb %p\n",
3482                                    skb);
3483
3484                         skb_queue_tail(&ar->offchan_tx_queue, skb);
3485                         ieee80211_queue_work(hw, &ar->offchan_tx_work);
3486                         return 0;
3487                 }
3488         }
3489
3490         ret = ath10k_mac_tx_submit(ar, txmode, txpath, skb);
3491         if (ret) {
3492                 ath10k_warn(ar, "failed to submit frame: %d\n", ret);
3493                 return ret;
3494         }
3495
3496         return 0;
3497 }
3498
3499 void ath10k_offchan_tx_purge(struct ath10k *ar)
3500 {
3501         struct sk_buff *skb;
3502
3503         for (;;) {
3504                 skb = skb_dequeue(&ar->offchan_tx_queue);
3505                 if (!skb)
3506                         break;
3507
3508                 ieee80211_free_txskb(ar->hw, skb);
3509         }
3510 }
3511
3512 void ath10k_offchan_tx_work(struct work_struct *work)
3513 {
3514         struct ath10k *ar = container_of(work, struct ath10k, offchan_tx_work);
3515         struct ath10k_peer *peer;
3516         struct ath10k_vif *arvif;
3517         enum ath10k_hw_txrx_mode txmode;
3518         enum ath10k_mac_tx_path txpath;
3519         struct ieee80211_hdr *hdr;
3520         struct ieee80211_vif *vif;
3521         struct ieee80211_sta *sta;
3522         struct sk_buff *skb;
3523         const u8 *peer_addr;
3524         int vdev_id;
3525         int ret;
3526         unsigned long time_left;
3527         bool tmp_peer_created = false;
3528
3529         /* FW requirement: We must create a peer before FW will send out
3530          * an offchannel frame. Otherwise the frame will be stuck and
3531          * never transmitted. We delete the peer upon tx completion.
3532          * It is unlikely that a peer for offchannel tx will already be
3533          * present. However it may be in some rare cases so account for that.
3534          * Otherwise we might remove a legitimate peer and break stuff. */
3535
3536         for (;;) {
3537                 skb = skb_dequeue(&ar->offchan_tx_queue);
3538                 if (!skb)
3539                         break;
3540
3541                 mutex_lock(&ar->conf_mutex);
3542
3543                 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac offchannel skb %p\n",
3544                            skb);
3545
3546                 hdr = (struct ieee80211_hdr *)skb->data;
3547                 peer_addr = ieee80211_get_DA(hdr);
3548
3549                 spin_lock_bh(&ar->data_lock);
3550                 vdev_id = ar->scan.vdev_id;
3551                 peer = ath10k_peer_find(ar, vdev_id, peer_addr);
3552                 spin_unlock_bh(&ar->data_lock);
3553
3554                 if (peer)
3555                         /* FIXME: should this use ath10k_warn()? */
3556                         ath10k_dbg(ar, ATH10K_DBG_MAC, "peer %pM on vdev %d already present\n",
3557                                    peer_addr, vdev_id);
3558
3559                 if (!peer) {
3560                         ret = ath10k_peer_create(ar, NULL, NULL, vdev_id,
3561                                                  peer_addr,
3562                                                  WMI_PEER_TYPE_DEFAULT);
3563                         if (ret)
3564                                 ath10k_warn(ar, "failed to create peer %pM on vdev %d: %d\n",
3565                                             peer_addr, vdev_id, ret);
3566                         tmp_peer_created = (ret == 0);
3567                 }
3568
3569                 spin_lock_bh(&ar->data_lock);
3570                 reinit_completion(&ar->offchan_tx_completed);
3571                 ar->offchan_tx_skb = skb;
3572                 spin_unlock_bh(&ar->data_lock);
3573
3574                 /* It's safe to access vif and sta - conf_mutex guarantees that
3575                  * sta_state() and remove_interface() are locked exclusively
3576                  * out wrt to this offchannel worker.
3577                  */
3578                 arvif = ath10k_get_arvif(ar, vdev_id);
3579                 if (arvif) {
3580                         vif = arvif->vif;
3581                         sta = ieee80211_find_sta(vif, peer_addr);
3582                 } else {
3583                         vif = NULL;
3584                         sta = NULL;
3585                 }
3586
3587                 txmode = ath10k_mac_tx_h_get_txmode(ar, vif, sta, skb);
3588                 txpath = ath10k_mac_tx_h_get_txpath(ar, skb, txmode);
3589
3590                 ret = ath10k_mac_tx(ar, vif, sta, txmode, txpath, skb);
3591                 if (ret) {
3592                         ath10k_warn(ar, "failed to transmit offchannel frame: %d\n",
3593                                     ret);
3594                         /* not serious */
3595                 }
3596
3597                 time_left =
3598                 wait_for_completion_timeout(&ar->offchan_tx_completed, 3 * HZ);
3599                 if (time_left == 0)
3600                         ath10k_warn(ar, "timed out waiting for offchannel skb %p\n",
3601                                     skb);
3602
3603                 if (!peer && tmp_peer_created) {
3604                         ret = ath10k_peer_delete(ar, vdev_id, peer_addr);
3605                         if (ret)
3606                                 ath10k_warn(ar, "failed to delete peer %pM on vdev %d: %d\n",
3607                                             peer_addr, vdev_id, ret);
3608                 }
3609
3610                 mutex_unlock(&ar->conf_mutex);
3611         }
3612 }
3613
3614 void ath10k_mgmt_over_wmi_tx_purge(struct ath10k *ar)
3615 {
3616         struct sk_buff *skb;
3617
3618         for (;;) {
3619                 skb = skb_dequeue(&ar->wmi_mgmt_tx_queue);
3620                 if (!skb)
3621                         break;
3622
3623                 ieee80211_free_txskb(ar->hw, skb);
3624         }
3625 }
3626
3627 void ath10k_mgmt_over_wmi_tx_work(struct work_struct *work)
3628 {
3629         struct ath10k *ar = container_of(work, struct ath10k, wmi_mgmt_tx_work);
3630         struct sk_buff *skb;
3631         int ret;
3632
3633         for (;;) {
3634                 skb = skb_dequeue(&ar->wmi_mgmt_tx_queue);
3635                 if (!skb)
3636                         break;
3637
3638                 ret = ath10k_wmi_mgmt_tx(ar, skb);
3639                 if (ret) {
3640                         ath10k_warn(ar, "failed to transmit management frame via WMI: %d\n",
3641                                     ret);
3642                         ieee80211_free_txskb(ar->hw, skb);
3643                 }
3644         }
3645 }
3646
3647 static void ath10k_mac_txq_init(struct ieee80211_txq *txq)
3648 {
3649         struct ath10k_txq *artxq = (void *)txq->drv_priv;
3650
3651         if (!txq)
3652                 return;
3653
3654         INIT_LIST_HEAD(&artxq->list);
3655 }
3656
3657 static void ath10k_mac_txq_unref(struct ath10k *ar, struct ieee80211_txq *txq)
3658 {
3659         struct ath10k_txq *artxq = (void *)txq->drv_priv;
3660         struct ath10k_skb_cb *cb;
3661         struct sk_buff *msdu;
3662         int msdu_id;
3663
3664         if (!txq)
3665                 return;
3666
3667         spin_lock_bh(&ar->txqs_lock);
3668         if (!list_empty(&artxq->list))
3669                 list_del_init(&artxq->list);
3670         spin_unlock_bh(&ar->txqs_lock);
3671
3672         spin_lock_bh(&ar->htt.tx_lock);
3673         idr_for_each_entry(&ar->htt.pending_tx, msdu, msdu_id) {
3674                 cb = ATH10K_SKB_CB(msdu);
3675                 if (cb->txq == txq)
3676                         cb->txq = NULL;
3677         }
3678         spin_unlock_bh(&ar->htt.tx_lock);
3679 }
3680
3681 struct ieee80211_txq *ath10k_mac_txq_lookup(struct ath10k *ar,
3682                                             u16 peer_id,
3683                                             u8 tid)
3684 {
3685         struct ath10k_peer *peer;
3686
3687         lockdep_assert_held(&ar->data_lock);
3688
3689         peer = ar->peer_map[peer_id];
3690         if (!peer)
3691                 return NULL;
3692
3693         if (peer->sta)
3694                 return peer->sta->txq[tid];
3695         else if (peer->vif)
3696                 return peer->vif->txq;
3697         else
3698                 return NULL;
3699 }
3700
3701 static bool ath10k_mac_tx_can_push(struct ieee80211_hw *hw,
3702                                    struct ieee80211_txq *txq)
3703 {
3704         struct ath10k *ar = hw->priv;
3705         struct ath10k_txq *artxq = (void *)txq->drv_priv;
3706
3707         /* No need to get locks */
3708
3709         if (ar->htt.tx_q_state.mode == HTT_TX_MODE_SWITCH_PUSH)
3710                 return true;
3711
3712         if (ar->htt.num_pending_tx < ar->htt.tx_q_state.num_push_allowed)
3713                 return true;
3714
3715         if (artxq->num_fw_queued < artxq->num_push_allowed)
3716                 return true;
3717
3718         return false;
3719 }
3720
3721 int ath10k_mac_tx_push_txq(struct ieee80211_hw *hw,
3722                            struct ieee80211_txq *txq)
3723 {
3724         struct ath10k *ar = hw->priv;
3725         struct ath10k_htt *htt = &ar->htt;
3726         struct ath10k_txq *artxq = (void *)txq->drv_priv;
3727         struct ieee80211_vif *vif = txq->vif;
3728         struct ieee80211_sta *sta = txq->sta;
3729         enum ath10k_hw_txrx_mode txmode;
3730         enum ath10k_mac_tx_path txpath;
3731         struct sk_buff *skb;
3732         size_t skb_len;
3733         int ret;
3734
3735         spin_lock_bh(&ar->htt.tx_lock);
3736         ret = ath10k_htt_tx_inc_pending(htt);
3737         spin_unlock_bh(&ar->htt.tx_lock);
3738
3739         if (ret)
3740                 return ret;
3741
3742         skb = ieee80211_tx_dequeue(hw, txq);
3743         if (!skb) {
3744                 spin_lock_bh(&ar->htt.tx_lock);
3745                 ath10k_htt_tx_dec_pending(htt);
3746                 spin_unlock_bh(&ar->htt.tx_lock);
3747
3748                 return -ENOENT;
3749         }
3750
3751         ath10k_mac_tx_h_fill_cb(ar, vif, txq, skb);
3752
3753         skb_len = skb->len;
3754         txmode = ath10k_mac_tx_h_get_txmode(ar, vif, sta, skb);
3755         txpath = ath10k_mac_tx_h_get_txpath(ar, skb, txmode);
3756
3757         ret = ath10k_mac_tx(ar, vif, sta, txmode, txpath, skb);
3758         if (unlikely(ret)) {
3759                 ath10k_warn(ar, "failed to push frame: %d\n", ret);
3760
3761                 spin_lock_bh(&ar->htt.tx_lock);
3762                 ath10k_htt_tx_dec_pending(htt);
3763                 spin_unlock_bh(&ar->htt.tx_lock);
3764
3765                 return ret;
3766         }
3767
3768         spin_lock_bh(&ar->htt.tx_lock);
3769         artxq->num_fw_queued++;
3770         spin_unlock_bh(&ar->htt.tx_lock);
3771
3772         return skb_len;
3773 }
3774
3775 void ath10k_mac_tx_push_pending(struct ath10k *ar)
3776 {
3777         struct ieee80211_hw *hw = ar->hw;
3778         struct ieee80211_txq *txq;
3779         struct ath10k_txq *artxq;
3780         struct ath10k_txq *last;
3781         int ret;
3782         int max;
3783
3784         spin_lock_bh(&ar->txqs_lock);
3785         rcu_read_lock();
3786
3787         last = list_last_entry(&ar->txqs, struct ath10k_txq, list);
3788         while (!list_empty(&ar->txqs)) {
3789                 artxq = list_first_entry(&ar->txqs, struct ath10k_txq, list);
3790                 txq = container_of((void *)artxq, struct ieee80211_txq,
3791                                    drv_priv);
3792
3793                 /* Prevent aggressive sta/tid taking over tx queue */
3794                 max = 16;
3795                 ret = 0;
3796                 while (ath10k_mac_tx_can_push(hw, txq) && max--) {
3797                         ret = ath10k_mac_tx_push_txq(hw, txq);
3798                         if (ret < 0)
3799                                 break;
3800                 }
3801
3802                 list_del_init(&artxq->list);
3803                 if (ret != -ENOENT)
3804                         list_add_tail(&artxq->list, &ar->txqs);
3805
3806                 ath10k_htt_tx_txq_update(hw, txq);
3807
3808                 if (artxq == last || (ret < 0 && ret != -ENOENT))
3809                         break;
3810         }
3811
3812         rcu_read_unlock();
3813         spin_unlock_bh(&ar->txqs_lock);
3814 }
3815
3816 /************/
3817 /* Scanning */
3818 /************/
3819
3820 void __ath10k_scan_finish(struct ath10k *ar)
3821 {
3822         lockdep_assert_held(&ar->data_lock);
3823
3824         switch (ar->scan.state) {
3825         case ATH10K_SCAN_IDLE:
3826                 break;
3827         case ATH10K_SCAN_RUNNING:
3828         case ATH10K_SCAN_ABORTING:
3829                 if (!ar->scan.is_roc)
3830                         ieee80211_scan_completed(ar->hw,
3831                                                  (ar->scan.state ==
3832                                                   ATH10K_SCAN_ABORTING));
3833                 else if (ar->scan.roc_notify)
3834                         ieee80211_remain_on_channel_expired(ar->hw);
3835                 /* fall through */
3836         case ATH10K_SCAN_STARTING:
3837                 ar->scan.state = ATH10K_SCAN_IDLE;
3838                 ar->scan_channel = NULL;
3839                 ar->scan.roc_freq = 0;
3840                 ath10k_offchan_tx_purge(ar);
3841                 cancel_delayed_work(&ar->scan.timeout);
3842                 complete_all(&ar->scan.completed);
3843                 break;
3844         }
3845 }
3846
3847 void ath10k_scan_finish(struct ath10k *ar)
3848 {
3849         spin_lock_bh(&ar->data_lock);
3850         __ath10k_scan_finish(ar);
3851         spin_unlock_bh(&ar->data_lock);
3852 }
3853
3854 static int ath10k_scan_stop(struct ath10k *ar)
3855 {
3856         struct wmi_stop_scan_arg arg = {
3857                 .req_id = 1, /* FIXME */
3858                 .req_type = WMI_SCAN_STOP_ONE,
3859                 .u.scan_id = ATH10K_SCAN_ID,
3860         };
3861         int ret;
3862
3863         lockdep_assert_held(&ar->conf_mutex);
3864
3865         ret = ath10k_wmi_stop_scan(ar, &arg);
3866         if (ret) {
3867                 ath10k_warn(ar, "failed to stop wmi scan: %d\n", ret);
3868                 goto out;
3869         }
3870
3871         ret = wait_for_completion_timeout(&ar->scan.completed, 3 * HZ);
3872         if (ret == 0) {
3873                 ath10k_warn(ar, "failed to receive scan abortion completion: timed out\n");
3874                 ret = -ETIMEDOUT;
3875         } else if (ret > 0) {
3876                 ret = 0;
3877         }
3878
3879 out:
3880         /* Scan state should be updated upon scan completion but in case
3881          * firmware fails to deliver the event (for whatever reason) it is
3882          * desired to clean up scan state anyway. Firmware may have just
3883          * dropped the scan completion event delivery due to transport pipe
3884          * being overflown with data and/or it can recover on its own before
3885          * next scan request is submitted.
3886          */
3887         spin_lock_bh(&ar->data_lock);
3888         if (ar->scan.state != ATH10K_SCAN_IDLE)
3889                 __ath10k_scan_finish(ar);
3890         spin_unlock_bh(&ar->data_lock);
3891
3892         return ret;
3893 }
3894
3895 static void ath10k_scan_abort(struct ath10k *ar)
3896 {
3897         int ret;
3898
3899         lockdep_assert_held(&ar->conf_mutex);
3900
3901         spin_lock_bh(&ar->data_lock);
3902
3903         switch (ar->scan.state) {
3904         case ATH10K_SCAN_IDLE:
3905                 /* This can happen if timeout worker kicked in and called
3906                  * abortion while scan completion was being processed.
3907                  */
3908                 break;
3909         case ATH10K_SCAN_STARTING:
3910         case ATH10K_SCAN_ABORTING:
3911                 ath10k_warn(ar, "refusing scan abortion due to invalid scan state: %s (%d)\n",
3912                             ath10k_scan_state_str(ar->scan.state),
3913                             ar->scan.state);
3914                 break;
3915         case ATH10K_SCAN_RUNNING:
3916                 ar->scan.state = ATH10K_SCAN_ABORTING;
3917                 spin_unlock_bh(&ar->data_lock);
3918
3919                 ret = ath10k_scan_stop(ar);
3920                 if (ret)
3921                         ath10k_warn(ar, "failed to abort scan: %d\n", ret);
3922
3923                 spin_lock_bh(&ar->data_lock);
3924                 break;
3925         }
3926
3927         spin_unlock_bh(&ar->data_lock);
3928 }
3929
3930 void ath10k_scan_timeout_work(struct work_struct *work)
3931 {
3932         struct ath10k *ar = container_of(work, struct ath10k,
3933                                          scan.timeout.work);
3934
3935         mutex_lock(&ar->conf_mutex);
3936         ath10k_scan_abort(ar);
3937         mutex_unlock(&ar->conf_mutex);
3938 }
3939
3940 static int ath10k_start_scan(struct ath10k *ar,
3941                              const struct wmi_start_scan_arg *arg)
3942 {
3943         int ret;
3944
3945         lockdep_assert_held(&ar->conf_mutex);
3946
3947         ret = ath10k_wmi_start_scan(ar, arg);
3948         if (ret)
3949                 return ret;
3950
3951         ret = wait_for_completion_timeout(&ar->scan.started, 1 * HZ);
3952         if (ret == 0) {
3953                 ret = ath10k_scan_stop(ar);
3954                 if (ret)
3955                         ath10k_warn(ar, "failed to stop scan: %d\n", ret);
3956
3957                 return -ETIMEDOUT;
3958         }
3959
3960         /* If we failed to start the scan, return error code at
3961          * this point.  This is probably due to some issue in the
3962          * firmware, but no need to wedge the driver due to that...
3963          */
3964         spin_lock_bh(&ar->data_lock);
3965         if (ar->scan.state == ATH10K_SCAN_IDLE) {
3966                 spin_unlock_bh(&ar->data_lock);
3967                 return -EINVAL;
3968         }
3969         spin_unlock_bh(&ar->data_lock);
3970
3971         return 0;
3972 }
3973
3974 /**********************/
3975 /* mac80211 callbacks */
3976 /**********************/
3977
3978 static void ath10k_mac_op_tx(struct ieee80211_hw *hw,
3979                              struct ieee80211_tx_control *control,
3980                              struct sk_buff *skb)
3981 {
3982         struct ath10k *ar = hw->priv;
3983         struct ath10k_htt *htt = &ar->htt;
3984         struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
3985         struct ieee80211_vif *vif = info->control.vif;
3986         struct ieee80211_sta *sta = control->sta;
3987         struct ieee80211_txq *txq = NULL;
3988         struct ieee80211_hdr *hdr = (void *)skb->data;
3989         enum ath10k_hw_txrx_mode txmode;
3990         enum ath10k_mac_tx_path txpath;
3991         bool is_htt;
3992         bool is_mgmt;
3993         bool is_presp;
3994         int ret;
3995
3996         ath10k_mac_tx_h_fill_cb(ar, vif, txq, skb);
3997
3998         txmode = ath10k_mac_tx_h_get_txmode(ar, vif, sta, skb);
3999         txpath = ath10k_mac_tx_h_get_txpath(ar, skb, txmode);
4000         is_htt = (txpath == ATH10K_MAC_TX_HTT ||
4001                   txpath == ATH10K_MAC_TX_HTT_MGMT);
4002         is_mgmt = (txpath == ATH10K_MAC_TX_HTT_MGMT);
4003
4004         if (is_htt) {
4005                 spin_lock_bh(&ar->htt.tx_lock);
4006                 is_presp = ieee80211_is_probe_resp(hdr->frame_control);
4007
4008                 ret = ath10k_htt_tx_inc_pending(htt);
4009                 if (ret) {
4010                         ath10k_warn(ar, "failed to increase tx pending count: %d, dropping\n",
4011                                     ret);
4012                         spin_unlock_bh(&ar->htt.tx_lock);
4013                         ieee80211_free_txskb(ar->hw, skb);
4014                         return;
4015                 }
4016
4017                 ret = ath10k_htt_tx_mgmt_inc_pending(htt, is_mgmt, is_presp);
4018                 if (ret) {
4019                         ath10k_dbg(ar, ATH10K_DBG_MAC, "failed to increase tx mgmt pending count: %d, dropping\n",
4020                                    ret);
4021                         ath10k_htt_tx_dec_pending(htt);
4022                         spin_unlock_bh(&ar->htt.tx_lock);
4023                         ieee80211_free_txskb(ar->hw, skb);
4024                         return;
4025                 }
4026                 spin_unlock_bh(&ar->htt.tx_lock);
4027         }
4028
4029         ret = ath10k_mac_tx(ar, vif, sta, txmode, txpath, skb);
4030         if (ret) {
4031                 ath10k_warn(ar, "failed to transmit frame: %d\n", ret);
4032                 if (is_htt) {
4033                         spin_lock_bh(&ar->htt.tx_lock);
4034                         ath10k_htt_tx_dec_pending(htt);
4035                         if (is_mgmt)
4036                                 ath10k_htt_tx_mgmt_dec_pending(htt);
4037                         spin_unlock_bh(&ar->htt.tx_lock);
4038                 }
4039                 return;
4040         }
4041 }
4042
4043 static void ath10k_mac_op_wake_tx_queue(struct ieee80211_hw *hw,
4044                                         struct ieee80211_txq *txq)
4045 {
4046         struct ath10k *ar = hw->priv;
4047         struct ath10k_txq *artxq = (void *)txq->drv_priv;
4048
4049         spin_lock_bh(&ar->txqs_lock);
4050         if (list_empty(&artxq->list))
4051                 list_add_tail(&artxq->list, &ar->txqs);
4052         spin_unlock_bh(&ar->txqs_lock);
4053
4054         if (ath10k_mac_tx_can_push(hw, txq))
4055                 tasklet_schedule(&ar->htt.txrx_compl_task);
4056
4057         ath10k_htt_tx_txq_update(hw, txq);
4058 }
4059
4060 /* Must not be called with conf_mutex held as workers can use that also. */
4061 void ath10k_drain_tx(struct ath10k *ar)
4062 {
4063         /* make sure rcu-protected mac80211 tx path itself is drained */
4064         synchronize_net();
4065
4066         ath10k_offchan_tx_purge(ar);
4067         ath10k_mgmt_over_wmi_tx_purge(ar);
4068
4069         cancel_work_sync(&ar->offchan_tx_work);
4070         cancel_work_sync(&ar->wmi_mgmt_tx_work);
4071 }
4072
4073 void ath10k_halt(struct ath10k *ar)
4074 {
4075         struct ath10k_vif *arvif;
4076
4077         lockdep_assert_held(&ar->conf_mutex);
4078
4079         clear_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
4080         ar->filter_flags = 0;
4081         ar->monitor = false;
4082         ar->monitor_arvif = NULL;
4083
4084         if (ar->monitor_started)
4085                 ath10k_monitor_stop(ar);
4086
4087         ar->monitor_started = false;
4088         ar->tx_paused = 0;
4089
4090         ath10k_scan_finish(ar);
4091         ath10k_peer_cleanup_all(ar);
4092         ath10k_core_stop(ar);
4093         ath10k_hif_power_down(ar);
4094
4095         spin_lock_bh(&ar->data_lock);
4096         list_for_each_entry(arvif, &ar->arvifs, list)
4097                 ath10k_mac_vif_beacon_cleanup(arvif);
4098         spin_unlock_bh(&ar->data_lock);
4099 }
4100
4101 static int ath10k_get_antenna(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant)
4102 {
4103         struct ath10k *ar = hw->priv;
4104
4105         mutex_lock(&ar->conf_mutex);
4106
4107         *tx_ant = ar->cfg_tx_chainmask;
4108         *rx_ant = ar->cfg_rx_chainmask;
4109
4110         mutex_unlock(&ar->conf_mutex);
4111
4112         return 0;
4113 }
4114
4115 static void ath10k_check_chain_mask(struct ath10k *ar, u32 cm, const char *dbg)
4116 {
4117         /* It is not clear that allowing gaps in chainmask
4118          * is helpful.  Probably it will not do what user
4119          * is hoping for, so warn in that case.
4120          */
4121         if (cm == 15 || cm == 7 || cm == 3 || cm == 1 || cm == 0)
4122                 return;
4123
4124         ath10k_warn(ar, "mac %s antenna chainmask may be invalid: 0x%x.  Suggested values: 15, 7, 3, 1 or 0.\n",
4125                     dbg, cm);
4126 }
4127
4128 static int ath10k_mac_get_vht_cap_bf_sts(struct ath10k *ar)
4129 {
4130         int nsts = ar->vht_cap_info;
4131
4132         nsts &= IEEE80211_VHT_CAP_BEAMFORMEE_STS_MASK;
4133         nsts >>= IEEE80211_VHT_CAP_BEAMFORMEE_STS_SHIFT;
4134
4135         /* If firmware does not deliver to host number of space-time
4136          * streams supported, assume it support up to 4 BF STS and return
4137          * the value for VHT CAP: nsts-1)
4138          */
4139         if (nsts == 0)
4140                 return 3;
4141
4142         return nsts;
4143 }
4144
4145 static int ath10k_mac_get_vht_cap_bf_sound_dim(struct ath10k *ar)
4146 {
4147         int sound_dim = ar->vht_cap_info;
4148
4149         sound_dim &= IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_MASK;
4150         sound_dim >>= IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_SHIFT;
4151
4152         /* If the sounding dimension is not advertised by the firmware,
4153          * let's use a default value of 1
4154          */
4155         if (sound_dim == 0)
4156                 return 1;
4157
4158         return sound_dim;
4159 }
4160
4161 static struct ieee80211_sta_vht_cap ath10k_create_vht_cap(struct ath10k *ar)
4162 {
4163         struct ieee80211_sta_vht_cap vht_cap = {0};
4164         u16 mcs_map;
4165         u32 val;
4166         int i;
4167
4168         vht_cap.vht_supported = 1;
4169         vht_cap.cap = ar->vht_cap_info;
4170
4171         if (ar->vht_cap_info & (IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE |
4172                                 IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE)) {
4173                 val = ath10k_mac_get_vht_cap_bf_sts(ar);
4174                 val <<= IEEE80211_VHT_CAP_BEAMFORMEE_STS_SHIFT;
4175                 val &= IEEE80211_VHT_CAP_BEAMFORMEE_STS_MASK;
4176
4177                 vht_cap.cap |= val;
4178         }
4179
4180         if (ar->vht_cap_info & (IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE |
4181                                 IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE)) {
4182                 val = ath10k_mac_get_vht_cap_bf_sound_dim(ar);
4183                 val <<= IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_SHIFT;
4184                 val &= IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_MASK;
4185
4186                 vht_cap.cap |= val;
4187         }
4188
4189         mcs_map = 0;
4190         for (i = 0; i < 8; i++) {
4191                 if ((i < ar->num_rf_chains) && (ar->cfg_tx_chainmask & BIT(i)))
4192                         mcs_map |= IEEE80211_VHT_MCS_SUPPORT_0_9 << (i * 2);
4193                 else
4194                         mcs_map |= IEEE80211_VHT_MCS_NOT_SUPPORTED << (i * 2);
4195         }
4196
4197         vht_cap.vht_mcs.rx_mcs_map = cpu_to_le16(mcs_map);
4198         vht_cap.vht_mcs.tx_mcs_map = cpu_to_le16(mcs_map);
4199
4200         return vht_cap;
4201 }
4202
4203 static struct ieee80211_sta_ht_cap ath10k_get_ht_cap(struct ath10k *ar)
4204 {
4205         int i;
4206         struct ieee80211_sta_ht_cap ht_cap = {0};
4207
4208         if (!(ar->ht_cap_info & WMI_HT_CAP_ENABLED))
4209                 return ht_cap;
4210
4211         ht_cap.ht_supported = 1;
4212         ht_cap.ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
4213         ht_cap.ampdu_density = IEEE80211_HT_MPDU_DENSITY_8;
4214         ht_cap.cap |= IEEE80211_HT_CAP_SUP_WIDTH_20_40;
4215         ht_cap.cap |= IEEE80211_HT_CAP_DSSSCCK40;
4216         ht_cap.cap |=
4217                 WLAN_HT_CAP_SM_PS_DISABLED << IEEE80211_HT_CAP_SM_PS_SHIFT;
4218
4219         if (ar->ht_cap_info & WMI_HT_CAP_HT20_SGI)
4220                 ht_cap.cap |= IEEE80211_HT_CAP_SGI_20;
4221
4222         if (ar->ht_cap_info & WMI_HT_CAP_HT40_SGI)
4223                 ht_cap.cap |= IEEE80211_HT_CAP_SGI_40;
4224
4225         if (ar->ht_cap_info & WMI_HT_CAP_DYNAMIC_SMPS) {
4226                 u32 smps;
4227
4228                 smps   = WLAN_HT_CAP_SM_PS_DYNAMIC;
4229                 smps <<= IEEE80211_HT_CAP_SM_PS_SHIFT;
4230
4231                 ht_cap.cap |= smps;
4232         }
4233
4234         if (ar->ht_cap_info & WMI_HT_CAP_TX_STBC)
4235                 ht_cap.cap |= IEEE80211_HT_CAP_TX_STBC;
4236
4237         if (ar->ht_cap_info & WMI_HT_CAP_RX_STBC) {
4238                 u32 stbc;
4239
4240                 stbc   = ar->ht_cap_info;
4241                 stbc  &= WMI_HT_CAP_RX_STBC;
4242                 stbc >>= WMI_HT_CAP_RX_STBC_MASK_SHIFT;
4243                 stbc <<= IEEE80211_HT_CAP_RX_STBC_SHIFT;
4244                 stbc  &= IEEE80211_HT_CAP_RX_STBC;
4245
4246                 ht_cap.cap |= stbc;
4247         }
4248
4249         if (ar->ht_cap_info & WMI_HT_CAP_LDPC)
4250                 ht_cap.cap |= IEEE80211_HT_CAP_LDPC_CODING;
4251
4252         if (ar->ht_cap_info & WMI_HT_CAP_L_SIG_TXOP_PROT)
4253                 ht_cap.cap |= IEEE80211_HT_CAP_LSIG_TXOP_PROT;
4254
4255         /* max AMSDU is implicitly taken from vht_cap_info */
4256         if (ar->vht_cap_info & WMI_VHT_CAP_MAX_MPDU_LEN_MASK)
4257                 ht_cap.cap |= IEEE80211_HT_CAP_MAX_AMSDU;
4258
4259         for (i = 0; i < ar->num_rf_chains; i++) {
4260                 if (ar->cfg_rx_chainmask & BIT(i))
4261                         ht_cap.mcs.rx_mask[i] = 0xFF;
4262         }
4263
4264         ht_cap.mcs.tx_params |= IEEE80211_HT_MCS_TX_DEFINED;
4265
4266         return ht_cap;
4267 }
4268
4269 static void ath10k_mac_setup_ht_vht_cap(struct ath10k *ar)
4270 {
4271         struct ieee80211_supported_band *band;
4272         struct ieee80211_sta_vht_cap vht_cap;
4273         struct ieee80211_sta_ht_cap ht_cap;
4274
4275         ht_cap = ath10k_get_ht_cap(ar);
4276         vht_cap = ath10k_create_vht_cap(ar);
4277
4278         if (ar->phy_capability & WHAL_WLAN_11G_CAPABILITY) {
4279                 band = &ar->mac.sbands[NL80211_BAND_2GHZ];
4280                 band->ht_cap = ht_cap;
4281         }
4282         if (ar->phy_capability & WHAL_WLAN_11A_CAPABILITY) {
4283                 band = &ar->mac.sbands[NL80211_BAND_5GHZ];
4284                 band->ht_cap = ht_cap;
4285                 band->vht_cap = vht_cap;
4286         }
4287 }
4288
4289 static int __ath10k_set_antenna(struct ath10k *ar, u32 tx_ant, u32 rx_ant)
4290 {
4291         int ret;
4292
4293         lockdep_assert_held(&ar->conf_mutex);
4294
4295         ath10k_check_chain_mask(ar, tx_ant, "tx");
4296         ath10k_check_chain_mask(ar, rx_ant, "rx");
4297
4298         ar->cfg_tx_chainmask = tx_ant;
4299         ar->cfg_rx_chainmask = rx_ant;
4300
4301         if ((ar->state != ATH10K_STATE_ON) &&
4302             (ar->state != ATH10K_STATE_RESTARTED))
4303                 return 0;
4304
4305         ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->tx_chain_mask,
4306                                         tx_ant);
4307         if (ret) {
4308                 ath10k_warn(ar, "failed to set tx-chainmask: %d, req 0x%x\n",
4309                             ret, tx_ant);
4310                 return ret;
4311         }
4312
4313         ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->rx_chain_mask,
4314                                         rx_ant);
4315         if (ret) {
4316                 ath10k_warn(ar, "failed to set rx-chainmask: %d, req 0x%x\n",
4317                             ret, rx_ant);
4318                 return ret;
4319         }
4320
4321         /* Reload HT/VHT capability */
4322         ath10k_mac_setup_ht_vht_cap(ar);
4323
4324         return 0;
4325 }
4326
4327 static int ath10k_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant)
4328 {
4329         struct ath10k *ar = hw->priv;
4330         int ret;
4331
4332         mutex_lock(&ar->conf_mutex);
4333         ret = __ath10k_set_antenna(ar, tx_ant, rx_ant);
4334         mutex_unlock(&ar->conf_mutex);
4335         return ret;
4336 }
4337
4338 static int ath10k_start(struct ieee80211_hw *hw)
4339 {
4340         struct ath10k *ar = hw->priv;
4341         u32 param;
4342         int ret = 0;
4343
4344         /*
4345          * This makes sense only when restarting hw. It is harmless to call
4346          * unconditionally. This is necessary to make sure no HTT/WMI tx
4347          * commands will be submitted while restarting.
4348          */
4349         ath10k_drain_tx(ar);
4350
4351         mutex_lock(&ar->conf_mutex);
4352
4353         switch (ar->state) {
4354         case ATH10K_STATE_OFF:
4355                 ar->state = ATH10K_STATE_ON;
4356                 break;
4357         case ATH10K_STATE_RESTARTING:
4358                 ath10k_halt(ar);
4359                 ar->state = ATH10K_STATE_RESTARTED;
4360                 break;
4361         case ATH10K_STATE_ON:
4362         case ATH10K_STATE_RESTARTED:
4363         case ATH10K_STATE_WEDGED:
4364                 WARN_ON(1);
4365                 ret = -EINVAL;
4366                 goto err;
4367         case ATH10K_STATE_UTF:
4368                 ret = -EBUSY;
4369                 goto err;
4370         }
4371
4372         ret = ath10k_hif_power_up(ar);
4373         if (ret) {
4374                 ath10k_err(ar, "Could not init hif: %d\n", ret);
4375                 goto err_off;
4376         }
4377
4378         ret = ath10k_core_start(ar, ATH10K_FIRMWARE_MODE_NORMAL,
4379                                 &ar->normal_mode_fw);
4380         if (ret) {
4381                 ath10k_err(ar, "Could not init core: %d\n", ret);
4382                 goto err_power_down;
4383         }
4384
4385         param = ar->wmi.pdev_param->pmf_qos;
4386         ret = ath10k_wmi_pdev_set_param(ar, param, 1);
4387         if (ret) {
4388                 ath10k_warn(ar, "failed to enable PMF QOS: %d\n", ret);
4389                 goto err_core_stop;
4390         }
4391
4392         param = ar->wmi.pdev_param->dynamic_bw;
4393         ret = ath10k_wmi_pdev_set_param(ar, param, 1);
4394         if (ret) {
4395                 ath10k_warn(ar, "failed to enable dynamic BW: %d\n", ret);
4396                 goto err_core_stop;
4397         }
4398
4399         if (test_bit(WMI_SERVICE_ADAPTIVE_OCS, ar->wmi.svc_map)) {
4400                 ret = ath10k_wmi_adaptive_qcs(ar, true);
4401                 if (ret) {
4402                         ath10k_warn(ar, "failed to enable adaptive qcs: %d\n",
4403                                     ret);
4404                         goto err_core_stop;
4405                 }
4406         }
4407
4408         if (test_bit(WMI_SERVICE_BURST, ar->wmi.svc_map)) {
4409                 param = ar->wmi.pdev_param->burst_enable;
4410                 ret = ath10k_wmi_pdev_set_param(ar, param, 0);
4411                 if (ret) {
4412                         ath10k_warn(ar, "failed to disable burst: %d\n", ret);
4413                         goto err_core_stop;
4414                 }
4415         }
4416
4417         __ath10k_set_antenna(ar, ar->cfg_tx_chainmask, ar->cfg_rx_chainmask);
4418
4419         /*
4420          * By default FW set ARP frames ac to voice (6). In that case ARP
4421          * exchange is not working properly for UAPSD enabled AP. ARP requests
4422          * which arrives with access category 0 are processed by network stack
4423          * and send back with access category 0, but FW changes access category
4424          * to 6. Set ARP frames access category to best effort (0) solves
4425          * this problem.
4426          */
4427
4428         param = ar->wmi.pdev_param->arp_ac_override;
4429         ret = ath10k_wmi_pdev_set_param(ar, param, 0);
4430         if (ret) {
4431                 ath10k_warn(ar, "failed to set arp ac override parameter: %d\n",
4432                             ret);
4433                 goto err_core_stop;
4434         }
4435
4436         if (test_bit(ATH10K_FW_FEATURE_SUPPORTS_ADAPTIVE_CCA,
4437                      ar->running_fw->fw_file.fw_features)) {
4438                 ret = ath10k_wmi_pdev_enable_adaptive_cca(ar, 1,
4439                                                           WMI_CCA_DETECT_LEVEL_AUTO,
4440                                                           WMI_CCA_DETECT_MARGIN_AUTO);
4441                 if (ret) {
4442                         ath10k_warn(ar, "failed to enable adaptive cca: %d\n",
4443                                     ret);
4444                         goto err_core_stop;
4445                 }
4446         }
4447
4448         param = ar->wmi.pdev_param->ani_enable;
4449         ret = ath10k_wmi_pdev_set_param(ar, param, 1);
4450         if (ret) {
4451                 ath10k_warn(ar, "failed to enable ani by default: %d\n",
4452                             ret);
4453                 goto err_core_stop;
4454         }
4455
4456         ar->ani_enabled = true;
4457
4458         if (ath10k_peer_stats_enabled(ar)) {
4459                 param = ar->wmi.pdev_param->peer_stats_update_period;
4460                 ret = ath10k_wmi_pdev_set_param(ar, param,
4461                                                 PEER_DEFAULT_STATS_UPDATE_PERIOD);
4462                 if (ret) {
4463                         ath10k_warn(ar,
4464                                     "failed to set peer stats period : %d\n",
4465                                     ret);
4466                         goto err_core_stop;
4467                 }
4468         }
4469
4470         ar->num_started_vdevs = 0;
4471         ath10k_regd_update(ar);
4472
4473         ath10k_spectral_start(ar);
4474         ath10k_thermal_set_throttling(ar);
4475
4476         mutex_unlock(&ar->conf_mutex);
4477         return 0;
4478
4479 err_core_stop:
4480         ath10k_core_stop(ar);
4481
4482 err_power_down:
4483         ath10k_hif_power_down(ar);
4484
4485 err_off:
4486         ar->state = ATH10K_STATE_OFF;
4487
4488 err:
4489         mutex_unlock(&ar->conf_mutex);
4490         return ret;
4491 }
4492
4493 static void ath10k_stop(struct ieee80211_hw *hw)
4494 {
4495         struct ath10k *ar = hw->priv;
4496
4497         ath10k_drain_tx(ar);
4498
4499         mutex_lock(&ar->conf_mutex);
4500         if (ar->state != ATH10K_STATE_OFF) {
4501                 ath10k_halt(ar);
4502                 ar->state = ATH10K_STATE_OFF;
4503         }
4504         mutex_unlock(&ar->conf_mutex);
4505
4506         cancel_delayed_work_sync(&ar->scan.timeout);
4507         cancel_work_sync(&ar->restart_work);
4508 }
4509
4510 static int ath10k_config_ps(struct ath10k *ar)
4511 {
4512         struct ath10k_vif *arvif;
4513         int ret = 0;
4514
4515         lockdep_assert_held(&ar->conf_mutex);
4516
4517         list_for_each_entry(arvif, &ar->arvifs, list) {
4518                 ret = ath10k_mac_vif_setup_ps(arvif);
4519                 if (ret) {
4520                         ath10k_warn(ar, "failed to setup powersave: %d\n", ret);
4521                         break;
4522                 }
4523         }
4524
4525         return ret;
4526 }
4527
4528 static int ath10k_mac_txpower_setup(struct ath10k *ar, int txpower)
4529 {
4530         int ret;
4531         u32 param;
4532
4533         lockdep_assert_held(&ar->conf_mutex);
4534
4535         ath10k_dbg(ar, ATH10K_DBG_MAC, "mac txpower %d\n", txpower);
4536
4537         param = ar->wmi.pdev_param->txpower_limit2g;
4538         ret = ath10k_wmi_pdev_set_param(ar, param, txpower * 2);
4539         if (ret) {
4540                 ath10k_warn(ar, "failed to set 2g txpower %d: %d\n",
4541                             txpower, ret);
4542                 return ret;
4543         }
4544
4545         param = ar->wmi.pdev_param->txpower_limit5g;
4546         ret = ath10k_wmi_pdev_set_param(ar, param, txpower * 2);
4547         if (ret) {
4548                 ath10k_warn(ar, "failed to set 5g txpower %d: %d\n",
4549                             txpower, ret);
4550                 return ret;
4551         }
4552
4553         return 0;
4554 }
4555
4556 static int ath10k_mac_txpower_recalc(struct ath10k *ar)
4557 {
4558         struct ath10k_vif *arvif;
4559         int ret, txpower = -1;
4560
4561         lockdep_assert_held(&ar->conf_mutex);
4562
4563         list_for_each_entry(arvif, &ar->arvifs, list) {
4564                 WARN_ON(arvif->txpower < 0);
4565
4566                 if (txpower == -1)
4567                         txpower = arvif->txpower;
4568                 else
4569                         txpower = min(txpower, arvif->txpower);
4570         }
4571
4572         if (WARN_ON(txpower == -1))
4573                 return -EINVAL;
4574
4575         ret = ath10k_mac_txpower_setup(ar, txpower);
4576         if (ret) {
4577                 ath10k_warn(ar, "failed to setup tx power %d: %d\n",
4578                             txpower, ret);
4579                 return ret;
4580         }
4581
4582         return 0;
4583 }
4584
4585 static int ath10k_config(struct ieee80211_hw *hw, u32 changed)
4586 {
4587         struct ath10k *ar = hw->priv;
4588         struct ieee80211_conf *conf = &hw->conf;
4589         int ret = 0;
4590
4591         mutex_lock(&ar->conf_mutex);
4592
4593         if (changed & IEEE80211_CONF_CHANGE_PS)
4594                 ath10k_config_ps(ar);
4595
4596         if (changed & IEEE80211_CONF_CHANGE_MONITOR) {
4597                 ar->monitor = conf->flags & IEEE80211_CONF_MONITOR;
4598                 ret = ath10k_monitor_recalc(ar);
4599                 if (ret)
4600                         ath10k_warn(ar, "failed to recalc monitor: %d\n", ret);
4601         }
4602
4603         mutex_unlock(&ar->conf_mutex);
4604         return ret;
4605 }
4606
4607 static u32 get_nss_from_chainmask(u16 chain_mask)
4608 {
4609         if ((chain_mask & 0xf) == 0xf)
4610                 return 4;
4611         else if ((chain_mask & 0x7) == 0x7)
4612                 return 3;
4613         else if ((chain_mask & 0x3) == 0x3)
4614                 return 2;
4615         return 1;
4616 }
4617
4618 static int ath10k_mac_set_txbf_conf(struct ath10k_vif *arvif)
4619 {
4620         u32 value = 0;
4621         struct ath10k *ar = arvif->ar;
4622         int nsts;
4623         int sound_dim;
4624
4625         if (ath10k_wmi_get_txbf_conf_scheme(ar) != WMI_TXBF_CONF_BEFORE_ASSOC)
4626                 return 0;
4627
4628         nsts = ath10k_mac_get_vht_cap_bf_sts(ar);
4629         if (ar->vht_cap_info & (IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE |
4630                                 IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE))
4631                 value |= SM(nsts, WMI_TXBF_STS_CAP_OFFSET);
4632
4633         sound_dim = ath10k_mac_get_vht_cap_bf_sound_dim(ar);
4634         if (ar->vht_cap_info & (IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE |
4635                                 IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE))
4636                 value |= SM(sound_dim, WMI_BF_SOUND_DIM_OFFSET);
4637
4638         if (!value)
4639                 return 0;
4640
4641         if (ar->vht_cap_info & IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE)
4642                 value |= WMI_VDEV_PARAM_TXBF_SU_TX_BFER;
4643
4644         if (ar->vht_cap_info & IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE)
4645                 value |= (WMI_VDEV_PARAM_TXBF_MU_TX_BFER |
4646                           WMI_VDEV_PARAM_TXBF_SU_TX_BFER);
4647
4648         if (ar->vht_cap_info & IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE)
4649                 value |= WMI_VDEV_PARAM_TXBF_SU_TX_BFEE;
4650
4651         if (ar->vht_cap_info & IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE)
4652                 value |= (WMI_VDEV_PARAM_TXBF_MU_TX_BFEE |
4653                           WMI_VDEV_PARAM_TXBF_SU_TX_BFEE);
4654
4655         return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id,
4656                                          ar->wmi.vdev_param->txbf, value);
4657 }
4658
4659 /*
4660  * TODO:
4661  * Figure out how to handle WMI_VDEV_SUBTYPE_P2P_DEVICE,
4662  * because we will send mgmt frames without CCK. This requirement
4663  * for P2P_FIND/GO_NEG should be handled by checking CCK flag
4664  * in the TX packet.
4665  */
4666 static int ath10k_add_interface(struct ieee80211_hw *hw,
4667                                 struct ieee80211_vif *vif)
4668 {
4669         struct ath10k *ar = hw->priv;
4670         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4671         struct ath10k_peer *peer;
4672         enum wmi_sta_powersave_param param;
4673         int ret = 0;
4674         u32 value;
4675         int bit;
4676         int i;
4677         u32 vdev_param;
4678
4679         vif->driver_flags |= IEEE80211_VIF_SUPPORTS_UAPSD;
4680
4681         mutex_lock(&ar->conf_mutex);
4682
4683         memset(arvif, 0, sizeof(*arvif));
4684         ath10k_mac_txq_init(vif->txq);
4685
4686         arvif->ar = ar;
4687         arvif->vif = vif;
4688
4689         INIT_LIST_HEAD(&arvif->list);
4690         INIT_WORK(&arvif->ap_csa_work, ath10k_mac_vif_ap_csa_work);
4691         INIT_DELAYED_WORK(&arvif->connection_loss_work,
4692                           ath10k_mac_vif_sta_connection_loss_work);
4693
4694         for (i = 0; i < ARRAY_SIZE(arvif->bitrate_mask.control); i++) {
4695                 arvif->bitrate_mask.control[i].legacy = 0xffffffff;
4696                 memset(arvif->bitrate_mask.control[i].ht_mcs, 0xff,
4697                        sizeof(arvif->bitrate_mask.control[i].ht_mcs));
4698                 memset(arvif->bitrate_mask.control[i].vht_mcs, 0xff,
4699                        sizeof(arvif->bitrate_mask.control[i].vht_mcs));
4700         }
4701
4702         if (ar->num_peers >= ar->max_num_peers) {
4703                 ath10k_warn(ar, "refusing vdev creation due to insufficient peer entry resources in firmware\n");
4704                 ret = -ENOBUFS;
4705                 goto err;
4706         }
4707
4708         if (ar->free_vdev_map == 0) {
4709                 ath10k_warn(ar, "Free vdev map is empty, no more interfaces allowed.\n");
4710                 ret = -EBUSY;
4711                 goto err;
4712         }
4713         bit = __ffs64(ar->free_vdev_map);
4714
4715         ath10k_dbg(ar, ATH10K_DBG_MAC, "mac create vdev %i map %llx\n",
4716                    bit, ar->free_vdev_map);
4717
4718         arvif->vdev_id = bit;
4719         arvif->vdev_subtype =
4720                 ath10k_wmi_get_vdev_subtype(ar, WMI_VDEV_SUBTYPE_NONE);
4721
4722         switch (vif->type) {
4723         case NL80211_IFTYPE_P2P_DEVICE:
4724                 arvif->vdev_type = WMI_VDEV_TYPE_STA;
4725                 arvif->vdev_subtype = ath10k_wmi_get_vdev_subtype
4726                                         (ar, WMI_VDEV_SUBTYPE_P2P_DEVICE);
4727                 break;
4728         case NL80211_IFTYPE_UNSPECIFIED:
4729         case NL80211_IFTYPE_STATION:
4730                 arvif->vdev_type = WMI_VDEV_TYPE_STA;
4731                 if (vif->p2p)
4732                         arvif->vdev_subtype = ath10k_wmi_get_vdev_subtype
4733                                         (ar, WMI_VDEV_SUBTYPE_P2P_CLIENT);
4734                 break;
4735         case NL80211_IFTYPE_ADHOC:
4736                 arvif->vdev_type = WMI_VDEV_TYPE_IBSS;
4737                 break;
4738         case NL80211_IFTYPE_MESH_POINT:
4739                 if (test_bit(WMI_SERVICE_MESH_11S, ar->wmi.svc_map)) {
4740                         arvif->vdev_subtype = ath10k_wmi_get_vdev_subtype
4741                                                 (ar, WMI_VDEV_SUBTYPE_MESH_11S);
4742                 } else if (!test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags)) {
4743                         ret = -EINVAL;
4744                         ath10k_warn(ar, "must load driver with rawmode=1 to add mesh interfaces\n");
4745                         goto err;
4746                 }
4747                 arvif->vdev_type = WMI_VDEV_TYPE_AP;
4748                 break;
4749         case NL80211_IFTYPE_AP:
4750                 arvif->vdev_type = WMI_VDEV_TYPE_AP;
4751
4752                 if (vif->p2p)
4753                         arvif->vdev_subtype = ath10k_wmi_get_vdev_subtype
4754                                                 (ar, WMI_VDEV_SUBTYPE_P2P_GO);
4755                 break;
4756         case NL80211_IFTYPE_MONITOR:
4757                 arvif->vdev_type = WMI_VDEV_TYPE_MONITOR;
4758                 break;
4759         default:
4760                 WARN_ON(1);
4761                 break;
4762         }
4763
4764         /* Using vdev_id as queue number will make it very easy to do per-vif
4765          * tx queue locking. This shouldn't wrap due to interface combinations
4766          * but do a modulo for correctness sake and prevent using offchannel tx
4767          * queues for regular vif tx.
4768          */
4769         vif->cab_queue = arvif->vdev_id % (IEEE80211_MAX_QUEUES - 1);
4770         for (i = 0; i < ARRAY_SIZE(vif->hw_queue); i++)
4771                 vif->hw_queue[i] = arvif->vdev_id % (IEEE80211_MAX_QUEUES - 1);
4772
4773         /* Some firmware revisions don't wait for beacon tx completion before
4774          * sending another SWBA event. This could lead to hardware using old
4775          * (freed) beacon data in some cases, e.g. tx credit starvation
4776          * combined with missed TBTT. This is very very rare.
4777          *
4778          * On non-IOMMU-enabled hosts this could be a possible security issue
4779          * because hw could beacon some random data on the air.  On
4780          * IOMMU-enabled hosts DMAR faults would occur in most cases and target
4781          * device would crash.
4782          *
4783          * Since there are no beacon tx completions (implicit nor explicit)
4784          * propagated to host the only workaround for this is to allocate a
4785          * DMA-coherent buffer for a lifetime of a vif and use it for all
4786          * beacon tx commands. Worst case for this approach is some beacons may
4787          * become corrupted, e.g. have garbled IEs or out-of-date TIM bitmap.
4788          */
4789         if (vif->type == NL80211_IFTYPE_ADHOC ||
4790             vif->type == NL80211_IFTYPE_MESH_POINT ||
4791             vif->type == NL80211_IFTYPE_AP) {
4792                 arvif->beacon_buf = dma_zalloc_coherent(ar->dev,
4793                                                         IEEE80211_MAX_FRAME_LEN,
4794                                                         &arvif->beacon_paddr,
4795                                                         GFP_ATOMIC);
4796                 if (!arvif->beacon_buf) {
4797                         ret = -ENOMEM;
4798                         ath10k_warn(ar, "failed to allocate beacon buffer: %d\n",
4799                                     ret);
4800                         goto err;
4801                 }
4802         }
4803         if (test_bit(ATH10K_FLAG_HW_CRYPTO_DISABLED, &ar->dev_flags))
4804                 arvif->nohwcrypt = true;
4805
4806         if (arvif->nohwcrypt &&
4807             !test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags)) {
4808                 ath10k_warn(ar, "cryptmode module param needed for sw crypto\n");
4809                 goto err;
4810         }
4811
4812         ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev create %d (add interface) type %d subtype %d bcnmode %s\n",
4813                    arvif->vdev_id, arvif->vdev_type, arvif->vdev_subtype,
4814                    arvif->beacon_buf ? "single-buf" : "per-skb");
4815
4816         ret = ath10k_wmi_vdev_create(ar, arvif->vdev_id, arvif->vdev_type,
4817                                      arvif->vdev_subtype, vif->addr);
4818         if (ret) {
4819                 ath10k_warn(ar, "failed to create WMI vdev %i: %d\n",
4820                             arvif->vdev_id, ret);
4821                 goto err;
4822         }
4823
4824         ar->free_vdev_map &= ~(1LL << arvif->vdev_id);
4825         list_add(&arvif->list, &ar->arvifs);
4826
4827         /* It makes no sense to have firmware do keepalives. mac80211 already
4828          * takes care of this with idle connection polling.
4829          */
4830         ret = ath10k_mac_vif_disable_keepalive(arvif);
4831         if (ret) {
4832                 ath10k_warn(ar, "failed to disable keepalive on vdev %i: %d\n",
4833                             arvif->vdev_id, ret);
4834                 goto err_vdev_delete;
4835         }
4836
4837         arvif->def_wep_key_idx = -1;
4838
4839         vdev_param = ar->wmi.vdev_param->tx_encap_type;
4840         ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
4841                                         ATH10K_HW_TXRX_NATIVE_WIFI);
4842         /* 10.X firmware does not support this VDEV parameter. Do not warn */
4843         if (ret && ret != -EOPNOTSUPP) {
4844                 ath10k_warn(ar, "failed to set vdev %i TX encapsulation: %d\n",
4845                             arvif->vdev_id, ret);
4846                 goto err_vdev_delete;
4847         }
4848
4849         /* Configuring number of spatial stream for monitor interface is causing
4850          * target assert in qca9888 and qca6174.
4851          */
4852         if (ar->cfg_tx_chainmask && (vif->type != NL80211_IFTYPE_MONITOR)) {
4853                 u16 nss = get_nss_from_chainmask(ar->cfg_tx_chainmask);
4854
4855                 vdev_param = ar->wmi.vdev_param->nss;
4856                 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
4857                                                 nss);
4858                 if (ret) {
4859                         ath10k_warn(ar, "failed to set vdev %i chainmask 0x%x, nss %i: %d\n",
4860                                     arvif->vdev_id, ar->cfg_tx_chainmask, nss,
4861                                     ret);
4862                         goto err_vdev_delete;
4863                 }
4864         }
4865
4866         if (arvif->vdev_type == WMI_VDEV_TYPE_AP ||
4867             arvif->vdev_type == WMI_VDEV_TYPE_IBSS) {
4868                 ret = ath10k_peer_create(ar, vif, NULL, arvif->vdev_id,
4869                                          vif->addr, WMI_PEER_TYPE_DEFAULT);
4870                 if (ret) {
4871                         ath10k_warn(ar, "failed to create vdev %i peer for AP/IBSS: %d\n",
4872                                     arvif->vdev_id, ret);
4873                         goto err_vdev_delete;
4874                 }
4875
4876                 spin_lock_bh(&ar->data_lock);
4877
4878                 peer = ath10k_peer_find(ar, arvif->vdev_id, vif->addr);
4879                 if (!peer) {
4880                         ath10k_warn(ar, "failed to lookup peer %pM on vdev %i\n",
4881                                     vif->addr, arvif->vdev_id);
4882                         spin_unlock_bh(&ar->data_lock);
4883                         ret = -ENOENT;
4884                         goto err_peer_delete;
4885                 }
4886
4887                 arvif->peer_id = find_first_bit(peer->peer_ids,
4888                                                 ATH10K_MAX_NUM_PEER_IDS);
4889
4890                 spin_unlock_bh(&ar->data_lock);
4891         } else {
4892                 arvif->peer_id = HTT_INVALID_PEERID;
4893         }
4894
4895         if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
4896                 ret = ath10k_mac_set_kickout(arvif);
4897                 if (ret) {
4898                         ath10k_warn(ar, "failed to set vdev %i kickout parameters: %d\n",
4899                                     arvif->vdev_id, ret);
4900                         goto err_peer_delete;
4901                 }
4902         }
4903
4904         if (arvif->vdev_type == WMI_VDEV_TYPE_STA) {
4905                 param = WMI_STA_PS_PARAM_RX_WAKE_POLICY;
4906                 value = WMI_STA_PS_RX_WAKE_POLICY_WAKE;
4907                 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
4908                                                   param, value);
4909                 if (ret) {
4910                         ath10k_warn(ar, "failed to set vdev %i RX wake policy: %d\n",
4911                                     arvif->vdev_id, ret);
4912                         goto err_peer_delete;
4913                 }
4914
4915                 ret = ath10k_mac_vif_recalc_ps_wake_threshold(arvif);
4916                 if (ret) {
4917                         ath10k_warn(ar, "failed to recalc ps wake threshold on vdev %i: %d\n",
4918                                     arvif->vdev_id, ret);
4919                         goto err_peer_delete;
4920                 }
4921
4922                 ret = ath10k_mac_vif_recalc_ps_poll_count(arvif);
4923                 if (ret) {
4924                         ath10k_warn(ar, "failed to recalc ps poll count on vdev %i: %d\n",
4925                                     arvif->vdev_id, ret);
4926                         goto err_peer_delete;
4927                 }
4928         }
4929
4930         ret = ath10k_mac_set_txbf_conf(arvif);
4931         if (ret) {
4932                 ath10k_warn(ar, "failed to set txbf for vdev %d: %d\n",
4933                             arvif->vdev_id, ret);
4934                 goto err_peer_delete;
4935         }
4936
4937         ret = ath10k_mac_set_rts(arvif, ar->hw->wiphy->rts_threshold);
4938         if (ret) {
4939                 ath10k_warn(ar, "failed to set rts threshold for vdev %d: %d\n",
4940                             arvif->vdev_id, ret);
4941                 goto err_peer_delete;
4942         }
4943
4944         arvif->txpower = vif->bss_conf.txpower;
4945         ret = ath10k_mac_txpower_recalc(ar);
4946         if (ret) {
4947                 ath10k_warn(ar, "failed to recalc tx power: %d\n", ret);
4948                 goto err_peer_delete;
4949         }
4950
4951         if (vif->type == NL80211_IFTYPE_MONITOR) {
4952                 ar->monitor_arvif = arvif;
4953                 ret = ath10k_monitor_recalc(ar);
4954                 if (ret) {
4955                         ath10k_warn(ar, "failed to recalc monitor: %d\n", ret);
4956                         goto err_peer_delete;
4957                 }
4958         }
4959
4960         spin_lock_bh(&ar->htt.tx_lock);
4961         if (!ar->tx_paused)
4962                 ieee80211_wake_queue(ar->hw, arvif->vdev_id);
4963         spin_unlock_bh(&ar->htt.tx_lock);
4964
4965         mutex_unlock(&ar->conf_mutex);
4966         return 0;
4967
4968 err_peer_delete:
4969         if (arvif->vdev_type == WMI_VDEV_TYPE_AP ||
4970             arvif->vdev_type == WMI_VDEV_TYPE_IBSS)
4971                 ath10k_wmi_peer_delete(ar, arvif->vdev_id, vif->addr);
4972
4973 err_vdev_delete:
4974         ath10k_wmi_vdev_delete(ar, arvif->vdev_id);
4975         ar->free_vdev_map |= 1LL << arvif->vdev_id;
4976         list_del(&arvif->list);
4977
4978 err:
4979         if (arvif->beacon_buf) {
4980                 dma_free_coherent(ar->dev, IEEE80211_MAX_FRAME_LEN,
4981                                   arvif->beacon_buf, arvif->beacon_paddr);
4982                 arvif->beacon_buf = NULL;
4983         }
4984
4985         mutex_unlock(&ar->conf_mutex);
4986
4987         return ret;
4988 }
4989
4990 static void ath10k_mac_vif_tx_unlock_all(struct ath10k_vif *arvif)
4991 {
4992         int i;
4993
4994         for (i = 0; i < BITS_PER_LONG; i++)
4995                 ath10k_mac_vif_tx_unlock(arvif, i);
4996 }
4997
4998 static void ath10k_remove_interface(struct ieee80211_hw *hw,
4999                                     struct ieee80211_vif *vif)
5000 {
5001         struct ath10k *ar = hw->priv;
5002         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
5003         struct ath10k_peer *peer;
5004         int ret;
5005         int i;
5006
5007         cancel_work_sync(&arvif->ap_csa_work);
5008         cancel_delayed_work_sync(&arvif->connection_loss_work);
5009
5010         mutex_lock(&ar->conf_mutex);
5011
5012         spin_lock_bh(&ar->data_lock);
5013         ath10k_mac_vif_beacon_cleanup(arvif);
5014         spin_unlock_bh(&ar->data_lock);
5015
5016         ret = ath10k_spectral_vif_stop(arvif);
5017         if (ret)
5018                 ath10k_warn(ar, "failed to stop spectral for vdev %i: %d\n",
5019                             arvif->vdev_id, ret);
5020
5021         ar->free_vdev_map |= 1LL << arvif->vdev_id;
5022         list_del(&arvif->list);
5023
5024         if (arvif->vdev_type == WMI_VDEV_TYPE_AP ||
5025             arvif->vdev_type == WMI_VDEV_TYPE_IBSS) {
5026                 ret = ath10k_wmi_peer_delete(arvif->ar, arvif->vdev_id,
5027                                              vif->addr);
5028                 if (ret)
5029                         ath10k_warn(ar, "failed to submit AP/IBSS self-peer removal on vdev %i: %d\n",
5030                                     arvif->vdev_id, ret);
5031
5032                 kfree(arvif->u.ap.noa_data);
5033         }
5034
5035         ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %i delete (remove interface)\n",
5036                    arvif->vdev_id);
5037
5038         ret = ath10k_wmi_vdev_delete(ar, arvif->vdev_id);
5039         if (ret)
5040                 ath10k_warn(ar, "failed to delete WMI vdev %i: %d\n",
5041                             arvif->vdev_id, ret);
5042
5043         /* Some firmware revisions don't notify host about self-peer removal
5044          * until after associated vdev is deleted.
5045          */
5046         if (arvif->vdev_type == WMI_VDEV_TYPE_AP ||
5047             arvif->vdev_type == WMI_VDEV_TYPE_IBSS) {
5048                 ret = ath10k_wait_for_peer_deleted(ar, arvif->vdev_id,
5049                                                    vif->addr);
5050                 if (ret)
5051                         ath10k_warn(ar, "failed to remove AP self-peer on vdev %i: %d\n",
5052                                     arvif->vdev_id, ret);
5053
5054                 spin_lock_bh(&ar->data_lock);
5055                 ar->num_peers--;
5056                 spin_unlock_bh(&ar->data_lock);
5057         }
5058
5059         spin_lock_bh(&ar->data_lock);
5060         for (i = 0; i < ARRAY_SIZE(ar->peer_map); i++) {
5061                 peer = ar->peer_map[i];
5062                 if (!peer)
5063                         continue;
5064
5065                 if (peer->vif == vif) {
5066                         ath10k_warn(ar, "found vif peer %pM entry on vdev %i after it was supposedly removed\n",
5067                                     vif->addr, arvif->vdev_id);
5068                         peer->vif = NULL;
5069                 }
5070         }
5071         spin_unlock_bh(&ar->data_lock);
5072
5073         ath10k_peer_cleanup(ar, arvif->vdev_id);
5074         ath10k_mac_txq_unref(ar, vif->txq);
5075
5076         if (vif->type == NL80211_IFTYPE_MONITOR) {
5077                 ar->monitor_arvif = NULL;
5078                 ret = ath10k_monitor_recalc(ar);
5079                 if (ret)
5080                         ath10k_warn(ar, "failed to recalc monitor: %d\n", ret);
5081         }
5082
5083         spin_lock_bh(&ar->htt.tx_lock);
5084         ath10k_mac_vif_tx_unlock_all(arvif);
5085         spin_unlock_bh(&ar->htt.tx_lock);
5086
5087         ath10k_mac_txq_unref(ar, vif->txq);
5088
5089         mutex_unlock(&ar->conf_mutex);
5090 }
5091
5092 /*
5093  * FIXME: Has to be verified.
5094  */
5095 #define SUPPORTED_FILTERS                       \
5096         (FIF_ALLMULTI |                         \
5097         FIF_CONTROL |                           \
5098         FIF_PSPOLL |                            \
5099         FIF_OTHER_BSS |                         \
5100         FIF_BCN_PRBRESP_PROMISC |               \
5101         FIF_PROBE_REQ |                         \
5102         FIF_FCSFAIL)
5103
5104 static void ath10k_configure_filter(struct ieee80211_hw *hw,
5105                                     unsigned int changed_flags,
5106                                     unsigned int *total_flags,
5107                                     u64 multicast)
5108 {
5109         struct ath10k *ar = hw->priv;
5110         int ret;
5111
5112         mutex_lock(&ar->conf_mutex);
5113
5114         changed_flags &= SUPPORTED_FILTERS;
5115         *total_flags &= SUPPORTED_FILTERS;
5116         ar->filter_flags = *total_flags;
5117
5118         ret = ath10k_monitor_recalc(ar);
5119         if (ret)
5120                 ath10k_warn(ar, "failed to recalc montior: %d\n", ret);
5121
5122         mutex_unlock(&ar->conf_mutex);
5123 }
5124
5125 static void ath10k_bss_info_changed(struct ieee80211_hw *hw,
5126                                     struct ieee80211_vif *vif,
5127                                     struct ieee80211_bss_conf *info,
5128                                     u32 changed)
5129 {
5130         struct ath10k *ar = hw->priv;
5131         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
5132         int ret = 0;
5133         u32 vdev_param, pdev_param, slottime, preamble;
5134
5135         mutex_lock(&ar->conf_mutex);
5136
5137         if (changed & BSS_CHANGED_IBSS)
5138                 ath10k_control_ibss(arvif, info, vif->addr);
5139
5140         if (changed & BSS_CHANGED_BEACON_INT) {
5141                 arvif->beacon_interval = info->beacon_int;
5142                 vdev_param = ar->wmi.vdev_param->beacon_interval;
5143                 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
5144                                                 arvif->beacon_interval);
5145                 ath10k_dbg(ar, ATH10K_DBG_MAC,
5146                            "mac vdev %d beacon_interval %d\n",
5147                            arvif->vdev_id, arvif->beacon_interval);
5148
5149                 if (ret)
5150                         ath10k_warn(ar, "failed to set beacon interval for vdev %d: %i\n",
5151                                     arvif->vdev_id, ret);
5152         }
5153
5154         if (changed & BSS_CHANGED_BEACON) {
5155                 ath10k_dbg(ar, ATH10K_DBG_MAC,
5156                            "vdev %d set beacon tx mode to staggered\n",
5157                            arvif->vdev_id);
5158
5159                 pdev_param = ar->wmi.pdev_param->beacon_tx_mode;
5160                 ret = ath10k_wmi_pdev_set_param(ar, pdev_param,
5161                                                 WMI_BEACON_STAGGERED_MODE);
5162                 if (ret)
5163                         ath10k_warn(ar, "failed to set beacon mode for vdev %d: %i\n",
5164                                     arvif->vdev_id, ret);
5165
5166                 ret = ath10k_mac_setup_bcn_tmpl(arvif);
5167                 if (ret)
5168                         ath10k_warn(ar, "failed to update beacon template: %d\n",
5169                                     ret);
5170
5171                 if (ieee80211_vif_is_mesh(vif)) {
5172                         /* mesh doesn't use SSID but firmware needs it */
5173                         strncpy(arvif->u.ap.ssid, "mesh",
5174                                 sizeof(arvif->u.ap.ssid));
5175                         arvif->u.ap.ssid_len = 4;
5176                 }
5177         }
5178
5179         if (changed & BSS_CHANGED_AP_PROBE_RESP) {
5180                 ret = ath10k_mac_setup_prb_tmpl(arvif);
5181                 if (ret)
5182                         ath10k_warn(ar, "failed to setup probe resp template on vdev %i: %d\n",
5183                                     arvif->vdev_id, ret);
5184         }
5185
5186         if (changed & (BSS_CHANGED_BEACON_INFO | BSS_CHANGED_BEACON)) {
5187                 arvif->dtim_period = info->dtim_period;
5188
5189                 ath10k_dbg(ar, ATH10K_DBG_MAC,
5190                            "mac vdev %d dtim_period %d\n",
5191                            arvif->vdev_id, arvif->dtim_period);
5192
5193                 vdev_param = ar->wmi.vdev_param->dtim_period;
5194                 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
5195                                                 arvif->dtim_period);
5196                 if (ret)
5197                         ath10k_warn(ar, "failed to set dtim period for vdev %d: %i\n",
5198                                     arvif->vdev_id, ret);
5199         }
5200
5201         if (changed & BSS_CHANGED_SSID &&
5202             vif->type == NL80211_IFTYPE_AP) {
5203                 arvif->u.ap.ssid_len = info->ssid_len;
5204                 if (info->ssid_len)
5205                         memcpy(arvif->u.ap.ssid, info->ssid, info->ssid_len);
5206                 arvif->u.ap.hidden_ssid = info->hidden_ssid;
5207         }
5208
5209         if (changed & BSS_CHANGED_BSSID && !is_zero_ether_addr(info->bssid))
5210                 ether_addr_copy(arvif->bssid, info->bssid);
5211
5212         if (changed & BSS_CHANGED_BEACON_ENABLED)
5213                 ath10k_control_beaconing(arvif, info);
5214
5215         if (changed & BSS_CHANGED_ERP_CTS_PROT) {
5216                 arvif->use_cts_prot = info->use_cts_prot;
5217                 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d cts_prot %d\n",
5218                            arvif->vdev_id, info->use_cts_prot);
5219
5220                 ret = ath10k_recalc_rtscts_prot(arvif);
5221                 if (ret)
5222                         ath10k_warn(ar, "failed to recalculate rts/cts prot for vdev %d: %d\n",
5223                                     arvif->vdev_id, ret);
5224
5225                 vdev_param = ar->wmi.vdev_param->protection_mode;
5226                 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
5227                                                 info->use_cts_prot ? 1 : 0);
5228                 if (ret)
5229                         ath10k_warn(ar, "failed to set protection mode %d on vdev %i: %d\n",
5230                                     info->use_cts_prot, arvif->vdev_id, ret);
5231         }
5232
5233         if (changed & BSS_CHANGED_ERP_SLOT) {
5234                 if (info->use_short_slot)
5235                         slottime = WMI_VDEV_SLOT_TIME_SHORT; /* 9us */
5236
5237                 else
5238                         slottime = WMI_VDEV_SLOT_TIME_LONG; /* 20us */
5239
5240                 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d slot_time %d\n",
5241                            arvif->vdev_id, slottime);
5242
5243                 vdev_param = ar->wmi.vdev_param->slot_time;
5244                 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
5245                                                 slottime);
5246                 if (ret)
5247                         ath10k_warn(ar, "failed to set erp slot for vdev %d: %i\n",
5248                                     arvif->vdev_id, ret);
5249         }
5250
5251         if (changed & BSS_CHANGED_ERP_PREAMBLE) {
5252                 if (info->use_short_preamble)
5253                         preamble = WMI_VDEV_PREAMBLE_SHORT;
5254                 else
5255                         preamble = WMI_VDEV_PREAMBLE_LONG;
5256
5257                 ath10k_dbg(ar, ATH10K_DBG_MAC,
5258                            "mac vdev %d preamble %dn",
5259                            arvif->vdev_id, preamble);
5260
5261                 vdev_param = ar->wmi.vdev_param->preamble;
5262                 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
5263                                                 preamble);
5264                 if (ret)
5265                         ath10k_warn(ar, "failed to set preamble for vdev %d: %i\n",
5266                                     arvif->vdev_id, ret);
5267         }
5268
5269         if (changed & BSS_CHANGED_ASSOC) {
5270                 if (info->assoc) {
5271                         /* Workaround: Make sure monitor vdev is not running
5272                          * when associating to prevent some firmware revisions
5273                          * (e.g. 10.1 and 10.2) from crashing.
5274                          */
5275                         if (ar->monitor_started)
5276                                 ath10k_monitor_stop(ar);
5277                         ath10k_bss_assoc(hw, vif, info);
5278                         ath10k_monitor_recalc(ar);
5279                 } else {
5280                         ath10k_bss_disassoc(hw, vif);
5281                 }
5282         }
5283
5284         if (changed & BSS_CHANGED_TXPOWER) {
5285                 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev_id %i txpower %d\n",
5286                            arvif->vdev_id, info->txpower);
5287
5288                 arvif->txpower = info->txpower;
5289                 ret = ath10k_mac_txpower_recalc(ar);
5290                 if (ret)
5291                         ath10k_warn(ar, "failed to recalc tx power: %d\n", ret);
5292         }
5293
5294         if (changed & BSS_CHANGED_PS) {
5295                 arvif->ps = vif->bss_conf.ps;
5296
5297                 ret = ath10k_config_ps(ar);
5298                 if (ret)
5299                         ath10k_warn(ar, "failed to setup ps on vdev %i: %d\n",
5300                                     arvif->vdev_id, ret);
5301         }
5302
5303         mutex_unlock(&ar->conf_mutex);
5304 }
5305
5306 static int ath10k_hw_scan(struct ieee80211_hw *hw,
5307                           struct ieee80211_vif *vif,
5308                           struct ieee80211_scan_request *hw_req)
5309 {
5310         struct ath10k *ar = hw->priv;
5311         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
5312         struct cfg80211_scan_request *req = &hw_req->req;
5313         struct wmi_start_scan_arg arg;
5314         int ret = 0;
5315         int i;
5316
5317         mutex_lock(&ar->conf_mutex);
5318
5319         spin_lock_bh(&ar->data_lock);
5320         switch (ar->scan.state) {
5321         case ATH10K_SCAN_IDLE:
5322                 reinit_completion(&ar->scan.started);
5323                 reinit_completion(&ar->scan.completed);
5324                 ar->scan.state = ATH10K_SCAN_STARTING;
5325                 ar->scan.is_roc = false;
5326                 ar->scan.vdev_id = arvif->vdev_id;
5327                 ret = 0;
5328                 break;
5329         case ATH10K_SCAN_STARTING:
5330         case ATH10K_SCAN_RUNNING:
5331         case ATH10K_SCAN_ABORTING:
5332                 ret = -EBUSY;
5333                 break;
5334         }
5335         spin_unlock_bh(&ar->data_lock);
5336
5337         if (ret)
5338                 goto exit;
5339
5340         memset(&arg, 0, sizeof(arg));
5341         ath10k_wmi_start_scan_init(ar, &arg);
5342         arg.vdev_id = arvif->vdev_id;
5343         arg.scan_id = ATH10K_SCAN_ID;
5344
5345         if (req->ie_len) {
5346                 arg.ie_len = req->ie_len;
5347                 memcpy(arg.ie, req->ie, arg.ie_len);
5348         }
5349
5350         if (req->n_ssids) {
5351                 arg.n_ssids = req->n_ssids;
5352                 for (i = 0; i < arg.n_ssids; i++) {
5353                         arg.ssids[i].len  = req->ssids[i].ssid_len;
5354                         arg.ssids[i].ssid = req->ssids[i].ssid;
5355                 }
5356         } else {
5357                 arg.scan_ctrl_flags |= WMI_SCAN_FLAG_PASSIVE;
5358         }
5359
5360         if (req->n_channels) {
5361                 arg.n_channels = req->n_channels;
5362                 for (i = 0; i < arg.n_channels; i++)
5363                         arg.channels[i] = req->channels[i]->center_freq;
5364         }
5365
5366         ret = ath10k_start_scan(ar, &arg);
5367         if (ret) {
5368                 ath10k_warn(ar, "failed to start hw scan: %d\n", ret);
5369                 spin_lock_bh(&ar->data_lock);
5370                 ar->scan.state = ATH10K_SCAN_IDLE;
5371                 spin_unlock_bh(&ar->data_lock);
5372         }
5373
5374         /* Add a 200ms margin to account for event/command processing */
5375         ieee80211_queue_delayed_work(ar->hw, &ar->scan.timeout,
5376                                      msecs_to_jiffies(arg.max_scan_time +
5377                                                       200));
5378
5379 exit:
5380         mutex_unlock(&ar->conf_mutex);
5381         return ret;
5382 }
5383
5384 static void ath10k_cancel_hw_scan(struct ieee80211_hw *hw,
5385                                   struct ieee80211_vif *vif)
5386 {
5387         struct ath10k *ar = hw->priv;
5388
5389         mutex_lock(&ar->conf_mutex);
5390         ath10k_scan_abort(ar);
5391         mutex_unlock(&ar->conf_mutex);
5392
5393         cancel_delayed_work_sync(&ar->scan.timeout);
5394 }
5395
5396 static void ath10k_set_key_h_def_keyidx(struct ath10k *ar,
5397                                         struct ath10k_vif *arvif,
5398                                         enum set_key_cmd cmd,
5399                                         struct ieee80211_key_conf *key)
5400 {
5401         u32 vdev_param = arvif->ar->wmi.vdev_param->def_keyid;
5402         int ret;
5403
5404         /* 10.1 firmware branch requires default key index to be set to group
5405          * key index after installing it. Otherwise FW/HW Txes corrupted
5406          * frames with multi-vif APs. This is not required for main firmware
5407          * branch (e.g. 636).
5408          *
5409          * This is also needed for 636 fw for IBSS-RSN to work more reliably.
5410          *
5411          * FIXME: It remains unknown if this is required for multi-vif STA
5412          * interfaces on 10.1.
5413          */
5414
5415         if (arvif->vdev_type != WMI_VDEV_TYPE_AP &&
5416             arvif->vdev_type != WMI_VDEV_TYPE_IBSS)
5417                 return;
5418
5419         if (key->cipher == WLAN_CIPHER_SUITE_WEP40)
5420                 return;
5421
5422         if (key->cipher == WLAN_CIPHER_SUITE_WEP104)
5423                 return;
5424
5425         if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE)
5426                 return;
5427
5428         if (cmd != SET_KEY)
5429                 return;
5430
5431         ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
5432                                         key->keyidx);
5433         if (ret)
5434                 ath10k_warn(ar, "failed to set vdev %i group key as default key: %d\n",
5435                             arvif->vdev_id, ret);
5436 }
5437
5438 static int ath10k_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
5439                           struct ieee80211_vif *vif, struct ieee80211_sta *sta,
5440                           struct ieee80211_key_conf *key)
5441 {
5442         struct ath10k *ar = hw->priv;
5443         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
5444         struct ath10k_peer *peer;
5445         const u8 *peer_addr;
5446         bool is_wep = key->cipher == WLAN_CIPHER_SUITE_WEP40 ||
5447                       key->cipher == WLAN_CIPHER_SUITE_WEP104;
5448         int ret = 0;
5449         int ret2;
5450         u32 flags = 0;
5451         u32 flags2;
5452
5453         /* this one needs to be done in software */
5454         if (key->cipher == WLAN_CIPHER_SUITE_AES_CMAC)
5455                 return 1;
5456
5457         if (arvif->nohwcrypt)
5458                 return 1;
5459
5460         if (key->keyidx > WMI_MAX_KEY_INDEX)
5461                 return -ENOSPC;
5462
5463         mutex_lock(&ar->conf_mutex);
5464
5465         if (sta)
5466                 peer_addr = sta->addr;
5467         else if (arvif->vdev_type == WMI_VDEV_TYPE_STA)
5468                 peer_addr = vif->bss_conf.bssid;
5469         else
5470                 peer_addr = vif->addr;
5471
5472         key->hw_key_idx = key->keyidx;
5473
5474         if (is_wep) {
5475                 if (cmd == SET_KEY)
5476                         arvif->wep_keys[key->keyidx] = key;
5477                 else
5478                         arvif->wep_keys[key->keyidx] = NULL;
5479         }
5480
5481         /* the peer should not disappear in mid-way (unless FW goes awry) since
5482          * we already hold conf_mutex. we just make sure its there now. */
5483         spin_lock_bh(&ar->data_lock);
5484         peer = ath10k_peer_find(ar, arvif->vdev_id, peer_addr);
5485         spin_unlock_bh(&ar->data_lock);
5486
5487         if (!peer) {
5488                 if (cmd == SET_KEY) {
5489                         ath10k_warn(ar, "failed to install key for non-existent peer %pM\n",
5490                                     peer_addr);
5491                         ret = -EOPNOTSUPP;
5492                         goto exit;
5493                 } else {
5494                         /* if the peer doesn't exist there is no key to disable
5495                          * anymore */
5496                         goto exit;
5497                 }
5498         }
5499
5500         if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE)
5501                 flags |= WMI_KEY_PAIRWISE;
5502         else
5503                 flags |= WMI_KEY_GROUP;
5504
5505         if (is_wep) {
5506                 if (cmd == DISABLE_KEY)
5507                         ath10k_clear_vdev_key(arvif, key);
5508
5509                 /* When WEP keys are uploaded it's possible that there are
5510                  * stations associated already (e.g. when merging) without any
5511                  * keys. Static WEP needs an explicit per-peer key upload.
5512                  */
5513                 if (vif->type == NL80211_IFTYPE_ADHOC &&
5514                     cmd == SET_KEY)
5515                         ath10k_mac_vif_update_wep_key(arvif, key);
5516
5517                 /* 802.1x never sets the def_wep_key_idx so each set_key()
5518                  * call changes default tx key.
5519                  *
5520                  * Static WEP sets def_wep_key_idx via .set_default_unicast_key
5521                  * after first set_key().
5522                  */
5523                 if (cmd == SET_KEY && arvif->def_wep_key_idx == -1)
5524                         flags |= WMI_KEY_TX_USAGE;
5525         }
5526
5527         ret = ath10k_install_key(arvif, key, cmd, peer_addr, flags);
5528         if (ret) {
5529                 WARN_ON(ret > 0);
5530                 ath10k_warn(ar, "failed to install key for vdev %i peer %pM: %d\n",
5531                             arvif->vdev_id, peer_addr, ret);
5532                 goto exit;
5533         }
5534
5535         /* mac80211 sets static WEP keys as groupwise while firmware requires
5536          * them to be installed twice as both pairwise and groupwise.
5537          */
5538         if (is_wep && !sta && vif->type == NL80211_IFTYPE_STATION) {
5539                 flags2 = flags;
5540                 flags2 &= ~WMI_KEY_GROUP;
5541                 flags2 |= WMI_KEY_PAIRWISE;
5542
5543                 ret = ath10k_install_key(arvif, key, cmd, peer_addr, flags2);
5544                 if (ret) {
5545                         WARN_ON(ret > 0);
5546                         ath10k_warn(ar, "failed to install (ucast) key for vdev %i peer %pM: %d\n",
5547                                     arvif->vdev_id, peer_addr, ret);
5548                         ret2 = ath10k_install_key(arvif, key, DISABLE_KEY,
5549                                                   peer_addr, flags);
5550                         if (ret2) {
5551                                 WARN_ON(ret2 > 0);
5552                                 ath10k_warn(ar, "failed to disable (mcast) key for vdev %i peer %pM: %d\n",
5553                                             arvif->vdev_id, peer_addr, ret2);
5554                         }
5555                         goto exit;
5556                 }
5557         }
5558
5559         ath10k_set_key_h_def_keyidx(ar, arvif, cmd, key);
5560
5561         spin_lock_bh(&ar->data_lock);
5562         peer = ath10k_peer_find(ar, arvif->vdev_id, peer_addr);
5563         if (peer && cmd == SET_KEY)
5564                 peer->keys[key->keyidx] = key;
5565         else if (peer && cmd == DISABLE_KEY)
5566                 peer->keys[key->keyidx] = NULL;
5567         else if (peer == NULL)
5568                 /* impossible unless FW goes crazy */
5569                 ath10k_warn(ar, "Peer %pM disappeared!\n", peer_addr);
5570         spin_unlock_bh(&ar->data_lock);
5571
5572 exit:
5573         mutex_unlock(&ar->conf_mutex);
5574         return ret;
5575 }
5576
5577 static void ath10k_set_default_unicast_key(struct ieee80211_hw *hw,
5578                                            struct ieee80211_vif *vif,
5579                                            int keyidx)
5580 {
5581         struct ath10k *ar = hw->priv;
5582         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
5583         int ret;
5584
5585         mutex_lock(&arvif->ar->conf_mutex);
5586
5587         if (arvif->ar->state != ATH10K_STATE_ON)
5588                 goto unlock;
5589
5590         ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d set keyidx %d\n",
5591                    arvif->vdev_id, keyidx);
5592
5593         ret = ath10k_wmi_vdev_set_param(arvif->ar,
5594                                         arvif->vdev_id,
5595                                         arvif->ar->wmi.vdev_param->def_keyid,
5596                                         keyidx);
5597
5598         if (ret) {
5599                 ath10k_warn(ar, "failed to update wep key index for vdev %d: %d\n",
5600                             arvif->vdev_id,
5601                             ret);
5602                 goto unlock;
5603         }
5604
5605         arvif->def_wep_key_idx = keyidx;
5606
5607 unlock:
5608         mutex_unlock(&arvif->ar->conf_mutex);
5609 }
5610
5611 static void ath10k_sta_rc_update_wk(struct work_struct *wk)
5612 {
5613         struct ath10k *ar;
5614         struct ath10k_vif *arvif;
5615         struct ath10k_sta *arsta;
5616         struct ieee80211_sta *sta;
5617         struct cfg80211_chan_def def;
5618         enum nl80211_band band;
5619         const u8 *ht_mcs_mask;
5620         const u16 *vht_mcs_mask;
5621         u32 changed, bw, nss, smps;
5622         int err;
5623
5624         arsta = container_of(wk, struct ath10k_sta, update_wk);
5625         sta = container_of((void *)arsta, struct ieee80211_sta, drv_priv);
5626         arvif = arsta->arvif;
5627         ar = arvif->ar;
5628
5629         if (WARN_ON(ath10k_mac_vif_chan(arvif->vif, &def)))
5630                 return;
5631
5632         band = def.chan->band;
5633         ht_mcs_mask = arvif->bitrate_mask.control[band].ht_mcs;
5634         vht_mcs_mask = arvif->bitrate_mask.control[band].vht_mcs;
5635
5636         spin_lock_bh(&ar->data_lock);
5637
5638         changed = arsta->changed;
5639         arsta->changed = 0;
5640
5641         bw = arsta->bw;
5642         nss = arsta->nss;
5643         smps = arsta->smps;
5644
5645         spin_unlock_bh(&ar->data_lock);
5646
5647         mutex_lock(&ar->conf_mutex);
5648
5649         nss = max_t(u32, 1, nss);
5650         nss = min(nss, max(ath10k_mac_max_ht_nss(ht_mcs_mask),
5651                            ath10k_mac_max_vht_nss(vht_mcs_mask)));
5652
5653         if (changed & IEEE80211_RC_BW_CHANGED) {
5654                 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM peer bw %d\n",
5655                            sta->addr, bw);
5656
5657                 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
5658                                                 WMI_PEER_CHAN_WIDTH, bw);
5659                 if (err)
5660                         ath10k_warn(ar, "failed to update STA %pM peer bw %d: %d\n",
5661                                     sta->addr, bw, err);
5662         }
5663
5664         if (changed & IEEE80211_RC_NSS_CHANGED) {
5665                 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM nss %d\n",
5666                            sta->addr, nss);
5667
5668                 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
5669                                                 WMI_PEER_NSS, nss);
5670                 if (err)
5671                         ath10k_warn(ar, "failed to update STA %pM nss %d: %d\n",
5672                                     sta->addr, nss, err);
5673         }
5674
5675         if (changed & IEEE80211_RC_SMPS_CHANGED) {
5676                 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM smps %d\n",
5677                            sta->addr, smps);
5678
5679                 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
5680                                                 WMI_PEER_SMPS_STATE, smps);
5681                 if (err)
5682                         ath10k_warn(ar, "failed to update STA %pM smps %d: %d\n",
5683                                     sta->addr, smps, err);
5684         }
5685
5686         if (changed & IEEE80211_RC_SUPP_RATES_CHANGED ||
5687             changed & IEEE80211_RC_NSS_CHANGED) {
5688                 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM supp rates/nss\n",
5689                            sta->addr);
5690
5691                 err = ath10k_station_assoc(ar, arvif->vif, sta, true);
5692                 if (err)
5693                         ath10k_warn(ar, "failed to reassociate station: %pM\n",
5694                                     sta->addr);
5695         }
5696
5697         mutex_unlock(&ar->conf_mutex);
5698 }
5699
5700 static int ath10k_mac_inc_num_stations(struct ath10k_vif *arvif,
5701                                        struct ieee80211_sta *sta)
5702 {
5703         struct ath10k *ar = arvif->ar;
5704
5705         lockdep_assert_held(&ar->conf_mutex);
5706
5707         if (arvif->vdev_type == WMI_VDEV_TYPE_STA && !sta->tdls)
5708                 return 0;
5709
5710         if (ar->num_stations >= ar->max_num_stations)
5711                 return -ENOBUFS;
5712
5713         ar->num_stations++;
5714
5715         return 0;
5716 }
5717
5718 static void ath10k_mac_dec_num_stations(struct ath10k_vif *arvif,
5719                                         struct ieee80211_sta *sta)
5720 {
5721         struct ath10k *ar = arvif->ar;
5722
5723         lockdep_assert_held(&ar->conf_mutex);
5724
5725         if (arvif->vdev_type == WMI_VDEV_TYPE_STA && !sta->tdls)
5726                 return;
5727
5728         ar->num_stations--;
5729 }
5730
5731 struct ath10k_mac_tdls_iter_data {
5732         u32 num_tdls_stations;
5733         struct ieee80211_vif *curr_vif;
5734 };
5735
5736 static void ath10k_mac_tdls_vif_stations_count_iter(void *data,
5737                                                     struct ieee80211_sta *sta)
5738 {
5739         struct ath10k_mac_tdls_iter_data *iter_data = data;
5740         struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
5741         struct ieee80211_vif *sta_vif = arsta->arvif->vif;
5742
5743         if (sta->tdls && sta_vif == iter_data->curr_vif)
5744                 iter_data->num_tdls_stations++;
5745 }
5746
5747 static int ath10k_mac_tdls_vif_stations_count(struct ieee80211_hw *hw,
5748                                               struct ieee80211_vif *vif)
5749 {
5750         struct ath10k_mac_tdls_iter_data data = {};
5751
5752         data.curr_vif = vif;
5753
5754         ieee80211_iterate_stations_atomic(hw,
5755                                           ath10k_mac_tdls_vif_stations_count_iter,
5756                                           &data);
5757         return data.num_tdls_stations;
5758 }
5759
5760 static void ath10k_mac_tdls_vifs_count_iter(void *data, u8 *mac,
5761                                             struct ieee80211_vif *vif)
5762 {
5763         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
5764         int *num_tdls_vifs = data;
5765
5766         if (vif->type != NL80211_IFTYPE_STATION)
5767                 return;
5768
5769         if (ath10k_mac_tdls_vif_stations_count(arvif->ar->hw, vif) > 0)
5770                 (*num_tdls_vifs)++;
5771 }
5772
5773 static int ath10k_mac_tdls_vifs_count(struct ieee80211_hw *hw)
5774 {
5775         int num_tdls_vifs = 0;
5776
5777         ieee80211_iterate_active_interfaces_atomic(hw,
5778                                                    IEEE80211_IFACE_ITER_NORMAL,
5779                                                    ath10k_mac_tdls_vifs_count_iter,
5780                                                    &num_tdls_vifs);
5781         return num_tdls_vifs;
5782 }
5783
5784 static int ath10k_sta_state(struct ieee80211_hw *hw,
5785                             struct ieee80211_vif *vif,
5786                             struct ieee80211_sta *sta,
5787                             enum ieee80211_sta_state old_state,
5788                             enum ieee80211_sta_state new_state)
5789 {
5790         struct ath10k *ar = hw->priv;
5791         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
5792         struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
5793         struct ath10k_peer *peer;
5794         int ret = 0;
5795         int i;
5796
5797         if (old_state == IEEE80211_STA_NOTEXIST &&
5798             new_state == IEEE80211_STA_NONE) {
5799                 memset(arsta, 0, sizeof(*arsta));
5800                 arsta->arvif = arvif;
5801                 INIT_WORK(&arsta->update_wk, ath10k_sta_rc_update_wk);
5802
5803                 for (i = 0; i < ARRAY_SIZE(sta->txq); i++)
5804                         ath10k_mac_txq_init(sta->txq[i]);
5805         }
5806
5807         /* cancel must be done outside the mutex to avoid deadlock */
5808         if ((old_state == IEEE80211_STA_NONE &&
5809              new_state == IEEE80211_STA_NOTEXIST))
5810                 cancel_work_sync(&arsta->update_wk);
5811
5812         mutex_lock(&ar->conf_mutex);
5813
5814         if (old_state == IEEE80211_STA_NOTEXIST &&
5815             new_state == IEEE80211_STA_NONE) {
5816                 /*
5817                  * New station addition.
5818                  */
5819                 enum wmi_peer_type peer_type = WMI_PEER_TYPE_DEFAULT;
5820                 u32 num_tdls_stations;
5821                 u32 num_tdls_vifs;
5822
5823                 ath10k_dbg(ar, ATH10K_DBG_MAC,
5824                            "mac vdev %d peer create %pM (new sta) sta %d / %d peer %d / %d\n",
5825                            arvif->vdev_id, sta->addr,
5826                            ar->num_stations + 1, ar->max_num_stations,
5827                            ar->num_peers + 1, ar->max_num_peers);
5828
5829                 ret = ath10k_mac_inc_num_stations(arvif, sta);
5830                 if (ret) {
5831                         ath10k_warn(ar, "refusing to associate station: too many connected already (%d)\n",
5832                                     ar->max_num_stations);
5833                         goto exit;
5834                 }
5835
5836                 if (sta->tdls)
5837                         peer_type = WMI_PEER_TYPE_TDLS;
5838
5839                 ret = ath10k_peer_create(ar, vif, sta, arvif->vdev_id,
5840                                          sta->addr, peer_type);
5841                 if (ret) {
5842                         ath10k_warn(ar, "failed to add peer %pM for vdev %d when adding a new sta: %i\n",
5843                                     sta->addr, arvif->vdev_id, ret);
5844                         ath10k_mac_dec_num_stations(arvif, sta);
5845                         goto exit;
5846                 }
5847
5848                 spin_lock_bh(&ar->data_lock);
5849
5850                 peer = ath10k_peer_find(ar, arvif->vdev_id, sta->addr);
5851                 if (!peer) {
5852                         ath10k_warn(ar, "failed to lookup peer %pM on vdev %i\n",
5853                                     vif->addr, arvif->vdev_id);
5854                         spin_unlock_bh(&ar->data_lock);
5855                         ath10k_peer_delete(ar, arvif->vdev_id, sta->addr);
5856                         ath10k_mac_dec_num_stations(arvif, sta);
5857                         ret = -ENOENT;
5858                         goto exit;
5859                 }
5860
5861                 arsta->peer_id = find_first_bit(peer->peer_ids,
5862                                                 ATH10K_MAX_NUM_PEER_IDS);
5863
5864                 spin_unlock_bh(&ar->data_lock);
5865
5866                 if (!sta->tdls)
5867                         goto exit;
5868
5869                 num_tdls_stations = ath10k_mac_tdls_vif_stations_count(hw, vif);
5870                 num_tdls_vifs = ath10k_mac_tdls_vifs_count(hw);
5871
5872                 if (num_tdls_vifs >= ar->max_num_tdls_vdevs &&
5873                     num_tdls_stations == 0) {
5874                         ath10k_warn(ar, "vdev %i exceeded maximum number of tdls vdevs %i\n",
5875                                     arvif->vdev_id, ar->max_num_tdls_vdevs);
5876                         ath10k_peer_delete(ar, arvif->vdev_id, sta->addr);
5877                         ath10k_mac_dec_num_stations(arvif, sta);
5878                         ret = -ENOBUFS;
5879                         goto exit;
5880                 }
5881
5882                 if (num_tdls_stations == 0) {
5883                         /* This is the first tdls peer in current vif */
5884                         enum wmi_tdls_state state = WMI_TDLS_ENABLE_ACTIVE;
5885
5886                         ret = ath10k_wmi_update_fw_tdls_state(ar, arvif->vdev_id,
5887                                                               state);
5888                         if (ret) {
5889                                 ath10k_warn(ar, "failed to update fw tdls state on vdev %i: %i\n",
5890                                             arvif->vdev_id, ret);
5891                                 ath10k_peer_delete(ar, arvif->vdev_id,
5892                                                    sta->addr);
5893                                 ath10k_mac_dec_num_stations(arvif, sta);
5894                                 goto exit;
5895                         }
5896                 }
5897
5898                 ret = ath10k_mac_tdls_peer_update(ar, arvif->vdev_id, sta,
5899                                                   WMI_TDLS_PEER_STATE_PEERING);
5900                 if (ret) {
5901                         ath10k_warn(ar,
5902                                     "failed to update tdls peer %pM for vdev %d when adding a new sta: %i\n",
5903                                     sta->addr, arvif->vdev_id, ret);
5904                         ath10k_peer_delete(ar, arvif->vdev_id, sta->addr);
5905                         ath10k_mac_dec_num_stations(arvif, sta);
5906
5907                         if (num_tdls_stations != 0)
5908                                 goto exit;
5909                         ath10k_wmi_update_fw_tdls_state(ar, arvif->vdev_id,
5910                                                         WMI_TDLS_DISABLE);
5911                 }
5912         } else if ((old_state == IEEE80211_STA_NONE &&
5913                     new_state == IEEE80211_STA_NOTEXIST)) {
5914                 /*
5915                  * Existing station deletion.
5916                  */
5917                 ath10k_dbg(ar, ATH10K_DBG_MAC,
5918                            "mac vdev %d peer delete %pM (sta gone)\n",
5919                            arvif->vdev_id, sta->addr);
5920
5921                 ret = ath10k_peer_delete(ar, arvif->vdev_id, sta->addr);
5922                 if (ret)
5923                         ath10k_warn(ar, "failed to delete peer %pM for vdev %d: %i\n",
5924                                     sta->addr, arvif->vdev_id, ret);
5925
5926                 ath10k_mac_dec_num_stations(arvif, sta);
5927
5928                 spin_lock_bh(&ar->data_lock);
5929                 for (i = 0; i < ARRAY_SIZE(ar->peer_map); i++) {
5930                         peer = ar->peer_map[i];
5931                         if (!peer)
5932                                 continue;
5933
5934                         if (peer->sta == sta) {
5935                                 ath10k_warn(ar, "found sta peer %pM entry on vdev %i after it was supposedly removed\n",
5936                                             sta->addr, arvif->vdev_id);
5937                                 peer->sta = NULL;
5938                         }
5939                 }
5940                 spin_unlock_bh(&ar->data_lock);
5941
5942                 for (i = 0; i < ARRAY_SIZE(sta->txq); i++)
5943                         ath10k_mac_txq_unref(ar, sta->txq[i]);
5944
5945                 if (!sta->tdls)
5946                         goto exit;
5947
5948                 if (ath10k_mac_tdls_vif_stations_count(hw, vif))
5949                         goto exit;
5950
5951                 /* This was the last tdls peer in current vif */
5952                 ret = ath10k_wmi_update_fw_tdls_state(ar, arvif->vdev_id,
5953                                                       WMI_TDLS_DISABLE);
5954                 if (ret) {
5955                         ath10k_warn(ar, "failed to update fw tdls state on vdev %i: %i\n",
5956                                     arvif->vdev_id, ret);
5957                 }
5958         } else if (old_state == IEEE80211_STA_AUTH &&
5959                    new_state == IEEE80211_STA_ASSOC &&
5960                    (vif->type == NL80211_IFTYPE_AP ||
5961                     vif->type == NL80211_IFTYPE_MESH_POINT ||
5962                     vif->type == NL80211_IFTYPE_ADHOC)) {
5963                 /*
5964                  * New association.
5965                  */
5966                 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac sta %pM associated\n",
5967                            sta->addr);
5968
5969                 ret = ath10k_station_assoc(ar, vif, sta, false);
5970                 if (ret)
5971                         ath10k_warn(ar, "failed to associate station %pM for vdev %i: %i\n",
5972                                     sta->addr, arvif->vdev_id, ret);
5973         } else if (old_state == IEEE80211_STA_ASSOC &&
5974                    new_state == IEEE80211_STA_AUTHORIZED &&
5975                    sta->tdls) {
5976                 /*
5977                  * Tdls station authorized.
5978                  */
5979                 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac tdls sta %pM authorized\n",
5980                            sta->addr);
5981
5982                 ret = ath10k_station_assoc(ar, vif, sta, false);
5983                 if (ret) {
5984                         ath10k_warn(ar, "failed to associate tdls station %pM for vdev %i: %i\n",
5985                                     sta->addr, arvif->vdev_id, ret);
5986                         goto exit;
5987                 }
5988
5989                 ret = ath10k_mac_tdls_peer_update(ar, arvif->vdev_id, sta,
5990                                                   WMI_TDLS_PEER_STATE_CONNECTED);
5991                 if (ret)
5992                         ath10k_warn(ar, "failed to update tdls peer %pM for vdev %i: %i\n",
5993                                     sta->addr, arvif->vdev_id, ret);
5994         } else if (old_state == IEEE80211_STA_ASSOC &&
5995                     new_state == IEEE80211_STA_AUTH &&
5996                     (vif->type == NL80211_IFTYPE_AP ||
5997                      vif->type == NL80211_IFTYPE_MESH_POINT ||
5998                      vif->type == NL80211_IFTYPE_ADHOC)) {
5999                 /*
6000                  * Disassociation.
6001                  */
6002                 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac sta %pM disassociated\n",
6003                            sta->addr);
6004
6005                 ret = ath10k_station_disassoc(ar, vif, sta);
6006                 if (ret)
6007                         ath10k_warn(ar, "failed to disassociate station: %pM vdev %i: %i\n",
6008                                     sta->addr, arvif->vdev_id, ret);
6009         }
6010 exit:
6011         mutex_unlock(&ar->conf_mutex);
6012         return ret;
6013 }
6014
6015 static int ath10k_conf_tx_uapsd(struct ath10k *ar, struct ieee80211_vif *vif,
6016                                 u16 ac, bool enable)
6017 {
6018         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
6019         struct wmi_sta_uapsd_auto_trig_arg arg = {};
6020         u32 prio = 0, acc = 0;
6021         u32 value = 0;
6022         int ret = 0;
6023
6024         lockdep_assert_held(&ar->conf_mutex);
6025
6026         if (arvif->vdev_type != WMI_VDEV_TYPE_STA)
6027                 return 0;
6028
6029         switch (ac) {
6030         case IEEE80211_AC_VO:
6031                 value = WMI_STA_PS_UAPSD_AC3_DELIVERY_EN |
6032                         WMI_STA_PS_UAPSD_AC3_TRIGGER_EN;
6033                 prio = 7;
6034                 acc = 3;
6035                 break;
6036         case IEEE80211_AC_VI:
6037                 value = WMI_STA_PS_UAPSD_AC2_DELIVERY_EN |
6038                         WMI_STA_PS_UAPSD_AC2_TRIGGER_EN;
6039                 prio = 5;
6040                 acc = 2;
6041                 break;
6042         case IEEE80211_AC_BE:
6043                 value = WMI_STA_PS_UAPSD_AC1_DELIVERY_EN |
6044                         WMI_STA_PS_UAPSD_AC1_TRIGGER_EN;
6045                 prio = 2;
6046                 acc = 1;
6047                 break;
6048         case IEEE80211_AC_BK:
6049                 value = WMI_STA_PS_UAPSD_AC0_DELIVERY_EN |
6050                         WMI_STA_PS_UAPSD_AC0_TRIGGER_EN;
6051                 prio = 0;
6052                 acc = 0;
6053                 break;
6054         }
6055
6056         if (enable)
6057                 arvif->u.sta.uapsd |= value;
6058         else
6059                 arvif->u.sta.uapsd &= ~value;
6060
6061         ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
6062                                           WMI_STA_PS_PARAM_UAPSD,
6063                                           arvif->u.sta.uapsd);
6064         if (ret) {
6065                 ath10k_warn(ar, "failed to set uapsd params: %d\n", ret);
6066                 goto exit;
6067         }
6068
6069         if (arvif->u.sta.uapsd)
6070                 value = WMI_STA_PS_RX_WAKE_POLICY_POLL_UAPSD;
6071         else
6072                 value = WMI_STA_PS_RX_WAKE_POLICY_WAKE;
6073
6074         ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
6075                                           WMI_STA_PS_PARAM_RX_WAKE_POLICY,
6076                                           value);
6077         if (ret)
6078                 ath10k_warn(ar, "failed to set rx wake param: %d\n", ret);
6079
6080         ret = ath10k_mac_vif_recalc_ps_wake_threshold(arvif);
6081         if (ret) {
6082                 ath10k_warn(ar, "failed to recalc ps wake threshold on vdev %i: %d\n",
6083                             arvif->vdev_id, ret);
6084                 return ret;
6085         }
6086
6087         ret = ath10k_mac_vif_recalc_ps_poll_count(arvif);
6088         if (ret) {
6089                 ath10k_warn(ar, "failed to recalc ps poll count on vdev %i: %d\n",
6090                             arvif->vdev_id, ret);
6091                 return ret;
6092         }
6093
6094         if (test_bit(WMI_SERVICE_STA_UAPSD_BASIC_AUTO_TRIG, ar->wmi.svc_map) ||
6095             test_bit(WMI_SERVICE_STA_UAPSD_VAR_AUTO_TRIG, ar->wmi.svc_map)) {
6096                 /* Only userspace can make an educated decision when to send
6097                  * trigger frame. The following effectively disables u-UAPSD
6098                  * autotrigger in firmware (which is enabled by default
6099                  * provided the autotrigger service is available).
6100                  */
6101
6102                 arg.wmm_ac = acc;
6103                 arg.user_priority = prio;
6104                 arg.service_interval = 0;
6105                 arg.suspend_interval = WMI_STA_UAPSD_MAX_INTERVAL_MSEC;
6106                 arg.delay_interval = WMI_STA_UAPSD_MAX_INTERVAL_MSEC;
6107
6108                 ret = ath10k_wmi_vdev_sta_uapsd(ar, arvif->vdev_id,
6109                                                 arvif->bssid, &arg, 1);
6110                 if (ret) {
6111                         ath10k_warn(ar, "failed to set uapsd auto trigger %d\n",
6112                                     ret);
6113                         return ret;
6114                 }
6115         }
6116
6117 exit:
6118         return ret;
6119 }
6120
6121 static int ath10k_conf_tx(struct ieee80211_hw *hw,
6122                           struct ieee80211_vif *vif, u16 ac,
6123                           const struct ieee80211_tx_queue_params *params)
6124 {
6125         struct ath10k *ar = hw->priv;
6126         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
6127         struct wmi_wmm_params_arg *p = NULL;
6128         int ret;
6129
6130         mutex_lock(&ar->conf_mutex);
6131
6132         switch (ac) {
6133         case IEEE80211_AC_VO:
6134                 p = &arvif->wmm_params.ac_vo;
6135                 break;
6136         case IEEE80211_AC_VI:
6137                 p = &arvif->wmm_params.ac_vi;
6138                 break;
6139         case IEEE80211_AC_BE:
6140                 p = &arvif->wmm_params.ac_be;
6141                 break;
6142         case IEEE80211_AC_BK:
6143                 p = &arvif->wmm_params.ac_bk;
6144                 break;
6145         }
6146
6147         if (WARN_ON(!p)) {
6148                 ret = -EINVAL;
6149                 goto exit;
6150         }
6151
6152         p->cwmin = params->cw_min;
6153         p->cwmax = params->cw_max;
6154         p->aifs = params->aifs;
6155
6156         /*
6157          * The channel time duration programmed in the HW is in absolute
6158          * microseconds, while mac80211 gives the txop in units of
6159          * 32 microseconds.
6160          */
6161         p->txop = params->txop * 32;
6162
6163         if (ar->wmi.ops->gen_vdev_wmm_conf) {
6164                 ret = ath10k_wmi_vdev_wmm_conf(ar, arvif->vdev_id,
6165                                                &arvif->wmm_params);
6166                 if (ret) {
6167                         ath10k_warn(ar, "failed to set vdev wmm params on vdev %i: %d\n",
6168                                     arvif->vdev_id, ret);
6169                         goto exit;
6170                 }
6171         } else {
6172                 /* This won't work well with multi-interface cases but it's
6173                  * better than nothing.
6174                  */
6175                 ret = ath10k_wmi_pdev_set_wmm_params(ar, &arvif->wmm_params);
6176                 if (ret) {
6177                         ath10k_warn(ar, "failed to set wmm params: %d\n", ret);
6178                         goto exit;
6179                 }
6180         }
6181
6182         ret = ath10k_conf_tx_uapsd(ar, vif, ac, params->uapsd);
6183         if (ret)
6184                 ath10k_warn(ar, "failed to set sta uapsd: %d\n", ret);
6185
6186 exit:
6187         mutex_unlock(&ar->conf_mutex);
6188         return ret;
6189 }
6190
6191 #define ATH10K_ROC_TIMEOUT_HZ (2 * HZ)
6192
6193 static int ath10k_remain_on_channel(struct ieee80211_hw *hw,
6194                                     struct ieee80211_vif *vif,
6195                                     struct ieee80211_channel *chan,
6196                                     int duration,
6197                                     enum ieee80211_roc_type type)
6198 {
6199         struct ath10k *ar = hw->priv;
6200         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
6201         struct wmi_start_scan_arg arg;
6202         int ret = 0;
6203         u32 scan_time_msec;
6204
6205         mutex_lock(&ar->conf_mutex);
6206
6207         spin_lock_bh(&ar->data_lock);
6208         switch (ar->scan.state) {
6209         case ATH10K_SCAN_IDLE:
6210                 reinit_completion(&ar->scan.started);
6211                 reinit_completion(&ar->scan.completed);
6212                 reinit_completion(&ar->scan.on_channel);
6213                 ar->scan.state = ATH10K_SCAN_STARTING;
6214                 ar->scan.is_roc = true;
6215                 ar->scan.vdev_id = arvif->vdev_id;
6216                 ar->scan.roc_freq = chan->center_freq;
6217                 ar->scan.roc_notify = true;
6218                 ret = 0;
6219                 break;
6220         case ATH10K_SCAN_STARTING:
6221         case ATH10K_SCAN_RUNNING:
6222         case ATH10K_SCAN_ABORTING:
6223                 ret = -EBUSY;
6224                 break;
6225         }
6226         spin_unlock_bh(&ar->data_lock);
6227
6228         if (ret)
6229                 goto exit;
6230
6231         scan_time_msec = ar->hw->wiphy->max_remain_on_channel_duration * 2;
6232
6233         memset(&arg, 0, sizeof(arg));
6234         ath10k_wmi_start_scan_init(ar, &arg);
6235         arg.vdev_id = arvif->vdev_id;
6236         arg.scan_id = ATH10K_SCAN_ID;
6237         arg.n_channels = 1;
6238         arg.channels[0] = chan->center_freq;
6239         arg.dwell_time_active = scan_time_msec;
6240         arg.dwell_time_passive = scan_time_msec;
6241         arg.max_scan_time = scan_time_msec;
6242         arg.scan_ctrl_flags |= WMI_SCAN_FLAG_PASSIVE;
6243         arg.scan_ctrl_flags |= WMI_SCAN_FILTER_PROBE_REQ;
6244         arg.burst_duration_ms = duration;
6245
6246         ret = ath10k_start_scan(ar, &arg);
6247         if (ret) {
6248                 ath10k_warn(ar, "failed to start roc scan: %d\n", ret);
6249                 spin_lock_bh(&ar->data_lock);
6250                 ar->scan.state = ATH10K_SCAN_IDLE;
6251                 spin_unlock_bh(&ar->data_lock);
6252                 goto exit;
6253         }
6254
6255         ret = wait_for_completion_timeout(&ar->scan.on_channel, 3 * HZ);
6256         if (ret == 0) {
6257                 ath10k_warn(ar, "failed to switch to channel for roc scan\n");
6258
6259                 ret = ath10k_scan_stop(ar);
6260                 if (ret)
6261                         ath10k_warn(ar, "failed to stop scan: %d\n", ret);
6262
6263                 ret = -ETIMEDOUT;
6264                 goto exit;
6265         }
6266
6267         ieee80211_queue_delayed_work(ar->hw, &ar->scan.timeout,
6268                                      msecs_to_jiffies(duration));
6269
6270         ret = 0;
6271 exit:
6272         mutex_unlock(&ar->conf_mutex);
6273         return ret;
6274 }
6275
6276 static int ath10k_cancel_remain_on_channel(struct ieee80211_hw *hw)
6277 {
6278         struct ath10k *ar = hw->priv;
6279
6280         mutex_lock(&ar->conf_mutex);
6281
6282         spin_lock_bh(&ar->data_lock);
6283         ar->scan.roc_notify = false;
6284         spin_unlock_bh(&ar->data_lock);
6285
6286         ath10k_scan_abort(ar);
6287
6288         mutex_unlock(&ar->conf_mutex);
6289
6290         cancel_delayed_work_sync(&ar->scan.timeout);
6291
6292         return 0;
6293 }
6294
6295 /*
6296  * Both RTS and Fragmentation threshold are interface-specific
6297  * in ath10k, but device-specific in mac80211.
6298  */
6299
6300 static int ath10k_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
6301 {
6302         struct ath10k *ar = hw->priv;
6303         struct ath10k_vif *arvif;
6304         int ret = 0;
6305
6306         mutex_lock(&ar->conf_mutex);
6307         list_for_each_entry(arvif, &ar->arvifs, list) {
6308                 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d rts threshold %d\n",
6309                            arvif->vdev_id, value);
6310
6311                 ret = ath10k_mac_set_rts(arvif, value);
6312                 if (ret) {
6313                         ath10k_warn(ar, "failed to set rts threshold for vdev %d: %d\n",
6314                                     arvif->vdev_id, ret);
6315                         break;
6316                 }
6317         }
6318         mutex_unlock(&ar->conf_mutex);
6319
6320         return ret;
6321 }
6322
6323 static int ath10k_mac_op_set_frag_threshold(struct ieee80211_hw *hw, u32 value)
6324 {
6325         /* Even though there's a WMI enum for fragmentation threshold no known
6326          * firmware actually implements it. Moreover it is not possible to rely
6327          * frame fragmentation to mac80211 because firmware clears the "more
6328          * fragments" bit in frame control making it impossible for remote
6329          * devices to reassemble frames.
6330          *
6331          * Hence implement a dummy callback just to say fragmentation isn't
6332          * supported. This effectively prevents mac80211 from doing frame
6333          * fragmentation in software.
6334          */
6335         return -EOPNOTSUPP;
6336 }
6337
6338 static void ath10k_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
6339                          u32 queues, bool drop)
6340 {
6341         struct ath10k *ar = hw->priv;
6342         bool skip;
6343         long time_left;
6344
6345         /* mac80211 doesn't care if we really xmit queued frames or not
6346          * we'll collect those frames either way if we stop/delete vdevs */
6347         if (drop)
6348                 return;
6349
6350         mutex_lock(&ar->conf_mutex);
6351
6352         if (ar->state == ATH10K_STATE_WEDGED)
6353                 goto skip;
6354
6355         time_left = wait_event_timeout(ar->htt.empty_tx_wq, ({
6356                         bool empty;
6357
6358                         spin_lock_bh(&ar->htt.tx_lock);
6359                         empty = (ar->htt.num_pending_tx == 0);
6360                         spin_unlock_bh(&ar->htt.tx_lock);
6361
6362                         skip = (ar->state == ATH10K_STATE_WEDGED) ||
6363                                test_bit(ATH10K_FLAG_CRASH_FLUSH,
6364                                         &ar->dev_flags);
6365
6366                         (empty || skip);
6367                 }), ATH10K_FLUSH_TIMEOUT_HZ);
6368
6369         if (time_left == 0 || skip)
6370                 ath10k_warn(ar, "failed to flush transmit queue (skip %i ar-state %i): %ld\n",
6371                             skip, ar->state, time_left);
6372
6373 skip:
6374         mutex_unlock(&ar->conf_mutex);
6375 }
6376
6377 /* TODO: Implement this function properly
6378  * For now it is needed to reply to Probe Requests in IBSS mode.
6379  * Propably we need this information from FW.
6380  */
6381 static int ath10k_tx_last_beacon(struct ieee80211_hw *hw)
6382 {
6383         return 1;
6384 }
6385
6386 static void ath10k_reconfig_complete(struct ieee80211_hw *hw,
6387                                      enum ieee80211_reconfig_type reconfig_type)
6388 {
6389         struct ath10k *ar = hw->priv;
6390
6391         if (reconfig_type != IEEE80211_RECONFIG_TYPE_RESTART)
6392                 return;
6393
6394         mutex_lock(&ar->conf_mutex);
6395
6396         /* If device failed to restart it will be in a different state, e.g.
6397          * ATH10K_STATE_WEDGED */
6398         if (ar->state == ATH10K_STATE_RESTARTED) {
6399                 ath10k_info(ar, "device successfully recovered\n");
6400                 ar->state = ATH10K_STATE_ON;
6401                 ieee80211_wake_queues(ar->hw);
6402         }
6403
6404         mutex_unlock(&ar->conf_mutex);
6405 }
6406
6407 static void
6408 ath10k_mac_update_bss_chan_survey(struct ath10k *ar,
6409                                   struct ieee80211_channel *channel)
6410 {
6411         int ret;
6412         enum wmi_bss_survey_req_type type = WMI_BSS_SURVEY_REQ_TYPE_READ_CLEAR;
6413
6414         lockdep_assert_held(&ar->conf_mutex);
6415
6416         if (!test_bit(WMI_SERVICE_BSS_CHANNEL_INFO_64, ar->wmi.svc_map) ||
6417             (ar->rx_channel != channel))
6418                 return;
6419
6420         if (ar->scan.state != ATH10K_SCAN_IDLE) {
6421                 ath10k_dbg(ar, ATH10K_DBG_MAC, "ignoring bss chan info request while scanning..\n");
6422                 return;
6423         }
6424
6425         reinit_completion(&ar->bss_survey_done);
6426
6427         ret = ath10k_wmi_pdev_bss_chan_info_request(ar, type);
6428         if (ret) {
6429                 ath10k_warn(ar, "failed to send pdev bss chan info request\n");
6430                 return;
6431         }
6432
6433         ret = wait_for_completion_timeout(&ar->bss_survey_done, 3 * HZ);
6434         if (!ret) {
6435                 ath10k_warn(ar, "bss channel survey timed out\n");
6436                 return;
6437         }
6438 }
6439
6440 static int ath10k_get_survey(struct ieee80211_hw *hw, int idx,
6441                              struct survey_info *survey)
6442 {
6443         struct ath10k *ar = hw->priv;
6444         struct ieee80211_supported_band *sband;
6445         struct survey_info *ar_survey = &ar->survey[idx];
6446         int ret = 0;
6447
6448         mutex_lock(&ar->conf_mutex);
6449
6450         sband = hw->wiphy->bands[NL80211_BAND_2GHZ];
6451         if (sband && idx >= sband->n_channels) {
6452                 idx -= sband->n_channels;
6453                 sband = NULL;
6454         }
6455
6456         if (!sband)
6457                 sband = hw->wiphy->bands[NL80211_BAND_5GHZ];
6458
6459         if (!sband || idx >= sband->n_channels) {
6460                 ret = -ENOENT;
6461                 goto exit;
6462         }
6463
6464         ath10k_mac_update_bss_chan_survey(ar, survey->channel);
6465
6466         spin_lock_bh(&ar->data_lock);
6467         memcpy(survey, ar_survey, sizeof(*survey));
6468         spin_unlock_bh(&ar->data_lock);
6469
6470         survey->channel = &sband->channels[idx];
6471
6472         if (ar->rx_channel == survey->channel)
6473                 survey->filled |= SURVEY_INFO_IN_USE;
6474
6475 exit:
6476         mutex_unlock(&ar->conf_mutex);
6477         return ret;
6478 }
6479
6480 static bool
6481 ath10k_mac_bitrate_mask_has_single_rate(struct ath10k *ar,
6482                                         enum nl80211_band band,
6483                                         const struct cfg80211_bitrate_mask *mask)
6484 {
6485         int num_rates = 0;
6486         int i;
6487
6488         num_rates += hweight32(mask->control[band].legacy);
6489
6490         for (i = 0; i < ARRAY_SIZE(mask->control[band].ht_mcs); i++)
6491                 num_rates += hweight8(mask->control[band].ht_mcs[i]);
6492
6493         for (i = 0; i < ARRAY_SIZE(mask->control[band].vht_mcs); i++)
6494                 num_rates += hweight16(mask->control[band].vht_mcs[i]);
6495
6496         return num_rates == 1;
6497 }
6498
6499 static bool
6500 ath10k_mac_bitrate_mask_get_single_nss(struct ath10k *ar,
6501                                        enum nl80211_band band,
6502                                        const struct cfg80211_bitrate_mask *mask,
6503                                        int *nss)
6504 {
6505         struct ieee80211_supported_band *sband = &ar->mac.sbands[band];
6506         u16 vht_mcs_map = le16_to_cpu(sband->vht_cap.vht_mcs.tx_mcs_map);
6507         u8 ht_nss_mask = 0;
6508         u8 vht_nss_mask = 0;
6509         int i;
6510
6511         if (mask->control[band].legacy)
6512                 return false;
6513
6514         for (i = 0; i < ARRAY_SIZE(mask->control[band].ht_mcs); i++) {
6515                 if (mask->control[band].ht_mcs[i] == 0)
6516                         continue;
6517                 else if (mask->control[band].ht_mcs[i] ==
6518                          sband->ht_cap.mcs.rx_mask[i])
6519                         ht_nss_mask |= BIT(i);
6520                 else
6521                         return false;
6522         }
6523
6524         for (i = 0; i < ARRAY_SIZE(mask->control[band].vht_mcs); i++) {
6525                 if (mask->control[band].vht_mcs[i] == 0)
6526                         continue;
6527                 else if (mask->control[band].vht_mcs[i] ==
6528                          ath10k_mac_get_max_vht_mcs_map(vht_mcs_map, i))
6529                         vht_nss_mask |= BIT(i);
6530                 else
6531                         return false;
6532         }
6533
6534         if (ht_nss_mask != vht_nss_mask)
6535                 return false;
6536
6537         if (ht_nss_mask == 0)
6538                 return false;
6539
6540         if (BIT(fls(ht_nss_mask)) - 1 != ht_nss_mask)
6541                 return false;
6542
6543         *nss = fls(ht_nss_mask);
6544
6545         return true;
6546 }
6547
6548 static int
6549 ath10k_mac_bitrate_mask_get_single_rate(struct ath10k *ar,
6550                                         enum nl80211_band band,
6551                                         const struct cfg80211_bitrate_mask *mask,
6552                                         u8 *rate, u8 *nss)
6553 {
6554         struct ieee80211_supported_band *sband = &ar->mac.sbands[band];
6555         int rate_idx;
6556         int i;
6557         u16 bitrate;
6558         u8 preamble;
6559         u8 hw_rate;
6560
6561         if (hweight32(mask->control[band].legacy) == 1) {
6562                 rate_idx = ffs(mask->control[band].legacy) - 1;
6563
6564                 hw_rate = sband->bitrates[rate_idx].hw_value;
6565                 bitrate = sband->bitrates[rate_idx].bitrate;
6566
6567                 if (ath10k_mac_bitrate_is_cck(bitrate))
6568                         preamble = WMI_RATE_PREAMBLE_CCK;
6569                 else
6570                         preamble = WMI_RATE_PREAMBLE_OFDM;
6571
6572                 *nss = 1;
6573                 *rate = preamble << 6 |
6574                         (*nss - 1) << 4 |
6575                         hw_rate << 0;
6576
6577                 return 0;
6578         }
6579
6580         for (i = 0; i < ARRAY_SIZE(mask->control[band].ht_mcs); i++) {
6581                 if (hweight8(mask->control[band].ht_mcs[i]) == 1) {
6582                         *nss = i + 1;
6583                         *rate = WMI_RATE_PREAMBLE_HT << 6 |
6584                                 (*nss - 1) << 4 |
6585                                 (ffs(mask->control[band].ht_mcs[i]) - 1);
6586
6587                         return 0;
6588                 }
6589         }
6590
6591         for (i = 0; i < ARRAY_SIZE(mask->control[band].vht_mcs); i++) {
6592                 if (hweight16(mask->control[band].vht_mcs[i]) == 1) {
6593                         *nss = i + 1;
6594                         *rate = WMI_RATE_PREAMBLE_VHT << 6 |
6595                                 (*nss - 1) << 4 |
6596                                 (ffs(mask->control[band].vht_mcs[i]) - 1);
6597
6598                         return 0;
6599                 }
6600         }
6601
6602         return -EINVAL;
6603 }
6604
6605 static int ath10k_mac_set_fixed_rate_params(struct ath10k_vif *arvif,
6606                                             u8 rate, u8 nss, u8 sgi, u8 ldpc)
6607 {
6608         struct ath10k *ar = arvif->ar;
6609         u32 vdev_param;
6610         int ret;
6611
6612         lockdep_assert_held(&ar->conf_mutex);
6613
6614         ath10k_dbg(ar, ATH10K_DBG_MAC, "mac set fixed rate params vdev %i rate 0x%02hhx nss %hhu sgi %hhu\n",
6615                    arvif->vdev_id, rate, nss, sgi);
6616
6617         vdev_param = ar->wmi.vdev_param->fixed_rate;
6618         ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, rate);
6619         if (ret) {
6620                 ath10k_warn(ar, "failed to set fixed rate param 0x%02x: %d\n",
6621                             rate, ret);
6622                 return ret;
6623         }
6624
6625         vdev_param = ar->wmi.vdev_param->nss;
6626         ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, nss);
6627         if (ret) {
6628                 ath10k_warn(ar, "failed to set nss param %d: %d\n", nss, ret);
6629                 return ret;
6630         }
6631
6632         vdev_param = ar->wmi.vdev_param->sgi;
6633         ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, sgi);
6634         if (ret) {
6635                 ath10k_warn(ar, "failed to set sgi param %d: %d\n", sgi, ret);
6636                 return ret;
6637         }
6638
6639         vdev_param = ar->wmi.vdev_param->ldpc;
6640         ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, ldpc);
6641         if (ret) {
6642                 ath10k_warn(ar, "failed to set ldpc param %d: %d\n", ldpc, ret);
6643                 return ret;
6644         }
6645
6646         return 0;
6647 }
6648
6649 static bool
6650 ath10k_mac_can_set_bitrate_mask(struct ath10k *ar,
6651                                 enum nl80211_band band,
6652                                 const struct cfg80211_bitrate_mask *mask)
6653 {
6654         int i;
6655         u16 vht_mcs;
6656
6657         /* Due to firmware limitation in WMI_PEER_ASSOC_CMDID it is impossible
6658          * to express all VHT MCS rate masks. Effectively only the following
6659          * ranges can be used: none, 0-7, 0-8 and 0-9.
6660          */
6661         for (i = 0; i < NL80211_VHT_NSS_MAX; i++) {
6662                 vht_mcs = mask->control[band].vht_mcs[i];
6663
6664                 switch (vht_mcs) {
6665                 case 0:
6666                 case BIT(8) - 1:
6667                 case BIT(9) - 1:
6668                 case BIT(10) - 1:
6669                         break;
6670                 default:
6671                         ath10k_warn(ar, "refusing bitrate mask with missing 0-7 VHT MCS rates\n");
6672                         return false;
6673                 }
6674         }
6675
6676         return true;
6677 }
6678
6679 static void ath10k_mac_set_bitrate_mask_iter(void *data,
6680                                              struct ieee80211_sta *sta)
6681 {
6682         struct ath10k_vif *arvif = data;
6683         struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
6684         struct ath10k *ar = arvif->ar;
6685
6686         if (arsta->arvif != arvif)
6687                 return;
6688
6689         spin_lock_bh(&ar->data_lock);
6690         arsta->changed |= IEEE80211_RC_SUPP_RATES_CHANGED;
6691         spin_unlock_bh(&ar->data_lock);
6692
6693         ieee80211_queue_work(ar->hw, &arsta->update_wk);
6694 }
6695
6696 static int ath10k_mac_op_set_bitrate_mask(struct ieee80211_hw *hw,
6697                                           struct ieee80211_vif *vif,
6698                                           const struct cfg80211_bitrate_mask *mask)
6699 {
6700         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
6701         struct cfg80211_chan_def def;
6702         struct ath10k *ar = arvif->ar;
6703         enum nl80211_band band;
6704         const u8 *ht_mcs_mask;
6705         const u16 *vht_mcs_mask;
6706         u8 rate;
6707         u8 nss;
6708         u8 sgi;
6709         u8 ldpc;
6710         int single_nss;
6711         int ret;
6712
6713         if (ath10k_mac_vif_chan(vif, &def))
6714                 return -EPERM;
6715
6716         band = def.chan->band;
6717         ht_mcs_mask = mask->control[band].ht_mcs;
6718         vht_mcs_mask = mask->control[band].vht_mcs;
6719         ldpc = !!(ar->ht_cap_info & WMI_HT_CAP_LDPC);
6720
6721         sgi = mask->control[band].gi;
6722         if (sgi == NL80211_TXRATE_FORCE_LGI)
6723                 return -EINVAL;
6724
6725         if (ath10k_mac_bitrate_mask_has_single_rate(ar, band, mask)) {
6726                 ret = ath10k_mac_bitrate_mask_get_single_rate(ar, band, mask,
6727                                                               &rate, &nss);
6728                 if (ret) {
6729                         ath10k_warn(ar, "failed to get single rate for vdev %i: %d\n",
6730                                     arvif->vdev_id, ret);
6731                         return ret;
6732                 }
6733         } else if (ath10k_mac_bitrate_mask_get_single_nss(ar, band, mask,
6734                                                           &single_nss)) {
6735                 rate = WMI_FIXED_RATE_NONE;
6736                 nss = single_nss;
6737         } else {
6738                 rate = WMI_FIXED_RATE_NONE;
6739                 nss = min(ar->num_rf_chains,
6740                           max(ath10k_mac_max_ht_nss(ht_mcs_mask),
6741                               ath10k_mac_max_vht_nss(vht_mcs_mask)));
6742
6743                 if (!ath10k_mac_can_set_bitrate_mask(ar, band, mask))
6744                         return -EINVAL;
6745
6746                 mutex_lock(&ar->conf_mutex);
6747
6748                 arvif->bitrate_mask = *mask;
6749                 ieee80211_iterate_stations_atomic(ar->hw,
6750                                                   ath10k_mac_set_bitrate_mask_iter,
6751                                                   arvif);
6752
6753                 mutex_unlock(&ar->conf_mutex);
6754         }
6755
6756         mutex_lock(&ar->conf_mutex);
6757
6758         ret = ath10k_mac_set_fixed_rate_params(arvif, rate, nss, sgi, ldpc);
6759         if (ret) {
6760                 ath10k_warn(ar, "failed to set fixed rate params on vdev %i: %d\n",
6761                             arvif->vdev_id, ret);
6762                 goto exit;
6763         }
6764
6765 exit:
6766         mutex_unlock(&ar->conf_mutex);
6767
6768         return ret;
6769 }
6770
6771 static void ath10k_sta_rc_update(struct ieee80211_hw *hw,
6772                                  struct ieee80211_vif *vif,
6773                                  struct ieee80211_sta *sta,
6774                                  u32 changed)
6775 {
6776         struct ath10k *ar = hw->priv;
6777         struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
6778         u32 bw, smps;
6779
6780         spin_lock_bh(&ar->data_lock);
6781
6782         ath10k_dbg(ar, ATH10K_DBG_MAC,
6783                    "mac sta rc update for %pM changed %08x bw %d nss %d smps %d\n",
6784                    sta->addr, changed, sta->bandwidth, sta->rx_nss,
6785                    sta->smps_mode);
6786
6787         if (changed & IEEE80211_RC_BW_CHANGED) {
6788                 bw = WMI_PEER_CHWIDTH_20MHZ;
6789
6790                 switch (sta->bandwidth) {
6791                 case IEEE80211_STA_RX_BW_20:
6792                         bw = WMI_PEER_CHWIDTH_20MHZ;
6793                         break;
6794                 case IEEE80211_STA_RX_BW_40:
6795                         bw = WMI_PEER_CHWIDTH_40MHZ;
6796                         break;
6797                 case IEEE80211_STA_RX_BW_80:
6798                         bw = WMI_PEER_CHWIDTH_80MHZ;
6799                         break;
6800                 case IEEE80211_STA_RX_BW_160:
6801                         ath10k_warn(ar, "Invalid bandwidth %d in rc update for %pM\n",
6802                                     sta->bandwidth, sta->addr);
6803                         bw = WMI_PEER_CHWIDTH_20MHZ;
6804                         break;
6805                 }
6806
6807                 arsta->bw = bw;
6808         }
6809
6810         if (changed & IEEE80211_RC_NSS_CHANGED)
6811                 arsta->nss = sta->rx_nss;
6812
6813         if (changed & IEEE80211_RC_SMPS_CHANGED) {
6814                 smps = WMI_PEER_SMPS_PS_NONE;
6815
6816                 switch (sta->smps_mode) {
6817                 case IEEE80211_SMPS_AUTOMATIC:
6818                 case IEEE80211_SMPS_OFF:
6819                         smps = WMI_PEER_SMPS_PS_NONE;
6820                         break;
6821                 case IEEE80211_SMPS_STATIC:
6822                         smps = WMI_PEER_SMPS_STATIC;
6823                         break;
6824                 case IEEE80211_SMPS_DYNAMIC:
6825                         smps = WMI_PEER_SMPS_DYNAMIC;
6826                         break;
6827                 case IEEE80211_SMPS_NUM_MODES:
6828                         ath10k_warn(ar, "Invalid smps %d in sta rc update for %pM\n",
6829                                     sta->smps_mode, sta->addr);
6830                         smps = WMI_PEER_SMPS_PS_NONE;
6831                         break;
6832                 }
6833
6834                 arsta->smps = smps;
6835         }
6836
6837         arsta->changed |= changed;
6838
6839         spin_unlock_bh(&ar->data_lock);
6840
6841         ieee80211_queue_work(hw, &arsta->update_wk);
6842 }
6843
6844 static u64 ath10k_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
6845 {
6846         /*
6847          * FIXME: Return 0 for time being. Need to figure out whether FW
6848          * has the API to fetch 64-bit local TSF
6849          */
6850
6851         return 0;
6852 }
6853
6854 static void ath10k_set_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
6855                            u64 tsf)
6856 {
6857         struct ath10k *ar = hw->priv;
6858         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
6859         u32 tsf_offset, vdev_param = ar->wmi.vdev_param->set_tsf;
6860         int ret;
6861
6862         /* Workaround:
6863          *
6864          * Given tsf argument is entire TSF value, but firmware accepts
6865          * only TSF offset to current TSF.
6866          *
6867          * get_tsf function is used to get offset value, however since
6868          * ath10k_get_tsf is not implemented properly, it will return 0 always.
6869          * Luckily all the caller functions to set_tsf, as of now, also rely on
6870          * get_tsf function to get entire tsf value such get_tsf() + tsf_delta,
6871          * final tsf offset value to firmware will be arithmetically correct.
6872          */
6873         tsf_offset = tsf - ath10k_get_tsf(hw, vif);
6874         ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id,
6875                                         vdev_param, tsf_offset);
6876         if (ret && ret != -EOPNOTSUPP)
6877                 ath10k_warn(ar, "failed to set tsf offset: %d\n", ret);
6878 }
6879
6880 static int ath10k_ampdu_action(struct ieee80211_hw *hw,
6881                                struct ieee80211_vif *vif,
6882                                struct ieee80211_ampdu_params *params)
6883 {
6884         struct ath10k *ar = hw->priv;
6885         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
6886         struct ieee80211_sta *sta = params->sta;
6887         enum ieee80211_ampdu_mlme_action action = params->action;
6888         u16 tid = params->tid;
6889
6890         ath10k_dbg(ar, ATH10K_DBG_MAC, "mac ampdu vdev_id %i sta %pM tid %hu action %d\n",
6891                    arvif->vdev_id, sta->addr, tid, action);
6892
6893         switch (action) {
6894         case IEEE80211_AMPDU_RX_START:
6895         case IEEE80211_AMPDU_RX_STOP:
6896                 /* HTT AddBa/DelBa events trigger mac80211 Rx BA session
6897                  * creation/removal. Do we need to verify this?
6898                  */
6899                 return 0;
6900         case IEEE80211_AMPDU_TX_START:
6901         case IEEE80211_AMPDU_TX_STOP_CONT:
6902         case IEEE80211_AMPDU_TX_STOP_FLUSH:
6903         case IEEE80211_AMPDU_TX_STOP_FLUSH_CONT:
6904         case IEEE80211_AMPDU_TX_OPERATIONAL:
6905                 /* Firmware offloads Tx aggregation entirely so deny mac80211
6906                  * Tx aggregation requests.
6907                  */
6908                 return -EOPNOTSUPP;
6909         }
6910
6911         return -EINVAL;
6912 }
6913
6914 static void
6915 ath10k_mac_update_rx_channel(struct ath10k *ar,
6916                              struct ieee80211_chanctx_conf *ctx,
6917                              struct ieee80211_vif_chanctx_switch *vifs,
6918                              int n_vifs)
6919 {
6920         struct cfg80211_chan_def *def = NULL;
6921
6922         /* Both locks are required because ar->rx_channel is modified. This
6923          * allows readers to hold either lock.
6924          */
6925         lockdep_assert_held(&ar->conf_mutex);
6926         lockdep_assert_held(&ar->data_lock);
6927
6928         WARN_ON(ctx && vifs);
6929         WARN_ON(vifs && n_vifs != 1);
6930
6931         /* FIXME: Sort of an optimization and a workaround. Peers and vifs are
6932          * on a linked list now. Doing a lookup peer -> vif -> chanctx for each
6933          * ppdu on Rx may reduce performance on low-end systems. It should be
6934          * possible to make tables/hashmaps to speed the lookup up (be vary of
6935          * cpu data cache lines though regarding sizes) but to keep the initial
6936          * implementation simple and less intrusive fallback to the slow lookup
6937          * only for multi-channel cases. Single-channel cases will remain to
6938          * use the old channel derival and thus performance should not be
6939          * affected much.
6940          */
6941         rcu_read_lock();
6942         if (!ctx && ath10k_mac_num_chanctxs(ar) == 1) {
6943                 ieee80211_iter_chan_contexts_atomic(ar->hw,
6944                                                     ath10k_mac_get_any_chandef_iter,
6945                                                     &def);
6946
6947                 if (vifs)
6948                         def = &vifs[0].new_ctx->def;
6949
6950                 ar->rx_channel = def->chan;
6951         } else if ((ctx && ath10k_mac_num_chanctxs(ar) == 0) ||
6952                    (ctx && (ar->state == ATH10K_STATE_RESTARTED))) {
6953                 /* During driver restart due to firmware assert, since mac80211
6954                  * already has valid channel context for given radio, channel
6955                  * context iteration return num_chanctx > 0. So fix rx_channel
6956                  * when restart is in progress.
6957                  */
6958                 ar->rx_channel = ctx->def.chan;
6959         } else {
6960                 ar->rx_channel = NULL;
6961         }
6962         rcu_read_unlock();
6963 }
6964
6965 static void
6966 ath10k_mac_update_vif_chan(struct ath10k *ar,
6967                            struct ieee80211_vif_chanctx_switch *vifs,
6968                            int n_vifs)
6969 {
6970         struct ath10k_vif *arvif;
6971         int ret;
6972         int i;
6973
6974         lockdep_assert_held(&ar->conf_mutex);
6975
6976         /* First stop monitor interface. Some FW versions crash if there's a
6977          * lone monitor interface.
6978          */
6979         if (ar->monitor_started)
6980                 ath10k_monitor_stop(ar);
6981
6982         for (i = 0; i < n_vifs; i++) {
6983                 arvif = ath10k_vif_to_arvif(vifs[i].vif);
6984
6985                 ath10k_dbg(ar, ATH10K_DBG_MAC,
6986                            "mac chanctx switch vdev_id %i freq %hu->%hu width %d->%d\n",
6987                            arvif->vdev_id,
6988                            vifs[i].old_ctx->def.chan->center_freq,
6989                            vifs[i].new_ctx->def.chan->center_freq,
6990                            vifs[i].old_ctx->def.width,
6991                            vifs[i].new_ctx->def.width);
6992
6993                 if (WARN_ON(!arvif->is_started))
6994                         continue;
6995
6996                 if (WARN_ON(!arvif->is_up))
6997                         continue;
6998
6999                 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id);
7000                 if (ret) {
7001                         ath10k_warn(ar, "failed to down vdev %d: %d\n",
7002                                     arvif->vdev_id, ret);
7003                         continue;
7004                 }
7005         }
7006
7007         /* All relevant vdevs are downed and associated channel resources
7008          * should be available for the channel switch now.
7009          */
7010
7011         spin_lock_bh(&ar->data_lock);
7012         ath10k_mac_update_rx_channel(ar, NULL, vifs, n_vifs);
7013         spin_unlock_bh(&ar->data_lock);
7014
7015         for (i = 0; i < n_vifs; i++) {
7016                 arvif = ath10k_vif_to_arvif(vifs[i].vif);
7017
7018                 if (WARN_ON(!arvif->is_started))
7019                         continue;
7020
7021                 if (WARN_ON(!arvif->is_up))
7022                         continue;
7023
7024                 ret = ath10k_mac_setup_bcn_tmpl(arvif);
7025                 if (ret)
7026                         ath10k_warn(ar, "failed to update bcn tmpl during csa: %d\n",
7027                                     ret);
7028
7029                 ret = ath10k_mac_setup_prb_tmpl(arvif);
7030                 if (ret)
7031                         ath10k_warn(ar, "failed to update prb tmpl during csa: %d\n",
7032                                     ret);
7033
7034                 ret = ath10k_vdev_restart(arvif, &vifs[i].new_ctx->def);
7035                 if (ret) {
7036                         ath10k_warn(ar, "failed to restart vdev %d: %d\n",
7037                                     arvif->vdev_id, ret);
7038                         continue;
7039                 }
7040
7041                 ret = ath10k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid,
7042                                          arvif->bssid);
7043                 if (ret) {
7044                         ath10k_warn(ar, "failed to bring vdev up %d: %d\n",
7045                                     arvif->vdev_id, ret);
7046                         continue;
7047                 }
7048         }
7049
7050         ath10k_monitor_recalc(ar);
7051 }
7052
7053 static int
7054 ath10k_mac_op_add_chanctx(struct ieee80211_hw *hw,
7055                           struct ieee80211_chanctx_conf *ctx)
7056 {
7057         struct ath10k *ar = hw->priv;
7058
7059         ath10k_dbg(ar, ATH10K_DBG_MAC,
7060                    "mac chanctx add freq %hu width %d ptr %p\n",
7061                    ctx->def.chan->center_freq, ctx->def.width, ctx);
7062
7063         mutex_lock(&ar->conf_mutex);
7064
7065         spin_lock_bh(&ar->data_lock);
7066         ath10k_mac_update_rx_channel(ar, ctx, NULL, 0);
7067         spin_unlock_bh(&ar->data_lock);
7068
7069         ath10k_recalc_radar_detection(ar);
7070         ath10k_monitor_recalc(ar);
7071
7072         mutex_unlock(&ar->conf_mutex);
7073
7074         return 0;
7075 }
7076
7077 static void
7078 ath10k_mac_op_remove_chanctx(struct ieee80211_hw *hw,
7079                              struct ieee80211_chanctx_conf *ctx)
7080 {
7081         struct ath10k *ar = hw->priv;
7082
7083         ath10k_dbg(ar, ATH10K_DBG_MAC,
7084                    "mac chanctx remove freq %hu width %d ptr %p\n",
7085                    ctx->def.chan->center_freq, ctx->def.width, ctx);
7086
7087         mutex_lock(&ar->conf_mutex);
7088
7089         spin_lock_bh(&ar->data_lock);
7090         ath10k_mac_update_rx_channel(ar, NULL, NULL, 0);
7091         spin_unlock_bh(&ar->data_lock);
7092
7093         ath10k_recalc_radar_detection(ar);
7094         ath10k_monitor_recalc(ar);
7095
7096         mutex_unlock(&ar->conf_mutex);
7097 }
7098
7099 struct ath10k_mac_change_chanctx_arg {
7100         struct ieee80211_chanctx_conf *ctx;
7101         struct ieee80211_vif_chanctx_switch *vifs;
7102         int n_vifs;
7103         int next_vif;
7104 };
7105
7106 static void
7107 ath10k_mac_change_chanctx_cnt_iter(void *data, u8 *mac,
7108                                    struct ieee80211_vif *vif)
7109 {
7110         struct ath10k_mac_change_chanctx_arg *arg = data;
7111
7112         if (rcu_access_pointer(vif->chanctx_conf) != arg->ctx)
7113                 return;
7114
7115         arg->n_vifs++;
7116 }
7117
7118 static void
7119 ath10k_mac_change_chanctx_fill_iter(void *data, u8 *mac,
7120                                     struct ieee80211_vif *vif)
7121 {
7122         struct ath10k_mac_change_chanctx_arg *arg = data;
7123         struct ieee80211_chanctx_conf *ctx;
7124
7125         ctx = rcu_access_pointer(vif->chanctx_conf);
7126         if (ctx != arg->ctx)
7127                 return;
7128
7129         if (WARN_ON(arg->next_vif == arg->n_vifs))
7130                 return;
7131
7132         arg->vifs[arg->next_vif].vif = vif;
7133         arg->vifs[arg->next_vif].old_ctx = ctx;
7134         arg->vifs[arg->next_vif].new_ctx = ctx;
7135         arg->next_vif++;
7136 }
7137
7138 static void
7139 ath10k_mac_op_change_chanctx(struct ieee80211_hw *hw,
7140                              struct ieee80211_chanctx_conf *ctx,
7141                              u32 changed)
7142 {
7143         struct ath10k *ar = hw->priv;
7144         struct ath10k_mac_change_chanctx_arg arg = { .ctx = ctx };
7145
7146         mutex_lock(&ar->conf_mutex);
7147
7148         ath10k_dbg(ar, ATH10K_DBG_MAC,
7149                    "mac chanctx change freq %hu width %d ptr %p changed %x\n",
7150                    ctx->def.chan->center_freq, ctx->def.width, ctx, changed);
7151
7152         /* This shouldn't really happen because channel switching should use
7153          * switch_vif_chanctx().
7154          */
7155         if (WARN_ON(changed & IEEE80211_CHANCTX_CHANGE_CHANNEL))
7156                 goto unlock;
7157
7158         if (changed & IEEE80211_CHANCTX_CHANGE_WIDTH) {
7159                 ieee80211_iterate_active_interfaces_atomic(
7160                                         hw,
7161                                         IEEE80211_IFACE_ITER_NORMAL,
7162                                         ath10k_mac_change_chanctx_cnt_iter,
7163                                         &arg);
7164                 if (arg.n_vifs == 0)
7165                         goto radar;
7166
7167                 arg.vifs = kcalloc(arg.n_vifs, sizeof(arg.vifs[0]),
7168                                    GFP_KERNEL);
7169                 if (!arg.vifs)
7170                         goto radar;
7171
7172                 ieee80211_iterate_active_interfaces_atomic(
7173                                         hw,
7174                                         IEEE80211_IFACE_ITER_NORMAL,
7175                                         ath10k_mac_change_chanctx_fill_iter,
7176                                         &arg);
7177                 ath10k_mac_update_vif_chan(ar, arg.vifs, arg.n_vifs);
7178                 kfree(arg.vifs);
7179         }
7180
7181 radar:
7182         ath10k_recalc_radar_detection(ar);
7183
7184         /* FIXME: How to configure Rx chains properly? */
7185
7186         /* No other actions are actually necessary. Firmware maintains channel
7187          * definitions per vdev internally and there's no host-side channel
7188          * context abstraction to configure, e.g. channel width.
7189          */
7190
7191 unlock:
7192         mutex_unlock(&ar->conf_mutex);
7193 }
7194
7195 static int
7196 ath10k_mac_op_assign_vif_chanctx(struct ieee80211_hw *hw,
7197                                  struct ieee80211_vif *vif,
7198                                  struct ieee80211_chanctx_conf *ctx)
7199 {
7200         struct ath10k *ar = hw->priv;
7201         struct ath10k_vif *arvif = (void *)vif->drv_priv;
7202         int ret;
7203
7204         mutex_lock(&ar->conf_mutex);
7205
7206         ath10k_dbg(ar, ATH10K_DBG_MAC,
7207                    "mac chanctx assign ptr %p vdev_id %i\n",
7208                    ctx, arvif->vdev_id);
7209
7210         if (WARN_ON(arvif->is_started)) {
7211                 mutex_unlock(&ar->conf_mutex);
7212                 return -EBUSY;
7213         }
7214
7215         ret = ath10k_vdev_start(arvif, &ctx->def);
7216         if (ret) {
7217                 ath10k_warn(ar, "failed to start vdev %i addr %pM on freq %d: %d\n",
7218                             arvif->vdev_id, vif->addr,
7219                             ctx->def.chan->center_freq, ret);
7220                 goto err;
7221         }
7222
7223         arvif->is_started = true;
7224
7225         ret = ath10k_mac_vif_setup_ps(arvif);
7226         if (ret) {
7227                 ath10k_warn(ar, "failed to update vdev %i ps: %d\n",
7228                             arvif->vdev_id, ret);
7229                 goto err_stop;
7230         }
7231
7232         if (vif->type == NL80211_IFTYPE_MONITOR) {
7233                 ret = ath10k_wmi_vdev_up(ar, arvif->vdev_id, 0, vif->addr);
7234                 if (ret) {
7235                         ath10k_warn(ar, "failed to up monitor vdev %i: %d\n",
7236                                     arvif->vdev_id, ret);
7237                         goto err_stop;
7238                 }
7239
7240                 arvif->is_up = true;
7241         }
7242
7243         mutex_unlock(&ar->conf_mutex);
7244         return 0;
7245
7246 err_stop:
7247         ath10k_vdev_stop(arvif);
7248         arvif->is_started = false;
7249         ath10k_mac_vif_setup_ps(arvif);
7250
7251 err:
7252         mutex_unlock(&ar->conf_mutex);
7253         return ret;
7254 }
7255
7256 static void
7257 ath10k_mac_op_unassign_vif_chanctx(struct ieee80211_hw *hw,
7258                                    struct ieee80211_vif *vif,
7259                                    struct ieee80211_chanctx_conf *ctx)
7260 {
7261         struct ath10k *ar = hw->priv;
7262         struct ath10k_vif *arvif = (void *)vif->drv_priv;
7263         int ret;
7264
7265         mutex_lock(&ar->conf_mutex);
7266
7267         ath10k_dbg(ar, ATH10K_DBG_MAC,
7268                    "mac chanctx unassign ptr %p vdev_id %i\n",
7269                    ctx, arvif->vdev_id);
7270
7271         WARN_ON(!arvif->is_started);
7272
7273         if (vif->type == NL80211_IFTYPE_MONITOR) {
7274                 WARN_ON(!arvif->is_up);
7275
7276                 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id);
7277                 if (ret)
7278                         ath10k_warn(ar, "failed to down monitor vdev %i: %d\n",
7279                                     arvif->vdev_id, ret);
7280
7281                 arvif->is_up = false;
7282         }
7283
7284         ret = ath10k_vdev_stop(arvif);
7285         if (ret)
7286                 ath10k_warn(ar, "failed to stop vdev %i: %d\n",
7287                             arvif->vdev_id, ret);
7288
7289         arvif->is_started = false;
7290
7291         mutex_unlock(&ar->conf_mutex);
7292 }
7293
7294 static int
7295 ath10k_mac_op_switch_vif_chanctx(struct ieee80211_hw *hw,
7296                                  struct ieee80211_vif_chanctx_switch *vifs,
7297                                  int n_vifs,
7298                                  enum ieee80211_chanctx_switch_mode mode)
7299 {
7300         struct ath10k *ar = hw->priv;
7301
7302         mutex_lock(&ar->conf_mutex);
7303
7304         ath10k_dbg(ar, ATH10K_DBG_MAC,
7305                    "mac chanctx switch n_vifs %d mode %d\n",
7306                    n_vifs, mode);
7307         ath10k_mac_update_vif_chan(ar, vifs, n_vifs);
7308
7309         mutex_unlock(&ar->conf_mutex);
7310         return 0;
7311 }
7312
7313 static const struct ieee80211_ops ath10k_ops = {
7314         .tx                             = ath10k_mac_op_tx,
7315         .wake_tx_queue                  = ath10k_mac_op_wake_tx_queue,
7316         .start                          = ath10k_start,
7317         .stop                           = ath10k_stop,
7318         .config                         = ath10k_config,
7319         .add_interface                  = ath10k_add_interface,
7320         .remove_interface               = ath10k_remove_interface,
7321         .configure_filter               = ath10k_configure_filter,
7322         .bss_info_changed               = ath10k_bss_info_changed,
7323         .hw_scan                        = ath10k_hw_scan,
7324         .cancel_hw_scan                 = ath10k_cancel_hw_scan,
7325         .set_key                        = ath10k_set_key,
7326         .set_default_unicast_key        = ath10k_set_default_unicast_key,
7327         .sta_state                      = ath10k_sta_state,
7328         .conf_tx                        = ath10k_conf_tx,
7329         .remain_on_channel              = ath10k_remain_on_channel,
7330         .cancel_remain_on_channel       = ath10k_cancel_remain_on_channel,
7331         .set_rts_threshold              = ath10k_set_rts_threshold,
7332         .set_frag_threshold             = ath10k_mac_op_set_frag_threshold,
7333         .flush                          = ath10k_flush,
7334         .tx_last_beacon                 = ath10k_tx_last_beacon,
7335         .set_antenna                    = ath10k_set_antenna,
7336         .get_antenna                    = ath10k_get_antenna,
7337         .reconfig_complete              = ath10k_reconfig_complete,
7338         .get_survey                     = ath10k_get_survey,
7339         .set_bitrate_mask               = ath10k_mac_op_set_bitrate_mask,
7340         .sta_rc_update                  = ath10k_sta_rc_update,
7341         .get_tsf                        = ath10k_get_tsf,
7342         .set_tsf                        = ath10k_set_tsf,
7343         .ampdu_action                   = ath10k_ampdu_action,
7344         .get_et_sset_count              = ath10k_debug_get_et_sset_count,
7345         .get_et_stats                   = ath10k_debug_get_et_stats,
7346         .get_et_strings                 = ath10k_debug_get_et_strings,
7347         .add_chanctx                    = ath10k_mac_op_add_chanctx,
7348         .remove_chanctx                 = ath10k_mac_op_remove_chanctx,
7349         .change_chanctx                 = ath10k_mac_op_change_chanctx,
7350         .assign_vif_chanctx             = ath10k_mac_op_assign_vif_chanctx,
7351         .unassign_vif_chanctx           = ath10k_mac_op_unassign_vif_chanctx,
7352         .switch_vif_chanctx             = ath10k_mac_op_switch_vif_chanctx,
7353
7354         CFG80211_TESTMODE_CMD(ath10k_tm_cmd)
7355
7356 #ifdef CONFIG_PM
7357         .suspend                        = ath10k_wow_op_suspend,
7358         .resume                         = ath10k_wow_op_resume,
7359 #endif
7360 #ifdef CONFIG_MAC80211_DEBUGFS
7361         .sta_add_debugfs                = ath10k_sta_add_debugfs,
7362 #endif
7363 };
7364
7365 #define CHAN2G(_channel, _freq, _flags) { \
7366         .band                   = NL80211_BAND_2GHZ, \
7367         .hw_value               = (_channel), \
7368         .center_freq            = (_freq), \
7369         .flags                  = (_flags), \
7370         .max_antenna_gain       = 0, \
7371         .max_power              = 30, \
7372 }
7373
7374 #define CHAN5G(_channel, _freq, _flags) { \
7375         .band                   = NL80211_BAND_5GHZ, \
7376         .hw_value               = (_channel), \
7377         .center_freq            = (_freq), \
7378         .flags                  = (_flags), \
7379         .max_antenna_gain       = 0, \
7380         .max_power              = 30, \
7381 }
7382
7383 static const struct ieee80211_channel ath10k_2ghz_channels[] = {
7384         CHAN2G(1, 2412, 0),
7385         CHAN2G(2, 2417, 0),
7386         CHAN2G(3, 2422, 0),
7387         CHAN2G(4, 2427, 0),
7388         CHAN2G(5, 2432, 0),
7389         CHAN2G(6, 2437, 0),
7390         CHAN2G(7, 2442, 0),
7391         CHAN2G(8, 2447, 0),
7392         CHAN2G(9, 2452, 0),
7393         CHAN2G(10, 2457, 0),
7394         CHAN2G(11, 2462, 0),
7395         CHAN2G(12, 2467, 0),
7396         CHAN2G(13, 2472, 0),
7397         CHAN2G(14, 2484, 0),
7398 };
7399
7400 static const struct ieee80211_channel ath10k_5ghz_channels[] = {
7401         CHAN5G(36, 5180, 0),
7402         CHAN5G(40, 5200, 0),
7403         CHAN5G(44, 5220, 0),
7404         CHAN5G(48, 5240, 0),
7405         CHAN5G(52, 5260, 0),
7406         CHAN5G(56, 5280, 0),
7407         CHAN5G(60, 5300, 0),
7408         CHAN5G(64, 5320, 0),
7409         CHAN5G(100, 5500, 0),
7410         CHAN5G(104, 5520, 0),
7411         CHAN5G(108, 5540, 0),
7412         CHAN5G(112, 5560, 0),
7413         CHAN5G(116, 5580, 0),
7414         CHAN5G(120, 5600, 0),
7415         CHAN5G(124, 5620, 0),
7416         CHAN5G(128, 5640, 0),
7417         CHAN5G(132, 5660, 0),
7418         CHAN5G(136, 5680, 0),
7419         CHAN5G(140, 5700, 0),
7420         CHAN5G(144, 5720, 0),
7421         CHAN5G(149, 5745, 0),
7422         CHAN5G(153, 5765, 0),
7423         CHAN5G(157, 5785, 0),
7424         CHAN5G(161, 5805, 0),
7425         CHAN5G(165, 5825, 0),
7426 };
7427
7428 struct ath10k *ath10k_mac_create(size_t priv_size)
7429 {
7430         struct ieee80211_hw *hw;
7431         struct ath10k *ar;
7432
7433         hw = ieee80211_alloc_hw(sizeof(struct ath10k) + priv_size, &ath10k_ops);
7434         if (!hw)
7435                 return NULL;
7436
7437         ar = hw->priv;
7438         ar->hw = hw;
7439
7440         return ar;
7441 }
7442
7443 void ath10k_mac_destroy(struct ath10k *ar)
7444 {
7445         ieee80211_free_hw(ar->hw);
7446 }
7447
7448 static const struct ieee80211_iface_limit ath10k_if_limits[] = {
7449         {
7450                 .max    = 8,
7451                 .types  = BIT(NL80211_IFTYPE_STATION)
7452                         | BIT(NL80211_IFTYPE_P2P_CLIENT)
7453         },
7454         {
7455                 .max    = 3,
7456                 .types  = BIT(NL80211_IFTYPE_P2P_GO)
7457         },
7458         {
7459                 .max    = 1,
7460                 .types  = BIT(NL80211_IFTYPE_P2P_DEVICE)
7461         },
7462         {
7463                 .max    = 7,
7464                 .types  = BIT(NL80211_IFTYPE_AP)
7465 #ifdef CONFIG_MAC80211_MESH
7466                         | BIT(NL80211_IFTYPE_MESH_POINT)
7467 #endif
7468         },
7469 };
7470
7471 static const struct ieee80211_iface_limit ath10k_10x_if_limits[] = {
7472         {
7473                 .max    = 8,
7474                 .types  = BIT(NL80211_IFTYPE_AP)
7475 #ifdef CONFIG_MAC80211_MESH
7476                         | BIT(NL80211_IFTYPE_MESH_POINT)
7477 #endif
7478         },
7479         {
7480                 .max    = 1,
7481                 .types  = BIT(NL80211_IFTYPE_STATION)
7482         },
7483 };
7484
7485 static const struct ieee80211_iface_combination ath10k_if_comb[] = {
7486         {
7487                 .limits = ath10k_if_limits,
7488                 .n_limits = ARRAY_SIZE(ath10k_if_limits),
7489                 .max_interfaces = 8,
7490                 .num_different_channels = 1,
7491                 .beacon_int_infra_match = true,
7492         },
7493 };
7494
7495 static const struct ieee80211_iface_combination ath10k_10x_if_comb[] = {
7496         {
7497                 .limits = ath10k_10x_if_limits,
7498                 .n_limits = ARRAY_SIZE(ath10k_10x_if_limits),
7499                 .max_interfaces = 8,
7500                 .num_different_channels = 1,
7501                 .beacon_int_infra_match = true,
7502 #ifdef CONFIG_ATH10K_DFS_CERTIFIED
7503                 .radar_detect_widths =  BIT(NL80211_CHAN_WIDTH_20_NOHT) |
7504                                         BIT(NL80211_CHAN_WIDTH_20) |
7505                                         BIT(NL80211_CHAN_WIDTH_40) |
7506                                         BIT(NL80211_CHAN_WIDTH_80),
7507 #endif
7508         },
7509 };
7510
7511 static const struct ieee80211_iface_limit ath10k_tlv_if_limit[] = {
7512         {
7513                 .max = 2,
7514                 .types = BIT(NL80211_IFTYPE_STATION),
7515         },
7516         {
7517                 .max = 2,
7518                 .types = BIT(NL80211_IFTYPE_AP) |
7519 #ifdef CONFIG_MAC80211_MESH
7520                          BIT(NL80211_IFTYPE_MESH_POINT) |
7521 #endif
7522                          BIT(NL80211_IFTYPE_P2P_CLIENT) |
7523                          BIT(NL80211_IFTYPE_P2P_GO),
7524         },
7525         {
7526                 .max = 1,
7527                 .types = BIT(NL80211_IFTYPE_P2P_DEVICE),
7528         },
7529 };
7530
7531 static const struct ieee80211_iface_limit ath10k_tlv_qcs_if_limit[] = {
7532         {
7533                 .max = 2,
7534                 .types = BIT(NL80211_IFTYPE_STATION),
7535         },
7536         {
7537                 .max = 2,
7538                 .types = BIT(NL80211_IFTYPE_P2P_CLIENT),
7539         },
7540         {
7541                 .max = 1,
7542                 .types = BIT(NL80211_IFTYPE_AP) |
7543 #ifdef CONFIG_MAC80211_MESH
7544                          BIT(NL80211_IFTYPE_MESH_POINT) |
7545 #endif
7546                          BIT(NL80211_IFTYPE_P2P_GO),
7547         },
7548         {
7549                 .max = 1,
7550                 .types = BIT(NL80211_IFTYPE_P2P_DEVICE),
7551         },
7552 };
7553
7554 static const struct ieee80211_iface_limit ath10k_tlv_if_limit_ibss[] = {
7555         {
7556                 .max = 1,
7557                 .types = BIT(NL80211_IFTYPE_STATION),
7558         },
7559         {
7560                 .max = 1,
7561                 .types = BIT(NL80211_IFTYPE_ADHOC),
7562         },
7563 };
7564
7565 /* FIXME: This is not thouroughly tested. These combinations may over- or
7566  * underestimate hw/fw capabilities.
7567  */
7568 static struct ieee80211_iface_combination ath10k_tlv_if_comb[] = {
7569         {
7570                 .limits = ath10k_tlv_if_limit,
7571                 .num_different_channels = 1,
7572                 .max_interfaces = 4,
7573                 .n_limits = ARRAY_SIZE(ath10k_tlv_if_limit),
7574         },
7575         {
7576                 .limits = ath10k_tlv_if_limit_ibss,
7577                 .num_different_channels = 1,
7578                 .max_interfaces = 2,
7579                 .n_limits = ARRAY_SIZE(ath10k_tlv_if_limit_ibss),
7580         },
7581 };
7582
7583 static struct ieee80211_iface_combination ath10k_tlv_qcs_if_comb[] = {
7584         {
7585                 .limits = ath10k_tlv_if_limit,
7586                 .num_different_channels = 1,
7587                 .max_interfaces = 4,
7588                 .n_limits = ARRAY_SIZE(ath10k_tlv_if_limit),
7589         },
7590         {
7591                 .limits = ath10k_tlv_qcs_if_limit,
7592                 .num_different_channels = 2,
7593                 .max_interfaces = 4,
7594                 .n_limits = ARRAY_SIZE(ath10k_tlv_qcs_if_limit),
7595         },
7596         {
7597                 .limits = ath10k_tlv_if_limit_ibss,
7598                 .num_different_channels = 1,
7599                 .max_interfaces = 2,
7600                 .n_limits = ARRAY_SIZE(ath10k_tlv_if_limit_ibss),
7601         },
7602 };
7603
7604 static const struct ieee80211_iface_limit ath10k_10_4_if_limits[] = {
7605         {
7606                 .max = 1,
7607                 .types = BIT(NL80211_IFTYPE_STATION),
7608         },
7609         {
7610                 .max    = 16,
7611                 .types  = BIT(NL80211_IFTYPE_AP)
7612 #ifdef CONFIG_MAC80211_MESH
7613                         | BIT(NL80211_IFTYPE_MESH_POINT)
7614 #endif
7615         },
7616 };
7617
7618 static const struct ieee80211_iface_combination ath10k_10_4_if_comb[] = {
7619         {
7620                 .limits = ath10k_10_4_if_limits,
7621                 .n_limits = ARRAY_SIZE(ath10k_10_4_if_limits),
7622                 .max_interfaces = 16,
7623                 .num_different_channels = 1,
7624                 .beacon_int_infra_match = true,
7625 #ifdef CONFIG_ATH10K_DFS_CERTIFIED
7626                 .radar_detect_widths =  BIT(NL80211_CHAN_WIDTH_20_NOHT) |
7627                                         BIT(NL80211_CHAN_WIDTH_20) |
7628                                         BIT(NL80211_CHAN_WIDTH_40) |
7629                                         BIT(NL80211_CHAN_WIDTH_80),
7630 #endif
7631         },
7632 };
7633
7634 static void ath10k_get_arvif_iter(void *data, u8 *mac,
7635                                   struct ieee80211_vif *vif)
7636 {
7637         struct ath10k_vif_iter *arvif_iter = data;
7638         struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
7639
7640         if (arvif->vdev_id == arvif_iter->vdev_id)
7641                 arvif_iter->arvif = arvif;
7642 }
7643
7644 struct ath10k_vif *ath10k_get_arvif(struct ath10k *ar, u32 vdev_id)
7645 {
7646         struct ath10k_vif_iter arvif_iter;
7647         u32 flags;
7648
7649         memset(&arvif_iter, 0, sizeof(struct ath10k_vif_iter));
7650         arvif_iter.vdev_id = vdev_id;
7651
7652         flags = IEEE80211_IFACE_ITER_RESUME_ALL;
7653         ieee80211_iterate_active_interfaces_atomic(ar->hw,
7654                                                    flags,
7655                                                    ath10k_get_arvif_iter,
7656                                                    &arvif_iter);
7657         if (!arvif_iter.arvif) {
7658                 ath10k_warn(ar, "No VIF found for vdev %d\n", vdev_id);
7659                 return NULL;
7660         }
7661
7662         return arvif_iter.arvif;
7663 }
7664
7665 int ath10k_mac_register(struct ath10k *ar)
7666 {
7667         static const u32 cipher_suites[] = {
7668                 WLAN_CIPHER_SUITE_WEP40,
7669                 WLAN_CIPHER_SUITE_WEP104,
7670                 WLAN_CIPHER_SUITE_TKIP,
7671                 WLAN_CIPHER_SUITE_CCMP,
7672                 WLAN_CIPHER_SUITE_AES_CMAC,
7673         };
7674         struct ieee80211_supported_band *band;
7675         void *channels;
7676         int ret;
7677
7678         SET_IEEE80211_PERM_ADDR(ar->hw, ar->mac_addr);
7679
7680         SET_IEEE80211_DEV(ar->hw, ar->dev);
7681
7682         BUILD_BUG_ON((ARRAY_SIZE(ath10k_2ghz_channels) +
7683                       ARRAY_SIZE(ath10k_5ghz_channels)) !=
7684                      ATH10K_NUM_CHANS);
7685
7686         if (ar->phy_capability & WHAL_WLAN_11G_CAPABILITY) {
7687                 channels = kmemdup(ath10k_2ghz_channels,
7688                                    sizeof(ath10k_2ghz_channels),
7689                                    GFP_KERNEL);
7690                 if (!channels) {
7691                         ret = -ENOMEM;
7692                         goto err_free;
7693                 }
7694
7695                 band = &ar->mac.sbands[NL80211_BAND_2GHZ];
7696                 band->n_channels = ARRAY_SIZE(ath10k_2ghz_channels);
7697                 band->channels = channels;
7698                 band->n_bitrates = ath10k_g_rates_size;
7699                 band->bitrates = ath10k_g_rates;
7700
7701                 ar->hw->wiphy->bands[NL80211_BAND_2GHZ] = band;
7702         }
7703
7704         if (ar->phy_capability & WHAL_WLAN_11A_CAPABILITY) {
7705                 channels = kmemdup(ath10k_5ghz_channels,
7706                                    sizeof(ath10k_5ghz_channels),
7707                                    GFP_KERNEL);
7708                 if (!channels) {
7709                         ret = -ENOMEM;
7710                         goto err_free;
7711                 }
7712
7713                 band = &ar->mac.sbands[NL80211_BAND_5GHZ];
7714                 band->n_channels = ARRAY_SIZE(ath10k_5ghz_channels);
7715                 band->channels = channels;
7716                 band->n_bitrates = ath10k_a_rates_size;
7717                 band->bitrates = ath10k_a_rates;
7718                 ar->hw->wiphy->bands[NL80211_BAND_5GHZ] = band;
7719         }
7720
7721         ath10k_mac_setup_ht_vht_cap(ar);
7722
7723         ar->hw->wiphy->interface_modes =
7724                 BIT(NL80211_IFTYPE_STATION) |
7725                 BIT(NL80211_IFTYPE_AP) |
7726                 BIT(NL80211_IFTYPE_MESH_POINT);
7727
7728         ar->hw->wiphy->available_antennas_rx = ar->cfg_rx_chainmask;
7729         ar->hw->wiphy->available_antennas_tx = ar->cfg_tx_chainmask;
7730
7731         if (!test_bit(ATH10K_FW_FEATURE_NO_P2P, ar->normal_mode_fw.fw_file.fw_features))
7732                 ar->hw->wiphy->interface_modes |=
7733                         BIT(NL80211_IFTYPE_P2P_DEVICE) |
7734                         BIT(NL80211_IFTYPE_P2P_CLIENT) |
7735                         BIT(NL80211_IFTYPE_P2P_GO);
7736
7737         ieee80211_hw_set(ar->hw, SIGNAL_DBM);
7738         ieee80211_hw_set(ar->hw, SUPPORTS_PS);
7739         ieee80211_hw_set(ar->hw, SUPPORTS_DYNAMIC_PS);
7740         ieee80211_hw_set(ar->hw, MFP_CAPABLE);
7741         ieee80211_hw_set(ar->hw, REPORTS_TX_ACK_STATUS);
7742         ieee80211_hw_set(ar->hw, HAS_RATE_CONTROL);
7743         ieee80211_hw_set(ar->hw, AP_LINK_PS);
7744         ieee80211_hw_set(ar->hw, SPECTRUM_MGMT);
7745         ieee80211_hw_set(ar->hw, SUPPORT_FAST_XMIT);
7746         ieee80211_hw_set(ar->hw, CONNECTION_MONITOR);
7747         ieee80211_hw_set(ar->hw, SUPPORTS_PER_STA_GTK);
7748         ieee80211_hw_set(ar->hw, WANT_MONITOR_VIF);
7749         ieee80211_hw_set(ar->hw, CHANCTX_STA_CSA);
7750         ieee80211_hw_set(ar->hw, QUEUE_CONTROL);
7751
7752         if (!test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags))
7753                 ieee80211_hw_set(ar->hw, SW_CRYPTO_CONTROL);
7754
7755         ar->hw->wiphy->features |= NL80211_FEATURE_STATIC_SMPS;
7756         ar->hw->wiphy->flags |= WIPHY_FLAG_IBSS_RSN;
7757
7758         if (ar->ht_cap_info & WMI_HT_CAP_DYNAMIC_SMPS)
7759                 ar->hw->wiphy->features |= NL80211_FEATURE_DYNAMIC_SMPS;
7760
7761         if (ar->ht_cap_info & WMI_HT_CAP_ENABLED) {
7762                 ieee80211_hw_set(ar->hw, AMPDU_AGGREGATION);
7763                 ieee80211_hw_set(ar->hw, TX_AMPDU_SETUP_IN_HW);
7764         }
7765
7766         ar->hw->wiphy->max_scan_ssids = WLAN_SCAN_PARAMS_MAX_SSID;
7767         ar->hw->wiphy->max_scan_ie_len = WLAN_SCAN_PARAMS_MAX_IE_LEN;
7768
7769         ar->hw->vif_data_size = sizeof(struct ath10k_vif);
7770         ar->hw->sta_data_size = sizeof(struct ath10k_sta);
7771         ar->hw->txq_data_size = sizeof(struct ath10k_txq);
7772
7773         ar->hw->max_listen_interval = ATH10K_MAX_HW_LISTEN_INTERVAL;
7774
7775         if (test_bit(WMI_SERVICE_BEACON_OFFLOAD, ar->wmi.svc_map)) {
7776                 ar->hw->wiphy->flags |= WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD;
7777
7778                 /* Firmware delivers WPS/P2P Probe Requests frames to driver so
7779                  * that userspace (e.g. wpa_supplicant/hostapd) can generate
7780                  * correct Probe Responses. This is more of a hack advert..
7781                  */
7782                 ar->hw->wiphy->probe_resp_offload |=
7783                         NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS |
7784                         NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS2 |
7785                         NL80211_PROBE_RESP_OFFLOAD_SUPPORT_P2P;
7786         }
7787
7788         if (test_bit(WMI_SERVICE_TDLS, ar->wmi.svc_map))
7789                 ar->hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_TDLS;
7790
7791         ar->hw->wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
7792         ar->hw->wiphy->flags |= WIPHY_FLAG_HAS_CHANNEL_SWITCH;
7793         ar->hw->wiphy->max_remain_on_channel_duration = 5000;
7794
7795         ar->hw->wiphy->flags |= WIPHY_FLAG_AP_UAPSD;
7796         ar->hw->wiphy->features |= NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE |
7797                                    NL80211_FEATURE_AP_SCAN;
7798
7799         ar->hw->wiphy->max_ap_assoc_sta = ar->max_num_stations;
7800
7801         ret = ath10k_wow_init(ar);
7802         if (ret) {
7803                 ath10k_warn(ar, "failed to init wow: %d\n", ret);
7804                 goto err_free;
7805         }
7806
7807         wiphy_ext_feature_set(ar->hw->wiphy, NL80211_EXT_FEATURE_VHT_IBSS);
7808
7809         /*
7810          * on LL hardware queues are managed entirely by the FW
7811          * so we only advertise to mac we can do the queues thing
7812          */
7813         ar->hw->queues = IEEE80211_MAX_QUEUES;
7814
7815         /* vdev_ids are used as hw queue numbers. Make sure offchan tx queue is
7816          * something that vdev_ids can't reach so that we don't stop the queue
7817          * accidentally.
7818          */
7819         ar->hw->offchannel_tx_hw_queue = IEEE80211_MAX_QUEUES - 1;
7820
7821         switch (ar->running_fw->fw_file.wmi_op_version) {
7822         case ATH10K_FW_WMI_OP_VERSION_MAIN:
7823                 ar->hw->wiphy->iface_combinations = ath10k_if_comb;
7824                 ar->hw->wiphy->n_iface_combinations =
7825                         ARRAY_SIZE(ath10k_if_comb);
7826                 ar->hw->wiphy->interface_modes |= BIT(NL80211_IFTYPE_ADHOC);
7827                 break;
7828         case ATH10K_FW_WMI_OP_VERSION_TLV:
7829                 if (test_bit(WMI_SERVICE_ADAPTIVE_OCS, ar->wmi.svc_map)) {
7830                         ar->hw->wiphy->iface_combinations =
7831                                 ath10k_tlv_qcs_if_comb;
7832                         ar->hw->wiphy->n_iface_combinations =
7833                                 ARRAY_SIZE(ath10k_tlv_qcs_if_comb);
7834                 } else {
7835                         ar->hw->wiphy->iface_combinations = ath10k_tlv_if_comb;
7836                         ar->hw->wiphy->n_iface_combinations =
7837                                 ARRAY_SIZE(ath10k_tlv_if_comb);
7838                 }
7839                 ar->hw->wiphy->interface_modes |= BIT(NL80211_IFTYPE_ADHOC);
7840                 break;
7841         case ATH10K_FW_WMI_OP_VERSION_10_1:
7842         case ATH10K_FW_WMI_OP_VERSION_10_2:
7843         case ATH10K_FW_WMI_OP_VERSION_10_2_4:
7844                 ar->hw->wiphy->iface_combinations = ath10k_10x_if_comb;
7845                 ar->hw->wiphy->n_iface_combinations =
7846                         ARRAY_SIZE(ath10k_10x_if_comb);
7847                 break;
7848         case ATH10K_FW_WMI_OP_VERSION_10_4:
7849                 ar->hw->wiphy->iface_combinations = ath10k_10_4_if_comb;
7850                 ar->hw->wiphy->n_iface_combinations =
7851                         ARRAY_SIZE(ath10k_10_4_if_comb);
7852                 break;
7853         case ATH10K_FW_WMI_OP_VERSION_UNSET:
7854         case ATH10K_FW_WMI_OP_VERSION_MAX:
7855                 WARN_ON(1);
7856                 ret = -EINVAL;
7857                 goto err_free;
7858         }
7859
7860         if (!test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags))
7861                 ar->hw->netdev_features = NETIF_F_HW_CSUM;
7862
7863         if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED)) {
7864                 /* Init ath dfs pattern detector */
7865                 ar->ath_common.debug_mask = ATH_DBG_DFS;
7866                 ar->dfs_detector = dfs_pattern_detector_init(&ar->ath_common,
7867                                                              NL80211_DFS_UNSET);
7868
7869                 if (!ar->dfs_detector)
7870                         ath10k_warn(ar, "failed to initialise DFS pattern detector\n");
7871         }
7872
7873         ret = ath_regd_init(&ar->ath_common.regulatory, ar->hw->wiphy,
7874                             ath10k_reg_notifier);
7875         if (ret) {
7876                 ath10k_err(ar, "failed to initialise regulatory: %i\n", ret);
7877                 goto err_dfs_detector_exit;
7878         }
7879
7880         ar->hw->wiphy->cipher_suites = cipher_suites;
7881         ar->hw->wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
7882
7883         ret = ieee80211_register_hw(ar->hw);
7884         if (ret) {
7885                 ath10k_err(ar, "failed to register ieee80211: %d\n", ret);
7886                 goto err_dfs_detector_exit;
7887         }
7888
7889         if (!ath_is_world_regd(&ar->ath_common.regulatory)) {
7890                 ret = regulatory_hint(ar->hw->wiphy,
7891                                       ar->ath_common.regulatory.alpha2);
7892                 if (ret)
7893                         goto err_unregister;
7894         }
7895
7896         return 0;
7897
7898 err_unregister:
7899         ieee80211_unregister_hw(ar->hw);
7900
7901 err_dfs_detector_exit:
7902         if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector)
7903                 ar->dfs_detector->exit(ar->dfs_detector);
7904
7905 err_free:
7906         kfree(ar->mac.sbands[NL80211_BAND_2GHZ].channels);
7907         kfree(ar->mac.sbands[NL80211_BAND_5GHZ].channels);
7908
7909         SET_IEEE80211_DEV(ar->hw, NULL);
7910         return ret;
7911 }
7912
7913 void ath10k_mac_unregister(struct ath10k *ar)
7914 {
7915         ieee80211_unregister_hw(ar->hw);
7916
7917         if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector)
7918                 ar->dfs_detector->exit(ar->dfs_detector);
7919
7920         kfree(ar->mac.sbands[NL80211_BAND_2GHZ].channels);
7921         kfree(ar->mac.sbands[NL80211_BAND_5GHZ].channels);
7922
7923         SET_IEEE80211_DEV(ar->hw, NULL);
7924 }