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