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