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