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 23static void 24mt7601u_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 67static 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 98static 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 107static 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 125static 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 142static void 143mt76_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 159static 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 179static 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 200static 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 208static 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 227static 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 237int 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 264static 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 312void 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 319static void mt7601u_stop_hardware(struct mt7601u_dev *dev) 320{ 321 mt7601u_chip_onoff(dev, false, false); 322} 323 324int 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 419err_rx: 420 mt7601u_dma_cleanup(dev); 421err_mcu: 422 mt7601u_mcu_cmd_deinit(dev); 423err: 424 mt7601u_chip_onoff(dev, false, false); 425 return ret; 426} 427 428void 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 438struct 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 = IEEE80211_BAND_2GHZ, \ 473 .center_freq = (_freq), \ 474 .hw_value = (_idx), \ 475 .max_power = 30, \ 476} 477 478static 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 508static 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 523static int 524mt76_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 561static int 562mt76_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[IEEE80211_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 577int 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} 631