xref: /openbmc/linux/drivers/net/wireless/ath/carl9170/main.c (revision 840ef8b7cc584a23c4f9d05352f4dbaf8e56e5ab)
1 /*
2  * Atheros CARL9170 driver
3  *
4  * mac80211 interaction code
5  *
6  * Copyright 2008, Johannes Berg <johannes@sipsolutions.net>
7  * Copyright 2009, 2010, Christian Lamparter <chunkeey@googlemail.com>
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; see the file COPYING.  If not, see
21  * http://www.gnu.org/licenses/.
22  *
23  * This file incorporates work covered by the following copyright and
24  * permission notice:
25  *    Copyright (c) 2007-2008 Atheros Communications, Inc.
26  *
27  *    Permission to use, copy, modify, and/or distribute this software for any
28  *    purpose with or without fee is hereby granted, provided that the above
29  *    copyright notice and this permission notice appear in all copies.
30  *
31  *    THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
32  *    WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
33  *    MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
34  *    ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
35  *    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
36  *    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
37  *    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
38  */
39 
40 #include <linux/init.h>
41 #include <linux/slab.h>
42 #include <linux/module.h>
43 #include <linux/etherdevice.h>
44 #include <linux/random.h>
45 #include <net/mac80211.h>
46 #include <net/cfg80211.h>
47 #include "hw.h"
48 #include "carl9170.h"
49 #include "cmd.h"
50 
51 static bool modparam_nohwcrypt;
52 module_param_named(nohwcrypt, modparam_nohwcrypt, bool, S_IRUGO);
53 MODULE_PARM_DESC(nohwcrypt, "Disable hardware crypto offload.");
54 
55 int modparam_noht;
56 module_param_named(noht, modparam_noht, int, S_IRUGO);
57 MODULE_PARM_DESC(noht, "Disable MPDU aggregation.");
58 
59 #define RATE(_bitrate, _hw_rate, _txpidx, _flags) {	\
60 	.bitrate	= (_bitrate),			\
61 	.flags		= (_flags),			\
62 	.hw_value	= (_hw_rate) | (_txpidx) << 4,	\
63 }
64 
65 struct ieee80211_rate __carl9170_ratetable[] = {
66 	RATE(10, 0, 0, 0),
67 	RATE(20, 1, 1, IEEE80211_RATE_SHORT_PREAMBLE),
68 	RATE(55, 2, 2, IEEE80211_RATE_SHORT_PREAMBLE),
69 	RATE(110, 3, 3, IEEE80211_RATE_SHORT_PREAMBLE),
70 	RATE(60, 0xb, 0, 0),
71 	RATE(90, 0xf, 0, 0),
72 	RATE(120, 0xa, 0, 0),
73 	RATE(180, 0xe, 0, 0),
74 	RATE(240, 0x9, 0, 0),
75 	RATE(360, 0xd, 1, 0),
76 	RATE(480, 0x8, 2, 0),
77 	RATE(540, 0xc, 3, 0),
78 };
79 #undef RATE
80 
81 #define carl9170_g_ratetable	(__carl9170_ratetable + 0)
82 #define carl9170_g_ratetable_size	12
83 #define carl9170_a_ratetable	(__carl9170_ratetable + 4)
84 #define carl9170_a_ratetable_size	8
85 
86 /*
87  * NB: The hw_value is used as an index into the carl9170_phy_freq_params
88  *     array in phy.c so that we don't have to do frequency lookups!
89  */
90 #define CHAN(_freq, _idx) {		\
91 	.center_freq	= (_freq),	\
92 	.hw_value	= (_idx),	\
93 	.max_power	= 18, /* XXX */	\
94 }
95 
96 static struct ieee80211_channel carl9170_2ghz_chantable[] = {
97 	CHAN(2412,  0),
98 	CHAN(2417,  1),
99 	CHAN(2422,  2),
100 	CHAN(2427,  3),
101 	CHAN(2432,  4),
102 	CHAN(2437,  5),
103 	CHAN(2442,  6),
104 	CHAN(2447,  7),
105 	CHAN(2452,  8),
106 	CHAN(2457,  9),
107 	CHAN(2462, 10),
108 	CHAN(2467, 11),
109 	CHAN(2472, 12),
110 	CHAN(2484, 13),
111 };
112 
113 static struct ieee80211_channel carl9170_5ghz_chantable[] = {
114 	CHAN(4920, 14),
115 	CHAN(4940, 15),
116 	CHAN(4960, 16),
117 	CHAN(4980, 17),
118 	CHAN(5040, 18),
119 	CHAN(5060, 19),
120 	CHAN(5080, 20),
121 	CHAN(5180, 21),
122 	CHAN(5200, 22),
123 	CHAN(5220, 23),
124 	CHAN(5240, 24),
125 	CHAN(5260, 25),
126 	CHAN(5280, 26),
127 	CHAN(5300, 27),
128 	CHAN(5320, 28),
129 	CHAN(5500, 29),
130 	CHAN(5520, 30),
131 	CHAN(5540, 31),
132 	CHAN(5560, 32),
133 	CHAN(5580, 33),
134 	CHAN(5600, 34),
135 	CHAN(5620, 35),
136 	CHAN(5640, 36),
137 	CHAN(5660, 37),
138 	CHAN(5680, 38),
139 	CHAN(5700, 39),
140 	CHAN(5745, 40),
141 	CHAN(5765, 41),
142 	CHAN(5785, 42),
143 	CHAN(5805, 43),
144 	CHAN(5825, 44),
145 	CHAN(5170, 45),
146 	CHAN(5190, 46),
147 	CHAN(5210, 47),
148 	CHAN(5230, 48),
149 };
150 #undef CHAN
151 
152 #define CARL9170_HT_CAP							\
153 {									\
154 	.ht_supported	= true,						\
155 	.cap		= IEEE80211_HT_CAP_MAX_AMSDU |			\
156 			  IEEE80211_HT_CAP_SUP_WIDTH_20_40 |		\
157 			  IEEE80211_HT_CAP_SGI_40 |			\
158 			  IEEE80211_HT_CAP_DSSSCCK40 |			\
159 			  IEEE80211_HT_CAP_SM_PS,			\
160 	.ampdu_factor	= IEEE80211_HT_MAX_AMPDU_64K,			\
161 	.ampdu_density	= IEEE80211_HT_MPDU_DENSITY_8,			\
162 	.mcs		= {						\
163 		.rx_mask = { 0xff, 0xff, 0, 0, 0x1, 0, 0, 0, 0, 0, },	\
164 		.rx_highest = cpu_to_le16(300),				\
165 		.tx_params = IEEE80211_HT_MCS_TX_DEFINED,		\
166 	},								\
167 }
168 
169 static struct ieee80211_supported_band carl9170_band_2GHz = {
170 	.channels	= carl9170_2ghz_chantable,
171 	.n_channels	= ARRAY_SIZE(carl9170_2ghz_chantable),
172 	.bitrates	= carl9170_g_ratetable,
173 	.n_bitrates	= carl9170_g_ratetable_size,
174 	.ht_cap		= CARL9170_HT_CAP,
175 };
176 
177 static struct ieee80211_supported_band carl9170_band_5GHz = {
178 	.channels	= carl9170_5ghz_chantable,
179 	.n_channels	= ARRAY_SIZE(carl9170_5ghz_chantable),
180 	.bitrates	= carl9170_a_ratetable,
181 	.n_bitrates	= carl9170_a_ratetable_size,
182 	.ht_cap		= CARL9170_HT_CAP,
183 };
184 
185 static void carl9170_ampdu_gc(struct ar9170 *ar)
186 {
187 	struct carl9170_sta_tid *tid_info;
188 	LIST_HEAD(tid_gc);
189 
190 	rcu_read_lock();
191 	list_for_each_entry_rcu(tid_info, &ar->tx_ampdu_list, list) {
192 		spin_lock_bh(&ar->tx_ampdu_list_lock);
193 		if (tid_info->state == CARL9170_TID_STATE_SHUTDOWN) {
194 			tid_info->state = CARL9170_TID_STATE_KILLED;
195 			list_del_rcu(&tid_info->list);
196 			ar->tx_ampdu_list_len--;
197 			list_add_tail(&tid_info->tmp_list, &tid_gc);
198 		}
199 		spin_unlock_bh(&ar->tx_ampdu_list_lock);
200 
201 	}
202 	rcu_assign_pointer(ar->tx_ampdu_iter, tid_info);
203 	rcu_read_unlock();
204 
205 	synchronize_rcu();
206 
207 	while (!list_empty(&tid_gc)) {
208 		struct sk_buff *skb;
209 		tid_info = list_first_entry(&tid_gc, struct carl9170_sta_tid,
210 					    tmp_list);
211 
212 		while ((skb = __skb_dequeue(&tid_info->queue)))
213 			carl9170_tx_status(ar, skb, false);
214 
215 		list_del_init(&tid_info->tmp_list);
216 		kfree(tid_info);
217 	}
218 }
219 
220 static void carl9170_flush(struct ar9170 *ar, bool drop_queued)
221 {
222 	if (drop_queued) {
223 		int i;
224 
225 		/*
226 		 * We can only drop frames which have not been uploaded
227 		 * to the device yet.
228 		 */
229 
230 		for (i = 0; i < ar->hw->queues; i++) {
231 			struct sk_buff *skb;
232 
233 			while ((skb = skb_dequeue(&ar->tx_pending[i]))) {
234 				struct ieee80211_tx_info *info;
235 
236 				info = IEEE80211_SKB_CB(skb);
237 				if (info->flags & IEEE80211_TX_CTL_AMPDU)
238 					atomic_dec(&ar->tx_ampdu_upload);
239 
240 				carl9170_tx_status(ar, skb, false);
241 			}
242 		}
243 	}
244 
245 	/* Wait for all other outstanding frames to timeout. */
246 	if (atomic_read(&ar->tx_total_queued))
247 		WARN_ON(wait_for_completion_timeout(&ar->tx_flush, HZ) == 0);
248 }
249 
250 static void carl9170_flush_ba(struct ar9170 *ar)
251 {
252 	struct sk_buff_head free;
253 	struct carl9170_sta_tid *tid_info;
254 	struct sk_buff *skb;
255 
256 	__skb_queue_head_init(&free);
257 
258 	rcu_read_lock();
259 	spin_lock_bh(&ar->tx_ampdu_list_lock);
260 	list_for_each_entry_rcu(tid_info, &ar->tx_ampdu_list, list) {
261 		if (tid_info->state > CARL9170_TID_STATE_SUSPEND) {
262 			tid_info->state = CARL9170_TID_STATE_SUSPEND;
263 
264 			spin_lock(&tid_info->lock);
265 			while ((skb = __skb_dequeue(&tid_info->queue)))
266 				__skb_queue_tail(&free, skb);
267 			spin_unlock(&tid_info->lock);
268 		}
269 	}
270 	spin_unlock_bh(&ar->tx_ampdu_list_lock);
271 	rcu_read_unlock();
272 
273 	while ((skb = __skb_dequeue(&free)))
274 		carl9170_tx_status(ar, skb, false);
275 }
276 
277 static void carl9170_zap_queues(struct ar9170 *ar)
278 {
279 	struct carl9170_vif_info *cvif;
280 	unsigned int i;
281 
282 	carl9170_ampdu_gc(ar);
283 
284 	carl9170_flush_ba(ar);
285 	carl9170_flush(ar, true);
286 
287 	for (i = 0; i < ar->hw->queues; i++) {
288 		spin_lock_bh(&ar->tx_status[i].lock);
289 		while (!skb_queue_empty(&ar->tx_status[i])) {
290 			struct sk_buff *skb;
291 
292 			skb = skb_peek(&ar->tx_status[i]);
293 			carl9170_tx_get_skb(skb);
294 			spin_unlock_bh(&ar->tx_status[i].lock);
295 			carl9170_tx_drop(ar, skb);
296 			spin_lock_bh(&ar->tx_status[i].lock);
297 			carl9170_tx_put_skb(skb);
298 		}
299 		spin_unlock_bh(&ar->tx_status[i].lock);
300 	}
301 
302 	BUILD_BUG_ON(CARL9170_NUM_TX_LIMIT_SOFT < 1);
303 	BUILD_BUG_ON(CARL9170_NUM_TX_LIMIT_HARD < CARL9170_NUM_TX_LIMIT_SOFT);
304 	BUILD_BUG_ON(CARL9170_NUM_TX_LIMIT_HARD >= CARL9170_BAW_BITS);
305 
306 	/* reinitialize queues statistics */
307 	memset(&ar->tx_stats, 0, sizeof(ar->tx_stats));
308 	for (i = 0; i < ar->hw->queues; i++)
309 		ar->tx_stats[i].limit = CARL9170_NUM_TX_LIMIT_HARD;
310 
311 	for (i = 0; i < DIV_ROUND_UP(ar->fw.mem_blocks, BITS_PER_LONG); i++)
312 		ar->mem_bitmap[i] = 0;
313 
314 	rcu_read_lock();
315 	list_for_each_entry_rcu(cvif, &ar->vif_list, list) {
316 		spin_lock_bh(&ar->beacon_lock);
317 		dev_kfree_skb_any(cvif->beacon);
318 		cvif->beacon = NULL;
319 		spin_unlock_bh(&ar->beacon_lock);
320 	}
321 	rcu_read_unlock();
322 
323 	atomic_set(&ar->tx_ampdu_upload, 0);
324 	atomic_set(&ar->tx_ampdu_scheduler, 0);
325 	atomic_set(&ar->tx_total_pending, 0);
326 	atomic_set(&ar->tx_total_queued, 0);
327 	atomic_set(&ar->mem_free_blocks, ar->fw.mem_blocks);
328 }
329 
330 #define CARL9170_FILL_QUEUE(queue, ai_fs, cwmin, cwmax, _txop)		\
331 do {									\
332 	queue.aifs = ai_fs;						\
333 	queue.cw_min = cwmin;						\
334 	queue.cw_max = cwmax;						\
335 	queue.txop = _txop;						\
336 } while (0)
337 
338 static int carl9170_op_start(struct ieee80211_hw *hw)
339 {
340 	struct ar9170 *ar = hw->priv;
341 	int err, i;
342 
343 	mutex_lock(&ar->mutex);
344 
345 	carl9170_zap_queues(ar);
346 
347 	/* reset QoS defaults */
348 	CARL9170_FILL_QUEUE(ar->edcf[AR9170_TXQ_VO], 2, 3,     7, 47);
349 	CARL9170_FILL_QUEUE(ar->edcf[AR9170_TXQ_VI], 2, 7,    15, 94);
350 	CARL9170_FILL_QUEUE(ar->edcf[AR9170_TXQ_BE], 3, 15, 1023,  0);
351 	CARL9170_FILL_QUEUE(ar->edcf[AR9170_TXQ_BK], 7, 15, 1023,  0);
352 	CARL9170_FILL_QUEUE(ar->edcf[AR9170_TXQ_SPECIAL], 2, 3, 7, 0);
353 
354 	ar->current_factor = ar->current_density = -1;
355 	/* "The first key is unique." */
356 	ar->usedkeys = 1;
357 	ar->filter_state = 0;
358 	ar->ps.last_action = jiffies;
359 	ar->ps.last_slept = jiffies;
360 	ar->erp_mode = CARL9170_ERP_AUTO;
361 
362 	/* Set "disable hw crypto offload" whenever the module parameter
363 	 * nohwcrypt is true or if the firmware does not support it.
364 	 */
365 	ar->disable_offload = modparam_nohwcrypt |
366 		ar->fw.disable_offload_fw;
367 	ar->rx_software_decryption = ar->disable_offload;
368 
369 	for (i = 0; i < ar->hw->queues; i++) {
370 		ar->queue_stop_timeout[i] = jiffies;
371 		ar->max_queue_stop_timeout[i] = 0;
372 	}
373 
374 	atomic_set(&ar->mem_allocs, 0);
375 
376 	err = carl9170_usb_open(ar);
377 	if (err)
378 		goto out;
379 
380 	err = carl9170_init_mac(ar);
381 	if (err)
382 		goto out;
383 
384 	err = carl9170_set_qos(ar);
385 	if (err)
386 		goto out;
387 
388 	if (ar->fw.rx_filter) {
389 		err = carl9170_rx_filter(ar, CARL9170_RX_FILTER_OTHER_RA |
390 			CARL9170_RX_FILTER_CTL_OTHER | CARL9170_RX_FILTER_BAD);
391 		if (err)
392 			goto out;
393 	}
394 
395 	err = carl9170_write_reg(ar, AR9170_MAC_REG_DMA_TRIGGER,
396 				 AR9170_DMA_TRIGGER_RXQ);
397 	if (err)
398 		goto out;
399 
400 	/* Clear key-cache */
401 	for (i = 0; i < AR9170_CAM_MAX_USER + 4; i++) {
402 		err = carl9170_upload_key(ar, i, NULL, AR9170_ENC_ALG_NONE,
403 					  0, NULL, 0);
404 		if (err)
405 			goto out;
406 
407 		err = carl9170_upload_key(ar, i, NULL, AR9170_ENC_ALG_NONE,
408 					  1, NULL, 0);
409 		if (err)
410 			goto out;
411 
412 		if (i < AR9170_CAM_MAX_USER) {
413 			err = carl9170_disable_key(ar, i);
414 			if (err)
415 				goto out;
416 		}
417 	}
418 
419 	carl9170_set_state_when(ar, CARL9170_IDLE, CARL9170_STARTED);
420 
421 	ieee80211_queue_delayed_work(ar->hw, &ar->stat_work,
422 		round_jiffies(msecs_to_jiffies(CARL9170_STAT_WORK)));
423 
424 	ieee80211_wake_queues(ar->hw);
425 	err = 0;
426 
427 out:
428 	mutex_unlock(&ar->mutex);
429 	return err;
430 }
431 
432 static void carl9170_cancel_worker(struct ar9170 *ar)
433 {
434 	cancel_delayed_work_sync(&ar->stat_work);
435 	cancel_delayed_work_sync(&ar->tx_janitor);
436 #ifdef CONFIG_CARL9170_LEDS
437 	cancel_delayed_work_sync(&ar->led_work);
438 #endif /* CONFIG_CARL9170_LEDS */
439 	cancel_work_sync(&ar->ps_work);
440 	cancel_work_sync(&ar->ping_work);
441 	cancel_work_sync(&ar->ampdu_work);
442 }
443 
444 static void carl9170_op_stop(struct ieee80211_hw *hw)
445 {
446 	struct ar9170 *ar = hw->priv;
447 
448 	carl9170_set_state_when(ar, CARL9170_STARTED, CARL9170_IDLE);
449 
450 	ieee80211_stop_queues(ar->hw);
451 
452 	mutex_lock(&ar->mutex);
453 	if (IS_ACCEPTING_CMD(ar)) {
454 		RCU_INIT_POINTER(ar->beacon_iter, NULL);
455 
456 		carl9170_led_set_state(ar, 0);
457 
458 		/* stop DMA */
459 		carl9170_write_reg(ar, AR9170_MAC_REG_DMA_TRIGGER, 0);
460 		carl9170_usb_stop(ar);
461 	}
462 
463 	carl9170_zap_queues(ar);
464 	mutex_unlock(&ar->mutex);
465 
466 	carl9170_cancel_worker(ar);
467 }
468 
469 static void carl9170_restart_work(struct work_struct *work)
470 {
471 	struct ar9170 *ar = container_of(work, struct ar9170,
472 					 restart_work);
473 	int err = -EIO;
474 
475 	ar->usedkeys = 0;
476 	ar->filter_state = 0;
477 	carl9170_cancel_worker(ar);
478 
479 	mutex_lock(&ar->mutex);
480 	if (!ar->force_usb_reset) {
481 		err = carl9170_usb_restart(ar);
482 		if (net_ratelimit()) {
483 			if (err)
484 				dev_err(&ar->udev->dev, "Failed to restart device (%d).\n", err);
485 			else
486 				dev_info(&ar->udev->dev, "device restarted successfully.\n");
487 		}
488 	}
489 	carl9170_zap_queues(ar);
490 	mutex_unlock(&ar->mutex);
491 
492 	if (!err && !ar->force_usb_reset) {
493 		ar->restart_counter++;
494 		atomic_set(&ar->pending_restarts, 0);
495 
496 		ieee80211_restart_hw(ar->hw);
497 	} else {
498 		/*
499 		 * The reset was unsuccessful and the device seems to
500 		 * be dead. But there's still one option: a low-level
501 		 * usb subsystem reset...
502 		 */
503 
504 		carl9170_usb_reset(ar);
505 	}
506 }
507 
508 void carl9170_restart(struct ar9170 *ar, const enum carl9170_restart_reasons r)
509 {
510 	carl9170_set_state_when(ar, CARL9170_STARTED, CARL9170_IDLE);
511 
512 	/*
513 	 * Sometimes, an error can trigger several different reset events.
514 	 * By ignoring these *surplus* reset events, the device won't be
515 	 * killed again, right after it has recovered.
516 	 */
517 	if (atomic_inc_return(&ar->pending_restarts) > 1) {
518 		dev_dbg(&ar->udev->dev, "ignoring restart (%d)\n", r);
519 		return;
520 	}
521 
522 	ieee80211_stop_queues(ar->hw);
523 
524 	dev_err(&ar->udev->dev, "restart device (%d)\n", r);
525 
526 	if (!WARN_ON(r == CARL9170_RR_NO_REASON) ||
527 	    !WARN_ON(r >= __CARL9170_RR_LAST))
528 		ar->last_reason = r;
529 
530 	if (!ar->registered)
531 		return;
532 
533 	if (!IS_ACCEPTING_CMD(ar) || ar->needs_full_reset)
534 		ar->force_usb_reset = true;
535 
536 	ieee80211_queue_work(ar->hw, &ar->restart_work);
537 
538 	/*
539 	 * At this point, the device instance might have vanished/disabled.
540 	 * So, don't put any code which access the ar9170 struct
541 	 * without proper protection.
542 	 */
543 }
544 
545 static void carl9170_ping_work(struct work_struct *work)
546 {
547 	struct ar9170 *ar = container_of(work, struct ar9170, ping_work);
548 	int err;
549 
550 	if (!IS_STARTED(ar))
551 		return;
552 
553 	mutex_lock(&ar->mutex);
554 	err = carl9170_echo_test(ar, 0xdeadbeef);
555 	if (err)
556 		carl9170_restart(ar, CARL9170_RR_UNRESPONSIVE_DEVICE);
557 	mutex_unlock(&ar->mutex);
558 }
559 
560 static int carl9170_init_interface(struct ar9170 *ar,
561 				   struct ieee80211_vif *vif)
562 {
563 	struct ath_common *common = &ar->common;
564 	int err;
565 
566 	if (!vif) {
567 		WARN_ON_ONCE(IS_STARTED(ar));
568 		return 0;
569 	}
570 
571 	memcpy(common->macaddr, vif->addr, ETH_ALEN);
572 
573 	/* We have to fall back to software crypto, whenever
574 	 * the user choose to participates in an IBSS. HW
575 	 * offload for IBSS RSN is not supported by this driver.
576 	 *
577 	 * NOTE: If the previous main interface has already
578 	 * disabled hw crypto offload, we have to keep this
579 	 * previous disable_offload setting as it was.
580 	 * Altough ideally, we should notify mac80211 and tell
581 	 * it to forget about any HW crypto offload for now.
582 	 */
583 	ar->disable_offload |= ((vif->type != NL80211_IFTYPE_STATION) &&
584 	    (vif->type != NL80211_IFTYPE_AP));
585 
586 	/* While the driver supports HW offload in a single
587 	 * P2P client configuration, it doesn't support HW
588 	 * offload in the favourit, concurrent P2P GO+CLIENT
589 	 * configuration. Hence, HW offload will always be
590 	 * disabled for P2P.
591 	 */
592 	ar->disable_offload |= vif->p2p;
593 
594 	ar->rx_software_decryption = ar->disable_offload;
595 
596 	err = carl9170_set_operating_mode(ar);
597 	return err;
598 }
599 
600 static int carl9170_op_add_interface(struct ieee80211_hw *hw,
601 				     struct ieee80211_vif *vif)
602 {
603 	struct carl9170_vif_info *vif_priv = (void *) vif->drv_priv;
604 	struct ieee80211_vif *main_vif, *old_main = NULL;
605 	struct ar9170 *ar = hw->priv;
606 	int vif_id = -1, err = 0;
607 
608 	mutex_lock(&ar->mutex);
609 	rcu_read_lock();
610 	if (vif_priv->active) {
611 		/*
612 		 * Skip the interface structure initialization,
613 		 * if the vif survived the _restart call.
614 		 */
615 		vif_id = vif_priv->id;
616 		vif_priv->enable_beacon = false;
617 
618 		spin_lock_bh(&ar->beacon_lock);
619 		dev_kfree_skb_any(vif_priv->beacon);
620 		vif_priv->beacon = NULL;
621 		spin_unlock_bh(&ar->beacon_lock);
622 
623 		goto init;
624 	}
625 
626 	/* Because the AR9170 HW's MAC doesn't provide full support for
627 	 * multiple, independent interfaces [of different operation modes].
628 	 * We have to select ONE main interface [main mode of HW], but we
629 	 * can have multiple slaves [AKA: entry in the ACK-table].
630 	 *
631 	 * The first (from HEAD/TOP) interface in the ar->vif_list is
632 	 * always the main intf. All following intfs in this list
633 	 * are considered to be slave intfs.
634 	 */
635 	main_vif = carl9170_get_main_vif(ar);
636 
637 	if (main_vif) {
638 		switch (main_vif->type) {
639 		case NL80211_IFTYPE_STATION:
640 			if (vif->type == NL80211_IFTYPE_STATION)
641 				break;
642 
643 			/* P2P GO [master] use-case
644 			 * Because the P2P GO station is selected dynamically
645 			 * by all participating peers of a WIFI Direct network,
646 			 * the driver has be able to change the main interface
647 			 * operating mode on the fly.
648 			 */
649 			if (main_vif->p2p && vif->p2p &&
650 			    vif->type == NL80211_IFTYPE_AP) {
651 				old_main = main_vif;
652 				break;
653 			}
654 
655 			err = -EBUSY;
656 			rcu_read_unlock();
657 
658 			goto unlock;
659 
660 		case NL80211_IFTYPE_MESH_POINT:
661 		case NL80211_IFTYPE_AP:
662 			if ((vif->type == NL80211_IFTYPE_STATION) ||
663 			    (vif->type == NL80211_IFTYPE_WDS) ||
664 			    (vif->type == NL80211_IFTYPE_AP) ||
665 			    (vif->type == NL80211_IFTYPE_MESH_POINT))
666 				break;
667 
668 			err = -EBUSY;
669 			rcu_read_unlock();
670 			goto unlock;
671 
672 		default:
673 			rcu_read_unlock();
674 			goto unlock;
675 		}
676 	}
677 
678 	vif_id = bitmap_find_free_region(&ar->vif_bitmap, ar->fw.vif_num, 0);
679 
680 	if (vif_id < 0) {
681 		rcu_read_unlock();
682 
683 		err = -ENOSPC;
684 		goto unlock;
685 	}
686 
687 	BUG_ON(ar->vif_priv[vif_id].id != vif_id);
688 
689 	vif_priv->active = true;
690 	vif_priv->id = vif_id;
691 	vif_priv->enable_beacon = false;
692 	ar->vifs++;
693 	if (old_main) {
694 		/* We end up in here, if the main interface is being replaced.
695 		 * Put the new main interface at the HEAD of the list and the
696 		 * previous inteface will automatically become second in line.
697 		 */
698 		list_add_rcu(&vif_priv->list, &ar->vif_list);
699 	} else {
700 		/* Add new inteface. If the list is empty, it will become the
701 		 * main inteface, otherwise it will be slave.
702 		 */
703 		list_add_tail_rcu(&vif_priv->list, &ar->vif_list);
704 	}
705 	rcu_assign_pointer(ar->vif_priv[vif_id].vif, vif);
706 
707 init:
708 	main_vif = carl9170_get_main_vif(ar);
709 
710 	if (main_vif == vif) {
711 		rcu_assign_pointer(ar->beacon_iter, vif_priv);
712 		rcu_read_unlock();
713 
714 		if (old_main) {
715 			struct carl9170_vif_info *old_main_priv =
716 				(void *) old_main->drv_priv;
717 			/* downgrade old main intf to slave intf.
718 			 * NOTE: We are no longer under rcu_read_lock.
719 			 * But we are still holding ar->mutex, so the
720 			 * vif data [id, addr] is safe.
721 			 */
722 			err = carl9170_mod_virtual_mac(ar, old_main_priv->id,
723 						       old_main->addr);
724 			if (err)
725 				goto unlock;
726 		}
727 
728 		err = carl9170_init_interface(ar, vif);
729 		if (err)
730 			goto unlock;
731 	} else {
732 		rcu_read_unlock();
733 		err = carl9170_mod_virtual_mac(ar, vif_id, vif->addr);
734 
735 		if (err)
736 			goto unlock;
737 	}
738 
739 	if (ar->fw.tx_seq_table) {
740 		err = carl9170_write_reg(ar, ar->fw.tx_seq_table + vif_id * 4,
741 					 0);
742 		if (err)
743 			goto unlock;
744 	}
745 
746 unlock:
747 	if (err && (vif_id >= 0)) {
748 		vif_priv->active = false;
749 		bitmap_release_region(&ar->vif_bitmap, vif_id, 0);
750 		ar->vifs--;
751 		RCU_INIT_POINTER(ar->vif_priv[vif_id].vif, NULL);
752 		list_del_rcu(&vif_priv->list);
753 		mutex_unlock(&ar->mutex);
754 		synchronize_rcu();
755 	} else {
756 		if (ar->vifs > 1)
757 			ar->ps.off_override |= PS_OFF_VIF;
758 
759 		mutex_unlock(&ar->mutex);
760 	}
761 
762 	return err;
763 }
764 
765 static void carl9170_op_remove_interface(struct ieee80211_hw *hw,
766 					 struct ieee80211_vif *vif)
767 {
768 	struct carl9170_vif_info *vif_priv = (void *) vif->drv_priv;
769 	struct ieee80211_vif *main_vif;
770 	struct ar9170 *ar = hw->priv;
771 	unsigned int id;
772 
773 	mutex_lock(&ar->mutex);
774 
775 	if (WARN_ON_ONCE(!vif_priv->active))
776 		goto unlock;
777 
778 	ar->vifs--;
779 
780 	rcu_read_lock();
781 	main_vif = carl9170_get_main_vif(ar);
782 
783 	id = vif_priv->id;
784 
785 	vif_priv->active = false;
786 	WARN_ON(vif_priv->enable_beacon);
787 	vif_priv->enable_beacon = false;
788 	list_del_rcu(&vif_priv->list);
789 	RCU_INIT_POINTER(ar->vif_priv[id].vif, NULL);
790 
791 	if (vif == main_vif) {
792 		rcu_read_unlock();
793 
794 		if (ar->vifs) {
795 			WARN_ON(carl9170_init_interface(ar,
796 					carl9170_get_main_vif(ar)));
797 		} else {
798 			carl9170_set_operating_mode(ar);
799 		}
800 	} else {
801 		rcu_read_unlock();
802 
803 		WARN_ON(carl9170_mod_virtual_mac(ar, id, NULL));
804 	}
805 
806 	carl9170_update_beacon(ar, false);
807 	carl9170_flush_cab(ar, id);
808 
809 	spin_lock_bh(&ar->beacon_lock);
810 	dev_kfree_skb_any(vif_priv->beacon);
811 	vif_priv->beacon = NULL;
812 	spin_unlock_bh(&ar->beacon_lock);
813 
814 	bitmap_release_region(&ar->vif_bitmap, id, 0);
815 
816 	carl9170_set_beacon_timers(ar);
817 
818 	if (ar->vifs == 1)
819 		ar->ps.off_override &= ~PS_OFF_VIF;
820 
821 unlock:
822 	mutex_unlock(&ar->mutex);
823 
824 	synchronize_rcu();
825 }
826 
827 void carl9170_ps_check(struct ar9170 *ar)
828 {
829 	ieee80211_queue_work(ar->hw, &ar->ps_work);
830 }
831 
832 /* caller must hold ar->mutex */
833 static int carl9170_ps_update(struct ar9170 *ar)
834 {
835 	bool ps = false;
836 	int err = 0;
837 
838 	if (!ar->ps.off_override)
839 		ps = (ar->hw->conf.flags & IEEE80211_CONF_PS);
840 
841 	if (ps != ar->ps.state) {
842 		err = carl9170_powersave(ar, ps);
843 		if (err)
844 			return err;
845 
846 		if (ar->ps.state && !ps) {
847 			ar->ps.sleep_ms = jiffies_to_msecs(jiffies -
848 				ar->ps.last_action);
849 		}
850 
851 		if (ps)
852 			ar->ps.last_slept = jiffies;
853 
854 		ar->ps.last_action = jiffies;
855 		ar->ps.state = ps;
856 	}
857 
858 	return 0;
859 }
860 
861 static void carl9170_ps_work(struct work_struct *work)
862 {
863 	struct ar9170 *ar = container_of(work, struct ar9170,
864 					 ps_work);
865 	mutex_lock(&ar->mutex);
866 	if (IS_STARTED(ar))
867 		WARN_ON_ONCE(carl9170_ps_update(ar) != 0);
868 	mutex_unlock(&ar->mutex);
869 }
870 
871 static int carl9170_update_survey(struct ar9170 *ar, bool flush, bool noise)
872 {
873 	int err;
874 
875 	if (noise) {
876 		err = carl9170_get_noisefloor(ar);
877 		if (err)
878 			return err;
879 	}
880 
881 	if (ar->fw.hw_counters) {
882 		err = carl9170_collect_tally(ar);
883 		if (err)
884 			return err;
885 	}
886 
887 	if (flush)
888 		memset(&ar->tally, 0, sizeof(ar->tally));
889 
890 	return 0;
891 }
892 
893 static void carl9170_stat_work(struct work_struct *work)
894 {
895 	struct ar9170 *ar = container_of(work, struct ar9170, stat_work.work);
896 	int err;
897 
898 	mutex_lock(&ar->mutex);
899 	err = carl9170_update_survey(ar, false, true);
900 	mutex_unlock(&ar->mutex);
901 
902 	if (err)
903 		return;
904 
905 	ieee80211_queue_delayed_work(ar->hw, &ar->stat_work,
906 		round_jiffies(msecs_to_jiffies(CARL9170_STAT_WORK)));
907 }
908 
909 static int carl9170_op_config(struct ieee80211_hw *hw, u32 changed)
910 {
911 	struct ar9170 *ar = hw->priv;
912 	int err = 0;
913 
914 	mutex_lock(&ar->mutex);
915 	if (changed & IEEE80211_CONF_CHANGE_LISTEN_INTERVAL) {
916 		/* TODO */
917 		err = 0;
918 	}
919 
920 	if (changed & IEEE80211_CONF_CHANGE_PS) {
921 		err = carl9170_ps_update(ar);
922 		if (err)
923 			goto out;
924 	}
925 
926 	if (changed & IEEE80211_CONF_CHANGE_SMPS) {
927 		/* TODO */
928 		err = 0;
929 	}
930 
931 	if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
932 		/* adjust slot time for 5 GHz */
933 		err = carl9170_set_slot_time(ar);
934 		if (err)
935 			goto out;
936 
937 		err = carl9170_update_survey(ar, true, false);
938 		if (err)
939 			goto out;
940 
941 		err = carl9170_set_channel(ar, hw->conf.channel,
942 			hw->conf.channel_type, CARL9170_RFI_NONE);
943 		if (err)
944 			goto out;
945 
946 		err = carl9170_update_survey(ar, false, true);
947 		if (err)
948 			goto out;
949 
950 		err = carl9170_set_dyn_sifs_ack(ar);
951 		if (err)
952 			goto out;
953 
954 		err = carl9170_set_rts_cts_rate(ar);
955 		if (err)
956 			goto out;
957 	}
958 
959 	if (changed & IEEE80211_CONF_CHANGE_POWER) {
960 		err = carl9170_set_mac_tpc(ar, ar->hw->conf.channel);
961 		if (err)
962 			goto out;
963 	}
964 
965 out:
966 	mutex_unlock(&ar->mutex);
967 	return err;
968 }
969 
970 static u64 carl9170_op_prepare_multicast(struct ieee80211_hw *hw,
971 					 struct netdev_hw_addr_list *mc_list)
972 {
973 	struct netdev_hw_addr *ha;
974 	u64 mchash;
975 
976 	/* always get broadcast frames */
977 	mchash = 1ULL << (0xff >> 2);
978 
979 	netdev_hw_addr_list_for_each(ha, mc_list)
980 		mchash |= 1ULL << (ha->addr[5] >> 2);
981 
982 	return mchash;
983 }
984 
985 static void carl9170_op_configure_filter(struct ieee80211_hw *hw,
986 					 unsigned int changed_flags,
987 					 unsigned int *new_flags,
988 					 u64 multicast)
989 {
990 	struct ar9170 *ar = hw->priv;
991 
992 	/* mask supported flags */
993 	*new_flags &= FIF_ALLMULTI | ar->rx_filter_caps;
994 
995 	if (!IS_ACCEPTING_CMD(ar))
996 		return;
997 
998 	mutex_lock(&ar->mutex);
999 
1000 	ar->filter_state = *new_flags;
1001 	/*
1002 	 * We can support more by setting the sniffer bit and
1003 	 * then checking the error flags, later.
1004 	 */
1005 
1006 	if (*new_flags & FIF_ALLMULTI)
1007 		multicast = ~0ULL;
1008 
1009 	if (multicast != ar->cur_mc_hash)
1010 		WARN_ON(carl9170_update_multicast(ar, multicast));
1011 
1012 	if (changed_flags & (FIF_OTHER_BSS | FIF_PROMISC_IN_BSS)) {
1013 		ar->sniffer_enabled = !!(*new_flags &
1014 			(FIF_OTHER_BSS | FIF_PROMISC_IN_BSS));
1015 
1016 		WARN_ON(carl9170_set_operating_mode(ar));
1017 	}
1018 
1019 	if (ar->fw.rx_filter && changed_flags & ar->rx_filter_caps) {
1020 		u32 rx_filter = 0;
1021 
1022 		if (!ar->fw.ba_filter)
1023 			rx_filter |= CARL9170_RX_FILTER_CTL_OTHER;
1024 
1025 		if (!(*new_flags & (FIF_FCSFAIL | FIF_PLCPFAIL)))
1026 			rx_filter |= CARL9170_RX_FILTER_BAD;
1027 
1028 		if (!(*new_flags & FIF_CONTROL))
1029 			rx_filter |= CARL9170_RX_FILTER_CTL_OTHER;
1030 
1031 		if (!(*new_flags & FIF_PSPOLL))
1032 			rx_filter |= CARL9170_RX_FILTER_CTL_PSPOLL;
1033 
1034 		if (!(*new_flags & (FIF_OTHER_BSS | FIF_PROMISC_IN_BSS))) {
1035 			rx_filter |= CARL9170_RX_FILTER_OTHER_RA;
1036 			rx_filter |= CARL9170_RX_FILTER_DECRY_FAIL;
1037 		}
1038 
1039 		WARN_ON(carl9170_rx_filter(ar, rx_filter));
1040 	}
1041 
1042 	mutex_unlock(&ar->mutex);
1043 }
1044 
1045 
1046 static void carl9170_op_bss_info_changed(struct ieee80211_hw *hw,
1047 					 struct ieee80211_vif *vif,
1048 					 struct ieee80211_bss_conf *bss_conf,
1049 					 u32 changed)
1050 {
1051 	struct ar9170 *ar = hw->priv;
1052 	struct ath_common *common = &ar->common;
1053 	int err = 0;
1054 	struct carl9170_vif_info *vif_priv;
1055 	struct ieee80211_vif *main_vif;
1056 
1057 	mutex_lock(&ar->mutex);
1058 	vif_priv = (void *) vif->drv_priv;
1059 	main_vif = carl9170_get_main_vif(ar);
1060 	if (WARN_ON(!main_vif))
1061 		goto out;
1062 
1063 	if (changed & BSS_CHANGED_BEACON_ENABLED) {
1064 		struct carl9170_vif_info *iter;
1065 		int i = 0;
1066 
1067 		vif_priv->enable_beacon = bss_conf->enable_beacon;
1068 		rcu_read_lock();
1069 		list_for_each_entry_rcu(iter, &ar->vif_list, list) {
1070 			if (iter->active && iter->enable_beacon)
1071 				i++;
1072 
1073 		}
1074 		rcu_read_unlock();
1075 
1076 		ar->beacon_enabled = i;
1077 	}
1078 
1079 	if (changed & BSS_CHANGED_BEACON) {
1080 		err = carl9170_update_beacon(ar, false);
1081 		if (err)
1082 			goto out;
1083 	}
1084 
1085 	if (changed & (BSS_CHANGED_BEACON_ENABLED | BSS_CHANGED_BEACON |
1086 		       BSS_CHANGED_BEACON_INT)) {
1087 
1088 		if (main_vif != vif) {
1089 			bss_conf->beacon_int = main_vif->bss_conf.beacon_int;
1090 			bss_conf->dtim_period = main_vif->bss_conf.dtim_period;
1091 		}
1092 
1093 		/*
1094 		 * Therefore a hard limit for the broadcast traffic should
1095 		 * prevent false alarms.
1096 		 */
1097 		if (vif->type != NL80211_IFTYPE_STATION &&
1098 		    (bss_conf->beacon_int * bss_conf->dtim_period >=
1099 		     (CARL9170_QUEUE_STUCK_TIMEOUT / 2))) {
1100 			err = -EINVAL;
1101 			goto out;
1102 		}
1103 
1104 		err = carl9170_set_beacon_timers(ar);
1105 		if (err)
1106 			goto out;
1107 	}
1108 
1109 	if (changed & BSS_CHANGED_HT) {
1110 		/* TODO */
1111 		err = 0;
1112 		if (err)
1113 			goto out;
1114 	}
1115 
1116 	if (main_vif != vif)
1117 		goto out;
1118 
1119 	/*
1120 	 * The following settings can only be changed by the
1121 	 * master interface.
1122 	 */
1123 
1124 	if (changed & BSS_CHANGED_BSSID) {
1125 		memcpy(common->curbssid, bss_conf->bssid, ETH_ALEN);
1126 		err = carl9170_set_operating_mode(ar);
1127 		if (err)
1128 			goto out;
1129 	}
1130 
1131 	if (changed & BSS_CHANGED_ASSOC) {
1132 		ar->common.curaid = bss_conf->aid;
1133 		err = carl9170_set_beacon_timers(ar);
1134 		if (err)
1135 			goto out;
1136 	}
1137 
1138 	if (changed & BSS_CHANGED_ERP_SLOT) {
1139 		err = carl9170_set_slot_time(ar);
1140 		if (err)
1141 			goto out;
1142 	}
1143 
1144 	if (changed & BSS_CHANGED_BASIC_RATES) {
1145 		err = carl9170_set_mac_rates(ar);
1146 		if (err)
1147 			goto out;
1148 	}
1149 
1150 out:
1151 	WARN_ON_ONCE(err && IS_STARTED(ar));
1152 	mutex_unlock(&ar->mutex);
1153 }
1154 
1155 static u64 carl9170_op_get_tsf(struct ieee80211_hw *hw,
1156 			       struct ieee80211_vif *vif)
1157 {
1158 	struct ar9170 *ar = hw->priv;
1159 	struct carl9170_tsf_rsp tsf;
1160 	int err;
1161 
1162 	mutex_lock(&ar->mutex);
1163 	err = carl9170_exec_cmd(ar, CARL9170_CMD_READ_TSF,
1164 				0, NULL, sizeof(tsf), &tsf);
1165 	mutex_unlock(&ar->mutex);
1166 	if (WARN_ON(err))
1167 		return 0;
1168 
1169 	return le64_to_cpu(tsf.tsf_64);
1170 }
1171 
1172 static int carl9170_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
1173 			       struct ieee80211_vif *vif,
1174 			       struct ieee80211_sta *sta,
1175 			       struct ieee80211_key_conf *key)
1176 {
1177 	struct ar9170 *ar = hw->priv;
1178 	int err = 0, i;
1179 	u8 ktype;
1180 
1181 	if (ar->disable_offload || !vif)
1182 		return -EOPNOTSUPP;
1183 
1184 	/* Fall back to software encryption whenever the driver is connected
1185 	 * to more than one network.
1186 	 *
1187 	 * This is very unfortunate, because some machines cannot handle
1188 	 * the high througput speed in 802.11n networks.
1189 	 */
1190 
1191 	if (!is_main_vif(ar, vif)) {
1192 		mutex_lock(&ar->mutex);
1193 		goto err_softw;
1194 	}
1195 
1196 	/*
1197 	 * While the hardware supports *catch-all* key, for offloading
1198 	 * group-key en-/de-cryption. The way of how the hardware
1199 	 * decides which keyId maps to which key, remains a mystery...
1200 	 */
1201 	if ((vif->type != NL80211_IFTYPE_STATION &&
1202 	     vif->type != NL80211_IFTYPE_ADHOC) &&
1203 	    !(key->flags & IEEE80211_KEY_FLAG_PAIRWISE))
1204 		return -EOPNOTSUPP;
1205 
1206 	switch (key->cipher) {
1207 	case WLAN_CIPHER_SUITE_WEP40:
1208 		ktype = AR9170_ENC_ALG_WEP64;
1209 		break;
1210 	case WLAN_CIPHER_SUITE_WEP104:
1211 		ktype = AR9170_ENC_ALG_WEP128;
1212 		break;
1213 	case WLAN_CIPHER_SUITE_TKIP:
1214 		ktype = AR9170_ENC_ALG_TKIP;
1215 		break;
1216 	case WLAN_CIPHER_SUITE_CCMP:
1217 		ktype = AR9170_ENC_ALG_AESCCMP;
1218 		key->flags |= IEEE80211_KEY_FLAG_SW_MGMT_TX;
1219 		break;
1220 	default:
1221 		return -EOPNOTSUPP;
1222 	}
1223 
1224 	mutex_lock(&ar->mutex);
1225 	if (cmd == SET_KEY) {
1226 		if (!IS_STARTED(ar)) {
1227 			err = -EOPNOTSUPP;
1228 			goto out;
1229 		}
1230 
1231 		if (!(key->flags & IEEE80211_KEY_FLAG_PAIRWISE)) {
1232 			sta = NULL;
1233 
1234 			i = 64 + key->keyidx;
1235 		} else {
1236 			for (i = 0; i < 64; i++)
1237 				if (!(ar->usedkeys & BIT(i)))
1238 					break;
1239 			if (i == 64)
1240 				goto err_softw;
1241 		}
1242 
1243 		key->hw_key_idx = i;
1244 
1245 		err = carl9170_upload_key(ar, i, sta ? sta->addr : NULL,
1246 					  ktype, 0, key->key,
1247 					  min_t(u8, 16, key->keylen));
1248 		if (err)
1249 			goto out;
1250 
1251 		if (key->cipher == WLAN_CIPHER_SUITE_TKIP) {
1252 			err = carl9170_upload_key(ar, i, sta ? sta->addr :
1253 						  NULL, ktype, 1,
1254 						  key->key + 16, 16);
1255 			if (err)
1256 				goto out;
1257 
1258 			/*
1259 			 * hardware is not capable generating MMIC
1260 			 * of fragmented frames!
1261 			 */
1262 			key->flags |= IEEE80211_KEY_FLAG_GENERATE_MMIC;
1263 		}
1264 
1265 		if (i < 64)
1266 			ar->usedkeys |= BIT(i);
1267 
1268 		key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
1269 	} else {
1270 		if (!IS_STARTED(ar)) {
1271 			/* The device is gone... together with the key ;-) */
1272 			err = 0;
1273 			goto out;
1274 		}
1275 
1276 		if (key->hw_key_idx < 64) {
1277 			ar->usedkeys &= ~BIT(key->hw_key_idx);
1278 		} else {
1279 			err = carl9170_upload_key(ar, key->hw_key_idx, NULL,
1280 						  AR9170_ENC_ALG_NONE, 0,
1281 						  NULL, 0);
1282 			if (err)
1283 				goto out;
1284 
1285 			if (key->cipher == WLAN_CIPHER_SUITE_TKIP) {
1286 				err = carl9170_upload_key(ar, key->hw_key_idx,
1287 							  NULL,
1288 							  AR9170_ENC_ALG_NONE,
1289 							  1, NULL, 0);
1290 				if (err)
1291 					goto out;
1292 			}
1293 
1294 		}
1295 
1296 		err = carl9170_disable_key(ar, key->hw_key_idx);
1297 		if (err)
1298 			goto out;
1299 	}
1300 
1301 out:
1302 	mutex_unlock(&ar->mutex);
1303 	return err;
1304 
1305 err_softw:
1306 	if (!ar->rx_software_decryption) {
1307 		ar->rx_software_decryption = true;
1308 		carl9170_set_operating_mode(ar);
1309 	}
1310 	mutex_unlock(&ar->mutex);
1311 	return -ENOSPC;
1312 }
1313 
1314 static int carl9170_op_sta_add(struct ieee80211_hw *hw,
1315 			       struct ieee80211_vif *vif,
1316 			       struct ieee80211_sta *sta)
1317 {
1318 	struct carl9170_sta_info *sta_info = (void *) sta->drv_priv;
1319 	unsigned int i;
1320 
1321 	atomic_set(&sta_info->pending_frames, 0);
1322 
1323 	if (sta->ht_cap.ht_supported) {
1324 		if (sta->ht_cap.ampdu_density > 6) {
1325 			/*
1326 			 * HW does support 16us AMPDU density.
1327 			 * No HT-Xmit for station.
1328 			 */
1329 
1330 			return 0;
1331 		}
1332 
1333 		for (i = 0; i < ARRAY_SIZE(sta_info->agg); i++)
1334 			RCU_INIT_POINTER(sta_info->agg[i], NULL);
1335 
1336 		sta_info->ampdu_max_len = 1 << (3 + sta->ht_cap.ampdu_factor);
1337 		sta_info->ht_sta = true;
1338 	}
1339 
1340 	return 0;
1341 }
1342 
1343 static int carl9170_op_sta_remove(struct ieee80211_hw *hw,
1344 				struct ieee80211_vif *vif,
1345 				struct ieee80211_sta *sta)
1346 {
1347 	struct ar9170 *ar = hw->priv;
1348 	struct carl9170_sta_info *sta_info = (void *) sta->drv_priv;
1349 	unsigned int i;
1350 	bool cleanup = false;
1351 
1352 	if (sta->ht_cap.ht_supported) {
1353 
1354 		sta_info->ht_sta = false;
1355 
1356 		rcu_read_lock();
1357 		for (i = 0; i < ARRAY_SIZE(sta_info->agg); i++) {
1358 			struct carl9170_sta_tid *tid_info;
1359 
1360 			tid_info = rcu_dereference(sta_info->agg[i]);
1361 			RCU_INIT_POINTER(sta_info->agg[i], NULL);
1362 
1363 			if (!tid_info)
1364 				continue;
1365 
1366 			spin_lock_bh(&ar->tx_ampdu_list_lock);
1367 			if (tid_info->state > CARL9170_TID_STATE_SHUTDOWN)
1368 				tid_info->state = CARL9170_TID_STATE_SHUTDOWN;
1369 			spin_unlock_bh(&ar->tx_ampdu_list_lock);
1370 			cleanup = true;
1371 		}
1372 		rcu_read_unlock();
1373 
1374 		if (cleanup)
1375 			carl9170_ampdu_gc(ar);
1376 	}
1377 
1378 	return 0;
1379 }
1380 
1381 static int carl9170_op_conf_tx(struct ieee80211_hw *hw,
1382 			       struct ieee80211_vif *vif, u16 queue,
1383 			       const struct ieee80211_tx_queue_params *param)
1384 {
1385 	struct ar9170 *ar = hw->priv;
1386 	int ret;
1387 
1388 	mutex_lock(&ar->mutex);
1389 	if (queue < ar->hw->queues) {
1390 		memcpy(&ar->edcf[ar9170_qmap[queue]], param, sizeof(*param));
1391 		ret = carl9170_set_qos(ar);
1392 	} else {
1393 		ret = -EINVAL;
1394 	}
1395 
1396 	mutex_unlock(&ar->mutex);
1397 	return ret;
1398 }
1399 
1400 static void carl9170_ampdu_work(struct work_struct *work)
1401 {
1402 	struct ar9170 *ar = container_of(work, struct ar9170,
1403 					 ampdu_work);
1404 
1405 	if (!IS_STARTED(ar))
1406 		return;
1407 
1408 	mutex_lock(&ar->mutex);
1409 	carl9170_ampdu_gc(ar);
1410 	mutex_unlock(&ar->mutex);
1411 }
1412 
1413 static int carl9170_op_ampdu_action(struct ieee80211_hw *hw,
1414 				    struct ieee80211_vif *vif,
1415 				    enum ieee80211_ampdu_mlme_action action,
1416 				    struct ieee80211_sta *sta,
1417 				    u16 tid, u16 *ssn, u8 buf_size)
1418 {
1419 	struct ar9170 *ar = hw->priv;
1420 	struct carl9170_sta_info *sta_info = (void *) sta->drv_priv;
1421 	struct carl9170_sta_tid *tid_info;
1422 
1423 	if (modparam_noht)
1424 		return -EOPNOTSUPP;
1425 
1426 	switch (action) {
1427 	case IEEE80211_AMPDU_TX_START:
1428 		if (!sta_info->ht_sta)
1429 			return -EOPNOTSUPP;
1430 
1431 		rcu_read_lock();
1432 		if (rcu_dereference(sta_info->agg[tid])) {
1433 			rcu_read_unlock();
1434 			return -EBUSY;
1435 		}
1436 
1437 		tid_info = kzalloc(sizeof(struct carl9170_sta_tid),
1438 				   GFP_ATOMIC);
1439 		if (!tid_info) {
1440 			rcu_read_unlock();
1441 			return -ENOMEM;
1442 		}
1443 
1444 		tid_info->hsn = tid_info->bsn = tid_info->snx = (*ssn);
1445 		tid_info->state = CARL9170_TID_STATE_PROGRESS;
1446 		tid_info->tid = tid;
1447 		tid_info->max = sta_info->ampdu_max_len;
1448 
1449 		INIT_LIST_HEAD(&tid_info->list);
1450 		INIT_LIST_HEAD(&tid_info->tmp_list);
1451 		skb_queue_head_init(&tid_info->queue);
1452 		spin_lock_init(&tid_info->lock);
1453 
1454 		spin_lock_bh(&ar->tx_ampdu_list_lock);
1455 		ar->tx_ampdu_list_len++;
1456 		list_add_tail_rcu(&tid_info->list, &ar->tx_ampdu_list);
1457 		rcu_assign_pointer(sta_info->agg[tid], tid_info);
1458 		spin_unlock_bh(&ar->tx_ampdu_list_lock);
1459 		rcu_read_unlock();
1460 
1461 		ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid);
1462 		break;
1463 
1464 	case IEEE80211_AMPDU_TX_STOP_CONT:
1465 	case IEEE80211_AMPDU_TX_STOP_FLUSH:
1466 	case IEEE80211_AMPDU_TX_STOP_FLUSH_CONT:
1467 		rcu_read_lock();
1468 		tid_info = rcu_dereference(sta_info->agg[tid]);
1469 		if (tid_info) {
1470 			spin_lock_bh(&ar->tx_ampdu_list_lock);
1471 			if (tid_info->state > CARL9170_TID_STATE_SHUTDOWN)
1472 				tid_info->state = CARL9170_TID_STATE_SHUTDOWN;
1473 			spin_unlock_bh(&ar->tx_ampdu_list_lock);
1474 		}
1475 
1476 		RCU_INIT_POINTER(sta_info->agg[tid], NULL);
1477 		rcu_read_unlock();
1478 
1479 		ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid);
1480 		ieee80211_queue_work(ar->hw, &ar->ampdu_work);
1481 		break;
1482 
1483 	case IEEE80211_AMPDU_TX_OPERATIONAL:
1484 		rcu_read_lock();
1485 		tid_info = rcu_dereference(sta_info->agg[tid]);
1486 
1487 		sta_info->stats[tid].clear = true;
1488 		sta_info->stats[tid].req = false;
1489 
1490 		if (tid_info) {
1491 			bitmap_zero(tid_info->bitmap, CARL9170_BAW_SIZE);
1492 			tid_info->state = CARL9170_TID_STATE_IDLE;
1493 		}
1494 		rcu_read_unlock();
1495 
1496 		if (WARN_ON_ONCE(!tid_info))
1497 			return -EFAULT;
1498 
1499 		break;
1500 
1501 	case IEEE80211_AMPDU_RX_START:
1502 	case IEEE80211_AMPDU_RX_STOP:
1503 		/* Handled by hardware */
1504 		break;
1505 
1506 	default:
1507 		return -EOPNOTSUPP;
1508 	}
1509 
1510 	return 0;
1511 }
1512 
1513 #ifdef CONFIG_CARL9170_WPC
1514 static int carl9170_register_wps_button(struct ar9170 *ar)
1515 {
1516 	struct input_dev *input;
1517 	int err;
1518 
1519 	if (!(ar->features & CARL9170_WPS_BUTTON))
1520 		return 0;
1521 
1522 	input = input_allocate_device();
1523 	if (!input)
1524 		return -ENOMEM;
1525 
1526 	snprintf(ar->wps.name, sizeof(ar->wps.name), "%s WPS Button",
1527 		 wiphy_name(ar->hw->wiphy));
1528 
1529 	snprintf(ar->wps.phys, sizeof(ar->wps.phys),
1530 		 "ieee80211/%s/input0", wiphy_name(ar->hw->wiphy));
1531 
1532 	input->name = ar->wps.name;
1533 	input->phys = ar->wps.phys;
1534 	input->id.bustype = BUS_USB;
1535 	input->dev.parent = &ar->hw->wiphy->dev;
1536 
1537 	input_set_capability(input, EV_KEY, KEY_WPS_BUTTON);
1538 
1539 	err = input_register_device(input);
1540 	if (err) {
1541 		input_free_device(input);
1542 		return err;
1543 	}
1544 
1545 	ar->wps.pbc = input;
1546 	return 0;
1547 }
1548 #endif /* CONFIG_CARL9170_WPC */
1549 
1550 #ifdef CONFIG_CARL9170_HWRNG
1551 static int carl9170_rng_get(struct ar9170 *ar)
1552 {
1553 
1554 #define RW	(CARL9170_MAX_CMD_PAYLOAD_LEN / sizeof(u32))
1555 #define RB	(CARL9170_MAX_CMD_PAYLOAD_LEN)
1556 
1557 	static const __le32 rng_load[RW] = {
1558 		[0 ... (RW - 1)] = cpu_to_le32(AR9170_RAND_REG_NUM)};
1559 
1560 	u32 buf[RW];
1561 
1562 	unsigned int i, off = 0, transfer, count;
1563 	int err;
1564 
1565 	BUILD_BUG_ON(RB > CARL9170_MAX_CMD_PAYLOAD_LEN);
1566 
1567 	if (!IS_ACCEPTING_CMD(ar) || !ar->rng.initialized)
1568 		return -EAGAIN;
1569 
1570 	count = ARRAY_SIZE(ar->rng.cache);
1571 	while (count) {
1572 		err = carl9170_exec_cmd(ar, CARL9170_CMD_RREG,
1573 					RB, (u8 *) rng_load,
1574 					RB, (u8 *) buf);
1575 		if (err)
1576 			return err;
1577 
1578 		transfer = min_t(unsigned int, count, RW);
1579 		for (i = 0; i < transfer; i++)
1580 			ar->rng.cache[off + i] = buf[i];
1581 
1582 		off += transfer;
1583 		count -= transfer;
1584 	}
1585 
1586 	ar->rng.cache_idx = 0;
1587 
1588 #undef RW
1589 #undef RB
1590 	return 0;
1591 }
1592 
1593 static int carl9170_rng_read(struct hwrng *rng, u32 *data)
1594 {
1595 	struct ar9170 *ar = (struct ar9170 *)rng->priv;
1596 	int ret = -EIO;
1597 
1598 	mutex_lock(&ar->mutex);
1599 	if (ar->rng.cache_idx >= ARRAY_SIZE(ar->rng.cache)) {
1600 		ret = carl9170_rng_get(ar);
1601 		if (ret) {
1602 			mutex_unlock(&ar->mutex);
1603 			return ret;
1604 		}
1605 	}
1606 
1607 	*data = ar->rng.cache[ar->rng.cache_idx++];
1608 	mutex_unlock(&ar->mutex);
1609 
1610 	return sizeof(u16);
1611 }
1612 
1613 static void carl9170_unregister_hwrng(struct ar9170 *ar)
1614 {
1615 	if (ar->rng.initialized) {
1616 		hwrng_unregister(&ar->rng.rng);
1617 		ar->rng.initialized = false;
1618 	}
1619 }
1620 
1621 static int carl9170_register_hwrng(struct ar9170 *ar)
1622 {
1623 	int err;
1624 
1625 	snprintf(ar->rng.name, ARRAY_SIZE(ar->rng.name),
1626 		 "%s_%s", KBUILD_MODNAME, wiphy_name(ar->hw->wiphy));
1627 	ar->rng.rng.name = ar->rng.name;
1628 	ar->rng.rng.data_read = carl9170_rng_read;
1629 	ar->rng.rng.priv = (unsigned long)ar;
1630 
1631 	if (WARN_ON(ar->rng.initialized))
1632 		return -EALREADY;
1633 
1634 	err = hwrng_register(&ar->rng.rng);
1635 	if (err) {
1636 		dev_err(&ar->udev->dev, "Failed to register the random "
1637 			"number generator (%d)\n", err);
1638 		return err;
1639 	}
1640 
1641 	ar->rng.initialized = true;
1642 
1643 	err = carl9170_rng_get(ar);
1644 	if (err) {
1645 		carl9170_unregister_hwrng(ar);
1646 		return err;
1647 	}
1648 
1649 	return 0;
1650 }
1651 #endif /* CONFIG_CARL9170_HWRNG */
1652 
1653 static int carl9170_op_get_survey(struct ieee80211_hw *hw, int idx,
1654 				struct survey_info *survey)
1655 {
1656 	struct ar9170 *ar = hw->priv;
1657 	struct ieee80211_channel *chan;
1658 	struct ieee80211_supported_band *band;
1659 	int err, b, i;
1660 
1661 	chan = ar->channel;
1662 	if (!chan)
1663 		return -ENODEV;
1664 
1665 	if (idx == chan->hw_value) {
1666 		mutex_lock(&ar->mutex);
1667 		err = carl9170_update_survey(ar, false, true);
1668 		mutex_unlock(&ar->mutex);
1669 		if (err)
1670 			return err;
1671 	}
1672 
1673 	for (b = 0; b < IEEE80211_NUM_BANDS; b++) {
1674 		band = ar->hw->wiphy->bands[b];
1675 
1676 		if (!band)
1677 			continue;
1678 
1679 		for (i = 0; i < band->n_channels; i++) {
1680 			if (band->channels[i].hw_value == idx) {
1681 				chan = &band->channels[i];
1682 				goto found;
1683 			}
1684 		}
1685 	}
1686 	return -ENOENT;
1687 
1688 found:
1689 	memcpy(survey, &ar->survey[idx], sizeof(*survey));
1690 
1691 	survey->channel = chan;
1692 	survey->filled = SURVEY_INFO_NOISE_DBM;
1693 
1694 	if (ar->channel == chan)
1695 		survey->filled |= SURVEY_INFO_IN_USE;
1696 
1697 	if (ar->fw.hw_counters) {
1698 		survey->filled |= SURVEY_INFO_CHANNEL_TIME |
1699 				  SURVEY_INFO_CHANNEL_TIME_BUSY |
1700 				  SURVEY_INFO_CHANNEL_TIME_TX;
1701 	}
1702 
1703 	return 0;
1704 }
1705 
1706 static void carl9170_op_flush(struct ieee80211_hw *hw, bool drop)
1707 {
1708 	struct ar9170 *ar = hw->priv;
1709 	unsigned int vid;
1710 
1711 	mutex_lock(&ar->mutex);
1712 	for_each_set_bit(vid, &ar->vif_bitmap, ar->fw.vif_num)
1713 		carl9170_flush_cab(ar, vid);
1714 
1715 	carl9170_flush(ar, drop);
1716 	mutex_unlock(&ar->mutex);
1717 }
1718 
1719 static int carl9170_op_get_stats(struct ieee80211_hw *hw,
1720 				 struct ieee80211_low_level_stats *stats)
1721 {
1722 	struct ar9170 *ar = hw->priv;
1723 
1724 	memset(stats, 0, sizeof(*stats));
1725 	stats->dot11ACKFailureCount = ar->tx_ack_failures;
1726 	stats->dot11FCSErrorCount = ar->tx_fcs_errors;
1727 	return 0;
1728 }
1729 
1730 static void carl9170_op_sta_notify(struct ieee80211_hw *hw,
1731 				   struct ieee80211_vif *vif,
1732 				   enum sta_notify_cmd cmd,
1733 				   struct ieee80211_sta *sta)
1734 {
1735 	struct carl9170_sta_info *sta_info = (void *) sta->drv_priv;
1736 
1737 	switch (cmd) {
1738 	case STA_NOTIFY_SLEEP:
1739 		sta_info->sleeping = true;
1740 		if (atomic_read(&sta_info->pending_frames))
1741 			ieee80211_sta_block_awake(hw, sta, true);
1742 		break;
1743 
1744 	case STA_NOTIFY_AWAKE:
1745 		sta_info->sleeping = false;
1746 		break;
1747 	}
1748 }
1749 
1750 static bool carl9170_tx_frames_pending(struct ieee80211_hw *hw)
1751 {
1752 	struct ar9170 *ar = hw->priv;
1753 
1754 	return !!atomic_read(&ar->tx_total_queued);
1755 }
1756 
1757 static const struct ieee80211_ops carl9170_ops = {
1758 	.start			= carl9170_op_start,
1759 	.stop			= carl9170_op_stop,
1760 	.tx			= carl9170_op_tx,
1761 	.flush			= carl9170_op_flush,
1762 	.add_interface		= carl9170_op_add_interface,
1763 	.remove_interface	= carl9170_op_remove_interface,
1764 	.config			= carl9170_op_config,
1765 	.prepare_multicast	= carl9170_op_prepare_multicast,
1766 	.configure_filter	= carl9170_op_configure_filter,
1767 	.conf_tx		= carl9170_op_conf_tx,
1768 	.bss_info_changed	= carl9170_op_bss_info_changed,
1769 	.get_tsf		= carl9170_op_get_tsf,
1770 	.set_key		= carl9170_op_set_key,
1771 	.sta_add		= carl9170_op_sta_add,
1772 	.sta_remove		= carl9170_op_sta_remove,
1773 	.sta_notify		= carl9170_op_sta_notify,
1774 	.get_survey		= carl9170_op_get_survey,
1775 	.get_stats		= carl9170_op_get_stats,
1776 	.ampdu_action		= carl9170_op_ampdu_action,
1777 	.tx_frames_pending	= carl9170_tx_frames_pending,
1778 };
1779 
1780 void *carl9170_alloc(size_t priv_size)
1781 {
1782 	struct ieee80211_hw *hw;
1783 	struct ar9170 *ar;
1784 	struct sk_buff *skb;
1785 	int i;
1786 
1787 	/*
1788 	 * this buffer is used for rx stream reconstruction.
1789 	 * Under heavy load this device (or the transport layer?)
1790 	 * tends to split the streams into separate rx descriptors.
1791 	 */
1792 
1793 	skb = __dev_alloc_skb(AR9170_RX_STREAM_MAX_SIZE, GFP_KERNEL);
1794 	if (!skb)
1795 		goto err_nomem;
1796 
1797 	hw = ieee80211_alloc_hw(priv_size, &carl9170_ops);
1798 	if (!hw)
1799 		goto err_nomem;
1800 
1801 	ar = hw->priv;
1802 	ar->hw = hw;
1803 	ar->rx_failover = skb;
1804 
1805 	memset(&ar->rx_plcp, 0, sizeof(struct ar9170_rx_head));
1806 	ar->rx_has_plcp = false;
1807 
1808 	/*
1809 	 * Here's a hidden pitfall!
1810 	 *
1811 	 * All 4 AC queues work perfectly well under _legacy_ operation.
1812 	 * However as soon as aggregation is enabled, the traffic flow
1813 	 * gets very bumpy. Therefore we have to _switch_ to a
1814 	 * software AC with a single HW queue.
1815 	 */
1816 	hw->queues = __AR9170_NUM_TXQ;
1817 
1818 	mutex_init(&ar->mutex);
1819 	spin_lock_init(&ar->beacon_lock);
1820 	spin_lock_init(&ar->cmd_lock);
1821 	spin_lock_init(&ar->tx_stats_lock);
1822 	spin_lock_init(&ar->tx_ampdu_list_lock);
1823 	spin_lock_init(&ar->mem_lock);
1824 	spin_lock_init(&ar->state_lock);
1825 	atomic_set(&ar->pending_restarts, 0);
1826 	ar->vifs = 0;
1827 	for (i = 0; i < ar->hw->queues; i++) {
1828 		skb_queue_head_init(&ar->tx_status[i]);
1829 		skb_queue_head_init(&ar->tx_pending[i]);
1830 
1831 		INIT_LIST_HEAD(&ar->bar_list[i]);
1832 		spin_lock_init(&ar->bar_list_lock[i]);
1833 	}
1834 	INIT_WORK(&ar->ps_work, carl9170_ps_work);
1835 	INIT_WORK(&ar->ping_work, carl9170_ping_work);
1836 	INIT_WORK(&ar->restart_work, carl9170_restart_work);
1837 	INIT_WORK(&ar->ampdu_work, carl9170_ampdu_work);
1838 	INIT_DELAYED_WORK(&ar->stat_work, carl9170_stat_work);
1839 	INIT_DELAYED_WORK(&ar->tx_janitor, carl9170_tx_janitor);
1840 	INIT_LIST_HEAD(&ar->tx_ampdu_list);
1841 	rcu_assign_pointer(ar->tx_ampdu_iter,
1842 			   (struct carl9170_sta_tid *) &ar->tx_ampdu_list);
1843 
1844 	bitmap_zero(&ar->vif_bitmap, ar->fw.vif_num);
1845 	INIT_LIST_HEAD(&ar->vif_list);
1846 	init_completion(&ar->tx_flush);
1847 
1848 	/* firmware decides which modes we support */
1849 	hw->wiphy->interface_modes = 0;
1850 
1851 	hw->flags |= IEEE80211_HW_RX_INCLUDES_FCS |
1852 		     IEEE80211_HW_MFP_CAPABLE |
1853 		     IEEE80211_HW_REPORTS_TX_ACK_STATUS |
1854 		     IEEE80211_HW_SUPPORTS_PS |
1855 		     IEEE80211_HW_PS_NULLFUNC_STACK |
1856 		     IEEE80211_HW_NEED_DTIM_BEFORE_ASSOC |
1857 		     IEEE80211_HW_SIGNAL_DBM;
1858 
1859 	if (!modparam_noht) {
1860 		/*
1861 		 * see the comment above, why we allow the user
1862 		 * to disable HT by a module parameter.
1863 		 */
1864 		hw->flags |= IEEE80211_HW_AMPDU_AGGREGATION;
1865 	}
1866 
1867 	hw->extra_tx_headroom = sizeof(struct _carl9170_tx_superframe);
1868 	hw->sta_data_size = sizeof(struct carl9170_sta_info);
1869 	hw->vif_data_size = sizeof(struct carl9170_vif_info);
1870 
1871 	hw->max_rates = CARL9170_TX_MAX_RATES;
1872 	hw->max_rate_tries = CARL9170_TX_USER_RATE_TRIES;
1873 
1874 	for (i = 0; i < ARRAY_SIZE(ar->noise); i++)
1875 		ar->noise[i] = -95; /* ATH_DEFAULT_NOISE_FLOOR */
1876 
1877 	return ar;
1878 
1879 err_nomem:
1880 	kfree_skb(skb);
1881 	return ERR_PTR(-ENOMEM);
1882 }
1883 
1884 static int carl9170_read_eeprom(struct ar9170 *ar)
1885 {
1886 #define RW	8	/* number of words to read at once */
1887 #define RB	(sizeof(u32) * RW)
1888 	u8 *eeprom = (void *)&ar->eeprom;
1889 	__le32 offsets[RW];
1890 	int i, j, err;
1891 
1892 	BUILD_BUG_ON(sizeof(ar->eeprom) & 3);
1893 
1894 	BUILD_BUG_ON(RB > CARL9170_MAX_CMD_LEN - 4);
1895 #ifndef __CHECKER__
1896 	/* don't want to handle trailing remains */
1897 	BUILD_BUG_ON(sizeof(ar->eeprom) % RB);
1898 #endif
1899 
1900 	for (i = 0; i < sizeof(ar->eeprom) / RB; i++) {
1901 		for (j = 0; j < RW; j++)
1902 			offsets[j] = cpu_to_le32(AR9170_EEPROM_START +
1903 						 RB * i + 4 * j);
1904 
1905 		err = carl9170_exec_cmd(ar, CARL9170_CMD_RREG,
1906 					RB, (u8 *) &offsets,
1907 					RB, eeprom + RB * i);
1908 		if (err)
1909 			return err;
1910 	}
1911 
1912 #undef RW
1913 #undef RB
1914 	return 0;
1915 }
1916 
1917 static int carl9170_parse_eeprom(struct ar9170 *ar)
1918 {
1919 	struct ath_regulatory *regulatory = &ar->common.regulatory;
1920 	unsigned int rx_streams, tx_streams, tx_params = 0;
1921 	int bands = 0;
1922 	int chans = 0;
1923 
1924 	if (ar->eeprom.length == cpu_to_le16(0xffff))
1925 		return -ENODATA;
1926 
1927 	rx_streams = hweight8(ar->eeprom.rx_mask);
1928 	tx_streams = hweight8(ar->eeprom.tx_mask);
1929 
1930 	if (rx_streams != tx_streams) {
1931 		tx_params = IEEE80211_HT_MCS_TX_RX_DIFF;
1932 
1933 		WARN_ON(!(tx_streams >= 1 && tx_streams <=
1934 			IEEE80211_HT_MCS_TX_MAX_STREAMS));
1935 
1936 		tx_params = (tx_streams - 1) <<
1937 			    IEEE80211_HT_MCS_TX_MAX_STREAMS_SHIFT;
1938 
1939 		carl9170_band_2GHz.ht_cap.mcs.tx_params |= tx_params;
1940 		carl9170_band_5GHz.ht_cap.mcs.tx_params |= tx_params;
1941 	}
1942 
1943 	if (ar->eeprom.operating_flags & AR9170_OPFLAG_2GHZ) {
1944 		ar->hw->wiphy->bands[IEEE80211_BAND_2GHZ] =
1945 			&carl9170_band_2GHz;
1946 		chans += carl9170_band_2GHz.n_channels;
1947 		bands++;
1948 	}
1949 	if (ar->eeprom.operating_flags & AR9170_OPFLAG_5GHZ) {
1950 		ar->hw->wiphy->bands[IEEE80211_BAND_5GHZ] =
1951 			&carl9170_band_5GHz;
1952 		chans += carl9170_band_5GHz.n_channels;
1953 		bands++;
1954 	}
1955 
1956 	if (!bands)
1957 		return -EINVAL;
1958 
1959 	ar->survey = kzalloc(sizeof(struct survey_info) * chans, GFP_KERNEL);
1960 	if (!ar->survey)
1961 		return -ENOMEM;
1962 	ar->num_channels = chans;
1963 
1964 	/*
1965 	 * I measured this, a bandswitch takes roughly
1966 	 * 135 ms and a frequency switch about 80.
1967 	 *
1968 	 * FIXME: measure these values again once EEPROM settings
1969 	 *	  are used, that will influence them!
1970 	 */
1971 	if (bands == 2)
1972 		ar->hw->channel_change_time = 135 * 1000;
1973 	else
1974 		ar->hw->channel_change_time = 80 * 1000;
1975 
1976 	regulatory->current_rd = le16_to_cpu(ar->eeprom.reg_domain[0]);
1977 
1978 	/* second part of wiphy init */
1979 	SET_IEEE80211_PERM_ADDR(ar->hw, ar->eeprom.mac_address);
1980 
1981 	return 0;
1982 }
1983 
1984 static void carl9170_reg_notifier(struct wiphy *wiphy,
1985 				  struct regulatory_request *request)
1986 {
1987 	struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
1988 	struct ar9170 *ar = hw->priv;
1989 
1990 	ath_reg_notifier_apply(wiphy, request, &ar->common.regulatory);
1991 }
1992 
1993 int carl9170_register(struct ar9170 *ar)
1994 {
1995 	struct ath_regulatory *regulatory = &ar->common.regulatory;
1996 	int err = 0, i;
1997 
1998 	if (WARN_ON(ar->mem_bitmap))
1999 		return -EINVAL;
2000 
2001 	ar->mem_bitmap = kzalloc(roundup(ar->fw.mem_blocks, BITS_PER_LONG) *
2002 				 sizeof(unsigned long), GFP_KERNEL);
2003 
2004 	if (!ar->mem_bitmap)
2005 		return -ENOMEM;
2006 
2007 	/* try to read EEPROM, init MAC addr */
2008 	err = carl9170_read_eeprom(ar);
2009 	if (err)
2010 		return err;
2011 
2012 	err = carl9170_parse_eeprom(ar);
2013 	if (err)
2014 		return err;
2015 
2016 	err = ath_regd_init(regulatory, ar->hw->wiphy,
2017 			    carl9170_reg_notifier);
2018 	if (err)
2019 		return err;
2020 
2021 	if (modparam_noht) {
2022 		carl9170_band_2GHz.ht_cap.ht_supported = false;
2023 		carl9170_band_5GHz.ht_cap.ht_supported = false;
2024 	}
2025 
2026 	for (i = 0; i < ar->fw.vif_num; i++) {
2027 		ar->vif_priv[i].id = i;
2028 		ar->vif_priv[i].vif = NULL;
2029 	}
2030 
2031 	err = ieee80211_register_hw(ar->hw);
2032 	if (err)
2033 		return err;
2034 
2035 	/* mac80211 interface is now registered */
2036 	ar->registered = true;
2037 
2038 	if (!ath_is_world_regd(regulatory))
2039 		regulatory_hint(ar->hw->wiphy, regulatory->alpha2);
2040 
2041 #ifdef CONFIG_CARL9170_DEBUGFS
2042 	carl9170_debugfs_register(ar);
2043 #endif /* CONFIG_CARL9170_DEBUGFS */
2044 
2045 	err = carl9170_led_init(ar);
2046 	if (err)
2047 		goto err_unreg;
2048 
2049 #ifdef CONFIG_CARL9170_LEDS
2050 	err = carl9170_led_register(ar);
2051 	if (err)
2052 		goto err_unreg;
2053 #endif /* CONFIG_CARL9170_LEDS */
2054 
2055 #ifdef CONFIG_CARL9170_WPC
2056 	err = carl9170_register_wps_button(ar);
2057 	if (err)
2058 		goto err_unreg;
2059 #endif /* CONFIG_CARL9170_WPC */
2060 
2061 #ifdef CONFIG_CARL9170_HWRNG
2062 	err = carl9170_register_hwrng(ar);
2063 	if (err)
2064 		goto err_unreg;
2065 #endif /* CONFIG_CARL9170_HWRNG */
2066 
2067 	dev_info(&ar->udev->dev, "Atheros AR9170 is registered as '%s'\n",
2068 		 wiphy_name(ar->hw->wiphy));
2069 
2070 	return 0;
2071 
2072 err_unreg:
2073 	carl9170_unregister(ar);
2074 	return err;
2075 }
2076 
2077 void carl9170_unregister(struct ar9170 *ar)
2078 {
2079 	if (!ar->registered)
2080 		return;
2081 
2082 	ar->registered = false;
2083 
2084 #ifdef CONFIG_CARL9170_LEDS
2085 	carl9170_led_unregister(ar);
2086 #endif /* CONFIG_CARL9170_LEDS */
2087 
2088 #ifdef CONFIG_CARL9170_DEBUGFS
2089 	carl9170_debugfs_unregister(ar);
2090 #endif /* CONFIG_CARL9170_DEBUGFS */
2091 
2092 #ifdef CONFIG_CARL9170_WPC
2093 	if (ar->wps.pbc) {
2094 		input_unregister_device(ar->wps.pbc);
2095 		ar->wps.pbc = NULL;
2096 	}
2097 #endif /* CONFIG_CARL9170_WPC */
2098 
2099 #ifdef CONFIG_CARL9170_HWRNG
2100 	carl9170_unregister_hwrng(ar);
2101 #endif /* CONFIG_CARL9170_HWRNG */
2102 
2103 	carl9170_cancel_worker(ar);
2104 	cancel_work_sync(&ar->restart_work);
2105 
2106 	ieee80211_unregister_hw(ar->hw);
2107 }
2108 
2109 void carl9170_free(struct ar9170 *ar)
2110 {
2111 	WARN_ON(ar->registered);
2112 	WARN_ON(IS_INITIALIZED(ar));
2113 
2114 	kfree_skb(ar->rx_failover);
2115 	ar->rx_failover = NULL;
2116 
2117 	kfree(ar->mem_bitmap);
2118 	ar->mem_bitmap = NULL;
2119 
2120 	kfree(ar->survey);
2121 	ar->survey = NULL;
2122 
2123 	mutex_destroy(&ar->mutex);
2124 
2125 	ieee80211_free_hw(ar->hw);
2126 }
2127