xref: /linux/drivers/net/wireless/ath/ath10k/mac.c (revision 3932b9ca55b0be314a36d3e84faff3e823c081f5)
1 /*
2  * Copyright (c) 2005-2011 Atheros Communications Inc.
3  * Copyright (c) 2011-2013 Qualcomm Atheros, Inc.
4  *
5  * Permission to use, copy, modify, and/or distribute this software for any
6  * purpose with or without fee is hereby granted, provided that the above
7  * copyright notice and this permission notice appear in all copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16  */
17 
18 #include "mac.h"
19 
20 #include <net/mac80211.h>
21 #include <linux/etherdevice.h>
22 
23 #include "hif.h"
24 #include "core.h"
25 #include "debug.h"
26 #include "wmi.h"
27 #include "htt.h"
28 #include "txrx.h"
29 
30 /**********/
31 /* Crypto */
32 /**********/
33 
34 static int ath10k_send_key(struct ath10k_vif *arvif,
35 			   struct ieee80211_key_conf *key,
36 			   enum set_key_cmd cmd,
37 			   const u8 *macaddr)
38 {
39 	struct wmi_vdev_install_key_arg arg = {
40 		.vdev_id = arvif->vdev_id,
41 		.key_idx = key->keyidx,
42 		.key_len = key->keylen,
43 		.key_data = key->key,
44 		.macaddr = macaddr,
45 	};
46 
47 	lockdep_assert_held(&arvif->ar->conf_mutex);
48 
49 	if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE)
50 		arg.key_flags = WMI_KEY_PAIRWISE;
51 	else
52 		arg.key_flags = WMI_KEY_GROUP;
53 
54 	switch (key->cipher) {
55 	case WLAN_CIPHER_SUITE_CCMP:
56 		arg.key_cipher = WMI_CIPHER_AES_CCM;
57 		if (arvif->vdev_type == WMI_VDEV_TYPE_AP)
58 			key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV_MGMT;
59 		else
60 			key->flags |= IEEE80211_KEY_FLAG_SW_MGMT_TX;
61 		break;
62 	case WLAN_CIPHER_SUITE_TKIP:
63 		arg.key_cipher = WMI_CIPHER_TKIP;
64 		arg.key_txmic_len = 8;
65 		arg.key_rxmic_len = 8;
66 		break;
67 	case WLAN_CIPHER_SUITE_WEP40:
68 	case WLAN_CIPHER_SUITE_WEP104:
69 		arg.key_cipher = WMI_CIPHER_WEP;
70 		/* AP/IBSS mode requires self-key to be groupwise
71 		 * Otherwise pairwise key must be set */
72 		if (memcmp(macaddr, arvif->vif->addr, ETH_ALEN))
73 			arg.key_flags = WMI_KEY_PAIRWISE;
74 		break;
75 	default:
76 		ath10k_warn("cipher %d is not supported\n", key->cipher);
77 		return -EOPNOTSUPP;
78 	}
79 
80 	if (cmd == DISABLE_KEY) {
81 		arg.key_cipher = WMI_CIPHER_NONE;
82 		arg.key_data = NULL;
83 	}
84 
85 	return ath10k_wmi_vdev_install_key(arvif->ar, &arg);
86 }
87 
88 static int ath10k_install_key(struct ath10k_vif *arvif,
89 			      struct ieee80211_key_conf *key,
90 			      enum set_key_cmd cmd,
91 			      const u8 *macaddr)
92 {
93 	struct ath10k *ar = arvif->ar;
94 	int ret;
95 
96 	lockdep_assert_held(&ar->conf_mutex);
97 
98 	reinit_completion(&ar->install_key_done);
99 
100 	ret = ath10k_send_key(arvif, key, cmd, macaddr);
101 	if (ret)
102 		return ret;
103 
104 	ret = wait_for_completion_timeout(&ar->install_key_done, 3*HZ);
105 	if (ret == 0)
106 		return -ETIMEDOUT;
107 
108 	return 0;
109 }
110 
111 static int ath10k_install_peer_wep_keys(struct ath10k_vif *arvif,
112 					const u8 *addr)
113 {
114 	struct ath10k *ar = arvif->ar;
115 	struct ath10k_peer *peer;
116 	int ret;
117 	int i;
118 
119 	lockdep_assert_held(&ar->conf_mutex);
120 
121 	spin_lock_bh(&ar->data_lock);
122 	peer = ath10k_peer_find(ar, arvif->vdev_id, addr);
123 	spin_unlock_bh(&ar->data_lock);
124 
125 	if (!peer)
126 		return -ENOENT;
127 
128 	for (i = 0; i < ARRAY_SIZE(arvif->wep_keys); i++) {
129 		if (arvif->wep_keys[i] == NULL)
130 			continue;
131 
132 		ret = ath10k_install_key(arvif, arvif->wep_keys[i], SET_KEY,
133 					 addr);
134 		if (ret)
135 			return ret;
136 
137 		peer->keys[i] = arvif->wep_keys[i];
138 	}
139 
140 	return 0;
141 }
142 
143 static int ath10k_clear_peer_keys(struct ath10k_vif *arvif,
144 				  const u8 *addr)
145 {
146 	struct ath10k *ar = arvif->ar;
147 	struct ath10k_peer *peer;
148 	int first_errno = 0;
149 	int ret;
150 	int i;
151 
152 	lockdep_assert_held(&ar->conf_mutex);
153 
154 	spin_lock_bh(&ar->data_lock);
155 	peer = ath10k_peer_find(ar, arvif->vdev_id, addr);
156 	spin_unlock_bh(&ar->data_lock);
157 
158 	if (!peer)
159 		return -ENOENT;
160 
161 	for (i = 0; i < ARRAY_SIZE(peer->keys); i++) {
162 		if (peer->keys[i] == NULL)
163 			continue;
164 
165 		ret = ath10k_install_key(arvif, peer->keys[i],
166 					 DISABLE_KEY, addr);
167 		if (ret && first_errno == 0)
168 			first_errno = ret;
169 
170 		if (ret)
171 			ath10k_warn("failed to remove peer wep key %d: %d\n",
172 				    i, ret);
173 
174 		peer->keys[i] = NULL;
175 	}
176 
177 	return first_errno;
178 }
179 
180 static int ath10k_clear_vdev_key(struct ath10k_vif *arvif,
181 				 struct ieee80211_key_conf *key)
182 {
183 	struct ath10k *ar = arvif->ar;
184 	struct ath10k_peer *peer;
185 	u8 addr[ETH_ALEN];
186 	int first_errno = 0;
187 	int ret;
188 	int i;
189 
190 	lockdep_assert_held(&ar->conf_mutex);
191 
192 	for (;;) {
193 		/* since ath10k_install_key we can't hold data_lock all the
194 		 * time, so we try to remove the keys incrementally */
195 		spin_lock_bh(&ar->data_lock);
196 		i = 0;
197 		list_for_each_entry(peer, &ar->peers, list) {
198 			for (i = 0; i < ARRAY_SIZE(peer->keys); i++) {
199 				if (peer->keys[i] == key) {
200 					memcpy(addr, peer->addr, ETH_ALEN);
201 					peer->keys[i] = NULL;
202 					break;
203 				}
204 			}
205 
206 			if (i < ARRAY_SIZE(peer->keys))
207 				break;
208 		}
209 		spin_unlock_bh(&ar->data_lock);
210 
211 		if (i == ARRAY_SIZE(peer->keys))
212 			break;
213 
214 		ret = ath10k_install_key(arvif, key, DISABLE_KEY, addr);
215 		if (ret && first_errno == 0)
216 			first_errno = ret;
217 
218 		if (ret)
219 			ath10k_warn("failed to remove key for %pM: %d\n",
220 				    addr, ret);
221 	}
222 
223 	return first_errno;
224 }
225 
226 
227 /*********************/
228 /* General utilities */
229 /*********************/
230 
231 static inline enum wmi_phy_mode
232 chan_to_phymode(const struct cfg80211_chan_def *chandef)
233 {
234 	enum wmi_phy_mode phymode = MODE_UNKNOWN;
235 
236 	switch (chandef->chan->band) {
237 	case IEEE80211_BAND_2GHZ:
238 		switch (chandef->width) {
239 		case NL80211_CHAN_WIDTH_20_NOHT:
240 			phymode = MODE_11G;
241 			break;
242 		case NL80211_CHAN_WIDTH_20:
243 			phymode = MODE_11NG_HT20;
244 			break;
245 		case NL80211_CHAN_WIDTH_40:
246 			phymode = MODE_11NG_HT40;
247 			break;
248 		case NL80211_CHAN_WIDTH_5:
249 		case NL80211_CHAN_WIDTH_10:
250 		case NL80211_CHAN_WIDTH_80:
251 		case NL80211_CHAN_WIDTH_80P80:
252 		case NL80211_CHAN_WIDTH_160:
253 			phymode = MODE_UNKNOWN;
254 			break;
255 		}
256 		break;
257 	case IEEE80211_BAND_5GHZ:
258 		switch (chandef->width) {
259 		case NL80211_CHAN_WIDTH_20_NOHT:
260 			phymode = MODE_11A;
261 			break;
262 		case NL80211_CHAN_WIDTH_20:
263 			phymode = MODE_11NA_HT20;
264 			break;
265 		case NL80211_CHAN_WIDTH_40:
266 			phymode = MODE_11NA_HT40;
267 			break;
268 		case NL80211_CHAN_WIDTH_80:
269 			phymode = MODE_11AC_VHT80;
270 			break;
271 		case NL80211_CHAN_WIDTH_5:
272 		case NL80211_CHAN_WIDTH_10:
273 		case NL80211_CHAN_WIDTH_80P80:
274 		case NL80211_CHAN_WIDTH_160:
275 			phymode = MODE_UNKNOWN;
276 			break;
277 		}
278 		break;
279 	default:
280 		break;
281 	}
282 
283 	WARN_ON(phymode == MODE_UNKNOWN);
284 	return phymode;
285 }
286 
287 static u8 ath10k_parse_mpdudensity(u8 mpdudensity)
288 {
289 /*
290  * 802.11n D2.0 defined values for "Minimum MPDU Start Spacing":
291  *   0 for no restriction
292  *   1 for 1/4 us
293  *   2 for 1/2 us
294  *   3 for 1 us
295  *   4 for 2 us
296  *   5 for 4 us
297  *   6 for 8 us
298  *   7 for 16 us
299  */
300 	switch (mpdudensity) {
301 	case 0:
302 		return 0;
303 	case 1:
304 	case 2:
305 	case 3:
306 	/* Our lower layer calculations limit our precision to
307 	   1 microsecond */
308 		return 1;
309 	case 4:
310 		return 2;
311 	case 5:
312 		return 4;
313 	case 6:
314 		return 8;
315 	case 7:
316 		return 16;
317 	default:
318 		return 0;
319 	}
320 }
321 
322 static int ath10k_peer_create(struct ath10k *ar, u32 vdev_id, const u8 *addr)
323 {
324 	int ret;
325 
326 	lockdep_assert_held(&ar->conf_mutex);
327 
328 	ret = ath10k_wmi_peer_create(ar, vdev_id, addr);
329 	if (ret) {
330 		ath10k_warn("failed to create wmi peer %pM on vdev %i: %i\n",
331 			    addr, vdev_id, ret);
332 		return ret;
333 	}
334 
335 	ret = ath10k_wait_for_peer_created(ar, vdev_id, addr);
336 	if (ret) {
337 		ath10k_warn("failed to wait for created wmi peer %pM on vdev %i: %i\n",
338 			    addr, vdev_id, ret);
339 		return ret;
340 	}
341 	spin_lock_bh(&ar->data_lock);
342 	ar->num_peers++;
343 	spin_unlock_bh(&ar->data_lock);
344 
345 	return 0;
346 }
347 
348 static int ath10k_mac_set_kickout(struct ath10k_vif *arvif)
349 {
350 	struct ath10k *ar = arvif->ar;
351 	u32 param;
352 	int ret;
353 
354 	param = ar->wmi.pdev_param->sta_kickout_th;
355 	ret = ath10k_wmi_pdev_set_param(ar, param,
356 					ATH10K_KICKOUT_THRESHOLD);
357 	if (ret) {
358 		ath10k_warn("failed to set kickout threshold on vdev %i: %d\n",
359 			    arvif->vdev_id, ret);
360 		return ret;
361 	}
362 
363 	param = ar->wmi.vdev_param->ap_keepalive_min_idle_inactive_time_secs;
364 	ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param,
365 					ATH10K_KEEPALIVE_MIN_IDLE);
366 	if (ret) {
367 		ath10k_warn("failed to set keepalive minimum idle time on vdev %i: %d\n",
368 			    arvif->vdev_id, ret);
369 		return ret;
370 	}
371 
372 	param = ar->wmi.vdev_param->ap_keepalive_max_idle_inactive_time_secs;
373 	ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param,
374 					ATH10K_KEEPALIVE_MAX_IDLE);
375 	if (ret) {
376 		ath10k_warn("failed to set keepalive maximum idle time on vdev %i: %d\n",
377 			    arvif->vdev_id, ret);
378 		return ret;
379 	}
380 
381 	param = ar->wmi.vdev_param->ap_keepalive_max_unresponsive_time_secs;
382 	ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param,
383 					ATH10K_KEEPALIVE_MAX_UNRESPONSIVE);
384 	if (ret) {
385 		ath10k_warn("failed to set keepalive maximum unresponsive time on vdev %i: %d\n",
386 			    arvif->vdev_id, ret);
387 		return ret;
388 	}
389 
390 	return 0;
391 }
392 
393 static int  ath10k_mac_set_rts(struct ath10k_vif *arvif, u32 value)
394 {
395 	struct ath10k *ar = arvif->ar;
396 	u32 vdev_param;
397 
398 	if (value != 0xFFFFFFFF)
399 		value = min_t(u32, arvif->ar->hw->wiphy->rts_threshold,
400 			      ATH10K_RTS_MAX);
401 
402 	vdev_param = ar->wmi.vdev_param->rts_threshold;
403 	return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, value);
404 }
405 
406 static int ath10k_mac_set_frag(struct ath10k_vif *arvif, u32 value)
407 {
408 	struct ath10k *ar = arvif->ar;
409 	u32 vdev_param;
410 
411 	if (value != 0xFFFFFFFF)
412 		value = clamp_t(u32, arvif->ar->hw->wiphy->frag_threshold,
413 				ATH10K_FRAGMT_THRESHOLD_MIN,
414 				ATH10K_FRAGMT_THRESHOLD_MAX);
415 
416 	vdev_param = ar->wmi.vdev_param->fragmentation_threshold;
417 	return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, value);
418 }
419 
420 static int ath10k_peer_delete(struct ath10k *ar, u32 vdev_id, const u8 *addr)
421 {
422 	int ret;
423 
424 	lockdep_assert_held(&ar->conf_mutex);
425 
426 	ret = ath10k_wmi_peer_delete(ar, vdev_id, addr);
427 	if (ret)
428 		return ret;
429 
430 	ret = ath10k_wait_for_peer_deleted(ar, vdev_id, addr);
431 	if (ret)
432 		return ret;
433 
434 	spin_lock_bh(&ar->data_lock);
435 	ar->num_peers--;
436 	spin_unlock_bh(&ar->data_lock);
437 
438 	return 0;
439 }
440 
441 static void ath10k_peer_cleanup(struct ath10k *ar, u32 vdev_id)
442 {
443 	struct ath10k_peer *peer, *tmp;
444 
445 	lockdep_assert_held(&ar->conf_mutex);
446 
447 	spin_lock_bh(&ar->data_lock);
448 	list_for_each_entry_safe(peer, tmp, &ar->peers, list) {
449 		if (peer->vdev_id != vdev_id)
450 			continue;
451 
452 		ath10k_warn("removing stale peer %pM from vdev_id %d\n",
453 			    peer->addr, vdev_id);
454 
455 		list_del(&peer->list);
456 		kfree(peer);
457 		ar->num_peers--;
458 	}
459 	spin_unlock_bh(&ar->data_lock);
460 }
461 
462 static void ath10k_peer_cleanup_all(struct ath10k *ar)
463 {
464 	struct ath10k_peer *peer, *tmp;
465 
466 	lockdep_assert_held(&ar->conf_mutex);
467 
468 	spin_lock_bh(&ar->data_lock);
469 	list_for_each_entry_safe(peer, tmp, &ar->peers, list) {
470 		list_del(&peer->list);
471 		kfree(peer);
472 	}
473 	ar->num_peers = 0;
474 	spin_unlock_bh(&ar->data_lock);
475 }
476 
477 /************************/
478 /* Interface management */
479 /************************/
480 
481 static inline int ath10k_vdev_setup_sync(struct ath10k *ar)
482 {
483 	int ret;
484 
485 	lockdep_assert_held(&ar->conf_mutex);
486 
487 	ret = wait_for_completion_timeout(&ar->vdev_setup_done,
488 					  ATH10K_VDEV_SETUP_TIMEOUT_HZ);
489 	if (ret == 0)
490 		return -ETIMEDOUT;
491 
492 	return 0;
493 }
494 
495 static bool ath10k_monitor_is_enabled(struct ath10k *ar)
496 {
497 	lockdep_assert_held(&ar->conf_mutex);
498 
499 	ath10k_dbg(ATH10K_DBG_MAC,
500 		   "mac monitor refs: promisc %d monitor %d cac %d\n",
501 		   ar->promisc, ar->monitor,
502 		   test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags));
503 
504 	return ar->promisc || ar->monitor ||
505 	       test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
506 }
507 
508 static int ath10k_monitor_vdev_start(struct ath10k *ar, int vdev_id)
509 {
510 	struct cfg80211_chan_def *chandef = &ar->chandef;
511 	struct ieee80211_channel *channel = chandef->chan;
512 	struct wmi_vdev_start_request_arg arg = {};
513 	int ret = 0;
514 
515 	lockdep_assert_held(&ar->conf_mutex);
516 
517 	arg.vdev_id = vdev_id;
518 	arg.channel.freq = channel->center_freq;
519 	arg.channel.band_center_freq1 = chandef->center_freq1;
520 
521 	/* TODO setup this dynamically, what in case we
522 	   don't have any vifs? */
523 	arg.channel.mode = chan_to_phymode(chandef);
524 	arg.channel.chan_radar =
525 			!!(channel->flags & IEEE80211_CHAN_RADAR);
526 
527 	arg.channel.min_power = 0;
528 	arg.channel.max_power = channel->max_power * 2;
529 	arg.channel.max_reg_power = channel->max_reg_power * 2;
530 	arg.channel.max_antenna_gain = channel->max_antenna_gain * 2;
531 
532 	ret = ath10k_wmi_vdev_start(ar, &arg);
533 	if (ret) {
534 		ath10k_warn("failed to request monitor vdev %i start: %d\n",
535 			    vdev_id, ret);
536 		return ret;
537 	}
538 
539 	ret = ath10k_vdev_setup_sync(ar);
540 	if (ret) {
541 		ath10k_warn("failed to synchronize setup for monitor vdev %i: %d\n",
542 			    vdev_id, ret);
543 		return ret;
544 	}
545 
546 	ret = ath10k_wmi_vdev_up(ar, vdev_id, 0, ar->mac_addr);
547 	if (ret) {
548 		ath10k_warn("failed to put up monitor vdev %i: %d\n",
549 			    vdev_id, ret);
550 		goto vdev_stop;
551 	}
552 
553 	ar->monitor_vdev_id = vdev_id;
554 
555 	ath10k_dbg(ATH10K_DBG_MAC, "mac monitor vdev %i started\n",
556 		   ar->monitor_vdev_id);
557 	return 0;
558 
559 vdev_stop:
560 	ret = ath10k_wmi_vdev_stop(ar, ar->monitor_vdev_id);
561 	if (ret)
562 		ath10k_warn("failed to stop monitor vdev %i after start failure: %d\n",
563 			    ar->monitor_vdev_id, ret);
564 
565 	return ret;
566 }
567 
568 static int ath10k_monitor_vdev_stop(struct ath10k *ar)
569 {
570 	int ret = 0;
571 
572 	lockdep_assert_held(&ar->conf_mutex);
573 
574 	ret = ath10k_wmi_vdev_down(ar, ar->monitor_vdev_id);
575 	if (ret)
576 		ath10k_warn("failed to put down monitor vdev %i: %d\n",
577 			    ar->monitor_vdev_id, ret);
578 
579 	ret = ath10k_wmi_vdev_stop(ar, ar->monitor_vdev_id);
580 	if (ret)
581 		ath10k_warn("failed to to request monitor vdev %i stop: %d\n",
582 			    ar->monitor_vdev_id, ret);
583 
584 	ret = ath10k_vdev_setup_sync(ar);
585 	if (ret)
586 		ath10k_warn("failed to synchronise monitor vdev %i: %d\n",
587 			    ar->monitor_vdev_id, ret);
588 
589 	ath10k_dbg(ATH10K_DBG_MAC, "mac monitor vdev %i stopped\n",
590 		   ar->monitor_vdev_id);
591 	return ret;
592 }
593 
594 static int ath10k_monitor_vdev_create(struct ath10k *ar)
595 {
596 	int bit, ret = 0;
597 
598 	lockdep_assert_held(&ar->conf_mutex);
599 
600 	bit = ffs(ar->free_vdev_map);
601 	if (bit == 0) {
602 		ath10k_warn("failed to find free vdev id for monitor vdev\n");
603 		return -ENOMEM;
604 	}
605 
606 	ar->monitor_vdev_id = bit - 1;
607 	ar->free_vdev_map &= ~(1 << ar->monitor_vdev_id);
608 
609 	ret = ath10k_wmi_vdev_create(ar, ar->monitor_vdev_id,
610 				     WMI_VDEV_TYPE_MONITOR,
611 				     0, ar->mac_addr);
612 	if (ret) {
613 		ath10k_warn("failed to request monitor vdev %i creation: %d\n",
614 			    ar->monitor_vdev_id, ret);
615 		goto vdev_fail;
616 	}
617 
618 	ath10k_dbg(ATH10K_DBG_MAC, "mac monitor vdev %d created\n",
619 		   ar->monitor_vdev_id);
620 
621 	return 0;
622 
623 vdev_fail:
624 	/*
625 	 * Restore the ID to the global map.
626 	 */
627 	ar->free_vdev_map |= 1 << (ar->monitor_vdev_id);
628 	return ret;
629 }
630 
631 static int ath10k_monitor_vdev_delete(struct ath10k *ar)
632 {
633 	int ret = 0;
634 
635 	lockdep_assert_held(&ar->conf_mutex);
636 
637 	ret = ath10k_wmi_vdev_delete(ar, ar->monitor_vdev_id);
638 	if (ret) {
639 		ath10k_warn("failed to request wmi monitor vdev %i removal: %d\n",
640 			    ar->monitor_vdev_id, ret);
641 		return ret;
642 	}
643 
644 	ar->free_vdev_map |= 1 << (ar->monitor_vdev_id);
645 
646 	ath10k_dbg(ATH10K_DBG_MAC, "mac monitor vdev %d deleted\n",
647 		   ar->monitor_vdev_id);
648 	return ret;
649 }
650 
651 static int ath10k_monitor_start(struct ath10k *ar)
652 {
653 	int ret;
654 
655 	lockdep_assert_held(&ar->conf_mutex);
656 
657 	if (!ath10k_monitor_is_enabled(ar)) {
658 		ath10k_warn("trying to start monitor with no references\n");
659 		return 0;
660 	}
661 
662 	if (ar->monitor_started) {
663 		ath10k_dbg(ATH10K_DBG_MAC, "mac monitor already started\n");
664 		return 0;
665 	}
666 
667 	ret = ath10k_monitor_vdev_create(ar);
668 	if (ret) {
669 		ath10k_warn("failed to create monitor vdev: %d\n", ret);
670 		return ret;
671 	}
672 
673 	ret = ath10k_monitor_vdev_start(ar, ar->monitor_vdev_id);
674 	if (ret) {
675 		ath10k_warn("failed to start monitor vdev: %d\n", ret);
676 		ath10k_monitor_vdev_delete(ar);
677 		return ret;
678 	}
679 
680 	ar->monitor_started = true;
681 	ath10k_dbg(ATH10K_DBG_MAC, "mac monitor started\n");
682 
683 	return 0;
684 }
685 
686 static void ath10k_monitor_stop(struct ath10k *ar)
687 {
688 	int ret;
689 
690 	lockdep_assert_held(&ar->conf_mutex);
691 
692 	if (ath10k_monitor_is_enabled(ar)) {
693 		ath10k_dbg(ATH10K_DBG_MAC,
694 			   "mac monitor will be stopped later\n");
695 		return;
696 	}
697 
698 	if (!ar->monitor_started) {
699 		ath10k_dbg(ATH10K_DBG_MAC,
700 			   "mac monitor probably failed to start earlier\n");
701 		return;
702 	}
703 
704 	ret = ath10k_monitor_vdev_stop(ar);
705 	if (ret)
706 		ath10k_warn("failed to stop monitor vdev: %d\n", ret);
707 
708 	ret = ath10k_monitor_vdev_delete(ar);
709 	if (ret)
710 		ath10k_warn("failed to delete monitor vdev: %d\n", ret);
711 
712 	ar->monitor_started = false;
713 	ath10k_dbg(ATH10K_DBG_MAC, "mac monitor stopped\n");
714 }
715 
716 static int ath10k_recalc_rtscts_prot(struct ath10k_vif *arvif)
717 {
718 	struct ath10k *ar = arvif->ar;
719 	u32 vdev_param, rts_cts = 0;
720 
721 	lockdep_assert_held(&ar->conf_mutex);
722 
723 	vdev_param = ar->wmi.vdev_param->enable_rtscts;
724 
725 	if (arvif->use_cts_prot || arvif->num_legacy_stations > 0)
726 		rts_cts |= SM(WMI_RTSCTS_ENABLED, WMI_RTSCTS_SET);
727 
728 	if (arvif->num_legacy_stations > 0)
729 		rts_cts |= SM(WMI_RTSCTS_ACROSS_SW_RETRIES,
730 			      WMI_RTSCTS_PROFILE);
731 
732 	return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
733 					 rts_cts);
734 }
735 
736 static int ath10k_start_cac(struct ath10k *ar)
737 {
738 	int ret;
739 
740 	lockdep_assert_held(&ar->conf_mutex);
741 
742 	set_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
743 
744 	ret = ath10k_monitor_start(ar);
745 	if (ret) {
746 		ath10k_warn("failed to start monitor (cac): %d\n", ret);
747 		clear_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
748 		return ret;
749 	}
750 
751 	ath10k_dbg(ATH10K_DBG_MAC, "mac cac start monitor vdev %d\n",
752 		   ar->monitor_vdev_id);
753 
754 	return 0;
755 }
756 
757 static int ath10k_stop_cac(struct ath10k *ar)
758 {
759 	lockdep_assert_held(&ar->conf_mutex);
760 
761 	/* CAC is not running - do nothing */
762 	if (!test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags))
763 		return 0;
764 
765 	clear_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
766 	ath10k_monitor_stop(ar);
767 
768 	ath10k_dbg(ATH10K_DBG_MAC, "mac cac finished\n");
769 
770 	return 0;
771 }
772 
773 static void ath10k_recalc_radar_detection(struct ath10k *ar)
774 {
775 	int ret;
776 
777 	lockdep_assert_held(&ar->conf_mutex);
778 
779 	ath10k_stop_cac(ar);
780 
781 	if (!ar->radar_enabled)
782 		return;
783 
784 	if (ar->num_started_vdevs > 0)
785 		return;
786 
787 	ret = ath10k_start_cac(ar);
788 	if (ret) {
789 		/*
790 		 * Not possible to start CAC on current channel so starting
791 		 * radiation is not allowed, make this channel DFS_UNAVAILABLE
792 		 * by indicating that radar was detected.
793 		 */
794 		ath10k_warn("failed to start CAC: %d\n", ret);
795 		ieee80211_radar_detected(ar->hw);
796 	}
797 }
798 
799 static int ath10k_vdev_start(struct ath10k_vif *arvif)
800 {
801 	struct ath10k *ar = arvif->ar;
802 	struct cfg80211_chan_def *chandef = &ar->chandef;
803 	struct wmi_vdev_start_request_arg arg = {};
804 	int ret = 0;
805 
806 	lockdep_assert_held(&ar->conf_mutex);
807 
808 	reinit_completion(&ar->vdev_setup_done);
809 
810 	arg.vdev_id = arvif->vdev_id;
811 	arg.dtim_period = arvif->dtim_period;
812 	arg.bcn_intval = arvif->beacon_interval;
813 
814 	arg.channel.freq = chandef->chan->center_freq;
815 	arg.channel.band_center_freq1 = chandef->center_freq1;
816 	arg.channel.mode = chan_to_phymode(chandef);
817 
818 	arg.channel.min_power = 0;
819 	arg.channel.max_power = chandef->chan->max_power * 2;
820 	arg.channel.max_reg_power = chandef->chan->max_reg_power * 2;
821 	arg.channel.max_antenna_gain = chandef->chan->max_antenna_gain * 2;
822 
823 	if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
824 		arg.ssid = arvif->u.ap.ssid;
825 		arg.ssid_len = arvif->u.ap.ssid_len;
826 		arg.hidden_ssid = arvif->u.ap.hidden_ssid;
827 
828 		/* For now allow DFS for AP mode */
829 		arg.channel.chan_radar =
830 			!!(chandef->chan->flags & IEEE80211_CHAN_RADAR);
831 	} else if (arvif->vdev_type == WMI_VDEV_TYPE_IBSS) {
832 		arg.ssid = arvif->vif->bss_conf.ssid;
833 		arg.ssid_len = arvif->vif->bss_conf.ssid_len;
834 	}
835 
836 	ath10k_dbg(ATH10K_DBG_MAC,
837 		   "mac vdev %d start center_freq %d phymode %s\n",
838 		   arg.vdev_id, arg.channel.freq,
839 		   ath10k_wmi_phymode_str(arg.channel.mode));
840 
841 	ret = ath10k_wmi_vdev_start(ar, &arg);
842 	if (ret) {
843 		ath10k_warn("failed to start WMI vdev %i: %d\n",
844 			    arg.vdev_id, ret);
845 		return ret;
846 	}
847 
848 	ret = ath10k_vdev_setup_sync(ar);
849 	if (ret) {
850 		ath10k_warn("failed to synchronise setup for vdev %i: %d\n",
851 			    arg.vdev_id, ret);
852 		return ret;
853 	}
854 
855 	ar->num_started_vdevs++;
856 	ath10k_recalc_radar_detection(ar);
857 
858 	return ret;
859 }
860 
861 static int ath10k_vdev_stop(struct ath10k_vif *arvif)
862 {
863 	struct ath10k *ar = arvif->ar;
864 	int ret;
865 
866 	lockdep_assert_held(&ar->conf_mutex);
867 
868 	reinit_completion(&ar->vdev_setup_done);
869 
870 	ret = ath10k_wmi_vdev_stop(ar, arvif->vdev_id);
871 	if (ret) {
872 		ath10k_warn("failed to stop WMI vdev %i: %d\n",
873 			    arvif->vdev_id, ret);
874 		return ret;
875 	}
876 
877 	ret = ath10k_vdev_setup_sync(ar);
878 	if (ret) {
879 		ath10k_warn("failed to syncronise setup for vdev %i: %d\n",
880 			    arvif->vdev_id, ret);
881 		return ret;
882 	}
883 
884 	WARN_ON(ar->num_started_vdevs == 0);
885 
886 	if (ar->num_started_vdevs != 0) {
887 		ar->num_started_vdevs--;
888 		ath10k_recalc_radar_detection(ar);
889 	}
890 
891 	return ret;
892 }
893 
894 static void ath10k_control_beaconing(struct ath10k_vif *arvif,
895 				struct ieee80211_bss_conf *info)
896 {
897 	int ret = 0;
898 
899 	lockdep_assert_held(&arvif->ar->conf_mutex);
900 
901 	if (!info->enable_beacon) {
902 		ath10k_vdev_stop(arvif);
903 
904 		arvif->is_started = false;
905 		arvif->is_up = false;
906 
907 		spin_lock_bh(&arvif->ar->data_lock);
908 		if (arvif->beacon) {
909 			dma_unmap_single(arvif->ar->dev,
910 					 ATH10K_SKB_CB(arvif->beacon)->paddr,
911 					 arvif->beacon->len, DMA_TO_DEVICE);
912 			dev_kfree_skb_any(arvif->beacon);
913 
914 			arvif->beacon = NULL;
915 			arvif->beacon_sent = false;
916 		}
917 		spin_unlock_bh(&arvif->ar->data_lock);
918 
919 		return;
920 	}
921 
922 	arvif->tx_seq_no = 0x1000;
923 
924 	ret = ath10k_vdev_start(arvif);
925 	if (ret)
926 		return;
927 
928 	arvif->aid = 0;
929 	memcpy(arvif->bssid, info->bssid, ETH_ALEN);
930 
931 	ret = ath10k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid,
932 				 arvif->bssid);
933 	if (ret) {
934 		ath10k_warn("failed to bring up vdev %d: %i\n",
935 			    arvif->vdev_id, ret);
936 		ath10k_vdev_stop(arvif);
937 		return;
938 	}
939 
940 	arvif->is_started = true;
941 	arvif->is_up = true;
942 
943 	ath10k_dbg(ATH10K_DBG_MAC, "mac vdev %d up\n", arvif->vdev_id);
944 }
945 
946 static void ath10k_control_ibss(struct ath10k_vif *arvif,
947 				struct ieee80211_bss_conf *info,
948 				const u8 self_peer[ETH_ALEN])
949 {
950 	u32 vdev_param;
951 	int ret = 0;
952 
953 	lockdep_assert_held(&arvif->ar->conf_mutex);
954 
955 	if (!info->ibss_joined) {
956 		ret = ath10k_peer_delete(arvif->ar, arvif->vdev_id, self_peer);
957 		if (ret)
958 			ath10k_warn("failed to delete IBSS self peer %pM for vdev %d: %d\n",
959 				    self_peer, arvif->vdev_id, ret);
960 
961 		if (is_zero_ether_addr(arvif->bssid))
962 			return;
963 
964 		ret = ath10k_peer_delete(arvif->ar, arvif->vdev_id,
965 					 arvif->bssid);
966 		if (ret) {
967 			ath10k_warn("failed to delete IBSS BSSID peer %pM for vdev %d: %d\n",
968 				    arvif->bssid, arvif->vdev_id, ret);
969 			return;
970 		}
971 
972 		memset(arvif->bssid, 0, ETH_ALEN);
973 
974 		return;
975 	}
976 
977 	ret = ath10k_peer_create(arvif->ar, arvif->vdev_id, self_peer);
978 	if (ret) {
979 		ath10k_warn("failed to create IBSS self peer %pM for vdev %d: %d\n",
980 			    self_peer, arvif->vdev_id, ret);
981 		return;
982 	}
983 
984 	vdev_param = arvif->ar->wmi.vdev_param->atim_window;
985 	ret = ath10k_wmi_vdev_set_param(arvif->ar, arvif->vdev_id, vdev_param,
986 					ATH10K_DEFAULT_ATIM);
987 	if (ret)
988 		ath10k_warn("failed to set IBSS ATIM for vdev %d: %d\n",
989 			    arvif->vdev_id, ret);
990 }
991 
992 /*
993  * Review this when mac80211 gains per-interface powersave support.
994  */
995 static int ath10k_mac_vif_setup_ps(struct ath10k_vif *arvif)
996 {
997 	struct ath10k *ar = arvif->ar;
998 	struct ieee80211_conf *conf = &ar->hw->conf;
999 	enum wmi_sta_powersave_param param;
1000 	enum wmi_sta_ps_mode psmode;
1001 	int ret;
1002 
1003 	lockdep_assert_held(&arvif->ar->conf_mutex);
1004 
1005 	if (arvif->vif->type != NL80211_IFTYPE_STATION)
1006 		return 0;
1007 
1008 	if (conf->flags & IEEE80211_CONF_PS) {
1009 		psmode = WMI_STA_PS_MODE_ENABLED;
1010 		param = WMI_STA_PS_PARAM_INACTIVITY_TIME;
1011 
1012 		ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, param,
1013 						  conf->dynamic_ps_timeout);
1014 		if (ret) {
1015 			ath10k_warn("failed to set inactivity time for vdev %d: %i\n",
1016 				    arvif->vdev_id, ret);
1017 			return ret;
1018 		}
1019 	} else {
1020 		psmode = WMI_STA_PS_MODE_DISABLED;
1021 	}
1022 
1023 	ath10k_dbg(ATH10K_DBG_MAC, "mac vdev %d psmode %s\n",
1024 		   arvif->vdev_id, psmode ? "enable" : "disable");
1025 
1026 	ret = ath10k_wmi_set_psmode(ar, arvif->vdev_id, psmode);
1027 	if (ret) {
1028 		ath10k_warn("failed to set PS Mode %d for vdev %d: %d\n",
1029 			    psmode, arvif->vdev_id, ret);
1030 		return ret;
1031 	}
1032 
1033 	return 0;
1034 }
1035 
1036 /**********************/
1037 /* Station management */
1038 /**********************/
1039 
1040 static void ath10k_peer_assoc_h_basic(struct ath10k *ar,
1041 				      struct ath10k_vif *arvif,
1042 				      struct ieee80211_sta *sta,
1043 				      struct ieee80211_bss_conf *bss_conf,
1044 				      struct wmi_peer_assoc_complete_arg *arg)
1045 {
1046 	lockdep_assert_held(&ar->conf_mutex);
1047 
1048 	memcpy(arg->addr, sta->addr, ETH_ALEN);
1049 	arg->vdev_id = arvif->vdev_id;
1050 	arg->peer_aid = sta->aid;
1051 	arg->peer_flags |= WMI_PEER_AUTH;
1052 
1053 	if (arvif->vdev_type == WMI_VDEV_TYPE_STA)
1054 		/*
1055 		 * Seems FW have problems with Power Save in STA
1056 		 * mode when we setup this parameter to high (eg. 5).
1057 		 * Often we see that FW don't send NULL (with clean P flags)
1058 		 * frame even there is info about buffered frames in beacons.
1059 		 * Sometimes we have to wait more than 10 seconds before FW
1060 		 * will wakeup. Often sending one ping from AP to our device
1061 		 * just fail (more than 50%).
1062 		 *
1063 		 * Seems setting this FW parameter to 1 couse FW
1064 		 * will check every beacon and will wakup immediately
1065 		 * after detection buffered data.
1066 		 */
1067 		arg->peer_listen_intval = 1;
1068 	else
1069 		arg->peer_listen_intval = ar->hw->conf.listen_interval;
1070 
1071 	arg->peer_num_spatial_streams = 1;
1072 
1073 	/*
1074 	 * The assoc capabilities are available only in managed mode.
1075 	 */
1076 	if (arvif->vdev_type == WMI_VDEV_TYPE_STA && bss_conf)
1077 		arg->peer_caps = bss_conf->assoc_capability;
1078 }
1079 
1080 static void ath10k_peer_assoc_h_crypto(struct ath10k *ar,
1081 				       struct ath10k_vif *arvif,
1082 				       struct wmi_peer_assoc_complete_arg *arg)
1083 {
1084 	struct ieee80211_vif *vif = arvif->vif;
1085 	struct ieee80211_bss_conf *info = &vif->bss_conf;
1086 	struct cfg80211_bss *bss;
1087 	const u8 *rsnie = NULL;
1088 	const u8 *wpaie = NULL;
1089 
1090 	lockdep_assert_held(&ar->conf_mutex);
1091 
1092 	bss = cfg80211_get_bss(ar->hw->wiphy, ar->hw->conf.chandef.chan,
1093 			       info->bssid, NULL, 0, 0, 0);
1094 	if (bss) {
1095 		const struct cfg80211_bss_ies *ies;
1096 
1097 		rcu_read_lock();
1098 		rsnie = ieee80211_bss_get_ie(bss, WLAN_EID_RSN);
1099 
1100 		ies = rcu_dereference(bss->ies);
1101 
1102 		wpaie = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
1103 				WLAN_OUI_TYPE_MICROSOFT_WPA,
1104 				ies->data,
1105 				ies->len);
1106 		rcu_read_unlock();
1107 		cfg80211_put_bss(ar->hw->wiphy, bss);
1108 	}
1109 
1110 	/* FIXME: base on RSN IE/WPA IE is a correct idea? */
1111 	if (rsnie || wpaie) {
1112 		ath10k_dbg(ATH10K_DBG_WMI, "%s: rsn ie found\n", __func__);
1113 		arg->peer_flags |= WMI_PEER_NEED_PTK_4_WAY;
1114 	}
1115 
1116 	if (wpaie) {
1117 		ath10k_dbg(ATH10K_DBG_WMI, "%s: wpa ie found\n", __func__);
1118 		arg->peer_flags |= WMI_PEER_NEED_GTK_2_WAY;
1119 	}
1120 }
1121 
1122 static void ath10k_peer_assoc_h_rates(struct ath10k *ar,
1123 				      struct ieee80211_sta *sta,
1124 				      struct wmi_peer_assoc_complete_arg *arg)
1125 {
1126 	struct wmi_rate_set_arg *rateset = &arg->peer_legacy_rates;
1127 	const struct ieee80211_supported_band *sband;
1128 	const struct ieee80211_rate *rates;
1129 	u32 ratemask;
1130 	int i;
1131 
1132 	lockdep_assert_held(&ar->conf_mutex);
1133 
1134 	sband = ar->hw->wiphy->bands[ar->hw->conf.chandef.chan->band];
1135 	ratemask = sta->supp_rates[ar->hw->conf.chandef.chan->band];
1136 	rates = sband->bitrates;
1137 
1138 	rateset->num_rates = 0;
1139 
1140 	for (i = 0; i < 32; i++, ratemask >>= 1, rates++) {
1141 		if (!(ratemask & 1))
1142 			continue;
1143 
1144 		rateset->rates[rateset->num_rates] = rates->hw_value;
1145 		rateset->num_rates++;
1146 	}
1147 }
1148 
1149 static void ath10k_peer_assoc_h_ht(struct ath10k *ar,
1150 				   struct ieee80211_sta *sta,
1151 				   struct wmi_peer_assoc_complete_arg *arg)
1152 {
1153 	const struct ieee80211_sta_ht_cap *ht_cap = &sta->ht_cap;
1154 	int i, n;
1155 
1156 	lockdep_assert_held(&ar->conf_mutex);
1157 
1158 	if (!ht_cap->ht_supported)
1159 		return;
1160 
1161 	arg->peer_flags |= WMI_PEER_HT;
1162 	arg->peer_max_mpdu = (1 << (IEEE80211_HT_MAX_AMPDU_FACTOR +
1163 				    ht_cap->ampdu_factor)) - 1;
1164 
1165 	arg->peer_mpdu_density =
1166 		ath10k_parse_mpdudensity(ht_cap->ampdu_density);
1167 
1168 	arg->peer_ht_caps = ht_cap->cap;
1169 	arg->peer_rate_caps |= WMI_RC_HT_FLAG;
1170 
1171 	if (ht_cap->cap & IEEE80211_HT_CAP_LDPC_CODING)
1172 		arg->peer_flags |= WMI_PEER_LDPC;
1173 
1174 	if (sta->bandwidth >= IEEE80211_STA_RX_BW_40) {
1175 		arg->peer_flags |= WMI_PEER_40MHZ;
1176 		arg->peer_rate_caps |= WMI_RC_CW40_FLAG;
1177 	}
1178 
1179 	if (ht_cap->cap & IEEE80211_HT_CAP_SGI_20)
1180 		arg->peer_rate_caps |= WMI_RC_SGI_FLAG;
1181 
1182 	if (ht_cap->cap & IEEE80211_HT_CAP_SGI_40)
1183 		arg->peer_rate_caps |= WMI_RC_SGI_FLAG;
1184 
1185 	if (ht_cap->cap & IEEE80211_HT_CAP_TX_STBC) {
1186 		arg->peer_rate_caps |= WMI_RC_TX_STBC_FLAG;
1187 		arg->peer_flags |= WMI_PEER_STBC;
1188 	}
1189 
1190 	if (ht_cap->cap & IEEE80211_HT_CAP_RX_STBC) {
1191 		u32 stbc;
1192 		stbc = ht_cap->cap & IEEE80211_HT_CAP_RX_STBC;
1193 		stbc = stbc >> IEEE80211_HT_CAP_RX_STBC_SHIFT;
1194 		stbc = stbc << WMI_RC_RX_STBC_FLAG_S;
1195 		arg->peer_rate_caps |= stbc;
1196 		arg->peer_flags |= WMI_PEER_STBC;
1197 	}
1198 
1199 	if (ht_cap->mcs.rx_mask[1] && ht_cap->mcs.rx_mask[2])
1200 		arg->peer_rate_caps |= WMI_RC_TS_FLAG;
1201 	else if (ht_cap->mcs.rx_mask[1])
1202 		arg->peer_rate_caps |= WMI_RC_DS_FLAG;
1203 
1204 	for (i = 0, n = 0; i < IEEE80211_HT_MCS_MASK_LEN*8; i++)
1205 		if (ht_cap->mcs.rx_mask[i/8] & (1 << i%8))
1206 			arg->peer_ht_rates.rates[n++] = i;
1207 
1208 	/*
1209 	 * This is a workaround for HT-enabled STAs which break the spec
1210 	 * and have no HT capabilities RX mask (no HT RX MCS map).
1211 	 *
1212 	 * As per spec, in section 20.3.5 Modulation and coding scheme (MCS),
1213 	 * MCS 0 through 7 are mandatory in 20MHz with 800 ns GI at all STAs.
1214 	 *
1215 	 * Firmware asserts if such situation occurs.
1216 	 */
1217 	if (n == 0) {
1218 		arg->peer_ht_rates.num_rates = 8;
1219 		for (i = 0; i < arg->peer_ht_rates.num_rates; i++)
1220 			arg->peer_ht_rates.rates[i] = i;
1221 	} else {
1222 		arg->peer_ht_rates.num_rates = n;
1223 		arg->peer_num_spatial_streams = sta->rx_nss;
1224 	}
1225 
1226 	ath10k_dbg(ATH10K_DBG_MAC, "mac ht peer %pM mcs cnt %d nss %d\n",
1227 		   arg->addr,
1228 		   arg->peer_ht_rates.num_rates,
1229 		   arg->peer_num_spatial_streams);
1230 }
1231 
1232 static int ath10k_peer_assoc_qos_ap(struct ath10k *ar,
1233 				    struct ath10k_vif *arvif,
1234 				    struct ieee80211_sta *sta)
1235 {
1236 	u32 uapsd = 0;
1237 	u32 max_sp = 0;
1238 	int ret = 0;
1239 
1240 	lockdep_assert_held(&ar->conf_mutex);
1241 
1242 	if (sta->wme && sta->uapsd_queues) {
1243 		ath10k_dbg(ATH10K_DBG_MAC, "mac uapsd_queues 0x%x max_sp %d\n",
1244 			   sta->uapsd_queues, sta->max_sp);
1245 
1246 		if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_VO)
1247 			uapsd |= WMI_AP_PS_UAPSD_AC3_DELIVERY_EN |
1248 				 WMI_AP_PS_UAPSD_AC3_TRIGGER_EN;
1249 		if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_VI)
1250 			uapsd |= WMI_AP_PS_UAPSD_AC2_DELIVERY_EN |
1251 				 WMI_AP_PS_UAPSD_AC2_TRIGGER_EN;
1252 		if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_BK)
1253 			uapsd |= WMI_AP_PS_UAPSD_AC1_DELIVERY_EN |
1254 				 WMI_AP_PS_UAPSD_AC1_TRIGGER_EN;
1255 		if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_BE)
1256 			uapsd |= WMI_AP_PS_UAPSD_AC0_DELIVERY_EN |
1257 				 WMI_AP_PS_UAPSD_AC0_TRIGGER_EN;
1258 
1259 
1260 		if (sta->max_sp < MAX_WMI_AP_PS_PEER_PARAM_MAX_SP)
1261 			max_sp = sta->max_sp;
1262 
1263 		ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id,
1264 						 sta->addr,
1265 						 WMI_AP_PS_PEER_PARAM_UAPSD,
1266 						 uapsd);
1267 		if (ret) {
1268 			ath10k_warn("failed to set ap ps peer param uapsd for vdev %i: %d\n",
1269 				    arvif->vdev_id, ret);
1270 			return ret;
1271 		}
1272 
1273 		ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id,
1274 						 sta->addr,
1275 						 WMI_AP_PS_PEER_PARAM_MAX_SP,
1276 						 max_sp);
1277 		if (ret) {
1278 			ath10k_warn("failed to set ap ps peer param max sp for vdev %i: %d\n",
1279 				    arvif->vdev_id, ret);
1280 			return ret;
1281 		}
1282 
1283 		/* TODO setup this based on STA listen interval and
1284 		   beacon interval. Currently we don't know
1285 		   sta->listen_interval - mac80211 patch required.
1286 		   Currently use 10 seconds */
1287 		ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id, sta->addr,
1288 					WMI_AP_PS_PEER_PARAM_AGEOUT_TIME, 10);
1289 		if (ret) {
1290 			ath10k_warn("failed to set ap ps peer param ageout time for vdev %i: %d\n",
1291 				    arvif->vdev_id, ret);
1292 			return ret;
1293 		}
1294 	}
1295 
1296 	return 0;
1297 }
1298 
1299 static void ath10k_peer_assoc_h_vht(struct ath10k *ar,
1300 				    struct ieee80211_sta *sta,
1301 				    struct wmi_peer_assoc_complete_arg *arg)
1302 {
1303 	const struct ieee80211_sta_vht_cap *vht_cap = &sta->vht_cap;
1304 	u8 ampdu_factor;
1305 
1306 	if (!vht_cap->vht_supported)
1307 		return;
1308 
1309 	arg->peer_flags |= WMI_PEER_VHT;
1310 	arg->peer_vht_caps = vht_cap->cap;
1311 
1312 
1313 	ampdu_factor = (vht_cap->cap &
1314 			IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK) >>
1315 		       IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_SHIFT;
1316 
1317 	/* Workaround: Some Netgear/Linksys 11ac APs set Rx A-MPDU factor to
1318 	 * zero in VHT IE. Using it would result in degraded throughput.
1319 	 * arg->peer_max_mpdu at this point contains HT max_mpdu so keep
1320 	 * it if VHT max_mpdu is smaller. */
1321 	arg->peer_max_mpdu = max(arg->peer_max_mpdu,
1322 				 (1U << (IEEE80211_HT_MAX_AMPDU_FACTOR +
1323 					ampdu_factor)) - 1);
1324 
1325 	if (sta->bandwidth == IEEE80211_STA_RX_BW_80)
1326 		arg->peer_flags |= WMI_PEER_80MHZ;
1327 
1328 	arg->peer_vht_rates.rx_max_rate =
1329 		__le16_to_cpu(vht_cap->vht_mcs.rx_highest);
1330 	arg->peer_vht_rates.rx_mcs_set =
1331 		__le16_to_cpu(vht_cap->vht_mcs.rx_mcs_map);
1332 	arg->peer_vht_rates.tx_max_rate =
1333 		__le16_to_cpu(vht_cap->vht_mcs.tx_highest);
1334 	arg->peer_vht_rates.tx_mcs_set =
1335 		__le16_to_cpu(vht_cap->vht_mcs.tx_mcs_map);
1336 
1337 	ath10k_dbg(ATH10K_DBG_MAC, "mac vht peer %pM max_mpdu %d flags 0x%x\n",
1338 		   sta->addr, arg->peer_max_mpdu, arg->peer_flags);
1339 }
1340 
1341 static void ath10k_peer_assoc_h_qos(struct ath10k *ar,
1342 				    struct ath10k_vif *arvif,
1343 				    struct ieee80211_sta *sta,
1344 				    struct ieee80211_bss_conf *bss_conf,
1345 				    struct wmi_peer_assoc_complete_arg *arg)
1346 {
1347 	switch (arvif->vdev_type) {
1348 	case WMI_VDEV_TYPE_AP:
1349 		if (sta->wme)
1350 			arg->peer_flags |= WMI_PEER_QOS;
1351 
1352 		if (sta->wme && sta->uapsd_queues) {
1353 			arg->peer_flags |= WMI_PEER_APSD;
1354 			arg->peer_rate_caps |= WMI_RC_UAPSD_FLAG;
1355 		}
1356 		break;
1357 	case WMI_VDEV_TYPE_STA:
1358 		if (bss_conf->qos)
1359 			arg->peer_flags |= WMI_PEER_QOS;
1360 		break;
1361 	default:
1362 		break;
1363 	}
1364 }
1365 
1366 static void ath10k_peer_assoc_h_phymode(struct ath10k *ar,
1367 					struct ath10k_vif *arvif,
1368 					struct ieee80211_sta *sta,
1369 					struct wmi_peer_assoc_complete_arg *arg)
1370 {
1371 	enum wmi_phy_mode phymode = MODE_UNKNOWN;
1372 
1373 	switch (ar->hw->conf.chandef.chan->band) {
1374 	case IEEE80211_BAND_2GHZ:
1375 		if (sta->ht_cap.ht_supported) {
1376 			if (sta->bandwidth == IEEE80211_STA_RX_BW_40)
1377 				phymode = MODE_11NG_HT40;
1378 			else
1379 				phymode = MODE_11NG_HT20;
1380 		} else {
1381 			phymode = MODE_11G;
1382 		}
1383 
1384 		break;
1385 	case IEEE80211_BAND_5GHZ:
1386 		/*
1387 		 * Check VHT first.
1388 		 */
1389 		if (sta->vht_cap.vht_supported) {
1390 			if (sta->bandwidth == IEEE80211_STA_RX_BW_80)
1391 				phymode = MODE_11AC_VHT80;
1392 			else if (sta->bandwidth == IEEE80211_STA_RX_BW_40)
1393 				phymode = MODE_11AC_VHT40;
1394 			else if (sta->bandwidth == IEEE80211_STA_RX_BW_20)
1395 				phymode = MODE_11AC_VHT20;
1396 		} else if (sta->ht_cap.ht_supported) {
1397 			if (sta->bandwidth == IEEE80211_STA_RX_BW_40)
1398 				phymode = MODE_11NA_HT40;
1399 			else
1400 				phymode = MODE_11NA_HT20;
1401 		} else {
1402 			phymode = MODE_11A;
1403 		}
1404 
1405 		break;
1406 	default:
1407 		break;
1408 	}
1409 
1410 	ath10k_dbg(ATH10K_DBG_MAC, "mac peer %pM phymode %s\n",
1411 		   sta->addr, ath10k_wmi_phymode_str(phymode));
1412 
1413 	arg->peer_phymode = phymode;
1414 	WARN_ON(phymode == MODE_UNKNOWN);
1415 }
1416 
1417 static int ath10k_peer_assoc_prepare(struct ath10k *ar,
1418 				     struct ath10k_vif *arvif,
1419 				     struct ieee80211_sta *sta,
1420 				     struct ieee80211_bss_conf *bss_conf,
1421 				     struct wmi_peer_assoc_complete_arg *arg)
1422 {
1423 	lockdep_assert_held(&ar->conf_mutex);
1424 
1425 	memset(arg, 0, sizeof(*arg));
1426 
1427 	ath10k_peer_assoc_h_basic(ar, arvif, sta, bss_conf, arg);
1428 	ath10k_peer_assoc_h_crypto(ar, arvif, arg);
1429 	ath10k_peer_assoc_h_rates(ar, sta, arg);
1430 	ath10k_peer_assoc_h_ht(ar, sta, arg);
1431 	ath10k_peer_assoc_h_vht(ar, sta, arg);
1432 	ath10k_peer_assoc_h_qos(ar, arvif, sta, bss_conf, arg);
1433 	ath10k_peer_assoc_h_phymode(ar, arvif, sta, arg);
1434 
1435 	return 0;
1436 }
1437 
1438 static const u32 ath10k_smps_map[] = {
1439 	[WLAN_HT_CAP_SM_PS_STATIC] = WMI_PEER_SMPS_STATIC,
1440 	[WLAN_HT_CAP_SM_PS_DYNAMIC] = WMI_PEER_SMPS_DYNAMIC,
1441 	[WLAN_HT_CAP_SM_PS_INVALID] = WMI_PEER_SMPS_PS_NONE,
1442 	[WLAN_HT_CAP_SM_PS_DISABLED] = WMI_PEER_SMPS_PS_NONE,
1443 };
1444 
1445 static int ath10k_setup_peer_smps(struct ath10k *ar, struct ath10k_vif *arvif,
1446 				  const u8 *addr,
1447 				  const struct ieee80211_sta_ht_cap *ht_cap)
1448 {
1449 	int smps;
1450 
1451 	if (!ht_cap->ht_supported)
1452 		return 0;
1453 
1454 	smps = ht_cap->cap & IEEE80211_HT_CAP_SM_PS;
1455 	smps >>= IEEE80211_HT_CAP_SM_PS_SHIFT;
1456 
1457 	if (smps >= ARRAY_SIZE(ath10k_smps_map))
1458 		return -EINVAL;
1459 
1460 	return ath10k_wmi_peer_set_param(ar, arvif->vdev_id, addr,
1461 					 WMI_PEER_SMPS_STATE,
1462 					 ath10k_smps_map[smps]);
1463 }
1464 
1465 /* can be called only in mac80211 callbacks due to `key_count` usage */
1466 static void ath10k_bss_assoc(struct ieee80211_hw *hw,
1467 			     struct ieee80211_vif *vif,
1468 			     struct ieee80211_bss_conf *bss_conf)
1469 {
1470 	struct ath10k *ar = hw->priv;
1471 	struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1472 	struct ieee80211_sta_ht_cap ht_cap;
1473 	struct wmi_peer_assoc_complete_arg peer_arg;
1474 	struct ieee80211_sta *ap_sta;
1475 	int ret;
1476 
1477 	lockdep_assert_held(&ar->conf_mutex);
1478 
1479 	rcu_read_lock();
1480 
1481 	ap_sta = ieee80211_find_sta(vif, bss_conf->bssid);
1482 	if (!ap_sta) {
1483 		ath10k_warn("failed to find station entry for bss %pM vdev %i\n",
1484 			    bss_conf->bssid, arvif->vdev_id);
1485 		rcu_read_unlock();
1486 		return;
1487 	}
1488 
1489 	/* ap_sta must be accessed only within rcu section which must be left
1490 	 * before calling ath10k_setup_peer_smps() which might sleep. */
1491 	ht_cap = ap_sta->ht_cap;
1492 
1493 	ret = ath10k_peer_assoc_prepare(ar, arvif, ap_sta,
1494 					bss_conf, &peer_arg);
1495 	if (ret) {
1496 		ath10k_warn("failed to prepare peer assoc for %pM vdev %i: %d\n",
1497 			    bss_conf->bssid, arvif->vdev_id, ret);
1498 		rcu_read_unlock();
1499 		return;
1500 	}
1501 
1502 	rcu_read_unlock();
1503 
1504 	ret = ath10k_wmi_peer_assoc(ar, &peer_arg);
1505 	if (ret) {
1506 		ath10k_warn("failed to run peer assoc for %pM vdev %i: %d\n",
1507 			    bss_conf->bssid, arvif->vdev_id, ret);
1508 		return;
1509 	}
1510 
1511 	ret = ath10k_setup_peer_smps(ar, arvif, bss_conf->bssid, &ht_cap);
1512 	if (ret) {
1513 		ath10k_warn("failed to setup peer SMPS for vdev %i: %d\n",
1514 			    arvif->vdev_id, ret);
1515 		return;
1516 	}
1517 
1518 	ath10k_dbg(ATH10K_DBG_MAC,
1519 		   "mac vdev %d up (associated) bssid %pM aid %d\n",
1520 		   arvif->vdev_id, bss_conf->bssid, bss_conf->aid);
1521 
1522 	arvif->aid = bss_conf->aid;
1523 	memcpy(arvif->bssid, bss_conf->bssid, ETH_ALEN);
1524 
1525 	ret = ath10k_wmi_vdev_up(ar, arvif->vdev_id, arvif->aid, arvif->bssid);
1526 	if (ret) {
1527 		ath10k_warn("failed to set vdev %d up: %d\n",
1528 			    arvif->vdev_id, ret);
1529 		return;
1530 	}
1531 
1532 	arvif->is_up = true;
1533 }
1534 
1535 /*
1536  * FIXME: flush TIDs
1537  */
1538 static void ath10k_bss_disassoc(struct ieee80211_hw *hw,
1539 				struct ieee80211_vif *vif)
1540 {
1541 	struct ath10k *ar = hw->priv;
1542 	struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1543 	int ret;
1544 
1545 	lockdep_assert_held(&ar->conf_mutex);
1546 
1547 	/*
1548 	 * For some reason, calling VDEV-DOWN before VDEV-STOP
1549 	 * makes the FW to send frames via HTT after disassociation.
1550 	 * No idea why this happens, even though VDEV-DOWN is supposed
1551 	 * to be analogous to link down, so just stop the VDEV.
1552 	 */
1553 	ath10k_dbg(ATH10K_DBG_MAC, "mac vdev %d stop (disassociated\n",
1554 		   arvif->vdev_id);
1555 
1556 	/* FIXME: check return value */
1557 	ret = ath10k_vdev_stop(arvif);
1558 
1559 	/*
1560 	 * If we don't call VDEV-DOWN after VDEV-STOP FW will remain active and
1561 	 * report beacons from previously associated network through HTT.
1562 	 * This in turn would spam mac80211 WARN_ON if we bring down all
1563 	 * interfaces as it expects there is no rx when no interface is
1564 	 * running.
1565 	 */
1566 	ath10k_dbg(ATH10K_DBG_MAC, "mac vdev %d down\n", arvif->vdev_id);
1567 
1568 	/* FIXME: why don't we print error if wmi call fails? */
1569 	ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id);
1570 
1571 	arvif->def_wep_key_idx = 0;
1572 
1573 	arvif->is_started = false;
1574 	arvif->is_up = false;
1575 }
1576 
1577 static int ath10k_station_assoc(struct ath10k *ar, struct ath10k_vif *arvif,
1578 				struct ieee80211_sta *sta, bool reassoc)
1579 {
1580 	struct wmi_peer_assoc_complete_arg peer_arg;
1581 	int ret = 0;
1582 
1583 	lockdep_assert_held(&ar->conf_mutex);
1584 
1585 	ret = ath10k_peer_assoc_prepare(ar, arvif, sta, NULL, &peer_arg);
1586 	if (ret) {
1587 		ath10k_warn("failed to prepare WMI peer assoc for %pM vdev %i: %i\n",
1588 			    sta->addr, arvif->vdev_id, ret);
1589 		return ret;
1590 	}
1591 
1592 	peer_arg.peer_reassoc = reassoc;
1593 	ret = ath10k_wmi_peer_assoc(ar, &peer_arg);
1594 	if (ret) {
1595 		ath10k_warn("failed to run peer assoc for STA %pM vdev %i: %d\n",
1596 			    sta->addr, arvif->vdev_id, ret);
1597 		return ret;
1598 	}
1599 
1600 	ret = ath10k_setup_peer_smps(ar, arvif, sta->addr, &sta->ht_cap);
1601 	if (ret) {
1602 		ath10k_warn("failed to setup peer SMPS for vdev %d: %d\n",
1603 			    arvif->vdev_id, ret);
1604 		return ret;
1605 	}
1606 
1607 	if (!sta->wme) {
1608 		arvif->num_legacy_stations++;
1609 		ret  = ath10k_recalc_rtscts_prot(arvif);
1610 		if (ret) {
1611 			ath10k_warn("failed to recalculate rts/cts prot for vdev %d: %d\n",
1612 				    arvif->vdev_id, ret);
1613 			return ret;
1614 		}
1615 	}
1616 
1617 	ret = ath10k_install_peer_wep_keys(arvif, sta->addr);
1618 	if (ret) {
1619 		ath10k_warn("failed to install peer wep keys for vdev %i: %d\n",
1620 			    arvif->vdev_id, ret);
1621 		return ret;
1622 	}
1623 
1624 	ret = ath10k_peer_assoc_qos_ap(ar, arvif, sta);
1625 	if (ret) {
1626 		ath10k_warn("failed to set qos params for STA %pM for vdev %i: %d\n",
1627 			    sta->addr, arvif->vdev_id, ret);
1628 		return ret;
1629 	}
1630 
1631 	return ret;
1632 }
1633 
1634 static int ath10k_station_disassoc(struct ath10k *ar, struct ath10k_vif *arvif,
1635 				   struct ieee80211_sta *sta)
1636 {
1637 	int ret = 0;
1638 
1639 	lockdep_assert_held(&ar->conf_mutex);
1640 
1641 	if (!sta->wme) {
1642 		arvif->num_legacy_stations--;
1643 		ret = ath10k_recalc_rtscts_prot(arvif);
1644 		if (ret) {
1645 			ath10k_warn("failed to recalculate rts/cts prot for vdev %d: %d\n",
1646 				    arvif->vdev_id, ret);
1647 			return ret;
1648 		}
1649 	}
1650 
1651 	ret = ath10k_clear_peer_keys(arvif, sta->addr);
1652 	if (ret) {
1653 		ath10k_warn("failed to clear all peer wep keys for vdev %i: %d\n",
1654 			    arvif->vdev_id, ret);
1655 		return ret;
1656 	}
1657 
1658 	return ret;
1659 }
1660 
1661 /**************/
1662 /* Regulatory */
1663 /**************/
1664 
1665 static int ath10k_update_channel_list(struct ath10k *ar)
1666 {
1667 	struct ieee80211_hw *hw = ar->hw;
1668 	struct ieee80211_supported_band **bands;
1669 	enum ieee80211_band band;
1670 	struct ieee80211_channel *channel;
1671 	struct wmi_scan_chan_list_arg arg = {0};
1672 	struct wmi_channel_arg *ch;
1673 	bool passive;
1674 	int len;
1675 	int ret;
1676 	int i;
1677 
1678 	lockdep_assert_held(&ar->conf_mutex);
1679 
1680 	bands = hw->wiphy->bands;
1681 	for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
1682 		if (!bands[band])
1683 			continue;
1684 
1685 		for (i = 0; i < bands[band]->n_channels; i++) {
1686 			if (bands[band]->channels[i].flags &
1687 			    IEEE80211_CHAN_DISABLED)
1688 				continue;
1689 
1690 			arg.n_channels++;
1691 		}
1692 	}
1693 
1694 	len = sizeof(struct wmi_channel_arg) * arg.n_channels;
1695 	arg.channels = kzalloc(len, GFP_KERNEL);
1696 	if (!arg.channels)
1697 		return -ENOMEM;
1698 
1699 	ch = arg.channels;
1700 	for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
1701 		if (!bands[band])
1702 			continue;
1703 
1704 		for (i = 0; i < bands[band]->n_channels; i++) {
1705 			channel = &bands[band]->channels[i];
1706 
1707 			if (channel->flags & IEEE80211_CHAN_DISABLED)
1708 				continue;
1709 
1710 			ch->allow_ht   = true;
1711 
1712 			/* FIXME: when should we really allow VHT? */
1713 			ch->allow_vht = true;
1714 
1715 			ch->allow_ibss =
1716 				!(channel->flags & IEEE80211_CHAN_NO_IR);
1717 
1718 			ch->ht40plus =
1719 				!(channel->flags & IEEE80211_CHAN_NO_HT40PLUS);
1720 
1721 			ch->chan_radar =
1722 				!!(channel->flags & IEEE80211_CHAN_RADAR);
1723 
1724 			passive = channel->flags & IEEE80211_CHAN_NO_IR;
1725 			ch->passive = passive;
1726 
1727 			ch->freq = channel->center_freq;
1728 			ch->min_power = 0;
1729 			ch->max_power = channel->max_power * 2;
1730 			ch->max_reg_power = channel->max_reg_power * 2;
1731 			ch->max_antenna_gain = channel->max_antenna_gain * 2;
1732 			ch->reg_class_id = 0; /* FIXME */
1733 
1734 			/* FIXME: why use only legacy modes, why not any
1735 			 * HT/VHT modes? Would that even make any
1736 			 * difference? */
1737 			if (channel->band == IEEE80211_BAND_2GHZ)
1738 				ch->mode = MODE_11G;
1739 			else
1740 				ch->mode = MODE_11A;
1741 
1742 			if (WARN_ON_ONCE(ch->mode == MODE_UNKNOWN))
1743 				continue;
1744 
1745 			ath10k_dbg(ATH10K_DBG_WMI,
1746 				   "mac channel [%zd/%d] freq %d maxpower %d regpower %d antenna %d mode %d\n",
1747 				    ch - arg.channels, arg.n_channels,
1748 				   ch->freq, ch->max_power, ch->max_reg_power,
1749 				   ch->max_antenna_gain, ch->mode);
1750 
1751 			ch++;
1752 		}
1753 	}
1754 
1755 	ret = ath10k_wmi_scan_chan_list(ar, &arg);
1756 	kfree(arg.channels);
1757 
1758 	return ret;
1759 }
1760 
1761 static enum wmi_dfs_region
1762 ath10k_mac_get_dfs_region(enum nl80211_dfs_regions dfs_region)
1763 {
1764 	switch (dfs_region) {
1765 	case NL80211_DFS_UNSET:
1766 		return WMI_UNINIT_DFS_DOMAIN;
1767 	case NL80211_DFS_FCC:
1768 		return WMI_FCC_DFS_DOMAIN;
1769 	case NL80211_DFS_ETSI:
1770 		return WMI_ETSI_DFS_DOMAIN;
1771 	case NL80211_DFS_JP:
1772 		return WMI_MKK4_DFS_DOMAIN;
1773 	}
1774 	return WMI_UNINIT_DFS_DOMAIN;
1775 }
1776 
1777 static void ath10k_regd_update(struct ath10k *ar)
1778 {
1779 	struct reg_dmn_pair_mapping *regpair;
1780 	int ret;
1781 	enum wmi_dfs_region wmi_dfs_reg;
1782 	enum nl80211_dfs_regions nl_dfs_reg;
1783 
1784 	lockdep_assert_held(&ar->conf_mutex);
1785 
1786 	ret = ath10k_update_channel_list(ar);
1787 	if (ret)
1788 		ath10k_warn("failed to update channel list: %d\n", ret);
1789 
1790 	regpair = ar->ath_common.regulatory.regpair;
1791 
1792 	if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector) {
1793 		nl_dfs_reg = ar->dfs_detector->region;
1794 		wmi_dfs_reg = ath10k_mac_get_dfs_region(nl_dfs_reg);
1795 	} else {
1796 		wmi_dfs_reg = WMI_UNINIT_DFS_DOMAIN;
1797 	}
1798 
1799 	/* Target allows setting up per-band regdomain but ath_common provides
1800 	 * a combined one only */
1801 	ret = ath10k_wmi_pdev_set_regdomain(ar,
1802 					    regpair->reg_domain,
1803 					    regpair->reg_domain, /* 2ghz */
1804 					    regpair->reg_domain, /* 5ghz */
1805 					    regpair->reg_2ghz_ctl,
1806 					    regpair->reg_5ghz_ctl,
1807 					    wmi_dfs_reg);
1808 	if (ret)
1809 		ath10k_warn("failed to set pdev regdomain: %d\n", ret);
1810 }
1811 
1812 static void ath10k_reg_notifier(struct wiphy *wiphy,
1813 				struct regulatory_request *request)
1814 {
1815 	struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
1816 	struct ath10k *ar = hw->priv;
1817 	bool result;
1818 
1819 	ath_reg_notifier_apply(wiphy, request, &ar->ath_common.regulatory);
1820 
1821 	if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector) {
1822 		ath10k_dbg(ATH10K_DBG_REGULATORY, "dfs region 0x%x\n",
1823 			   request->dfs_region);
1824 		result = ar->dfs_detector->set_dfs_domain(ar->dfs_detector,
1825 							  request->dfs_region);
1826 		if (!result)
1827 			ath10k_warn("DFS region 0x%X not supported, will trigger radar for every pulse\n",
1828 				    request->dfs_region);
1829 	}
1830 
1831 	mutex_lock(&ar->conf_mutex);
1832 	if (ar->state == ATH10K_STATE_ON)
1833 		ath10k_regd_update(ar);
1834 	mutex_unlock(&ar->conf_mutex);
1835 }
1836 
1837 /***************/
1838 /* TX handlers */
1839 /***************/
1840 
1841 static u8 ath10k_tx_h_get_tid(struct ieee80211_hdr *hdr)
1842 {
1843 	if (ieee80211_is_mgmt(hdr->frame_control))
1844 		return HTT_DATA_TX_EXT_TID_MGMT;
1845 
1846 	if (!ieee80211_is_data_qos(hdr->frame_control))
1847 		return HTT_DATA_TX_EXT_TID_NON_QOS_MCAST_BCAST;
1848 
1849 	if (!is_unicast_ether_addr(ieee80211_get_DA(hdr)))
1850 		return HTT_DATA_TX_EXT_TID_NON_QOS_MCAST_BCAST;
1851 
1852 	return ieee80211_get_qos_ctl(hdr)[0] & IEEE80211_QOS_CTL_TID_MASK;
1853 }
1854 
1855 static u8 ath10k_tx_h_get_vdev_id(struct ath10k *ar,
1856 				  struct ieee80211_tx_info *info)
1857 {
1858 	if (info->control.vif)
1859 		return ath10k_vif_to_arvif(info->control.vif)->vdev_id;
1860 
1861 	if (ar->monitor_started)
1862 		return ar->monitor_vdev_id;
1863 
1864 	ath10k_warn("failed to resolve vdev id\n");
1865 	return 0;
1866 }
1867 
1868 /* HTT Tx uses Native Wifi tx mode which expects 802.11 frames without QoS
1869  * Control in the header.
1870  */
1871 static void ath10k_tx_h_nwifi(struct ieee80211_hw *hw, struct sk_buff *skb)
1872 {
1873 	struct ieee80211_hdr *hdr = (void *)skb->data;
1874 	struct ath10k_skb_cb *cb = ATH10K_SKB_CB(skb);
1875 	u8 *qos_ctl;
1876 
1877 	if (!ieee80211_is_data_qos(hdr->frame_control))
1878 		return;
1879 
1880 	qos_ctl = ieee80211_get_qos_ctl(hdr);
1881 	memmove(skb->data + IEEE80211_QOS_CTL_LEN,
1882 		skb->data, (void *)qos_ctl - (void *)skb->data);
1883 	skb_pull(skb, IEEE80211_QOS_CTL_LEN);
1884 
1885 	/* Fw/Hw generates a corrupted QoS Control Field for QoS NullFunc
1886 	 * frames. Powersave is handled by the fw/hw so QoS NyllFunc frames are
1887 	 * used only for CQM purposes (e.g. hostapd station keepalive ping) so
1888 	 * it is safe to downgrade to NullFunc.
1889 	 */
1890 	if (ieee80211_is_qos_nullfunc(hdr->frame_control)) {
1891 		hdr->frame_control &= ~__cpu_to_le16(IEEE80211_STYPE_QOS_DATA);
1892 		cb->htt.tid = HTT_DATA_TX_EXT_TID_NON_QOS_MCAST_BCAST;
1893 	}
1894 }
1895 
1896 static void ath10k_tx_wep_key_work(struct work_struct *work)
1897 {
1898 	struct ath10k_vif *arvif = container_of(work, struct ath10k_vif,
1899 						wep_key_work);
1900 	int ret, keyidx = arvif->def_wep_key_newidx;
1901 
1902 	mutex_lock(&arvif->ar->conf_mutex);
1903 
1904 	if (arvif->ar->state != ATH10K_STATE_ON)
1905 		goto unlock;
1906 
1907 	if (arvif->def_wep_key_idx == keyidx)
1908 		goto unlock;
1909 
1910 	ath10k_dbg(ATH10K_DBG_MAC, "mac vdev %d set keyidx %d\n",
1911 		   arvif->vdev_id, keyidx);
1912 
1913 	ret = ath10k_wmi_vdev_set_param(arvif->ar,
1914 					arvif->vdev_id,
1915 					arvif->ar->wmi.vdev_param->def_keyid,
1916 					keyidx);
1917 	if (ret) {
1918 		ath10k_warn("failed to update wep key index for vdev %d: %d\n",
1919 			    arvif->vdev_id,
1920 			    ret);
1921 		goto unlock;
1922 	}
1923 
1924 	arvif->def_wep_key_idx = keyidx;
1925 
1926 unlock:
1927 	mutex_unlock(&arvif->ar->conf_mutex);
1928 }
1929 
1930 static void ath10k_tx_h_update_wep_key(struct ieee80211_vif *vif,
1931 				       struct ieee80211_key_conf *key,
1932 				       struct sk_buff *skb)
1933 {
1934 	struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1935 	struct ath10k *ar = arvif->ar;
1936 	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
1937 
1938 	if (!ieee80211_has_protected(hdr->frame_control))
1939 		return;
1940 
1941 	if (!key)
1942 		return;
1943 
1944 	if (key->cipher != WLAN_CIPHER_SUITE_WEP40 &&
1945 	    key->cipher != WLAN_CIPHER_SUITE_WEP104)
1946 		return;
1947 
1948 	if (key->keyidx == arvif->def_wep_key_idx)
1949 		return;
1950 
1951 	/* FIXME: Most likely a few frames will be TXed with an old key. Simply
1952 	 * queueing frames until key index is updated is not an option because
1953 	 * sk_buff may need more processing to be done, e.g. offchannel */
1954 	arvif->def_wep_key_newidx = key->keyidx;
1955 	ieee80211_queue_work(ar->hw, &arvif->wep_key_work);
1956 }
1957 
1958 static void ath10k_tx_h_add_p2p_noa_ie(struct ath10k *ar,
1959 				       struct ieee80211_vif *vif,
1960 				       struct sk_buff *skb)
1961 {
1962 	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
1963 	struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1964 
1965 	/* This is case only for P2P_GO */
1966 	if (arvif->vdev_type != WMI_VDEV_TYPE_AP ||
1967 	    arvif->vdev_subtype != WMI_VDEV_SUBTYPE_P2P_GO)
1968 		return;
1969 
1970 	if (unlikely(ieee80211_is_probe_resp(hdr->frame_control))) {
1971 		spin_lock_bh(&ar->data_lock);
1972 		if (arvif->u.ap.noa_data)
1973 			if (!pskb_expand_head(skb, 0, arvif->u.ap.noa_len,
1974 					      GFP_ATOMIC))
1975 				memcpy(skb_put(skb, arvif->u.ap.noa_len),
1976 				       arvif->u.ap.noa_data,
1977 				       arvif->u.ap.noa_len);
1978 		spin_unlock_bh(&ar->data_lock);
1979 	}
1980 }
1981 
1982 static void ath10k_tx_htt(struct ath10k *ar, struct sk_buff *skb)
1983 {
1984 	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
1985 	int ret = 0;
1986 
1987 	if (ar->htt.target_version_major >= 3) {
1988 		/* Since HTT 3.0 there is no separate mgmt tx command */
1989 		ret = ath10k_htt_tx(&ar->htt, skb);
1990 		goto exit;
1991 	}
1992 
1993 	if (ieee80211_is_mgmt(hdr->frame_control)) {
1994 		if (test_bit(ATH10K_FW_FEATURE_HAS_WMI_MGMT_TX,
1995 			     ar->fw_features)) {
1996 			if (skb_queue_len(&ar->wmi_mgmt_tx_queue) >=
1997 			    ATH10K_MAX_NUM_MGMT_PENDING) {
1998 				ath10k_warn("reached WMI management tranmist queue limit\n");
1999 				ret = -EBUSY;
2000 				goto exit;
2001 			}
2002 
2003 			skb_queue_tail(&ar->wmi_mgmt_tx_queue, skb);
2004 			ieee80211_queue_work(ar->hw, &ar->wmi_mgmt_tx_work);
2005 		} else {
2006 			ret = ath10k_htt_mgmt_tx(&ar->htt, skb);
2007 		}
2008 	} else if (!test_bit(ATH10K_FW_FEATURE_HAS_WMI_MGMT_TX,
2009 			     ar->fw_features) &&
2010 		   ieee80211_is_nullfunc(hdr->frame_control)) {
2011 		/* FW does not report tx status properly for NullFunc frames
2012 		 * unless they are sent through mgmt tx path. mac80211 sends
2013 		 * those frames when it detects link/beacon loss and depends
2014 		 * on the tx status to be correct. */
2015 		ret = ath10k_htt_mgmt_tx(&ar->htt, skb);
2016 	} else {
2017 		ret = ath10k_htt_tx(&ar->htt, skb);
2018 	}
2019 
2020 exit:
2021 	if (ret) {
2022 		ath10k_warn("failed to transmit packet, dropping: %d\n", ret);
2023 		ieee80211_free_txskb(ar->hw, skb);
2024 	}
2025 }
2026 
2027 void ath10k_offchan_tx_purge(struct ath10k *ar)
2028 {
2029 	struct sk_buff *skb;
2030 
2031 	for (;;) {
2032 		skb = skb_dequeue(&ar->offchan_tx_queue);
2033 		if (!skb)
2034 			break;
2035 
2036 		ieee80211_free_txskb(ar->hw, skb);
2037 	}
2038 }
2039 
2040 void ath10k_offchan_tx_work(struct work_struct *work)
2041 {
2042 	struct ath10k *ar = container_of(work, struct ath10k, offchan_tx_work);
2043 	struct ath10k_peer *peer;
2044 	struct ieee80211_hdr *hdr;
2045 	struct sk_buff *skb;
2046 	const u8 *peer_addr;
2047 	int vdev_id;
2048 	int ret;
2049 
2050 	/* FW requirement: We must create a peer before FW will send out
2051 	 * an offchannel frame. Otherwise the frame will be stuck and
2052 	 * never transmitted. We delete the peer upon tx completion.
2053 	 * It is unlikely that a peer for offchannel tx will already be
2054 	 * present. However it may be in some rare cases so account for that.
2055 	 * Otherwise we might remove a legitimate peer and break stuff. */
2056 
2057 	for (;;) {
2058 		skb = skb_dequeue(&ar->offchan_tx_queue);
2059 		if (!skb)
2060 			break;
2061 
2062 		mutex_lock(&ar->conf_mutex);
2063 
2064 		ath10k_dbg(ATH10K_DBG_MAC, "mac offchannel skb %p\n",
2065 			   skb);
2066 
2067 		hdr = (struct ieee80211_hdr *)skb->data;
2068 		peer_addr = ieee80211_get_DA(hdr);
2069 		vdev_id = ATH10K_SKB_CB(skb)->vdev_id;
2070 
2071 		spin_lock_bh(&ar->data_lock);
2072 		peer = ath10k_peer_find(ar, vdev_id, peer_addr);
2073 		spin_unlock_bh(&ar->data_lock);
2074 
2075 		if (peer)
2076 			/* FIXME: should this use ath10k_warn()? */
2077 			ath10k_dbg(ATH10K_DBG_MAC, "peer %pM on vdev %d already present\n",
2078 				   peer_addr, vdev_id);
2079 
2080 		if (!peer) {
2081 			ret = ath10k_peer_create(ar, vdev_id, peer_addr);
2082 			if (ret)
2083 				ath10k_warn("failed to create peer %pM on vdev %d: %d\n",
2084 					    peer_addr, vdev_id, ret);
2085 		}
2086 
2087 		spin_lock_bh(&ar->data_lock);
2088 		reinit_completion(&ar->offchan_tx_completed);
2089 		ar->offchan_tx_skb = skb;
2090 		spin_unlock_bh(&ar->data_lock);
2091 
2092 		ath10k_tx_htt(ar, skb);
2093 
2094 		ret = wait_for_completion_timeout(&ar->offchan_tx_completed,
2095 						  3 * HZ);
2096 		if (ret <= 0)
2097 			ath10k_warn("timed out waiting for offchannel skb %p\n",
2098 				    skb);
2099 
2100 		if (!peer) {
2101 			ret = ath10k_peer_delete(ar, vdev_id, peer_addr);
2102 			if (ret)
2103 				ath10k_warn("failed to delete peer %pM on vdev %d: %d\n",
2104 					    peer_addr, vdev_id, ret);
2105 		}
2106 
2107 		mutex_unlock(&ar->conf_mutex);
2108 	}
2109 }
2110 
2111 void ath10k_mgmt_over_wmi_tx_purge(struct ath10k *ar)
2112 {
2113 	struct sk_buff *skb;
2114 
2115 	for (;;) {
2116 		skb = skb_dequeue(&ar->wmi_mgmt_tx_queue);
2117 		if (!skb)
2118 			break;
2119 
2120 		ieee80211_free_txskb(ar->hw, skb);
2121 	}
2122 }
2123 
2124 void ath10k_mgmt_over_wmi_tx_work(struct work_struct *work)
2125 {
2126 	struct ath10k *ar = container_of(work, struct ath10k, wmi_mgmt_tx_work);
2127 	struct sk_buff *skb;
2128 	int ret;
2129 
2130 	for (;;) {
2131 		skb = skb_dequeue(&ar->wmi_mgmt_tx_queue);
2132 		if (!skb)
2133 			break;
2134 
2135 		ret = ath10k_wmi_mgmt_tx(ar, skb);
2136 		if (ret) {
2137 			ath10k_warn("failed to transmit management frame via WMI: %d\n",
2138 				    ret);
2139 			ieee80211_free_txskb(ar->hw, skb);
2140 		}
2141 	}
2142 }
2143 
2144 /************/
2145 /* Scanning */
2146 /************/
2147 
2148 /*
2149  * This gets called if we dont get a heart-beat during scan.
2150  * This may indicate the FW has hung and we need to abort the
2151  * scan manually to prevent cancel_hw_scan() from deadlocking
2152  */
2153 void ath10k_reset_scan(unsigned long ptr)
2154 {
2155 	struct ath10k *ar = (struct ath10k *)ptr;
2156 
2157 	spin_lock_bh(&ar->data_lock);
2158 	if (!ar->scan.in_progress) {
2159 		spin_unlock_bh(&ar->data_lock);
2160 		return;
2161 	}
2162 
2163 	ath10k_warn("scan timed out, firmware problem?\n");
2164 
2165 	if (ar->scan.is_roc)
2166 		ieee80211_remain_on_channel_expired(ar->hw);
2167 	else
2168 		ieee80211_scan_completed(ar->hw, 1 /* aborted */);
2169 
2170 	ar->scan.in_progress = false;
2171 	complete_all(&ar->scan.completed);
2172 	spin_unlock_bh(&ar->data_lock);
2173 }
2174 
2175 static int ath10k_abort_scan(struct ath10k *ar)
2176 {
2177 	struct wmi_stop_scan_arg arg = {
2178 		.req_id = 1, /* FIXME */
2179 		.req_type = WMI_SCAN_STOP_ONE,
2180 		.u.scan_id = ATH10K_SCAN_ID,
2181 	};
2182 	int ret;
2183 
2184 	lockdep_assert_held(&ar->conf_mutex);
2185 
2186 	del_timer_sync(&ar->scan.timeout);
2187 
2188 	spin_lock_bh(&ar->data_lock);
2189 	if (!ar->scan.in_progress) {
2190 		spin_unlock_bh(&ar->data_lock);
2191 		return 0;
2192 	}
2193 
2194 	ar->scan.aborting = true;
2195 	spin_unlock_bh(&ar->data_lock);
2196 
2197 	ret = ath10k_wmi_stop_scan(ar, &arg);
2198 	if (ret) {
2199 		ath10k_warn("failed to stop wmi scan: %d\n", ret);
2200 		spin_lock_bh(&ar->data_lock);
2201 		ar->scan.in_progress = false;
2202 		ath10k_offchan_tx_purge(ar);
2203 		spin_unlock_bh(&ar->data_lock);
2204 		return -EIO;
2205 	}
2206 
2207 	ret = wait_for_completion_timeout(&ar->scan.completed, 3*HZ);
2208 	if (ret == 0)
2209 		ath10k_warn("timed out while waiting for scan to stop\n");
2210 
2211 	/* scan completion may be done right after we timeout here, so let's
2212 	 * check the in_progress and tell mac80211 scan is completed. if we
2213 	 * don't do that and FW fails to send us scan completion indication
2214 	 * then userspace won't be able to scan anymore */
2215 	ret = 0;
2216 
2217 	spin_lock_bh(&ar->data_lock);
2218 	if (ar->scan.in_progress) {
2219 		ath10k_warn("failed to stop scan, it's still in progress\n");
2220 		ar->scan.in_progress = false;
2221 		ath10k_offchan_tx_purge(ar);
2222 		ret = -ETIMEDOUT;
2223 	}
2224 	spin_unlock_bh(&ar->data_lock);
2225 
2226 	return ret;
2227 }
2228 
2229 static int ath10k_start_scan(struct ath10k *ar,
2230 			     const struct wmi_start_scan_arg *arg)
2231 {
2232 	int ret;
2233 
2234 	lockdep_assert_held(&ar->conf_mutex);
2235 
2236 	ret = ath10k_wmi_start_scan(ar, arg);
2237 	if (ret)
2238 		return ret;
2239 
2240 	ret = wait_for_completion_timeout(&ar->scan.started, 1*HZ);
2241 	if (ret == 0) {
2242 		ath10k_abort_scan(ar);
2243 		return ret;
2244 	}
2245 
2246 	/* the scan can complete earlier, before we even
2247 	 * start the timer. in that case the timer handler
2248 	 * checks ar->scan.in_progress and bails out if its
2249 	 * false. Add a 200ms margin to account event/command
2250 	 * processing. */
2251 	mod_timer(&ar->scan.timeout, jiffies +
2252 		  msecs_to_jiffies(arg->max_scan_time+200));
2253 	return 0;
2254 }
2255 
2256 /**********************/
2257 /* mac80211 callbacks */
2258 /**********************/
2259 
2260 static void ath10k_tx(struct ieee80211_hw *hw,
2261 		      struct ieee80211_tx_control *control,
2262 		      struct sk_buff *skb)
2263 {
2264 	struct ath10k *ar = hw->priv;
2265 	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
2266 	struct ieee80211_vif *vif = info->control.vif;
2267 	struct ieee80211_key_conf *key = info->control.hw_key;
2268 	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
2269 
2270 	/* We should disable CCK RATE due to P2P */
2271 	if (info->flags & IEEE80211_TX_CTL_NO_CCK_RATE)
2272 		ath10k_dbg(ATH10K_DBG_MAC, "IEEE80211_TX_CTL_NO_CCK_RATE\n");
2273 
2274 	ATH10K_SKB_CB(skb)->htt.is_offchan = false;
2275 	ATH10K_SKB_CB(skb)->htt.tid = ath10k_tx_h_get_tid(hdr);
2276 	ATH10K_SKB_CB(skb)->vdev_id = ath10k_tx_h_get_vdev_id(ar, info);
2277 
2278 	/* it makes no sense to process injected frames like that */
2279 	if (vif && vif->type != NL80211_IFTYPE_MONITOR) {
2280 		ath10k_tx_h_nwifi(hw, skb);
2281 		ath10k_tx_h_update_wep_key(vif, key, skb);
2282 		ath10k_tx_h_add_p2p_noa_ie(ar, vif, skb);
2283 		ath10k_tx_h_seq_no(vif, skb);
2284 	}
2285 
2286 	if (info->flags & IEEE80211_TX_CTL_TX_OFFCHAN) {
2287 		spin_lock_bh(&ar->data_lock);
2288 		ATH10K_SKB_CB(skb)->htt.is_offchan = true;
2289 		ATH10K_SKB_CB(skb)->vdev_id = ar->scan.vdev_id;
2290 		spin_unlock_bh(&ar->data_lock);
2291 
2292 		ath10k_dbg(ATH10K_DBG_MAC, "queued offchannel skb %p\n", skb);
2293 
2294 		skb_queue_tail(&ar->offchan_tx_queue, skb);
2295 		ieee80211_queue_work(hw, &ar->offchan_tx_work);
2296 		return;
2297 	}
2298 
2299 	ath10k_tx_htt(ar, skb);
2300 }
2301 
2302 /* Must not be called with conf_mutex held as workers can use that also. */
2303 static void ath10k_drain_tx(struct ath10k *ar)
2304 {
2305 	/* make sure rcu-protected mac80211 tx path itself is drained */
2306 	synchronize_net();
2307 
2308 	ath10k_offchan_tx_purge(ar);
2309 	ath10k_mgmt_over_wmi_tx_purge(ar);
2310 
2311 	cancel_work_sync(&ar->offchan_tx_work);
2312 	cancel_work_sync(&ar->wmi_mgmt_tx_work);
2313 }
2314 
2315 void ath10k_halt(struct ath10k *ar)
2316 {
2317 	struct ath10k_vif *arvif;
2318 
2319 	lockdep_assert_held(&ar->conf_mutex);
2320 
2321 	if (ath10k_monitor_is_enabled(ar)) {
2322 		clear_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
2323 		ar->promisc = false;
2324 		ar->monitor = false;
2325 		ath10k_monitor_stop(ar);
2326 	}
2327 
2328 	del_timer_sync(&ar->scan.timeout);
2329 	ath10k_reset_scan((unsigned long)ar);
2330 	ath10k_peer_cleanup_all(ar);
2331 	ath10k_core_stop(ar);
2332 	ath10k_hif_power_down(ar);
2333 
2334 	spin_lock_bh(&ar->data_lock);
2335 	list_for_each_entry(arvif, &ar->arvifs, list) {
2336 		if (!arvif->beacon)
2337 			continue;
2338 
2339 		dma_unmap_single(arvif->ar->dev,
2340 				 ATH10K_SKB_CB(arvif->beacon)->paddr,
2341 				 arvif->beacon->len, DMA_TO_DEVICE);
2342 		dev_kfree_skb_any(arvif->beacon);
2343 		arvif->beacon = NULL;
2344 	}
2345 	spin_unlock_bh(&ar->data_lock);
2346 }
2347 
2348 static int ath10k_get_antenna(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant)
2349 {
2350 	struct ath10k *ar = hw->priv;
2351 
2352 	mutex_lock(&ar->conf_mutex);
2353 
2354 	if (ar->cfg_tx_chainmask) {
2355 		*tx_ant = ar->cfg_tx_chainmask;
2356 		*rx_ant = ar->cfg_rx_chainmask;
2357 	} else {
2358 		*tx_ant = ar->supp_tx_chainmask;
2359 		*rx_ant = ar->supp_rx_chainmask;
2360 	}
2361 
2362 	mutex_unlock(&ar->conf_mutex);
2363 
2364 	return 0;
2365 }
2366 
2367 static int __ath10k_set_antenna(struct ath10k *ar, u32 tx_ant, u32 rx_ant)
2368 {
2369 	int ret;
2370 
2371 	lockdep_assert_held(&ar->conf_mutex);
2372 
2373 	ar->cfg_tx_chainmask = tx_ant;
2374 	ar->cfg_rx_chainmask = rx_ant;
2375 
2376 	if ((ar->state != ATH10K_STATE_ON) &&
2377 	    (ar->state != ATH10K_STATE_RESTARTED))
2378 		return 0;
2379 
2380 	ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->tx_chain_mask,
2381 					tx_ant);
2382 	if (ret) {
2383 		ath10k_warn("failed to set tx-chainmask: %d, req 0x%x\n",
2384 			    ret, tx_ant);
2385 		return ret;
2386 	}
2387 
2388 	ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->rx_chain_mask,
2389 					rx_ant);
2390 	if (ret) {
2391 		ath10k_warn("failed to set rx-chainmask: %d, req 0x%x\n",
2392 			    ret, rx_ant);
2393 		return ret;
2394 	}
2395 
2396 	return 0;
2397 }
2398 
2399 static int ath10k_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant)
2400 {
2401 	struct ath10k *ar = hw->priv;
2402 	int ret;
2403 
2404 	mutex_lock(&ar->conf_mutex);
2405 	ret = __ath10k_set_antenna(ar, tx_ant, rx_ant);
2406 	mutex_unlock(&ar->conf_mutex);
2407 	return ret;
2408 }
2409 
2410 static int ath10k_start(struct ieee80211_hw *hw)
2411 {
2412 	struct ath10k *ar = hw->priv;
2413 	int ret = 0;
2414 
2415 	/*
2416 	 * This makes sense only when restarting hw. It is harmless to call
2417 	 * uncoditionally. This is necessary to make sure no HTT/WMI tx
2418 	 * commands will be submitted while restarting.
2419 	 */
2420 	ath10k_drain_tx(ar);
2421 
2422 	mutex_lock(&ar->conf_mutex);
2423 
2424 	switch (ar->state) {
2425 	case ATH10K_STATE_OFF:
2426 		ar->state = ATH10K_STATE_ON;
2427 		break;
2428 	case ATH10K_STATE_RESTARTING:
2429 		ath10k_halt(ar);
2430 		ar->state = ATH10K_STATE_RESTARTED;
2431 		break;
2432 	case ATH10K_STATE_ON:
2433 	case ATH10K_STATE_RESTARTED:
2434 	case ATH10K_STATE_WEDGED:
2435 		WARN_ON(1);
2436 		ret = -EINVAL;
2437 		goto err;
2438 	}
2439 
2440 	ret = ath10k_hif_power_up(ar);
2441 	if (ret) {
2442 		ath10k_err("Could not init hif: %d\n", ret);
2443 		goto err_off;
2444 	}
2445 
2446 	ret = ath10k_core_start(ar);
2447 	if (ret) {
2448 		ath10k_err("Could not init core: %d\n", ret);
2449 		goto err_power_down;
2450 	}
2451 
2452 	ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->pmf_qos, 1);
2453 	if (ret) {
2454 		ath10k_warn("failed to enable PMF QOS: %d\n", ret);
2455 		goto err_core_stop;
2456 	}
2457 
2458 	ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->dynamic_bw, 1);
2459 	if (ret) {
2460 		ath10k_warn("failed to enable dynamic BW: %d\n", ret);
2461 		goto err_core_stop;
2462 	}
2463 
2464 	if (ar->cfg_tx_chainmask)
2465 		__ath10k_set_antenna(ar, ar->cfg_tx_chainmask,
2466 				     ar->cfg_rx_chainmask);
2467 
2468 	/*
2469 	 * By default FW set ARP frames ac to voice (6). In that case ARP
2470 	 * exchange is not working properly for UAPSD enabled AP. ARP requests
2471 	 * which arrives with access category 0 are processed by network stack
2472 	 * and send back with access category 0, but FW changes access category
2473 	 * to 6. Set ARP frames access category to best effort (0) solves
2474 	 * this problem.
2475 	 */
2476 
2477 	ret = ath10k_wmi_pdev_set_param(ar,
2478 					ar->wmi.pdev_param->arp_ac_override, 0);
2479 	if (ret) {
2480 		ath10k_warn("failed to set arp ac override parameter: %d\n",
2481 			    ret);
2482 		goto err_core_stop;
2483 	}
2484 
2485 	ar->num_started_vdevs = 0;
2486 	ath10k_regd_update(ar);
2487 
2488 	mutex_unlock(&ar->conf_mutex);
2489 	return 0;
2490 
2491 err_core_stop:
2492 	ath10k_core_stop(ar);
2493 
2494 err_power_down:
2495 	ath10k_hif_power_down(ar);
2496 
2497 err_off:
2498 	ar->state = ATH10K_STATE_OFF;
2499 
2500 err:
2501 	mutex_unlock(&ar->conf_mutex);
2502 	return ret;
2503 }
2504 
2505 static void ath10k_stop(struct ieee80211_hw *hw)
2506 {
2507 	struct ath10k *ar = hw->priv;
2508 
2509 	ath10k_drain_tx(ar);
2510 
2511 	mutex_lock(&ar->conf_mutex);
2512 	if (ar->state != ATH10K_STATE_OFF) {
2513 		ath10k_halt(ar);
2514 		ar->state = ATH10K_STATE_OFF;
2515 	}
2516 	mutex_unlock(&ar->conf_mutex);
2517 
2518 	cancel_work_sync(&ar->restart_work);
2519 }
2520 
2521 static int ath10k_config_ps(struct ath10k *ar)
2522 {
2523 	struct ath10k_vif *arvif;
2524 	int ret = 0;
2525 
2526 	lockdep_assert_held(&ar->conf_mutex);
2527 
2528 	list_for_each_entry(arvif, &ar->arvifs, list) {
2529 		ret = ath10k_mac_vif_setup_ps(arvif);
2530 		if (ret) {
2531 			ath10k_warn("failed to setup powersave: %d\n", ret);
2532 			break;
2533 		}
2534 	}
2535 
2536 	return ret;
2537 }
2538 
2539 static const char *chandef_get_width(enum nl80211_chan_width width)
2540 {
2541 	switch (width) {
2542 	case NL80211_CHAN_WIDTH_20_NOHT:
2543 		return "20 (noht)";
2544 	case NL80211_CHAN_WIDTH_20:
2545 		return "20";
2546 	case NL80211_CHAN_WIDTH_40:
2547 		return "40";
2548 	case NL80211_CHAN_WIDTH_80:
2549 		return "80";
2550 	case NL80211_CHAN_WIDTH_80P80:
2551 		return "80+80";
2552 	case NL80211_CHAN_WIDTH_160:
2553 		return "160";
2554 	case NL80211_CHAN_WIDTH_5:
2555 		return "5";
2556 	case NL80211_CHAN_WIDTH_10:
2557 		return "10";
2558 	}
2559 	return "?";
2560 }
2561 
2562 static void ath10k_config_chan(struct ath10k *ar)
2563 {
2564 	struct ath10k_vif *arvif;
2565 	int ret;
2566 
2567 	lockdep_assert_held(&ar->conf_mutex);
2568 
2569 	ath10k_dbg(ATH10K_DBG_MAC,
2570 		   "mac config channel to %dMHz (cf1 %dMHz cf2 %dMHz width %s)\n",
2571 		   ar->chandef.chan->center_freq,
2572 		   ar->chandef.center_freq1,
2573 		   ar->chandef.center_freq2,
2574 		   chandef_get_width(ar->chandef.width));
2575 
2576 	/* First stop monitor interface. Some FW versions crash if there's a
2577 	 * lone monitor interface. */
2578 	if (ar->monitor_started)
2579 		ath10k_monitor_vdev_stop(ar);
2580 
2581 	list_for_each_entry(arvif, &ar->arvifs, list) {
2582 		if (!arvif->is_started)
2583 			continue;
2584 
2585 		if (arvif->vdev_type == WMI_VDEV_TYPE_MONITOR)
2586 			continue;
2587 
2588 		ret = ath10k_vdev_stop(arvif);
2589 		if (ret) {
2590 			ath10k_warn("failed to stop vdev %d: %d\n",
2591 				    arvif->vdev_id, ret);
2592 			continue;
2593 		}
2594 	}
2595 
2596 	/* all vdevs are now stopped - now attempt to restart them */
2597 
2598 	list_for_each_entry(arvif, &ar->arvifs, list) {
2599 		if (!arvif->is_started)
2600 			continue;
2601 
2602 		if (arvif->vdev_type == WMI_VDEV_TYPE_MONITOR)
2603 			continue;
2604 
2605 		ret = ath10k_vdev_start(arvif);
2606 		if (ret) {
2607 			ath10k_warn("failed to start vdev %d: %d\n",
2608 				    arvif->vdev_id, ret);
2609 			continue;
2610 		}
2611 
2612 		if (!arvif->is_up)
2613 			continue;
2614 
2615 		ret = ath10k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid,
2616 					 arvif->bssid);
2617 		if (ret) {
2618 			ath10k_warn("failed to bring vdev up %d: %d\n",
2619 				    arvif->vdev_id, ret);
2620 			continue;
2621 		}
2622 	}
2623 
2624 	if (ath10k_monitor_is_enabled(ar))
2625 		ath10k_monitor_vdev_start(ar, ar->monitor_vdev_id);
2626 }
2627 
2628 static int ath10k_config(struct ieee80211_hw *hw, u32 changed)
2629 {
2630 	struct ath10k *ar = hw->priv;
2631 	struct ieee80211_conf *conf = &hw->conf;
2632 	int ret = 0;
2633 	u32 param;
2634 
2635 	mutex_lock(&ar->conf_mutex);
2636 
2637 	if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
2638 		ath10k_dbg(ATH10K_DBG_MAC,
2639 			   "mac config channel %dMHz flags 0x%x radar %d\n",
2640 			   conf->chandef.chan->center_freq,
2641 			   conf->chandef.chan->flags,
2642 			   conf->radar_enabled);
2643 
2644 		spin_lock_bh(&ar->data_lock);
2645 		ar->rx_channel = conf->chandef.chan;
2646 		spin_unlock_bh(&ar->data_lock);
2647 
2648 		ar->radar_enabled = conf->radar_enabled;
2649 		ath10k_recalc_radar_detection(ar);
2650 
2651 		if (!cfg80211_chandef_identical(&ar->chandef, &conf->chandef)) {
2652 			ar->chandef = conf->chandef;
2653 			ath10k_config_chan(ar);
2654 		}
2655 	}
2656 
2657 	if (changed & IEEE80211_CONF_CHANGE_POWER) {
2658 		ath10k_dbg(ATH10K_DBG_MAC, "mac config power %d\n",
2659 			   hw->conf.power_level);
2660 
2661 		param = ar->wmi.pdev_param->txpower_limit2g;
2662 		ret = ath10k_wmi_pdev_set_param(ar, param,
2663 						hw->conf.power_level * 2);
2664 		if (ret)
2665 			ath10k_warn("failed to set 2g txpower %d: %d\n",
2666 				    hw->conf.power_level, ret);
2667 
2668 		param = ar->wmi.pdev_param->txpower_limit5g;
2669 		ret = ath10k_wmi_pdev_set_param(ar, param,
2670 						hw->conf.power_level * 2);
2671 		if (ret)
2672 			ath10k_warn("failed to set 5g txpower %d: %d\n",
2673 				    hw->conf.power_level, ret);
2674 	}
2675 
2676 	if (changed & IEEE80211_CONF_CHANGE_PS)
2677 		ath10k_config_ps(ar);
2678 
2679 	if (changed & IEEE80211_CONF_CHANGE_MONITOR) {
2680 		if (conf->flags & IEEE80211_CONF_MONITOR && !ar->monitor) {
2681 			ar->monitor = true;
2682 			ret = ath10k_monitor_start(ar);
2683 			if (ret) {
2684 				ath10k_warn("failed to start monitor (config): %d\n",
2685 					    ret);
2686 				ar->monitor = false;
2687 			}
2688 		} else if (!(conf->flags & IEEE80211_CONF_MONITOR) &&
2689 			   ar->monitor) {
2690 			ar->monitor = false;
2691 			ath10k_monitor_stop(ar);
2692 		}
2693 	}
2694 
2695 	mutex_unlock(&ar->conf_mutex);
2696 	return ret;
2697 }
2698 
2699 /*
2700  * TODO:
2701  * Figure out how to handle WMI_VDEV_SUBTYPE_P2P_DEVICE,
2702  * because we will send mgmt frames without CCK. This requirement
2703  * for P2P_FIND/GO_NEG should be handled by checking CCK flag
2704  * in the TX packet.
2705  */
2706 static int ath10k_add_interface(struct ieee80211_hw *hw,
2707 				struct ieee80211_vif *vif)
2708 {
2709 	struct ath10k *ar = hw->priv;
2710 	struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2711 	enum wmi_sta_powersave_param param;
2712 	int ret = 0;
2713 	u32 value;
2714 	int bit;
2715 	u32 vdev_param;
2716 
2717 	mutex_lock(&ar->conf_mutex);
2718 
2719 	memset(arvif, 0, sizeof(*arvif));
2720 
2721 	arvif->ar = ar;
2722 	arvif->vif = vif;
2723 
2724 	INIT_WORK(&arvif->wep_key_work, ath10k_tx_wep_key_work);
2725 	INIT_LIST_HEAD(&arvif->list);
2726 
2727 	bit = ffs(ar->free_vdev_map);
2728 	if (bit == 0) {
2729 		ret = -EBUSY;
2730 		goto err;
2731 	}
2732 
2733 	arvif->vdev_id = bit - 1;
2734 	arvif->vdev_subtype = WMI_VDEV_SUBTYPE_NONE;
2735 
2736 	if (ar->p2p)
2737 		arvif->vdev_subtype = WMI_VDEV_SUBTYPE_P2P_DEVICE;
2738 
2739 	switch (vif->type) {
2740 	case NL80211_IFTYPE_UNSPECIFIED:
2741 	case NL80211_IFTYPE_STATION:
2742 		arvif->vdev_type = WMI_VDEV_TYPE_STA;
2743 		if (vif->p2p)
2744 			arvif->vdev_subtype = WMI_VDEV_SUBTYPE_P2P_CLIENT;
2745 		break;
2746 	case NL80211_IFTYPE_ADHOC:
2747 		arvif->vdev_type = WMI_VDEV_TYPE_IBSS;
2748 		break;
2749 	case NL80211_IFTYPE_AP:
2750 		arvif->vdev_type = WMI_VDEV_TYPE_AP;
2751 
2752 		if (vif->p2p)
2753 			arvif->vdev_subtype = WMI_VDEV_SUBTYPE_P2P_GO;
2754 		break;
2755 	case NL80211_IFTYPE_MONITOR:
2756 		arvif->vdev_type = WMI_VDEV_TYPE_MONITOR;
2757 		break;
2758 	default:
2759 		WARN_ON(1);
2760 		break;
2761 	}
2762 
2763 	ath10k_dbg(ATH10K_DBG_MAC, "mac vdev create %d (add interface) type %d subtype %d\n",
2764 		   arvif->vdev_id, arvif->vdev_type, arvif->vdev_subtype);
2765 
2766 	ret = ath10k_wmi_vdev_create(ar, arvif->vdev_id, arvif->vdev_type,
2767 				     arvif->vdev_subtype, vif->addr);
2768 	if (ret) {
2769 		ath10k_warn("failed to create WMI vdev %i: %d\n",
2770 			    arvif->vdev_id, ret);
2771 		goto err;
2772 	}
2773 
2774 	ar->free_vdev_map &= ~BIT(arvif->vdev_id);
2775 	list_add(&arvif->list, &ar->arvifs);
2776 
2777 	vdev_param = ar->wmi.vdev_param->def_keyid;
2778 	ret = ath10k_wmi_vdev_set_param(ar, 0, vdev_param,
2779 					arvif->def_wep_key_idx);
2780 	if (ret) {
2781 		ath10k_warn("failed to set vdev %i default key id: %d\n",
2782 			    arvif->vdev_id, ret);
2783 		goto err_vdev_delete;
2784 	}
2785 
2786 	vdev_param = ar->wmi.vdev_param->tx_encap_type;
2787 	ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
2788 					ATH10K_HW_TXRX_NATIVE_WIFI);
2789 	/* 10.X firmware does not support this VDEV parameter. Do not warn */
2790 	if (ret && ret != -EOPNOTSUPP) {
2791 		ath10k_warn("failed to set vdev %i TX encapsulation: %d\n",
2792 			    arvif->vdev_id, ret);
2793 		goto err_vdev_delete;
2794 	}
2795 
2796 	if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
2797 		ret = ath10k_peer_create(ar, arvif->vdev_id, vif->addr);
2798 		if (ret) {
2799 			ath10k_warn("failed to create vdev %i peer for AP: %d\n",
2800 				    arvif->vdev_id, ret);
2801 			goto err_vdev_delete;
2802 		}
2803 
2804 		ret = ath10k_mac_set_kickout(arvif);
2805 		if (ret) {
2806 			ath10k_warn("failed to set vdev %i kickout parameters: %d\n",
2807 				    arvif->vdev_id, ret);
2808 			goto err_peer_delete;
2809 		}
2810 	}
2811 
2812 	if (arvif->vdev_type == WMI_VDEV_TYPE_STA) {
2813 		param = WMI_STA_PS_PARAM_RX_WAKE_POLICY;
2814 		value = WMI_STA_PS_RX_WAKE_POLICY_WAKE;
2815 		ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
2816 						  param, value);
2817 		if (ret) {
2818 			ath10k_warn("failed to set vdev %i RX wake policy: %d\n",
2819 				    arvif->vdev_id, ret);
2820 			goto err_peer_delete;
2821 		}
2822 
2823 		param = WMI_STA_PS_PARAM_TX_WAKE_THRESHOLD;
2824 		value = WMI_STA_PS_TX_WAKE_THRESHOLD_ALWAYS;
2825 		ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
2826 						  param, value);
2827 		if (ret) {
2828 			ath10k_warn("failed to set vdev %i TX wake thresh: %d\n",
2829 				    arvif->vdev_id, ret);
2830 			goto err_peer_delete;
2831 		}
2832 
2833 		param = WMI_STA_PS_PARAM_PSPOLL_COUNT;
2834 		value = WMI_STA_PS_PSPOLL_COUNT_NO_MAX;
2835 		ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
2836 						  param, value);
2837 		if (ret) {
2838 			ath10k_warn("failed to set vdev %i PSPOLL count: %d\n",
2839 				    arvif->vdev_id, ret);
2840 			goto err_peer_delete;
2841 		}
2842 	}
2843 
2844 	ret = ath10k_mac_set_rts(arvif, ar->hw->wiphy->rts_threshold);
2845 	if (ret) {
2846 		ath10k_warn("failed to set rts threshold for vdev %d: %d\n",
2847 			    arvif->vdev_id, ret);
2848 		goto err_peer_delete;
2849 	}
2850 
2851 	ret = ath10k_mac_set_frag(arvif, ar->hw->wiphy->frag_threshold);
2852 	if (ret) {
2853 		ath10k_warn("failed to set frag threshold for vdev %d: %d\n",
2854 			    arvif->vdev_id, ret);
2855 		goto err_peer_delete;
2856 	}
2857 
2858 	mutex_unlock(&ar->conf_mutex);
2859 	return 0;
2860 
2861 err_peer_delete:
2862 	if (arvif->vdev_type == WMI_VDEV_TYPE_AP)
2863 		ath10k_wmi_peer_delete(ar, arvif->vdev_id, vif->addr);
2864 
2865 err_vdev_delete:
2866 	ath10k_wmi_vdev_delete(ar, arvif->vdev_id);
2867 	ar->free_vdev_map &= ~BIT(arvif->vdev_id);
2868 	list_del(&arvif->list);
2869 
2870 err:
2871 	mutex_unlock(&ar->conf_mutex);
2872 
2873 	return ret;
2874 }
2875 
2876 static void ath10k_remove_interface(struct ieee80211_hw *hw,
2877 				    struct ieee80211_vif *vif)
2878 {
2879 	struct ath10k *ar = hw->priv;
2880 	struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2881 	int ret;
2882 
2883 	mutex_lock(&ar->conf_mutex);
2884 
2885 	cancel_work_sync(&arvif->wep_key_work);
2886 
2887 	spin_lock_bh(&ar->data_lock);
2888 	if (arvif->beacon) {
2889 		dma_unmap_single(arvif->ar->dev,
2890 				 ATH10K_SKB_CB(arvif->beacon)->paddr,
2891 				 arvif->beacon->len, DMA_TO_DEVICE);
2892 		dev_kfree_skb_any(arvif->beacon);
2893 		arvif->beacon = NULL;
2894 	}
2895 	spin_unlock_bh(&ar->data_lock);
2896 
2897 	ar->free_vdev_map |= 1 << (arvif->vdev_id);
2898 	list_del(&arvif->list);
2899 
2900 	if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
2901 		ret = ath10k_peer_delete(arvif->ar, arvif->vdev_id, vif->addr);
2902 		if (ret)
2903 			ath10k_warn("failed to remove peer for AP vdev %i: %d\n",
2904 				    arvif->vdev_id, ret);
2905 
2906 		kfree(arvif->u.ap.noa_data);
2907 	}
2908 
2909 	ath10k_dbg(ATH10K_DBG_MAC, "mac vdev %i delete (remove interface)\n",
2910 		   arvif->vdev_id);
2911 
2912 	ret = ath10k_wmi_vdev_delete(ar, arvif->vdev_id);
2913 	if (ret)
2914 		ath10k_warn("failed to delete WMI vdev %i: %d\n",
2915 			    arvif->vdev_id, ret);
2916 
2917 	ath10k_peer_cleanup(ar, arvif->vdev_id);
2918 
2919 	mutex_unlock(&ar->conf_mutex);
2920 }
2921 
2922 /*
2923  * FIXME: Has to be verified.
2924  */
2925 #define SUPPORTED_FILTERS			\
2926 	(FIF_PROMISC_IN_BSS |			\
2927 	FIF_ALLMULTI |				\
2928 	FIF_CONTROL |				\
2929 	FIF_PSPOLL |				\
2930 	FIF_OTHER_BSS |				\
2931 	FIF_BCN_PRBRESP_PROMISC |		\
2932 	FIF_PROBE_REQ |				\
2933 	FIF_FCSFAIL)
2934 
2935 static void ath10k_configure_filter(struct ieee80211_hw *hw,
2936 				    unsigned int changed_flags,
2937 				    unsigned int *total_flags,
2938 				    u64 multicast)
2939 {
2940 	struct ath10k *ar = hw->priv;
2941 	int ret;
2942 
2943 	mutex_lock(&ar->conf_mutex);
2944 
2945 	changed_flags &= SUPPORTED_FILTERS;
2946 	*total_flags &= SUPPORTED_FILTERS;
2947 	ar->filter_flags = *total_flags;
2948 
2949 	if (ar->filter_flags & FIF_PROMISC_IN_BSS && !ar->promisc) {
2950 		ar->promisc = true;
2951 		ret = ath10k_monitor_start(ar);
2952 		if (ret) {
2953 			ath10k_warn("failed to start monitor (promisc): %d\n",
2954 				    ret);
2955 			ar->promisc = false;
2956 		}
2957 	} else if (!(ar->filter_flags & FIF_PROMISC_IN_BSS) && ar->promisc) {
2958 		ar->promisc = false;
2959 		ath10k_monitor_stop(ar);
2960 	}
2961 
2962 	mutex_unlock(&ar->conf_mutex);
2963 }
2964 
2965 static void ath10k_bss_info_changed(struct ieee80211_hw *hw,
2966 				    struct ieee80211_vif *vif,
2967 				    struct ieee80211_bss_conf *info,
2968 				    u32 changed)
2969 {
2970 	struct ath10k *ar = hw->priv;
2971 	struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2972 	int ret = 0;
2973 	u32 vdev_param, pdev_param;
2974 
2975 	mutex_lock(&ar->conf_mutex);
2976 
2977 	if (changed & BSS_CHANGED_IBSS)
2978 		ath10k_control_ibss(arvif, info, vif->addr);
2979 
2980 	if (changed & BSS_CHANGED_BEACON_INT) {
2981 		arvif->beacon_interval = info->beacon_int;
2982 		vdev_param = ar->wmi.vdev_param->beacon_interval;
2983 		ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
2984 						arvif->beacon_interval);
2985 		ath10k_dbg(ATH10K_DBG_MAC,
2986 			   "mac vdev %d beacon_interval %d\n",
2987 			   arvif->vdev_id, arvif->beacon_interval);
2988 
2989 		if (ret)
2990 			ath10k_warn("failed to set beacon interval for vdev %d: %i\n",
2991 				    arvif->vdev_id, ret);
2992 	}
2993 
2994 	if (changed & BSS_CHANGED_BEACON) {
2995 		ath10k_dbg(ATH10K_DBG_MAC,
2996 			   "vdev %d set beacon tx mode to staggered\n",
2997 			   arvif->vdev_id);
2998 
2999 		pdev_param = ar->wmi.pdev_param->beacon_tx_mode;
3000 		ret = ath10k_wmi_pdev_set_param(ar, pdev_param,
3001 						WMI_BEACON_STAGGERED_MODE);
3002 		if (ret)
3003 			ath10k_warn("failed to set beacon mode for vdev %d: %i\n",
3004 				    arvif->vdev_id, ret);
3005 	}
3006 
3007 	if (changed & BSS_CHANGED_BEACON_INFO) {
3008 		arvif->dtim_period = info->dtim_period;
3009 
3010 		ath10k_dbg(ATH10K_DBG_MAC,
3011 			   "mac vdev %d dtim_period %d\n",
3012 			   arvif->vdev_id, arvif->dtim_period);
3013 
3014 		vdev_param = ar->wmi.vdev_param->dtim_period;
3015 		ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
3016 						arvif->dtim_period);
3017 		if (ret)
3018 			ath10k_warn("failed to set dtim period for vdev %d: %i\n",
3019 				    arvif->vdev_id, ret);
3020 	}
3021 
3022 	if (changed & BSS_CHANGED_SSID &&
3023 	    vif->type == NL80211_IFTYPE_AP) {
3024 		arvif->u.ap.ssid_len = info->ssid_len;
3025 		if (info->ssid_len)
3026 			memcpy(arvif->u.ap.ssid, info->ssid, info->ssid_len);
3027 		arvif->u.ap.hidden_ssid = info->hidden_ssid;
3028 	}
3029 
3030 	/*
3031 	 * Firmware manages AP self-peer internally so make sure to not create
3032 	 * it in driver. Otherwise AP self-peer deletion may timeout later.
3033 	 */
3034 	if (changed & BSS_CHANGED_BSSID &&
3035 	    vif->type != NL80211_IFTYPE_AP) {
3036 		if (!is_zero_ether_addr(info->bssid)) {
3037 			ath10k_dbg(ATH10K_DBG_MAC,
3038 				   "mac vdev %d create peer %pM\n",
3039 				   arvif->vdev_id, info->bssid);
3040 
3041 			ret = ath10k_peer_create(ar, arvif->vdev_id,
3042 						 info->bssid);
3043 			if (ret)
3044 				ath10k_warn("failed to add peer %pM for vdev %d when changing bssid: %i\n",
3045 					    info->bssid, arvif->vdev_id, ret);
3046 
3047 			if (vif->type == NL80211_IFTYPE_STATION) {
3048 				/*
3049 				 * this is never erased as we it for crypto key
3050 				 * clearing; this is FW requirement
3051 				 */
3052 				memcpy(arvif->bssid, info->bssid, ETH_ALEN);
3053 
3054 				ath10k_dbg(ATH10K_DBG_MAC,
3055 					   "mac vdev %d start %pM\n",
3056 					   arvif->vdev_id, info->bssid);
3057 
3058 				ret = ath10k_vdev_start(arvif);
3059 				if (ret) {
3060 					ath10k_warn("failed to start vdev %i: %d\n",
3061 						    arvif->vdev_id, ret);
3062 					goto exit;
3063 				}
3064 
3065 				arvif->is_started = true;
3066 			}
3067 
3068 			/*
3069 			 * Mac80211 does not keep IBSS bssid when leaving IBSS,
3070 			 * so driver need to store it. It is needed when leaving
3071 			 * IBSS in order to remove BSSID peer.
3072 			 */
3073 			if (vif->type == NL80211_IFTYPE_ADHOC)
3074 				memcpy(arvif->bssid, info->bssid,
3075 				       ETH_ALEN);
3076 		}
3077 	}
3078 
3079 	if (changed & BSS_CHANGED_BEACON_ENABLED)
3080 		ath10k_control_beaconing(arvif, info);
3081 
3082 	if (changed & BSS_CHANGED_ERP_CTS_PROT) {
3083 		arvif->use_cts_prot = info->use_cts_prot;
3084 		ath10k_dbg(ATH10K_DBG_MAC, "mac vdev %d cts_prot %d\n",
3085 			   arvif->vdev_id, info->use_cts_prot);
3086 
3087 		ret = ath10k_recalc_rtscts_prot(arvif);
3088 		if (ret)
3089 			ath10k_warn("failed to recalculate rts/cts prot for vdev %d: %d\n",
3090 				    arvif->vdev_id, ret);
3091 	}
3092 
3093 	if (changed & BSS_CHANGED_ERP_SLOT) {
3094 		u32 slottime;
3095 		if (info->use_short_slot)
3096 			slottime = WMI_VDEV_SLOT_TIME_SHORT; /* 9us */
3097 
3098 		else
3099 			slottime = WMI_VDEV_SLOT_TIME_LONG; /* 20us */
3100 
3101 		ath10k_dbg(ATH10K_DBG_MAC, "mac vdev %d slot_time %d\n",
3102 			   arvif->vdev_id, slottime);
3103 
3104 		vdev_param = ar->wmi.vdev_param->slot_time;
3105 		ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
3106 						slottime);
3107 		if (ret)
3108 			ath10k_warn("failed to set erp slot for vdev %d: %i\n",
3109 				    arvif->vdev_id, ret);
3110 	}
3111 
3112 	if (changed & BSS_CHANGED_ERP_PREAMBLE) {
3113 		u32 preamble;
3114 		if (info->use_short_preamble)
3115 			preamble = WMI_VDEV_PREAMBLE_SHORT;
3116 		else
3117 			preamble = WMI_VDEV_PREAMBLE_LONG;
3118 
3119 		ath10k_dbg(ATH10K_DBG_MAC,
3120 			   "mac vdev %d preamble %dn",
3121 			   arvif->vdev_id, preamble);
3122 
3123 		vdev_param = ar->wmi.vdev_param->preamble;
3124 		ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
3125 						preamble);
3126 		if (ret)
3127 			ath10k_warn("failed to set preamble for vdev %d: %i\n",
3128 				    arvif->vdev_id, ret);
3129 	}
3130 
3131 	if (changed & BSS_CHANGED_ASSOC) {
3132 		if (info->assoc)
3133 			ath10k_bss_assoc(hw, vif, info);
3134 	}
3135 
3136 exit:
3137 	mutex_unlock(&ar->conf_mutex);
3138 }
3139 
3140 static int ath10k_hw_scan(struct ieee80211_hw *hw,
3141 			  struct ieee80211_vif *vif,
3142 			  struct ieee80211_scan_request *hw_req)
3143 {
3144 	struct ath10k *ar = hw->priv;
3145 	struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3146 	struct cfg80211_scan_request *req = &hw_req->req;
3147 	struct wmi_start_scan_arg arg;
3148 	int ret = 0;
3149 	int i;
3150 
3151 	mutex_lock(&ar->conf_mutex);
3152 
3153 	spin_lock_bh(&ar->data_lock);
3154 	if (ar->scan.in_progress) {
3155 		spin_unlock_bh(&ar->data_lock);
3156 		ret = -EBUSY;
3157 		goto exit;
3158 	}
3159 
3160 	reinit_completion(&ar->scan.started);
3161 	reinit_completion(&ar->scan.completed);
3162 	ar->scan.in_progress = true;
3163 	ar->scan.aborting = false;
3164 	ar->scan.is_roc = false;
3165 	ar->scan.vdev_id = arvif->vdev_id;
3166 	spin_unlock_bh(&ar->data_lock);
3167 
3168 	memset(&arg, 0, sizeof(arg));
3169 	ath10k_wmi_start_scan_init(ar, &arg);
3170 	arg.vdev_id = arvif->vdev_id;
3171 	arg.scan_id = ATH10K_SCAN_ID;
3172 
3173 	if (!req->no_cck)
3174 		arg.scan_ctrl_flags |= WMI_SCAN_ADD_CCK_RATES;
3175 
3176 	if (req->ie_len) {
3177 		arg.ie_len = req->ie_len;
3178 		memcpy(arg.ie, req->ie, arg.ie_len);
3179 	}
3180 
3181 	if (req->n_ssids) {
3182 		arg.n_ssids = req->n_ssids;
3183 		for (i = 0; i < arg.n_ssids; i++) {
3184 			arg.ssids[i].len  = req->ssids[i].ssid_len;
3185 			arg.ssids[i].ssid = req->ssids[i].ssid;
3186 		}
3187 	} else {
3188 		arg.scan_ctrl_flags |= WMI_SCAN_FLAG_PASSIVE;
3189 	}
3190 
3191 	if (req->n_channels) {
3192 		arg.n_channels = req->n_channels;
3193 		for (i = 0; i < arg.n_channels; i++)
3194 			arg.channels[i] = req->channels[i]->center_freq;
3195 	}
3196 
3197 	ret = ath10k_start_scan(ar, &arg);
3198 	if (ret) {
3199 		ath10k_warn("failed to start hw scan: %d\n", ret);
3200 		spin_lock_bh(&ar->data_lock);
3201 		ar->scan.in_progress = false;
3202 		spin_unlock_bh(&ar->data_lock);
3203 	}
3204 
3205 exit:
3206 	mutex_unlock(&ar->conf_mutex);
3207 	return ret;
3208 }
3209 
3210 static void ath10k_cancel_hw_scan(struct ieee80211_hw *hw,
3211 				  struct ieee80211_vif *vif)
3212 {
3213 	struct ath10k *ar = hw->priv;
3214 	int ret;
3215 
3216 	mutex_lock(&ar->conf_mutex);
3217 	ret = ath10k_abort_scan(ar);
3218 	if (ret) {
3219 		ath10k_warn("failed to abort scan: %d\n", ret);
3220 		ieee80211_scan_completed(hw, 1 /* aborted */);
3221 	}
3222 	mutex_unlock(&ar->conf_mutex);
3223 }
3224 
3225 static void ath10k_set_key_h_def_keyidx(struct ath10k *ar,
3226 					struct ath10k_vif *arvif,
3227 					enum set_key_cmd cmd,
3228 					struct ieee80211_key_conf *key)
3229 {
3230 	u32 vdev_param = arvif->ar->wmi.vdev_param->def_keyid;
3231 	int ret;
3232 
3233 	/* 10.1 firmware branch requires default key index to be set to group
3234 	 * key index after installing it. Otherwise FW/HW Txes corrupted
3235 	 * frames with multi-vif APs. This is not required for main firmware
3236 	 * branch (e.g. 636).
3237 	 *
3238 	 * FIXME: This has been tested only in AP. It remains unknown if this
3239 	 * is required for multi-vif STA interfaces on 10.1 */
3240 
3241 	if (arvif->vdev_type != WMI_VDEV_TYPE_AP)
3242 		return;
3243 
3244 	if (key->cipher == WLAN_CIPHER_SUITE_WEP40)
3245 		return;
3246 
3247 	if (key->cipher == WLAN_CIPHER_SUITE_WEP104)
3248 		return;
3249 
3250 	if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE)
3251 		return;
3252 
3253 	if (cmd != SET_KEY)
3254 		return;
3255 
3256 	ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
3257 					key->keyidx);
3258 	if (ret)
3259 		ath10k_warn("failed to set vdev %i group key as default key: %d\n",
3260 			    arvif->vdev_id, ret);
3261 }
3262 
3263 static int ath10k_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
3264 			  struct ieee80211_vif *vif, struct ieee80211_sta *sta,
3265 			  struct ieee80211_key_conf *key)
3266 {
3267 	struct ath10k *ar = hw->priv;
3268 	struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3269 	struct ath10k_peer *peer;
3270 	const u8 *peer_addr;
3271 	bool is_wep = key->cipher == WLAN_CIPHER_SUITE_WEP40 ||
3272 		      key->cipher == WLAN_CIPHER_SUITE_WEP104;
3273 	int ret = 0;
3274 
3275 	if (key->keyidx > WMI_MAX_KEY_INDEX)
3276 		return -ENOSPC;
3277 
3278 	mutex_lock(&ar->conf_mutex);
3279 
3280 	if (sta)
3281 		peer_addr = sta->addr;
3282 	else if (arvif->vdev_type == WMI_VDEV_TYPE_STA)
3283 		peer_addr = vif->bss_conf.bssid;
3284 	else
3285 		peer_addr = vif->addr;
3286 
3287 	key->hw_key_idx = key->keyidx;
3288 
3289 	/* the peer should not disappear in mid-way (unless FW goes awry) since
3290 	 * we already hold conf_mutex. we just make sure its there now. */
3291 	spin_lock_bh(&ar->data_lock);
3292 	peer = ath10k_peer_find(ar, arvif->vdev_id, peer_addr);
3293 	spin_unlock_bh(&ar->data_lock);
3294 
3295 	if (!peer) {
3296 		if (cmd == SET_KEY) {
3297 			ath10k_warn("failed to install key for non-existent peer %pM\n",
3298 				    peer_addr);
3299 			ret = -EOPNOTSUPP;
3300 			goto exit;
3301 		} else {
3302 			/* if the peer doesn't exist there is no key to disable
3303 			 * anymore */
3304 			goto exit;
3305 		}
3306 	}
3307 
3308 	if (is_wep) {
3309 		if (cmd == SET_KEY)
3310 			arvif->wep_keys[key->keyidx] = key;
3311 		else
3312 			arvif->wep_keys[key->keyidx] = NULL;
3313 
3314 		if (cmd == DISABLE_KEY)
3315 			ath10k_clear_vdev_key(arvif, key);
3316 	}
3317 
3318 	ret = ath10k_install_key(arvif, key, cmd, peer_addr);
3319 	if (ret) {
3320 		ath10k_warn("failed to install key for vdev %i peer %pM: %d\n",
3321 			    arvif->vdev_id, peer_addr, ret);
3322 		goto exit;
3323 	}
3324 
3325 	ath10k_set_key_h_def_keyidx(ar, arvif, cmd, key);
3326 
3327 	spin_lock_bh(&ar->data_lock);
3328 	peer = ath10k_peer_find(ar, arvif->vdev_id, peer_addr);
3329 	if (peer && cmd == SET_KEY)
3330 		peer->keys[key->keyidx] = key;
3331 	else if (peer && cmd == DISABLE_KEY)
3332 		peer->keys[key->keyidx] = NULL;
3333 	else if (peer == NULL)
3334 		/* impossible unless FW goes crazy */
3335 		ath10k_warn("Peer %pM disappeared!\n", peer_addr);
3336 	spin_unlock_bh(&ar->data_lock);
3337 
3338 exit:
3339 	mutex_unlock(&ar->conf_mutex);
3340 	return ret;
3341 }
3342 
3343 static void ath10k_sta_rc_update_wk(struct work_struct *wk)
3344 {
3345 	struct ath10k *ar;
3346 	struct ath10k_vif *arvif;
3347 	struct ath10k_sta *arsta;
3348 	struct ieee80211_sta *sta;
3349 	u32 changed, bw, nss, smps;
3350 	int err;
3351 
3352 	arsta = container_of(wk, struct ath10k_sta, update_wk);
3353 	sta = container_of((void *)arsta, struct ieee80211_sta, drv_priv);
3354 	arvif = arsta->arvif;
3355 	ar = arvif->ar;
3356 
3357 	spin_lock_bh(&ar->data_lock);
3358 
3359 	changed = arsta->changed;
3360 	arsta->changed = 0;
3361 
3362 	bw = arsta->bw;
3363 	nss = arsta->nss;
3364 	smps = arsta->smps;
3365 
3366 	spin_unlock_bh(&ar->data_lock);
3367 
3368 	mutex_lock(&ar->conf_mutex);
3369 
3370 	if (changed & IEEE80211_RC_BW_CHANGED) {
3371 		ath10k_dbg(ATH10K_DBG_MAC, "mac update sta %pM peer bw %d\n",
3372 			   sta->addr, bw);
3373 
3374 		err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
3375 						WMI_PEER_CHAN_WIDTH, bw);
3376 		if (err)
3377 			ath10k_warn("failed to update STA %pM peer bw %d: %d\n",
3378 				    sta->addr, bw, err);
3379 	}
3380 
3381 	if (changed & IEEE80211_RC_NSS_CHANGED) {
3382 		ath10k_dbg(ATH10K_DBG_MAC, "mac update sta %pM nss %d\n",
3383 			   sta->addr, nss);
3384 
3385 		err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
3386 						WMI_PEER_NSS, nss);
3387 		if (err)
3388 			ath10k_warn("failed to update STA %pM nss %d: %d\n",
3389 				    sta->addr, nss, err);
3390 	}
3391 
3392 	if (changed & IEEE80211_RC_SMPS_CHANGED) {
3393 		ath10k_dbg(ATH10K_DBG_MAC, "mac update sta %pM smps %d\n",
3394 			   sta->addr, smps);
3395 
3396 		err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
3397 						WMI_PEER_SMPS_STATE, smps);
3398 		if (err)
3399 			ath10k_warn("failed to update STA %pM smps %d: %d\n",
3400 				    sta->addr, smps, err);
3401 	}
3402 
3403 	if (changed & IEEE80211_RC_SUPP_RATES_CHANGED) {
3404 		ath10k_dbg(ATH10K_DBG_MAC, "mac update sta %pM supp rates\n",
3405 			   sta->addr);
3406 
3407 		err = ath10k_station_assoc(ar, arvif, sta, true);
3408 		if (err)
3409 			ath10k_warn("failed to reassociate station: %pM\n",
3410 				    sta->addr);
3411 	}
3412 
3413 	mutex_unlock(&ar->conf_mutex);
3414 }
3415 
3416 static int ath10k_sta_state(struct ieee80211_hw *hw,
3417 			    struct ieee80211_vif *vif,
3418 			    struct ieee80211_sta *sta,
3419 			    enum ieee80211_sta_state old_state,
3420 			    enum ieee80211_sta_state new_state)
3421 {
3422 	struct ath10k *ar = hw->priv;
3423 	struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3424 	struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
3425 	int max_num_peers;
3426 	int ret = 0;
3427 
3428 	if (old_state == IEEE80211_STA_NOTEXIST &&
3429 	    new_state == IEEE80211_STA_NONE) {
3430 		memset(arsta, 0, sizeof(*arsta));
3431 		arsta->arvif = arvif;
3432 		INIT_WORK(&arsta->update_wk, ath10k_sta_rc_update_wk);
3433 	}
3434 
3435 	/* cancel must be done outside the mutex to avoid deadlock */
3436 	if ((old_state == IEEE80211_STA_NONE &&
3437 	     new_state == IEEE80211_STA_NOTEXIST))
3438 		cancel_work_sync(&arsta->update_wk);
3439 
3440 	mutex_lock(&ar->conf_mutex);
3441 
3442 	if (old_state == IEEE80211_STA_NOTEXIST &&
3443 	    new_state == IEEE80211_STA_NONE &&
3444 	    vif->type != NL80211_IFTYPE_STATION) {
3445 		/*
3446 		 * New station addition.
3447 		 */
3448 		if (test_bit(ATH10K_FW_FEATURE_WMI_10X, ar->fw_features))
3449 			max_num_peers = TARGET_10X_NUM_PEERS_MAX - 1;
3450 		else
3451 			max_num_peers = TARGET_NUM_PEERS;
3452 
3453 		if (ar->num_peers >= max_num_peers) {
3454 			ath10k_warn("number of peers exceeded: peers number %d (max peers %d)\n",
3455 				    ar->num_peers, max_num_peers);
3456 			ret = -ENOBUFS;
3457 			goto exit;
3458 		}
3459 
3460 		ath10k_dbg(ATH10K_DBG_MAC,
3461 			   "mac vdev %d peer create %pM (new sta) num_peers %d\n",
3462 			   arvif->vdev_id, sta->addr, ar->num_peers);
3463 
3464 		ret = ath10k_peer_create(ar, arvif->vdev_id, sta->addr);
3465 		if (ret)
3466 			ath10k_warn("failed to add peer %pM for vdev %d when adding a new sta: %i\n",
3467 				    sta->addr, arvif->vdev_id, ret);
3468 	} else if ((old_state == IEEE80211_STA_NONE &&
3469 		    new_state == IEEE80211_STA_NOTEXIST)) {
3470 		/*
3471 		 * Existing station deletion.
3472 		 */
3473 		ath10k_dbg(ATH10K_DBG_MAC,
3474 			   "mac vdev %d peer delete %pM (sta gone)\n",
3475 			   arvif->vdev_id, sta->addr);
3476 		ret = ath10k_peer_delete(ar, arvif->vdev_id, sta->addr);
3477 		if (ret)
3478 			ath10k_warn("failed to delete peer %pM for vdev %d: %i\n",
3479 				    sta->addr, arvif->vdev_id, ret);
3480 
3481 		if (vif->type == NL80211_IFTYPE_STATION)
3482 			ath10k_bss_disassoc(hw, vif);
3483 	} else if (old_state == IEEE80211_STA_AUTH &&
3484 		   new_state == IEEE80211_STA_ASSOC &&
3485 		   (vif->type == NL80211_IFTYPE_AP ||
3486 		    vif->type == NL80211_IFTYPE_ADHOC)) {
3487 		/*
3488 		 * New association.
3489 		 */
3490 		ath10k_dbg(ATH10K_DBG_MAC, "mac sta %pM associated\n",
3491 			   sta->addr);
3492 
3493 		ret = ath10k_station_assoc(ar, arvif, sta, false);
3494 		if (ret)
3495 			ath10k_warn("failed to associate station %pM for vdev %i: %i\n",
3496 				    sta->addr, arvif->vdev_id, ret);
3497 	} else if (old_state == IEEE80211_STA_ASSOC &&
3498 		   new_state == IEEE80211_STA_AUTH &&
3499 		   (vif->type == NL80211_IFTYPE_AP ||
3500 		    vif->type == NL80211_IFTYPE_ADHOC)) {
3501 		/*
3502 		 * Disassociation.
3503 		 */
3504 		ath10k_dbg(ATH10K_DBG_MAC, "mac sta %pM disassociated\n",
3505 			   sta->addr);
3506 
3507 		ret = ath10k_station_disassoc(ar, arvif, sta);
3508 		if (ret)
3509 			ath10k_warn("failed to disassociate station: %pM vdev %i: %i\n",
3510 				    sta->addr, arvif->vdev_id, ret);
3511 	}
3512 exit:
3513 	mutex_unlock(&ar->conf_mutex);
3514 	return ret;
3515 }
3516 
3517 static int ath10k_conf_tx_uapsd(struct ath10k *ar, struct ieee80211_vif *vif,
3518 				 u16 ac, bool enable)
3519 {
3520 	struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3521 	u32 value = 0;
3522 	int ret = 0;
3523 
3524 	lockdep_assert_held(&ar->conf_mutex);
3525 
3526 	if (arvif->vdev_type != WMI_VDEV_TYPE_STA)
3527 		return 0;
3528 
3529 	switch (ac) {
3530 	case IEEE80211_AC_VO:
3531 		value = WMI_STA_PS_UAPSD_AC3_DELIVERY_EN |
3532 			WMI_STA_PS_UAPSD_AC3_TRIGGER_EN;
3533 		break;
3534 	case IEEE80211_AC_VI:
3535 		value = WMI_STA_PS_UAPSD_AC2_DELIVERY_EN |
3536 			WMI_STA_PS_UAPSD_AC2_TRIGGER_EN;
3537 		break;
3538 	case IEEE80211_AC_BE:
3539 		value = WMI_STA_PS_UAPSD_AC1_DELIVERY_EN |
3540 			WMI_STA_PS_UAPSD_AC1_TRIGGER_EN;
3541 		break;
3542 	case IEEE80211_AC_BK:
3543 		value = WMI_STA_PS_UAPSD_AC0_DELIVERY_EN |
3544 			WMI_STA_PS_UAPSD_AC0_TRIGGER_EN;
3545 		break;
3546 	}
3547 
3548 	if (enable)
3549 		arvif->u.sta.uapsd |= value;
3550 	else
3551 		arvif->u.sta.uapsd &= ~value;
3552 
3553 	ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
3554 					  WMI_STA_PS_PARAM_UAPSD,
3555 					  arvif->u.sta.uapsd);
3556 	if (ret) {
3557 		ath10k_warn("failed to set uapsd params: %d\n", ret);
3558 		goto exit;
3559 	}
3560 
3561 	if (arvif->u.sta.uapsd)
3562 		value = WMI_STA_PS_RX_WAKE_POLICY_POLL_UAPSD;
3563 	else
3564 		value = WMI_STA_PS_RX_WAKE_POLICY_WAKE;
3565 
3566 	ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
3567 					  WMI_STA_PS_PARAM_RX_WAKE_POLICY,
3568 					  value);
3569 	if (ret)
3570 		ath10k_warn("failed to set rx wake param: %d\n", ret);
3571 
3572 exit:
3573 	return ret;
3574 }
3575 
3576 static int ath10k_conf_tx(struct ieee80211_hw *hw,
3577 			  struct ieee80211_vif *vif, u16 ac,
3578 			  const struct ieee80211_tx_queue_params *params)
3579 {
3580 	struct ath10k *ar = hw->priv;
3581 	struct wmi_wmm_params_arg *p = NULL;
3582 	int ret;
3583 
3584 	mutex_lock(&ar->conf_mutex);
3585 
3586 	switch (ac) {
3587 	case IEEE80211_AC_VO:
3588 		p = &ar->wmm_params.ac_vo;
3589 		break;
3590 	case IEEE80211_AC_VI:
3591 		p = &ar->wmm_params.ac_vi;
3592 		break;
3593 	case IEEE80211_AC_BE:
3594 		p = &ar->wmm_params.ac_be;
3595 		break;
3596 	case IEEE80211_AC_BK:
3597 		p = &ar->wmm_params.ac_bk;
3598 		break;
3599 	}
3600 
3601 	if (WARN_ON(!p)) {
3602 		ret = -EINVAL;
3603 		goto exit;
3604 	}
3605 
3606 	p->cwmin = params->cw_min;
3607 	p->cwmax = params->cw_max;
3608 	p->aifs = params->aifs;
3609 
3610 	/*
3611 	 * The channel time duration programmed in the HW is in absolute
3612 	 * microseconds, while mac80211 gives the txop in units of
3613 	 * 32 microseconds.
3614 	 */
3615 	p->txop = params->txop * 32;
3616 
3617 	/* FIXME: FW accepts wmm params per hw, not per vif */
3618 	ret = ath10k_wmi_pdev_set_wmm_params(ar, &ar->wmm_params);
3619 	if (ret) {
3620 		ath10k_warn("failed to set wmm params: %d\n", ret);
3621 		goto exit;
3622 	}
3623 
3624 	ret = ath10k_conf_tx_uapsd(ar, vif, ac, params->uapsd);
3625 	if (ret)
3626 		ath10k_warn("failed to set sta uapsd: %d\n", ret);
3627 
3628 exit:
3629 	mutex_unlock(&ar->conf_mutex);
3630 	return ret;
3631 }
3632 
3633 #define ATH10K_ROC_TIMEOUT_HZ (2*HZ)
3634 
3635 static int ath10k_remain_on_channel(struct ieee80211_hw *hw,
3636 				    struct ieee80211_vif *vif,
3637 				    struct ieee80211_channel *chan,
3638 				    int duration,
3639 				    enum ieee80211_roc_type type)
3640 {
3641 	struct ath10k *ar = hw->priv;
3642 	struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3643 	struct wmi_start_scan_arg arg;
3644 	int ret;
3645 
3646 	mutex_lock(&ar->conf_mutex);
3647 
3648 	spin_lock_bh(&ar->data_lock);
3649 	if (ar->scan.in_progress) {
3650 		spin_unlock_bh(&ar->data_lock);
3651 		ret = -EBUSY;
3652 		goto exit;
3653 	}
3654 
3655 	reinit_completion(&ar->scan.started);
3656 	reinit_completion(&ar->scan.completed);
3657 	reinit_completion(&ar->scan.on_channel);
3658 	ar->scan.in_progress = true;
3659 	ar->scan.aborting = false;
3660 	ar->scan.is_roc = true;
3661 	ar->scan.vdev_id = arvif->vdev_id;
3662 	ar->scan.roc_freq = chan->center_freq;
3663 	spin_unlock_bh(&ar->data_lock);
3664 
3665 	memset(&arg, 0, sizeof(arg));
3666 	ath10k_wmi_start_scan_init(ar, &arg);
3667 	arg.vdev_id = arvif->vdev_id;
3668 	arg.scan_id = ATH10K_SCAN_ID;
3669 	arg.n_channels = 1;
3670 	arg.channels[0] = chan->center_freq;
3671 	arg.dwell_time_active = duration;
3672 	arg.dwell_time_passive = duration;
3673 	arg.max_scan_time = 2 * duration;
3674 	arg.scan_ctrl_flags |= WMI_SCAN_FLAG_PASSIVE;
3675 	arg.scan_ctrl_flags |= WMI_SCAN_FILTER_PROBE_REQ;
3676 
3677 	ret = ath10k_start_scan(ar, &arg);
3678 	if (ret) {
3679 		ath10k_warn("failed to start roc scan: %d\n", ret);
3680 		spin_lock_bh(&ar->data_lock);
3681 		ar->scan.in_progress = false;
3682 		spin_unlock_bh(&ar->data_lock);
3683 		goto exit;
3684 	}
3685 
3686 	ret = wait_for_completion_timeout(&ar->scan.on_channel, 3*HZ);
3687 	if (ret == 0) {
3688 		ath10k_warn("failed to switch to channel for roc scan\n");
3689 		ath10k_abort_scan(ar);
3690 		ret = -ETIMEDOUT;
3691 		goto exit;
3692 	}
3693 
3694 	ret = 0;
3695 exit:
3696 	mutex_unlock(&ar->conf_mutex);
3697 	return ret;
3698 }
3699 
3700 static int ath10k_cancel_remain_on_channel(struct ieee80211_hw *hw)
3701 {
3702 	struct ath10k *ar = hw->priv;
3703 
3704 	mutex_lock(&ar->conf_mutex);
3705 	ath10k_abort_scan(ar);
3706 	mutex_unlock(&ar->conf_mutex);
3707 
3708 	return 0;
3709 }
3710 
3711 /*
3712  * Both RTS and Fragmentation threshold are interface-specific
3713  * in ath10k, but device-specific in mac80211.
3714  */
3715 
3716 static int ath10k_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
3717 {
3718 	struct ath10k *ar = hw->priv;
3719 	struct ath10k_vif *arvif;
3720 	int ret = 0;
3721 
3722 	mutex_lock(&ar->conf_mutex);
3723 	list_for_each_entry(arvif, &ar->arvifs, list) {
3724 		ath10k_dbg(ATH10K_DBG_MAC, "mac vdev %d rts threshold %d\n",
3725 			   arvif->vdev_id, value);
3726 
3727 		ret = ath10k_mac_set_rts(arvif, value);
3728 		if (ret) {
3729 			ath10k_warn("failed to set rts threshold for vdev %d: %d\n",
3730 				    arvif->vdev_id, ret);
3731 			break;
3732 		}
3733 	}
3734 	mutex_unlock(&ar->conf_mutex);
3735 
3736 	return ret;
3737 }
3738 
3739 static int ath10k_set_frag_threshold(struct ieee80211_hw *hw, u32 value)
3740 {
3741 	struct ath10k *ar = hw->priv;
3742 	struct ath10k_vif *arvif;
3743 	int ret = 0;
3744 
3745 	mutex_lock(&ar->conf_mutex);
3746 	list_for_each_entry(arvif, &ar->arvifs, list) {
3747 		ath10k_dbg(ATH10K_DBG_MAC, "mac vdev %d fragmentation threshold %d\n",
3748 			   arvif->vdev_id, value);
3749 
3750 		ret = ath10k_mac_set_rts(arvif, value);
3751 		if (ret) {
3752 			ath10k_warn("failed to set fragmentation threshold for vdev %d: %d\n",
3753 				    arvif->vdev_id, ret);
3754 			break;
3755 		}
3756 	}
3757 	mutex_unlock(&ar->conf_mutex);
3758 
3759 	return ret;
3760 }
3761 
3762 static void ath10k_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
3763 			 u32 queues, bool drop)
3764 {
3765 	struct ath10k *ar = hw->priv;
3766 	bool skip;
3767 	int ret;
3768 
3769 	/* mac80211 doesn't care if we really xmit queued frames or not
3770 	 * we'll collect those frames either way if we stop/delete vdevs */
3771 	if (drop)
3772 		return;
3773 
3774 	mutex_lock(&ar->conf_mutex);
3775 
3776 	if (ar->state == ATH10K_STATE_WEDGED)
3777 		goto skip;
3778 
3779 	ret = wait_event_timeout(ar->htt.empty_tx_wq, ({
3780 			bool empty;
3781 
3782 			spin_lock_bh(&ar->htt.tx_lock);
3783 			empty = (ar->htt.num_pending_tx == 0);
3784 			spin_unlock_bh(&ar->htt.tx_lock);
3785 
3786 			skip = (ar->state == ATH10K_STATE_WEDGED);
3787 
3788 			(empty || skip);
3789 		}), ATH10K_FLUSH_TIMEOUT_HZ);
3790 
3791 	if (ret <= 0 || skip)
3792 		ath10k_warn("failed to flush transmit queue (skip %i ar-state %i): %i\n",
3793 			    skip, ar->state, ret);
3794 
3795 skip:
3796 	mutex_unlock(&ar->conf_mutex);
3797 }
3798 
3799 /* TODO: Implement this function properly
3800  * For now it is needed to reply to Probe Requests in IBSS mode.
3801  * Propably we need this information from FW.
3802  */
3803 static int ath10k_tx_last_beacon(struct ieee80211_hw *hw)
3804 {
3805 	return 1;
3806 }
3807 
3808 #ifdef CONFIG_PM
3809 static int ath10k_suspend(struct ieee80211_hw *hw,
3810 			  struct cfg80211_wowlan *wowlan)
3811 {
3812 	struct ath10k *ar = hw->priv;
3813 	int ret;
3814 
3815 	mutex_lock(&ar->conf_mutex);
3816 
3817 	ret = ath10k_wait_for_suspend(ar, WMI_PDEV_SUSPEND);
3818 	if (ret) {
3819 		if (ret == -ETIMEDOUT)
3820 			goto resume;
3821 		ret = 1;
3822 		goto exit;
3823 	}
3824 
3825 	ret = ath10k_hif_suspend(ar);
3826 	if (ret) {
3827 		ath10k_warn("failed to suspend hif: %d\n", ret);
3828 		goto resume;
3829 	}
3830 
3831 	ret = 0;
3832 	goto exit;
3833 resume:
3834 	ret = ath10k_wmi_pdev_resume_target(ar);
3835 	if (ret)
3836 		ath10k_warn("failed to resume target: %d\n", ret);
3837 
3838 	ret = 1;
3839 exit:
3840 	mutex_unlock(&ar->conf_mutex);
3841 	return ret;
3842 }
3843 
3844 static int ath10k_resume(struct ieee80211_hw *hw)
3845 {
3846 	struct ath10k *ar = hw->priv;
3847 	int ret;
3848 
3849 	mutex_lock(&ar->conf_mutex);
3850 
3851 	ret = ath10k_hif_resume(ar);
3852 	if (ret) {
3853 		ath10k_warn("failed to resume hif: %d\n", ret);
3854 		ret = 1;
3855 		goto exit;
3856 	}
3857 
3858 	ret = ath10k_wmi_pdev_resume_target(ar);
3859 	if (ret) {
3860 		ath10k_warn("failed to resume target: %d\n", ret);
3861 		ret = 1;
3862 		goto exit;
3863 	}
3864 
3865 	ret = 0;
3866 exit:
3867 	mutex_unlock(&ar->conf_mutex);
3868 	return ret;
3869 }
3870 #endif
3871 
3872 static void ath10k_restart_complete(struct ieee80211_hw *hw)
3873 {
3874 	struct ath10k *ar = hw->priv;
3875 
3876 	mutex_lock(&ar->conf_mutex);
3877 
3878 	/* If device failed to restart it will be in a different state, e.g.
3879 	 * ATH10K_STATE_WEDGED */
3880 	if (ar->state == ATH10K_STATE_RESTARTED) {
3881 		ath10k_info("device successfully recovered\n");
3882 		ar->state = ATH10K_STATE_ON;
3883 	}
3884 
3885 	mutex_unlock(&ar->conf_mutex);
3886 }
3887 
3888 static int ath10k_get_survey(struct ieee80211_hw *hw, int idx,
3889 			     struct survey_info *survey)
3890 {
3891 	struct ath10k *ar = hw->priv;
3892 	struct ieee80211_supported_band *sband;
3893 	struct survey_info *ar_survey = &ar->survey[idx];
3894 	int ret = 0;
3895 
3896 	mutex_lock(&ar->conf_mutex);
3897 
3898 	sband = hw->wiphy->bands[IEEE80211_BAND_2GHZ];
3899 	if (sband && idx >= sband->n_channels) {
3900 		idx -= sband->n_channels;
3901 		sband = NULL;
3902 	}
3903 
3904 	if (!sband)
3905 		sband = hw->wiphy->bands[IEEE80211_BAND_5GHZ];
3906 
3907 	if (!sband || idx >= sband->n_channels) {
3908 		ret = -ENOENT;
3909 		goto exit;
3910 	}
3911 
3912 	spin_lock_bh(&ar->data_lock);
3913 	memcpy(survey, ar_survey, sizeof(*survey));
3914 	spin_unlock_bh(&ar->data_lock);
3915 
3916 	survey->channel = &sband->channels[idx];
3917 
3918 exit:
3919 	mutex_unlock(&ar->conf_mutex);
3920 	return ret;
3921 }
3922 
3923 /* Helper table for legacy fixed_rate/bitrate_mask */
3924 static const u8 cck_ofdm_rate[] = {
3925 	/* CCK */
3926 	3, /* 1Mbps */
3927 	2, /* 2Mbps */
3928 	1, /* 5.5Mbps */
3929 	0, /* 11Mbps */
3930 	/* OFDM */
3931 	3, /* 6Mbps */
3932 	7, /* 9Mbps */
3933 	2, /* 12Mbps */
3934 	6, /* 18Mbps */
3935 	1, /* 24Mbps */
3936 	5, /* 36Mbps */
3937 	0, /* 48Mbps */
3938 	4, /* 54Mbps */
3939 };
3940 
3941 /* Check if only one bit set */
3942 static int ath10k_check_single_mask(u32 mask)
3943 {
3944 	int bit;
3945 
3946 	bit = ffs(mask);
3947 	if (!bit)
3948 		return 0;
3949 
3950 	mask &= ~BIT(bit - 1);
3951 	if (mask)
3952 		return 2;
3953 
3954 	return 1;
3955 }
3956 
3957 static bool
3958 ath10k_default_bitrate_mask(struct ath10k *ar,
3959 			    enum ieee80211_band band,
3960 			    const struct cfg80211_bitrate_mask *mask)
3961 {
3962 	u32 legacy = 0x00ff;
3963 	u8 ht = 0xff, i;
3964 	u16 vht = 0x3ff;
3965 
3966 	switch (band) {
3967 	case IEEE80211_BAND_2GHZ:
3968 		legacy = 0x00fff;
3969 		vht = 0;
3970 		break;
3971 	case IEEE80211_BAND_5GHZ:
3972 		break;
3973 	default:
3974 		return false;
3975 	}
3976 
3977 	if (mask->control[band].legacy != legacy)
3978 		return false;
3979 
3980 	for (i = 0; i < ar->num_rf_chains; i++)
3981 		if (mask->control[band].ht_mcs[i] != ht)
3982 			return false;
3983 
3984 	for (i = 0; i < ar->num_rf_chains; i++)
3985 		if (mask->control[band].vht_mcs[i] != vht)
3986 			return false;
3987 
3988 	return true;
3989 }
3990 
3991 static bool
3992 ath10k_bitrate_mask_nss(const struct cfg80211_bitrate_mask *mask,
3993 			enum ieee80211_band band,
3994 			u8 *fixed_nss)
3995 {
3996 	int ht_nss = 0, vht_nss = 0, i;
3997 
3998 	/* check legacy */
3999 	if (ath10k_check_single_mask(mask->control[band].legacy))
4000 		return false;
4001 
4002 	/* check HT */
4003 	for (i = 0; i < IEEE80211_HT_MCS_MASK_LEN; i++) {
4004 		if (mask->control[band].ht_mcs[i] == 0xff)
4005 			continue;
4006 		else if (mask->control[band].ht_mcs[i] == 0x00)
4007 			break;
4008 		else
4009 			return false;
4010 	}
4011 
4012 	ht_nss = i;
4013 
4014 	/* check VHT */
4015 	for (i = 0; i < NL80211_VHT_NSS_MAX; i++) {
4016 		if (mask->control[band].vht_mcs[i] == 0x03ff)
4017 			continue;
4018 		else if (mask->control[band].vht_mcs[i] == 0x0000)
4019 			break;
4020 		else
4021 			return false;
4022 	}
4023 
4024 	vht_nss = i;
4025 
4026 	if (ht_nss > 0 && vht_nss > 0)
4027 		return false;
4028 
4029 	if (ht_nss)
4030 		*fixed_nss = ht_nss;
4031 	else if (vht_nss)
4032 		*fixed_nss = vht_nss;
4033 	else
4034 		return false;
4035 
4036 	return true;
4037 }
4038 
4039 static bool
4040 ath10k_bitrate_mask_correct(const struct cfg80211_bitrate_mask *mask,
4041 			    enum ieee80211_band band,
4042 			    enum wmi_rate_preamble *preamble)
4043 {
4044 	int legacy = 0, ht = 0, vht = 0, i;
4045 
4046 	*preamble = WMI_RATE_PREAMBLE_OFDM;
4047 
4048 	/* check legacy */
4049 	legacy = ath10k_check_single_mask(mask->control[band].legacy);
4050 	if (legacy > 1)
4051 		return false;
4052 
4053 	/* check HT */
4054 	for (i = 0; i < IEEE80211_HT_MCS_MASK_LEN; i++)
4055 		ht += ath10k_check_single_mask(mask->control[band].ht_mcs[i]);
4056 	if (ht > 1)
4057 		return false;
4058 
4059 	/* check VHT */
4060 	for (i = 0; i < NL80211_VHT_NSS_MAX; i++)
4061 		vht += ath10k_check_single_mask(mask->control[band].vht_mcs[i]);
4062 	if (vht > 1)
4063 		return false;
4064 
4065 	/* Currently we support only one fixed_rate */
4066 	if ((legacy + ht + vht) != 1)
4067 		return false;
4068 
4069 	if (ht)
4070 		*preamble = WMI_RATE_PREAMBLE_HT;
4071 	else if (vht)
4072 		*preamble = WMI_RATE_PREAMBLE_VHT;
4073 
4074 	return true;
4075 }
4076 
4077 static bool
4078 ath10k_bitrate_mask_rate(const struct cfg80211_bitrate_mask *mask,
4079 			 enum ieee80211_band band,
4080 			 u8 *fixed_rate,
4081 			 u8 *fixed_nss)
4082 {
4083 	u8 rate = 0, pream = 0, nss = 0, i;
4084 	enum wmi_rate_preamble preamble;
4085 
4086 	/* Check if single rate correct */
4087 	if (!ath10k_bitrate_mask_correct(mask, band, &preamble))
4088 		return false;
4089 
4090 	pream = preamble;
4091 
4092 	switch (preamble) {
4093 	case WMI_RATE_PREAMBLE_CCK:
4094 	case WMI_RATE_PREAMBLE_OFDM:
4095 		i = ffs(mask->control[band].legacy) - 1;
4096 
4097 		if (band == IEEE80211_BAND_2GHZ && i < 4)
4098 			pream = WMI_RATE_PREAMBLE_CCK;
4099 
4100 		if (band == IEEE80211_BAND_5GHZ)
4101 			i += 4;
4102 
4103 		if (i >= ARRAY_SIZE(cck_ofdm_rate))
4104 			return false;
4105 
4106 		rate = cck_ofdm_rate[i];
4107 		break;
4108 	case WMI_RATE_PREAMBLE_HT:
4109 		for (i = 0; i < IEEE80211_HT_MCS_MASK_LEN; i++)
4110 			if (mask->control[band].ht_mcs[i])
4111 				break;
4112 
4113 		if (i == IEEE80211_HT_MCS_MASK_LEN)
4114 			return false;
4115 
4116 		rate = ffs(mask->control[band].ht_mcs[i]) - 1;
4117 		nss = i;
4118 		break;
4119 	case WMI_RATE_PREAMBLE_VHT:
4120 		for (i = 0; i < NL80211_VHT_NSS_MAX; i++)
4121 			if (mask->control[band].vht_mcs[i])
4122 				break;
4123 
4124 		if (i == NL80211_VHT_NSS_MAX)
4125 			return false;
4126 
4127 		rate = ffs(mask->control[band].vht_mcs[i]) - 1;
4128 		nss = i;
4129 		break;
4130 	}
4131 
4132 	*fixed_nss = nss + 1;
4133 	nss <<= 4;
4134 	pream <<= 6;
4135 
4136 	ath10k_dbg(ATH10K_DBG_MAC, "mac fixed rate pream 0x%02x nss 0x%02x rate 0x%02x\n",
4137 		   pream, nss, rate);
4138 
4139 	*fixed_rate = pream | nss | rate;
4140 
4141 	return true;
4142 }
4143 
4144 static bool ath10k_get_fixed_rate_nss(const struct cfg80211_bitrate_mask *mask,
4145 				      enum ieee80211_band band,
4146 				      u8 *fixed_rate,
4147 				      u8 *fixed_nss)
4148 {
4149 	/* First check full NSS mask, if we can simply limit NSS */
4150 	if (ath10k_bitrate_mask_nss(mask, band, fixed_nss))
4151 		return true;
4152 
4153 	/* Next Check single rate is set */
4154 	return ath10k_bitrate_mask_rate(mask, band, fixed_rate, fixed_nss);
4155 }
4156 
4157 static int ath10k_set_fixed_rate_param(struct ath10k_vif *arvif,
4158 				       u8 fixed_rate,
4159 				       u8 fixed_nss,
4160 				       u8 force_sgi)
4161 {
4162 	struct ath10k *ar = arvif->ar;
4163 	u32 vdev_param;
4164 	int ret = 0;
4165 
4166 	mutex_lock(&ar->conf_mutex);
4167 
4168 	if (arvif->fixed_rate == fixed_rate &&
4169 	    arvif->fixed_nss == fixed_nss &&
4170 	    arvif->force_sgi == force_sgi)
4171 		goto exit;
4172 
4173 	if (fixed_rate == WMI_FIXED_RATE_NONE)
4174 		ath10k_dbg(ATH10K_DBG_MAC, "mac disable fixed bitrate mask\n");
4175 
4176 	if (force_sgi)
4177 		ath10k_dbg(ATH10K_DBG_MAC, "mac force sgi\n");
4178 
4179 	vdev_param = ar->wmi.vdev_param->fixed_rate;
4180 	ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id,
4181 					vdev_param, fixed_rate);
4182 	if (ret) {
4183 		ath10k_warn("failed to set fixed rate param 0x%02x: %d\n",
4184 			    fixed_rate, ret);
4185 		ret = -EINVAL;
4186 		goto exit;
4187 	}
4188 
4189 	arvif->fixed_rate = fixed_rate;
4190 
4191 	vdev_param = ar->wmi.vdev_param->nss;
4192 	ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id,
4193 					vdev_param, fixed_nss);
4194 
4195 	if (ret) {
4196 		ath10k_warn("failed to set fixed nss param %d: %d\n",
4197 			    fixed_nss, ret);
4198 		ret = -EINVAL;
4199 		goto exit;
4200 	}
4201 
4202 	arvif->fixed_nss = fixed_nss;
4203 
4204 	vdev_param = ar->wmi.vdev_param->sgi;
4205 	ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
4206 					force_sgi);
4207 
4208 	if (ret) {
4209 		ath10k_warn("failed to set sgi param %d: %d\n",
4210 			    force_sgi, ret);
4211 		ret = -EINVAL;
4212 		goto exit;
4213 	}
4214 
4215 	arvif->force_sgi = force_sgi;
4216 
4217 exit:
4218 	mutex_unlock(&ar->conf_mutex);
4219 	return ret;
4220 }
4221 
4222 static int ath10k_set_bitrate_mask(struct ieee80211_hw *hw,
4223 				   struct ieee80211_vif *vif,
4224 				   const struct cfg80211_bitrate_mask *mask)
4225 {
4226 	struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4227 	struct ath10k *ar = arvif->ar;
4228 	enum ieee80211_band band = ar->hw->conf.chandef.chan->band;
4229 	u8 fixed_rate = WMI_FIXED_RATE_NONE;
4230 	u8 fixed_nss = ar->num_rf_chains;
4231 	u8 force_sgi;
4232 
4233 	force_sgi = mask->control[band].gi;
4234 	if (force_sgi == NL80211_TXRATE_FORCE_LGI)
4235 		return -EINVAL;
4236 
4237 	if (!ath10k_default_bitrate_mask(ar, band, mask)) {
4238 		if (!ath10k_get_fixed_rate_nss(mask, band,
4239 					       &fixed_rate,
4240 					       &fixed_nss))
4241 			return -EINVAL;
4242 	}
4243 
4244 	if (fixed_rate == WMI_FIXED_RATE_NONE && force_sgi) {
4245 		ath10k_warn("failed to force SGI usage for default rate settings\n");
4246 		return -EINVAL;
4247 	}
4248 
4249 	return ath10k_set_fixed_rate_param(arvif, fixed_rate,
4250 					   fixed_nss, force_sgi);
4251 }
4252 
4253 static void ath10k_sta_rc_update(struct ieee80211_hw *hw,
4254 				 struct ieee80211_vif *vif,
4255 				 struct ieee80211_sta *sta,
4256 				 u32 changed)
4257 {
4258 	struct ath10k *ar = hw->priv;
4259 	struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
4260 	u32 bw, smps;
4261 
4262 	spin_lock_bh(&ar->data_lock);
4263 
4264 	ath10k_dbg(ATH10K_DBG_MAC,
4265 		   "mac sta rc update for %pM changed %08x bw %d nss %d smps %d\n",
4266 		   sta->addr, changed, sta->bandwidth, sta->rx_nss,
4267 		   sta->smps_mode);
4268 
4269 	if (changed & IEEE80211_RC_BW_CHANGED) {
4270 		bw = WMI_PEER_CHWIDTH_20MHZ;
4271 
4272 		switch (sta->bandwidth) {
4273 		case IEEE80211_STA_RX_BW_20:
4274 			bw = WMI_PEER_CHWIDTH_20MHZ;
4275 			break;
4276 		case IEEE80211_STA_RX_BW_40:
4277 			bw = WMI_PEER_CHWIDTH_40MHZ;
4278 			break;
4279 		case IEEE80211_STA_RX_BW_80:
4280 			bw = WMI_PEER_CHWIDTH_80MHZ;
4281 			break;
4282 		case IEEE80211_STA_RX_BW_160:
4283 			ath10k_warn("Invalid bandwith %d in rc update for %pM\n",
4284 				    sta->bandwidth, sta->addr);
4285 			bw = WMI_PEER_CHWIDTH_20MHZ;
4286 			break;
4287 		}
4288 
4289 		arsta->bw = bw;
4290 	}
4291 
4292 	if (changed & IEEE80211_RC_NSS_CHANGED)
4293 		arsta->nss = sta->rx_nss;
4294 
4295 	if (changed & IEEE80211_RC_SMPS_CHANGED) {
4296 		smps = WMI_PEER_SMPS_PS_NONE;
4297 
4298 		switch (sta->smps_mode) {
4299 		case IEEE80211_SMPS_AUTOMATIC:
4300 		case IEEE80211_SMPS_OFF:
4301 			smps = WMI_PEER_SMPS_PS_NONE;
4302 			break;
4303 		case IEEE80211_SMPS_STATIC:
4304 			smps = WMI_PEER_SMPS_STATIC;
4305 			break;
4306 		case IEEE80211_SMPS_DYNAMIC:
4307 			smps = WMI_PEER_SMPS_DYNAMIC;
4308 			break;
4309 		case IEEE80211_SMPS_NUM_MODES:
4310 			ath10k_warn("Invalid smps %d in sta rc update for %pM\n",
4311 				    sta->smps_mode, sta->addr);
4312 			smps = WMI_PEER_SMPS_PS_NONE;
4313 			break;
4314 		}
4315 
4316 		arsta->smps = smps;
4317 	}
4318 
4319 	arsta->changed |= changed;
4320 
4321 	spin_unlock_bh(&ar->data_lock);
4322 
4323 	ieee80211_queue_work(hw, &arsta->update_wk);
4324 }
4325 
4326 static u64 ath10k_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
4327 {
4328 	/*
4329 	 * FIXME: Return 0 for time being. Need to figure out whether FW
4330 	 * has the API to fetch 64-bit local TSF
4331 	 */
4332 
4333 	return 0;
4334 }
4335 
4336 static int ath10k_ampdu_action(struct ieee80211_hw *hw,
4337 			       struct ieee80211_vif *vif,
4338 			       enum ieee80211_ampdu_mlme_action action,
4339 			       struct ieee80211_sta *sta, u16 tid, u16 *ssn,
4340 			       u8 buf_size)
4341 {
4342 	struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4343 
4344 	ath10k_dbg(ATH10K_DBG_MAC, "mac ampdu vdev_id %i sta %pM tid %hu action %d\n",
4345 		   arvif->vdev_id, sta->addr, tid, action);
4346 
4347 	switch (action) {
4348 	case IEEE80211_AMPDU_RX_START:
4349 	case IEEE80211_AMPDU_RX_STOP:
4350 		/* HTT AddBa/DelBa events trigger mac80211 Rx BA session
4351 		 * creation/removal. Do we need to verify this?
4352 		 */
4353 		return 0;
4354 	case IEEE80211_AMPDU_TX_START:
4355 	case IEEE80211_AMPDU_TX_STOP_CONT:
4356 	case IEEE80211_AMPDU_TX_STOP_FLUSH:
4357 	case IEEE80211_AMPDU_TX_STOP_FLUSH_CONT:
4358 	case IEEE80211_AMPDU_TX_OPERATIONAL:
4359 		/* Firmware offloads Tx aggregation entirely so deny mac80211
4360 		 * Tx aggregation requests.
4361 		 */
4362 		return -EOPNOTSUPP;
4363 	}
4364 
4365 	return -EINVAL;
4366 }
4367 
4368 static const struct ieee80211_ops ath10k_ops = {
4369 	.tx				= ath10k_tx,
4370 	.start				= ath10k_start,
4371 	.stop				= ath10k_stop,
4372 	.config				= ath10k_config,
4373 	.add_interface			= ath10k_add_interface,
4374 	.remove_interface		= ath10k_remove_interface,
4375 	.configure_filter		= ath10k_configure_filter,
4376 	.bss_info_changed		= ath10k_bss_info_changed,
4377 	.hw_scan			= ath10k_hw_scan,
4378 	.cancel_hw_scan			= ath10k_cancel_hw_scan,
4379 	.set_key			= ath10k_set_key,
4380 	.sta_state			= ath10k_sta_state,
4381 	.conf_tx			= ath10k_conf_tx,
4382 	.remain_on_channel		= ath10k_remain_on_channel,
4383 	.cancel_remain_on_channel	= ath10k_cancel_remain_on_channel,
4384 	.set_rts_threshold		= ath10k_set_rts_threshold,
4385 	.set_frag_threshold		= ath10k_set_frag_threshold,
4386 	.flush				= ath10k_flush,
4387 	.tx_last_beacon			= ath10k_tx_last_beacon,
4388 	.set_antenna			= ath10k_set_antenna,
4389 	.get_antenna			= ath10k_get_antenna,
4390 	.restart_complete		= ath10k_restart_complete,
4391 	.get_survey			= ath10k_get_survey,
4392 	.set_bitrate_mask		= ath10k_set_bitrate_mask,
4393 	.sta_rc_update			= ath10k_sta_rc_update,
4394 	.get_tsf			= ath10k_get_tsf,
4395 	.ampdu_action			= ath10k_ampdu_action,
4396 #ifdef CONFIG_PM
4397 	.suspend			= ath10k_suspend,
4398 	.resume				= ath10k_resume,
4399 #endif
4400 };
4401 
4402 #define RATETAB_ENT(_rate, _rateid, _flags) { \
4403 	.bitrate		= (_rate), \
4404 	.flags			= (_flags), \
4405 	.hw_value		= (_rateid), \
4406 }
4407 
4408 #define CHAN2G(_channel, _freq, _flags) { \
4409 	.band			= IEEE80211_BAND_2GHZ, \
4410 	.hw_value		= (_channel), \
4411 	.center_freq		= (_freq), \
4412 	.flags			= (_flags), \
4413 	.max_antenna_gain	= 0, \
4414 	.max_power		= 30, \
4415 }
4416 
4417 #define CHAN5G(_channel, _freq, _flags) { \
4418 	.band			= IEEE80211_BAND_5GHZ, \
4419 	.hw_value		= (_channel), \
4420 	.center_freq		= (_freq), \
4421 	.flags			= (_flags), \
4422 	.max_antenna_gain	= 0, \
4423 	.max_power		= 30, \
4424 }
4425 
4426 static const struct ieee80211_channel ath10k_2ghz_channels[] = {
4427 	CHAN2G(1, 2412, 0),
4428 	CHAN2G(2, 2417, 0),
4429 	CHAN2G(3, 2422, 0),
4430 	CHAN2G(4, 2427, 0),
4431 	CHAN2G(5, 2432, 0),
4432 	CHAN2G(6, 2437, 0),
4433 	CHAN2G(7, 2442, 0),
4434 	CHAN2G(8, 2447, 0),
4435 	CHAN2G(9, 2452, 0),
4436 	CHAN2G(10, 2457, 0),
4437 	CHAN2G(11, 2462, 0),
4438 	CHAN2G(12, 2467, 0),
4439 	CHAN2G(13, 2472, 0),
4440 	CHAN2G(14, 2484, 0),
4441 };
4442 
4443 static const struct ieee80211_channel ath10k_5ghz_channels[] = {
4444 	CHAN5G(36, 5180, 0),
4445 	CHAN5G(40, 5200, 0),
4446 	CHAN5G(44, 5220, 0),
4447 	CHAN5G(48, 5240, 0),
4448 	CHAN5G(52, 5260, 0),
4449 	CHAN5G(56, 5280, 0),
4450 	CHAN5G(60, 5300, 0),
4451 	CHAN5G(64, 5320, 0),
4452 	CHAN5G(100, 5500, 0),
4453 	CHAN5G(104, 5520, 0),
4454 	CHAN5G(108, 5540, 0),
4455 	CHAN5G(112, 5560, 0),
4456 	CHAN5G(116, 5580, 0),
4457 	CHAN5G(120, 5600, 0),
4458 	CHAN5G(124, 5620, 0),
4459 	CHAN5G(128, 5640, 0),
4460 	CHAN5G(132, 5660, 0),
4461 	CHAN5G(136, 5680, 0),
4462 	CHAN5G(140, 5700, 0),
4463 	CHAN5G(149, 5745, 0),
4464 	CHAN5G(153, 5765, 0),
4465 	CHAN5G(157, 5785, 0),
4466 	CHAN5G(161, 5805, 0),
4467 	CHAN5G(165, 5825, 0),
4468 };
4469 
4470 static struct ieee80211_rate ath10k_rates[] = {
4471 	/* CCK */
4472 	RATETAB_ENT(10,  0x82, 0),
4473 	RATETAB_ENT(20,  0x84, 0),
4474 	RATETAB_ENT(55,  0x8b, 0),
4475 	RATETAB_ENT(110, 0x96, 0),
4476 	/* OFDM */
4477 	RATETAB_ENT(60,  0x0c, 0),
4478 	RATETAB_ENT(90,  0x12, 0),
4479 	RATETAB_ENT(120, 0x18, 0),
4480 	RATETAB_ENT(180, 0x24, 0),
4481 	RATETAB_ENT(240, 0x30, 0),
4482 	RATETAB_ENT(360, 0x48, 0),
4483 	RATETAB_ENT(480, 0x60, 0),
4484 	RATETAB_ENT(540, 0x6c, 0),
4485 };
4486 
4487 #define ath10k_a_rates (ath10k_rates + 4)
4488 #define ath10k_a_rates_size (ARRAY_SIZE(ath10k_rates) - 4)
4489 #define ath10k_g_rates (ath10k_rates + 0)
4490 #define ath10k_g_rates_size (ARRAY_SIZE(ath10k_rates))
4491 
4492 struct ath10k *ath10k_mac_create(void)
4493 {
4494 	struct ieee80211_hw *hw;
4495 	struct ath10k *ar;
4496 
4497 	hw = ieee80211_alloc_hw(sizeof(struct ath10k), &ath10k_ops);
4498 	if (!hw)
4499 		return NULL;
4500 
4501 	ar = hw->priv;
4502 	ar->hw = hw;
4503 
4504 	return ar;
4505 }
4506 
4507 void ath10k_mac_destroy(struct ath10k *ar)
4508 {
4509 	ieee80211_free_hw(ar->hw);
4510 }
4511 
4512 static const struct ieee80211_iface_limit ath10k_if_limits[] = {
4513 	{
4514 	.max	= 8,
4515 	.types	= BIT(NL80211_IFTYPE_STATION)
4516 		| BIT(NL80211_IFTYPE_P2P_CLIENT)
4517 	},
4518 	{
4519 	.max	= 3,
4520 	.types	= BIT(NL80211_IFTYPE_P2P_GO)
4521 	},
4522 	{
4523 	.max	= 7,
4524 	.types	= BIT(NL80211_IFTYPE_AP)
4525 	},
4526 };
4527 
4528 static const struct ieee80211_iface_limit ath10k_10x_if_limits[] = {
4529 	{
4530 	.max	= 8,
4531 	.types	= BIT(NL80211_IFTYPE_AP)
4532 	},
4533 };
4534 
4535 static const struct ieee80211_iface_combination ath10k_if_comb[] = {
4536 	{
4537 		.limits = ath10k_if_limits,
4538 		.n_limits = ARRAY_SIZE(ath10k_if_limits),
4539 		.max_interfaces = 8,
4540 		.num_different_channels = 1,
4541 		.beacon_int_infra_match = true,
4542 	},
4543 };
4544 
4545 static const struct ieee80211_iface_combination ath10k_10x_if_comb[] = {
4546 	{
4547 		.limits = ath10k_10x_if_limits,
4548 		.n_limits = ARRAY_SIZE(ath10k_10x_if_limits),
4549 		.max_interfaces = 8,
4550 		.num_different_channels = 1,
4551 		.beacon_int_infra_match = true,
4552 #ifdef CONFIG_ATH10K_DFS_CERTIFIED
4553 		.radar_detect_widths =	BIT(NL80211_CHAN_WIDTH_20_NOHT) |
4554 					BIT(NL80211_CHAN_WIDTH_20) |
4555 					BIT(NL80211_CHAN_WIDTH_40) |
4556 					BIT(NL80211_CHAN_WIDTH_80),
4557 #endif
4558 	},
4559 };
4560 
4561 static struct ieee80211_sta_vht_cap ath10k_create_vht_cap(struct ath10k *ar)
4562 {
4563 	struct ieee80211_sta_vht_cap vht_cap = {0};
4564 	u16 mcs_map;
4565 	int i;
4566 
4567 	vht_cap.vht_supported = 1;
4568 	vht_cap.cap = ar->vht_cap_info;
4569 
4570 	mcs_map = 0;
4571 	for (i = 0; i < 8; i++) {
4572 		if (i < ar->num_rf_chains)
4573 			mcs_map |= IEEE80211_VHT_MCS_SUPPORT_0_9 << (i*2);
4574 		else
4575 			mcs_map |= IEEE80211_VHT_MCS_NOT_SUPPORTED << (i*2);
4576 	}
4577 
4578 	vht_cap.vht_mcs.rx_mcs_map = cpu_to_le16(mcs_map);
4579 	vht_cap.vht_mcs.tx_mcs_map = cpu_to_le16(mcs_map);
4580 
4581 	return vht_cap;
4582 }
4583 
4584 static struct ieee80211_sta_ht_cap ath10k_get_ht_cap(struct ath10k *ar)
4585 {
4586 	int i;
4587 	struct ieee80211_sta_ht_cap ht_cap = {0};
4588 
4589 	if (!(ar->ht_cap_info & WMI_HT_CAP_ENABLED))
4590 		return ht_cap;
4591 
4592 	ht_cap.ht_supported = 1;
4593 	ht_cap.ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
4594 	ht_cap.ampdu_density = IEEE80211_HT_MPDU_DENSITY_8;
4595 	ht_cap.cap |= IEEE80211_HT_CAP_SUP_WIDTH_20_40;
4596 	ht_cap.cap |= IEEE80211_HT_CAP_DSSSCCK40;
4597 	ht_cap.cap |= WLAN_HT_CAP_SM_PS_STATIC << IEEE80211_HT_CAP_SM_PS_SHIFT;
4598 
4599 	if (ar->ht_cap_info & WMI_HT_CAP_HT20_SGI)
4600 		ht_cap.cap |= IEEE80211_HT_CAP_SGI_20;
4601 
4602 	if (ar->ht_cap_info & WMI_HT_CAP_HT40_SGI)
4603 		ht_cap.cap |= IEEE80211_HT_CAP_SGI_40;
4604 
4605 	if (ar->ht_cap_info & WMI_HT_CAP_DYNAMIC_SMPS) {
4606 		u32 smps;
4607 
4608 		smps   = WLAN_HT_CAP_SM_PS_DYNAMIC;
4609 		smps <<= IEEE80211_HT_CAP_SM_PS_SHIFT;
4610 
4611 		ht_cap.cap |= smps;
4612 	}
4613 
4614 	if (ar->ht_cap_info & WMI_HT_CAP_TX_STBC)
4615 		ht_cap.cap |= IEEE80211_HT_CAP_TX_STBC;
4616 
4617 	if (ar->ht_cap_info & WMI_HT_CAP_RX_STBC) {
4618 		u32 stbc;
4619 
4620 		stbc   = ar->ht_cap_info;
4621 		stbc  &= WMI_HT_CAP_RX_STBC;
4622 		stbc >>= WMI_HT_CAP_RX_STBC_MASK_SHIFT;
4623 		stbc <<= IEEE80211_HT_CAP_RX_STBC_SHIFT;
4624 		stbc  &= IEEE80211_HT_CAP_RX_STBC;
4625 
4626 		ht_cap.cap |= stbc;
4627 	}
4628 
4629 	if (ar->ht_cap_info & WMI_HT_CAP_LDPC)
4630 		ht_cap.cap |= IEEE80211_HT_CAP_LDPC_CODING;
4631 
4632 	if (ar->ht_cap_info & WMI_HT_CAP_L_SIG_TXOP_PROT)
4633 		ht_cap.cap |= IEEE80211_HT_CAP_LSIG_TXOP_PROT;
4634 
4635 	/* max AMSDU is implicitly taken from vht_cap_info */
4636 	if (ar->vht_cap_info & WMI_VHT_CAP_MAX_MPDU_LEN_MASK)
4637 		ht_cap.cap |= IEEE80211_HT_CAP_MAX_AMSDU;
4638 
4639 	for (i = 0; i < ar->num_rf_chains; i++)
4640 		ht_cap.mcs.rx_mask[i] = 0xFF;
4641 
4642 	ht_cap.mcs.tx_params |= IEEE80211_HT_MCS_TX_DEFINED;
4643 
4644 	return ht_cap;
4645 }
4646 
4647 
4648 static void ath10k_get_arvif_iter(void *data, u8 *mac,
4649 				  struct ieee80211_vif *vif)
4650 {
4651 	struct ath10k_vif_iter *arvif_iter = data;
4652 	struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4653 
4654 	if (arvif->vdev_id == arvif_iter->vdev_id)
4655 		arvif_iter->arvif = arvif;
4656 }
4657 
4658 struct ath10k_vif *ath10k_get_arvif(struct ath10k *ar, u32 vdev_id)
4659 {
4660 	struct ath10k_vif_iter arvif_iter;
4661 	u32 flags;
4662 
4663 	memset(&arvif_iter, 0, sizeof(struct ath10k_vif_iter));
4664 	arvif_iter.vdev_id = vdev_id;
4665 
4666 	flags = IEEE80211_IFACE_ITER_RESUME_ALL;
4667 	ieee80211_iterate_active_interfaces_atomic(ar->hw,
4668 						   flags,
4669 						   ath10k_get_arvif_iter,
4670 						   &arvif_iter);
4671 	if (!arvif_iter.arvif) {
4672 		ath10k_warn("No VIF found for vdev %d\n", vdev_id);
4673 		return NULL;
4674 	}
4675 
4676 	return arvif_iter.arvif;
4677 }
4678 
4679 int ath10k_mac_register(struct ath10k *ar)
4680 {
4681 	struct ieee80211_supported_band *band;
4682 	struct ieee80211_sta_vht_cap vht_cap;
4683 	struct ieee80211_sta_ht_cap ht_cap;
4684 	void *channels;
4685 	int ret;
4686 
4687 	SET_IEEE80211_PERM_ADDR(ar->hw, ar->mac_addr);
4688 
4689 	SET_IEEE80211_DEV(ar->hw, ar->dev);
4690 
4691 	ht_cap = ath10k_get_ht_cap(ar);
4692 	vht_cap = ath10k_create_vht_cap(ar);
4693 
4694 	if (ar->phy_capability & WHAL_WLAN_11G_CAPABILITY) {
4695 		channels = kmemdup(ath10k_2ghz_channels,
4696 				   sizeof(ath10k_2ghz_channels),
4697 				   GFP_KERNEL);
4698 		if (!channels) {
4699 			ret = -ENOMEM;
4700 			goto err_free;
4701 		}
4702 
4703 		band = &ar->mac.sbands[IEEE80211_BAND_2GHZ];
4704 		band->n_channels = ARRAY_SIZE(ath10k_2ghz_channels);
4705 		band->channels = channels;
4706 		band->n_bitrates = ath10k_g_rates_size;
4707 		band->bitrates = ath10k_g_rates;
4708 		band->ht_cap = ht_cap;
4709 
4710 		/* vht is not supported in 2.4 GHz */
4711 
4712 		ar->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = band;
4713 	}
4714 
4715 	if (ar->phy_capability & WHAL_WLAN_11A_CAPABILITY) {
4716 		channels = kmemdup(ath10k_5ghz_channels,
4717 				   sizeof(ath10k_5ghz_channels),
4718 				   GFP_KERNEL);
4719 		if (!channels) {
4720 			ret = -ENOMEM;
4721 			goto err_free;
4722 		}
4723 
4724 		band = &ar->mac.sbands[IEEE80211_BAND_5GHZ];
4725 		band->n_channels = ARRAY_SIZE(ath10k_5ghz_channels);
4726 		band->channels = channels;
4727 		band->n_bitrates = ath10k_a_rates_size;
4728 		band->bitrates = ath10k_a_rates;
4729 		band->ht_cap = ht_cap;
4730 		band->vht_cap = vht_cap;
4731 		ar->hw->wiphy->bands[IEEE80211_BAND_5GHZ] = band;
4732 	}
4733 
4734 	ar->hw->wiphy->interface_modes =
4735 		BIT(NL80211_IFTYPE_STATION) |
4736 		BIT(NL80211_IFTYPE_AP);
4737 
4738 	if (test_bit(ATH10K_FW_FEATURE_WMI_10X, ar->fw_features)) {
4739 		/* TODO:  Have to deal with 2x2 chips if/when the come out. */
4740 		ar->supp_tx_chainmask = TARGET_10X_TX_CHAIN_MASK;
4741 		ar->supp_rx_chainmask = TARGET_10X_RX_CHAIN_MASK;
4742 	} else {
4743 		ar->supp_tx_chainmask = TARGET_TX_CHAIN_MASK;
4744 		ar->supp_rx_chainmask = TARGET_RX_CHAIN_MASK;
4745 	}
4746 
4747 	ar->hw->wiphy->available_antennas_rx = ar->supp_rx_chainmask;
4748 	ar->hw->wiphy->available_antennas_tx = ar->supp_tx_chainmask;
4749 
4750 	if (!test_bit(ATH10K_FW_FEATURE_NO_P2P, ar->fw_features))
4751 		ar->hw->wiphy->interface_modes |=
4752 			BIT(NL80211_IFTYPE_P2P_CLIENT) |
4753 			BIT(NL80211_IFTYPE_P2P_GO);
4754 
4755 	ar->hw->flags = IEEE80211_HW_SIGNAL_DBM |
4756 			IEEE80211_HW_SUPPORTS_PS |
4757 			IEEE80211_HW_SUPPORTS_DYNAMIC_PS |
4758 			IEEE80211_HW_SUPPORTS_UAPSD |
4759 			IEEE80211_HW_MFP_CAPABLE |
4760 			IEEE80211_HW_REPORTS_TX_ACK_STATUS |
4761 			IEEE80211_HW_HAS_RATE_CONTROL |
4762 			IEEE80211_HW_SUPPORTS_STATIC_SMPS |
4763 			IEEE80211_HW_AP_LINK_PS |
4764 			IEEE80211_HW_SPECTRUM_MGMT;
4765 
4766 	/* MSDU can have HTT TX fragment pushed in front. The additional 4
4767 	 * bytes is used for padding/alignment if necessary. */
4768 	ar->hw->extra_tx_headroom += sizeof(struct htt_data_tx_desc_frag)*2 + 4;
4769 
4770 	if (ar->ht_cap_info & WMI_HT_CAP_DYNAMIC_SMPS)
4771 		ar->hw->flags |= IEEE80211_HW_SUPPORTS_DYNAMIC_SMPS;
4772 
4773 	if (ar->ht_cap_info & WMI_HT_CAP_ENABLED) {
4774 		ar->hw->flags |= IEEE80211_HW_AMPDU_AGGREGATION;
4775 		ar->hw->flags |= IEEE80211_HW_TX_AMPDU_SETUP_IN_HW;
4776 	}
4777 
4778 	ar->hw->wiphy->max_scan_ssids = WLAN_SCAN_PARAMS_MAX_SSID;
4779 	ar->hw->wiphy->max_scan_ie_len = WLAN_SCAN_PARAMS_MAX_IE_LEN;
4780 
4781 	ar->hw->vif_data_size = sizeof(struct ath10k_vif);
4782 	ar->hw->sta_data_size = sizeof(struct ath10k_sta);
4783 
4784 	ar->hw->max_listen_interval = ATH10K_MAX_HW_LISTEN_INTERVAL;
4785 
4786 	ar->hw->wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
4787 	ar->hw->wiphy->flags |= WIPHY_FLAG_HAS_CHANNEL_SWITCH;
4788 	ar->hw->wiphy->max_remain_on_channel_duration = 5000;
4789 
4790 	ar->hw->wiphy->flags |= WIPHY_FLAG_AP_UAPSD;
4791 	/*
4792 	 * on LL hardware queues are managed entirely by the FW
4793 	 * so we only advertise to mac we can do the queues thing
4794 	 */
4795 	ar->hw->queues = 4;
4796 
4797 	if (test_bit(ATH10K_FW_FEATURE_WMI_10X, ar->fw_features)) {
4798 		ar->hw->wiphy->iface_combinations = ath10k_10x_if_comb;
4799 		ar->hw->wiphy->n_iface_combinations =
4800 			ARRAY_SIZE(ath10k_10x_if_comb);
4801 	} else {
4802 		ar->hw->wiphy->iface_combinations = ath10k_if_comb;
4803 		ar->hw->wiphy->n_iface_combinations =
4804 			ARRAY_SIZE(ath10k_if_comb);
4805 
4806 		ar->hw->wiphy->interface_modes |= BIT(NL80211_IFTYPE_ADHOC);
4807 	}
4808 
4809 	ar->hw->netdev_features = NETIF_F_HW_CSUM;
4810 
4811 	if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED)) {
4812 		/* Init ath dfs pattern detector */
4813 		ar->ath_common.debug_mask = ATH_DBG_DFS;
4814 		ar->dfs_detector = dfs_pattern_detector_init(&ar->ath_common,
4815 							     NL80211_DFS_UNSET);
4816 
4817 		if (!ar->dfs_detector)
4818 			ath10k_warn("failed to initialise DFS pattern detector\n");
4819 	}
4820 
4821 	ret = ath_regd_init(&ar->ath_common.regulatory, ar->hw->wiphy,
4822 			    ath10k_reg_notifier);
4823 	if (ret) {
4824 		ath10k_err("failed to initialise regulatory: %i\n", ret);
4825 		goto err_free;
4826 	}
4827 
4828 	ret = ieee80211_register_hw(ar->hw);
4829 	if (ret) {
4830 		ath10k_err("failed to register ieee80211: %d\n", ret);
4831 		goto err_free;
4832 	}
4833 
4834 	if (!ath_is_world_regd(&ar->ath_common.regulatory)) {
4835 		ret = regulatory_hint(ar->hw->wiphy,
4836 				      ar->ath_common.regulatory.alpha2);
4837 		if (ret)
4838 			goto err_unregister;
4839 	}
4840 
4841 	return 0;
4842 
4843 err_unregister:
4844 	ieee80211_unregister_hw(ar->hw);
4845 err_free:
4846 	kfree(ar->mac.sbands[IEEE80211_BAND_2GHZ].channels);
4847 	kfree(ar->mac.sbands[IEEE80211_BAND_5GHZ].channels);
4848 
4849 	return ret;
4850 }
4851 
4852 void ath10k_mac_unregister(struct ath10k *ar)
4853 {
4854 	ieee80211_unregister_hw(ar->hw);
4855 
4856 	if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector)
4857 		ar->dfs_detector->exit(ar->dfs_detector);
4858 
4859 	kfree(ar->mac.sbands[IEEE80211_BAND_2GHZ].channels);
4860 	kfree(ar->mac.sbands[IEEE80211_BAND_5GHZ].channels);
4861 
4862 	SET_IEEE80211_DEV(ar->hw, NULL);
4863 }
4864