cfg.c revision d91df0e3a1b9a7427785cb8d28be073df9b18b78
1/*
2 * mac80211 configuration hooks for cfg80211
3 *
4 * Copyright 2006-2010	Johannes Berg <johannes@sipsolutions.net>
5 *
6 * This file is GPLv2 as found in COPYING.
7 */
8
9#include <linux/ieee80211.h>
10#include <linux/nl80211.h>
11#include <linux/rtnetlink.h>
12#include <linux/slab.h>
13#include <net/net_namespace.h>
14#include <linux/rcupdate.h>
15#include <linux/if_ether.h>
16#include <net/cfg80211.h>
17#include "ieee80211_i.h"
18#include "driver-ops.h"
19#include "cfg.h"
20#include "rate.h"
21#include "mesh.h"
22
23static struct net_device *ieee80211_add_iface(struct wiphy *wiphy, char *name,
24					      enum nl80211_iftype type,
25					      u32 *flags,
26					      struct vif_params *params)
27{
28	struct ieee80211_local *local = wiphy_priv(wiphy);
29	struct net_device *dev;
30	struct ieee80211_sub_if_data *sdata;
31	int err;
32
33	err = ieee80211_if_add(local, name, &dev, type, params);
34	if (err)
35		return ERR_PTR(err);
36
37	if (type == NL80211_IFTYPE_MONITOR && flags) {
38		sdata = IEEE80211_DEV_TO_SUB_IF(dev);
39		sdata->u.mntr_flags = *flags;
40	}
41
42	return dev;
43}
44
45static int ieee80211_del_iface(struct wiphy *wiphy, struct net_device *dev)
46{
47	ieee80211_if_remove(IEEE80211_DEV_TO_SUB_IF(dev));
48
49	return 0;
50}
51
52static int ieee80211_change_iface(struct wiphy *wiphy,
53				  struct net_device *dev,
54				  enum nl80211_iftype type, u32 *flags,
55				  struct vif_params *params)
56{
57	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
58	int ret;
59
60	ret = ieee80211_if_change_type(sdata, type);
61	if (ret)
62		return ret;
63
64	if (type == NL80211_IFTYPE_AP_VLAN &&
65	    params && params->use_4addr == 0)
66		RCU_INIT_POINTER(sdata->u.vlan.sta, NULL);
67	else if (type == NL80211_IFTYPE_STATION &&
68		 params && params->use_4addr >= 0)
69		sdata->u.mgd.use_4addr = params->use_4addr;
70
71	if (sdata->vif.type == NL80211_IFTYPE_MONITOR && flags) {
72		struct ieee80211_local *local = sdata->local;
73
74		if (ieee80211_sdata_running(sdata)) {
75			/*
76			 * Prohibit MONITOR_FLAG_COOK_FRAMES to be
77			 * changed while the interface is up.
78			 * Else we would need to add a lot of cruft
79			 * to update everything:
80			 *	cooked_mntrs, monitor and all fif_* counters
81			 *	reconfigure hardware
82			 */
83			if ((*flags & MONITOR_FLAG_COOK_FRAMES) !=
84			    (sdata->u.mntr_flags & MONITOR_FLAG_COOK_FRAMES))
85				return -EBUSY;
86
87			ieee80211_adjust_monitor_flags(sdata, -1);
88			sdata->u.mntr_flags = *flags;
89			ieee80211_adjust_monitor_flags(sdata, 1);
90
91			ieee80211_configure_filter(local);
92		} else {
93			/*
94			 * Because the interface is down, ieee80211_do_stop
95			 * and ieee80211_do_open take care of "everything"
96			 * mentioned in the comment above.
97			 */
98			sdata->u.mntr_flags = *flags;
99		}
100	}
101
102	return 0;
103}
104
105static int ieee80211_set_noack_map(struct wiphy *wiphy,
106				  struct net_device *dev,
107				  u16 noack_map)
108{
109	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
110
111	sdata->noack_map = noack_map;
112	return 0;
113}
114
115static int ieee80211_add_key(struct wiphy *wiphy, struct net_device *dev,
116			     u8 key_idx, bool pairwise, const u8 *mac_addr,
117			     struct key_params *params)
118{
119	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
120	struct sta_info *sta = NULL;
121	struct ieee80211_key *key;
122	int err;
123
124	if (!ieee80211_sdata_running(sdata))
125		return -ENETDOWN;
126
127	/* reject WEP and TKIP keys if WEP failed to initialize */
128	switch (params->cipher) {
129	case WLAN_CIPHER_SUITE_WEP40:
130	case WLAN_CIPHER_SUITE_TKIP:
131	case WLAN_CIPHER_SUITE_WEP104:
132		if (IS_ERR(sdata->local->wep_tx_tfm))
133			return -EINVAL;
134		break;
135	default:
136		break;
137	}
138
139	key = ieee80211_key_alloc(params->cipher, key_idx, params->key_len,
140				  params->key, params->seq_len, params->seq);
141	if (IS_ERR(key))
142		return PTR_ERR(key);
143
144	if (pairwise)
145		key->conf.flags |= IEEE80211_KEY_FLAG_PAIRWISE;
146
147	mutex_lock(&sdata->local->sta_mtx);
148
149	if (mac_addr) {
150		if (ieee80211_vif_is_mesh(&sdata->vif))
151			sta = sta_info_get(sdata, mac_addr);
152		else
153			sta = sta_info_get_bss(sdata, mac_addr);
154		if (!sta) {
155			ieee80211_key_free(sdata->local, key);
156			err = -ENOENT;
157			goto out_unlock;
158		}
159	}
160
161	err = ieee80211_key_link(key, sdata, sta);
162	if (err)
163		ieee80211_key_free(sdata->local, key);
164
165 out_unlock:
166	mutex_unlock(&sdata->local->sta_mtx);
167
168	return err;
169}
170
171static int ieee80211_del_key(struct wiphy *wiphy, struct net_device *dev,
172			     u8 key_idx, bool pairwise, const u8 *mac_addr)
173{
174	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
175	struct ieee80211_local *local = sdata->local;
176	struct sta_info *sta;
177	struct ieee80211_key *key = NULL;
178	int ret;
179
180	mutex_lock(&local->sta_mtx);
181	mutex_lock(&local->key_mtx);
182
183	if (mac_addr) {
184		ret = -ENOENT;
185
186		sta = sta_info_get_bss(sdata, mac_addr);
187		if (!sta)
188			goto out_unlock;
189
190		if (pairwise)
191			key = key_mtx_dereference(local, sta->ptk);
192		else
193			key = key_mtx_dereference(local, sta->gtk[key_idx]);
194	} else
195		key = key_mtx_dereference(local, sdata->keys[key_idx]);
196
197	if (!key) {
198		ret = -ENOENT;
199		goto out_unlock;
200	}
201
202	__ieee80211_key_free(key);
203
204	ret = 0;
205 out_unlock:
206	mutex_unlock(&local->key_mtx);
207	mutex_unlock(&local->sta_mtx);
208
209	return ret;
210}
211
212static int ieee80211_get_key(struct wiphy *wiphy, struct net_device *dev,
213			     u8 key_idx, bool pairwise, const u8 *mac_addr,
214			     void *cookie,
215			     void (*callback)(void *cookie,
216					      struct key_params *params))
217{
218	struct ieee80211_sub_if_data *sdata;
219	struct sta_info *sta = NULL;
220	u8 seq[6] = {0};
221	struct key_params params;
222	struct ieee80211_key *key = NULL;
223	u64 pn64;
224	u32 iv32;
225	u16 iv16;
226	int err = -ENOENT;
227
228	sdata = IEEE80211_DEV_TO_SUB_IF(dev);
229
230	rcu_read_lock();
231
232	if (mac_addr) {
233		sta = sta_info_get_bss(sdata, mac_addr);
234		if (!sta)
235			goto out;
236
237		if (pairwise)
238			key = rcu_dereference(sta->ptk);
239		else if (key_idx < NUM_DEFAULT_KEYS)
240			key = rcu_dereference(sta->gtk[key_idx]);
241	} else
242		key = rcu_dereference(sdata->keys[key_idx]);
243
244	if (!key)
245		goto out;
246
247	memset(&params, 0, sizeof(params));
248
249	params.cipher = key->conf.cipher;
250
251	switch (key->conf.cipher) {
252	case WLAN_CIPHER_SUITE_TKIP:
253		iv32 = key->u.tkip.tx.iv32;
254		iv16 = key->u.tkip.tx.iv16;
255
256		if (key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE)
257			drv_get_tkip_seq(sdata->local,
258					 key->conf.hw_key_idx,
259					 &iv32, &iv16);
260
261		seq[0] = iv16 & 0xff;
262		seq[1] = (iv16 >> 8) & 0xff;
263		seq[2] = iv32 & 0xff;
264		seq[3] = (iv32 >> 8) & 0xff;
265		seq[4] = (iv32 >> 16) & 0xff;
266		seq[5] = (iv32 >> 24) & 0xff;
267		params.seq = seq;
268		params.seq_len = 6;
269		break;
270	case WLAN_CIPHER_SUITE_CCMP:
271		pn64 = atomic64_read(&key->u.ccmp.tx_pn);
272		seq[0] = pn64;
273		seq[1] = pn64 >> 8;
274		seq[2] = pn64 >> 16;
275		seq[3] = pn64 >> 24;
276		seq[4] = pn64 >> 32;
277		seq[5] = pn64 >> 40;
278		params.seq = seq;
279		params.seq_len = 6;
280		break;
281	case WLAN_CIPHER_SUITE_AES_CMAC:
282		pn64 = atomic64_read(&key->u.aes_cmac.tx_pn);
283		seq[0] = pn64;
284		seq[1] = pn64 >> 8;
285		seq[2] = pn64 >> 16;
286		seq[3] = pn64 >> 24;
287		seq[4] = pn64 >> 32;
288		seq[5] = pn64 >> 40;
289		params.seq = seq;
290		params.seq_len = 6;
291		break;
292	}
293
294	params.key = key->conf.key;
295	params.key_len = key->conf.keylen;
296
297	callback(cookie, &params);
298	err = 0;
299
300 out:
301	rcu_read_unlock();
302	return err;
303}
304
305static int ieee80211_config_default_key(struct wiphy *wiphy,
306					struct net_device *dev,
307					u8 key_idx, bool uni,
308					bool multi)
309{
310	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
311
312	ieee80211_set_default_key(sdata, key_idx, uni, multi);
313
314	return 0;
315}
316
317static int ieee80211_config_default_mgmt_key(struct wiphy *wiphy,
318					     struct net_device *dev,
319					     u8 key_idx)
320{
321	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
322
323	ieee80211_set_default_mgmt_key(sdata, key_idx);
324
325	return 0;
326}
327
328static void rate_idx_to_bitrate(struct rate_info *rate, struct sta_info *sta, int idx)
329{
330	if (!(rate->flags & RATE_INFO_FLAGS_MCS)) {
331		struct ieee80211_supported_band *sband;
332		sband = sta->local->hw.wiphy->bands[
333				sta->local->hw.conf.channel->band];
334		rate->legacy = sband->bitrates[idx].bitrate;
335	} else
336		rate->mcs = idx;
337}
338
339void sta_set_rate_info_tx(struct sta_info *sta,
340			  const struct ieee80211_tx_rate *rate,
341			  struct rate_info *rinfo)
342{
343	rinfo->flags = 0;
344	if (rate->flags & IEEE80211_TX_RC_MCS)
345		rinfo->flags |= RATE_INFO_FLAGS_MCS;
346	if (rate->flags & IEEE80211_TX_RC_40_MHZ_WIDTH)
347		rinfo->flags |= RATE_INFO_FLAGS_40_MHZ_WIDTH;
348	if (rate->flags & IEEE80211_TX_RC_SHORT_GI)
349		rinfo->flags |= RATE_INFO_FLAGS_SHORT_GI;
350	rate_idx_to_bitrate(rinfo, sta, rate->idx);
351}
352
353static void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo)
354{
355	struct ieee80211_sub_if_data *sdata = sta->sdata;
356	struct timespec uptime;
357
358	sinfo->generation = sdata->local->sta_generation;
359
360	sinfo->filled = STATION_INFO_INACTIVE_TIME |
361			STATION_INFO_RX_BYTES |
362			STATION_INFO_TX_BYTES |
363			STATION_INFO_RX_PACKETS |
364			STATION_INFO_TX_PACKETS |
365			STATION_INFO_TX_RETRIES |
366			STATION_INFO_TX_FAILED |
367			STATION_INFO_TX_BITRATE |
368			STATION_INFO_RX_BITRATE |
369			STATION_INFO_RX_DROP_MISC |
370			STATION_INFO_BSS_PARAM |
371			STATION_INFO_CONNECTED_TIME |
372			STATION_INFO_STA_FLAGS |
373			STATION_INFO_BEACON_LOSS_COUNT;
374
375	do_posix_clock_monotonic_gettime(&uptime);
376	sinfo->connected_time = uptime.tv_sec - sta->last_connected;
377
378	sinfo->inactive_time = jiffies_to_msecs(jiffies - sta->last_rx);
379	sinfo->rx_bytes = sta->rx_bytes;
380	sinfo->tx_bytes = sta->tx_bytes;
381	sinfo->rx_packets = sta->rx_packets;
382	sinfo->tx_packets = sta->tx_packets;
383	sinfo->tx_retries = sta->tx_retry_count;
384	sinfo->tx_failed = sta->tx_retry_failed;
385	sinfo->rx_dropped_misc = sta->rx_dropped;
386	sinfo->beacon_loss_count = sta->beacon_loss_count;
387
388	if ((sta->local->hw.flags & IEEE80211_HW_SIGNAL_DBM) ||
389	    (sta->local->hw.flags & IEEE80211_HW_SIGNAL_UNSPEC)) {
390		sinfo->filled |= STATION_INFO_SIGNAL | STATION_INFO_SIGNAL_AVG;
391		sinfo->signal = (s8)sta->last_signal;
392		sinfo->signal_avg = (s8) -ewma_read(&sta->avg_signal);
393	}
394
395	sta_set_rate_info_tx(sta, &sta->last_tx_rate, &sinfo->txrate);
396
397	sinfo->rxrate.flags = 0;
398	if (sta->last_rx_rate_flag & RX_FLAG_HT)
399		sinfo->rxrate.flags |= RATE_INFO_FLAGS_MCS;
400	if (sta->last_rx_rate_flag & RX_FLAG_40MHZ)
401		sinfo->rxrate.flags |= RATE_INFO_FLAGS_40_MHZ_WIDTH;
402	if (sta->last_rx_rate_flag & RX_FLAG_SHORT_GI)
403		sinfo->rxrate.flags |= RATE_INFO_FLAGS_SHORT_GI;
404	rate_idx_to_bitrate(&sinfo->rxrate, sta, sta->last_rx_rate_idx);
405
406	if (ieee80211_vif_is_mesh(&sdata->vif)) {
407#ifdef CONFIG_MAC80211_MESH
408		sinfo->filled |= STATION_INFO_LLID |
409				 STATION_INFO_PLID |
410				 STATION_INFO_PLINK_STATE;
411
412		sinfo->llid = le16_to_cpu(sta->llid);
413		sinfo->plid = le16_to_cpu(sta->plid);
414		sinfo->plink_state = sta->plink_state;
415		if (test_sta_flag(sta, WLAN_STA_TOFFSET_KNOWN)) {
416			sinfo->filled |= STATION_INFO_T_OFFSET;
417			sinfo->t_offset = sta->t_offset;
418		}
419#endif
420	}
421
422	sinfo->bss_param.flags = 0;
423	if (sdata->vif.bss_conf.use_cts_prot)
424		sinfo->bss_param.flags |= BSS_PARAM_FLAGS_CTS_PROT;
425	if (sdata->vif.bss_conf.use_short_preamble)
426		sinfo->bss_param.flags |= BSS_PARAM_FLAGS_SHORT_PREAMBLE;
427	if (sdata->vif.bss_conf.use_short_slot)
428		sinfo->bss_param.flags |= BSS_PARAM_FLAGS_SHORT_SLOT_TIME;
429	sinfo->bss_param.dtim_period = sdata->local->hw.conf.ps_dtim_period;
430	sinfo->bss_param.beacon_interval = sdata->vif.bss_conf.beacon_int;
431
432	sinfo->sta_flags.set = 0;
433	sinfo->sta_flags.mask = BIT(NL80211_STA_FLAG_AUTHORIZED) |
434				BIT(NL80211_STA_FLAG_SHORT_PREAMBLE) |
435				BIT(NL80211_STA_FLAG_WME) |
436				BIT(NL80211_STA_FLAG_MFP) |
437				BIT(NL80211_STA_FLAG_AUTHENTICATED) |
438				BIT(NL80211_STA_FLAG_TDLS_PEER);
439	if (test_sta_flag(sta, WLAN_STA_AUTHORIZED))
440		sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_AUTHORIZED);
441	if (test_sta_flag(sta, WLAN_STA_SHORT_PREAMBLE))
442		sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_SHORT_PREAMBLE);
443	if (test_sta_flag(sta, WLAN_STA_WME))
444		sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_WME);
445	if (test_sta_flag(sta, WLAN_STA_MFP))
446		sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_MFP);
447	if (test_sta_flag(sta, WLAN_STA_AUTH))
448		sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_AUTHENTICATED);
449	if (test_sta_flag(sta, WLAN_STA_TDLS_PEER))
450		sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_TDLS_PEER);
451}
452
453
454static int ieee80211_dump_station(struct wiphy *wiphy, struct net_device *dev,
455				 int idx, u8 *mac, struct station_info *sinfo)
456{
457	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
458	struct sta_info *sta;
459	int ret = -ENOENT;
460
461	rcu_read_lock();
462
463	sta = sta_info_get_by_idx(sdata, idx);
464	if (sta) {
465		ret = 0;
466		memcpy(mac, sta->sta.addr, ETH_ALEN);
467		sta_set_sinfo(sta, sinfo);
468	}
469
470	rcu_read_unlock();
471
472	return ret;
473}
474
475static int ieee80211_dump_survey(struct wiphy *wiphy, struct net_device *dev,
476				 int idx, struct survey_info *survey)
477{
478	struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
479
480	return drv_get_survey(local, idx, survey);
481}
482
483static int ieee80211_get_station(struct wiphy *wiphy, struct net_device *dev,
484				 u8 *mac, struct station_info *sinfo)
485{
486	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
487	struct sta_info *sta;
488	int ret = -ENOENT;
489
490	rcu_read_lock();
491
492	sta = sta_info_get_bss(sdata, mac);
493	if (sta) {
494		ret = 0;
495		sta_set_sinfo(sta, sinfo);
496	}
497
498	rcu_read_unlock();
499
500	return ret;
501}
502
503static int ieee80211_set_probe_resp(struct ieee80211_sub_if_data *sdata,
504				    const u8 *resp, size_t resp_len)
505{
506	struct sk_buff *new, *old;
507
508	if (!resp || !resp_len)
509		return 1;
510
511	old = rtnl_dereference(sdata->u.ap.probe_resp);
512
513	new = dev_alloc_skb(resp_len);
514	if (!new)
515		return -ENOMEM;
516
517	memcpy(skb_put(new, resp_len), resp, resp_len);
518
519	rcu_assign_pointer(sdata->u.ap.probe_resp, new);
520	if (old) {
521		/* TODO: use call_rcu() */
522		synchronize_rcu();
523		dev_kfree_skb(old);
524	}
525
526	return 0;
527}
528
529static int ieee80211_assign_beacon(struct ieee80211_sub_if_data *sdata,
530				   struct cfg80211_beacon_data *params)
531{
532	struct beacon_data *new, *old;
533	int new_head_len, new_tail_len;
534	int size, err;
535	u32 changed = BSS_CHANGED_BEACON;
536
537	old = rtnl_dereference(sdata->u.ap.beacon);
538
539	/* Need to have a beacon head if we don't have one yet */
540	if (!params->head && !old)
541		return -EINVAL;
542
543	/* new or old head? */
544	if (params->head)
545		new_head_len = params->head_len;
546	else
547		new_head_len = old->head_len;
548
549	/* new or old tail? */
550	if (params->tail || !old)
551		/* params->tail_len will be zero for !params->tail */
552		new_tail_len = params->tail_len;
553	else
554		new_tail_len = old->tail_len;
555
556	size = sizeof(*new) + new_head_len + new_tail_len;
557
558	new = kzalloc(size, GFP_KERNEL);
559	if (!new)
560		return -ENOMEM;
561
562	/* start filling the new info now */
563
564	/*
565	 * pointers go into the block we allocated,
566	 * memory is | beacon_data | head | tail |
567	 */
568	new->head = ((u8 *) new) + sizeof(*new);
569	new->tail = new->head + new_head_len;
570	new->head_len = new_head_len;
571	new->tail_len = new_tail_len;
572
573	/* copy in head */
574	if (params->head)
575		memcpy(new->head, params->head, new_head_len);
576	else
577		memcpy(new->head, old->head, new_head_len);
578
579	/* copy in optional tail */
580	if (params->tail)
581		memcpy(new->tail, params->tail, new_tail_len);
582	else
583		if (old)
584			memcpy(new->tail, old->tail, new_tail_len);
585
586	err = ieee80211_set_probe_resp(sdata, params->probe_resp,
587				       params->probe_resp_len);
588	if (err < 0)
589		return err;
590	if (err == 0)
591		changed |= BSS_CHANGED_AP_PROBE_RESP;
592
593	rcu_assign_pointer(sdata->u.ap.beacon, new);
594
595	if (old)
596		kfree_rcu(old, rcu_head);
597
598	return changed;
599}
600
601static int ieee80211_start_ap(struct wiphy *wiphy, struct net_device *dev,
602			      struct cfg80211_ap_settings *params)
603{
604	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
605	struct beacon_data *old;
606	struct ieee80211_sub_if_data *vlan;
607	u32 changed = BSS_CHANGED_BEACON_INT |
608		      BSS_CHANGED_BEACON_ENABLED |
609		      BSS_CHANGED_BEACON |
610		      BSS_CHANGED_SSID;
611	int err;
612
613	old = rtnl_dereference(sdata->u.ap.beacon);
614	if (old)
615		return -EALREADY;
616
617	/*
618	 * Apply control port protocol, this allows us to
619	 * not encrypt dynamic WEP control frames.
620	 */
621	sdata->control_port_protocol = params->crypto.control_port_ethertype;
622	sdata->control_port_no_encrypt = params->crypto.control_port_no_encrypt;
623	list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list) {
624		vlan->control_port_protocol =
625			params->crypto.control_port_ethertype;
626		vlan->control_port_no_encrypt =
627			params->crypto.control_port_no_encrypt;
628	}
629
630	sdata->vif.bss_conf.beacon_int = params->beacon_interval;
631	sdata->vif.bss_conf.dtim_period = params->dtim_period;
632
633	sdata->vif.bss_conf.ssid_len = params->ssid_len;
634	if (params->ssid_len)
635		memcpy(sdata->vif.bss_conf.ssid, params->ssid,
636		       params->ssid_len);
637	sdata->vif.bss_conf.hidden_ssid =
638		(params->hidden_ssid != NL80211_HIDDEN_SSID_NOT_IN_USE);
639
640	err = ieee80211_assign_beacon(sdata, &params->beacon);
641	if (err < 0)
642		return err;
643	changed |= err;
644
645	ieee80211_bss_info_change_notify(sdata, changed);
646
647	netif_carrier_on(dev);
648	list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list)
649		netif_carrier_on(vlan->dev);
650
651	return 0;
652}
653
654static int ieee80211_change_beacon(struct wiphy *wiphy, struct net_device *dev,
655				   struct cfg80211_beacon_data *params)
656{
657	struct ieee80211_sub_if_data *sdata;
658	struct beacon_data *old;
659	int err;
660
661	sdata = IEEE80211_DEV_TO_SUB_IF(dev);
662
663	old = rtnl_dereference(sdata->u.ap.beacon);
664	if (!old)
665		return -ENOENT;
666
667	err = ieee80211_assign_beacon(sdata, params);
668	if (err < 0)
669		return err;
670	ieee80211_bss_info_change_notify(sdata, err);
671	return 0;
672}
673
674static int ieee80211_stop_ap(struct wiphy *wiphy, struct net_device *dev)
675{
676	struct ieee80211_sub_if_data *sdata, *vlan;
677	struct beacon_data *old;
678
679	sdata = IEEE80211_DEV_TO_SUB_IF(dev);
680
681	old = rtnl_dereference(sdata->u.ap.beacon);
682	if (!old)
683		return -ENOENT;
684
685	list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list)
686		netif_carrier_off(vlan->dev);
687	netif_carrier_off(dev);
688
689	RCU_INIT_POINTER(sdata->u.ap.beacon, NULL);
690
691	kfree_rcu(old, rcu_head);
692
693	ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON_ENABLED);
694
695	return 0;
696}
697
698/* Layer 2 Update frame (802.2 Type 1 LLC XID Update response) */
699struct iapp_layer2_update {
700	u8 da[ETH_ALEN];	/* broadcast */
701	u8 sa[ETH_ALEN];	/* STA addr */
702	__be16 len;		/* 6 */
703	u8 dsap;		/* 0 */
704	u8 ssap;		/* 0 */
705	u8 control;
706	u8 xid_info[3];
707} __packed;
708
709static void ieee80211_send_layer2_update(struct sta_info *sta)
710{
711	struct iapp_layer2_update *msg;
712	struct sk_buff *skb;
713
714	/* Send Level 2 Update Frame to update forwarding tables in layer 2
715	 * bridge devices */
716
717	skb = dev_alloc_skb(sizeof(*msg));
718	if (!skb)
719		return;
720	msg = (struct iapp_layer2_update *)skb_put(skb, sizeof(*msg));
721
722	/* 802.2 Type 1 Logical Link Control (LLC) Exchange Identifier (XID)
723	 * Update response frame; IEEE Std 802.2-1998, 5.4.1.2.1 */
724
725	memset(msg->da, 0xff, ETH_ALEN);
726	memcpy(msg->sa, sta->sta.addr, ETH_ALEN);
727	msg->len = htons(6);
728	msg->dsap = 0;
729	msg->ssap = 0x01;	/* NULL LSAP, CR Bit: Response */
730	msg->control = 0xaf;	/* XID response lsb.1111F101.
731				 * F=0 (no poll command; unsolicited frame) */
732	msg->xid_info[0] = 0x81;	/* XID format identifier */
733	msg->xid_info[1] = 1;	/* LLC types/classes: Type 1 LLC */
734	msg->xid_info[2] = 0;	/* XID sender's receive window size (RW) */
735
736	skb->dev = sta->sdata->dev;
737	skb->protocol = eth_type_trans(skb, sta->sdata->dev);
738	memset(skb->cb, 0, sizeof(skb->cb));
739	netif_rx_ni(skb);
740}
741
742static int sta_apply_parameters(struct ieee80211_local *local,
743				struct sta_info *sta,
744				struct station_parameters *params)
745{
746	int ret = 0;
747	u32 rates;
748	int i, j;
749	struct ieee80211_supported_band *sband;
750	struct ieee80211_sub_if_data *sdata = sta->sdata;
751	u32 mask, set;
752
753	sband = local->hw.wiphy->bands[local->oper_channel->band];
754
755	mask = params->sta_flags_mask;
756	set = params->sta_flags_set;
757
758	/*
759	 * In mesh mode, we can clear AUTHENTICATED flag but must
760	 * also make ASSOCIATED follow appropriately for the driver
761	 * API. See also below, after AUTHORIZED changes.
762	 */
763	if (mask & BIT(NL80211_STA_FLAG_AUTHENTICATED)) {
764		/* cfg80211 should not allow this in non-mesh modes */
765		if (WARN_ON(!ieee80211_vif_is_mesh(&sdata->vif)))
766			return -EINVAL;
767
768		if (set & BIT(NL80211_STA_FLAG_AUTHENTICATED) &&
769		    !test_sta_flag(sta, WLAN_STA_AUTH)) {
770			ret = sta_info_move_state(sta, IEEE80211_STA_AUTH);
771			if (ret)
772				return ret;
773			ret = sta_info_move_state(sta, IEEE80211_STA_ASSOC);
774			if (ret)
775				return ret;
776		}
777	}
778
779	if (mask & BIT(NL80211_STA_FLAG_AUTHORIZED)) {
780		if (set & BIT(NL80211_STA_FLAG_AUTHORIZED))
781			ret = sta_info_move_state(sta, IEEE80211_STA_AUTHORIZED);
782		else if (test_sta_flag(sta, WLAN_STA_AUTHORIZED))
783			ret = sta_info_move_state(sta, IEEE80211_STA_ASSOC);
784		if (ret)
785			return ret;
786	}
787
788	if (mask & BIT(NL80211_STA_FLAG_AUTHENTICATED)) {
789		/* cfg80211 should not allow this in non-mesh modes */
790		if (WARN_ON(!ieee80211_vif_is_mesh(&sdata->vif)))
791			return -EINVAL;
792
793		if (!(set & BIT(NL80211_STA_FLAG_AUTHENTICATED)) &&
794		    test_sta_flag(sta, WLAN_STA_AUTH)) {
795			ret = sta_info_move_state(sta, IEEE80211_STA_AUTH);
796			if (ret)
797				return ret;
798			ret = sta_info_move_state(sta, IEEE80211_STA_NONE);
799			if (ret)
800				return ret;
801		}
802	}
803
804
805	if (mask & BIT(NL80211_STA_FLAG_SHORT_PREAMBLE)) {
806		if (set & BIT(NL80211_STA_FLAG_SHORT_PREAMBLE))
807			set_sta_flag(sta, WLAN_STA_SHORT_PREAMBLE);
808		else
809			clear_sta_flag(sta, WLAN_STA_SHORT_PREAMBLE);
810	}
811
812	if (mask & BIT(NL80211_STA_FLAG_WME)) {
813		if (set & BIT(NL80211_STA_FLAG_WME)) {
814			set_sta_flag(sta, WLAN_STA_WME);
815			sta->sta.wme = true;
816		} else {
817			clear_sta_flag(sta, WLAN_STA_WME);
818			sta->sta.wme = false;
819		}
820	}
821
822	if (mask & BIT(NL80211_STA_FLAG_MFP)) {
823		if (set & BIT(NL80211_STA_FLAG_MFP))
824			set_sta_flag(sta, WLAN_STA_MFP);
825		else
826			clear_sta_flag(sta, WLAN_STA_MFP);
827	}
828
829	if (mask & BIT(NL80211_STA_FLAG_TDLS_PEER)) {
830		if (set & BIT(NL80211_STA_FLAG_TDLS_PEER))
831			set_sta_flag(sta, WLAN_STA_TDLS_PEER);
832		else
833			clear_sta_flag(sta, WLAN_STA_TDLS_PEER);
834	}
835
836	if (params->sta_modify_mask & STATION_PARAM_APPLY_UAPSD) {
837		sta->sta.uapsd_queues = params->uapsd_queues;
838		sta->sta.max_sp = params->max_sp;
839	}
840
841	/*
842	 * cfg80211 validates this (1-2007) and allows setting the AID
843	 * only when creating a new station entry
844	 */
845	if (params->aid)
846		sta->sta.aid = params->aid;
847
848	/*
849	 * FIXME: updating the following information is racy when this
850	 *	  function is called from ieee80211_change_station().
851	 *	  However, all this information should be static so
852	 *	  maybe we should just reject attemps to change it.
853	 */
854
855	if (params->listen_interval >= 0)
856		sta->listen_interval = params->listen_interval;
857
858	if (params->supported_rates) {
859		rates = 0;
860
861		for (i = 0; i < params->supported_rates_len; i++) {
862			int rate = (params->supported_rates[i] & 0x7f) * 5;
863			for (j = 0; j < sband->n_bitrates; j++) {
864				if (sband->bitrates[j].bitrate == rate)
865					rates |= BIT(j);
866			}
867		}
868		sta->sta.supp_rates[local->oper_channel->band] = rates;
869	}
870
871	if (params->ht_capa)
872		ieee80211_ht_cap_ie_to_sta_ht_cap(sdata, sband,
873						  params->ht_capa,
874						  &sta->sta.ht_cap);
875
876	if (ieee80211_vif_is_mesh(&sdata->vif)) {
877#ifdef CONFIG_MAC80211_MESH
878		if (sdata->u.mesh.security & IEEE80211_MESH_SEC_SECURED)
879			switch (params->plink_state) {
880			case NL80211_PLINK_LISTEN:
881			case NL80211_PLINK_ESTAB:
882			case NL80211_PLINK_BLOCKED:
883				sta->plink_state = params->plink_state;
884				break;
885			default:
886				/*  nothing  */
887				break;
888			}
889		else
890			switch (params->plink_action) {
891			case PLINK_ACTION_OPEN:
892				mesh_plink_open(sta);
893				break;
894			case PLINK_ACTION_BLOCK:
895				mesh_plink_block(sta);
896				break;
897			}
898#endif
899	}
900
901	return 0;
902}
903
904static int ieee80211_add_station(struct wiphy *wiphy, struct net_device *dev,
905				 u8 *mac, struct station_parameters *params)
906{
907	struct ieee80211_local *local = wiphy_priv(wiphy);
908	struct sta_info *sta;
909	struct ieee80211_sub_if_data *sdata;
910	int err;
911	int layer2_update;
912
913	if (params->vlan) {
914		sdata = IEEE80211_DEV_TO_SUB_IF(params->vlan);
915
916		if (sdata->vif.type != NL80211_IFTYPE_AP_VLAN &&
917		    sdata->vif.type != NL80211_IFTYPE_AP)
918			return -EINVAL;
919	} else
920		sdata = IEEE80211_DEV_TO_SUB_IF(dev);
921
922	if (compare_ether_addr(mac, sdata->vif.addr) == 0)
923		return -EINVAL;
924
925	if (is_multicast_ether_addr(mac))
926		return -EINVAL;
927
928	sta = sta_info_alloc(sdata, mac, GFP_KERNEL);
929	if (!sta)
930		return -ENOMEM;
931
932	sta_info_pre_move_state(sta, IEEE80211_STA_AUTH);
933	sta_info_pre_move_state(sta, IEEE80211_STA_ASSOC);
934
935	err = sta_apply_parameters(local, sta, params);
936	if (err) {
937		sta_info_free(local, sta);
938		return err;
939	}
940
941	/*
942	 * for TDLS, rate control should be initialized only when supported
943	 * rates are known.
944	 */
945	if (!test_sta_flag(sta, WLAN_STA_TDLS_PEER))
946		rate_control_rate_init(sta);
947
948	layer2_update = sdata->vif.type == NL80211_IFTYPE_AP_VLAN ||
949		sdata->vif.type == NL80211_IFTYPE_AP;
950
951	err = sta_info_insert_rcu(sta);
952	if (err) {
953		rcu_read_unlock();
954		return err;
955	}
956
957	if (layer2_update)
958		ieee80211_send_layer2_update(sta);
959
960	rcu_read_unlock();
961
962	return 0;
963}
964
965static int ieee80211_del_station(struct wiphy *wiphy, struct net_device *dev,
966				 u8 *mac)
967{
968	struct ieee80211_local *local = wiphy_priv(wiphy);
969	struct ieee80211_sub_if_data *sdata;
970
971	sdata = IEEE80211_DEV_TO_SUB_IF(dev);
972
973	if (mac)
974		return sta_info_destroy_addr_bss(sdata, mac);
975
976	sta_info_flush(local, sdata);
977	return 0;
978}
979
980static int ieee80211_change_station(struct wiphy *wiphy,
981				    struct net_device *dev,
982				    u8 *mac,
983				    struct station_parameters *params)
984{
985	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
986	struct ieee80211_local *local = wiphy_priv(wiphy);
987	struct sta_info *sta;
988	struct ieee80211_sub_if_data *vlansdata;
989	int err;
990
991	mutex_lock(&local->sta_mtx);
992
993	sta = sta_info_get_bss(sdata, mac);
994	if (!sta) {
995		mutex_unlock(&local->sta_mtx);
996		return -ENOENT;
997	}
998
999	/* in station mode, supported rates are only valid with TDLS */
1000	if (sdata->vif.type == NL80211_IFTYPE_STATION &&
1001	    params->supported_rates &&
1002	    !test_sta_flag(sta, WLAN_STA_TDLS_PEER)) {
1003		mutex_unlock(&local->sta_mtx);
1004		return -EINVAL;
1005	}
1006
1007	if (params->vlan && params->vlan != sta->sdata->dev) {
1008		vlansdata = IEEE80211_DEV_TO_SUB_IF(params->vlan);
1009
1010		if (vlansdata->vif.type != NL80211_IFTYPE_AP_VLAN &&
1011		    vlansdata->vif.type != NL80211_IFTYPE_AP) {
1012			mutex_unlock(&local->sta_mtx);
1013			return -EINVAL;
1014		}
1015
1016		if (params->vlan->ieee80211_ptr->use_4addr) {
1017			if (vlansdata->u.vlan.sta) {
1018				mutex_unlock(&local->sta_mtx);
1019				return -EBUSY;
1020			}
1021
1022			rcu_assign_pointer(vlansdata->u.vlan.sta, sta);
1023		}
1024
1025		sta->sdata = vlansdata;
1026		ieee80211_send_layer2_update(sta);
1027	}
1028
1029	err = sta_apply_parameters(local, sta, params);
1030	if (err) {
1031		mutex_unlock(&local->sta_mtx);
1032		return err;
1033	}
1034
1035	if (test_sta_flag(sta, WLAN_STA_TDLS_PEER) && params->supported_rates)
1036		rate_control_rate_init(sta);
1037
1038	mutex_unlock(&local->sta_mtx);
1039
1040	if (sdata->vif.type == NL80211_IFTYPE_STATION &&
1041	    params->sta_flags_mask & BIT(NL80211_STA_FLAG_AUTHORIZED))
1042		ieee80211_recalc_ps(local, -1);
1043
1044	return 0;
1045}
1046
1047#ifdef CONFIG_MAC80211_MESH
1048static int ieee80211_add_mpath(struct wiphy *wiphy, struct net_device *dev,
1049				 u8 *dst, u8 *next_hop)
1050{
1051	struct ieee80211_sub_if_data *sdata;
1052	struct mesh_path *mpath;
1053	struct sta_info *sta;
1054	int err;
1055
1056	sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1057
1058	rcu_read_lock();
1059	sta = sta_info_get(sdata, next_hop);
1060	if (!sta) {
1061		rcu_read_unlock();
1062		return -ENOENT;
1063	}
1064
1065	err = mesh_path_add(dst, sdata);
1066	if (err) {
1067		rcu_read_unlock();
1068		return err;
1069	}
1070
1071	mpath = mesh_path_lookup(dst, sdata);
1072	if (!mpath) {
1073		rcu_read_unlock();
1074		return -ENXIO;
1075	}
1076	mesh_path_fix_nexthop(mpath, sta);
1077
1078	rcu_read_unlock();
1079	return 0;
1080}
1081
1082static int ieee80211_del_mpath(struct wiphy *wiphy, struct net_device *dev,
1083				 u8 *dst)
1084{
1085	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1086
1087	if (dst)
1088		return mesh_path_del(dst, sdata);
1089
1090	mesh_path_flush_by_iface(sdata);
1091	return 0;
1092}
1093
1094static int ieee80211_change_mpath(struct wiphy *wiphy,
1095				    struct net_device *dev,
1096				    u8 *dst, u8 *next_hop)
1097{
1098	struct ieee80211_sub_if_data *sdata;
1099	struct mesh_path *mpath;
1100	struct sta_info *sta;
1101
1102	sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1103
1104	rcu_read_lock();
1105
1106	sta = sta_info_get(sdata, next_hop);
1107	if (!sta) {
1108		rcu_read_unlock();
1109		return -ENOENT;
1110	}
1111
1112	mpath = mesh_path_lookup(dst, sdata);
1113	if (!mpath) {
1114		rcu_read_unlock();
1115		return -ENOENT;
1116	}
1117
1118	mesh_path_fix_nexthop(mpath, sta);
1119
1120	rcu_read_unlock();
1121	return 0;
1122}
1123
1124static void mpath_set_pinfo(struct mesh_path *mpath, u8 *next_hop,
1125			    struct mpath_info *pinfo)
1126{
1127	struct sta_info *next_hop_sta = rcu_dereference(mpath->next_hop);
1128
1129	if (next_hop_sta)
1130		memcpy(next_hop, next_hop_sta->sta.addr, ETH_ALEN);
1131	else
1132		memset(next_hop, 0, ETH_ALEN);
1133
1134	pinfo->generation = mesh_paths_generation;
1135
1136	pinfo->filled = MPATH_INFO_FRAME_QLEN |
1137			MPATH_INFO_SN |
1138			MPATH_INFO_METRIC |
1139			MPATH_INFO_EXPTIME |
1140			MPATH_INFO_DISCOVERY_TIMEOUT |
1141			MPATH_INFO_DISCOVERY_RETRIES |
1142			MPATH_INFO_FLAGS;
1143
1144	pinfo->frame_qlen = mpath->frame_queue.qlen;
1145	pinfo->sn = mpath->sn;
1146	pinfo->metric = mpath->metric;
1147	if (time_before(jiffies, mpath->exp_time))
1148		pinfo->exptime = jiffies_to_msecs(mpath->exp_time - jiffies);
1149	pinfo->discovery_timeout =
1150			jiffies_to_msecs(mpath->discovery_timeout);
1151	pinfo->discovery_retries = mpath->discovery_retries;
1152	pinfo->flags = 0;
1153	if (mpath->flags & MESH_PATH_ACTIVE)
1154		pinfo->flags |= NL80211_MPATH_FLAG_ACTIVE;
1155	if (mpath->flags & MESH_PATH_RESOLVING)
1156		pinfo->flags |= NL80211_MPATH_FLAG_RESOLVING;
1157	if (mpath->flags & MESH_PATH_SN_VALID)
1158		pinfo->flags |= NL80211_MPATH_FLAG_SN_VALID;
1159	if (mpath->flags & MESH_PATH_FIXED)
1160		pinfo->flags |= NL80211_MPATH_FLAG_FIXED;
1161	if (mpath->flags & MESH_PATH_RESOLVING)
1162		pinfo->flags |= NL80211_MPATH_FLAG_RESOLVING;
1163
1164	pinfo->flags = mpath->flags;
1165}
1166
1167static int ieee80211_get_mpath(struct wiphy *wiphy, struct net_device *dev,
1168			       u8 *dst, u8 *next_hop, struct mpath_info *pinfo)
1169
1170{
1171	struct ieee80211_sub_if_data *sdata;
1172	struct mesh_path *mpath;
1173
1174	sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1175
1176	rcu_read_lock();
1177	mpath = mesh_path_lookup(dst, sdata);
1178	if (!mpath) {
1179		rcu_read_unlock();
1180		return -ENOENT;
1181	}
1182	memcpy(dst, mpath->dst, ETH_ALEN);
1183	mpath_set_pinfo(mpath, next_hop, pinfo);
1184	rcu_read_unlock();
1185	return 0;
1186}
1187
1188static int ieee80211_dump_mpath(struct wiphy *wiphy, struct net_device *dev,
1189				 int idx, u8 *dst, u8 *next_hop,
1190				 struct mpath_info *pinfo)
1191{
1192	struct ieee80211_sub_if_data *sdata;
1193	struct mesh_path *mpath;
1194
1195	sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1196
1197	rcu_read_lock();
1198	mpath = mesh_path_lookup_by_idx(idx, sdata);
1199	if (!mpath) {
1200		rcu_read_unlock();
1201		return -ENOENT;
1202	}
1203	memcpy(dst, mpath->dst, ETH_ALEN);
1204	mpath_set_pinfo(mpath, next_hop, pinfo);
1205	rcu_read_unlock();
1206	return 0;
1207}
1208
1209static int ieee80211_get_mesh_config(struct wiphy *wiphy,
1210				struct net_device *dev,
1211				struct mesh_config *conf)
1212{
1213	struct ieee80211_sub_if_data *sdata;
1214	sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1215
1216	memcpy(conf, &(sdata->u.mesh.mshcfg), sizeof(struct mesh_config));
1217	return 0;
1218}
1219
1220static inline bool _chg_mesh_attr(enum nl80211_meshconf_params parm, u32 mask)
1221{
1222	return (mask >> (parm-1)) & 0x1;
1223}
1224
1225static int copy_mesh_setup(struct ieee80211_if_mesh *ifmsh,
1226		const struct mesh_setup *setup)
1227{
1228	u8 *new_ie;
1229	const u8 *old_ie;
1230	struct ieee80211_sub_if_data *sdata = container_of(ifmsh,
1231					struct ieee80211_sub_if_data, u.mesh);
1232
1233	/* allocate information elements */
1234	new_ie = NULL;
1235	old_ie = ifmsh->ie;
1236
1237	if (setup->ie_len) {
1238		new_ie = kmemdup(setup->ie, setup->ie_len,
1239				GFP_KERNEL);
1240		if (!new_ie)
1241			return -ENOMEM;
1242	}
1243	ifmsh->ie_len = setup->ie_len;
1244	ifmsh->ie = new_ie;
1245	kfree(old_ie);
1246
1247	/* now copy the rest of the setup parameters */
1248	ifmsh->mesh_id_len = setup->mesh_id_len;
1249	memcpy(ifmsh->mesh_id, setup->mesh_id, ifmsh->mesh_id_len);
1250	ifmsh->mesh_sp_id = setup->sync_method;
1251	ifmsh->mesh_pp_id = setup->path_sel_proto;
1252	ifmsh->mesh_pm_id = setup->path_metric;
1253	ifmsh->security = IEEE80211_MESH_SEC_NONE;
1254	if (setup->is_authenticated)
1255		ifmsh->security |= IEEE80211_MESH_SEC_AUTHED;
1256	if (setup->is_secure)
1257		ifmsh->security |= IEEE80211_MESH_SEC_SECURED;
1258
1259	/* mcast rate setting in Mesh Node */
1260	memcpy(sdata->vif.bss_conf.mcast_rate, setup->mcast_rate,
1261						sizeof(setup->mcast_rate));
1262
1263	return 0;
1264}
1265
1266static int ieee80211_update_mesh_config(struct wiphy *wiphy,
1267					struct net_device *dev, u32 mask,
1268					const struct mesh_config *nconf)
1269{
1270	struct mesh_config *conf;
1271	struct ieee80211_sub_if_data *sdata;
1272	struct ieee80211_if_mesh *ifmsh;
1273
1274	sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1275	ifmsh = &sdata->u.mesh;
1276
1277	/* Set the config options which we are interested in setting */
1278	conf = &(sdata->u.mesh.mshcfg);
1279	if (_chg_mesh_attr(NL80211_MESHCONF_RETRY_TIMEOUT, mask))
1280		conf->dot11MeshRetryTimeout = nconf->dot11MeshRetryTimeout;
1281	if (_chg_mesh_attr(NL80211_MESHCONF_CONFIRM_TIMEOUT, mask))
1282		conf->dot11MeshConfirmTimeout = nconf->dot11MeshConfirmTimeout;
1283	if (_chg_mesh_attr(NL80211_MESHCONF_HOLDING_TIMEOUT, mask))
1284		conf->dot11MeshHoldingTimeout = nconf->dot11MeshHoldingTimeout;
1285	if (_chg_mesh_attr(NL80211_MESHCONF_MAX_PEER_LINKS, mask))
1286		conf->dot11MeshMaxPeerLinks = nconf->dot11MeshMaxPeerLinks;
1287	if (_chg_mesh_attr(NL80211_MESHCONF_MAX_RETRIES, mask))
1288		conf->dot11MeshMaxRetries = nconf->dot11MeshMaxRetries;
1289	if (_chg_mesh_attr(NL80211_MESHCONF_TTL, mask))
1290		conf->dot11MeshTTL = nconf->dot11MeshTTL;
1291	if (_chg_mesh_attr(NL80211_MESHCONF_ELEMENT_TTL, mask))
1292		conf->dot11MeshTTL = nconf->element_ttl;
1293	if (_chg_mesh_attr(NL80211_MESHCONF_AUTO_OPEN_PLINKS, mask))
1294		conf->auto_open_plinks = nconf->auto_open_plinks;
1295	if (_chg_mesh_attr(NL80211_MESHCONF_SYNC_OFFSET_MAX_NEIGHBOR, mask))
1296		conf->dot11MeshNbrOffsetMaxNeighbor =
1297			nconf->dot11MeshNbrOffsetMaxNeighbor;
1298	if (_chg_mesh_attr(NL80211_MESHCONF_HWMP_MAX_PREQ_RETRIES, mask))
1299		conf->dot11MeshHWMPmaxPREQretries =
1300			nconf->dot11MeshHWMPmaxPREQretries;
1301	if (_chg_mesh_attr(NL80211_MESHCONF_PATH_REFRESH_TIME, mask))
1302		conf->path_refresh_time = nconf->path_refresh_time;
1303	if (_chg_mesh_attr(NL80211_MESHCONF_MIN_DISCOVERY_TIMEOUT, mask))
1304		conf->min_discovery_timeout = nconf->min_discovery_timeout;
1305	if (_chg_mesh_attr(NL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT, mask))
1306		conf->dot11MeshHWMPactivePathTimeout =
1307			nconf->dot11MeshHWMPactivePathTimeout;
1308	if (_chg_mesh_attr(NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL, mask))
1309		conf->dot11MeshHWMPpreqMinInterval =
1310			nconf->dot11MeshHWMPpreqMinInterval;
1311	if (_chg_mesh_attr(NL80211_MESHCONF_HWMP_PERR_MIN_INTERVAL, mask))
1312		conf->dot11MeshHWMPperrMinInterval =
1313			nconf->dot11MeshHWMPperrMinInterval;
1314	if (_chg_mesh_attr(NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME,
1315			   mask))
1316		conf->dot11MeshHWMPnetDiameterTraversalTime =
1317			nconf->dot11MeshHWMPnetDiameterTraversalTime;
1318	if (_chg_mesh_attr(NL80211_MESHCONF_HWMP_ROOTMODE, mask)) {
1319		conf->dot11MeshHWMPRootMode = nconf->dot11MeshHWMPRootMode;
1320		ieee80211_mesh_root_setup(ifmsh);
1321	}
1322	if (_chg_mesh_attr(NL80211_MESHCONF_GATE_ANNOUNCEMENTS, mask)) {
1323		/* our current gate announcement implementation rides on root
1324		 * announcements, so require this ifmsh to also be a root node
1325		 * */
1326		if (nconf->dot11MeshGateAnnouncementProtocol &&
1327		    !conf->dot11MeshHWMPRootMode) {
1328			conf->dot11MeshHWMPRootMode = 1;
1329			ieee80211_mesh_root_setup(ifmsh);
1330		}
1331		conf->dot11MeshGateAnnouncementProtocol =
1332			nconf->dot11MeshGateAnnouncementProtocol;
1333	}
1334	if (_chg_mesh_attr(NL80211_MESHCONF_HWMP_RANN_INTERVAL, mask)) {
1335		conf->dot11MeshHWMPRannInterval =
1336			nconf->dot11MeshHWMPRannInterval;
1337	}
1338	if (_chg_mesh_attr(NL80211_MESHCONF_FORWARDING, mask))
1339		conf->dot11MeshForwarding = nconf->dot11MeshForwarding;
1340	if (_chg_mesh_attr(NL80211_MESHCONF_RSSI_THRESHOLD, mask)) {
1341		/* our RSSI threshold implementation is supported only for
1342		 * devices that report signal in dBm.
1343		 */
1344		if (!(sdata->local->hw.flags & IEEE80211_HW_SIGNAL_DBM))
1345			return -ENOTSUPP;
1346		conf->rssi_threshold = nconf->rssi_threshold;
1347	}
1348	return 0;
1349}
1350
1351static int ieee80211_join_mesh(struct wiphy *wiphy, struct net_device *dev,
1352			       const struct mesh_config *conf,
1353			       const struct mesh_setup *setup)
1354{
1355	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1356	struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh;
1357	int err;
1358
1359	memcpy(&ifmsh->mshcfg, conf, sizeof(struct mesh_config));
1360	err = copy_mesh_setup(ifmsh, setup);
1361	if (err)
1362		return err;
1363	ieee80211_start_mesh(sdata);
1364
1365	return 0;
1366}
1367
1368static int ieee80211_leave_mesh(struct wiphy *wiphy, struct net_device *dev)
1369{
1370	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1371
1372	ieee80211_stop_mesh(sdata);
1373
1374	return 0;
1375}
1376#endif
1377
1378static int ieee80211_change_bss(struct wiphy *wiphy,
1379				struct net_device *dev,
1380				struct bss_parameters *params)
1381{
1382	struct ieee80211_sub_if_data *sdata;
1383	u32 changed = 0;
1384
1385	sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1386
1387	if (params->use_cts_prot >= 0) {
1388		sdata->vif.bss_conf.use_cts_prot = params->use_cts_prot;
1389		changed |= BSS_CHANGED_ERP_CTS_PROT;
1390	}
1391	if (params->use_short_preamble >= 0) {
1392		sdata->vif.bss_conf.use_short_preamble =
1393			params->use_short_preamble;
1394		changed |= BSS_CHANGED_ERP_PREAMBLE;
1395	}
1396
1397	if (!sdata->vif.bss_conf.use_short_slot &&
1398	    sdata->local->hw.conf.channel->band == IEEE80211_BAND_5GHZ) {
1399		sdata->vif.bss_conf.use_short_slot = true;
1400		changed |= BSS_CHANGED_ERP_SLOT;
1401	}
1402
1403	if (params->use_short_slot_time >= 0) {
1404		sdata->vif.bss_conf.use_short_slot =
1405			params->use_short_slot_time;
1406		changed |= BSS_CHANGED_ERP_SLOT;
1407	}
1408
1409	if (params->basic_rates) {
1410		int i, j;
1411		u32 rates = 0;
1412		struct ieee80211_local *local = wiphy_priv(wiphy);
1413		struct ieee80211_supported_band *sband =
1414			wiphy->bands[local->oper_channel->band];
1415
1416		for (i = 0; i < params->basic_rates_len; i++) {
1417			int rate = (params->basic_rates[i] & 0x7f) * 5;
1418			for (j = 0; j < sband->n_bitrates; j++) {
1419				if (sband->bitrates[j].bitrate == rate)
1420					rates |= BIT(j);
1421			}
1422		}
1423		sdata->vif.bss_conf.basic_rates = rates;
1424		changed |= BSS_CHANGED_BASIC_RATES;
1425	}
1426
1427	if (params->ap_isolate >= 0) {
1428		if (params->ap_isolate)
1429			sdata->flags |= IEEE80211_SDATA_DONT_BRIDGE_PACKETS;
1430		else
1431			sdata->flags &= ~IEEE80211_SDATA_DONT_BRIDGE_PACKETS;
1432	}
1433
1434	if (params->ht_opmode >= 0) {
1435		sdata->vif.bss_conf.ht_operation_mode =
1436			(u16) params->ht_opmode;
1437		changed |= BSS_CHANGED_HT;
1438	}
1439
1440	ieee80211_bss_info_change_notify(sdata, changed);
1441
1442	return 0;
1443}
1444
1445static int ieee80211_set_txq_params(struct wiphy *wiphy,
1446				    struct net_device *dev,
1447				    struct ieee80211_txq_params *params)
1448{
1449	struct ieee80211_local *local = wiphy_priv(wiphy);
1450	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1451	struct ieee80211_tx_queue_params p;
1452
1453	if (!local->ops->conf_tx)
1454		return -EOPNOTSUPP;
1455
1456	if (local->hw.queues < IEEE80211_NUM_ACS)
1457		return -EOPNOTSUPP;
1458
1459	memset(&p, 0, sizeof(p));
1460	p.aifs = params->aifs;
1461	p.cw_max = params->cwmax;
1462	p.cw_min = params->cwmin;
1463	p.txop = params->txop;
1464
1465	/*
1466	 * Setting tx queue params disables u-apsd because it's only
1467	 * called in master mode.
1468	 */
1469	p.uapsd = false;
1470
1471	sdata->tx_conf[params->ac] = p;
1472	if (drv_conf_tx(local, sdata, params->ac, &p)) {
1473		wiphy_debug(local->hw.wiphy,
1474			    "failed to set TX queue parameters for AC %d\n",
1475			    params->ac);
1476		return -EINVAL;
1477	}
1478
1479	return 0;
1480}
1481
1482static int ieee80211_set_channel(struct wiphy *wiphy,
1483				 struct net_device *netdev,
1484				 struct ieee80211_channel *chan,
1485				 enum nl80211_channel_type channel_type)
1486{
1487	struct ieee80211_local *local = wiphy_priv(wiphy);
1488	struct ieee80211_sub_if_data *sdata = NULL;
1489	struct ieee80211_channel *old_oper;
1490	enum nl80211_channel_type old_oper_type;
1491	enum nl80211_channel_type old_vif_oper_type= NL80211_CHAN_NO_HT;
1492
1493	if (netdev)
1494		sdata = IEEE80211_DEV_TO_SUB_IF(netdev);
1495
1496	switch (ieee80211_get_channel_mode(local, NULL)) {
1497	case CHAN_MODE_HOPPING:
1498		return -EBUSY;
1499	case CHAN_MODE_FIXED:
1500		if (local->oper_channel != chan)
1501			return -EBUSY;
1502		if (!sdata && local->_oper_channel_type == channel_type)
1503			return 0;
1504		break;
1505	case CHAN_MODE_UNDEFINED:
1506		break;
1507	}
1508
1509	if (sdata)
1510		old_vif_oper_type = sdata->vif.bss_conf.channel_type;
1511	old_oper_type = local->_oper_channel_type;
1512
1513	if (!ieee80211_set_channel_type(local, sdata, channel_type))
1514		return -EBUSY;
1515
1516	old_oper = local->oper_channel;
1517	local->oper_channel = chan;
1518
1519	/* Update driver if changes were actually made. */
1520	if ((old_oper != local->oper_channel) ||
1521	    (old_oper_type != local->_oper_channel_type))
1522		ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_CHANNEL);
1523
1524	if (sdata && sdata->vif.type != NL80211_IFTYPE_MONITOR &&
1525	    old_vif_oper_type != sdata->vif.bss_conf.channel_type)
1526		ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_HT);
1527
1528	return 0;
1529}
1530
1531#ifdef CONFIG_PM
1532static int ieee80211_suspend(struct wiphy *wiphy,
1533			     struct cfg80211_wowlan *wowlan)
1534{
1535	return __ieee80211_suspend(wiphy_priv(wiphy), wowlan);
1536}
1537
1538static int ieee80211_resume(struct wiphy *wiphy)
1539{
1540	return __ieee80211_resume(wiphy_priv(wiphy));
1541}
1542#else
1543#define ieee80211_suspend NULL
1544#define ieee80211_resume NULL
1545#endif
1546
1547static int ieee80211_scan(struct wiphy *wiphy,
1548			  struct net_device *dev,
1549			  struct cfg80211_scan_request *req)
1550{
1551	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1552
1553	switch (ieee80211_vif_type_p2p(&sdata->vif)) {
1554	case NL80211_IFTYPE_STATION:
1555	case NL80211_IFTYPE_ADHOC:
1556	case NL80211_IFTYPE_MESH_POINT:
1557	case NL80211_IFTYPE_P2P_CLIENT:
1558		break;
1559	case NL80211_IFTYPE_P2P_GO:
1560		if (sdata->local->ops->hw_scan)
1561			break;
1562		/*
1563		 * FIXME: implement NoA while scanning in software,
1564		 * for now fall through to allow scanning only when
1565		 * beaconing hasn't been configured yet
1566		 */
1567	case NL80211_IFTYPE_AP:
1568		if (sdata->u.ap.beacon)
1569			return -EOPNOTSUPP;
1570		break;
1571	default:
1572		return -EOPNOTSUPP;
1573	}
1574
1575	return ieee80211_request_scan(sdata, req);
1576}
1577
1578static int
1579ieee80211_sched_scan_start(struct wiphy *wiphy,
1580			   struct net_device *dev,
1581			   struct cfg80211_sched_scan_request *req)
1582{
1583	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1584
1585	if (!sdata->local->ops->sched_scan_start)
1586		return -EOPNOTSUPP;
1587
1588	return ieee80211_request_sched_scan_start(sdata, req);
1589}
1590
1591static int
1592ieee80211_sched_scan_stop(struct wiphy *wiphy, struct net_device *dev)
1593{
1594	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1595
1596	if (!sdata->local->ops->sched_scan_stop)
1597		return -EOPNOTSUPP;
1598
1599	return ieee80211_request_sched_scan_stop(sdata);
1600}
1601
1602static int ieee80211_auth(struct wiphy *wiphy, struct net_device *dev,
1603			  struct cfg80211_auth_request *req)
1604{
1605	return ieee80211_mgd_auth(IEEE80211_DEV_TO_SUB_IF(dev), req);
1606}
1607
1608static int ieee80211_assoc(struct wiphy *wiphy, struct net_device *dev,
1609			   struct cfg80211_assoc_request *req)
1610{
1611	struct ieee80211_local *local = wiphy_priv(wiphy);
1612	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1613
1614	switch (ieee80211_get_channel_mode(local, sdata)) {
1615	case CHAN_MODE_HOPPING:
1616		return -EBUSY;
1617	case CHAN_MODE_FIXED:
1618		if (local->oper_channel == req->bss->channel)
1619			break;
1620		return -EBUSY;
1621	case CHAN_MODE_UNDEFINED:
1622		break;
1623	}
1624
1625	return ieee80211_mgd_assoc(IEEE80211_DEV_TO_SUB_IF(dev), req);
1626}
1627
1628static int ieee80211_deauth(struct wiphy *wiphy, struct net_device *dev,
1629			    struct cfg80211_deauth_request *req)
1630{
1631	return ieee80211_mgd_deauth(IEEE80211_DEV_TO_SUB_IF(dev), req);
1632}
1633
1634static int ieee80211_disassoc(struct wiphy *wiphy, struct net_device *dev,
1635			      struct cfg80211_disassoc_request *req)
1636{
1637	return ieee80211_mgd_disassoc(IEEE80211_DEV_TO_SUB_IF(dev), req);
1638}
1639
1640static int ieee80211_join_ibss(struct wiphy *wiphy, struct net_device *dev,
1641			       struct cfg80211_ibss_params *params)
1642{
1643	struct ieee80211_local *local = wiphy_priv(wiphy);
1644	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1645
1646	switch (ieee80211_get_channel_mode(local, sdata)) {
1647	case CHAN_MODE_HOPPING:
1648		return -EBUSY;
1649	case CHAN_MODE_FIXED:
1650		if (!params->channel_fixed)
1651			return -EBUSY;
1652		if (local->oper_channel == params->channel)
1653			break;
1654		return -EBUSY;
1655	case CHAN_MODE_UNDEFINED:
1656		break;
1657	}
1658
1659	return ieee80211_ibss_join(sdata, params);
1660}
1661
1662static int ieee80211_leave_ibss(struct wiphy *wiphy, struct net_device *dev)
1663{
1664	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1665
1666	return ieee80211_ibss_leave(sdata);
1667}
1668
1669static int ieee80211_set_wiphy_params(struct wiphy *wiphy, u32 changed)
1670{
1671	struct ieee80211_local *local = wiphy_priv(wiphy);
1672	int err;
1673
1674	if (changed & WIPHY_PARAM_FRAG_THRESHOLD) {
1675		err = drv_set_frag_threshold(local, wiphy->frag_threshold);
1676
1677		if (err)
1678			return err;
1679	}
1680
1681	if (changed & WIPHY_PARAM_COVERAGE_CLASS) {
1682		err = drv_set_coverage_class(local, wiphy->coverage_class);
1683
1684		if (err)
1685			return err;
1686	}
1687
1688	if (changed & WIPHY_PARAM_RTS_THRESHOLD) {
1689		err = drv_set_rts_threshold(local, wiphy->rts_threshold);
1690
1691		if (err)
1692			return err;
1693	}
1694
1695	if (changed & WIPHY_PARAM_RETRY_SHORT)
1696		local->hw.conf.short_frame_max_tx_count = wiphy->retry_short;
1697	if (changed & WIPHY_PARAM_RETRY_LONG)
1698		local->hw.conf.long_frame_max_tx_count = wiphy->retry_long;
1699	if (changed &
1700	    (WIPHY_PARAM_RETRY_SHORT | WIPHY_PARAM_RETRY_LONG))
1701		ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_RETRY_LIMITS);
1702
1703	return 0;
1704}
1705
1706static int ieee80211_set_tx_power(struct wiphy *wiphy,
1707				  enum nl80211_tx_power_setting type, int mbm)
1708{
1709	struct ieee80211_local *local = wiphy_priv(wiphy);
1710	struct ieee80211_channel *chan = local->hw.conf.channel;
1711	u32 changes = 0;
1712
1713	switch (type) {
1714	case NL80211_TX_POWER_AUTOMATIC:
1715		local->user_power_level = -1;
1716		break;
1717	case NL80211_TX_POWER_LIMITED:
1718		if (mbm < 0 || (mbm % 100))
1719			return -EOPNOTSUPP;
1720		local->user_power_level = MBM_TO_DBM(mbm);
1721		break;
1722	case NL80211_TX_POWER_FIXED:
1723		if (mbm < 0 || (mbm % 100))
1724			return -EOPNOTSUPP;
1725		/* TODO: move to cfg80211 when it knows the channel */
1726		if (MBM_TO_DBM(mbm) > chan->max_power)
1727			return -EINVAL;
1728		local->user_power_level = MBM_TO_DBM(mbm);
1729		break;
1730	}
1731
1732	ieee80211_hw_config(local, changes);
1733
1734	return 0;
1735}
1736
1737static int ieee80211_get_tx_power(struct wiphy *wiphy, int *dbm)
1738{
1739	struct ieee80211_local *local = wiphy_priv(wiphy);
1740
1741	*dbm = local->hw.conf.power_level;
1742
1743	return 0;
1744}
1745
1746static int ieee80211_set_wds_peer(struct wiphy *wiphy, struct net_device *dev,
1747				  const u8 *addr)
1748{
1749	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1750
1751	memcpy(&sdata->u.wds.remote_addr, addr, ETH_ALEN);
1752
1753	return 0;
1754}
1755
1756static void ieee80211_rfkill_poll(struct wiphy *wiphy)
1757{
1758	struct ieee80211_local *local = wiphy_priv(wiphy);
1759
1760	drv_rfkill_poll(local);
1761}
1762
1763#ifdef CONFIG_NL80211_TESTMODE
1764static int ieee80211_testmode_cmd(struct wiphy *wiphy, void *data, int len)
1765{
1766	struct ieee80211_local *local = wiphy_priv(wiphy);
1767
1768	if (!local->ops->testmode_cmd)
1769		return -EOPNOTSUPP;
1770
1771	return local->ops->testmode_cmd(&local->hw, data, len);
1772}
1773
1774static int ieee80211_testmode_dump(struct wiphy *wiphy,
1775				   struct sk_buff *skb,
1776				   struct netlink_callback *cb,
1777				   void *data, int len)
1778{
1779	struct ieee80211_local *local = wiphy_priv(wiphy);
1780
1781	if (!local->ops->testmode_dump)
1782		return -EOPNOTSUPP;
1783
1784	return local->ops->testmode_dump(&local->hw, skb, cb, data, len);
1785}
1786#endif
1787
1788int __ieee80211_request_smps(struct ieee80211_sub_if_data *sdata,
1789			     enum ieee80211_smps_mode smps_mode)
1790{
1791	const u8 *ap;
1792	enum ieee80211_smps_mode old_req;
1793	int err;
1794
1795	lockdep_assert_held(&sdata->u.mgd.mtx);
1796
1797	old_req = sdata->u.mgd.req_smps;
1798	sdata->u.mgd.req_smps = smps_mode;
1799
1800	if (old_req == smps_mode &&
1801	    smps_mode != IEEE80211_SMPS_AUTOMATIC)
1802		return 0;
1803
1804	/*
1805	 * If not associated, or current association is not an HT
1806	 * association, there's no need to send an action frame.
1807	 */
1808	if (!sdata->u.mgd.associated ||
1809	    sdata->vif.bss_conf.channel_type == NL80211_CHAN_NO_HT) {
1810		mutex_lock(&sdata->local->iflist_mtx);
1811		ieee80211_recalc_smps(sdata->local);
1812		mutex_unlock(&sdata->local->iflist_mtx);
1813		return 0;
1814	}
1815
1816	ap = sdata->u.mgd.associated->bssid;
1817
1818	if (smps_mode == IEEE80211_SMPS_AUTOMATIC) {
1819		if (sdata->u.mgd.powersave)
1820			smps_mode = IEEE80211_SMPS_DYNAMIC;
1821		else
1822			smps_mode = IEEE80211_SMPS_OFF;
1823	}
1824
1825	/* send SM PS frame to AP */
1826	err = ieee80211_send_smps_action(sdata, smps_mode,
1827					 ap, ap);
1828	if (err)
1829		sdata->u.mgd.req_smps = old_req;
1830
1831	return err;
1832}
1833
1834static int ieee80211_set_power_mgmt(struct wiphy *wiphy, struct net_device *dev,
1835				    bool enabled, int timeout)
1836{
1837	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1838	struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
1839
1840	if (sdata->vif.type != NL80211_IFTYPE_STATION)
1841		return -EOPNOTSUPP;
1842
1843	if (!(local->hw.flags & IEEE80211_HW_SUPPORTS_PS))
1844		return -EOPNOTSUPP;
1845
1846	if (enabled == sdata->u.mgd.powersave &&
1847	    timeout == local->dynamic_ps_forced_timeout)
1848		return 0;
1849
1850	sdata->u.mgd.powersave = enabled;
1851	local->dynamic_ps_forced_timeout = timeout;
1852
1853	/* no change, but if automatic follow powersave */
1854	mutex_lock(&sdata->u.mgd.mtx);
1855	__ieee80211_request_smps(sdata, sdata->u.mgd.req_smps);
1856	mutex_unlock(&sdata->u.mgd.mtx);
1857
1858	if (local->hw.flags & IEEE80211_HW_SUPPORTS_DYNAMIC_PS)
1859		ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_PS);
1860
1861	ieee80211_recalc_ps(local, -1);
1862
1863	return 0;
1864}
1865
1866static int ieee80211_set_cqm_rssi_config(struct wiphy *wiphy,
1867					 struct net_device *dev,
1868					 s32 rssi_thold, u32 rssi_hyst)
1869{
1870	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1871	struct ieee80211_vif *vif = &sdata->vif;
1872	struct ieee80211_bss_conf *bss_conf = &vif->bss_conf;
1873
1874	if (rssi_thold == bss_conf->cqm_rssi_thold &&
1875	    rssi_hyst == bss_conf->cqm_rssi_hyst)
1876		return 0;
1877
1878	bss_conf->cqm_rssi_thold = rssi_thold;
1879	bss_conf->cqm_rssi_hyst = rssi_hyst;
1880
1881	/* tell the driver upon association, unless already associated */
1882	if (sdata->u.mgd.associated &&
1883	    sdata->vif.driver_flags & IEEE80211_VIF_SUPPORTS_CQM_RSSI)
1884		ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_CQM);
1885
1886	return 0;
1887}
1888
1889static int ieee80211_set_bitrate_mask(struct wiphy *wiphy,
1890				      struct net_device *dev,
1891				      const u8 *addr,
1892				      const struct cfg80211_bitrate_mask *mask)
1893{
1894	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1895	struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
1896	int i, ret;
1897
1898	if (local->hw.flags & IEEE80211_HW_HAS_RATE_CONTROL) {
1899		ret = drv_set_bitrate_mask(local, sdata, mask);
1900		if (ret)
1901			return ret;
1902	}
1903
1904	for (i = 0; i < IEEE80211_NUM_BANDS; i++) {
1905		sdata->rc_rateidx_mask[i] = mask->control[i].legacy;
1906		memcpy(sdata->rc_rateidx_mcs_mask[i], mask->control[i].mcs,
1907		       sizeof(mask->control[i].mcs));
1908	}
1909
1910	return 0;
1911}
1912
1913static int ieee80211_remain_on_channel_hw(struct ieee80211_local *local,
1914					  struct net_device *dev,
1915					  struct ieee80211_channel *chan,
1916					  enum nl80211_channel_type chantype,
1917					  unsigned int duration, u64 *cookie)
1918{
1919	int ret;
1920	u32 random_cookie;
1921
1922	lockdep_assert_held(&local->mtx);
1923
1924	if (local->hw_roc_cookie)
1925		return -EBUSY;
1926	/* must be nonzero */
1927	random_cookie = random32() | 1;
1928
1929	*cookie = random_cookie;
1930	local->hw_roc_dev = dev;
1931	local->hw_roc_cookie = random_cookie;
1932	local->hw_roc_channel = chan;
1933	local->hw_roc_channel_type = chantype;
1934	local->hw_roc_duration = duration;
1935	ret = drv_remain_on_channel(local, chan, chantype, duration);
1936	if (ret) {
1937		local->hw_roc_channel = NULL;
1938		local->hw_roc_cookie = 0;
1939	}
1940
1941	return ret;
1942}
1943
1944static int ieee80211_remain_on_channel(struct wiphy *wiphy,
1945				       struct net_device *dev,
1946				       struct ieee80211_channel *chan,
1947				       enum nl80211_channel_type channel_type,
1948				       unsigned int duration,
1949				       u64 *cookie)
1950{
1951	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1952	struct ieee80211_local *local = sdata->local;
1953
1954	if (local->ops->remain_on_channel) {
1955		int ret;
1956
1957		mutex_lock(&local->mtx);
1958		ret = ieee80211_remain_on_channel_hw(local, dev,
1959						     chan, channel_type,
1960						     duration, cookie);
1961		local->hw_roc_for_tx = false;
1962		mutex_unlock(&local->mtx);
1963
1964		return ret;
1965	}
1966
1967	return ieee80211_wk_remain_on_channel(sdata, chan, channel_type,
1968					      duration, cookie);
1969}
1970
1971static int ieee80211_cancel_remain_on_channel_hw(struct ieee80211_local *local,
1972						 u64 cookie)
1973{
1974	int ret;
1975
1976	lockdep_assert_held(&local->mtx);
1977
1978	if (local->hw_roc_cookie != cookie)
1979		return -ENOENT;
1980
1981	ret = drv_cancel_remain_on_channel(local);
1982	if (ret)
1983		return ret;
1984
1985	local->hw_roc_cookie = 0;
1986	local->hw_roc_channel = NULL;
1987
1988	ieee80211_recalc_idle(local);
1989
1990	return 0;
1991}
1992
1993static int ieee80211_cancel_remain_on_channel(struct wiphy *wiphy,
1994					      struct net_device *dev,
1995					      u64 cookie)
1996{
1997	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1998	struct ieee80211_local *local = sdata->local;
1999
2000	if (local->ops->cancel_remain_on_channel) {
2001		int ret;
2002
2003		mutex_lock(&local->mtx);
2004		ret = ieee80211_cancel_remain_on_channel_hw(local, cookie);
2005		mutex_unlock(&local->mtx);
2006
2007		return ret;
2008	}
2009
2010	return ieee80211_wk_cancel_remain_on_channel(sdata, cookie);
2011}
2012
2013static enum work_done_result
2014ieee80211_offchan_tx_done(struct ieee80211_work *wk, struct sk_buff *skb)
2015{
2016	/*
2017	 * Use the data embedded in the work struct for reporting
2018	 * here so if the driver mangled the SKB before dropping
2019	 * it (which is the only way we really should get here)
2020	 * then we don't report mangled data.
2021	 *
2022	 * If there was no wait time, then by the time we get here
2023	 * the driver will likely not have reported the status yet,
2024	 * so in that case userspace will have to deal with it.
2025	 */
2026
2027	if (wk->offchan_tx.wait && !wk->offchan_tx.status)
2028		cfg80211_mgmt_tx_status(wk->sdata->dev,
2029					(unsigned long) wk->offchan_tx.frame,
2030					wk->data, wk->data_len, false, GFP_KERNEL);
2031
2032	return WORK_DONE_DESTROY;
2033}
2034
2035static int ieee80211_mgmt_tx(struct wiphy *wiphy, struct net_device *dev,
2036			     struct ieee80211_channel *chan, bool offchan,
2037			     enum nl80211_channel_type channel_type,
2038			     bool channel_type_valid, unsigned int wait,
2039			     const u8 *buf, size_t len, bool no_cck,
2040			     bool dont_wait_for_ack, u64 *cookie)
2041{
2042	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2043	struct ieee80211_local *local = sdata->local;
2044	struct sk_buff *skb;
2045	struct sta_info *sta;
2046	struct ieee80211_work *wk;
2047	const struct ieee80211_mgmt *mgmt = (void *)buf;
2048	u32 flags;
2049	bool is_offchan = false;
2050
2051	if (dont_wait_for_ack)
2052		flags = IEEE80211_TX_CTL_NO_ACK;
2053	else
2054		flags = IEEE80211_TX_INTFL_NL80211_FRAME_TX |
2055			IEEE80211_TX_CTL_REQ_TX_STATUS;
2056
2057	/* Check that we are on the requested channel for transmission */
2058	if (chan != local->tmp_channel &&
2059	    chan != local->oper_channel)
2060		is_offchan = true;
2061	if (channel_type_valid &&
2062	    (channel_type != local->tmp_channel_type &&
2063	     channel_type != local->_oper_channel_type))
2064		is_offchan = true;
2065
2066	if (chan == local->hw_roc_channel) {
2067		/* TODO: check channel type? */
2068		is_offchan = false;
2069		flags |= IEEE80211_TX_CTL_TX_OFFCHAN;
2070	}
2071
2072	if (no_cck)
2073		flags |= IEEE80211_TX_CTL_NO_CCK_RATE;
2074
2075	if (is_offchan && !offchan)
2076		return -EBUSY;
2077
2078	switch (sdata->vif.type) {
2079	case NL80211_IFTYPE_ADHOC:
2080	case NL80211_IFTYPE_AP:
2081	case NL80211_IFTYPE_AP_VLAN:
2082	case NL80211_IFTYPE_P2P_GO:
2083	case NL80211_IFTYPE_MESH_POINT:
2084		if (!ieee80211_is_action(mgmt->frame_control) ||
2085		    mgmt->u.action.category == WLAN_CATEGORY_PUBLIC)
2086			break;
2087		rcu_read_lock();
2088		sta = sta_info_get(sdata, mgmt->da);
2089		rcu_read_unlock();
2090		if (!sta)
2091			return -ENOLINK;
2092		break;
2093	case NL80211_IFTYPE_STATION:
2094	case NL80211_IFTYPE_P2P_CLIENT:
2095		break;
2096	default:
2097		return -EOPNOTSUPP;
2098	}
2099
2100	skb = dev_alloc_skb(local->hw.extra_tx_headroom + len);
2101	if (!skb)
2102		return -ENOMEM;
2103	skb_reserve(skb, local->hw.extra_tx_headroom);
2104
2105	memcpy(skb_put(skb, len), buf, len);
2106
2107	IEEE80211_SKB_CB(skb)->flags = flags;
2108
2109	if (flags & IEEE80211_TX_CTL_TX_OFFCHAN)
2110		IEEE80211_SKB_CB(skb)->hw_queue =
2111			local->hw.offchannel_tx_hw_queue;
2112
2113	skb->dev = sdata->dev;
2114
2115	*cookie = (unsigned long) skb;
2116
2117	if (is_offchan && local->ops->remain_on_channel) {
2118		unsigned int duration;
2119		int ret;
2120
2121		mutex_lock(&local->mtx);
2122		/*
2123		 * If the duration is zero, then the driver
2124		 * wouldn't actually do anything. Set it to
2125		 * 100 for now.
2126		 *
2127		 * TODO: cancel the off-channel operation
2128		 *       when we get the SKB's TX status and
2129		 *       the wait time was zero before.
2130		 */
2131		duration = 100;
2132		if (wait)
2133			duration = wait;
2134		ret = ieee80211_remain_on_channel_hw(local, dev, chan,
2135						     channel_type,
2136						     duration, cookie);
2137		if (ret) {
2138			kfree_skb(skb);
2139			mutex_unlock(&local->mtx);
2140			return ret;
2141		}
2142
2143		local->hw_roc_for_tx = true;
2144		local->hw_roc_duration = wait;
2145
2146		/*
2147		 * queue up frame for transmission after
2148		 * ieee80211_ready_on_channel call
2149		 */
2150
2151		/* modify cookie to prevent API mismatches */
2152		*cookie ^= 2;
2153		IEEE80211_SKB_CB(skb)->flags |= IEEE80211_TX_CTL_TX_OFFCHAN;
2154		IEEE80211_SKB_CB(skb)->hw_queue =
2155			local->hw.offchannel_tx_hw_queue;
2156		local->hw_roc_skb = skb;
2157		local->hw_roc_skb_for_status = skb;
2158		mutex_unlock(&local->mtx);
2159
2160		return 0;
2161	}
2162
2163	/*
2164	 * Can transmit right away if the channel was the
2165	 * right one and there's no wait involved... If a
2166	 * wait is involved, we might otherwise not be on
2167	 * the right channel for long enough!
2168	 */
2169	if (!is_offchan && !wait && !sdata->vif.bss_conf.idle) {
2170		ieee80211_tx_skb(sdata, skb);
2171		return 0;
2172	}
2173
2174	wk = kzalloc(sizeof(*wk) + len, GFP_KERNEL);
2175	if (!wk) {
2176		kfree_skb(skb);
2177		return -ENOMEM;
2178	}
2179
2180	wk->type = IEEE80211_WORK_OFFCHANNEL_TX;
2181	wk->chan = chan;
2182	wk->chan_type = channel_type;
2183	wk->sdata = sdata;
2184	wk->done = ieee80211_offchan_tx_done;
2185	wk->offchan_tx.frame = skb;
2186	wk->offchan_tx.wait = wait;
2187	wk->data_len = len;
2188	memcpy(wk->data, buf, len);
2189
2190	ieee80211_add_work(wk);
2191	return 0;
2192}
2193
2194static int ieee80211_mgmt_tx_cancel_wait(struct wiphy *wiphy,
2195					 struct net_device *dev,
2196					 u64 cookie)
2197{
2198	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2199	struct ieee80211_local *local = sdata->local;
2200	struct ieee80211_work *wk;
2201	int ret = -ENOENT;
2202
2203	mutex_lock(&local->mtx);
2204
2205	if (local->ops->cancel_remain_on_channel) {
2206		cookie ^= 2;
2207		ret = ieee80211_cancel_remain_on_channel_hw(local, cookie);
2208
2209		if (ret == 0) {
2210			kfree_skb(local->hw_roc_skb);
2211			local->hw_roc_skb = NULL;
2212			local->hw_roc_skb_for_status = NULL;
2213		}
2214
2215		mutex_unlock(&local->mtx);
2216
2217		return ret;
2218	}
2219
2220	list_for_each_entry(wk, &local->work_list, list) {
2221		if (wk->sdata != sdata)
2222			continue;
2223
2224		if (wk->type != IEEE80211_WORK_OFFCHANNEL_TX)
2225			continue;
2226
2227		if (cookie != (unsigned long) wk->offchan_tx.frame)
2228			continue;
2229
2230		wk->timeout = jiffies;
2231
2232		ieee80211_queue_work(&local->hw, &local->work_work);
2233		ret = 0;
2234		break;
2235	}
2236	mutex_unlock(&local->mtx);
2237
2238	return ret;
2239}
2240
2241static void ieee80211_mgmt_frame_register(struct wiphy *wiphy,
2242					  struct net_device *dev,
2243					  u16 frame_type, bool reg)
2244{
2245	struct ieee80211_local *local = wiphy_priv(wiphy);
2246
2247	if (frame_type != (IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_PROBE_REQ))
2248		return;
2249
2250	if (reg)
2251		local->probe_req_reg++;
2252	else
2253		local->probe_req_reg--;
2254
2255	ieee80211_queue_work(&local->hw, &local->reconfig_filter);
2256}
2257
2258static int ieee80211_set_antenna(struct wiphy *wiphy, u32 tx_ant, u32 rx_ant)
2259{
2260	struct ieee80211_local *local = wiphy_priv(wiphy);
2261
2262	if (local->started)
2263		return -EOPNOTSUPP;
2264
2265	return drv_set_antenna(local, tx_ant, rx_ant);
2266}
2267
2268static int ieee80211_get_antenna(struct wiphy *wiphy, u32 *tx_ant, u32 *rx_ant)
2269{
2270	struct ieee80211_local *local = wiphy_priv(wiphy);
2271
2272	return drv_get_antenna(local, tx_ant, rx_ant);
2273}
2274
2275static int ieee80211_set_ringparam(struct wiphy *wiphy, u32 tx, u32 rx)
2276{
2277	struct ieee80211_local *local = wiphy_priv(wiphy);
2278
2279	return drv_set_ringparam(local, tx, rx);
2280}
2281
2282static void ieee80211_get_ringparam(struct wiphy *wiphy,
2283				    u32 *tx, u32 *tx_max, u32 *rx, u32 *rx_max)
2284{
2285	struct ieee80211_local *local = wiphy_priv(wiphy);
2286
2287	drv_get_ringparam(local, tx, tx_max, rx, rx_max);
2288}
2289
2290static int ieee80211_set_rekey_data(struct wiphy *wiphy,
2291				    struct net_device *dev,
2292				    struct cfg80211_gtk_rekey_data *data)
2293{
2294	struct ieee80211_local *local = wiphy_priv(wiphy);
2295	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2296
2297	if (!local->ops->set_rekey_data)
2298		return -EOPNOTSUPP;
2299
2300	drv_set_rekey_data(local, sdata, data);
2301
2302	return 0;
2303}
2304
2305static void ieee80211_tdls_add_ext_capab(struct sk_buff *skb)
2306{
2307	u8 *pos = (void *)skb_put(skb, 7);
2308
2309	*pos++ = WLAN_EID_EXT_CAPABILITY;
2310	*pos++ = 5; /* len */
2311	*pos++ = 0x0;
2312	*pos++ = 0x0;
2313	*pos++ = 0x0;
2314	*pos++ = 0x0;
2315	*pos++ = WLAN_EXT_CAPA5_TDLS_ENABLED;
2316}
2317
2318static u16 ieee80211_get_tdls_sta_capab(struct ieee80211_sub_if_data *sdata)
2319{
2320	struct ieee80211_local *local = sdata->local;
2321	u16 capab;
2322
2323	capab = 0;
2324	if (local->oper_channel->band != IEEE80211_BAND_2GHZ)
2325		return capab;
2326
2327	if (!(local->hw.flags & IEEE80211_HW_2GHZ_SHORT_SLOT_INCAPABLE))
2328		capab |= WLAN_CAPABILITY_SHORT_SLOT_TIME;
2329	if (!(local->hw.flags & IEEE80211_HW_2GHZ_SHORT_PREAMBLE_INCAPABLE))
2330		capab |= WLAN_CAPABILITY_SHORT_PREAMBLE;
2331
2332	return capab;
2333}
2334
2335static void ieee80211_tdls_add_link_ie(struct sk_buff *skb, u8 *src_addr,
2336				       u8 *peer, u8 *bssid)
2337{
2338	struct ieee80211_tdls_lnkie *lnkid;
2339
2340	lnkid = (void *)skb_put(skb, sizeof(struct ieee80211_tdls_lnkie));
2341
2342	lnkid->ie_type = WLAN_EID_LINK_ID;
2343	lnkid->ie_len = sizeof(struct ieee80211_tdls_lnkie) - 2;
2344
2345	memcpy(lnkid->bssid, bssid, ETH_ALEN);
2346	memcpy(lnkid->init_sta, src_addr, ETH_ALEN);
2347	memcpy(lnkid->resp_sta, peer, ETH_ALEN);
2348}
2349
2350static int
2351ieee80211_prep_tdls_encap_data(struct wiphy *wiphy, struct net_device *dev,
2352			       u8 *peer, u8 action_code, u8 dialog_token,
2353			       u16 status_code, struct sk_buff *skb)
2354{
2355	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2356	struct ieee80211_tdls_data *tf;
2357
2358	tf = (void *)skb_put(skb, offsetof(struct ieee80211_tdls_data, u));
2359
2360	memcpy(tf->da, peer, ETH_ALEN);
2361	memcpy(tf->sa, sdata->vif.addr, ETH_ALEN);
2362	tf->ether_type = cpu_to_be16(ETH_P_TDLS);
2363	tf->payload_type = WLAN_TDLS_SNAP_RFTYPE;
2364
2365	switch (action_code) {
2366	case WLAN_TDLS_SETUP_REQUEST:
2367		tf->category = WLAN_CATEGORY_TDLS;
2368		tf->action_code = WLAN_TDLS_SETUP_REQUEST;
2369
2370		skb_put(skb, sizeof(tf->u.setup_req));
2371		tf->u.setup_req.dialog_token = dialog_token;
2372		tf->u.setup_req.capability =
2373			cpu_to_le16(ieee80211_get_tdls_sta_capab(sdata));
2374
2375		ieee80211_add_srates_ie(&sdata->vif, skb, false);
2376		ieee80211_add_ext_srates_ie(&sdata->vif, skb, false);
2377		ieee80211_tdls_add_ext_capab(skb);
2378		break;
2379	case WLAN_TDLS_SETUP_RESPONSE:
2380		tf->category = WLAN_CATEGORY_TDLS;
2381		tf->action_code = WLAN_TDLS_SETUP_RESPONSE;
2382
2383		skb_put(skb, sizeof(tf->u.setup_resp));
2384		tf->u.setup_resp.status_code = cpu_to_le16(status_code);
2385		tf->u.setup_resp.dialog_token = dialog_token;
2386		tf->u.setup_resp.capability =
2387			cpu_to_le16(ieee80211_get_tdls_sta_capab(sdata));
2388
2389		ieee80211_add_srates_ie(&sdata->vif, skb, false);
2390		ieee80211_add_ext_srates_ie(&sdata->vif, skb, false);
2391		ieee80211_tdls_add_ext_capab(skb);
2392		break;
2393	case WLAN_TDLS_SETUP_CONFIRM:
2394		tf->category = WLAN_CATEGORY_TDLS;
2395		tf->action_code = WLAN_TDLS_SETUP_CONFIRM;
2396
2397		skb_put(skb, sizeof(tf->u.setup_cfm));
2398		tf->u.setup_cfm.status_code = cpu_to_le16(status_code);
2399		tf->u.setup_cfm.dialog_token = dialog_token;
2400		break;
2401	case WLAN_TDLS_TEARDOWN:
2402		tf->category = WLAN_CATEGORY_TDLS;
2403		tf->action_code = WLAN_TDLS_TEARDOWN;
2404
2405		skb_put(skb, sizeof(tf->u.teardown));
2406		tf->u.teardown.reason_code = cpu_to_le16(status_code);
2407		break;
2408	case WLAN_TDLS_DISCOVERY_REQUEST:
2409		tf->category = WLAN_CATEGORY_TDLS;
2410		tf->action_code = WLAN_TDLS_DISCOVERY_REQUEST;
2411
2412		skb_put(skb, sizeof(tf->u.discover_req));
2413		tf->u.discover_req.dialog_token = dialog_token;
2414		break;
2415	default:
2416		return -EINVAL;
2417	}
2418
2419	return 0;
2420}
2421
2422static int
2423ieee80211_prep_tdls_direct(struct wiphy *wiphy, struct net_device *dev,
2424			   u8 *peer, u8 action_code, u8 dialog_token,
2425			   u16 status_code, struct sk_buff *skb)
2426{
2427	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2428	struct ieee80211_mgmt *mgmt;
2429
2430	mgmt = (void *)skb_put(skb, 24);
2431	memset(mgmt, 0, 24);
2432	memcpy(mgmt->da, peer, ETH_ALEN);
2433	memcpy(mgmt->sa, sdata->vif.addr, ETH_ALEN);
2434	memcpy(mgmt->bssid, sdata->u.mgd.bssid, ETH_ALEN);
2435
2436	mgmt->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT |
2437					  IEEE80211_STYPE_ACTION);
2438
2439	switch (action_code) {
2440	case WLAN_PUB_ACTION_TDLS_DISCOVER_RES:
2441		skb_put(skb, 1 + sizeof(mgmt->u.action.u.tdls_discover_resp));
2442		mgmt->u.action.category = WLAN_CATEGORY_PUBLIC;
2443		mgmt->u.action.u.tdls_discover_resp.action_code =
2444			WLAN_PUB_ACTION_TDLS_DISCOVER_RES;
2445		mgmt->u.action.u.tdls_discover_resp.dialog_token =
2446			dialog_token;
2447		mgmt->u.action.u.tdls_discover_resp.capability =
2448			cpu_to_le16(ieee80211_get_tdls_sta_capab(sdata));
2449
2450		ieee80211_add_srates_ie(&sdata->vif, skb, false);
2451		ieee80211_add_ext_srates_ie(&sdata->vif, skb, false);
2452		ieee80211_tdls_add_ext_capab(skb);
2453		break;
2454	default:
2455		return -EINVAL;
2456	}
2457
2458	return 0;
2459}
2460
2461static int ieee80211_tdls_mgmt(struct wiphy *wiphy, struct net_device *dev,
2462			       u8 *peer, u8 action_code, u8 dialog_token,
2463			       u16 status_code, const u8 *extra_ies,
2464			       size_t extra_ies_len)
2465{
2466	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2467	struct ieee80211_local *local = sdata->local;
2468	struct ieee80211_tx_info *info;
2469	struct sk_buff *skb = NULL;
2470	bool send_direct;
2471	int ret;
2472
2473	if (!(wiphy->flags & WIPHY_FLAG_SUPPORTS_TDLS))
2474		return -ENOTSUPP;
2475
2476	/* make sure we are in managed mode, and associated */
2477	if (sdata->vif.type != NL80211_IFTYPE_STATION ||
2478	    !sdata->u.mgd.associated)
2479		return -EINVAL;
2480
2481#ifdef CONFIG_MAC80211_VERBOSE_TDLS_DEBUG
2482	printk(KERN_DEBUG "TDLS mgmt action %d peer %pM\n", action_code, peer);
2483#endif
2484
2485	skb = dev_alloc_skb(local->hw.extra_tx_headroom +
2486			    max(sizeof(struct ieee80211_mgmt),
2487				sizeof(struct ieee80211_tdls_data)) +
2488			    50 + /* supported rates */
2489			    7 + /* ext capab */
2490			    extra_ies_len +
2491			    sizeof(struct ieee80211_tdls_lnkie));
2492	if (!skb)
2493		return -ENOMEM;
2494
2495	info = IEEE80211_SKB_CB(skb);
2496	skb_reserve(skb, local->hw.extra_tx_headroom);
2497
2498	switch (action_code) {
2499	case WLAN_TDLS_SETUP_REQUEST:
2500	case WLAN_TDLS_SETUP_RESPONSE:
2501	case WLAN_TDLS_SETUP_CONFIRM:
2502	case WLAN_TDLS_TEARDOWN:
2503	case WLAN_TDLS_DISCOVERY_REQUEST:
2504		ret = ieee80211_prep_tdls_encap_data(wiphy, dev, peer,
2505						     action_code, dialog_token,
2506						     status_code, skb);
2507		send_direct = false;
2508		break;
2509	case WLAN_PUB_ACTION_TDLS_DISCOVER_RES:
2510		ret = ieee80211_prep_tdls_direct(wiphy, dev, peer, action_code,
2511						 dialog_token, status_code,
2512						 skb);
2513		send_direct = true;
2514		break;
2515	default:
2516		ret = -ENOTSUPP;
2517		break;
2518	}
2519
2520	if (ret < 0)
2521		goto fail;
2522
2523	if (extra_ies_len)
2524		memcpy(skb_put(skb, extra_ies_len), extra_ies, extra_ies_len);
2525
2526	/* the TDLS link IE is always added last */
2527	switch (action_code) {
2528	case WLAN_TDLS_SETUP_REQUEST:
2529	case WLAN_TDLS_SETUP_CONFIRM:
2530	case WLAN_TDLS_TEARDOWN:
2531	case WLAN_TDLS_DISCOVERY_REQUEST:
2532		/* we are the initiator */
2533		ieee80211_tdls_add_link_ie(skb, sdata->vif.addr, peer,
2534					   sdata->u.mgd.bssid);
2535		break;
2536	case WLAN_TDLS_SETUP_RESPONSE:
2537	case WLAN_PUB_ACTION_TDLS_DISCOVER_RES:
2538		/* we are the responder */
2539		ieee80211_tdls_add_link_ie(skb, peer, sdata->vif.addr,
2540					   sdata->u.mgd.bssid);
2541		break;
2542	default:
2543		ret = -ENOTSUPP;
2544		goto fail;
2545	}
2546
2547	if (send_direct) {
2548		ieee80211_tx_skb(sdata, skb);
2549		return 0;
2550	}
2551
2552	/*
2553	 * According to 802.11z: Setup req/resp are sent in AC_BK, otherwise
2554	 * we should default to AC_VI.
2555	 */
2556	switch (action_code) {
2557	case WLAN_TDLS_SETUP_REQUEST:
2558	case WLAN_TDLS_SETUP_RESPONSE:
2559		skb_set_queue_mapping(skb, IEEE80211_AC_BK);
2560		skb->priority = 2;
2561		break;
2562	default:
2563		skb_set_queue_mapping(skb, IEEE80211_AC_VI);
2564		skb->priority = 5;
2565		break;
2566	}
2567
2568	/* disable bottom halves when entering the Tx path */
2569	local_bh_disable();
2570	ret = ieee80211_subif_start_xmit(skb, dev);
2571	local_bh_enable();
2572
2573	return ret;
2574
2575fail:
2576	dev_kfree_skb(skb);
2577	return ret;
2578}
2579
2580static int ieee80211_tdls_oper(struct wiphy *wiphy, struct net_device *dev,
2581			       u8 *peer, enum nl80211_tdls_operation oper)
2582{
2583	struct sta_info *sta;
2584	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2585
2586	if (!(wiphy->flags & WIPHY_FLAG_SUPPORTS_TDLS))
2587		return -ENOTSUPP;
2588
2589	if (sdata->vif.type != NL80211_IFTYPE_STATION)
2590		return -EINVAL;
2591
2592#ifdef CONFIG_MAC80211_VERBOSE_TDLS_DEBUG
2593	printk(KERN_DEBUG "TDLS oper %d peer %pM\n", oper, peer);
2594#endif
2595
2596	switch (oper) {
2597	case NL80211_TDLS_ENABLE_LINK:
2598		rcu_read_lock();
2599		sta = sta_info_get(sdata, peer);
2600		if (!sta) {
2601			rcu_read_unlock();
2602			return -ENOLINK;
2603		}
2604
2605		set_sta_flag(sta, WLAN_STA_TDLS_PEER_AUTH);
2606		rcu_read_unlock();
2607		break;
2608	case NL80211_TDLS_DISABLE_LINK:
2609		return sta_info_destroy_addr(sdata, peer);
2610	case NL80211_TDLS_TEARDOWN:
2611	case NL80211_TDLS_SETUP:
2612	case NL80211_TDLS_DISCOVERY_REQ:
2613		/* We don't support in-driver setup/teardown/discovery */
2614		return -ENOTSUPP;
2615	default:
2616		return -ENOTSUPP;
2617	}
2618
2619	return 0;
2620}
2621
2622static int ieee80211_probe_client(struct wiphy *wiphy, struct net_device *dev,
2623				  const u8 *peer, u64 *cookie)
2624{
2625	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2626	struct ieee80211_local *local = sdata->local;
2627	struct ieee80211_qos_hdr *nullfunc;
2628	struct sk_buff *skb;
2629	int size = sizeof(*nullfunc);
2630	__le16 fc;
2631	bool qos;
2632	struct ieee80211_tx_info *info;
2633	struct sta_info *sta;
2634
2635	rcu_read_lock();
2636	sta = sta_info_get(sdata, peer);
2637	if (sta) {
2638		qos = test_sta_flag(sta, WLAN_STA_WME);
2639		rcu_read_unlock();
2640	} else {
2641		rcu_read_unlock();
2642		return -ENOLINK;
2643	}
2644
2645	if (qos) {
2646		fc = cpu_to_le16(IEEE80211_FTYPE_DATA |
2647				 IEEE80211_STYPE_QOS_NULLFUNC |
2648				 IEEE80211_FCTL_FROMDS);
2649	} else {
2650		size -= 2;
2651		fc = cpu_to_le16(IEEE80211_FTYPE_DATA |
2652				 IEEE80211_STYPE_NULLFUNC |
2653				 IEEE80211_FCTL_FROMDS);
2654	}
2655
2656	skb = dev_alloc_skb(local->hw.extra_tx_headroom + size);
2657	if (!skb)
2658		return -ENOMEM;
2659
2660	skb->dev = dev;
2661
2662	skb_reserve(skb, local->hw.extra_tx_headroom);
2663
2664	nullfunc = (void *) skb_put(skb, size);
2665	nullfunc->frame_control = fc;
2666	nullfunc->duration_id = 0;
2667	memcpy(nullfunc->addr1, sta->sta.addr, ETH_ALEN);
2668	memcpy(nullfunc->addr2, sdata->vif.addr, ETH_ALEN);
2669	memcpy(nullfunc->addr3, sdata->vif.addr, ETH_ALEN);
2670	nullfunc->seq_ctrl = 0;
2671
2672	info = IEEE80211_SKB_CB(skb);
2673
2674	info->flags |= IEEE80211_TX_CTL_REQ_TX_STATUS |
2675		       IEEE80211_TX_INTFL_NL80211_FRAME_TX;
2676
2677	skb_set_queue_mapping(skb, IEEE80211_AC_VO);
2678	skb->priority = 7;
2679	if (qos)
2680		nullfunc->qos_ctrl = cpu_to_le16(7);
2681
2682	local_bh_disable();
2683	ieee80211_xmit(sdata, skb);
2684	local_bh_enable();
2685
2686	*cookie = (unsigned long) skb;
2687	return 0;
2688}
2689
2690static struct ieee80211_channel *
2691ieee80211_wiphy_get_channel(struct wiphy *wiphy,
2692			    enum nl80211_channel_type *type)
2693{
2694	struct ieee80211_local *local = wiphy_priv(wiphy);
2695
2696	*type = local->_oper_channel_type;
2697	return local->oper_channel;
2698}
2699
2700#ifdef CONFIG_PM
2701static void ieee80211_set_wakeup(struct wiphy *wiphy, bool enabled)
2702{
2703	drv_set_wakeup(wiphy_priv(wiphy), enabled);
2704}
2705#endif
2706
2707struct cfg80211_ops mac80211_config_ops = {
2708	.add_virtual_intf = ieee80211_add_iface,
2709	.del_virtual_intf = ieee80211_del_iface,
2710	.change_virtual_intf = ieee80211_change_iface,
2711	.add_key = ieee80211_add_key,
2712	.del_key = ieee80211_del_key,
2713	.get_key = ieee80211_get_key,
2714	.set_default_key = ieee80211_config_default_key,
2715	.set_default_mgmt_key = ieee80211_config_default_mgmt_key,
2716	.start_ap = ieee80211_start_ap,
2717	.change_beacon = ieee80211_change_beacon,
2718	.stop_ap = ieee80211_stop_ap,
2719	.add_station = ieee80211_add_station,
2720	.del_station = ieee80211_del_station,
2721	.change_station = ieee80211_change_station,
2722	.get_station = ieee80211_get_station,
2723	.dump_station = ieee80211_dump_station,
2724	.dump_survey = ieee80211_dump_survey,
2725#ifdef CONFIG_MAC80211_MESH
2726	.add_mpath = ieee80211_add_mpath,
2727	.del_mpath = ieee80211_del_mpath,
2728	.change_mpath = ieee80211_change_mpath,
2729	.get_mpath = ieee80211_get_mpath,
2730	.dump_mpath = ieee80211_dump_mpath,
2731	.update_mesh_config = ieee80211_update_mesh_config,
2732	.get_mesh_config = ieee80211_get_mesh_config,
2733	.join_mesh = ieee80211_join_mesh,
2734	.leave_mesh = ieee80211_leave_mesh,
2735#endif
2736	.change_bss = ieee80211_change_bss,
2737	.set_txq_params = ieee80211_set_txq_params,
2738	.set_channel = ieee80211_set_channel,
2739	.suspend = ieee80211_suspend,
2740	.resume = ieee80211_resume,
2741	.scan = ieee80211_scan,
2742	.sched_scan_start = ieee80211_sched_scan_start,
2743	.sched_scan_stop = ieee80211_sched_scan_stop,
2744	.auth = ieee80211_auth,
2745	.assoc = ieee80211_assoc,
2746	.deauth = ieee80211_deauth,
2747	.disassoc = ieee80211_disassoc,
2748	.join_ibss = ieee80211_join_ibss,
2749	.leave_ibss = ieee80211_leave_ibss,
2750	.set_wiphy_params = ieee80211_set_wiphy_params,
2751	.set_tx_power = ieee80211_set_tx_power,
2752	.get_tx_power = ieee80211_get_tx_power,
2753	.set_wds_peer = ieee80211_set_wds_peer,
2754	.rfkill_poll = ieee80211_rfkill_poll,
2755	CFG80211_TESTMODE_CMD(ieee80211_testmode_cmd)
2756	CFG80211_TESTMODE_DUMP(ieee80211_testmode_dump)
2757	.set_power_mgmt = ieee80211_set_power_mgmt,
2758	.set_bitrate_mask = ieee80211_set_bitrate_mask,
2759	.remain_on_channel = ieee80211_remain_on_channel,
2760	.cancel_remain_on_channel = ieee80211_cancel_remain_on_channel,
2761	.mgmt_tx = ieee80211_mgmt_tx,
2762	.mgmt_tx_cancel_wait = ieee80211_mgmt_tx_cancel_wait,
2763	.set_cqm_rssi_config = ieee80211_set_cqm_rssi_config,
2764	.mgmt_frame_register = ieee80211_mgmt_frame_register,
2765	.set_antenna = ieee80211_set_antenna,
2766	.get_antenna = ieee80211_get_antenna,
2767	.set_ringparam = ieee80211_set_ringparam,
2768	.get_ringparam = ieee80211_get_ringparam,
2769	.set_rekey_data = ieee80211_set_rekey_data,
2770	.tdls_oper = ieee80211_tdls_oper,
2771	.tdls_mgmt = ieee80211_tdls_mgmt,
2772	.probe_client = ieee80211_probe_client,
2773	.get_channel = ieee80211_wiphy_get_channel,
2774	.set_noack_map = ieee80211_set_noack_map,
2775#ifdef CONFIG_PM
2776	.set_wakeup = ieee80211_set_wakeup,
2777#endif
2778};
2779