cfg80211: remove enum ieee80211_band
[cascardo/linux.git] / drivers / net / wireless / mediatek / mt7601u / init.c
1 /*
2  * (c) Copyright 2002-2010, Ralink Technology, Inc.
3  * Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org>
4  * Copyright (C) 2015 Jakub Kicinski <kubakici@wp.pl>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2
8  * as published by the Free Software Foundation
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  */
15
16 #include "mt7601u.h"
17 #include "eeprom.h"
18 #include "trace.h"
19 #include "mcu.h"
20
21 #include "initvals.h"
22
23 static void
24 mt7601u_set_wlan_state(struct mt7601u_dev *dev, u32 val, bool enable)
25 {
26         int i;
27
28         /* Note: we don't turn off WLAN_CLK because that makes the device
29          *       not respond properly on the probe path.
30          *       In case anyone (PSM?) wants to use this function we can
31          *       bring the clock stuff back and fixup the probe path.
32          */
33
34         if (enable)
35                 val |= (MT_WLAN_FUN_CTRL_WLAN_EN |
36                         MT_WLAN_FUN_CTRL_WLAN_CLK_EN);
37         else
38                 val &= ~(MT_WLAN_FUN_CTRL_WLAN_EN);
39
40         mt7601u_wr(dev, MT_WLAN_FUN_CTRL, val);
41         udelay(20);
42
43         if (enable) {
44                 set_bit(MT7601U_STATE_WLAN_RUNNING, &dev->state);
45         } else {
46                 clear_bit(MT7601U_STATE_WLAN_RUNNING, &dev->state);
47                 return;
48         }
49
50         for (i = 200; i; i--) {
51                 val = mt7601u_rr(dev, MT_CMB_CTRL);
52
53                 if (val & MT_CMB_CTRL_XTAL_RDY && val & MT_CMB_CTRL_PLL_LD)
54                         break;
55
56                 udelay(20);
57         }
58
59         /* Note: vendor driver tries to disable/enable wlan here and retry
60          *       but the code which does it is so buggy it must have never
61          *       triggered, so don't bother.
62          */
63         if (!i)
64                 dev_err(dev->dev, "Error: PLL and XTAL check failed!\n");
65 }
66
67 static void mt7601u_chip_onoff(struct mt7601u_dev *dev, bool enable, bool reset)
68 {
69         u32 val;
70
71         mutex_lock(&dev->hw_atomic_mutex);
72
73         val = mt7601u_rr(dev, MT_WLAN_FUN_CTRL);
74
75         if (reset) {
76                 val |= MT_WLAN_FUN_CTRL_GPIO_OUT_EN;
77                 val &= ~MT_WLAN_FUN_CTRL_FRC_WL_ANT_SEL;
78
79                 if (val & MT_WLAN_FUN_CTRL_WLAN_EN) {
80                         val |= (MT_WLAN_FUN_CTRL_WLAN_RESET |
81                                 MT_WLAN_FUN_CTRL_WLAN_RESET_RF);
82                         mt7601u_wr(dev, MT_WLAN_FUN_CTRL, val);
83                         udelay(20);
84
85                         val &= ~(MT_WLAN_FUN_CTRL_WLAN_RESET |
86                                  MT_WLAN_FUN_CTRL_WLAN_RESET_RF);
87                 }
88         }
89
90         mt7601u_wr(dev, MT_WLAN_FUN_CTRL, val);
91         udelay(20);
92
93         mt7601u_set_wlan_state(dev, val, enable);
94
95         mutex_unlock(&dev->hw_atomic_mutex);
96 }
97
98 static void mt7601u_reset_csr_bbp(struct mt7601u_dev *dev)
99 {
100         mt7601u_wr(dev, MT_MAC_SYS_CTRL, (MT_MAC_SYS_CTRL_RESET_CSR |
101                                           MT_MAC_SYS_CTRL_RESET_BBP));
102         mt7601u_wr(dev, MT_USB_DMA_CFG, 0);
103         msleep(1);
104         mt7601u_wr(dev, MT_MAC_SYS_CTRL, 0);
105 }
106
107 static void mt7601u_init_usb_dma(struct mt7601u_dev *dev)
108 {
109         u32 val;
110
111         val = MT76_SET(MT_USB_DMA_CFG_RX_BULK_AGG_TOUT, MT_USB_AGGR_TIMEOUT) |
112               MT76_SET(MT_USB_DMA_CFG_RX_BULK_AGG_LMT, MT_USB_AGGR_SIZE_LIMIT) |
113               MT_USB_DMA_CFG_RX_BULK_EN |
114               MT_USB_DMA_CFG_TX_BULK_EN;
115         if (dev->in_max_packet == 512)
116                 val |= MT_USB_DMA_CFG_RX_BULK_AGG_EN;
117         mt7601u_wr(dev, MT_USB_DMA_CFG, val);
118
119         val |= MT_USB_DMA_CFG_UDMA_RX_WL_DROP;
120         mt7601u_wr(dev, MT_USB_DMA_CFG, val);
121         val &= ~MT_USB_DMA_CFG_UDMA_RX_WL_DROP;
122         mt7601u_wr(dev, MT_USB_DMA_CFG, val);
123 }
124
125 static int mt7601u_init_bbp(struct mt7601u_dev *dev)
126 {
127         int ret;
128
129         ret = mt7601u_wait_bbp_ready(dev);
130         if (ret)
131                 return ret;
132
133         ret = mt7601u_write_reg_pairs(dev, MT_MCU_MEMMAP_BBP, bbp_common_vals,
134                                       ARRAY_SIZE(bbp_common_vals));
135         if (ret)
136                 return ret;
137
138         return mt7601u_write_reg_pairs(dev, MT_MCU_MEMMAP_BBP, bbp_chip_vals,
139                                        ARRAY_SIZE(bbp_chip_vals));
140 }
141
142 static void
143 mt76_init_beacon_offsets(struct mt7601u_dev *dev)
144 {
145         u16 base = MT_BEACON_BASE;
146         u32 regs[4] = {};
147         int i;
148
149         for (i = 0; i < 16; i++) {
150                 u16 addr = dev->beacon_offsets[i];
151
152                 regs[i / 4] |= ((addr - base) / 64) << (8 * (i % 4));
153         }
154
155         for (i = 0; i < 4; i++)
156                 mt7601u_wr(dev, MT_BCN_OFFSET(i), regs[i]);
157 }
158
159 static int mt7601u_write_mac_initvals(struct mt7601u_dev *dev)
160 {
161         int ret;
162
163         ret = mt7601u_write_reg_pairs(dev, MT_MCU_MEMMAP_WLAN, mac_common_vals,
164                                       ARRAY_SIZE(mac_common_vals));
165         if (ret)
166                 return ret;
167         ret = mt7601u_write_reg_pairs(dev, MT_MCU_MEMMAP_WLAN,
168                                       mac_chip_vals, ARRAY_SIZE(mac_chip_vals));
169         if (ret)
170                 return ret;
171
172         mt76_init_beacon_offsets(dev);
173
174         mt7601u_wr(dev, MT_AUX_CLK_CFG, 0);
175
176         return 0;
177 }
178
179 static int mt7601u_init_wcid_mem(struct mt7601u_dev *dev)
180 {
181         u32 *vals;
182         int i, ret;
183
184         vals = kmalloc(sizeof(*vals) * N_WCIDS * 2, GFP_KERNEL);
185         if (!vals)
186                 return -ENOMEM;
187
188         for (i = 0; i < N_WCIDS; i++)  {
189                 vals[i * 2] = 0xffffffff;
190                 vals[i * 2 + 1] = 0x00ffffff;
191         }
192
193         ret = mt7601u_burst_write_regs(dev, MT_WCID_ADDR_BASE,
194                                        vals, N_WCIDS * 2);
195         kfree(vals);
196
197         return ret;
198 }
199
200 static int mt7601u_init_key_mem(struct mt7601u_dev *dev)
201 {
202         u32 vals[4] = {};
203
204         return mt7601u_burst_write_regs(dev, MT_SKEY_MODE_BASE_0,
205                                         vals, ARRAY_SIZE(vals));
206 }
207
208 static int mt7601u_init_wcid_attr_mem(struct mt7601u_dev *dev)
209 {
210         u32 *vals;
211         int i, ret;
212
213         vals = kmalloc(sizeof(*vals) * N_WCIDS * 2, GFP_KERNEL);
214         if (!vals)
215                 return -ENOMEM;
216
217         for (i = 0; i < N_WCIDS * 2; i++)
218                 vals[i] = 1;
219
220         ret = mt7601u_burst_write_regs(dev, MT_WCID_ATTR_BASE,
221                                        vals, N_WCIDS * 2);
222         kfree(vals);
223
224         return ret;
225 }
226
227 static void mt7601u_reset_counters(struct mt7601u_dev *dev)
228 {
229         mt7601u_rr(dev, MT_RX_STA_CNT0);
230         mt7601u_rr(dev, MT_RX_STA_CNT1);
231         mt7601u_rr(dev, MT_RX_STA_CNT2);
232         mt7601u_rr(dev, MT_TX_STA_CNT0);
233         mt7601u_rr(dev, MT_TX_STA_CNT1);
234         mt7601u_rr(dev, MT_TX_STA_CNT2);
235 }
236
237 int mt7601u_mac_start(struct mt7601u_dev *dev)
238 {
239         mt7601u_wr(dev, MT_MAC_SYS_CTRL, MT_MAC_SYS_CTRL_ENABLE_TX);
240
241         if (!mt76_poll(dev, MT_WPDMA_GLO_CFG, MT_WPDMA_GLO_CFG_TX_DMA_BUSY |
242                        MT_WPDMA_GLO_CFG_RX_DMA_BUSY, 0, 200000))
243                 return -ETIMEDOUT;
244
245         dev->rxfilter = MT_RX_FILTR_CFG_CRC_ERR |
246                 MT_RX_FILTR_CFG_PHY_ERR | MT_RX_FILTR_CFG_PROMISC |
247                 MT_RX_FILTR_CFG_VER_ERR | MT_RX_FILTR_CFG_DUP |
248                 MT_RX_FILTR_CFG_CFACK | MT_RX_FILTR_CFG_CFEND |
249                 MT_RX_FILTR_CFG_ACK | MT_RX_FILTR_CFG_CTS |
250                 MT_RX_FILTR_CFG_RTS | MT_RX_FILTR_CFG_PSPOLL |
251                 MT_RX_FILTR_CFG_BA | MT_RX_FILTR_CFG_CTRL_RSV;
252         mt7601u_wr(dev, MT_RX_FILTR_CFG, dev->rxfilter);
253
254         mt7601u_wr(dev, MT_MAC_SYS_CTRL,
255                    MT_MAC_SYS_CTRL_ENABLE_TX | MT_MAC_SYS_CTRL_ENABLE_RX);
256
257         if (!mt76_poll(dev, MT_WPDMA_GLO_CFG, MT_WPDMA_GLO_CFG_TX_DMA_BUSY |
258                        MT_WPDMA_GLO_CFG_RX_DMA_BUSY, 0, 50))
259                 return -ETIMEDOUT;
260
261         return 0;
262 }
263
264 static void mt7601u_mac_stop_hw(struct mt7601u_dev *dev)
265 {
266         int i, ok;
267
268         if (test_bit(MT7601U_STATE_REMOVED, &dev->state))
269                 return;
270
271         mt76_clear(dev, MT_BEACON_TIME_CFG, MT_BEACON_TIME_CFG_TIMER_EN |
272                    MT_BEACON_TIME_CFG_SYNC_MODE | MT_BEACON_TIME_CFG_TBTT_EN |
273                    MT_BEACON_TIME_CFG_BEACON_TX);
274
275         if (!mt76_poll(dev, MT_USB_DMA_CFG, MT_USB_DMA_CFG_TX_BUSY, 0, 1000))
276                 dev_warn(dev->dev, "Warning: TX DMA did not stop!\n");
277
278         /* Page count on TxQ */
279         i = 200;
280         while (i-- && ((mt76_rr(dev, 0x0438) & 0xffffffff) ||
281                        (mt76_rr(dev, 0x0a30) & 0x000000ff) ||
282                        (mt76_rr(dev, 0x0a34) & 0x00ff00ff)))
283                 msleep(10);
284
285         if (!mt76_poll(dev, MT_MAC_STATUS, MT_MAC_STATUS_TX, 0, 1000))
286                 dev_warn(dev->dev, "Warning: MAC TX did not stop!\n");
287
288         mt76_clear(dev, MT_MAC_SYS_CTRL, MT_MAC_SYS_CTRL_ENABLE_RX |
289                                          MT_MAC_SYS_CTRL_ENABLE_TX);
290
291         /* Page count on RxQ */
292         ok = 0;
293         i = 200;
294         while (i--) {
295                 if ((mt76_rr(dev, 0x0430) & 0x00ff0000) ||
296                     (mt76_rr(dev, 0x0a30) & 0xffffffff) ||
297                     (mt76_rr(dev, 0x0a34) & 0xffffffff))
298                         ok++;
299                 if (ok > 6)
300                         break;
301
302                 msleep(1);
303         }
304
305         if (!mt76_poll(dev, MT_MAC_STATUS, MT_MAC_STATUS_RX, 0, 1000))
306                 dev_warn(dev->dev, "Warning: MAC RX did not stop!\n");
307
308         if (!mt76_poll(dev, MT_USB_DMA_CFG, MT_USB_DMA_CFG_RX_BUSY, 0, 1000))
309                 dev_warn(dev->dev, "Warning: RX DMA did not stop!\n");
310 }
311
312 void mt7601u_mac_stop(struct mt7601u_dev *dev)
313 {
314         mt7601u_mac_stop_hw(dev);
315         flush_delayed_work(&dev->stat_work);
316         cancel_delayed_work_sync(&dev->stat_work);
317 }
318
319 static void mt7601u_stop_hardware(struct mt7601u_dev *dev)
320 {
321         mt7601u_chip_onoff(dev, false, false);
322 }
323
324 int mt7601u_init_hardware(struct mt7601u_dev *dev)
325 {
326         static const u16 beacon_offsets[16] = {
327                 /* 512 byte per beacon */
328                 0xc000, 0xc200, 0xc400, 0xc600,
329                 0xc800, 0xca00, 0xcc00, 0xce00,
330                 0xd000, 0xd200, 0xd400, 0xd600,
331                 0xd800, 0xda00, 0xdc00, 0xde00
332         };
333         int ret;
334
335         dev->beacon_offsets = beacon_offsets;
336
337         mt7601u_chip_onoff(dev, true, false);
338
339         ret = mt7601u_wait_asic_ready(dev);
340         if (ret)
341                 goto err;
342         ret = mt7601u_mcu_init(dev);
343         if (ret)
344                 goto err;
345
346         if (!mt76_poll_msec(dev, MT_WPDMA_GLO_CFG,
347                             MT_WPDMA_GLO_CFG_TX_DMA_BUSY |
348                             MT_WPDMA_GLO_CFG_RX_DMA_BUSY, 0, 100)) {
349                 ret = -EIO;
350                 goto err;
351         }
352
353         /* Wait for ASIC ready after FW load. */
354         ret = mt7601u_wait_asic_ready(dev);
355         if (ret)
356                 goto err;
357
358         mt7601u_reset_csr_bbp(dev);
359         mt7601u_init_usb_dma(dev);
360
361         ret = mt7601u_mcu_cmd_init(dev);
362         if (ret)
363                 goto err;
364         ret = mt7601u_dma_init(dev);
365         if (ret)
366                 goto err_mcu;
367         ret = mt7601u_write_mac_initvals(dev);
368         if (ret)
369                 goto err_rx;
370
371         if (!mt76_poll_msec(dev, MT_MAC_STATUS,
372                             MT_MAC_STATUS_TX | MT_MAC_STATUS_RX, 0, 100)) {
373                 ret = -EIO;
374                 goto err_rx;
375         }
376
377         ret = mt7601u_init_bbp(dev);
378         if (ret)
379                 goto err_rx;
380         ret = mt7601u_init_wcid_mem(dev);
381         if (ret)
382                 goto err_rx;
383         ret = mt7601u_init_key_mem(dev);
384         if (ret)
385                 goto err_rx;
386         ret = mt7601u_init_wcid_attr_mem(dev);
387         if (ret)
388                 goto err_rx;
389
390         mt76_clear(dev, MT_BEACON_TIME_CFG, (MT_BEACON_TIME_CFG_TIMER_EN |
391                                              MT_BEACON_TIME_CFG_SYNC_MODE |
392                                              MT_BEACON_TIME_CFG_TBTT_EN |
393                                              MT_BEACON_TIME_CFG_BEACON_TX));
394
395         mt7601u_reset_counters(dev);
396
397         mt7601u_rmw(dev, MT_US_CYC_CFG, MT_US_CYC_CNT, 0x1e);
398
399         mt7601u_wr(dev, MT_TXOP_CTRL_CFG, MT76_SET(MT_TXOP_TRUN_EN, 0x3f) |
400                                           MT76_SET(MT_TXOP_EXT_CCA_DLY, 0x58));
401
402         ret = mt7601u_eeprom_init(dev);
403         if (ret)
404                 goto err_rx;
405
406         ret = mt7601u_phy_init(dev);
407         if (ret)
408                 goto err_rx;
409
410         mt7601u_set_rx_path(dev, 0);
411         mt7601u_set_tx_dac(dev, 0);
412
413         mt7601u_mac_set_ctrlch(dev, false);
414         mt7601u_bbp_set_ctrlch(dev, false);
415         mt7601u_bbp_set_bw(dev, MT_BW_20);
416
417         return 0;
418
419 err_rx:
420         mt7601u_dma_cleanup(dev);
421 err_mcu:
422         mt7601u_mcu_cmd_deinit(dev);
423 err:
424         mt7601u_chip_onoff(dev, false, false);
425         return ret;
426 }
427
428 void mt7601u_cleanup(struct mt7601u_dev *dev)
429 {
430         if (!test_and_clear_bit(MT7601U_STATE_INITIALIZED, &dev->state))
431                 return;
432
433         mt7601u_stop_hardware(dev);
434         mt7601u_dma_cleanup(dev);
435         mt7601u_mcu_cmd_deinit(dev);
436 }
437
438 struct mt7601u_dev *mt7601u_alloc_device(struct device *pdev)
439 {
440         struct ieee80211_hw *hw;
441         struct mt7601u_dev *dev;
442
443         hw = ieee80211_alloc_hw(sizeof(*dev), &mt7601u_ops);
444         if (!hw)
445                 return NULL;
446
447         dev = hw->priv;
448         dev->dev = pdev;
449         dev->hw = hw;
450         mutex_init(&dev->vendor_req_mutex);
451         mutex_init(&dev->reg_atomic_mutex);
452         mutex_init(&dev->hw_atomic_mutex);
453         mutex_init(&dev->mutex);
454         spin_lock_init(&dev->tx_lock);
455         spin_lock_init(&dev->rx_lock);
456         spin_lock_init(&dev->lock);
457         spin_lock_init(&dev->mac_lock);
458         spin_lock_init(&dev->con_mon_lock);
459         atomic_set(&dev->avg_ampdu_len, 1);
460         skb_queue_head_init(&dev->tx_skb_done);
461
462         dev->stat_wq = alloc_workqueue("mt7601u", WQ_UNBOUND, 0);
463         if (!dev->stat_wq) {
464                 ieee80211_free_hw(hw);
465                 return NULL;
466         }
467
468         return dev;
469 }
470
471 #define CHAN2G(_idx, _freq) {                   \
472         .band = NL80211_BAND_2GHZ,              \
473         .center_freq = (_freq),                 \
474         .hw_value = (_idx),                     \
475         .max_power = 30,                        \
476 }
477
478 static const struct ieee80211_channel mt76_channels_2ghz[] = {
479         CHAN2G(1, 2412),
480         CHAN2G(2, 2417),
481         CHAN2G(3, 2422),
482         CHAN2G(4, 2427),
483         CHAN2G(5, 2432),
484         CHAN2G(6, 2437),
485         CHAN2G(7, 2442),
486         CHAN2G(8, 2447),
487         CHAN2G(9, 2452),
488         CHAN2G(10, 2457),
489         CHAN2G(11, 2462),
490         CHAN2G(12, 2467),
491         CHAN2G(13, 2472),
492         CHAN2G(14, 2484),
493 };
494
495 #define CCK_RATE(_idx, _rate) {                                 \
496         .bitrate = _rate,                                       \
497         .flags = IEEE80211_RATE_SHORT_PREAMBLE,                 \
498         .hw_value = (MT_PHY_TYPE_CCK << 8) | _idx,              \
499         .hw_value_short = (MT_PHY_TYPE_CCK << 8) | (8 + _idx),  \
500 }
501
502 #define OFDM_RATE(_idx, _rate) {                                \
503         .bitrate = _rate,                                       \
504         .hw_value = (MT_PHY_TYPE_OFDM << 8) | _idx,             \
505         .hw_value_short = (MT_PHY_TYPE_OFDM << 8) | _idx,       \
506 }
507
508 static struct ieee80211_rate mt76_rates[] = {
509         CCK_RATE(0, 10),
510         CCK_RATE(1, 20),
511         CCK_RATE(2, 55),
512         CCK_RATE(3, 110),
513         OFDM_RATE(0, 60),
514         OFDM_RATE(1, 90),
515         OFDM_RATE(2, 120),
516         OFDM_RATE(3, 180),
517         OFDM_RATE(4, 240),
518         OFDM_RATE(5, 360),
519         OFDM_RATE(6, 480),
520         OFDM_RATE(7, 540),
521 };
522
523 static int
524 mt76_init_sband(struct mt7601u_dev *dev, struct ieee80211_supported_band *sband,
525                 const struct ieee80211_channel *chan, int n_chan,
526                 struct ieee80211_rate *rates, int n_rates)
527 {
528         struct ieee80211_sta_ht_cap *ht_cap;
529         void *chanlist;
530         int size;
531
532         size = n_chan * sizeof(*chan);
533         chanlist = devm_kmemdup(dev->dev, chan, size, GFP_KERNEL);
534         if (!chanlist)
535                 return -ENOMEM;
536
537         sband->channels = chanlist;
538         sband->n_channels = n_chan;
539         sband->bitrates = rates;
540         sband->n_bitrates = n_rates;
541
542         ht_cap = &sband->ht_cap;
543         ht_cap->ht_supported = true;
544         ht_cap->cap = IEEE80211_HT_CAP_SUP_WIDTH_20_40 |
545                       IEEE80211_HT_CAP_GRN_FLD |
546                       IEEE80211_HT_CAP_SGI_20 |
547                       IEEE80211_HT_CAP_SGI_40 |
548                       (1 << IEEE80211_HT_CAP_RX_STBC_SHIFT);
549
550         ht_cap->mcs.rx_mask[0] = 0xff;
551         ht_cap->mcs.rx_mask[4] = 0x1;
552         ht_cap->mcs.tx_params = IEEE80211_HT_MCS_TX_DEFINED;
553         ht_cap->ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
554         ht_cap->ampdu_density = IEEE80211_HT_MPDU_DENSITY_2;
555
556         dev->chandef.chan = &sband->channels[0];
557
558         return 0;
559 }
560
561 static int
562 mt76_init_sband_2g(struct mt7601u_dev *dev)
563 {
564         dev->sband_2g = devm_kzalloc(dev->dev, sizeof(*dev->sband_2g),
565                                      GFP_KERNEL);
566         dev->hw->wiphy->bands[NL80211_BAND_2GHZ] = dev->sband_2g;
567
568         WARN_ON(dev->ee->reg.start - 1 + dev->ee->reg.num >
569                 ARRAY_SIZE(mt76_channels_2ghz));
570
571         return mt76_init_sband(dev, dev->sband_2g,
572                                &mt76_channels_2ghz[dev->ee->reg.start - 1],
573                                dev->ee->reg.num,
574                                mt76_rates, ARRAY_SIZE(mt76_rates));
575 }
576
577 int mt7601u_register_device(struct mt7601u_dev *dev)
578 {
579         struct ieee80211_hw *hw = dev->hw;
580         struct wiphy *wiphy = hw->wiphy;
581         int ret;
582
583         /* Reserve WCID 0 for mcast - thanks to this APs WCID will go to
584          * entry no. 1 like it does in the vendor driver.
585          */
586         dev->wcid_mask[0] |= 1;
587
588         /* init fake wcid for monitor interfaces */
589         dev->mon_wcid = devm_kmalloc(dev->dev, sizeof(*dev->mon_wcid),
590                                      GFP_KERNEL);
591         if (!dev->mon_wcid)
592                 return -ENOMEM;
593         dev->mon_wcid->idx = 0xff;
594         dev->mon_wcid->hw_key_idx = -1;
595
596         SET_IEEE80211_DEV(hw, dev->dev);
597
598         hw->queues = 4;
599         ieee80211_hw_set(hw, SIGNAL_DBM);
600         ieee80211_hw_set(hw, PS_NULLFUNC_STACK);
601         ieee80211_hw_set(hw, SUPPORTS_HT_CCK_RATES);
602         ieee80211_hw_set(hw, AMPDU_AGGREGATION);
603         ieee80211_hw_set(hw, SUPPORTS_RC_TABLE);
604         hw->max_rates = 1;
605         hw->max_report_rates = 7;
606         hw->max_rate_tries = 1;
607
608         hw->sta_data_size = sizeof(struct mt76_sta);
609         hw->vif_data_size = sizeof(struct mt76_vif);
610
611         SET_IEEE80211_PERM_ADDR(hw, dev->macaddr);
612
613         wiphy->features |= NL80211_FEATURE_ACTIVE_MONITOR;
614         wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION);
615
616         ret = mt76_init_sband_2g(dev);
617         if (ret)
618                 return ret;
619
620         INIT_DELAYED_WORK(&dev->mac_work, mt7601u_mac_work);
621         INIT_DELAYED_WORK(&dev->stat_work, mt7601u_tx_stat);
622
623         ret = ieee80211_register_hw(hw);
624         if (ret)
625                 return ret;
626
627         mt7601u_init_debugfs(dev);
628
629         return 0;
630 }