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