]> git.karo-electronics.de Git - mv-sheeva.git/blob - drivers/net/wireless/ath/carl9170/main.c
ath: remove ath_regulatory::current_rd_ext
[mv-sheeva.git] / drivers / net / wireless / ath / carl9170 / main.c
1 /*
2  * Atheros CARL9170 driver
3  *
4  * mac80211 interaction code
5  *
6  * Copyright 2008, Johannes Berg <johannes@sipsolutions.net>
7  * Copyright 2009, 2010, Christian Lamparter <chunkeey@googlemail.com>
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; see the file COPYING.  If not, see
21  * http://www.gnu.org/licenses/.
22  *
23  * This file incorporates work covered by the following copyright and
24  * permission notice:
25  *    Copyright (c) 2007-2008 Atheros Communications, Inc.
26  *
27  *    Permission to use, copy, modify, and/or distribute this software for any
28  *    purpose with or without fee is hereby granted, provided that the above
29  *    copyright notice and this permission notice appear in all copies.
30  *
31  *    THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
32  *    WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
33  *    MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
34  *    ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
35  *    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
36  *    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
37  *    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
38  */
39
40 #include <linux/init.h>
41 #include <linux/slab.h>
42 #include <linux/module.h>
43 #include <linux/etherdevice.h>
44 #include <linux/random.h>
45 #include <net/mac80211.h>
46 #include <net/cfg80211.h>
47 #include "hw.h"
48 #include "carl9170.h"
49 #include "cmd.h"
50
51 static int modparam_nohwcrypt;
52 module_param_named(nohwcrypt, modparam_nohwcrypt, bool, S_IRUGO);
53 MODULE_PARM_DESC(nohwcrypt, "Disable hardware crypto offload.");
54
55 int modparam_noht;
56 module_param_named(noht, modparam_noht, int, S_IRUGO);
57 MODULE_PARM_DESC(noht, "Disable MPDU aggregation.");
58
59 #define RATE(_bitrate, _hw_rate, _txpidx, _flags) {     \
60         .bitrate        = (_bitrate),                   \
61         .flags          = (_flags),                     \
62         .hw_value       = (_hw_rate) | (_txpidx) << 4,  \
63 }
64
65 struct ieee80211_rate __carl9170_ratetable[] = {
66         RATE(10, 0, 0, 0),
67         RATE(20, 1, 1, IEEE80211_RATE_SHORT_PREAMBLE),
68         RATE(55, 2, 2, IEEE80211_RATE_SHORT_PREAMBLE),
69         RATE(110, 3, 3, IEEE80211_RATE_SHORT_PREAMBLE),
70         RATE(60, 0xb, 0, 0),
71         RATE(90, 0xf, 0, 0),
72         RATE(120, 0xa, 0, 0),
73         RATE(180, 0xe, 0, 0),
74         RATE(240, 0x9, 0, 0),
75         RATE(360, 0xd, 1, 0),
76         RATE(480, 0x8, 2, 0),
77         RATE(540, 0xc, 3, 0),
78 };
79 #undef RATE
80
81 #define carl9170_g_ratetable    (__carl9170_ratetable + 0)
82 #define carl9170_g_ratetable_size       12
83 #define carl9170_a_ratetable    (__carl9170_ratetable + 4)
84 #define carl9170_a_ratetable_size       8
85
86 /*
87  * NB: The hw_value is used as an index into the carl9170_phy_freq_params
88  *     array in phy.c so that we don't have to do frequency lookups!
89  */
90 #define CHAN(_freq, _idx) {             \
91         .center_freq    = (_freq),      \
92         .hw_value       = (_idx),       \
93         .max_power      = 18, /* XXX */ \
94 }
95
96 static struct ieee80211_channel carl9170_2ghz_chantable[] = {
97         CHAN(2412,  0),
98         CHAN(2417,  1),
99         CHAN(2422,  2),
100         CHAN(2427,  3),
101         CHAN(2432,  4),
102         CHAN(2437,  5),
103         CHAN(2442,  6),
104         CHAN(2447,  7),
105         CHAN(2452,  8),
106         CHAN(2457,  9),
107         CHAN(2462, 10),
108         CHAN(2467, 11),
109         CHAN(2472, 12),
110         CHAN(2484, 13),
111 };
112
113 static struct ieee80211_channel carl9170_5ghz_chantable[] = {
114         CHAN(4920, 14),
115         CHAN(4940, 15),
116         CHAN(4960, 16),
117         CHAN(4980, 17),
118         CHAN(5040, 18),
119         CHAN(5060, 19),
120         CHAN(5080, 20),
121         CHAN(5180, 21),
122         CHAN(5200, 22),
123         CHAN(5220, 23),
124         CHAN(5240, 24),
125         CHAN(5260, 25),
126         CHAN(5280, 26),
127         CHAN(5300, 27),
128         CHAN(5320, 28),
129         CHAN(5500, 29),
130         CHAN(5520, 30),
131         CHAN(5540, 31),
132         CHAN(5560, 32),
133         CHAN(5580, 33),
134         CHAN(5600, 34),
135         CHAN(5620, 35),
136         CHAN(5640, 36),
137         CHAN(5660, 37),
138         CHAN(5680, 38),
139         CHAN(5700, 39),
140         CHAN(5745, 40),
141         CHAN(5765, 41),
142         CHAN(5785, 42),
143         CHAN(5805, 43),
144         CHAN(5825, 44),
145         CHAN(5170, 45),
146         CHAN(5190, 46),
147         CHAN(5210, 47),
148         CHAN(5230, 48),
149 };
150 #undef CHAN
151
152 #define CARL9170_HT_CAP                                                 \
153 {                                                                       \
154         .ht_supported   = true,                                         \
155         .cap            = IEEE80211_HT_CAP_MAX_AMSDU |                  \
156                           IEEE80211_HT_CAP_SUP_WIDTH_20_40 |            \
157                           IEEE80211_HT_CAP_SGI_40 |                     \
158                           IEEE80211_HT_CAP_DSSSCCK40 |                  \
159                           IEEE80211_HT_CAP_SM_PS,                       \
160         .ampdu_factor   = IEEE80211_HT_MAX_AMPDU_64K,                   \
161         .ampdu_density  = IEEE80211_HT_MPDU_DENSITY_8,                  \
162         .mcs            = {                                             \
163                 .rx_mask = { 0xff, 0xff, 0, 0, 0x1, 0, 0, 0, 0, 0, },   \
164                 .rx_highest = cpu_to_le16(300),                         \
165                 .tx_params = IEEE80211_HT_MCS_TX_DEFINED,               \
166         },                                                              \
167 }
168
169 static struct ieee80211_supported_band carl9170_band_2GHz = {
170         .channels       = carl9170_2ghz_chantable,
171         .n_channels     = ARRAY_SIZE(carl9170_2ghz_chantable),
172         .bitrates       = carl9170_g_ratetable,
173         .n_bitrates     = carl9170_g_ratetable_size,
174         .ht_cap         = CARL9170_HT_CAP,
175 };
176
177 static struct ieee80211_supported_band carl9170_band_5GHz = {
178         .channels       = carl9170_5ghz_chantable,
179         .n_channels     = ARRAY_SIZE(carl9170_5ghz_chantable),
180         .bitrates       = carl9170_a_ratetable,
181         .n_bitrates     = carl9170_a_ratetable_size,
182         .ht_cap         = CARL9170_HT_CAP,
183 };
184
185 static void carl9170_ampdu_gc(struct ar9170 *ar)
186 {
187         struct carl9170_sta_tid *tid_info;
188         LIST_HEAD(tid_gc);
189
190         rcu_read_lock();
191         list_for_each_entry_rcu(tid_info, &ar->tx_ampdu_list, list) {
192                 spin_lock_bh(&ar->tx_ampdu_list_lock);
193                 if (tid_info->state == CARL9170_TID_STATE_SHUTDOWN) {
194                         tid_info->state = CARL9170_TID_STATE_KILLED;
195                         list_del_rcu(&tid_info->list);
196                         ar->tx_ampdu_list_len--;
197                         list_add_tail(&tid_info->tmp_list, &tid_gc);
198                 }
199                 spin_unlock_bh(&ar->tx_ampdu_list_lock);
200
201         }
202         rcu_assign_pointer(ar->tx_ampdu_iter, tid_info);
203         rcu_read_unlock();
204
205         synchronize_rcu();
206
207         while (!list_empty(&tid_gc)) {
208                 struct sk_buff *skb;
209                 tid_info = list_first_entry(&tid_gc, struct carl9170_sta_tid,
210                                             tmp_list);
211
212                 while ((skb = __skb_dequeue(&tid_info->queue)))
213                         carl9170_tx_status(ar, skb, false);
214
215                 list_del_init(&tid_info->tmp_list);
216                 kfree(tid_info);
217         }
218 }
219
220 static void carl9170_flush(struct ar9170 *ar, bool drop_queued)
221 {
222         if (drop_queued) {
223                 int i;
224
225                 /*
226                  * We can only drop frames which have not been uploaded
227                  * to the device yet.
228                  */
229
230                 for (i = 0; i < ar->hw->queues; i++) {
231                         struct sk_buff *skb;
232
233                         while ((skb = skb_dequeue(&ar->tx_pending[i]))) {
234                                 struct ieee80211_tx_info *info;
235
236                                 info = IEEE80211_SKB_CB(skb);
237                                 if (info->flags & IEEE80211_TX_CTL_AMPDU)
238                                         atomic_dec(&ar->tx_ampdu_upload);
239
240                                 carl9170_tx_status(ar, skb, false);
241                         }
242                 }
243         }
244
245         /* Wait for all other outstanding frames to timeout. */
246         if (atomic_read(&ar->tx_total_queued))
247                 WARN_ON(wait_for_completion_timeout(&ar->tx_flush, HZ) == 0);
248 }
249
250 static void carl9170_flush_ba(struct ar9170 *ar)
251 {
252         struct sk_buff_head free;
253         struct carl9170_sta_tid *tid_info;
254         struct sk_buff *skb;
255
256         __skb_queue_head_init(&free);
257
258         rcu_read_lock();
259         spin_lock_bh(&ar->tx_ampdu_list_lock);
260         list_for_each_entry_rcu(tid_info, &ar->tx_ampdu_list, list) {
261                 if (tid_info->state > CARL9170_TID_STATE_SUSPEND) {
262                         tid_info->state = CARL9170_TID_STATE_SUSPEND;
263
264                         spin_lock(&tid_info->lock);
265                         while ((skb = __skb_dequeue(&tid_info->queue)))
266                                 __skb_queue_tail(&free, skb);
267                         spin_unlock(&tid_info->lock);
268                 }
269         }
270         spin_unlock_bh(&ar->tx_ampdu_list_lock);
271         rcu_read_unlock();
272
273         while ((skb = __skb_dequeue(&free)))
274                 carl9170_tx_status(ar, skb, false);
275 }
276
277 static void carl9170_zap_queues(struct ar9170 *ar)
278 {
279         struct carl9170_vif_info *cvif;
280         unsigned int i;
281
282         carl9170_ampdu_gc(ar);
283
284         carl9170_flush_ba(ar);
285         carl9170_flush(ar, true);
286
287         for (i = 0; i < ar->hw->queues; i++) {
288                 spin_lock_bh(&ar->tx_status[i].lock);
289                 while (!skb_queue_empty(&ar->tx_status[i])) {
290                         struct sk_buff *skb;
291
292                         skb = skb_peek(&ar->tx_status[i]);
293                         carl9170_tx_get_skb(skb);
294                         spin_unlock_bh(&ar->tx_status[i].lock);
295                         carl9170_tx_drop(ar, skb);
296                         spin_lock_bh(&ar->tx_status[i].lock);
297                         carl9170_tx_put_skb(skb);
298                 }
299                 spin_unlock_bh(&ar->tx_status[i].lock);
300         }
301
302         BUILD_BUG_ON(CARL9170_NUM_TX_LIMIT_SOFT < 1);
303         BUILD_BUG_ON(CARL9170_NUM_TX_LIMIT_HARD < CARL9170_NUM_TX_LIMIT_SOFT);
304         BUILD_BUG_ON(CARL9170_NUM_TX_LIMIT_HARD >= CARL9170_BAW_BITS);
305
306         /* reinitialize queues statistics */
307         memset(&ar->tx_stats, 0, sizeof(ar->tx_stats));
308         for (i = 0; i < ar->hw->queues; i++)
309                 ar->tx_stats[i].limit = CARL9170_NUM_TX_LIMIT_HARD;
310
311         for (i = 0; i < DIV_ROUND_UP(ar->fw.mem_blocks, BITS_PER_LONG); i++)
312                 ar->mem_bitmap[i] = 0;
313
314         rcu_read_lock();
315         list_for_each_entry_rcu(cvif, &ar->vif_list, list) {
316                 spin_lock_bh(&ar->beacon_lock);
317                 dev_kfree_skb_any(cvif->beacon);
318                 cvif->beacon = NULL;
319                 spin_unlock_bh(&ar->beacon_lock);
320         }
321         rcu_read_unlock();
322
323         atomic_set(&ar->tx_ampdu_upload, 0);
324         atomic_set(&ar->tx_ampdu_scheduler, 0);
325         atomic_set(&ar->tx_total_pending, 0);
326         atomic_set(&ar->tx_total_queued, 0);
327         atomic_set(&ar->mem_free_blocks, ar->fw.mem_blocks);
328 }
329
330 #define CARL9170_FILL_QUEUE(queue, ai_fs, cwmin, cwmax, _txop)          \
331 do {                                                                    \
332         queue.aifs = ai_fs;                                             \
333         queue.cw_min = cwmin;                                           \
334         queue.cw_max = cwmax;                                           \
335         queue.txop = _txop;                                             \
336 } while (0)
337
338 static int carl9170_op_start(struct ieee80211_hw *hw)
339 {
340         struct ar9170 *ar = hw->priv;
341         int err, i;
342
343         mutex_lock(&ar->mutex);
344
345         carl9170_zap_queues(ar);
346
347         /* reset QoS defaults */
348         CARL9170_FILL_QUEUE(ar->edcf[AR9170_TXQ_VO], 2, 3,     7, 47);
349         CARL9170_FILL_QUEUE(ar->edcf[AR9170_TXQ_VI], 2, 7,    15, 94);
350         CARL9170_FILL_QUEUE(ar->edcf[AR9170_TXQ_BE], 3, 15, 1023,  0);
351         CARL9170_FILL_QUEUE(ar->edcf[AR9170_TXQ_BK], 7, 15, 1023,  0);
352         CARL9170_FILL_QUEUE(ar->edcf[AR9170_TXQ_SPECIAL], 2, 3, 7, 0);
353
354         ar->current_factor = ar->current_density = -1;
355         /* "The first key is unique." */
356         ar->usedkeys = 1;
357         ar->filter_state = 0;
358         ar->ps.last_action = jiffies;
359         ar->ps.last_slept = jiffies;
360         ar->erp_mode = CARL9170_ERP_AUTO;
361         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
422 out:
423         mutex_unlock(&ar->mutex);
424         return err;
425 }
426
427 static 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
439 static 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_assign_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
464 static 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
504 void 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
541 static 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
556 static 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
580 static 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
653 init:
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
676 unlock:
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_assign_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
695 static 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_assign_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
751 unlock:
752         mutex_unlock(&ar->mutex);
753
754         synchronize_rcu();
755 }
756
757 void carl9170_ps_check(struct ar9170 *ar)
758 {
759         ieee80211_queue_work(ar->hw, &ar->ps_work);
760 }
761
762 /* caller must hold ar->mutex */
763 static 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
791 static 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
801 static 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
823 static 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
839 static 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_POWER) {
857                 /* TODO */
858                 err = 0;
859         }
860
861         if (changed & IEEE80211_CONF_CHANGE_SMPS) {
862                 /* TODO */
863                 err = 0;
864         }
865
866         if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
867                 /* adjust slot time for 5 GHz */
868                 err = carl9170_set_slot_time(ar);
869                 if (err)
870                         goto out;
871
872                 err = carl9170_update_survey(ar, true, false);
873                 if (err)
874                         goto out;
875
876                 err = carl9170_set_channel(ar, hw->conf.channel,
877                         hw->conf.channel_type, CARL9170_RFI_NONE);
878                 if (err)
879                         goto out;
880
881                 err = carl9170_update_survey(ar, false, true);
882                 if (err)
883                         goto out;
884
885                 err = carl9170_set_dyn_sifs_ack(ar);
886                 if (err)
887                         goto out;
888
889                 err = carl9170_set_rts_cts_rate(ar);
890                 if (err)
891                         goto out;
892         }
893
894 out:
895         mutex_unlock(&ar->mutex);
896         return err;
897 }
898
899 static u64 carl9170_op_prepare_multicast(struct ieee80211_hw *hw,
900                                          struct netdev_hw_addr_list *mc_list)
901 {
902         struct netdev_hw_addr *ha;
903         u64 mchash;
904
905         /* always get broadcast frames */
906         mchash = 1ULL << (0xff >> 2);
907
908         netdev_hw_addr_list_for_each(ha, mc_list)
909                 mchash |= 1ULL << (ha->addr[5] >> 2);
910
911         return mchash;
912 }
913
914 static void carl9170_op_configure_filter(struct ieee80211_hw *hw,
915                                          unsigned int changed_flags,
916                                          unsigned int *new_flags,
917                                          u64 multicast)
918 {
919         struct ar9170 *ar = hw->priv;
920
921         /* mask supported flags */
922         *new_flags &= FIF_ALLMULTI | ar->rx_filter_caps;
923
924         if (!IS_ACCEPTING_CMD(ar))
925                 return;
926
927         mutex_lock(&ar->mutex);
928
929         ar->filter_state = *new_flags;
930         /*
931          * We can support more by setting the sniffer bit and
932          * then checking the error flags, later.
933          */
934
935         if (*new_flags & FIF_ALLMULTI)
936                 multicast = ~0ULL;
937
938         if (multicast != ar->cur_mc_hash)
939                 WARN_ON(carl9170_update_multicast(ar, multicast));
940
941         if (changed_flags & (FIF_OTHER_BSS | FIF_PROMISC_IN_BSS)) {
942                 ar->sniffer_enabled = !!(*new_flags &
943                         (FIF_OTHER_BSS | FIF_PROMISC_IN_BSS));
944
945                 WARN_ON(carl9170_set_operating_mode(ar));
946         }
947
948         if (ar->fw.rx_filter && changed_flags & ar->rx_filter_caps) {
949                 u32 rx_filter = 0;
950
951                 if (!(*new_flags & (FIF_FCSFAIL | FIF_PLCPFAIL)))
952                         rx_filter |= CARL9170_RX_FILTER_BAD;
953
954                 if (!(*new_flags & FIF_CONTROL))
955                         rx_filter |= CARL9170_RX_FILTER_CTL_OTHER;
956
957                 if (!(*new_flags & FIF_PSPOLL))
958                         rx_filter |= CARL9170_RX_FILTER_CTL_PSPOLL;
959
960                 if (!(*new_flags & (FIF_OTHER_BSS | FIF_PROMISC_IN_BSS))) {
961                         rx_filter |= CARL9170_RX_FILTER_OTHER_RA;
962                         rx_filter |= CARL9170_RX_FILTER_DECRY_FAIL;
963                 }
964
965                 WARN_ON(carl9170_rx_filter(ar, rx_filter));
966         }
967
968         mutex_unlock(&ar->mutex);
969 }
970
971
972 static void carl9170_op_bss_info_changed(struct ieee80211_hw *hw,
973                                          struct ieee80211_vif *vif,
974                                          struct ieee80211_bss_conf *bss_conf,
975                                          u32 changed)
976 {
977         struct ar9170 *ar = hw->priv;
978         struct ath_common *common = &ar->common;
979         int err = 0;
980         struct carl9170_vif_info *vif_priv;
981         struct ieee80211_vif *main_vif;
982
983         mutex_lock(&ar->mutex);
984         vif_priv = (void *) vif->drv_priv;
985         main_vif = carl9170_get_main_vif(ar);
986         if (WARN_ON(!main_vif))
987                 goto out;
988
989         if (changed & BSS_CHANGED_BEACON_ENABLED) {
990                 struct carl9170_vif_info *iter;
991                 int i = 0;
992
993                 vif_priv->enable_beacon = bss_conf->enable_beacon;
994                 rcu_read_lock();
995                 list_for_each_entry_rcu(iter, &ar->vif_list, list) {
996                         if (iter->active && iter->enable_beacon)
997                                 i++;
998
999                 }
1000                 rcu_read_unlock();
1001
1002                 ar->beacon_enabled = i;
1003         }
1004
1005         if (changed & BSS_CHANGED_BEACON) {
1006                 err = carl9170_update_beacon(ar, false);
1007                 if (err)
1008                         goto out;
1009         }
1010
1011         if (changed & (BSS_CHANGED_BEACON_ENABLED | BSS_CHANGED_BEACON |
1012                        BSS_CHANGED_BEACON_INT)) {
1013
1014                 if (main_vif != vif) {
1015                         bss_conf->beacon_int = main_vif->bss_conf.beacon_int;
1016                         bss_conf->dtim_period = main_vif->bss_conf.dtim_period;
1017                 }
1018
1019                 /*
1020                  * Therefore a hard limit for the broadcast traffic should
1021                  * prevent false alarms.
1022                  */
1023                 if (vif->type != NL80211_IFTYPE_STATION &&
1024                     (bss_conf->beacon_int * bss_conf->dtim_period >=
1025                      (CARL9170_QUEUE_STUCK_TIMEOUT / 2))) {
1026                         err = -EINVAL;
1027                         goto out;
1028                 }
1029
1030                 err = carl9170_set_beacon_timers(ar);
1031                 if (err)
1032                         goto out;
1033         }
1034
1035         if (changed & BSS_CHANGED_HT) {
1036                 /* TODO */
1037                 err = 0;
1038                 if (err)
1039                         goto out;
1040         }
1041
1042         if (main_vif != vif)
1043                 goto out;
1044
1045         /*
1046          * The following settings can only be changed by the
1047          * master interface.
1048          */
1049
1050         if (changed & BSS_CHANGED_BSSID) {
1051                 memcpy(common->curbssid, bss_conf->bssid, ETH_ALEN);
1052                 err = carl9170_set_operating_mode(ar);
1053                 if (err)
1054                         goto out;
1055         }
1056
1057         if (changed & BSS_CHANGED_ASSOC) {
1058                 ar->common.curaid = bss_conf->aid;
1059                 err = carl9170_set_beacon_timers(ar);
1060                 if (err)
1061                         goto out;
1062         }
1063
1064         if (changed & BSS_CHANGED_ERP_SLOT) {
1065                 err = carl9170_set_slot_time(ar);
1066                 if (err)
1067                         goto out;
1068         }
1069
1070         if (changed & BSS_CHANGED_BASIC_RATES) {
1071                 err = carl9170_set_mac_rates(ar);
1072                 if (err)
1073                         goto out;
1074         }
1075
1076 out:
1077         WARN_ON_ONCE(err && IS_STARTED(ar));
1078         mutex_unlock(&ar->mutex);
1079 }
1080
1081 static u64 carl9170_op_get_tsf(struct ieee80211_hw *hw,
1082                                struct ieee80211_vif *vif)
1083 {
1084         struct ar9170 *ar = hw->priv;
1085         struct carl9170_tsf_rsp tsf;
1086         int err;
1087
1088         mutex_lock(&ar->mutex);
1089         err = carl9170_exec_cmd(ar, CARL9170_CMD_READ_TSF,
1090                                 0, NULL, sizeof(tsf), &tsf);
1091         mutex_unlock(&ar->mutex);
1092         if (WARN_ON(err))
1093                 return 0;
1094
1095         return le64_to_cpu(tsf.tsf_64);
1096 }
1097
1098 static int carl9170_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
1099                                struct ieee80211_vif *vif,
1100                                struct ieee80211_sta *sta,
1101                                struct ieee80211_key_conf *key)
1102 {
1103         struct ar9170 *ar = hw->priv;
1104         int err = 0, i;
1105         u8 ktype;
1106
1107         if (ar->disable_offload || !vif)
1108                 return -EOPNOTSUPP;
1109
1110         /*
1111          * We have to fall back to software encryption, whenever
1112          * the user choose to participates in an IBSS or is connected
1113          * to more than one network.
1114          *
1115          * This is very unfortunate, because some machines cannot handle
1116          * the high througput speed in 802.11n networks.
1117          */
1118
1119         if (!is_main_vif(ar, vif)) {
1120                 mutex_lock(&ar->mutex);
1121                 goto err_softw;
1122         }
1123
1124         /*
1125          * While the hardware supports *catch-all* key, for offloading
1126          * group-key en-/de-cryption. The way of how the hardware
1127          * decides which keyId maps to which key, remains a mystery...
1128          */
1129         if ((vif->type != NL80211_IFTYPE_STATION &&
1130              vif->type != NL80211_IFTYPE_ADHOC) &&
1131             !(key->flags & IEEE80211_KEY_FLAG_PAIRWISE))
1132                 return -EOPNOTSUPP;
1133
1134         switch (key->cipher) {
1135         case WLAN_CIPHER_SUITE_WEP40:
1136                 ktype = AR9170_ENC_ALG_WEP64;
1137                 break;
1138         case WLAN_CIPHER_SUITE_WEP104:
1139                 ktype = AR9170_ENC_ALG_WEP128;
1140                 break;
1141         case WLAN_CIPHER_SUITE_TKIP:
1142                 ktype = AR9170_ENC_ALG_TKIP;
1143                 break;
1144         case WLAN_CIPHER_SUITE_CCMP:
1145                 ktype = AR9170_ENC_ALG_AESCCMP;
1146                 break;
1147         default:
1148                 return -EOPNOTSUPP;
1149         }
1150
1151         mutex_lock(&ar->mutex);
1152         if (cmd == SET_KEY) {
1153                 if (!IS_STARTED(ar)) {
1154                         err = -EOPNOTSUPP;
1155                         goto out;
1156                 }
1157
1158                 if (!(key->flags & IEEE80211_KEY_FLAG_PAIRWISE)) {
1159                         sta = NULL;
1160
1161                         i = 64 + key->keyidx;
1162                 } else {
1163                         for (i = 0; i < 64; i++)
1164                                 if (!(ar->usedkeys & BIT(i)))
1165                                         break;
1166                         if (i == 64)
1167                                 goto err_softw;
1168                 }
1169
1170                 key->hw_key_idx = i;
1171
1172                 err = carl9170_upload_key(ar, i, sta ? sta->addr : NULL,
1173                                           ktype, 0, key->key,
1174                                           min_t(u8, 16, key->keylen));
1175                 if (err)
1176                         goto out;
1177
1178                 if (key->cipher == WLAN_CIPHER_SUITE_TKIP) {
1179                         err = carl9170_upload_key(ar, i, sta ? sta->addr :
1180                                                   NULL, ktype, 1,
1181                                                   key->key + 16, 16);
1182                         if (err)
1183                                 goto out;
1184
1185                         /*
1186                          * hardware is not capable generating MMIC
1187                          * of fragmented frames!
1188                          */
1189                         key->flags |= IEEE80211_KEY_FLAG_GENERATE_MMIC;
1190                 }
1191
1192                 if (i < 64)
1193                         ar->usedkeys |= BIT(i);
1194
1195                 key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
1196         } else {
1197                 if (!IS_STARTED(ar)) {
1198                         /* The device is gone... together with the key ;-) */
1199                         err = 0;
1200                         goto out;
1201                 }
1202
1203                 if (key->hw_key_idx < 64) {
1204                         ar->usedkeys &= ~BIT(key->hw_key_idx);
1205                 } else {
1206                         err = carl9170_upload_key(ar, key->hw_key_idx, NULL,
1207                                                   AR9170_ENC_ALG_NONE, 0,
1208                                                   NULL, 0);
1209                         if (err)
1210                                 goto out;
1211
1212                         if (key->cipher == WLAN_CIPHER_SUITE_TKIP) {
1213                                 err = carl9170_upload_key(ar, key->hw_key_idx,
1214                                                           NULL,
1215                                                           AR9170_ENC_ALG_NONE,
1216                                                           1, NULL, 0);
1217                                 if (err)
1218                                         goto out;
1219                         }
1220
1221                 }
1222
1223                 err = carl9170_disable_key(ar, key->hw_key_idx);
1224                 if (err)
1225                         goto out;
1226         }
1227
1228 out:
1229         mutex_unlock(&ar->mutex);
1230         return err;
1231
1232 err_softw:
1233         if (!ar->rx_software_decryption) {
1234                 ar->rx_software_decryption = true;
1235                 carl9170_set_operating_mode(ar);
1236         }
1237         mutex_unlock(&ar->mutex);
1238         return -ENOSPC;
1239 }
1240
1241 static int carl9170_op_sta_add(struct ieee80211_hw *hw,
1242                                struct ieee80211_vif *vif,
1243                                struct ieee80211_sta *sta)
1244 {
1245         struct carl9170_sta_info *sta_info = (void *) sta->drv_priv;
1246         unsigned int i;
1247
1248         atomic_set(&sta_info->pending_frames, 0);
1249
1250         if (sta->ht_cap.ht_supported) {
1251                 if (sta->ht_cap.ampdu_density > 6) {
1252                         /*
1253                          * HW does support 16us AMPDU density.
1254                          * No HT-Xmit for station.
1255                          */
1256
1257                         return 0;
1258                 }
1259
1260                 for (i = 0; i < CARL9170_NUM_TID; i++)
1261                         rcu_assign_pointer(sta_info->agg[i], NULL);
1262
1263                 sta_info->ampdu_max_len = 1 << (3 + sta->ht_cap.ampdu_factor);
1264                 sta_info->ht_sta = true;
1265         }
1266
1267         return 0;
1268 }
1269
1270 static int carl9170_op_sta_remove(struct ieee80211_hw *hw,
1271                                 struct ieee80211_vif *vif,
1272                                 struct ieee80211_sta *sta)
1273 {
1274         struct ar9170 *ar = hw->priv;
1275         struct carl9170_sta_info *sta_info = (void *) sta->drv_priv;
1276         unsigned int i;
1277         bool cleanup = false;
1278
1279         if (sta->ht_cap.ht_supported) {
1280
1281                 sta_info->ht_sta = false;
1282
1283                 rcu_read_lock();
1284                 for (i = 0; i < CARL9170_NUM_TID; i++) {
1285                         struct carl9170_sta_tid *tid_info;
1286
1287                         tid_info = rcu_dereference(sta_info->agg[i]);
1288                         rcu_assign_pointer(sta_info->agg[i], NULL);
1289
1290                         if (!tid_info)
1291                                 continue;
1292
1293                         spin_lock_bh(&ar->tx_ampdu_list_lock);
1294                         if (tid_info->state > CARL9170_TID_STATE_SHUTDOWN)
1295                                 tid_info->state = CARL9170_TID_STATE_SHUTDOWN;
1296                         spin_unlock_bh(&ar->tx_ampdu_list_lock);
1297                         cleanup = true;
1298                 }
1299                 rcu_read_unlock();
1300
1301                 if (cleanup)
1302                         carl9170_ampdu_gc(ar);
1303         }
1304
1305         return 0;
1306 }
1307
1308 static int carl9170_op_conf_tx(struct ieee80211_hw *hw,
1309                                struct ieee80211_vif *vif, u16 queue,
1310                                const struct ieee80211_tx_queue_params *param)
1311 {
1312         struct ar9170 *ar = hw->priv;
1313         int ret;
1314
1315         mutex_lock(&ar->mutex);
1316         if (queue < ar->hw->queues) {
1317                 memcpy(&ar->edcf[ar9170_qmap[queue]], param, sizeof(*param));
1318                 ret = carl9170_set_qos(ar);
1319         } else {
1320                 ret = -EINVAL;
1321         }
1322
1323         mutex_unlock(&ar->mutex);
1324         return ret;
1325 }
1326
1327 static void carl9170_ampdu_work(struct work_struct *work)
1328 {
1329         struct ar9170 *ar = container_of(work, struct ar9170,
1330                                          ampdu_work);
1331
1332         if (!IS_STARTED(ar))
1333                 return;
1334
1335         mutex_lock(&ar->mutex);
1336         carl9170_ampdu_gc(ar);
1337         mutex_unlock(&ar->mutex);
1338 }
1339
1340 static int carl9170_op_ampdu_action(struct ieee80211_hw *hw,
1341                                     struct ieee80211_vif *vif,
1342                                     enum ieee80211_ampdu_mlme_action action,
1343                                     struct ieee80211_sta *sta,
1344                                     u16 tid, u16 *ssn, u8 buf_size)
1345 {
1346         struct ar9170 *ar = hw->priv;
1347         struct carl9170_sta_info *sta_info = (void *) sta->drv_priv;
1348         struct carl9170_sta_tid *tid_info;
1349
1350         if (modparam_noht)
1351                 return -EOPNOTSUPP;
1352
1353         switch (action) {
1354         case IEEE80211_AMPDU_TX_START:
1355                 if (!sta_info->ht_sta)
1356                         return -EOPNOTSUPP;
1357
1358                 rcu_read_lock();
1359                 if (rcu_dereference(sta_info->agg[tid])) {
1360                         rcu_read_unlock();
1361                         return -EBUSY;
1362                 }
1363
1364                 tid_info = kzalloc(sizeof(struct carl9170_sta_tid),
1365                                    GFP_ATOMIC);
1366                 if (!tid_info) {
1367                         rcu_read_unlock();
1368                         return -ENOMEM;
1369                 }
1370
1371                 tid_info->hsn = tid_info->bsn = tid_info->snx = (*ssn);
1372                 tid_info->state = CARL9170_TID_STATE_PROGRESS;
1373                 tid_info->tid = tid;
1374                 tid_info->max = sta_info->ampdu_max_len;
1375
1376                 INIT_LIST_HEAD(&tid_info->list);
1377                 INIT_LIST_HEAD(&tid_info->tmp_list);
1378                 skb_queue_head_init(&tid_info->queue);
1379                 spin_lock_init(&tid_info->lock);
1380
1381                 spin_lock_bh(&ar->tx_ampdu_list_lock);
1382                 ar->tx_ampdu_list_len++;
1383                 list_add_tail_rcu(&tid_info->list, &ar->tx_ampdu_list);
1384                 rcu_assign_pointer(sta_info->agg[tid], tid_info);
1385                 spin_unlock_bh(&ar->tx_ampdu_list_lock);
1386                 rcu_read_unlock();
1387
1388                 ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid);
1389                 break;
1390
1391         case IEEE80211_AMPDU_TX_STOP:
1392                 rcu_read_lock();
1393                 tid_info = rcu_dereference(sta_info->agg[tid]);
1394                 if (tid_info) {
1395                         spin_lock_bh(&ar->tx_ampdu_list_lock);
1396                         if (tid_info->state > CARL9170_TID_STATE_SHUTDOWN)
1397                                 tid_info->state = CARL9170_TID_STATE_SHUTDOWN;
1398                         spin_unlock_bh(&ar->tx_ampdu_list_lock);
1399                 }
1400
1401                 rcu_assign_pointer(sta_info->agg[tid], NULL);
1402                 rcu_read_unlock();
1403
1404                 ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid);
1405                 ieee80211_queue_work(ar->hw, &ar->ampdu_work);
1406                 break;
1407
1408         case IEEE80211_AMPDU_TX_OPERATIONAL:
1409                 rcu_read_lock();
1410                 tid_info = rcu_dereference(sta_info->agg[tid]);
1411
1412                 sta_info->stats[tid].clear = true;
1413                 sta_info->stats[tid].req = false;
1414
1415                 if (tid_info) {
1416                         bitmap_zero(tid_info->bitmap, CARL9170_BAW_SIZE);
1417                         tid_info->state = CARL9170_TID_STATE_IDLE;
1418                 }
1419                 rcu_read_unlock();
1420
1421                 if (WARN_ON_ONCE(!tid_info))
1422                         return -EFAULT;
1423
1424                 break;
1425
1426         case IEEE80211_AMPDU_RX_START:
1427         case IEEE80211_AMPDU_RX_STOP:
1428                 /* Handled by hardware */
1429                 break;
1430
1431         default:
1432                 return -EOPNOTSUPP;
1433         }
1434
1435         return 0;
1436 }
1437
1438 #ifdef CONFIG_CARL9170_WPC
1439 static int carl9170_register_wps_button(struct ar9170 *ar)
1440 {
1441         struct input_dev *input;
1442         int err;
1443
1444         if (!(ar->features & CARL9170_WPS_BUTTON))
1445                 return 0;
1446
1447         input = input_allocate_device();
1448         if (!input)
1449                 return -ENOMEM;
1450
1451         snprintf(ar->wps.name, sizeof(ar->wps.name), "%s WPS Button",
1452                  wiphy_name(ar->hw->wiphy));
1453
1454         snprintf(ar->wps.phys, sizeof(ar->wps.phys),
1455                  "ieee80211/%s/input0", wiphy_name(ar->hw->wiphy));
1456
1457         input->name = ar->wps.name;
1458         input->phys = ar->wps.phys;
1459         input->id.bustype = BUS_USB;
1460         input->dev.parent = &ar->hw->wiphy->dev;
1461
1462         input_set_capability(input, EV_KEY, KEY_WPS_BUTTON);
1463
1464         err = input_register_device(input);
1465         if (err) {
1466                 input_free_device(input);
1467                 return err;
1468         }
1469
1470         ar->wps.pbc = input;
1471         return 0;
1472 }
1473 #endif /* CONFIG_CARL9170_WPC */
1474
1475 #ifdef CONFIG_CARL9170_HWRNG
1476 static int carl9170_rng_get(struct ar9170 *ar)
1477 {
1478
1479 #define RW      (CARL9170_MAX_CMD_PAYLOAD_LEN / sizeof(u32))
1480 #define RB      (CARL9170_MAX_CMD_PAYLOAD_LEN)
1481
1482         static const __le32 rng_load[RW] = {
1483                 [0 ... (RW - 1)] = cpu_to_le32(AR9170_RAND_REG_NUM)};
1484
1485         u32 buf[RW];
1486
1487         unsigned int i, off = 0, transfer, count;
1488         int err;
1489
1490         BUILD_BUG_ON(RB > CARL9170_MAX_CMD_PAYLOAD_LEN);
1491
1492         if (!IS_ACCEPTING_CMD(ar) || !ar->rng.initialized)
1493                 return -EAGAIN;
1494
1495         count = ARRAY_SIZE(ar->rng.cache);
1496         while (count) {
1497                 err = carl9170_exec_cmd(ar, CARL9170_CMD_RREG,
1498                                         RB, (u8 *) rng_load,
1499                                         RB, (u8 *) buf);
1500                 if (err)
1501                         return err;
1502
1503                 transfer = min_t(unsigned int, count, RW);
1504                 for (i = 0; i < transfer; i++)
1505                         ar->rng.cache[off + i] = buf[i];
1506
1507                 off += transfer;
1508                 count -= transfer;
1509         }
1510
1511         ar->rng.cache_idx = 0;
1512
1513 #undef RW
1514 #undef RB
1515         return 0;
1516 }
1517
1518 static int carl9170_rng_read(struct hwrng *rng, u32 *data)
1519 {
1520         struct ar9170 *ar = (struct ar9170 *)rng->priv;
1521         int ret = -EIO;
1522
1523         mutex_lock(&ar->mutex);
1524         if (ar->rng.cache_idx >= ARRAY_SIZE(ar->rng.cache)) {
1525                 ret = carl9170_rng_get(ar);
1526                 if (ret) {
1527                         mutex_unlock(&ar->mutex);
1528                         return ret;
1529                 }
1530         }
1531
1532         *data = ar->rng.cache[ar->rng.cache_idx++];
1533         mutex_unlock(&ar->mutex);
1534
1535         return sizeof(u16);
1536 }
1537
1538 static void carl9170_unregister_hwrng(struct ar9170 *ar)
1539 {
1540         if (ar->rng.initialized) {
1541                 hwrng_unregister(&ar->rng.rng);
1542                 ar->rng.initialized = false;
1543         }
1544 }
1545
1546 static int carl9170_register_hwrng(struct ar9170 *ar)
1547 {
1548         int err;
1549
1550         snprintf(ar->rng.name, ARRAY_SIZE(ar->rng.name),
1551                  "%s_%s", KBUILD_MODNAME, wiphy_name(ar->hw->wiphy));
1552         ar->rng.rng.name = ar->rng.name;
1553         ar->rng.rng.data_read = carl9170_rng_read;
1554         ar->rng.rng.priv = (unsigned long)ar;
1555
1556         if (WARN_ON(ar->rng.initialized))
1557                 return -EALREADY;
1558
1559         err = hwrng_register(&ar->rng.rng);
1560         if (err) {
1561                 dev_err(&ar->udev->dev, "Failed to register the random "
1562                         "number generator (%d)\n", err);
1563                 return err;
1564         }
1565
1566         ar->rng.initialized = true;
1567
1568         err = carl9170_rng_get(ar);
1569         if (err) {
1570                 carl9170_unregister_hwrng(ar);
1571                 return err;
1572         }
1573
1574         return 0;
1575 }
1576 #endif /* CONFIG_CARL9170_HWRNG */
1577
1578 static int carl9170_op_get_survey(struct ieee80211_hw *hw, int idx,
1579                                 struct survey_info *survey)
1580 {
1581         struct ar9170 *ar = hw->priv;
1582         struct ieee80211_channel *chan;
1583         struct ieee80211_supported_band *band;
1584         int err, b, i;
1585
1586         chan = ar->channel;
1587         if (!chan)
1588                 return -ENODEV;
1589
1590         if (idx == chan->hw_value) {
1591                 mutex_lock(&ar->mutex);
1592                 err = carl9170_update_survey(ar, false, true);
1593                 mutex_unlock(&ar->mutex);
1594                 if (err)
1595                         return err;
1596         }
1597
1598         for (b = 0; b < IEEE80211_NUM_BANDS; b++) {
1599                 band = ar->hw->wiphy->bands[b];
1600
1601                 if (!band)
1602                         continue;
1603
1604                 for (i = 0; i < band->n_channels; i++) {
1605                         if (band->channels[i].hw_value == idx) {
1606                                 chan = &band->channels[i];
1607                                 goto found;
1608                         }
1609                 }
1610         }
1611         return -ENOENT;
1612
1613 found:
1614         memcpy(survey, &ar->survey[idx], sizeof(*survey));
1615
1616         survey->channel = chan;
1617         survey->filled = SURVEY_INFO_NOISE_DBM;
1618
1619         if (ar->channel == chan)
1620                 survey->filled |= SURVEY_INFO_IN_USE;
1621
1622         if (ar->fw.hw_counters) {
1623                 survey->filled |= SURVEY_INFO_CHANNEL_TIME |
1624                                   SURVEY_INFO_CHANNEL_TIME_BUSY |
1625                                   SURVEY_INFO_CHANNEL_TIME_TX;
1626         }
1627
1628         return 0;
1629 }
1630
1631 static void carl9170_op_flush(struct ieee80211_hw *hw, bool drop)
1632 {
1633         struct ar9170 *ar = hw->priv;
1634         unsigned int vid;
1635
1636         mutex_lock(&ar->mutex);
1637         for_each_set_bit(vid, &ar->vif_bitmap, ar->fw.vif_num)
1638                 carl9170_flush_cab(ar, vid);
1639
1640         carl9170_flush(ar, drop);
1641         mutex_unlock(&ar->mutex);
1642 }
1643
1644 static int carl9170_op_get_stats(struct ieee80211_hw *hw,
1645                                  struct ieee80211_low_level_stats *stats)
1646 {
1647         struct ar9170 *ar = hw->priv;
1648
1649         memset(stats, 0, sizeof(*stats));
1650         stats->dot11ACKFailureCount = ar->tx_ack_failures;
1651         stats->dot11FCSErrorCount = ar->tx_fcs_errors;
1652         return 0;
1653 }
1654
1655 static void carl9170_op_sta_notify(struct ieee80211_hw *hw,
1656                                    struct ieee80211_vif *vif,
1657                                    enum sta_notify_cmd cmd,
1658                                    struct ieee80211_sta *sta)
1659 {
1660         struct carl9170_sta_info *sta_info = (void *) sta->drv_priv;
1661
1662         switch (cmd) {
1663         case STA_NOTIFY_SLEEP:
1664                 sta_info->sleeping = true;
1665                 if (atomic_read(&sta_info->pending_frames))
1666                         ieee80211_sta_block_awake(hw, sta, true);
1667                 break;
1668
1669         case STA_NOTIFY_AWAKE:
1670                 sta_info->sleeping = false;
1671                 break;
1672         }
1673 }
1674
1675 static bool carl9170_tx_frames_pending(struct ieee80211_hw *hw)
1676 {
1677         struct ar9170 *ar = hw->priv;
1678
1679         return !!atomic_read(&ar->tx_total_queued);
1680 }
1681
1682 static const struct ieee80211_ops carl9170_ops = {
1683         .start                  = carl9170_op_start,
1684         .stop                   = carl9170_op_stop,
1685         .tx                     = carl9170_op_tx,
1686         .flush                  = carl9170_op_flush,
1687         .add_interface          = carl9170_op_add_interface,
1688         .remove_interface       = carl9170_op_remove_interface,
1689         .config                 = carl9170_op_config,
1690         .prepare_multicast      = carl9170_op_prepare_multicast,
1691         .configure_filter       = carl9170_op_configure_filter,
1692         .conf_tx                = carl9170_op_conf_tx,
1693         .bss_info_changed       = carl9170_op_bss_info_changed,
1694         .get_tsf                = carl9170_op_get_tsf,
1695         .set_key                = carl9170_op_set_key,
1696         .sta_add                = carl9170_op_sta_add,
1697         .sta_remove             = carl9170_op_sta_remove,
1698         .sta_notify             = carl9170_op_sta_notify,
1699         .get_survey             = carl9170_op_get_survey,
1700         .get_stats              = carl9170_op_get_stats,
1701         .ampdu_action           = carl9170_op_ampdu_action,
1702         .tx_frames_pending      = carl9170_tx_frames_pending,
1703 };
1704
1705 void *carl9170_alloc(size_t priv_size)
1706 {
1707         struct ieee80211_hw *hw;
1708         struct ar9170 *ar;
1709         struct sk_buff *skb;
1710         int i;
1711
1712         /*
1713          * this buffer is used for rx stream reconstruction.
1714          * Under heavy load this device (or the transport layer?)
1715          * tends to split the streams into separate rx descriptors.
1716          */
1717
1718         skb = __dev_alloc_skb(AR9170_RX_STREAM_MAX_SIZE, GFP_KERNEL);
1719         if (!skb)
1720                 goto err_nomem;
1721
1722         hw = ieee80211_alloc_hw(priv_size, &carl9170_ops);
1723         if (!hw)
1724                 goto err_nomem;
1725
1726         ar = hw->priv;
1727         ar->hw = hw;
1728         ar->rx_failover = skb;
1729
1730         memset(&ar->rx_plcp, 0, sizeof(struct ar9170_rx_head));
1731         ar->rx_has_plcp = false;
1732
1733         /*
1734          * Here's a hidden pitfall!
1735          *
1736          * All 4 AC queues work perfectly well under _legacy_ operation.
1737          * However as soon as aggregation is enabled, the traffic flow
1738          * gets very bumpy. Therefore we have to _switch_ to a
1739          * software AC with a single HW queue.
1740          */
1741         hw->queues = __AR9170_NUM_TXQ;
1742
1743         mutex_init(&ar->mutex);
1744         spin_lock_init(&ar->beacon_lock);
1745         spin_lock_init(&ar->cmd_lock);
1746         spin_lock_init(&ar->tx_stats_lock);
1747         spin_lock_init(&ar->tx_ampdu_list_lock);
1748         spin_lock_init(&ar->mem_lock);
1749         spin_lock_init(&ar->state_lock);
1750         atomic_set(&ar->pending_restarts, 0);
1751         ar->vifs = 0;
1752         for (i = 0; i < ar->hw->queues; i++) {
1753                 skb_queue_head_init(&ar->tx_status[i]);
1754                 skb_queue_head_init(&ar->tx_pending[i]);
1755         }
1756         INIT_WORK(&ar->ps_work, carl9170_ps_work);
1757         INIT_WORK(&ar->ping_work, carl9170_ping_work);
1758         INIT_WORK(&ar->restart_work, carl9170_restart_work);
1759         INIT_WORK(&ar->ampdu_work, carl9170_ampdu_work);
1760         INIT_DELAYED_WORK(&ar->stat_work, carl9170_stat_work);
1761         INIT_DELAYED_WORK(&ar->tx_janitor, carl9170_tx_janitor);
1762         INIT_LIST_HEAD(&ar->tx_ampdu_list);
1763         rcu_assign_pointer(ar->tx_ampdu_iter,
1764                            (struct carl9170_sta_tid *) &ar->tx_ampdu_list);
1765
1766         bitmap_zero(&ar->vif_bitmap, ar->fw.vif_num);
1767         INIT_LIST_HEAD(&ar->vif_list);
1768         init_completion(&ar->tx_flush);
1769
1770         /* firmware decides which modes we support */
1771         hw->wiphy->interface_modes = 0;
1772
1773         hw->flags |= IEEE80211_HW_RX_INCLUDES_FCS |
1774                      IEEE80211_HW_REPORTS_TX_ACK_STATUS |
1775                      IEEE80211_HW_SUPPORTS_PS |
1776                      IEEE80211_HW_PS_NULLFUNC_STACK |
1777                      IEEE80211_HW_NEED_DTIM_PERIOD |
1778                      IEEE80211_HW_SIGNAL_DBM;
1779
1780         if (!modparam_noht) {
1781                 /*
1782                  * see the comment above, why we allow the user
1783                  * to disable HT by a module parameter.
1784                  */
1785                 hw->flags |= IEEE80211_HW_AMPDU_AGGREGATION;
1786         }
1787
1788         hw->extra_tx_headroom = sizeof(struct _carl9170_tx_superframe);
1789         hw->sta_data_size = sizeof(struct carl9170_sta_info);
1790         hw->vif_data_size = sizeof(struct carl9170_vif_info);
1791
1792         hw->max_rates = CARL9170_TX_MAX_RATES;
1793         hw->max_rate_tries = CARL9170_TX_USER_RATE_TRIES;
1794
1795         for (i = 0; i < ARRAY_SIZE(ar->noise); i++)
1796                 ar->noise[i] = -95; /* ATH_DEFAULT_NOISE_FLOOR */
1797
1798         hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT;
1799         return ar;
1800
1801 err_nomem:
1802         kfree_skb(skb);
1803         return ERR_PTR(-ENOMEM);
1804 }
1805
1806 static int carl9170_read_eeprom(struct ar9170 *ar)
1807 {
1808 #define RW      8       /* number of words to read at once */
1809 #define RB      (sizeof(u32) * RW)
1810         u8 *eeprom = (void *)&ar->eeprom;
1811         __le32 offsets[RW];
1812         int i, j, err;
1813
1814         BUILD_BUG_ON(sizeof(ar->eeprom) & 3);
1815
1816         BUILD_BUG_ON(RB > CARL9170_MAX_CMD_LEN - 4);
1817 #ifndef __CHECKER__
1818         /* don't want to handle trailing remains */
1819         BUILD_BUG_ON(sizeof(ar->eeprom) % RB);
1820 #endif
1821
1822         for (i = 0; i < sizeof(ar->eeprom) / RB; i++) {
1823                 for (j = 0; j < RW; j++)
1824                         offsets[j] = cpu_to_le32(AR9170_EEPROM_START +
1825                                                  RB * i + 4 * j);
1826
1827                 err = carl9170_exec_cmd(ar, CARL9170_CMD_RREG,
1828                                         RB, (u8 *) &offsets,
1829                                         RB, eeprom + RB * i);
1830                 if (err)
1831                         return err;
1832         }
1833
1834 #undef RW
1835 #undef RB
1836         return 0;
1837 }
1838
1839 static int carl9170_parse_eeprom(struct ar9170 *ar)
1840 {
1841         struct ath_regulatory *regulatory = &ar->common.regulatory;
1842         unsigned int rx_streams, tx_streams, tx_params = 0;
1843         int bands = 0;
1844         int chans = 0;
1845
1846         if (ar->eeprom.length == cpu_to_le16(0xffff))
1847                 return -ENODATA;
1848
1849         rx_streams = hweight8(ar->eeprom.rx_mask);
1850         tx_streams = hweight8(ar->eeprom.tx_mask);
1851
1852         if (rx_streams != tx_streams) {
1853                 tx_params = IEEE80211_HT_MCS_TX_RX_DIFF;
1854
1855                 WARN_ON(!(tx_streams >= 1 && tx_streams <=
1856                         IEEE80211_HT_MCS_TX_MAX_STREAMS));
1857
1858                 tx_params = (tx_streams - 1) <<
1859                             IEEE80211_HT_MCS_TX_MAX_STREAMS_SHIFT;
1860
1861                 carl9170_band_2GHz.ht_cap.mcs.tx_params |= tx_params;
1862                 carl9170_band_5GHz.ht_cap.mcs.tx_params |= tx_params;
1863         }
1864
1865         if (ar->eeprom.operating_flags & AR9170_OPFLAG_2GHZ) {
1866                 ar->hw->wiphy->bands[IEEE80211_BAND_2GHZ] =
1867                         &carl9170_band_2GHz;
1868                 chans += carl9170_band_2GHz.n_channels;
1869                 bands++;
1870         }
1871         if (ar->eeprom.operating_flags & AR9170_OPFLAG_5GHZ) {
1872                 ar->hw->wiphy->bands[IEEE80211_BAND_5GHZ] =
1873                         &carl9170_band_5GHz;
1874                 chans += carl9170_band_5GHz.n_channels;
1875                 bands++;
1876         }
1877
1878         if (!bands)
1879                 return -EINVAL;
1880
1881         ar->survey = kzalloc(sizeof(struct survey_info) * chans, GFP_KERNEL);
1882         if (!ar->survey)
1883                 return -ENOMEM;
1884         ar->num_channels = chans;
1885
1886         /*
1887          * I measured this, a bandswitch takes roughly
1888          * 135 ms and a frequency switch about 80.
1889          *
1890          * FIXME: measure these values again once EEPROM settings
1891          *        are used, that will influence them!
1892          */
1893         if (bands == 2)
1894                 ar->hw->channel_change_time = 135 * 1000;
1895         else
1896                 ar->hw->channel_change_time = 80 * 1000;
1897
1898         regulatory->current_rd = le16_to_cpu(ar->eeprom.reg_domain[0]);
1899
1900         /* second part of wiphy init */
1901         SET_IEEE80211_PERM_ADDR(ar->hw, ar->eeprom.mac_address);
1902
1903         return 0;
1904 }
1905
1906 static int carl9170_reg_notifier(struct wiphy *wiphy,
1907                                  struct regulatory_request *request)
1908 {
1909         struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
1910         struct ar9170 *ar = hw->priv;
1911
1912         return ath_reg_notifier_apply(wiphy, request, &ar->common.regulatory);
1913 }
1914
1915 int carl9170_register(struct ar9170 *ar)
1916 {
1917         struct ath_regulatory *regulatory = &ar->common.regulatory;
1918         int err = 0, i;
1919
1920         if (WARN_ON(ar->mem_bitmap))
1921                 return -EINVAL;
1922
1923         ar->mem_bitmap = kzalloc(roundup(ar->fw.mem_blocks, BITS_PER_LONG) *
1924                                  sizeof(unsigned long), GFP_KERNEL);
1925
1926         if (!ar->mem_bitmap)
1927                 return -ENOMEM;
1928
1929         /* try to read EEPROM, init MAC addr */
1930         err = carl9170_read_eeprom(ar);
1931         if (err)
1932                 return err;
1933
1934         err = carl9170_fw_fix_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
1998 err_unreg:
1999         carl9170_unregister(ar);
2000         return err;
2001 }
2002
2003 void 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
2035 void 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 }