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