62a90f270f0387b831c65aad4e4044e883aa4d0a
[cascardo/linux.git] / net / mac80211 / cfg.c
1 /*
2  * mac80211 configuration hooks for cfg80211
3  *
4  * Copyright 2006-2010  Johannes Berg <johannes@sipsolutions.net>
5  * Copyright 2013-2015  Intel Mobile Communications GmbH
6  *
7  * This file is GPLv2 as found in COPYING.
8  */
9
10 #include <linux/ieee80211.h>
11 #include <linux/nl80211.h>
12 #include <linux/rtnetlink.h>
13 #include <linux/slab.h>
14 #include <net/net_namespace.h>
15 #include <linux/rcupdate.h>
16 #include <linux/if_ether.h>
17 #include <net/cfg80211.h>
18 #include "ieee80211_i.h"
19 #include "driver-ops.h"
20 #include "rate.h"
21 #include "mesh.h"
22 #include "wme.h"
23
24 static struct wireless_dev *ieee80211_add_iface(struct wiphy *wiphy,
25                                                 const char *name,
26                                                 unsigned char name_assign_type,
27                                                 enum nl80211_iftype type,
28                                                 u32 *flags,
29                                                 struct vif_params *params)
30 {
31         struct ieee80211_local *local = wiphy_priv(wiphy);
32         struct wireless_dev *wdev;
33         struct ieee80211_sub_if_data *sdata;
34         int err;
35
36         err = ieee80211_if_add(local, name, name_assign_type, &wdev, type, params);
37         if (err)
38                 return ERR_PTR(err);
39
40         if (type == NL80211_IFTYPE_MONITOR && flags) {
41                 sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
42                 sdata->u.mntr_flags = *flags;
43         }
44
45         return wdev;
46 }
47
48 static int ieee80211_del_iface(struct wiphy *wiphy, struct wireless_dev *wdev)
49 {
50         ieee80211_if_remove(IEEE80211_WDEV_TO_SUB_IF(wdev));
51
52         return 0;
53 }
54
55 static int ieee80211_change_iface(struct wiphy *wiphy,
56                                   struct net_device *dev,
57                                   enum nl80211_iftype type, u32 *flags,
58                                   struct vif_params *params)
59 {
60         struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
61         int ret;
62
63         ret = ieee80211_if_change_type(sdata, type);
64         if (ret)
65                 return ret;
66
67         if (type == NL80211_IFTYPE_AP_VLAN &&
68             params && params->use_4addr == 0)
69                 RCU_INIT_POINTER(sdata->u.vlan.sta, NULL);
70         else if (type == NL80211_IFTYPE_STATION &&
71                  params && params->use_4addr >= 0)
72                 sdata->u.mgd.use_4addr = params->use_4addr;
73
74         if (sdata->vif.type == NL80211_IFTYPE_MONITOR && flags) {
75                 struct ieee80211_local *local = sdata->local;
76
77                 if (ieee80211_sdata_running(sdata)) {
78                         u32 mask = MONITOR_FLAG_COOK_FRAMES |
79                                    MONITOR_FLAG_ACTIVE;
80
81                         /*
82                          * Prohibit MONITOR_FLAG_COOK_FRAMES and
83                          * MONITOR_FLAG_ACTIVE to be changed while the
84                          * interface is up.
85                          * Else we would need to add a lot of cruft
86                          * to update everything:
87                          *      cooked_mntrs, monitor and all fif_* counters
88                          *      reconfigure hardware
89                          */
90                         if ((*flags & mask) != (sdata->u.mntr_flags & mask))
91                                 return -EBUSY;
92
93                         ieee80211_adjust_monitor_flags(sdata, -1);
94                         sdata->u.mntr_flags = *flags;
95                         ieee80211_adjust_monitor_flags(sdata, 1);
96
97                         ieee80211_configure_filter(local);
98                 } else {
99                         /*
100                          * Because the interface is down, ieee80211_do_stop
101                          * and ieee80211_do_open take care of "everything"
102                          * mentioned in the comment above.
103                          */
104                         sdata->u.mntr_flags = *flags;
105                 }
106         }
107
108         return 0;
109 }
110
111 static int ieee80211_start_p2p_device(struct wiphy *wiphy,
112                                       struct wireless_dev *wdev)
113 {
114         struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
115         int ret;
116
117         mutex_lock(&sdata->local->chanctx_mtx);
118         ret = ieee80211_check_combinations(sdata, NULL, 0, 0);
119         mutex_unlock(&sdata->local->chanctx_mtx);
120         if (ret < 0)
121                 return ret;
122
123         return ieee80211_do_open(wdev, true);
124 }
125
126 static void ieee80211_stop_p2p_device(struct wiphy *wiphy,
127                                       struct wireless_dev *wdev)
128 {
129         ieee80211_sdata_stop(IEEE80211_WDEV_TO_SUB_IF(wdev));
130 }
131
132 static int ieee80211_set_noack_map(struct wiphy *wiphy,
133                                   struct net_device *dev,
134                                   u16 noack_map)
135 {
136         struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
137
138         sdata->noack_map = noack_map;
139
140         ieee80211_check_fast_xmit_iface(sdata);
141
142         return 0;
143 }
144
145 static int ieee80211_add_key(struct wiphy *wiphy, struct net_device *dev,
146                              u8 key_idx, bool pairwise, const u8 *mac_addr,
147                              struct key_params *params)
148 {
149         struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
150         struct ieee80211_local *local = sdata->local;
151         struct sta_info *sta = NULL;
152         const struct ieee80211_cipher_scheme *cs = NULL;
153         struct ieee80211_key *key;
154         int err;
155
156         if (!ieee80211_sdata_running(sdata))
157                 return -ENETDOWN;
158
159         /* reject WEP and TKIP keys if WEP failed to initialize */
160         switch (params->cipher) {
161         case WLAN_CIPHER_SUITE_WEP40:
162         case WLAN_CIPHER_SUITE_TKIP:
163         case WLAN_CIPHER_SUITE_WEP104:
164                 if (IS_ERR(local->wep_tx_tfm))
165                         return -EINVAL;
166                 break;
167         case WLAN_CIPHER_SUITE_CCMP:
168         case WLAN_CIPHER_SUITE_CCMP_256:
169         case WLAN_CIPHER_SUITE_AES_CMAC:
170         case WLAN_CIPHER_SUITE_BIP_CMAC_256:
171         case WLAN_CIPHER_SUITE_BIP_GMAC_128:
172         case WLAN_CIPHER_SUITE_BIP_GMAC_256:
173         case WLAN_CIPHER_SUITE_GCMP:
174         case WLAN_CIPHER_SUITE_GCMP_256:
175                 break;
176         default:
177                 cs = ieee80211_cs_get(local, params->cipher, sdata->vif.type);
178                 break;
179         }
180
181         key = ieee80211_key_alloc(params->cipher, key_idx, params->key_len,
182                                   params->key, params->seq_len, params->seq,
183                                   cs);
184         if (IS_ERR(key))
185                 return PTR_ERR(key);
186
187         if (pairwise)
188                 key->conf.flags |= IEEE80211_KEY_FLAG_PAIRWISE;
189
190         mutex_lock(&local->sta_mtx);
191
192         if (mac_addr) {
193                 if (ieee80211_vif_is_mesh(&sdata->vif))
194                         sta = sta_info_get(sdata, mac_addr);
195                 else
196                         sta = sta_info_get_bss(sdata, mac_addr);
197                 /*
198                  * The ASSOC test makes sure the driver is ready to
199                  * receive the key. When wpa_supplicant has roamed
200                  * using FT, it attempts to set the key before
201                  * association has completed, this rejects that attempt
202                  * so it will set the key again after association.
203                  *
204                  * TODO: accept the key if we have a station entry and
205                  *       add it to the device after the station.
206                  */
207                 if (!sta || !test_sta_flag(sta, WLAN_STA_ASSOC)) {
208                         ieee80211_key_free_unused(key);
209                         err = -ENOENT;
210                         goto out_unlock;
211                 }
212         }
213
214         switch (sdata->vif.type) {
215         case NL80211_IFTYPE_STATION:
216                 if (sdata->u.mgd.mfp != IEEE80211_MFP_DISABLED)
217                         key->conf.flags |= IEEE80211_KEY_FLAG_RX_MGMT;
218                 break;
219         case NL80211_IFTYPE_AP:
220         case NL80211_IFTYPE_AP_VLAN:
221                 /* Keys without a station are used for TX only */
222                 if (key->sta && test_sta_flag(key->sta, WLAN_STA_MFP))
223                         key->conf.flags |= IEEE80211_KEY_FLAG_RX_MGMT;
224                 break;
225         case NL80211_IFTYPE_ADHOC:
226                 /* no MFP (yet) */
227                 break;
228         case NL80211_IFTYPE_MESH_POINT:
229 #ifdef CONFIG_MAC80211_MESH
230                 if (sdata->u.mesh.security != IEEE80211_MESH_SEC_NONE)
231                         key->conf.flags |= IEEE80211_KEY_FLAG_RX_MGMT;
232                 break;
233 #endif
234         case NL80211_IFTYPE_WDS:
235         case NL80211_IFTYPE_MONITOR:
236         case NL80211_IFTYPE_P2P_DEVICE:
237         case NL80211_IFTYPE_UNSPECIFIED:
238         case NUM_NL80211_IFTYPES:
239         case NL80211_IFTYPE_P2P_CLIENT:
240         case NL80211_IFTYPE_P2P_GO:
241         case NL80211_IFTYPE_OCB:
242                 /* shouldn't happen */
243                 WARN_ON_ONCE(1);
244                 break;
245         }
246
247         if (sta)
248                 sta->cipher_scheme = cs;
249
250         err = ieee80211_key_link(key, sdata, sta);
251
252  out_unlock:
253         mutex_unlock(&local->sta_mtx);
254
255         return err;
256 }
257
258 static int ieee80211_del_key(struct wiphy *wiphy, struct net_device *dev,
259                              u8 key_idx, bool pairwise, const u8 *mac_addr)
260 {
261         struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
262         struct ieee80211_local *local = sdata->local;
263         struct sta_info *sta;
264         struct ieee80211_key *key = NULL;
265         int ret;
266
267         mutex_lock(&local->sta_mtx);
268         mutex_lock(&local->key_mtx);
269
270         if (mac_addr) {
271                 ret = -ENOENT;
272
273                 sta = sta_info_get_bss(sdata, mac_addr);
274                 if (!sta)
275                         goto out_unlock;
276
277                 if (pairwise)
278                         key = key_mtx_dereference(local, sta->ptk[key_idx]);
279                 else
280                         key = key_mtx_dereference(local, sta->gtk[key_idx]);
281         } else
282                 key = key_mtx_dereference(local, sdata->keys[key_idx]);
283
284         if (!key) {
285                 ret = -ENOENT;
286                 goto out_unlock;
287         }
288
289         ieee80211_key_free(key, true);
290
291         ret = 0;
292  out_unlock:
293         mutex_unlock(&local->key_mtx);
294         mutex_unlock(&local->sta_mtx);
295
296         return ret;
297 }
298
299 static int ieee80211_get_key(struct wiphy *wiphy, struct net_device *dev,
300                              u8 key_idx, bool pairwise, const u8 *mac_addr,
301                              void *cookie,
302                              void (*callback)(void *cookie,
303                                               struct key_params *params))
304 {
305         struct ieee80211_sub_if_data *sdata;
306         struct sta_info *sta = NULL;
307         u8 seq[6] = {0};
308         struct key_params params;
309         struct ieee80211_key *key = NULL;
310         u64 pn64;
311         u32 iv32;
312         u16 iv16;
313         int err = -ENOENT;
314         struct ieee80211_key_seq kseq = {};
315
316         sdata = IEEE80211_DEV_TO_SUB_IF(dev);
317
318         rcu_read_lock();
319
320         if (mac_addr) {
321                 sta = sta_info_get_bss(sdata, mac_addr);
322                 if (!sta)
323                         goto out;
324
325                 if (pairwise && key_idx < NUM_DEFAULT_KEYS)
326                         key = rcu_dereference(sta->ptk[key_idx]);
327                 else if (!pairwise &&
328                          key_idx < NUM_DEFAULT_KEYS + NUM_DEFAULT_MGMT_KEYS)
329                         key = rcu_dereference(sta->gtk[key_idx]);
330         } else
331                 key = rcu_dereference(sdata->keys[key_idx]);
332
333         if (!key)
334                 goto out;
335
336         memset(&params, 0, sizeof(params));
337
338         params.cipher = key->conf.cipher;
339
340         switch (key->conf.cipher) {
341         case WLAN_CIPHER_SUITE_TKIP:
342                 pn64 = atomic64_read(&key->conf.tx_pn);
343                 iv32 = TKIP_PN_TO_IV32(pn64);
344                 iv16 = TKIP_PN_TO_IV16(pn64);
345
346                 if (key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE &&
347                     !(key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV)) {
348                         drv_get_key_seq(sdata->local, key, &kseq);
349                         iv32 = kseq.tkip.iv32;
350                         iv16 = kseq.tkip.iv16;
351                 }
352
353                 seq[0] = iv16 & 0xff;
354                 seq[1] = (iv16 >> 8) & 0xff;
355                 seq[2] = iv32 & 0xff;
356                 seq[3] = (iv32 >> 8) & 0xff;
357                 seq[4] = (iv32 >> 16) & 0xff;
358                 seq[5] = (iv32 >> 24) & 0xff;
359                 params.seq = seq;
360                 params.seq_len = 6;
361                 break;
362         case WLAN_CIPHER_SUITE_CCMP:
363         case WLAN_CIPHER_SUITE_CCMP_256:
364         case WLAN_CIPHER_SUITE_AES_CMAC:
365         case WLAN_CIPHER_SUITE_BIP_CMAC_256:
366                 BUILD_BUG_ON(offsetof(typeof(kseq), ccmp) !=
367                              offsetof(typeof(kseq), aes_cmac));
368         case WLAN_CIPHER_SUITE_BIP_GMAC_128:
369         case WLAN_CIPHER_SUITE_BIP_GMAC_256:
370                 BUILD_BUG_ON(offsetof(typeof(kseq), ccmp) !=
371                              offsetof(typeof(kseq), aes_gmac));
372         case WLAN_CIPHER_SUITE_GCMP:
373         case WLAN_CIPHER_SUITE_GCMP_256:
374                 BUILD_BUG_ON(offsetof(typeof(kseq), ccmp) !=
375                              offsetof(typeof(kseq), gcmp));
376
377                 if (key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE &&
378                     !(key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV)) {
379                         drv_get_key_seq(sdata->local, key, &kseq);
380                         memcpy(seq, kseq.ccmp.pn, 6);
381                 } else {
382                         pn64 = atomic64_read(&key->conf.tx_pn);
383                         seq[0] = pn64;
384                         seq[1] = pn64 >> 8;
385                         seq[2] = pn64 >> 16;
386                         seq[3] = pn64 >> 24;
387                         seq[4] = pn64 >> 32;
388                         seq[5] = pn64 >> 40;
389                 }
390                 params.seq = seq;
391                 params.seq_len = 6;
392                 break;
393         default:
394                 if (!(key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE))
395                         break;
396                 if (WARN_ON(key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV))
397                         break;
398                 drv_get_key_seq(sdata->local, key, &kseq);
399                 params.seq = kseq.hw.seq;
400                 params.seq_len = kseq.hw.seq_len;
401                 break;
402         }
403
404         params.key = key->conf.key;
405         params.key_len = key->conf.keylen;
406
407         callback(cookie, &params);
408         err = 0;
409
410  out:
411         rcu_read_unlock();
412         return err;
413 }
414
415 static int ieee80211_config_default_key(struct wiphy *wiphy,
416                                         struct net_device *dev,
417                                         u8 key_idx, bool uni,
418                                         bool multi)
419 {
420         struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
421
422         ieee80211_set_default_key(sdata, key_idx, uni, multi);
423
424         return 0;
425 }
426
427 static int ieee80211_config_default_mgmt_key(struct wiphy *wiphy,
428                                              struct net_device *dev,
429                                              u8 key_idx)
430 {
431         struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
432
433         ieee80211_set_default_mgmt_key(sdata, key_idx);
434
435         return 0;
436 }
437
438 void sta_set_rate_info_tx(struct sta_info *sta,
439                           const struct ieee80211_tx_rate *rate,
440                           struct rate_info *rinfo)
441 {
442         rinfo->flags = 0;
443         if (rate->flags & IEEE80211_TX_RC_MCS) {
444                 rinfo->flags |= RATE_INFO_FLAGS_MCS;
445                 rinfo->mcs = rate->idx;
446         } else if (rate->flags & IEEE80211_TX_RC_VHT_MCS) {
447                 rinfo->flags |= RATE_INFO_FLAGS_VHT_MCS;
448                 rinfo->mcs = ieee80211_rate_get_vht_mcs(rate);
449                 rinfo->nss = ieee80211_rate_get_vht_nss(rate);
450         } else {
451                 struct ieee80211_supported_band *sband;
452                 int shift = ieee80211_vif_get_shift(&sta->sdata->vif);
453                 u16 brate;
454
455                 sband = sta->local->hw.wiphy->bands[
456                                 ieee80211_get_sdata_band(sta->sdata)];
457                 brate = sband->bitrates[rate->idx].bitrate;
458                 rinfo->legacy = DIV_ROUND_UP(brate, 1 << shift);
459         }
460         if (rate->flags & IEEE80211_TX_RC_40_MHZ_WIDTH)
461                 rinfo->bw = RATE_INFO_BW_40;
462         else if (rate->flags & IEEE80211_TX_RC_80_MHZ_WIDTH)
463                 rinfo->bw = RATE_INFO_BW_80;
464         else if (rate->flags & IEEE80211_TX_RC_160_MHZ_WIDTH)
465                 rinfo->bw = RATE_INFO_BW_160;
466         else
467                 rinfo->bw = RATE_INFO_BW_20;
468         if (rate->flags & IEEE80211_TX_RC_SHORT_GI)
469                 rinfo->flags |= RATE_INFO_FLAGS_SHORT_GI;
470 }
471
472 static int ieee80211_dump_station(struct wiphy *wiphy, struct net_device *dev,
473                                   int idx, u8 *mac, struct station_info *sinfo)
474 {
475         struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
476         struct ieee80211_local *local = sdata->local;
477         struct sta_info *sta;
478         int ret = -ENOENT;
479
480         mutex_lock(&local->sta_mtx);
481
482         sta = sta_info_get_by_idx(sdata, idx);
483         if (sta) {
484                 ret = 0;
485                 memcpy(mac, sta->sta.addr, ETH_ALEN);
486                 sta_set_sinfo(sta, sinfo);
487         }
488
489         mutex_unlock(&local->sta_mtx);
490
491         return ret;
492 }
493
494 static int ieee80211_dump_survey(struct wiphy *wiphy, struct net_device *dev,
495                                  int idx, struct survey_info *survey)
496 {
497         struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
498
499         return drv_get_survey(local, idx, survey);
500 }
501
502 static int ieee80211_get_station(struct wiphy *wiphy, struct net_device *dev,
503                                  const u8 *mac, struct station_info *sinfo)
504 {
505         struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
506         struct ieee80211_local *local = sdata->local;
507         struct sta_info *sta;
508         int ret = -ENOENT;
509
510         mutex_lock(&local->sta_mtx);
511
512         sta = sta_info_get_bss(sdata, mac);
513         if (sta) {
514                 ret = 0;
515                 sta_set_sinfo(sta, sinfo);
516         }
517
518         mutex_unlock(&local->sta_mtx);
519
520         return ret;
521 }
522
523 static int ieee80211_set_monitor_channel(struct wiphy *wiphy,
524                                          struct cfg80211_chan_def *chandef)
525 {
526         struct ieee80211_local *local = wiphy_priv(wiphy);
527         struct ieee80211_sub_if_data *sdata;
528         int ret = 0;
529
530         if (cfg80211_chandef_identical(&local->monitor_chandef, chandef))
531                 return 0;
532
533         mutex_lock(&local->mtx);
534         mutex_lock(&local->iflist_mtx);
535         if (local->use_chanctx) {
536                 sdata = rcu_dereference_protected(
537                                 local->monitor_sdata,
538                                 lockdep_is_held(&local->iflist_mtx));
539                 if (sdata) {
540                         ieee80211_vif_release_channel(sdata);
541                         ret = ieee80211_vif_use_channel(sdata, chandef,
542                                         IEEE80211_CHANCTX_EXCLUSIVE);
543                 }
544         } else if (local->open_count == local->monitors) {
545                 local->_oper_chandef = *chandef;
546                 ieee80211_hw_config(local, 0);
547         }
548
549         if (ret == 0)
550                 local->monitor_chandef = *chandef;
551         mutex_unlock(&local->iflist_mtx);
552         mutex_unlock(&local->mtx);
553
554         return ret;
555 }
556
557 static int ieee80211_set_probe_resp(struct ieee80211_sub_if_data *sdata,
558                                     const u8 *resp, size_t resp_len,
559                                     const struct ieee80211_csa_settings *csa)
560 {
561         struct probe_resp *new, *old;
562
563         if (!resp || !resp_len)
564                 return 1;
565
566         old = sdata_dereference(sdata->u.ap.probe_resp, sdata);
567
568         new = kzalloc(sizeof(struct probe_resp) + resp_len, GFP_KERNEL);
569         if (!new)
570                 return -ENOMEM;
571
572         new->len = resp_len;
573         memcpy(new->data, resp, resp_len);
574
575         if (csa)
576                 memcpy(new->csa_counter_offsets, csa->counter_offsets_presp,
577                        csa->n_counter_offsets_presp *
578                        sizeof(new->csa_counter_offsets[0]));
579
580         rcu_assign_pointer(sdata->u.ap.probe_resp, new);
581         if (old)
582                 kfree_rcu(old, rcu_head);
583
584         return 0;
585 }
586
587 static int ieee80211_assign_beacon(struct ieee80211_sub_if_data *sdata,
588                                    struct cfg80211_beacon_data *params,
589                                    const struct ieee80211_csa_settings *csa)
590 {
591         struct beacon_data *new, *old;
592         int new_head_len, new_tail_len;
593         int size, err;
594         u32 changed = BSS_CHANGED_BEACON;
595
596         old = sdata_dereference(sdata->u.ap.beacon, sdata);
597
598
599         /* Need to have a beacon head if we don't have one yet */
600         if (!params->head && !old)
601                 return -EINVAL;
602
603         /* new or old head? */
604         if (params->head)
605                 new_head_len = params->head_len;
606         else
607                 new_head_len = old->head_len;
608
609         /* new or old tail? */
610         if (params->tail || !old)
611                 /* params->tail_len will be zero for !params->tail */
612                 new_tail_len = params->tail_len;
613         else
614                 new_tail_len = old->tail_len;
615
616         size = sizeof(*new) + new_head_len + new_tail_len;
617
618         new = kzalloc(size, GFP_KERNEL);
619         if (!new)
620                 return -ENOMEM;
621
622         /* start filling the new info now */
623
624         /*
625          * pointers go into the block we allocated,
626          * memory is | beacon_data | head | tail |
627          */
628         new->head = ((u8 *) new) + sizeof(*new);
629         new->tail = new->head + new_head_len;
630         new->head_len = new_head_len;
631         new->tail_len = new_tail_len;
632
633         if (csa) {
634                 new->csa_current_counter = csa->count;
635                 memcpy(new->csa_counter_offsets, csa->counter_offsets_beacon,
636                        csa->n_counter_offsets_beacon *
637                        sizeof(new->csa_counter_offsets[0]));
638         }
639
640         /* copy in head */
641         if (params->head)
642                 memcpy(new->head, params->head, new_head_len);
643         else
644                 memcpy(new->head, old->head, new_head_len);
645
646         /* copy in optional tail */
647         if (params->tail)
648                 memcpy(new->tail, params->tail, new_tail_len);
649         else
650                 if (old)
651                         memcpy(new->tail, old->tail, new_tail_len);
652
653         err = ieee80211_set_probe_resp(sdata, params->probe_resp,
654                                        params->probe_resp_len, csa);
655         if (err < 0)
656                 return err;
657         if (err == 0)
658                 changed |= BSS_CHANGED_AP_PROBE_RESP;
659
660         rcu_assign_pointer(sdata->u.ap.beacon, new);
661
662         if (old)
663                 kfree_rcu(old, rcu_head);
664
665         return changed;
666 }
667
668 static int ieee80211_start_ap(struct wiphy *wiphy, struct net_device *dev,
669                               struct cfg80211_ap_settings *params)
670 {
671         struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
672         struct ieee80211_local *local = sdata->local;
673         struct beacon_data *old;
674         struct ieee80211_sub_if_data *vlan;
675         u32 changed = BSS_CHANGED_BEACON_INT |
676                       BSS_CHANGED_BEACON_ENABLED |
677                       BSS_CHANGED_BEACON |
678                       BSS_CHANGED_SSID |
679                       BSS_CHANGED_P2P_PS |
680                       BSS_CHANGED_TXPOWER;
681         int err;
682
683         old = sdata_dereference(sdata->u.ap.beacon, sdata);
684         if (old)
685                 return -EALREADY;
686
687         switch (params->smps_mode) {
688         case NL80211_SMPS_OFF:
689                 sdata->smps_mode = IEEE80211_SMPS_OFF;
690                 break;
691         case NL80211_SMPS_STATIC:
692                 sdata->smps_mode = IEEE80211_SMPS_STATIC;
693                 break;
694         case NL80211_SMPS_DYNAMIC:
695                 sdata->smps_mode = IEEE80211_SMPS_DYNAMIC;
696                 break;
697         default:
698                 return -EINVAL;
699         }
700         sdata->needed_rx_chains = sdata->local->rx_chains;
701
702         mutex_lock(&local->mtx);
703         err = ieee80211_vif_use_channel(sdata, &params->chandef,
704                                         IEEE80211_CHANCTX_SHARED);
705         if (!err)
706                 ieee80211_vif_copy_chanctx_to_vlans(sdata, false);
707         mutex_unlock(&local->mtx);
708         if (err)
709                 return err;
710
711         /*
712          * Apply control port protocol, this allows us to
713          * not encrypt dynamic WEP control frames.
714          */
715         sdata->control_port_protocol = params->crypto.control_port_ethertype;
716         sdata->control_port_no_encrypt = params->crypto.control_port_no_encrypt;
717         sdata->encrypt_headroom = ieee80211_cs_headroom(sdata->local,
718                                                         &params->crypto,
719                                                         sdata->vif.type);
720
721         list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list) {
722                 vlan->control_port_protocol =
723                         params->crypto.control_port_ethertype;
724                 vlan->control_port_no_encrypt =
725                         params->crypto.control_port_no_encrypt;
726                 vlan->encrypt_headroom =
727                         ieee80211_cs_headroom(sdata->local,
728                                               &params->crypto,
729                                               vlan->vif.type);
730         }
731
732         sdata->vif.bss_conf.beacon_int = params->beacon_interval;
733         sdata->vif.bss_conf.dtim_period = params->dtim_period;
734         sdata->vif.bss_conf.enable_beacon = true;
735         sdata->vif.bss_conf.allow_p2p_go_ps = sdata->vif.p2p;
736
737         sdata->vif.bss_conf.ssid_len = params->ssid_len;
738         if (params->ssid_len)
739                 memcpy(sdata->vif.bss_conf.ssid, params->ssid,
740                        params->ssid_len);
741         sdata->vif.bss_conf.hidden_ssid =
742                 (params->hidden_ssid != NL80211_HIDDEN_SSID_NOT_IN_USE);
743
744         memset(&sdata->vif.bss_conf.p2p_noa_attr, 0,
745                sizeof(sdata->vif.bss_conf.p2p_noa_attr));
746         sdata->vif.bss_conf.p2p_noa_attr.oppps_ctwindow =
747                 params->p2p_ctwindow & IEEE80211_P2P_OPPPS_CTWINDOW_MASK;
748         if (params->p2p_opp_ps)
749                 sdata->vif.bss_conf.p2p_noa_attr.oppps_ctwindow |=
750                                         IEEE80211_P2P_OPPPS_ENABLE_BIT;
751
752         err = ieee80211_assign_beacon(sdata, &params->beacon, NULL);
753         if (err < 0) {
754                 ieee80211_vif_release_channel(sdata);
755                 return err;
756         }
757         changed |= err;
758
759         err = drv_start_ap(sdata->local, sdata);
760         if (err) {
761                 old = sdata_dereference(sdata->u.ap.beacon, sdata);
762
763                 if (old)
764                         kfree_rcu(old, rcu_head);
765                 RCU_INIT_POINTER(sdata->u.ap.beacon, NULL);
766                 ieee80211_vif_release_channel(sdata);
767                 return err;
768         }
769
770         ieee80211_recalc_dtim(local, sdata);
771         ieee80211_bss_info_change_notify(sdata, changed);
772
773         netif_carrier_on(dev);
774         list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list)
775                 netif_carrier_on(vlan->dev);
776
777         return 0;
778 }
779
780 static int ieee80211_change_beacon(struct wiphy *wiphy, struct net_device *dev,
781                                    struct cfg80211_beacon_data *params)
782 {
783         struct ieee80211_sub_if_data *sdata;
784         struct beacon_data *old;
785         int err;
786
787         sdata = IEEE80211_DEV_TO_SUB_IF(dev);
788         sdata_assert_lock(sdata);
789
790         /* don't allow changing the beacon while CSA is in place - offset
791          * of channel switch counter may change
792          */
793         if (sdata->vif.csa_active)
794                 return -EBUSY;
795
796         old = sdata_dereference(sdata->u.ap.beacon, sdata);
797         if (!old)
798                 return -ENOENT;
799
800         err = ieee80211_assign_beacon(sdata, params, NULL);
801         if (err < 0)
802                 return err;
803         ieee80211_bss_info_change_notify(sdata, err);
804         return 0;
805 }
806
807 static int ieee80211_stop_ap(struct wiphy *wiphy, struct net_device *dev)
808 {
809         struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
810         struct ieee80211_sub_if_data *vlan;
811         struct ieee80211_local *local = sdata->local;
812         struct beacon_data *old_beacon;
813         struct probe_resp *old_probe_resp;
814         struct cfg80211_chan_def chandef;
815
816         sdata_assert_lock(sdata);
817
818         old_beacon = sdata_dereference(sdata->u.ap.beacon, sdata);
819         if (!old_beacon)
820                 return -ENOENT;
821         old_probe_resp = sdata_dereference(sdata->u.ap.probe_resp, sdata);
822
823         /* abort any running channel switch */
824         mutex_lock(&local->mtx);
825         sdata->vif.csa_active = false;
826         if (sdata->csa_block_tx) {
827                 ieee80211_wake_vif_queues(local, sdata,
828                                           IEEE80211_QUEUE_STOP_REASON_CSA);
829                 sdata->csa_block_tx = false;
830         }
831
832         mutex_unlock(&local->mtx);
833
834         kfree(sdata->u.ap.next_beacon);
835         sdata->u.ap.next_beacon = NULL;
836
837         /* turn off carrier for this interface and dependent VLANs */
838         list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list)
839                 netif_carrier_off(vlan->dev);
840         netif_carrier_off(dev);
841
842         /* remove beacon and probe response */
843         RCU_INIT_POINTER(sdata->u.ap.beacon, NULL);
844         RCU_INIT_POINTER(sdata->u.ap.probe_resp, NULL);
845         kfree_rcu(old_beacon, rcu_head);
846         if (old_probe_resp)
847                 kfree_rcu(old_probe_resp, rcu_head);
848         sdata->u.ap.driver_smps_mode = IEEE80211_SMPS_OFF;
849
850         __sta_info_flush(sdata, true);
851         ieee80211_free_keys(sdata, true);
852
853         sdata->vif.bss_conf.enable_beacon = false;
854         sdata->vif.bss_conf.ssid_len = 0;
855         clear_bit(SDATA_STATE_OFFCHANNEL_BEACON_STOPPED, &sdata->state);
856         ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON_ENABLED);
857
858         if (sdata->wdev.cac_started) {
859                 chandef = sdata->vif.bss_conf.chandef;
860                 cancel_delayed_work_sync(&sdata->dfs_cac_timer_work);
861                 cfg80211_cac_event(sdata->dev, &chandef,
862                                    NL80211_RADAR_CAC_ABORTED,
863                                    GFP_KERNEL);
864         }
865
866         drv_stop_ap(sdata->local, sdata);
867
868         /* free all potentially still buffered bcast frames */
869         local->total_ps_buffered -= skb_queue_len(&sdata->u.ap.ps.bc_buf);
870         skb_queue_purge(&sdata->u.ap.ps.bc_buf);
871
872         mutex_lock(&local->mtx);
873         ieee80211_vif_copy_chanctx_to_vlans(sdata, true);
874         ieee80211_vif_release_channel(sdata);
875         mutex_unlock(&local->mtx);
876
877         return 0;
878 }
879
880 /* Layer 2 Update frame (802.2 Type 1 LLC XID Update response) */
881 struct iapp_layer2_update {
882         u8 da[ETH_ALEN];        /* broadcast */
883         u8 sa[ETH_ALEN];        /* STA addr */
884         __be16 len;             /* 6 */
885         u8 dsap;                /* 0 */
886         u8 ssap;                /* 0 */
887         u8 control;
888         u8 xid_info[3];
889 } __packed;
890
891 static void ieee80211_send_layer2_update(struct sta_info *sta)
892 {
893         struct iapp_layer2_update *msg;
894         struct sk_buff *skb;
895
896         /* Send Level 2 Update Frame to update forwarding tables in layer 2
897          * bridge devices */
898
899         skb = dev_alloc_skb(sizeof(*msg));
900         if (!skb)
901                 return;
902         msg = (struct iapp_layer2_update *)skb_put(skb, sizeof(*msg));
903
904         /* 802.2 Type 1 Logical Link Control (LLC) Exchange Identifier (XID)
905          * Update response frame; IEEE Std 802.2-1998, 5.4.1.2.1 */
906
907         eth_broadcast_addr(msg->da);
908         memcpy(msg->sa, sta->sta.addr, ETH_ALEN);
909         msg->len = htons(6);
910         msg->dsap = 0;
911         msg->ssap = 0x01;       /* NULL LSAP, CR Bit: Response */
912         msg->control = 0xaf;    /* XID response lsb.1111F101.
913                                  * F=0 (no poll command; unsolicited frame) */
914         msg->xid_info[0] = 0x81;        /* XID format identifier */
915         msg->xid_info[1] = 1;   /* LLC types/classes: Type 1 LLC */
916         msg->xid_info[2] = 0;   /* XID sender's receive window size (RW) */
917
918         skb->dev = sta->sdata->dev;
919         skb->protocol = eth_type_trans(skb, sta->sdata->dev);
920         memset(skb->cb, 0, sizeof(skb->cb));
921         netif_rx_ni(skb);
922 }
923
924 static int sta_apply_auth_flags(struct ieee80211_local *local,
925                                 struct sta_info *sta,
926                                 u32 mask, u32 set)
927 {
928         int ret;
929
930         if (mask & BIT(NL80211_STA_FLAG_AUTHENTICATED) &&
931             set & BIT(NL80211_STA_FLAG_AUTHENTICATED) &&
932             !test_sta_flag(sta, WLAN_STA_AUTH)) {
933                 ret = sta_info_move_state(sta, IEEE80211_STA_AUTH);
934                 if (ret)
935                         return ret;
936         }
937
938         if (mask & BIT(NL80211_STA_FLAG_ASSOCIATED) &&
939             set & BIT(NL80211_STA_FLAG_ASSOCIATED) &&
940             !test_sta_flag(sta, WLAN_STA_ASSOC)) {
941                 /*
942                  * When peer becomes associated, init rate control as
943                  * well. Some drivers require rate control initialized
944                  * before drv_sta_state() is called.
945                  */
946                 if (!test_sta_flag(sta, WLAN_STA_RATE_CONTROL))
947                         rate_control_rate_init(sta);
948
949                 ret = sta_info_move_state(sta, IEEE80211_STA_ASSOC);
950                 if (ret)
951                         return ret;
952         }
953
954         if (mask & BIT(NL80211_STA_FLAG_AUTHORIZED)) {
955                 if (set & BIT(NL80211_STA_FLAG_AUTHORIZED))
956                         ret = sta_info_move_state(sta, IEEE80211_STA_AUTHORIZED);
957                 else if (test_sta_flag(sta, WLAN_STA_AUTHORIZED))
958                         ret = sta_info_move_state(sta, IEEE80211_STA_ASSOC);
959                 else
960                         ret = 0;
961                 if (ret)
962                         return ret;
963         }
964
965         if (mask & BIT(NL80211_STA_FLAG_ASSOCIATED) &&
966             !(set & BIT(NL80211_STA_FLAG_ASSOCIATED)) &&
967             test_sta_flag(sta, WLAN_STA_ASSOC)) {
968                 ret = sta_info_move_state(sta, IEEE80211_STA_AUTH);
969                 if (ret)
970                         return ret;
971         }
972
973         if (mask & BIT(NL80211_STA_FLAG_AUTHENTICATED) &&
974             !(set & BIT(NL80211_STA_FLAG_AUTHENTICATED)) &&
975             test_sta_flag(sta, WLAN_STA_AUTH)) {
976                 ret = sta_info_move_state(sta, IEEE80211_STA_NONE);
977                 if (ret)
978                         return ret;
979         }
980
981         return 0;
982 }
983
984 static void sta_apply_mesh_params(struct ieee80211_local *local,
985                                   struct sta_info *sta,
986                                   struct station_parameters *params)
987 {
988 #ifdef CONFIG_MAC80211_MESH
989         struct ieee80211_sub_if_data *sdata = sta->sdata;
990         u32 changed = 0;
991
992         if (params->sta_modify_mask & STATION_PARAM_APPLY_PLINK_STATE) {
993                 switch (params->plink_state) {
994                 case NL80211_PLINK_ESTAB:
995                         if (sta->mesh->plink_state != NL80211_PLINK_ESTAB)
996                                 changed = mesh_plink_inc_estab_count(sdata);
997                         sta->mesh->plink_state = params->plink_state;
998
999                         ieee80211_mps_sta_status_update(sta);
1000                         changed |= ieee80211_mps_set_sta_local_pm(sta,
1001                                       sdata->u.mesh.mshcfg.power_mode);
1002                         break;
1003                 case NL80211_PLINK_LISTEN:
1004                 case NL80211_PLINK_BLOCKED:
1005                 case NL80211_PLINK_OPN_SNT:
1006                 case NL80211_PLINK_OPN_RCVD:
1007                 case NL80211_PLINK_CNF_RCVD:
1008                 case NL80211_PLINK_HOLDING:
1009                         if (sta->mesh->plink_state == NL80211_PLINK_ESTAB)
1010                                 changed = mesh_plink_dec_estab_count(sdata);
1011                         sta->mesh->plink_state = params->plink_state;
1012
1013                         ieee80211_mps_sta_status_update(sta);
1014                         changed |= ieee80211_mps_set_sta_local_pm(sta,
1015                                         NL80211_MESH_POWER_UNKNOWN);
1016                         break;
1017                 default:
1018                         /*  nothing  */
1019                         break;
1020                 }
1021         }
1022
1023         switch (params->plink_action) {
1024         case NL80211_PLINK_ACTION_NO_ACTION:
1025                 /* nothing */
1026                 break;
1027         case NL80211_PLINK_ACTION_OPEN:
1028                 changed |= mesh_plink_open(sta);
1029                 break;
1030         case NL80211_PLINK_ACTION_BLOCK:
1031                 changed |= mesh_plink_block(sta);
1032                 break;
1033         }
1034
1035         if (params->local_pm)
1036                 changed |= ieee80211_mps_set_sta_local_pm(sta,
1037                                                           params->local_pm);
1038
1039         ieee80211_mbss_info_change_notify(sdata, changed);
1040 #endif
1041 }
1042
1043 static int sta_apply_parameters(struct ieee80211_local *local,
1044                                 struct sta_info *sta,
1045                                 struct station_parameters *params)
1046 {
1047         int ret = 0;
1048         struct ieee80211_supported_band *sband;
1049         struct ieee80211_sub_if_data *sdata = sta->sdata;
1050         enum ieee80211_band band = ieee80211_get_sdata_band(sdata);
1051         u32 mask, set;
1052
1053         sband = local->hw.wiphy->bands[band];
1054
1055         mask = params->sta_flags_mask;
1056         set = params->sta_flags_set;
1057
1058         if (ieee80211_vif_is_mesh(&sdata->vif)) {
1059                 /*
1060                  * In mesh mode, ASSOCIATED isn't part of the nl80211
1061                  * API but must follow AUTHENTICATED for driver state.
1062                  */
1063                 if (mask & BIT(NL80211_STA_FLAG_AUTHENTICATED))
1064                         mask |= BIT(NL80211_STA_FLAG_ASSOCIATED);
1065                 if (set & BIT(NL80211_STA_FLAG_AUTHENTICATED))
1066                         set |= BIT(NL80211_STA_FLAG_ASSOCIATED);
1067         } else if (test_sta_flag(sta, WLAN_STA_TDLS_PEER)) {
1068                 /*
1069                  * TDLS -- everything follows authorized, but
1070                  * only becoming authorized is possible, not
1071                  * going back
1072                  */
1073                 if (set & BIT(NL80211_STA_FLAG_AUTHORIZED)) {
1074                         set |= BIT(NL80211_STA_FLAG_AUTHENTICATED) |
1075                                BIT(NL80211_STA_FLAG_ASSOCIATED);
1076                         mask |= BIT(NL80211_STA_FLAG_AUTHENTICATED) |
1077                                 BIT(NL80211_STA_FLAG_ASSOCIATED);
1078                 }
1079         }
1080
1081         if (mask & BIT(NL80211_STA_FLAG_WME) &&
1082             local->hw.queues >= IEEE80211_NUM_ACS)
1083                 sta->sta.wme = set & BIT(NL80211_STA_FLAG_WME);
1084
1085         /* auth flags will be set later for TDLS,
1086          * and for unassociated stations that move to assocaited */
1087         if (!test_sta_flag(sta, WLAN_STA_TDLS_PEER) &&
1088             !((mask & BIT(NL80211_STA_FLAG_ASSOCIATED)) &&
1089               (set & BIT(NL80211_STA_FLAG_ASSOCIATED)))) {
1090                 ret = sta_apply_auth_flags(local, sta, mask, set);
1091                 if (ret)
1092                         return ret;
1093         }
1094
1095         if (mask & BIT(NL80211_STA_FLAG_SHORT_PREAMBLE)) {
1096                 if (set & BIT(NL80211_STA_FLAG_SHORT_PREAMBLE))
1097                         set_sta_flag(sta, WLAN_STA_SHORT_PREAMBLE);
1098                 else
1099                         clear_sta_flag(sta, WLAN_STA_SHORT_PREAMBLE);
1100         }
1101
1102         if (mask & BIT(NL80211_STA_FLAG_MFP)) {
1103                 sta->sta.mfp = !!(set & BIT(NL80211_STA_FLAG_MFP));
1104                 if (set & BIT(NL80211_STA_FLAG_MFP))
1105                         set_sta_flag(sta, WLAN_STA_MFP);
1106                 else
1107                         clear_sta_flag(sta, WLAN_STA_MFP);
1108         }
1109
1110         if (mask & BIT(NL80211_STA_FLAG_TDLS_PEER)) {
1111                 if (set & BIT(NL80211_STA_FLAG_TDLS_PEER))
1112                         set_sta_flag(sta, WLAN_STA_TDLS_PEER);
1113                 else
1114                         clear_sta_flag(sta, WLAN_STA_TDLS_PEER);
1115         }
1116
1117         /* mark TDLS channel switch support, if the AP allows it */
1118         if (test_sta_flag(sta, WLAN_STA_TDLS_PEER) &&
1119             !sdata->u.mgd.tdls_chan_switch_prohibited &&
1120             params->ext_capab_len >= 4 &&
1121             params->ext_capab[3] & WLAN_EXT_CAPA4_TDLS_CHAN_SWITCH)
1122                 set_sta_flag(sta, WLAN_STA_TDLS_CHAN_SWITCH);
1123
1124         if (test_sta_flag(sta, WLAN_STA_TDLS_PEER) &&
1125             !sdata->u.mgd.tdls_wider_bw_prohibited &&
1126             ieee80211_hw_check(&local->hw, TDLS_WIDER_BW) &&
1127             params->ext_capab_len >= 8 &&
1128             params->ext_capab[7] & WLAN_EXT_CAPA8_TDLS_WIDE_BW_ENABLED)
1129                 set_sta_flag(sta, WLAN_STA_TDLS_WIDER_BW);
1130
1131         if (params->sta_modify_mask & STATION_PARAM_APPLY_UAPSD) {
1132                 sta->sta.uapsd_queues = params->uapsd_queues;
1133                 sta->sta.max_sp = params->max_sp;
1134         }
1135
1136         /* The sender might not have sent the last bit, consider it to be 0 */
1137         if (params->ext_capab_len >= 8) {
1138                 u8 val = (params->ext_capab[7] &
1139                           WLAN_EXT_CAPA8_MAX_MSDU_IN_AMSDU_LSB) >> 7;
1140
1141                 /* we did get all the bits, take the MSB as well */
1142                 if (params->ext_capab_len >= 9) {
1143                         u8 val_msb = params->ext_capab[8] &
1144                                 WLAN_EXT_CAPA9_MAX_MSDU_IN_AMSDU_MSB;
1145                         val_msb <<= 1;
1146                         val |= val_msb;
1147                 }
1148
1149                 switch (val) {
1150                 case 1:
1151                         sta->sta.max_amsdu_subframes = 32;
1152                         break;
1153                 case 2:
1154                         sta->sta.max_amsdu_subframes = 16;
1155                         break;
1156                 case 3:
1157                         sta->sta.max_amsdu_subframes = 8;
1158                         break;
1159                 default:
1160                         sta->sta.max_amsdu_subframes = 0;
1161                 }
1162         }
1163
1164         /*
1165          * cfg80211 validates this (1-2007) and allows setting the AID
1166          * only when creating a new station entry
1167          */
1168         if (params->aid)
1169                 sta->sta.aid = params->aid;
1170
1171         /*
1172          * Some of the following updates would be racy if called on an
1173          * existing station, via ieee80211_change_station(). However,
1174          * all such changes are rejected by cfg80211 except for updates
1175          * changing the supported rates on an existing but not yet used
1176          * TDLS peer.
1177          */
1178
1179         if (params->listen_interval >= 0)
1180                 sta->listen_interval = params->listen_interval;
1181
1182         if (params->supported_rates) {
1183                 ieee80211_parse_bitrates(&sdata->vif.bss_conf.chandef,
1184                                          sband, params->supported_rates,
1185                                          params->supported_rates_len,
1186                                          &sta->sta.supp_rates[band]);
1187         }
1188
1189         if (params->ht_capa)
1190                 ieee80211_ht_cap_ie_to_sta_ht_cap(sdata, sband,
1191                                                   params->ht_capa, sta);
1192
1193         /* VHT can override some HT caps such as the A-MSDU max length */
1194         if (params->vht_capa)
1195                 ieee80211_vht_cap_ie_to_sta_vht_cap(sdata, sband,
1196                                                     params->vht_capa, sta);
1197
1198         if (params->opmode_notif_used) {
1199                 /* returned value is only needed for rc update, but the
1200                  * rc isn't initialized here yet, so ignore it
1201                  */
1202                 __ieee80211_vht_handle_opmode(sdata, sta,
1203                                               params->opmode_notif, band);
1204         }
1205
1206         if (params->support_p2p_ps >= 0)
1207                 sta->sta.support_p2p_ps = params->support_p2p_ps;
1208
1209         if (ieee80211_vif_is_mesh(&sdata->vif))
1210                 sta_apply_mesh_params(local, sta, params);
1211
1212         /* set the STA state after all sta info from usermode has been set */
1213         if (test_sta_flag(sta, WLAN_STA_TDLS_PEER) ||
1214             set & BIT(NL80211_STA_FLAG_ASSOCIATED)) {
1215                 ret = sta_apply_auth_flags(local, sta, mask, set);
1216                 if (ret)
1217                         return ret;
1218         }
1219
1220         return 0;
1221 }
1222
1223 static int ieee80211_add_station(struct wiphy *wiphy, struct net_device *dev,
1224                                  const u8 *mac,
1225                                  struct station_parameters *params)
1226 {
1227         struct ieee80211_local *local = wiphy_priv(wiphy);
1228         struct sta_info *sta;
1229         struct ieee80211_sub_if_data *sdata;
1230         int err;
1231         int layer2_update;
1232
1233         if (params->vlan) {
1234                 sdata = IEEE80211_DEV_TO_SUB_IF(params->vlan);
1235
1236                 if (sdata->vif.type != NL80211_IFTYPE_AP_VLAN &&
1237                     sdata->vif.type != NL80211_IFTYPE_AP)
1238                         return -EINVAL;
1239         } else
1240                 sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1241
1242         if (ether_addr_equal(mac, sdata->vif.addr))
1243                 return -EINVAL;
1244
1245         if (is_multicast_ether_addr(mac))
1246                 return -EINVAL;
1247
1248         sta = sta_info_alloc(sdata, mac, GFP_KERNEL);
1249         if (!sta)
1250                 return -ENOMEM;
1251
1252         if (params->sta_flags_set & BIT(NL80211_STA_FLAG_TDLS_PEER))
1253                 sta->sta.tdls = true;
1254
1255         err = sta_apply_parameters(local, sta, params);
1256         if (err) {
1257                 sta_info_free(local, sta);
1258                 return err;
1259         }
1260
1261         /*
1262          * for TDLS and for unassociated station, rate control should be
1263          * initialized only when rates are known and station is marked
1264          * authorized/associated
1265          */
1266         if (!test_sta_flag(sta, WLAN_STA_TDLS_PEER) &&
1267             test_sta_flag(sta, WLAN_STA_ASSOC))
1268                 rate_control_rate_init(sta);
1269
1270         layer2_update = sdata->vif.type == NL80211_IFTYPE_AP_VLAN ||
1271                 sdata->vif.type == NL80211_IFTYPE_AP;
1272
1273         err = sta_info_insert_rcu(sta);
1274         if (err) {
1275                 rcu_read_unlock();
1276                 return err;
1277         }
1278
1279         if (layer2_update)
1280                 ieee80211_send_layer2_update(sta);
1281
1282         rcu_read_unlock();
1283
1284         return 0;
1285 }
1286
1287 static int ieee80211_del_station(struct wiphy *wiphy, struct net_device *dev,
1288                                  struct station_del_parameters *params)
1289 {
1290         struct ieee80211_sub_if_data *sdata;
1291
1292         sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1293
1294         if (params->mac)
1295                 return sta_info_destroy_addr_bss(sdata, params->mac);
1296
1297         sta_info_flush(sdata);
1298         return 0;
1299 }
1300
1301 static int ieee80211_change_station(struct wiphy *wiphy,
1302                                     struct net_device *dev, const u8 *mac,
1303                                     struct station_parameters *params)
1304 {
1305         struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1306         struct ieee80211_local *local = wiphy_priv(wiphy);
1307         struct sta_info *sta;
1308         struct ieee80211_sub_if_data *vlansdata;
1309         enum cfg80211_station_type statype;
1310         int err;
1311
1312         mutex_lock(&local->sta_mtx);
1313
1314         sta = sta_info_get_bss(sdata, mac);
1315         if (!sta) {
1316                 err = -ENOENT;
1317                 goto out_err;
1318         }
1319
1320         switch (sdata->vif.type) {
1321         case NL80211_IFTYPE_MESH_POINT:
1322                 if (sdata->u.mesh.user_mpm)
1323                         statype = CFG80211_STA_MESH_PEER_USER;
1324                 else
1325                         statype = CFG80211_STA_MESH_PEER_KERNEL;
1326                 break;
1327         case NL80211_IFTYPE_ADHOC:
1328                 statype = CFG80211_STA_IBSS;
1329                 break;
1330         case NL80211_IFTYPE_STATION:
1331                 if (!test_sta_flag(sta, WLAN_STA_TDLS_PEER)) {
1332                         statype = CFG80211_STA_AP_STA;
1333                         break;
1334                 }
1335                 if (test_sta_flag(sta, WLAN_STA_AUTHORIZED))
1336                         statype = CFG80211_STA_TDLS_PEER_ACTIVE;
1337                 else
1338                         statype = CFG80211_STA_TDLS_PEER_SETUP;
1339                 break;
1340         case NL80211_IFTYPE_AP:
1341         case NL80211_IFTYPE_AP_VLAN:
1342                 if (test_sta_flag(sta, WLAN_STA_ASSOC))
1343                         statype = CFG80211_STA_AP_CLIENT;
1344                 else
1345                         statype = CFG80211_STA_AP_CLIENT_UNASSOC;
1346                 break;
1347         default:
1348                 err = -EOPNOTSUPP;
1349                 goto out_err;
1350         }
1351
1352         err = cfg80211_check_station_change(wiphy, params, statype);
1353         if (err)
1354                 goto out_err;
1355
1356         if (params->vlan && params->vlan != sta->sdata->dev) {
1357                 bool prev_4addr = false;
1358                 bool new_4addr = false;
1359
1360                 vlansdata = IEEE80211_DEV_TO_SUB_IF(params->vlan);
1361
1362                 if (params->vlan->ieee80211_ptr->use_4addr) {
1363                         if (vlansdata->u.vlan.sta) {
1364                                 err = -EBUSY;
1365                                 goto out_err;
1366                         }
1367
1368                         rcu_assign_pointer(vlansdata->u.vlan.sta, sta);
1369                         new_4addr = true;
1370                 }
1371
1372                 if (sta->sdata->vif.type == NL80211_IFTYPE_AP_VLAN &&
1373                     sta->sdata->u.vlan.sta) {
1374                         RCU_INIT_POINTER(sta->sdata->u.vlan.sta, NULL);
1375                         prev_4addr = true;
1376                 }
1377
1378                 sta->sdata = vlansdata;
1379                 ieee80211_check_fast_xmit(sta);
1380
1381                 if (sta->sta_state == IEEE80211_STA_AUTHORIZED &&
1382                     prev_4addr != new_4addr) {
1383                         if (new_4addr)
1384                                 atomic_dec(&sta->sdata->bss->num_mcast_sta);
1385                         else
1386                                 atomic_inc(&sta->sdata->bss->num_mcast_sta);
1387                 }
1388
1389                 ieee80211_send_layer2_update(sta);
1390         }
1391
1392         err = sta_apply_parameters(local, sta, params);
1393         if (err)
1394                 goto out_err;
1395
1396         mutex_unlock(&local->sta_mtx);
1397
1398         if ((sdata->vif.type == NL80211_IFTYPE_AP ||
1399              sdata->vif.type == NL80211_IFTYPE_AP_VLAN) &&
1400             sta->known_smps_mode != sta->sdata->bss->req_smps &&
1401             test_sta_flag(sta, WLAN_STA_AUTHORIZED) &&
1402             sta_info_tx_streams(sta) != 1) {
1403                 ht_dbg(sta->sdata,
1404                        "%pM just authorized and MIMO capable - update SMPS\n",
1405                        sta->sta.addr);
1406                 ieee80211_send_smps_action(sta->sdata,
1407                         sta->sdata->bss->req_smps,
1408                         sta->sta.addr,
1409                         sta->sdata->vif.bss_conf.bssid);
1410         }
1411
1412         if (sdata->vif.type == NL80211_IFTYPE_STATION &&
1413             params->sta_flags_mask & BIT(NL80211_STA_FLAG_AUTHORIZED)) {
1414                 ieee80211_recalc_ps(local);
1415                 ieee80211_recalc_ps_vif(sdata);
1416         }
1417
1418         return 0;
1419 out_err:
1420         mutex_unlock(&local->sta_mtx);
1421         return err;
1422 }
1423
1424 #ifdef CONFIG_MAC80211_MESH
1425 static int ieee80211_add_mpath(struct wiphy *wiphy, struct net_device *dev,
1426                                const u8 *dst, const u8 *next_hop)
1427 {
1428         struct ieee80211_sub_if_data *sdata;
1429         struct mesh_path *mpath;
1430         struct sta_info *sta;
1431
1432         sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1433
1434         rcu_read_lock();
1435         sta = sta_info_get(sdata, next_hop);
1436         if (!sta) {
1437                 rcu_read_unlock();
1438                 return -ENOENT;
1439         }
1440
1441         mpath = mesh_path_add(sdata, dst);
1442         if (IS_ERR(mpath)) {
1443                 rcu_read_unlock();
1444                 return PTR_ERR(mpath);
1445         }
1446
1447         mesh_path_fix_nexthop(mpath, sta);
1448
1449         rcu_read_unlock();
1450         return 0;
1451 }
1452
1453 static int ieee80211_del_mpath(struct wiphy *wiphy, struct net_device *dev,
1454                                const u8 *dst)
1455 {
1456         struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1457
1458         if (dst)
1459                 return mesh_path_del(sdata, dst);
1460
1461         mesh_path_flush_by_iface(sdata);
1462         return 0;
1463 }
1464
1465 static int ieee80211_change_mpath(struct wiphy *wiphy, struct net_device *dev,
1466                                   const u8 *dst, const u8 *next_hop)
1467 {
1468         struct ieee80211_sub_if_data *sdata;
1469         struct mesh_path *mpath;
1470         struct sta_info *sta;
1471
1472         sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1473
1474         rcu_read_lock();
1475
1476         sta = sta_info_get(sdata, next_hop);
1477         if (!sta) {
1478                 rcu_read_unlock();
1479                 return -ENOENT;
1480         }
1481
1482         mpath = mesh_path_lookup(sdata, dst);
1483         if (!mpath) {
1484                 rcu_read_unlock();
1485                 return -ENOENT;
1486         }
1487
1488         mesh_path_fix_nexthop(mpath, sta);
1489
1490         rcu_read_unlock();
1491         return 0;
1492 }
1493
1494 static void mpath_set_pinfo(struct mesh_path *mpath, u8 *next_hop,
1495                             struct mpath_info *pinfo)
1496 {
1497         struct sta_info *next_hop_sta = rcu_dereference(mpath->next_hop);
1498
1499         if (next_hop_sta)
1500                 memcpy(next_hop, next_hop_sta->sta.addr, ETH_ALEN);
1501         else
1502                 eth_zero_addr(next_hop);
1503
1504         memset(pinfo, 0, sizeof(*pinfo));
1505
1506         pinfo->generation = mpath->sdata->u.mesh.mesh_paths_generation;
1507
1508         pinfo->filled = MPATH_INFO_FRAME_QLEN |
1509                         MPATH_INFO_SN |
1510                         MPATH_INFO_METRIC |
1511                         MPATH_INFO_EXPTIME |
1512                         MPATH_INFO_DISCOVERY_TIMEOUT |
1513                         MPATH_INFO_DISCOVERY_RETRIES |
1514                         MPATH_INFO_FLAGS;
1515
1516         pinfo->frame_qlen = mpath->frame_queue.qlen;
1517         pinfo->sn = mpath->sn;
1518         pinfo->metric = mpath->metric;
1519         if (time_before(jiffies, mpath->exp_time))
1520                 pinfo->exptime = jiffies_to_msecs(mpath->exp_time - jiffies);
1521         pinfo->discovery_timeout =
1522                         jiffies_to_msecs(mpath->discovery_timeout);
1523         pinfo->discovery_retries = mpath->discovery_retries;
1524         if (mpath->flags & MESH_PATH_ACTIVE)
1525                 pinfo->flags |= NL80211_MPATH_FLAG_ACTIVE;
1526         if (mpath->flags & MESH_PATH_RESOLVING)
1527                 pinfo->flags |= NL80211_MPATH_FLAG_RESOLVING;
1528         if (mpath->flags & MESH_PATH_SN_VALID)
1529                 pinfo->flags |= NL80211_MPATH_FLAG_SN_VALID;
1530         if (mpath->flags & MESH_PATH_FIXED)
1531                 pinfo->flags |= NL80211_MPATH_FLAG_FIXED;
1532         if (mpath->flags & MESH_PATH_RESOLVED)
1533                 pinfo->flags |= NL80211_MPATH_FLAG_RESOLVED;
1534 }
1535
1536 static int ieee80211_get_mpath(struct wiphy *wiphy, struct net_device *dev,
1537                                u8 *dst, u8 *next_hop, struct mpath_info *pinfo)
1538
1539 {
1540         struct ieee80211_sub_if_data *sdata;
1541         struct mesh_path *mpath;
1542
1543         sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1544
1545         rcu_read_lock();
1546         mpath = mesh_path_lookup(sdata, dst);
1547         if (!mpath) {
1548                 rcu_read_unlock();
1549                 return -ENOENT;
1550         }
1551         memcpy(dst, mpath->dst, ETH_ALEN);
1552         mpath_set_pinfo(mpath, next_hop, pinfo);
1553         rcu_read_unlock();
1554         return 0;
1555 }
1556
1557 static int ieee80211_dump_mpath(struct wiphy *wiphy, struct net_device *dev,
1558                                 int idx, u8 *dst, u8 *next_hop,
1559                                 struct mpath_info *pinfo)
1560 {
1561         struct ieee80211_sub_if_data *sdata;
1562         struct mesh_path *mpath;
1563
1564         sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1565
1566         rcu_read_lock();
1567         mpath = mesh_path_lookup_by_idx(sdata, idx);
1568         if (!mpath) {
1569                 rcu_read_unlock();
1570                 return -ENOENT;
1571         }
1572         memcpy(dst, mpath->dst, ETH_ALEN);
1573         mpath_set_pinfo(mpath, next_hop, pinfo);
1574         rcu_read_unlock();
1575         return 0;
1576 }
1577
1578 static void mpp_set_pinfo(struct mesh_path *mpath, u8 *mpp,
1579                           struct mpath_info *pinfo)
1580 {
1581         memset(pinfo, 0, sizeof(*pinfo));
1582         memcpy(mpp, mpath->mpp, ETH_ALEN);
1583
1584         pinfo->generation = mpath->sdata->u.mesh.mpp_paths_generation;
1585 }
1586
1587 static int ieee80211_get_mpp(struct wiphy *wiphy, struct net_device *dev,
1588                              u8 *dst, u8 *mpp, struct mpath_info *pinfo)
1589
1590 {
1591         struct ieee80211_sub_if_data *sdata;
1592         struct mesh_path *mpath;
1593
1594         sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1595
1596         rcu_read_lock();
1597         mpath = mpp_path_lookup(sdata, dst);
1598         if (!mpath) {
1599                 rcu_read_unlock();
1600                 return -ENOENT;
1601         }
1602         memcpy(dst, mpath->dst, ETH_ALEN);
1603         mpp_set_pinfo(mpath, mpp, pinfo);
1604         rcu_read_unlock();
1605         return 0;
1606 }
1607
1608 static int ieee80211_dump_mpp(struct wiphy *wiphy, struct net_device *dev,
1609                               int idx, u8 *dst, u8 *mpp,
1610                               struct mpath_info *pinfo)
1611 {
1612         struct ieee80211_sub_if_data *sdata;
1613         struct mesh_path *mpath;
1614
1615         sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1616
1617         rcu_read_lock();
1618         mpath = mpp_path_lookup_by_idx(sdata, idx);
1619         if (!mpath) {
1620                 rcu_read_unlock();
1621                 return -ENOENT;
1622         }
1623         memcpy(dst, mpath->dst, ETH_ALEN);
1624         mpp_set_pinfo(mpath, mpp, pinfo);
1625         rcu_read_unlock();
1626         return 0;
1627 }
1628
1629 static int ieee80211_get_mesh_config(struct wiphy *wiphy,
1630                                 struct net_device *dev,
1631                                 struct mesh_config *conf)
1632 {
1633         struct ieee80211_sub_if_data *sdata;
1634         sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1635
1636         memcpy(conf, &(sdata->u.mesh.mshcfg), sizeof(struct mesh_config));
1637         return 0;
1638 }
1639
1640 static inline bool _chg_mesh_attr(enum nl80211_meshconf_params parm, u32 mask)
1641 {
1642         return (mask >> (parm-1)) & 0x1;
1643 }
1644
1645 static int copy_mesh_setup(struct ieee80211_if_mesh *ifmsh,
1646                 const struct mesh_setup *setup)
1647 {
1648         u8 *new_ie;
1649         const u8 *old_ie;
1650         struct ieee80211_sub_if_data *sdata = container_of(ifmsh,
1651                                         struct ieee80211_sub_if_data, u.mesh);
1652
1653         /* allocate information elements */
1654         new_ie = NULL;
1655         old_ie = ifmsh->ie;
1656
1657         if (setup->ie_len) {
1658                 new_ie = kmemdup(setup->ie, setup->ie_len,
1659                                 GFP_KERNEL);
1660                 if (!new_ie)
1661                         return -ENOMEM;
1662         }
1663         ifmsh->ie_len = setup->ie_len;
1664         ifmsh->ie = new_ie;
1665         kfree(old_ie);
1666
1667         /* now copy the rest of the setup parameters */
1668         ifmsh->mesh_id_len = setup->mesh_id_len;
1669         memcpy(ifmsh->mesh_id, setup->mesh_id, ifmsh->mesh_id_len);
1670         ifmsh->mesh_sp_id = setup->sync_method;
1671         ifmsh->mesh_pp_id = setup->path_sel_proto;
1672         ifmsh->mesh_pm_id = setup->path_metric;
1673         ifmsh->user_mpm = setup->user_mpm;
1674         ifmsh->mesh_auth_id = setup->auth_id;
1675         ifmsh->security = IEEE80211_MESH_SEC_NONE;
1676         if (setup->is_authenticated)
1677                 ifmsh->security |= IEEE80211_MESH_SEC_AUTHED;
1678         if (setup->is_secure)
1679                 ifmsh->security |= IEEE80211_MESH_SEC_SECURED;
1680
1681         /* mcast rate setting in Mesh Node */
1682         memcpy(sdata->vif.bss_conf.mcast_rate, setup->mcast_rate,
1683                                                 sizeof(setup->mcast_rate));
1684         sdata->vif.bss_conf.basic_rates = setup->basic_rates;
1685
1686         sdata->vif.bss_conf.beacon_int = setup->beacon_interval;
1687         sdata->vif.bss_conf.dtim_period = setup->dtim_period;
1688
1689         return 0;
1690 }
1691
1692 static int ieee80211_update_mesh_config(struct wiphy *wiphy,
1693                                         struct net_device *dev, u32 mask,
1694                                         const struct mesh_config *nconf)
1695 {
1696         struct mesh_config *conf;
1697         struct ieee80211_sub_if_data *sdata;
1698         struct ieee80211_if_mesh *ifmsh;
1699
1700         sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1701         ifmsh = &sdata->u.mesh;
1702
1703         /* Set the config options which we are interested in setting */
1704         conf = &(sdata->u.mesh.mshcfg);
1705         if (_chg_mesh_attr(NL80211_MESHCONF_RETRY_TIMEOUT, mask))
1706                 conf->dot11MeshRetryTimeout = nconf->dot11MeshRetryTimeout;
1707         if (_chg_mesh_attr(NL80211_MESHCONF_CONFIRM_TIMEOUT, mask))
1708                 conf->dot11MeshConfirmTimeout = nconf->dot11MeshConfirmTimeout;
1709         if (_chg_mesh_attr(NL80211_MESHCONF_HOLDING_TIMEOUT, mask))
1710                 conf->dot11MeshHoldingTimeout = nconf->dot11MeshHoldingTimeout;
1711         if (_chg_mesh_attr(NL80211_MESHCONF_MAX_PEER_LINKS, mask))
1712                 conf->dot11MeshMaxPeerLinks = nconf->dot11MeshMaxPeerLinks;
1713         if (_chg_mesh_attr(NL80211_MESHCONF_MAX_RETRIES, mask))
1714                 conf->dot11MeshMaxRetries = nconf->dot11MeshMaxRetries;
1715         if (_chg_mesh_attr(NL80211_MESHCONF_TTL, mask))
1716                 conf->dot11MeshTTL = nconf->dot11MeshTTL;
1717         if (_chg_mesh_attr(NL80211_MESHCONF_ELEMENT_TTL, mask))
1718                 conf->element_ttl = nconf->element_ttl;
1719         if (_chg_mesh_attr(NL80211_MESHCONF_AUTO_OPEN_PLINKS, mask)) {
1720                 if (ifmsh->user_mpm)
1721                         return -EBUSY;
1722                 conf->auto_open_plinks = nconf->auto_open_plinks;
1723         }
1724         if (_chg_mesh_attr(NL80211_MESHCONF_SYNC_OFFSET_MAX_NEIGHBOR, mask))
1725                 conf->dot11MeshNbrOffsetMaxNeighbor =
1726                         nconf->dot11MeshNbrOffsetMaxNeighbor;
1727         if (_chg_mesh_attr(NL80211_MESHCONF_HWMP_MAX_PREQ_RETRIES, mask))
1728                 conf->dot11MeshHWMPmaxPREQretries =
1729                         nconf->dot11MeshHWMPmaxPREQretries;
1730         if (_chg_mesh_attr(NL80211_MESHCONF_PATH_REFRESH_TIME, mask))
1731                 conf->path_refresh_time = nconf->path_refresh_time;
1732         if (_chg_mesh_attr(NL80211_MESHCONF_MIN_DISCOVERY_TIMEOUT, mask))
1733                 conf->min_discovery_timeout = nconf->min_discovery_timeout;
1734         if (_chg_mesh_attr(NL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT, mask))
1735                 conf->dot11MeshHWMPactivePathTimeout =
1736                         nconf->dot11MeshHWMPactivePathTimeout;
1737         if (_chg_mesh_attr(NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL, mask))
1738                 conf->dot11MeshHWMPpreqMinInterval =
1739                         nconf->dot11MeshHWMPpreqMinInterval;
1740         if (_chg_mesh_attr(NL80211_MESHCONF_HWMP_PERR_MIN_INTERVAL, mask))
1741                 conf->dot11MeshHWMPperrMinInterval =
1742                         nconf->dot11MeshHWMPperrMinInterval;
1743         if (_chg_mesh_attr(NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME,
1744                            mask))
1745                 conf->dot11MeshHWMPnetDiameterTraversalTime =
1746                         nconf->dot11MeshHWMPnetDiameterTraversalTime;
1747         if (_chg_mesh_attr(NL80211_MESHCONF_HWMP_ROOTMODE, mask)) {
1748                 conf->dot11MeshHWMPRootMode = nconf->dot11MeshHWMPRootMode;
1749                 ieee80211_mesh_root_setup(ifmsh);
1750         }
1751         if (_chg_mesh_attr(NL80211_MESHCONF_GATE_ANNOUNCEMENTS, mask)) {
1752                 /* our current gate announcement implementation rides on root
1753                  * announcements, so require this ifmsh to also be a root node
1754                  * */
1755                 if (nconf->dot11MeshGateAnnouncementProtocol &&
1756                     !(conf->dot11MeshHWMPRootMode > IEEE80211_ROOTMODE_ROOT)) {
1757                         conf->dot11MeshHWMPRootMode = IEEE80211_PROACTIVE_RANN;
1758                         ieee80211_mesh_root_setup(ifmsh);
1759                 }
1760                 conf->dot11MeshGateAnnouncementProtocol =
1761                         nconf->dot11MeshGateAnnouncementProtocol;
1762         }
1763         if (_chg_mesh_attr(NL80211_MESHCONF_HWMP_RANN_INTERVAL, mask))
1764                 conf->dot11MeshHWMPRannInterval =
1765                         nconf->dot11MeshHWMPRannInterval;
1766         if (_chg_mesh_attr(NL80211_MESHCONF_FORWARDING, mask))
1767                 conf->dot11MeshForwarding = nconf->dot11MeshForwarding;
1768         if (_chg_mesh_attr(NL80211_MESHCONF_RSSI_THRESHOLD, mask)) {
1769                 /* our RSSI threshold implementation is supported only for
1770                  * devices that report signal in dBm.
1771                  */
1772                 if (!ieee80211_hw_check(&sdata->local->hw, SIGNAL_DBM))
1773                         return -ENOTSUPP;
1774                 conf->rssi_threshold = nconf->rssi_threshold;
1775         }
1776         if (_chg_mesh_attr(NL80211_MESHCONF_HT_OPMODE, mask)) {
1777                 conf->ht_opmode = nconf->ht_opmode;
1778                 sdata->vif.bss_conf.ht_operation_mode = nconf->ht_opmode;
1779                 ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_HT);
1780         }
1781         if (_chg_mesh_attr(NL80211_MESHCONF_HWMP_PATH_TO_ROOT_TIMEOUT, mask))
1782                 conf->dot11MeshHWMPactivePathToRootTimeout =
1783                         nconf->dot11MeshHWMPactivePathToRootTimeout;
1784         if (_chg_mesh_attr(NL80211_MESHCONF_HWMP_ROOT_INTERVAL, mask))
1785                 conf->dot11MeshHWMProotInterval =
1786                         nconf->dot11MeshHWMProotInterval;
1787         if (_chg_mesh_attr(NL80211_MESHCONF_HWMP_CONFIRMATION_INTERVAL, mask))
1788                 conf->dot11MeshHWMPconfirmationInterval =
1789                         nconf->dot11MeshHWMPconfirmationInterval;
1790         if (_chg_mesh_attr(NL80211_MESHCONF_POWER_MODE, mask)) {
1791                 conf->power_mode = nconf->power_mode;
1792                 ieee80211_mps_local_status_update(sdata);
1793         }
1794         if (_chg_mesh_attr(NL80211_MESHCONF_AWAKE_WINDOW, mask))
1795                 conf->dot11MeshAwakeWindowDuration =
1796                         nconf->dot11MeshAwakeWindowDuration;
1797         if (_chg_mesh_attr(NL80211_MESHCONF_PLINK_TIMEOUT, mask))
1798                 conf->plink_timeout = nconf->plink_timeout;
1799         ieee80211_mbss_info_change_notify(sdata, BSS_CHANGED_BEACON);
1800         return 0;
1801 }
1802
1803 static int ieee80211_join_mesh(struct wiphy *wiphy, struct net_device *dev,
1804                                const struct mesh_config *conf,
1805                                const struct mesh_setup *setup)
1806 {
1807         struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1808         struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh;
1809         int err;
1810
1811         memcpy(&ifmsh->mshcfg, conf, sizeof(struct mesh_config));
1812         err = copy_mesh_setup(ifmsh, setup);
1813         if (err)
1814                 return err;
1815
1816         /* can mesh use other SMPS modes? */
1817         sdata->smps_mode = IEEE80211_SMPS_OFF;
1818         sdata->needed_rx_chains = sdata->local->rx_chains;
1819
1820         mutex_lock(&sdata->local->mtx);
1821         err = ieee80211_vif_use_channel(sdata, &setup->chandef,
1822                                         IEEE80211_CHANCTX_SHARED);
1823         mutex_unlock(&sdata->local->mtx);
1824         if (err)
1825                 return err;
1826
1827         return ieee80211_start_mesh(sdata);
1828 }
1829
1830 static int ieee80211_leave_mesh(struct wiphy *wiphy, struct net_device *dev)
1831 {
1832         struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1833
1834         ieee80211_stop_mesh(sdata);
1835         mutex_lock(&sdata->local->mtx);
1836         ieee80211_vif_release_channel(sdata);
1837         mutex_unlock(&sdata->local->mtx);
1838
1839         return 0;
1840 }
1841 #endif
1842
1843 static int ieee80211_change_bss(struct wiphy *wiphy,
1844                                 struct net_device *dev,
1845                                 struct bss_parameters *params)
1846 {
1847         struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1848         enum ieee80211_band band;
1849         u32 changed = 0;
1850
1851         if (!sdata_dereference(sdata->u.ap.beacon, sdata))
1852                 return -ENOENT;
1853
1854         band = ieee80211_get_sdata_band(sdata);
1855
1856         if (params->use_cts_prot >= 0) {
1857                 sdata->vif.bss_conf.use_cts_prot = params->use_cts_prot;
1858                 changed |= BSS_CHANGED_ERP_CTS_PROT;
1859         }
1860         if (params->use_short_preamble >= 0) {
1861                 sdata->vif.bss_conf.use_short_preamble =
1862                         params->use_short_preamble;
1863                 changed |= BSS_CHANGED_ERP_PREAMBLE;
1864         }
1865
1866         if (!sdata->vif.bss_conf.use_short_slot &&
1867             band == IEEE80211_BAND_5GHZ) {
1868                 sdata->vif.bss_conf.use_short_slot = true;
1869                 changed |= BSS_CHANGED_ERP_SLOT;
1870         }
1871
1872         if (params->use_short_slot_time >= 0) {
1873                 sdata->vif.bss_conf.use_short_slot =
1874                         params->use_short_slot_time;
1875                 changed |= BSS_CHANGED_ERP_SLOT;
1876         }
1877
1878         if (params->basic_rates) {
1879                 ieee80211_parse_bitrates(&sdata->vif.bss_conf.chandef,
1880                                          wiphy->bands[band],
1881                                          params->basic_rates,
1882                                          params->basic_rates_len,
1883                                          &sdata->vif.bss_conf.basic_rates);
1884                 changed |= BSS_CHANGED_BASIC_RATES;
1885         }
1886
1887         if (params->ap_isolate >= 0) {
1888                 if (params->ap_isolate)
1889                         sdata->flags |= IEEE80211_SDATA_DONT_BRIDGE_PACKETS;
1890                 else
1891                         sdata->flags &= ~IEEE80211_SDATA_DONT_BRIDGE_PACKETS;
1892         }
1893
1894         if (params->ht_opmode >= 0) {
1895                 sdata->vif.bss_conf.ht_operation_mode =
1896                         (u16) params->ht_opmode;
1897                 changed |= BSS_CHANGED_HT;
1898         }
1899
1900         if (params->p2p_ctwindow >= 0) {
1901                 sdata->vif.bss_conf.p2p_noa_attr.oppps_ctwindow &=
1902                                         ~IEEE80211_P2P_OPPPS_CTWINDOW_MASK;
1903                 sdata->vif.bss_conf.p2p_noa_attr.oppps_ctwindow |=
1904                         params->p2p_ctwindow & IEEE80211_P2P_OPPPS_CTWINDOW_MASK;
1905                 changed |= BSS_CHANGED_P2P_PS;
1906         }
1907
1908         if (params->p2p_opp_ps > 0) {
1909                 sdata->vif.bss_conf.p2p_noa_attr.oppps_ctwindow |=
1910                                         IEEE80211_P2P_OPPPS_ENABLE_BIT;
1911                 changed |= BSS_CHANGED_P2P_PS;
1912         } else if (params->p2p_opp_ps == 0) {
1913                 sdata->vif.bss_conf.p2p_noa_attr.oppps_ctwindow &=
1914                                         ~IEEE80211_P2P_OPPPS_ENABLE_BIT;
1915                 changed |= BSS_CHANGED_P2P_PS;
1916         }
1917
1918         ieee80211_bss_info_change_notify(sdata, changed);
1919
1920         return 0;
1921 }
1922
1923 static int ieee80211_set_txq_params(struct wiphy *wiphy,
1924                                     struct net_device *dev,
1925                                     struct ieee80211_txq_params *params)
1926 {
1927         struct ieee80211_local *local = wiphy_priv(wiphy);
1928         struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1929         struct ieee80211_tx_queue_params p;
1930
1931         if (!local->ops->conf_tx)
1932                 return -EOPNOTSUPP;
1933
1934         if (local->hw.queues < IEEE80211_NUM_ACS)
1935                 return -EOPNOTSUPP;
1936
1937         memset(&p, 0, sizeof(p));
1938         p.aifs = params->aifs;
1939         p.cw_max = params->cwmax;
1940         p.cw_min = params->cwmin;
1941         p.txop = params->txop;
1942
1943         /*
1944          * Setting tx queue params disables u-apsd because it's only
1945          * called in master mode.
1946          */
1947         p.uapsd = false;
1948
1949         sdata->tx_conf[params->ac] = p;
1950         if (drv_conf_tx(local, sdata, params->ac, &p)) {
1951                 wiphy_debug(local->hw.wiphy,
1952                             "failed to set TX queue parameters for AC %d\n",
1953                             params->ac);
1954                 return -EINVAL;
1955         }
1956
1957         ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_QOS);
1958
1959         return 0;
1960 }
1961
1962 #ifdef CONFIG_PM
1963 static int ieee80211_suspend(struct wiphy *wiphy,
1964                              struct cfg80211_wowlan *wowlan)
1965 {
1966         return __ieee80211_suspend(wiphy_priv(wiphy), wowlan);
1967 }
1968
1969 static int ieee80211_resume(struct wiphy *wiphy)
1970 {
1971         return __ieee80211_resume(wiphy_priv(wiphy));
1972 }
1973 #else
1974 #define ieee80211_suspend NULL
1975 #define ieee80211_resume NULL
1976 #endif
1977
1978 static int ieee80211_scan(struct wiphy *wiphy,
1979                           struct cfg80211_scan_request *req)
1980 {
1981         struct ieee80211_sub_if_data *sdata;
1982
1983         sdata = IEEE80211_WDEV_TO_SUB_IF(req->wdev);
1984
1985         switch (ieee80211_vif_type_p2p(&sdata->vif)) {
1986         case NL80211_IFTYPE_STATION:
1987         case NL80211_IFTYPE_ADHOC:
1988         case NL80211_IFTYPE_MESH_POINT:
1989         case NL80211_IFTYPE_P2P_CLIENT:
1990         case NL80211_IFTYPE_P2P_DEVICE:
1991                 break;
1992         case NL80211_IFTYPE_P2P_GO:
1993                 if (sdata->local->ops->hw_scan)
1994                         break;
1995                 /*
1996                  * FIXME: implement NoA while scanning in software,
1997                  * for now fall through to allow scanning only when
1998                  * beaconing hasn't been configured yet
1999                  */
2000         case NL80211_IFTYPE_AP:
2001                 /*
2002                  * If the scan has been forced (and the driver supports
2003                  * forcing), don't care about being beaconing already.
2004                  * This will create problems to the attached stations (e.g. all
2005                  * the  frames sent while scanning on other channel will be
2006                  * lost)
2007                  */
2008                 if (sdata->u.ap.beacon &&
2009                     (!(wiphy->features & NL80211_FEATURE_AP_SCAN) ||
2010                      !(req->flags & NL80211_SCAN_FLAG_AP)))
2011                         return -EOPNOTSUPP;
2012                 break;
2013         default:
2014                 return -EOPNOTSUPP;
2015         }
2016
2017         return ieee80211_request_scan(sdata, req);
2018 }
2019
2020 static void ieee80211_abort_scan(struct wiphy *wiphy, struct wireless_dev *wdev)
2021 {
2022         ieee80211_scan_cancel(wiphy_priv(wiphy));
2023 }
2024
2025 static int
2026 ieee80211_sched_scan_start(struct wiphy *wiphy,
2027                            struct net_device *dev,
2028                            struct cfg80211_sched_scan_request *req)
2029 {
2030         struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2031
2032         if (!sdata->local->ops->sched_scan_start)
2033                 return -EOPNOTSUPP;
2034
2035         return ieee80211_request_sched_scan_start(sdata, req);
2036 }
2037
2038 static int
2039 ieee80211_sched_scan_stop(struct wiphy *wiphy, struct net_device *dev)
2040 {
2041         struct ieee80211_local *local = wiphy_priv(wiphy);
2042
2043         if (!local->ops->sched_scan_stop)
2044                 return -EOPNOTSUPP;
2045
2046         return ieee80211_request_sched_scan_stop(local);
2047 }
2048
2049 static int ieee80211_auth(struct wiphy *wiphy, struct net_device *dev,
2050                           struct cfg80211_auth_request *req)
2051 {
2052         return ieee80211_mgd_auth(IEEE80211_DEV_TO_SUB_IF(dev), req);
2053 }
2054
2055 static int ieee80211_assoc(struct wiphy *wiphy, struct net_device *dev,
2056                            struct cfg80211_assoc_request *req)
2057 {
2058         return ieee80211_mgd_assoc(IEEE80211_DEV_TO_SUB_IF(dev), req);
2059 }
2060
2061 static int ieee80211_deauth(struct wiphy *wiphy, struct net_device *dev,
2062                             struct cfg80211_deauth_request *req)
2063 {
2064         return ieee80211_mgd_deauth(IEEE80211_DEV_TO_SUB_IF(dev), req);
2065 }
2066
2067 static int ieee80211_disassoc(struct wiphy *wiphy, struct net_device *dev,
2068                               struct cfg80211_disassoc_request *req)
2069 {
2070         return ieee80211_mgd_disassoc(IEEE80211_DEV_TO_SUB_IF(dev), req);
2071 }
2072
2073 static int ieee80211_join_ibss(struct wiphy *wiphy, struct net_device *dev,
2074                                struct cfg80211_ibss_params *params)
2075 {
2076         return ieee80211_ibss_join(IEEE80211_DEV_TO_SUB_IF(dev), params);
2077 }
2078
2079 static int ieee80211_leave_ibss(struct wiphy *wiphy, struct net_device *dev)
2080 {
2081         return ieee80211_ibss_leave(IEEE80211_DEV_TO_SUB_IF(dev));
2082 }
2083
2084 static int ieee80211_join_ocb(struct wiphy *wiphy, struct net_device *dev,
2085                               struct ocb_setup *setup)
2086 {
2087         return ieee80211_ocb_join(IEEE80211_DEV_TO_SUB_IF(dev), setup);
2088 }
2089
2090 static int ieee80211_leave_ocb(struct wiphy *wiphy, struct net_device *dev)
2091 {
2092         return ieee80211_ocb_leave(IEEE80211_DEV_TO_SUB_IF(dev));
2093 }
2094
2095 static int ieee80211_set_mcast_rate(struct wiphy *wiphy, struct net_device *dev,
2096                                     int rate[IEEE80211_NUM_BANDS])
2097 {
2098         struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2099
2100         memcpy(sdata->vif.bss_conf.mcast_rate, rate,
2101                sizeof(int) * IEEE80211_NUM_BANDS);
2102
2103         return 0;
2104 }
2105
2106 static int ieee80211_set_wiphy_params(struct wiphy *wiphy, u32 changed)
2107 {
2108         struct ieee80211_local *local = wiphy_priv(wiphy);
2109         int err;
2110
2111         if (changed & WIPHY_PARAM_FRAG_THRESHOLD) {
2112                 ieee80211_check_fast_xmit_all(local);
2113
2114                 err = drv_set_frag_threshold(local, wiphy->frag_threshold);
2115
2116                 if (err) {
2117                         ieee80211_check_fast_xmit_all(local);
2118                         return err;
2119                 }
2120         }
2121
2122         if ((changed & WIPHY_PARAM_COVERAGE_CLASS) ||
2123             (changed & WIPHY_PARAM_DYN_ACK)) {
2124                 s16 coverage_class;
2125
2126                 coverage_class = changed & WIPHY_PARAM_COVERAGE_CLASS ?
2127                                         wiphy->coverage_class : -1;
2128                 err = drv_set_coverage_class(local, coverage_class);
2129
2130                 if (err)
2131                         return err;
2132         }
2133
2134         if (changed & WIPHY_PARAM_RTS_THRESHOLD) {
2135                 err = drv_set_rts_threshold(local, wiphy->rts_threshold);
2136
2137                 if (err)
2138                         return err;
2139         }
2140
2141         if (changed & WIPHY_PARAM_RETRY_SHORT) {
2142                 if (wiphy->retry_short > IEEE80211_MAX_TX_RETRY)
2143                         return -EINVAL;
2144                 local->hw.conf.short_frame_max_tx_count = wiphy->retry_short;
2145         }
2146         if (changed & WIPHY_PARAM_RETRY_LONG) {
2147                 if (wiphy->retry_long > IEEE80211_MAX_TX_RETRY)
2148                         return -EINVAL;
2149                 local->hw.conf.long_frame_max_tx_count = wiphy->retry_long;
2150         }
2151         if (changed &
2152             (WIPHY_PARAM_RETRY_SHORT | WIPHY_PARAM_RETRY_LONG))
2153                 ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_RETRY_LIMITS);
2154
2155         return 0;
2156 }
2157
2158 static int ieee80211_set_tx_power(struct wiphy *wiphy,
2159                                   struct wireless_dev *wdev,
2160                                   enum nl80211_tx_power_setting type, int mbm)
2161 {
2162         struct ieee80211_local *local = wiphy_priv(wiphy);
2163         struct ieee80211_sub_if_data *sdata;
2164         enum nl80211_tx_power_setting txp_type = type;
2165         bool update_txp_type = false;
2166
2167         if (wdev) {
2168                 sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
2169
2170                 switch (type) {
2171                 case NL80211_TX_POWER_AUTOMATIC:
2172                         sdata->user_power_level = IEEE80211_UNSET_POWER_LEVEL;
2173                         txp_type = NL80211_TX_POWER_LIMITED;
2174                         break;
2175                 case NL80211_TX_POWER_LIMITED:
2176                 case NL80211_TX_POWER_FIXED:
2177                         if (mbm < 0 || (mbm % 100))
2178                                 return -EOPNOTSUPP;
2179                         sdata->user_power_level = MBM_TO_DBM(mbm);
2180                         break;
2181                 }
2182
2183                 if (txp_type != sdata->vif.bss_conf.txpower_type) {
2184                         update_txp_type = true;
2185                         sdata->vif.bss_conf.txpower_type = txp_type;
2186                 }
2187
2188                 ieee80211_recalc_txpower(sdata, update_txp_type);
2189
2190                 return 0;
2191         }
2192
2193         switch (type) {
2194         case NL80211_TX_POWER_AUTOMATIC:
2195                 local->user_power_level = IEEE80211_UNSET_POWER_LEVEL;
2196                 txp_type = NL80211_TX_POWER_LIMITED;
2197                 break;
2198         case NL80211_TX_POWER_LIMITED:
2199         case NL80211_TX_POWER_FIXED:
2200                 if (mbm < 0 || (mbm % 100))
2201                         return -EOPNOTSUPP;
2202                 local->user_power_level = MBM_TO_DBM(mbm);
2203                 break;
2204         }
2205
2206         mutex_lock(&local->iflist_mtx);
2207         list_for_each_entry(sdata, &local->interfaces, list) {
2208                 sdata->user_power_level = local->user_power_level;
2209                 if (txp_type != sdata->vif.bss_conf.txpower_type)
2210                         update_txp_type = true;
2211                 sdata->vif.bss_conf.txpower_type = txp_type;
2212         }
2213         list_for_each_entry(sdata, &local->interfaces, list)
2214                 ieee80211_recalc_txpower(sdata, update_txp_type);
2215         mutex_unlock(&local->iflist_mtx);
2216
2217         return 0;
2218 }
2219
2220 static int ieee80211_get_tx_power(struct wiphy *wiphy,
2221                                   struct wireless_dev *wdev,
2222                                   int *dbm)
2223 {
2224         struct ieee80211_local *local = wiphy_priv(wiphy);
2225         struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
2226
2227         if (local->ops->get_txpower)
2228                 return drv_get_txpower(local, sdata, dbm);
2229
2230         if (!local->use_chanctx)
2231                 *dbm = local->hw.conf.power_level;
2232         else
2233                 *dbm = sdata->vif.bss_conf.txpower;
2234
2235         return 0;
2236 }
2237
2238 static int ieee80211_set_wds_peer(struct wiphy *wiphy, struct net_device *dev,
2239                                   const u8 *addr)
2240 {
2241         struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2242
2243         memcpy(&sdata->u.wds.remote_addr, addr, ETH_ALEN);
2244
2245         return 0;
2246 }
2247
2248 static void ieee80211_rfkill_poll(struct wiphy *wiphy)
2249 {
2250         struct ieee80211_local *local = wiphy_priv(wiphy);
2251
2252         drv_rfkill_poll(local);
2253 }
2254
2255 #ifdef CONFIG_NL80211_TESTMODE
2256 static int ieee80211_testmode_cmd(struct wiphy *wiphy,
2257                                   struct wireless_dev *wdev,
2258                                   void *data, int len)
2259 {
2260         struct ieee80211_local *local = wiphy_priv(wiphy);
2261         struct ieee80211_vif *vif = NULL;
2262
2263         if (!local->ops->testmode_cmd)
2264                 return -EOPNOTSUPP;
2265
2266         if (wdev) {
2267                 struct ieee80211_sub_if_data *sdata;
2268
2269                 sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
2270                 if (sdata->flags & IEEE80211_SDATA_IN_DRIVER)
2271                         vif = &sdata->vif;
2272         }
2273
2274         return local->ops->testmode_cmd(&local->hw, vif, data, len);
2275 }
2276
2277 static int ieee80211_testmode_dump(struct wiphy *wiphy,
2278                                    struct sk_buff *skb,
2279                                    struct netlink_callback *cb,
2280                                    void *data, int len)
2281 {
2282         struct ieee80211_local *local = wiphy_priv(wiphy);
2283
2284         if (!local->ops->testmode_dump)
2285                 return -EOPNOTSUPP;
2286
2287         return local->ops->testmode_dump(&local->hw, skb, cb, data, len);
2288 }
2289 #endif
2290
2291 int __ieee80211_request_smps_ap(struct ieee80211_sub_if_data *sdata,
2292                                 enum ieee80211_smps_mode smps_mode)
2293 {
2294         struct sta_info *sta;
2295         enum ieee80211_smps_mode old_req;
2296
2297         if (WARN_ON_ONCE(sdata->vif.type != NL80211_IFTYPE_AP))
2298                 return -EINVAL;
2299
2300         if (sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_20_NOHT)
2301                 return 0;
2302
2303         old_req = sdata->u.ap.req_smps;
2304         sdata->u.ap.req_smps = smps_mode;
2305
2306         /* AUTOMATIC doesn't mean much for AP - don't allow it */
2307         if (old_req == smps_mode ||
2308             smps_mode == IEEE80211_SMPS_AUTOMATIC)
2309                 return 0;
2310
2311          /* If no associated stations, there's no need to do anything */
2312         if (!atomic_read(&sdata->u.ap.num_mcast_sta)) {
2313                 sdata->smps_mode = smps_mode;
2314                 ieee80211_queue_work(&sdata->local->hw, &sdata->recalc_smps);
2315                 return 0;
2316         }
2317
2318         ht_dbg(sdata,
2319                "SMPS %d requested in AP mode, sending Action frame to %d stations\n",
2320                smps_mode, atomic_read(&sdata->u.ap.num_mcast_sta));
2321
2322         mutex_lock(&sdata->local->sta_mtx);
2323         list_for_each_entry(sta, &sdata->local->sta_list, list) {
2324                 /*
2325                  * Only stations associated to our AP and
2326                  * associated VLANs
2327                  */
2328                 if (sta->sdata->bss != &sdata->u.ap)
2329                         continue;
2330
2331                 /* This station doesn't support MIMO - skip it */
2332                 if (sta_info_tx_streams(sta) == 1)
2333                         continue;
2334
2335                 /*
2336                  * Don't wake up a STA just to send the action frame
2337                  * unless we are getting more restrictive.
2338                  */
2339                 if (test_sta_flag(sta, WLAN_STA_PS_STA) &&
2340                     !ieee80211_smps_is_restrictive(sta->known_smps_mode,
2341                                                    smps_mode)) {
2342                         ht_dbg(sdata, "Won't send SMPS to sleeping STA %pM\n",
2343                                sta->sta.addr);
2344                         continue;
2345                 }
2346
2347                 /*
2348                  * If the STA is not authorized, wait until it gets
2349                  * authorized and the action frame will be sent then.
2350                  */
2351                 if (!test_sta_flag(sta, WLAN_STA_AUTHORIZED))
2352                         continue;
2353
2354                 ht_dbg(sdata, "Sending SMPS to %pM\n", sta->sta.addr);
2355                 ieee80211_send_smps_action(sdata, smps_mode, sta->sta.addr,
2356                                            sdata->vif.bss_conf.bssid);
2357         }
2358         mutex_unlock(&sdata->local->sta_mtx);
2359
2360         sdata->smps_mode = smps_mode;
2361         ieee80211_queue_work(&sdata->local->hw, &sdata->recalc_smps);
2362
2363         return 0;
2364 }
2365
2366 int __ieee80211_request_smps_mgd(struct ieee80211_sub_if_data *sdata,
2367                                  enum ieee80211_smps_mode smps_mode)
2368 {
2369         const u8 *ap;
2370         enum ieee80211_smps_mode old_req;
2371         int err;
2372         struct sta_info *sta;
2373         bool tdls_peer_found = false;
2374
2375         lockdep_assert_held(&sdata->wdev.mtx);
2376
2377         if (WARN_ON_ONCE(sdata->vif.type != NL80211_IFTYPE_STATION))
2378                 return -EINVAL;
2379
2380         old_req = sdata->u.mgd.req_smps;
2381         sdata->u.mgd.req_smps = smps_mode;
2382
2383         if (old_req == smps_mode &&
2384             smps_mode != IEEE80211_SMPS_AUTOMATIC)
2385                 return 0;
2386
2387         /*
2388          * If not associated, or current association is not an HT
2389          * association, there's no need to do anything, just store
2390          * the new value until we associate.
2391          */
2392         if (!sdata->u.mgd.associated ||
2393             sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_20_NOHT)
2394                 return 0;
2395
2396         ap = sdata->u.mgd.associated->bssid;
2397
2398         rcu_read_lock();
2399         list_for_each_entry_rcu(sta, &sdata->local->sta_list, list) {
2400                 if (!sta->sta.tdls || sta->sdata != sdata || !sta->uploaded ||
2401                     !test_sta_flag(sta, WLAN_STA_AUTHORIZED))
2402                         continue;
2403
2404                 tdls_peer_found = true;
2405                 break;
2406         }
2407         rcu_read_unlock();
2408
2409         if (smps_mode == IEEE80211_SMPS_AUTOMATIC) {
2410                 if (tdls_peer_found || !sdata->u.mgd.powersave)
2411                         smps_mode = IEEE80211_SMPS_OFF;
2412                 else
2413                         smps_mode = IEEE80211_SMPS_DYNAMIC;
2414         }
2415
2416         /* send SM PS frame to AP */
2417         err = ieee80211_send_smps_action(sdata, smps_mode,
2418                                          ap, ap);
2419         if (err)
2420                 sdata->u.mgd.req_smps = old_req;
2421         else if (smps_mode != IEEE80211_SMPS_OFF && tdls_peer_found)
2422                 ieee80211_teardown_tdls_peers(sdata);
2423
2424         return err;
2425 }
2426
2427 static int ieee80211_set_power_mgmt(struct wiphy *wiphy, struct net_device *dev,
2428                                     bool enabled, int timeout)
2429 {
2430         struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2431         struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
2432
2433         if (sdata->vif.type != NL80211_IFTYPE_STATION)
2434                 return -EOPNOTSUPP;
2435
2436         if (!ieee80211_hw_check(&local->hw, SUPPORTS_PS))
2437                 return -EOPNOTSUPP;
2438
2439         if (enabled == sdata->u.mgd.powersave &&
2440             timeout == local->dynamic_ps_forced_timeout)
2441                 return 0;
2442
2443         sdata->u.mgd.powersave = enabled;
2444         local->dynamic_ps_forced_timeout = timeout;
2445
2446         /* no change, but if automatic follow powersave */
2447         sdata_lock(sdata);
2448         __ieee80211_request_smps_mgd(sdata, sdata->u.mgd.req_smps);
2449         sdata_unlock(sdata);
2450
2451         if (ieee80211_hw_check(&local->hw, SUPPORTS_DYNAMIC_PS))
2452                 ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_PS);
2453
2454         ieee80211_recalc_ps(local);
2455         ieee80211_recalc_ps_vif(sdata);
2456
2457         return 0;
2458 }
2459
2460 static int ieee80211_set_cqm_rssi_config(struct wiphy *wiphy,
2461                                          struct net_device *dev,
2462                                          s32 rssi_thold, u32 rssi_hyst)
2463 {
2464         struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2465         struct ieee80211_vif *vif = &sdata->vif;
2466         struct ieee80211_bss_conf *bss_conf = &vif->bss_conf;
2467
2468         if (rssi_thold == bss_conf->cqm_rssi_thold &&
2469             rssi_hyst == bss_conf->cqm_rssi_hyst)
2470                 return 0;
2471
2472         if (sdata->vif.driver_flags & IEEE80211_VIF_BEACON_FILTER &&
2473             !(sdata->vif.driver_flags & IEEE80211_VIF_SUPPORTS_CQM_RSSI))
2474                 return -EOPNOTSUPP;
2475
2476         bss_conf->cqm_rssi_thold = rssi_thold;
2477         bss_conf->cqm_rssi_hyst = rssi_hyst;
2478         sdata->u.mgd.last_cqm_event_signal = 0;
2479
2480         /* tell the driver upon association, unless already associated */
2481         if (sdata->u.mgd.associated &&
2482             sdata->vif.driver_flags & IEEE80211_VIF_SUPPORTS_CQM_RSSI)
2483                 ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_CQM);
2484
2485         return 0;
2486 }
2487
2488 static int ieee80211_set_bitrate_mask(struct wiphy *wiphy,
2489                                       struct net_device *dev,
2490                                       const u8 *addr,
2491                                       const struct cfg80211_bitrate_mask *mask)
2492 {
2493         struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2494         struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
2495         int i, ret;
2496
2497         if (!ieee80211_sdata_running(sdata))
2498                 return -ENETDOWN;
2499
2500         if (ieee80211_hw_check(&local->hw, HAS_RATE_CONTROL)) {
2501                 ret = drv_set_bitrate_mask(local, sdata, mask);
2502                 if (ret)
2503                         return ret;
2504         }
2505
2506         for (i = 0; i < IEEE80211_NUM_BANDS; i++) {
2507                 struct ieee80211_supported_band *sband = wiphy->bands[i];
2508                 int j;
2509
2510                 sdata->rc_rateidx_mask[i] = mask->control[i].legacy;
2511                 memcpy(sdata->rc_rateidx_mcs_mask[i], mask->control[i].ht_mcs,
2512                        sizeof(mask->control[i].ht_mcs));
2513                 memcpy(sdata->rc_rateidx_vht_mcs_mask[i],
2514                        mask->control[i].vht_mcs,
2515                        sizeof(mask->control[i].vht_mcs));
2516
2517                 sdata->rc_has_mcs_mask[i] = false;
2518                 sdata->rc_has_vht_mcs_mask[i] = false;
2519                 if (!sband)
2520                         continue;
2521
2522                 for (j = 0; j < IEEE80211_HT_MCS_MASK_LEN; j++) {
2523                         if (~sdata->rc_rateidx_mcs_mask[i][j]) {
2524                                 sdata->rc_has_mcs_mask[i] = true;
2525                                 break;
2526                         }
2527                 }
2528
2529                 for (j = 0; j < NL80211_VHT_NSS_MAX; j++) {
2530                         if (~sdata->rc_rateidx_vht_mcs_mask[i][j]) {
2531                                 sdata->rc_has_vht_mcs_mask[i] = true;
2532                                 break;
2533                         }
2534                 }
2535         }
2536
2537         return 0;
2538 }
2539
2540 static int ieee80211_start_radar_detection(struct wiphy *wiphy,
2541                                            struct net_device *dev,
2542                                            struct cfg80211_chan_def *chandef,
2543                                            u32 cac_time_ms)
2544 {
2545         struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2546         struct ieee80211_local *local = sdata->local;
2547         int err;
2548
2549         mutex_lock(&local->mtx);
2550         if (!list_empty(&local->roc_list) || local->scanning) {
2551                 err = -EBUSY;
2552                 goto out_unlock;
2553         }
2554
2555         /* whatever, but channel contexts should not complain about that one */
2556         sdata->smps_mode = IEEE80211_SMPS_OFF;
2557         sdata->needed_rx_chains = local->rx_chains;
2558
2559         err = ieee80211_vif_use_channel(sdata, chandef,
2560                                         IEEE80211_CHANCTX_SHARED);
2561         if (err)
2562                 goto out_unlock;
2563
2564         ieee80211_queue_delayed_work(&sdata->local->hw,
2565                                      &sdata->dfs_cac_timer_work,
2566                                      msecs_to_jiffies(cac_time_ms));
2567
2568  out_unlock:
2569         mutex_unlock(&local->mtx);
2570         return err;
2571 }
2572
2573 static struct cfg80211_beacon_data *
2574 cfg80211_beacon_dup(struct cfg80211_beacon_data *beacon)
2575 {
2576         struct cfg80211_beacon_data *new_beacon;
2577         u8 *pos;
2578         int len;
2579
2580         len = beacon->head_len + beacon->tail_len + beacon->beacon_ies_len +
2581               beacon->proberesp_ies_len + beacon->assocresp_ies_len +
2582               beacon->probe_resp_len;
2583
2584         new_beacon = kzalloc(sizeof(*new_beacon) + len, GFP_KERNEL);
2585         if (!new_beacon)
2586                 return NULL;
2587
2588         pos = (u8 *)(new_beacon + 1);
2589         if (beacon->head_len) {
2590                 new_beacon->head_len = beacon->head_len;
2591                 new_beacon->head = pos;
2592                 memcpy(pos, beacon->head, beacon->head_len);
2593                 pos += beacon->head_len;
2594         }
2595         if (beacon->tail_len) {
2596                 new_beacon->tail_len = beacon->tail_len;
2597                 new_beacon->tail = pos;
2598                 memcpy(pos, beacon->tail, beacon->tail_len);
2599                 pos += beacon->tail_len;
2600         }
2601         if (beacon->beacon_ies_len) {
2602                 new_beacon->beacon_ies_len = beacon->beacon_ies_len;
2603                 new_beacon->beacon_ies = pos;
2604                 memcpy(pos, beacon->beacon_ies, beacon->beacon_ies_len);
2605                 pos += beacon->beacon_ies_len;
2606         }
2607         if (beacon->proberesp_ies_len) {
2608                 new_beacon->proberesp_ies_len = beacon->proberesp_ies_len;
2609                 new_beacon->proberesp_ies = pos;
2610                 memcpy(pos, beacon->proberesp_ies, beacon->proberesp_ies_len);
2611                 pos += beacon->proberesp_ies_len;
2612         }
2613         if (beacon->assocresp_ies_len) {
2614                 new_beacon->assocresp_ies_len = beacon->assocresp_ies_len;
2615                 new_beacon->assocresp_ies = pos;
2616                 memcpy(pos, beacon->assocresp_ies, beacon->assocresp_ies_len);
2617                 pos += beacon->assocresp_ies_len;
2618         }
2619         if (beacon->probe_resp_len) {
2620                 new_beacon->probe_resp_len = beacon->probe_resp_len;
2621                 beacon->probe_resp = pos;
2622                 memcpy(pos, beacon->probe_resp, beacon->probe_resp_len);
2623                 pos += beacon->probe_resp_len;
2624         }
2625
2626         return new_beacon;
2627 }
2628
2629 void ieee80211_csa_finish(struct ieee80211_vif *vif)
2630 {
2631         struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
2632
2633         ieee80211_queue_work(&sdata->local->hw,
2634                              &sdata->csa_finalize_work);
2635 }
2636 EXPORT_SYMBOL(ieee80211_csa_finish);
2637
2638 static int ieee80211_set_after_csa_beacon(struct ieee80211_sub_if_data *sdata,
2639                                           u32 *changed)
2640 {
2641         int err;
2642
2643         switch (sdata->vif.type) {
2644         case NL80211_IFTYPE_AP:
2645                 err = ieee80211_assign_beacon(sdata, sdata->u.ap.next_beacon,
2646                                               NULL);
2647                 kfree(sdata->u.ap.next_beacon);
2648                 sdata->u.ap.next_beacon = NULL;
2649
2650                 if (err < 0)
2651                         return err;
2652                 *changed |= err;
2653                 break;
2654         case NL80211_IFTYPE_ADHOC:
2655                 err = ieee80211_ibss_finish_csa(sdata);
2656                 if (err < 0)
2657                         return err;
2658                 *changed |= err;
2659                 break;
2660 #ifdef CONFIG_MAC80211_MESH
2661         case NL80211_IFTYPE_MESH_POINT:
2662                 err = ieee80211_mesh_finish_csa(sdata);
2663                 if (err < 0)
2664                         return err;
2665                 *changed |= err;
2666                 break;
2667 #endif
2668         default:
2669                 WARN_ON(1);
2670                 return -EINVAL;
2671         }
2672
2673         return 0;
2674 }
2675
2676 static int __ieee80211_csa_finalize(struct ieee80211_sub_if_data *sdata)
2677 {
2678         struct ieee80211_local *local = sdata->local;
2679         u32 changed = 0;
2680         int err;
2681
2682         sdata_assert_lock(sdata);
2683         lockdep_assert_held(&local->mtx);
2684         lockdep_assert_held(&local->chanctx_mtx);
2685
2686         /*
2687          * using reservation isn't immediate as it may be deferred until later
2688          * with multi-vif. once reservation is complete it will re-schedule the
2689          * work with no reserved_chanctx so verify chandef to check if it
2690          * completed successfully
2691          */
2692
2693         if (sdata->reserved_chanctx) {
2694                 /*
2695                  * with multi-vif csa driver may call ieee80211_csa_finish()
2696                  * many times while waiting for other interfaces to use their
2697                  * reservations
2698                  */
2699                 if (sdata->reserved_ready)
2700                         return 0;
2701
2702                 return ieee80211_vif_use_reserved_context(sdata);
2703         }
2704
2705         if (!cfg80211_chandef_identical(&sdata->vif.bss_conf.chandef,
2706                                         &sdata->csa_chandef))
2707                 return -EINVAL;
2708
2709         sdata->vif.csa_active = false;
2710
2711         err = ieee80211_set_after_csa_beacon(sdata, &changed);
2712         if (err)
2713                 return err;
2714
2715         ieee80211_bss_info_change_notify(sdata, changed);
2716
2717         if (sdata->csa_block_tx) {
2718                 ieee80211_wake_vif_queues(local, sdata,
2719                                           IEEE80211_QUEUE_STOP_REASON_CSA);
2720                 sdata->csa_block_tx = false;
2721         }
2722
2723         err = drv_post_channel_switch(sdata);
2724         if (err)
2725                 return err;
2726
2727         cfg80211_ch_switch_notify(sdata->dev, &sdata->csa_chandef);
2728
2729         return 0;
2730 }
2731
2732 static void ieee80211_csa_finalize(struct ieee80211_sub_if_data *sdata)
2733 {
2734         if (__ieee80211_csa_finalize(sdata)) {
2735                 sdata_info(sdata, "failed to finalize CSA, disconnecting\n");
2736                 cfg80211_stop_iface(sdata->local->hw.wiphy, &sdata->wdev,
2737                                     GFP_KERNEL);
2738         }
2739 }
2740
2741 void ieee80211_csa_finalize_work(struct work_struct *work)
2742 {
2743         struct ieee80211_sub_if_data *sdata =
2744                 container_of(work, struct ieee80211_sub_if_data,
2745                              csa_finalize_work);
2746         struct ieee80211_local *local = sdata->local;
2747
2748         sdata_lock(sdata);
2749         mutex_lock(&local->mtx);
2750         mutex_lock(&local->chanctx_mtx);
2751
2752         /* AP might have been stopped while waiting for the lock. */
2753         if (!sdata->vif.csa_active)
2754                 goto unlock;
2755
2756         if (!ieee80211_sdata_running(sdata))
2757                 goto unlock;
2758
2759         ieee80211_csa_finalize(sdata);
2760
2761 unlock:
2762         mutex_unlock(&local->chanctx_mtx);
2763         mutex_unlock(&local->mtx);
2764         sdata_unlock(sdata);
2765 }
2766
2767 static int ieee80211_set_csa_beacon(struct ieee80211_sub_if_data *sdata,
2768                                     struct cfg80211_csa_settings *params,
2769                                     u32 *changed)
2770 {
2771         struct ieee80211_csa_settings csa = {};
2772         int err;
2773
2774         switch (sdata->vif.type) {
2775         case NL80211_IFTYPE_AP:
2776                 sdata->u.ap.next_beacon =
2777                         cfg80211_beacon_dup(&params->beacon_after);
2778                 if (!sdata->u.ap.next_beacon)
2779                         return -ENOMEM;
2780
2781                 /*
2782                  * With a count of 0, we don't have to wait for any
2783                  * TBTT before switching, so complete the CSA
2784                  * immediately.  In theory, with a count == 1 we
2785                  * should delay the switch until just before the next
2786                  * TBTT, but that would complicate things so we switch
2787                  * immediately too.  If we would delay the switch
2788                  * until the next TBTT, we would have to set the probe
2789                  * response here.
2790                  *
2791                  * TODO: A channel switch with count <= 1 without
2792                  * sending a CSA action frame is kind of useless,
2793                  * because the clients won't know we're changing
2794                  * channels.  The action frame must be implemented
2795                  * either here or in the userspace.
2796                  */
2797                 if (params->count <= 1)
2798                         break;
2799
2800                 if ((params->n_counter_offsets_beacon >
2801                      IEEE80211_MAX_CSA_COUNTERS_NUM) ||
2802                     (params->n_counter_offsets_presp >
2803                      IEEE80211_MAX_CSA_COUNTERS_NUM))
2804                         return -EINVAL;
2805
2806                 csa.counter_offsets_beacon = params->counter_offsets_beacon;
2807                 csa.counter_offsets_presp = params->counter_offsets_presp;
2808                 csa.n_counter_offsets_beacon = params->n_counter_offsets_beacon;
2809                 csa.n_counter_offsets_presp = params->n_counter_offsets_presp;
2810                 csa.count = params->count;
2811
2812                 err = ieee80211_assign_beacon(sdata, &params->beacon_csa, &csa);
2813                 if (err < 0) {
2814                         kfree(sdata->u.ap.next_beacon);
2815                         return err;
2816                 }
2817                 *changed |= err;
2818
2819                 break;
2820         case NL80211_IFTYPE_ADHOC:
2821                 if (!sdata->vif.bss_conf.ibss_joined)
2822                         return -EINVAL;
2823
2824                 if (params->chandef.width != sdata->u.ibss.chandef.width)
2825                         return -EINVAL;
2826
2827                 switch (params->chandef.width) {
2828                 case NL80211_CHAN_WIDTH_40:
2829                         if (cfg80211_get_chandef_type(&params->chandef) !=
2830                             cfg80211_get_chandef_type(&sdata->u.ibss.chandef))
2831                                 return -EINVAL;
2832                 case NL80211_CHAN_WIDTH_5:
2833                 case NL80211_CHAN_WIDTH_10:
2834                 case NL80211_CHAN_WIDTH_20_NOHT:
2835                 case NL80211_CHAN_WIDTH_20:
2836                         break;
2837                 default:
2838                         return -EINVAL;
2839                 }
2840
2841                 /* changes into another band are not supported */
2842                 if (sdata->u.ibss.chandef.chan->band !=
2843                     params->chandef.chan->band)
2844                         return -EINVAL;
2845
2846                 /* see comments in the NL80211_IFTYPE_AP block */
2847                 if (params->count > 1) {
2848                         err = ieee80211_ibss_csa_beacon(sdata, params);
2849                         if (err < 0)
2850                                 return err;
2851                         *changed |= err;
2852                 }
2853
2854                 ieee80211_send_action_csa(sdata, params);
2855
2856                 break;
2857 #ifdef CONFIG_MAC80211_MESH
2858         case NL80211_IFTYPE_MESH_POINT: {
2859                 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh;
2860
2861                 if (params->chandef.width != sdata->vif.bss_conf.chandef.width)
2862                         return -EINVAL;
2863
2864                 /* changes into another band are not supported */
2865                 if (sdata->vif.bss_conf.chandef.chan->band !=
2866                     params->chandef.chan->band)
2867                         return -EINVAL;
2868
2869                 if (ifmsh->csa_role == IEEE80211_MESH_CSA_ROLE_NONE) {
2870                         ifmsh->csa_role = IEEE80211_MESH_CSA_ROLE_INIT;
2871                         if (!ifmsh->pre_value)
2872                                 ifmsh->pre_value = 1;
2873                         else
2874                                 ifmsh->pre_value++;
2875                 }
2876
2877                 /* see comments in the NL80211_IFTYPE_AP block */
2878                 if (params->count > 1) {
2879                         err = ieee80211_mesh_csa_beacon(sdata, params);
2880                         if (err < 0) {
2881                                 ifmsh->csa_role = IEEE80211_MESH_CSA_ROLE_NONE;
2882                                 return err;
2883                         }
2884                         *changed |= err;
2885                 }
2886
2887                 if (ifmsh->csa_role == IEEE80211_MESH_CSA_ROLE_INIT)
2888                         ieee80211_send_action_csa(sdata, params);
2889
2890                 break;
2891                 }
2892 #endif
2893         default:
2894                 return -EOPNOTSUPP;
2895         }
2896
2897         return 0;
2898 }
2899
2900 static int
2901 __ieee80211_channel_switch(struct wiphy *wiphy, struct net_device *dev,
2902                            struct cfg80211_csa_settings *params)
2903 {
2904         struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2905         struct ieee80211_local *local = sdata->local;
2906         struct ieee80211_channel_switch ch_switch;
2907         struct ieee80211_chanctx_conf *conf;
2908         struct ieee80211_chanctx *chanctx;
2909         u32 changed = 0;
2910         int err;
2911
2912         sdata_assert_lock(sdata);
2913         lockdep_assert_held(&local->mtx);
2914
2915         if (!list_empty(&local->roc_list) || local->scanning)
2916                 return -EBUSY;
2917
2918         if (sdata->wdev.cac_started)
2919                 return -EBUSY;
2920
2921         if (cfg80211_chandef_identical(&params->chandef,
2922                                        &sdata->vif.bss_conf.chandef))
2923                 return -EINVAL;
2924
2925         /* don't allow another channel switch if one is already active. */
2926         if (sdata->vif.csa_active)
2927                 return -EBUSY;
2928
2929         mutex_lock(&local->chanctx_mtx);
2930         conf = rcu_dereference_protected(sdata->vif.chanctx_conf,
2931                                          lockdep_is_held(&local->chanctx_mtx));
2932         if (!conf) {
2933                 err = -EBUSY;
2934                 goto out;
2935         }
2936
2937         chanctx = container_of(conf, struct ieee80211_chanctx, conf);
2938         if (!chanctx) {
2939                 err = -EBUSY;
2940                 goto out;
2941         }
2942
2943         ch_switch.timestamp = 0;
2944         ch_switch.device_timestamp = 0;
2945         ch_switch.block_tx = params->block_tx;
2946         ch_switch.chandef = params->chandef;
2947         ch_switch.count = params->count;
2948
2949         err = drv_pre_channel_switch(sdata, &ch_switch);
2950         if (err)
2951                 goto out;
2952
2953         err = ieee80211_vif_reserve_chanctx(sdata, &params->chandef,
2954                                             chanctx->mode,
2955                                             params->radar_required);
2956         if (err)
2957                 goto out;
2958
2959         /* if reservation is invalid then this will fail */
2960         err = ieee80211_check_combinations(sdata, NULL, chanctx->mode, 0);
2961         if (err) {
2962                 ieee80211_vif_unreserve_chanctx(sdata);
2963                 goto out;
2964         }
2965
2966         err = ieee80211_set_csa_beacon(sdata, params, &changed);
2967         if (err) {
2968                 ieee80211_vif_unreserve_chanctx(sdata);
2969                 goto out;
2970         }
2971
2972         sdata->csa_chandef = params->chandef;
2973         sdata->csa_block_tx = params->block_tx;
2974         sdata->vif.csa_active = true;
2975
2976         if (sdata->csa_block_tx)
2977                 ieee80211_stop_vif_queues(local, sdata,
2978                                           IEEE80211_QUEUE_STOP_REASON_CSA);
2979
2980         cfg80211_ch_switch_started_notify(sdata->dev, &sdata->csa_chandef,
2981                                           params->count);
2982
2983         if (changed) {
2984                 ieee80211_bss_info_change_notify(sdata, changed);
2985                 drv_channel_switch_beacon(sdata, &params->chandef);
2986         } else {
2987                 /* if the beacon didn't change, we can finalize immediately */
2988                 ieee80211_csa_finalize(sdata);
2989         }
2990
2991 out:
2992         mutex_unlock(&local->chanctx_mtx);
2993         return err;
2994 }
2995
2996 int ieee80211_channel_switch(struct wiphy *wiphy, struct net_device *dev,
2997                              struct cfg80211_csa_settings *params)
2998 {
2999         struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
3000         struct ieee80211_local *local = sdata->local;
3001         int err;
3002
3003         mutex_lock(&local->mtx);
3004         err = __ieee80211_channel_switch(wiphy, dev, params);
3005         mutex_unlock(&local->mtx);
3006
3007         return err;
3008 }
3009
3010 u64 ieee80211_mgmt_tx_cookie(struct ieee80211_local *local)
3011 {
3012         lockdep_assert_held(&local->mtx);
3013
3014         local->roc_cookie_counter++;
3015
3016         /* wow, you wrapped 64 bits ... more likely a bug */
3017         if (WARN_ON(local->roc_cookie_counter == 0))
3018                 local->roc_cookie_counter++;
3019
3020         return local->roc_cookie_counter;
3021 }
3022
3023 int ieee80211_attach_ack_skb(struct ieee80211_local *local, struct sk_buff *skb,
3024                              u64 *cookie, gfp_t gfp)
3025 {
3026         unsigned long spin_flags;
3027         struct sk_buff *ack_skb;
3028         int id;
3029
3030         ack_skb = skb_copy(skb, gfp);
3031         if (!ack_skb)
3032                 return -ENOMEM;
3033
3034         spin_lock_irqsave(&local->ack_status_lock, spin_flags);
3035         id = idr_alloc(&local->ack_status_frames, ack_skb,
3036                        1, 0x10000, GFP_ATOMIC);
3037         spin_unlock_irqrestore(&local->ack_status_lock, spin_flags);
3038
3039         if (id < 0) {
3040                 kfree_skb(ack_skb);
3041                 return -ENOMEM;
3042         }
3043
3044         IEEE80211_SKB_CB(skb)->ack_frame_id = id;
3045
3046         *cookie = ieee80211_mgmt_tx_cookie(local);
3047         IEEE80211_SKB_CB(ack_skb)->ack.cookie = *cookie;
3048
3049         return 0;
3050 }
3051
3052 static void ieee80211_mgmt_frame_register(struct wiphy *wiphy,
3053                                           struct wireless_dev *wdev,
3054                                           u16 frame_type, bool reg)
3055 {
3056         struct ieee80211_local *local = wiphy_priv(wiphy);
3057         struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
3058
3059         switch (frame_type) {
3060         case IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_PROBE_REQ:
3061                 if (reg) {
3062                         local->probe_req_reg++;
3063                         sdata->vif.probe_req_reg++;
3064                 } else {
3065                         if (local->probe_req_reg)
3066                                 local->probe_req_reg--;
3067
3068                         if (sdata->vif.probe_req_reg)
3069                                 sdata->vif.probe_req_reg--;
3070                 }
3071
3072                 if (!local->open_count)
3073                         break;
3074
3075                 if (sdata->vif.probe_req_reg == 1)
3076                         drv_config_iface_filter(local, sdata, FIF_PROBE_REQ,
3077                                                 FIF_PROBE_REQ);
3078                 else if (sdata->vif.probe_req_reg == 0)
3079                         drv_config_iface_filter(local, sdata, 0,
3080                                                 FIF_PROBE_REQ);
3081
3082                 ieee80211_configure_filter(local);
3083                 break;
3084         default:
3085                 break;
3086         }
3087 }
3088
3089 static int ieee80211_set_antenna(struct wiphy *wiphy, u32 tx_ant, u32 rx_ant)
3090 {
3091         struct ieee80211_local *local = wiphy_priv(wiphy);
3092
3093         if (local->started)
3094                 return -EOPNOTSUPP;
3095
3096         return drv_set_antenna(local, tx_ant, rx_ant);
3097 }
3098
3099 static int ieee80211_get_antenna(struct wiphy *wiphy, u32 *tx_ant, u32 *rx_ant)
3100 {
3101         struct ieee80211_local *local = wiphy_priv(wiphy);
3102
3103         return drv_get_antenna(local, tx_ant, rx_ant);
3104 }
3105
3106 static int ieee80211_set_rekey_data(struct wiphy *wiphy,
3107                                     struct net_device *dev,
3108                                     struct cfg80211_gtk_rekey_data *data)
3109 {
3110         struct ieee80211_local *local = wiphy_priv(wiphy);
3111         struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
3112
3113         if (!local->ops->set_rekey_data)
3114                 return -EOPNOTSUPP;
3115
3116         drv_set_rekey_data(local, sdata, data);
3117
3118         return 0;
3119 }
3120
3121 static int ieee80211_probe_client(struct wiphy *wiphy, struct net_device *dev,
3122                                   const u8 *peer, u64 *cookie)
3123 {
3124         struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
3125         struct ieee80211_local *local = sdata->local;
3126         struct ieee80211_qos_hdr *nullfunc;
3127         struct sk_buff *skb;
3128         int size = sizeof(*nullfunc);
3129         __le16 fc;
3130         bool qos;
3131         struct ieee80211_tx_info *info;
3132         struct sta_info *sta;
3133         struct ieee80211_chanctx_conf *chanctx_conf;
3134         enum ieee80211_band band;
3135         int ret;
3136
3137         /* the lock is needed to assign the cookie later */
3138         mutex_lock(&local->mtx);
3139
3140         rcu_read_lock();
3141         chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf);
3142         if (WARN_ON(!chanctx_conf)) {
3143                 ret = -EINVAL;
3144                 goto unlock;
3145         }
3146         band = chanctx_conf->def.chan->band;
3147         sta = sta_info_get_bss(sdata, peer);
3148         if (sta) {
3149                 qos = sta->sta.wme;
3150         } else {
3151                 ret = -ENOLINK;
3152                 goto unlock;
3153         }
3154
3155         if (qos) {
3156                 fc = cpu_to_le16(IEEE80211_FTYPE_DATA |
3157                                  IEEE80211_STYPE_QOS_NULLFUNC |
3158                                  IEEE80211_FCTL_FROMDS);
3159         } else {
3160                 size -= 2;
3161                 fc = cpu_to_le16(IEEE80211_FTYPE_DATA |
3162                                  IEEE80211_STYPE_NULLFUNC |
3163                                  IEEE80211_FCTL_FROMDS);
3164         }
3165
3166         skb = dev_alloc_skb(local->hw.extra_tx_headroom + size);
3167         if (!skb) {
3168                 ret = -ENOMEM;
3169                 goto unlock;
3170         }
3171
3172         skb->dev = dev;
3173
3174         skb_reserve(skb, local->hw.extra_tx_headroom);
3175
3176         nullfunc = (void *) skb_put(skb, size);
3177         nullfunc->frame_control = fc;
3178         nullfunc->duration_id = 0;
3179         memcpy(nullfunc->addr1, sta->sta.addr, ETH_ALEN);
3180         memcpy(nullfunc->addr2, sdata->vif.addr, ETH_ALEN);
3181         memcpy(nullfunc->addr3, sdata->vif.addr, ETH_ALEN);
3182         nullfunc->seq_ctrl = 0;
3183
3184         info = IEEE80211_SKB_CB(skb);
3185
3186         info->flags |= IEEE80211_TX_CTL_REQ_TX_STATUS |
3187                        IEEE80211_TX_INTFL_NL80211_FRAME_TX;
3188         info->band = band;
3189
3190         skb_set_queue_mapping(skb, IEEE80211_AC_VO);
3191         skb->priority = 7;
3192         if (qos)
3193                 nullfunc->qos_ctrl = cpu_to_le16(7);
3194
3195         ret = ieee80211_attach_ack_skb(local, skb, cookie, GFP_ATOMIC);
3196         if (ret) {
3197                 kfree_skb(skb);
3198                 goto unlock;
3199         }
3200
3201         local_bh_disable();
3202         ieee80211_xmit(sdata, sta, skb);
3203         local_bh_enable();
3204
3205         ret = 0;
3206 unlock:
3207         rcu_read_unlock();
3208         mutex_unlock(&local->mtx);
3209
3210         return ret;
3211 }
3212
3213 static int ieee80211_cfg_get_channel(struct wiphy *wiphy,
3214                                      struct wireless_dev *wdev,
3215                                      struct cfg80211_chan_def *chandef)
3216 {
3217         struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
3218         struct ieee80211_local *local = wiphy_priv(wiphy);
3219         struct ieee80211_chanctx_conf *chanctx_conf;
3220         int ret = -ENODATA;
3221
3222         rcu_read_lock();
3223         chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf);
3224         if (chanctx_conf) {
3225                 *chandef = sdata->vif.bss_conf.chandef;
3226                 ret = 0;
3227         } else if (local->open_count > 0 &&
3228                    local->open_count == local->monitors &&
3229                    sdata->vif.type == NL80211_IFTYPE_MONITOR) {
3230                 if (local->use_chanctx)
3231                         *chandef = local->monitor_chandef;
3232                 else
3233                         *chandef = local->_oper_chandef;
3234                 ret = 0;
3235         }
3236         rcu_read_unlock();
3237
3238         return ret;
3239 }
3240
3241 #ifdef CONFIG_PM
3242 static void ieee80211_set_wakeup(struct wiphy *wiphy, bool enabled)
3243 {
3244         drv_set_wakeup(wiphy_priv(wiphy), enabled);
3245 }
3246 #endif
3247
3248 static int ieee80211_set_qos_map(struct wiphy *wiphy,
3249                                  struct net_device *dev,
3250                                  struct cfg80211_qos_map *qos_map)
3251 {
3252         struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
3253         struct mac80211_qos_map *new_qos_map, *old_qos_map;
3254
3255         if (qos_map) {
3256                 new_qos_map = kzalloc(sizeof(*new_qos_map), GFP_KERNEL);
3257                 if (!new_qos_map)
3258                         return -ENOMEM;
3259                 memcpy(&new_qos_map->qos_map, qos_map, sizeof(*qos_map));
3260         } else {
3261                 /* A NULL qos_map was passed to disable QoS mapping */
3262                 new_qos_map = NULL;
3263         }
3264
3265         old_qos_map = sdata_dereference(sdata->qos_map, sdata);
3266         rcu_assign_pointer(sdata->qos_map, new_qos_map);
3267         if (old_qos_map)
3268                 kfree_rcu(old_qos_map, rcu_head);
3269
3270         return 0;
3271 }
3272
3273 static int ieee80211_set_ap_chanwidth(struct wiphy *wiphy,
3274                                       struct net_device *dev,
3275                                       struct cfg80211_chan_def *chandef)
3276 {
3277         struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
3278         int ret;
3279         u32 changed = 0;
3280
3281         ret = ieee80211_vif_change_bandwidth(sdata, chandef, &changed);
3282         if (ret == 0)
3283                 ieee80211_bss_info_change_notify(sdata, changed);
3284
3285         return ret;
3286 }
3287
3288 static int ieee80211_add_tx_ts(struct wiphy *wiphy, struct net_device *dev,
3289                                u8 tsid, const u8 *peer, u8 up,
3290                                u16 admitted_time)
3291 {
3292         struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
3293         struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
3294         int ac = ieee802_1d_to_ac[up];
3295
3296         if (sdata->vif.type != NL80211_IFTYPE_STATION)
3297                 return -EOPNOTSUPP;
3298
3299         if (!(sdata->wmm_acm & BIT(up)))
3300                 return -EINVAL;
3301
3302         if (ifmgd->tx_tspec[ac].admitted_time)
3303                 return -EBUSY;
3304
3305         if (admitted_time) {
3306                 ifmgd->tx_tspec[ac].admitted_time = 32 * admitted_time;
3307                 ifmgd->tx_tspec[ac].tsid = tsid;
3308                 ifmgd->tx_tspec[ac].up = up;
3309         }
3310
3311         return 0;
3312 }
3313
3314 static int ieee80211_del_tx_ts(struct wiphy *wiphy, struct net_device *dev,
3315                                u8 tsid, const u8 *peer)
3316 {
3317         struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
3318         struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
3319         struct ieee80211_local *local = wiphy_priv(wiphy);
3320         int ac;
3321
3322         for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
3323                 struct ieee80211_sta_tx_tspec *tx_tspec = &ifmgd->tx_tspec[ac];
3324
3325                 /* skip unused entries */
3326                 if (!tx_tspec->admitted_time)
3327                         continue;
3328
3329                 if (tx_tspec->tsid != tsid)
3330                         continue;
3331
3332                 /* due to this new packets will be reassigned to non-ACM ACs */
3333                 tx_tspec->up = -1;
3334
3335                 /* Make sure that all packets have been sent to avoid to
3336                  * restore the QoS params on packets that are still on the
3337                  * queues.
3338                  */
3339                 synchronize_net();
3340                 ieee80211_flush_queues(local, sdata, false);
3341
3342                 /* restore the normal QoS parameters
3343                  * (unconditionally to avoid races)
3344                  */
3345                 tx_tspec->action = TX_TSPEC_ACTION_STOP_DOWNGRADE;
3346                 tx_tspec->downgraded = false;
3347                 ieee80211_sta_handle_tspec_ac_params(sdata);
3348
3349                 /* finally clear all the data */
3350                 memset(tx_tspec, 0, sizeof(*tx_tspec));
3351
3352                 return 0;
3353         }
3354
3355         return -ENOENT;
3356 }
3357
3358 const struct cfg80211_ops mac80211_config_ops = {
3359         .add_virtual_intf = ieee80211_add_iface,
3360         .del_virtual_intf = ieee80211_del_iface,
3361         .change_virtual_intf = ieee80211_change_iface,
3362         .start_p2p_device = ieee80211_start_p2p_device,
3363         .stop_p2p_device = ieee80211_stop_p2p_device,
3364         .add_key = ieee80211_add_key,
3365         .del_key = ieee80211_del_key,
3366         .get_key = ieee80211_get_key,
3367         .set_default_key = ieee80211_config_default_key,
3368         .set_default_mgmt_key = ieee80211_config_default_mgmt_key,
3369         .start_ap = ieee80211_start_ap,
3370         .change_beacon = ieee80211_change_beacon,
3371         .stop_ap = ieee80211_stop_ap,
3372         .add_station = ieee80211_add_station,
3373         .del_station = ieee80211_del_station,
3374         .change_station = ieee80211_change_station,
3375         .get_station = ieee80211_get_station,
3376         .dump_station = ieee80211_dump_station,
3377         .dump_survey = ieee80211_dump_survey,
3378 #ifdef CONFIG_MAC80211_MESH
3379         .add_mpath = ieee80211_add_mpath,
3380         .del_mpath = ieee80211_del_mpath,
3381         .change_mpath = ieee80211_change_mpath,
3382         .get_mpath = ieee80211_get_mpath,
3383         .dump_mpath = ieee80211_dump_mpath,
3384         .get_mpp = ieee80211_get_mpp,
3385         .dump_mpp = ieee80211_dump_mpp,
3386         .update_mesh_config = ieee80211_update_mesh_config,
3387         .get_mesh_config = ieee80211_get_mesh_config,
3388         .join_mesh = ieee80211_join_mesh,
3389         .leave_mesh = ieee80211_leave_mesh,
3390 #endif
3391         .join_ocb = ieee80211_join_ocb,
3392         .leave_ocb = ieee80211_leave_ocb,
3393         .change_bss = ieee80211_change_bss,
3394         .set_txq_params = ieee80211_set_txq_params,
3395         .set_monitor_channel = ieee80211_set_monitor_channel,
3396         .suspend = ieee80211_suspend,
3397         .resume = ieee80211_resume,
3398         .scan = ieee80211_scan,
3399         .abort_scan = ieee80211_abort_scan,
3400         .sched_scan_start = ieee80211_sched_scan_start,
3401         .sched_scan_stop = ieee80211_sched_scan_stop,
3402         .auth = ieee80211_auth,
3403         .assoc = ieee80211_assoc,
3404         .deauth = ieee80211_deauth,
3405         .disassoc = ieee80211_disassoc,
3406         .join_ibss = ieee80211_join_ibss,
3407         .leave_ibss = ieee80211_leave_ibss,
3408         .set_mcast_rate = ieee80211_set_mcast_rate,
3409         .set_wiphy_params = ieee80211_set_wiphy_params,
3410         .set_tx_power = ieee80211_set_tx_power,
3411         .get_tx_power = ieee80211_get_tx_power,
3412         .set_wds_peer = ieee80211_set_wds_peer,
3413         .rfkill_poll = ieee80211_rfkill_poll,
3414         CFG80211_TESTMODE_CMD(ieee80211_testmode_cmd)
3415         CFG80211_TESTMODE_DUMP(ieee80211_testmode_dump)
3416         .set_power_mgmt = ieee80211_set_power_mgmt,
3417         .set_bitrate_mask = ieee80211_set_bitrate_mask,
3418         .remain_on_channel = ieee80211_remain_on_channel,
3419         .cancel_remain_on_channel = ieee80211_cancel_remain_on_channel,
3420         .mgmt_tx = ieee80211_mgmt_tx,
3421         .mgmt_tx_cancel_wait = ieee80211_mgmt_tx_cancel_wait,
3422         .set_cqm_rssi_config = ieee80211_set_cqm_rssi_config,
3423         .mgmt_frame_register = ieee80211_mgmt_frame_register,
3424         .set_antenna = ieee80211_set_antenna,
3425         .get_antenna = ieee80211_get_antenna,
3426         .set_rekey_data = ieee80211_set_rekey_data,
3427         .tdls_oper = ieee80211_tdls_oper,
3428         .tdls_mgmt = ieee80211_tdls_mgmt,
3429         .tdls_channel_switch = ieee80211_tdls_channel_switch,
3430         .tdls_cancel_channel_switch = ieee80211_tdls_cancel_channel_switch,
3431         .probe_client = ieee80211_probe_client,
3432         .set_noack_map = ieee80211_set_noack_map,
3433 #ifdef CONFIG_PM
3434         .set_wakeup = ieee80211_set_wakeup,
3435 #endif
3436         .get_channel = ieee80211_cfg_get_channel,
3437         .start_radar_detection = ieee80211_start_radar_detection,
3438         .channel_switch = ieee80211_channel_switch,
3439         .set_qos_map = ieee80211_set_qos_map,
3440         .set_ap_chanwidth = ieee80211_set_ap_chanwidth,
3441         .add_tx_ts = ieee80211_add_tx_ts,
3442         .del_tx_ts = ieee80211_del_tx_ts,
3443 };