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