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