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