Lines Matching refs:dev

24 mt7601u_set_wlan_state(struct mt7601u_dev *dev, u32 val, bool enable)  in mt7601u_set_wlan_state()  argument
40 mt7601u_wr(dev, MT_WLAN_FUN_CTRL, val); in mt7601u_set_wlan_state()
44 set_bit(MT7601U_STATE_WLAN_RUNNING, &dev->state); in mt7601u_set_wlan_state()
46 clear_bit(MT7601U_STATE_WLAN_RUNNING, &dev->state); in mt7601u_set_wlan_state()
51 val = mt7601u_rr(dev, MT_CMB_CTRL); in mt7601u_set_wlan_state()
64 dev_err(dev->dev, "Error: PLL and XTAL check failed!\n"); in mt7601u_set_wlan_state()
67 static void mt7601u_chip_onoff(struct mt7601u_dev *dev, bool enable, bool reset) in mt7601u_chip_onoff() argument
71 mutex_lock(&dev->hw_atomic_mutex); in mt7601u_chip_onoff()
73 val = mt7601u_rr(dev, MT_WLAN_FUN_CTRL); in mt7601u_chip_onoff()
82 mt7601u_wr(dev, MT_WLAN_FUN_CTRL, val); in mt7601u_chip_onoff()
90 mt7601u_wr(dev, MT_WLAN_FUN_CTRL, val); in mt7601u_chip_onoff()
93 mt7601u_set_wlan_state(dev, val, enable); in mt7601u_chip_onoff()
95 mutex_unlock(&dev->hw_atomic_mutex); in mt7601u_chip_onoff()
98 static void mt7601u_reset_csr_bbp(struct mt7601u_dev *dev) in mt7601u_reset_csr_bbp() argument
100 mt7601u_wr(dev, MT_MAC_SYS_CTRL, (MT_MAC_SYS_CTRL_RESET_CSR | in mt7601u_reset_csr_bbp()
102 mt7601u_wr(dev, MT_USB_DMA_CFG, 0); in mt7601u_reset_csr_bbp()
104 mt7601u_wr(dev, MT_MAC_SYS_CTRL, 0); in mt7601u_reset_csr_bbp()
107 static void mt7601u_init_usb_dma(struct mt7601u_dev *dev) in mt7601u_init_usb_dma() argument
115 if (dev->in_max_packet == 512) in mt7601u_init_usb_dma()
117 mt7601u_wr(dev, MT_USB_DMA_CFG, val); in mt7601u_init_usb_dma()
120 mt7601u_wr(dev, MT_USB_DMA_CFG, val); in mt7601u_init_usb_dma()
122 mt7601u_wr(dev, MT_USB_DMA_CFG, val); in mt7601u_init_usb_dma()
125 static int mt7601u_init_bbp(struct mt7601u_dev *dev) in mt7601u_init_bbp() argument
129 ret = mt7601u_wait_bbp_ready(dev); in mt7601u_init_bbp()
133 ret = mt7601u_write_reg_pairs(dev, MT_MCU_MEMMAP_BBP, bbp_common_vals, in mt7601u_init_bbp()
138 return mt7601u_write_reg_pairs(dev, MT_MCU_MEMMAP_BBP, bbp_chip_vals, in mt7601u_init_bbp()
143 mt76_init_beacon_offsets(struct mt7601u_dev *dev) in mt76_init_beacon_offsets() argument
150 u16 addr = dev->beacon_offsets[i]; in mt76_init_beacon_offsets()
156 mt7601u_wr(dev, MT_BCN_OFFSET(i), regs[i]); in mt76_init_beacon_offsets()
159 static int mt7601u_write_mac_initvals(struct mt7601u_dev *dev) in mt7601u_write_mac_initvals() argument
163 ret = mt7601u_write_reg_pairs(dev, MT_MCU_MEMMAP_WLAN, mac_common_vals, in mt7601u_write_mac_initvals()
167 ret = mt7601u_write_reg_pairs(dev, MT_MCU_MEMMAP_WLAN, in mt7601u_write_mac_initvals()
172 mt76_init_beacon_offsets(dev); in mt7601u_write_mac_initvals()
174 mt7601u_wr(dev, MT_AUX_CLK_CFG, 0); in mt7601u_write_mac_initvals()
179 static int mt7601u_init_wcid_mem(struct mt7601u_dev *dev) in mt7601u_init_wcid_mem() argument
193 ret = mt7601u_burst_write_regs(dev, MT_WCID_ADDR_BASE, in mt7601u_init_wcid_mem()
200 static int mt7601u_init_key_mem(struct mt7601u_dev *dev) in mt7601u_init_key_mem() argument
204 return mt7601u_burst_write_regs(dev, MT_SKEY_MODE_BASE_0, in mt7601u_init_key_mem()
208 static int mt7601u_init_wcid_attr_mem(struct mt7601u_dev *dev) in mt7601u_init_wcid_attr_mem() argument
220 ret = mt7601u_burst_write_regs(dev, MT_WCID_ATTR_BASE, in mt7601u_init_wcid_attr_mem()
227 static void mt7601u_reset_counters(struct mt7601u_dev *dev) in mt7601u_reset_counters() argument
229 mt7601u_rr(dev, MT_RX_STA_CNT0); in mt7601u_reset_counters()
230 mt7601u_rr(dev, MT_RX_STA_CNT1); in mt7601u_reset_counters()
231 mt7601u_rr(dev, MT_RX_STA_CNT2); in mt7601u_reset_counters()
232 mt7601u_rr(dev, MT_TX_STA_CNT0); in mt7601u_reset_counters()
233 mt7601u_rr(dev, MT_TX_STA_CNT1); in mt7601u_reset_counters()
234 mt7601u_rr(dev, MT_TX_STA_CNT2); in mt7601u_reset_counters()
237 int mt7601u_mac_start(struct mt7601u_dev *dev) in mt7601u_mac_start() argument
239 mt7601u_wr(dev, MT_MAC_SYS_CTRL, MT_MAC_SYS_CTRL_ENABLE_TX); in mt7601u_mac_start()
241 if (!mt76_poll(dev, MT_WPDMA_GLO_CFG, MT_WPDMA_GLO_CFG_TX_DMA_BUSY | in mt7601u_mac_start()
245 dev->rxfilter = MT_RX_FILTR_CFG_CRC_ERR | in mt7601u_mac_start()
252 mt7601u_wr(dev, MT_RX_FILTR_CFG, dev->rxfilter); in mt7601u_mac_start()
254 mt7601u_wr(dev, MT_MAC_SYS_CTRL, in mt7601u_mac_start()
257 if (!mt76_poll(dev, MT_WPDMA_GLO_CFG, MT_WPDMA_GLO_CFG_TX_DMA_BUSY | in mt7601u_mac_start()
264 static void mt7601u_mac_stop_hw(struct mt7601u_dev *dev) in mt7601u_mac_stop_hw() argument
268 if (test_bit(MT7601U_STATE_REMOVED, &dev->state)) in mt7601u_mac_stop_hw()
271 mt76_clear(dev, MT_BEACON_TIME_CFG, MT_BEACON_TIME_CFG_TIMER_EN | in mt7601u_mac_stop_hw()
275 if (!mt76_poll(dev, MT_USB_DMA_CFG, MT_USB_DMA_CFG_TX_BUSY, 0, 1000)) in mt7601u_mac_stop_hw()
276 dev_warn(dev->dev, "Warning: TX DMA did not stop!\n"); in mt7601u_mac_stop_hw()
280 while (i-- && ((mt76_rr(dev, 0x0438) & 0xffffffff) || in mt7601u_mac_stop_hw()
281 (mt76_rr(dev, 0x0a30) & 0x000000ff) || in mt7601u_mac_stop_hw()
282 (mt76_rr(dev, 0x0a34) & 0x00ff00ff))) in mt7601u_mac_stop_hw()
285 if (!mt76_poll(dev, MT_MAC_STATUS, MT_MAC_STATUS_TX, 0, 1000)) in mt7601u_mac_stop_hw()
286 dev_warn(dev->dev, "Warning: MAC TX did not stop!\n"); in mt7601u_mac_stop_hw()
288 mt76_clear(dev, MT_MAC_SYS_CTRL, MT_MAC_SYS_CTRL_ENABLE_RX | in mt7601u_mac_stop_hw()
295 if ((mt76_rr(dev, 0x0430) & 0x00ff0000) || in mt7601u_mac_stop_hw()
296 (mt76_rr(dev, 0x0a30) & 0xffffffff) || in mt7601u_mac_stop_hw()
297 (mt76_rr(dev, 0x0a34) & 0xffffffff)) in mt7601u_mac_stop_hw()
305 if (!mt76_poll(dev, MT_MAC_STATUS, MT_MAC_STATUS_RX, 0, 1000)) in mt7601u_mac_stop_hw()
306 dev_warn(dev->dev, "Warning: MAC RX did not stop!\n"); in mt7601u_mac_stop_hw()
308 if (!mt76_poll(dev, MT_USB_DMA_CFG, MT_USB_DMA_CFG_RX_BUSY, 0, 1000)) in mt7601u_mac_stop_hw()
309 dev_warn(dev->dev, "Warning: RX DMA did not stop!\n"); in mt7601u_mac_stop_hw()
312 void mt7601u_mac_stop(struct mt7601u_dev *dev) in mt7601u_mac_stop() argument
314 mt7601u_mac_stop_hw(dev); in mt7601u_mac_stop()
315 flush_delayed_work(&dev->stat_work); in mt7601u_mac_stop()
316 cancel_delayed_work_sync(&dev->stat_work); in mt7601u_mac_stop()
319 static void mt7601u_stop_hardware(struct mt7601u_dev *dev) in mt7601u_stop_hardware() argument
321 mt7601u_chip_onoff(dev, false, false); in mt7601u_stop_hardware()
324 int mt7601u_init_hardware(struct mt7601u_dev *dev) in mt7601u_init_hardware() argument
335 dev->beacon_offsets = beacon_offsets; in mt7601u_init_hardware()
337 mt7601u_chip_onoff(dev, true, false); in mt7601u_init_hardware()
339 ret = mt7601u_wait_asic_ready(dev); in mt7601u_init_hardware()
342 ret = mt7601u_mcu_init(dev); in mt7601u_init_hardware()
346 if (!mt76_poll_msec(dev, MT_WPDMA_GLO_CFG, in mt7601u_init_hardware()
354 ret = mt7601u_wait_asic_ready(dev); in mt7601u_init_hardware()
358 mt7601u_reset_csr_bbp(dev); in mt7601u_init_hardware()
359 mt7601u_init_usb_dma(dev); in mt7601u_init_hardware()
361 ret = mt7601u_mcu_cmd_init(dev); in mt7601u_init_hardware()
364 ret = mt7601u_dma_init(dev); in mt7601u_init_hardware()
367 ret = mt7601u_write_mac_initvals(dev); in mt7601u_init_hardware()
371 if (!mt76_poll_msec(dev, MT_MAC_STATUS, in mt7601u_init_hardware()
377 ret = mt7601u_init_bbp(dev); in mt7601u_init_hardware()
380 ret = mt7601u_init_wcid_mem(dev); in mt7601u_init_hardware()
383 ret = mt7601u_init_key_mem(dev); in mt7601u_init_hardware()
386 ret = mt7601u_init_wcid_attr_mem(dev); in mt7601u_init_hardware()
390 mt76_clear(dev, MT_BEACON_TIME_CFG, (MT_BEACON_TIME_CFG_TIMER_EN | in mt7601u_init_hardware()
395 mt7601u_reset_counters(dev); in mt7601u_init_hardware()
397 mt7601u_rmw(dev, MT_US_CYC_CFG, MT_US_CYC_CNT, 0x1e); in mt7601u_init_hardware()
399 mt7601u_wr(dev, MT_TXOP_CTRL_CFG, MT76_SET(MT_TXOP_TRUN_EN, 0x3f) | in mt7601u_init_hardware()
402 ret = mt7601u_eeprom_init(dev); in mt7601u_init_hardware()
406 ret = mt7601u_phy_init(dev); in mt7601u_init_hardware()
410 mt7601u_set_rx_path(dev, 0); in mt7601u_init_hardware()
411 mt7601u_set_tx_dac(dev, 0); in mt7601u_init_hardware()
413 mt7601u_mac_set_ctrlch(dev, false); in mt7601u_init_hardware()
414 mt7601u_bbp_set_ctrlch(dev, false); in mt7601u_init_hardware()
415 mt7601u_bbp_set_bw(dev, MT_BW_20); in mt7601u_init_hardware()
420 mt7601u_dma_cleanup(dev); in mt7601u_init_hardware()
422 mt7601u_mcu_cmd_deinit(dev); in mt7601u_init_hardware()
424 mt7601u_chip_onoff(dev, false, false); in mt7601u_init_hardware()
428 void mt7601u_cleanup(struct mt7601u_dev *dev) in mt7601u_cleanup() argument
430 if (!test_and_clear_bit(MT7601U_STATE_INITIALIZED, &dev->state)) in mt7601u_cleanup()
433 mt7601u_stop_hardware(dev); in mt7601u_cleanup()
434 mt7601u_dma_cleanup(dev); in mt7601u_cleanup()
435 mt7601u_mcu_cmd_deinit(dev); in mt7601u_cleanup()
441 struct mt7601u_dev *dev; in mt7601u_alloc_device() local
443 hw = ieee80211_alloc_hw(sizeof(*dev), &mt7601u_ops); in mt7601u_alloc_device()
447 dev = hw->priv; in mt7601u_alloc_device()
448 dev->dev = pdev; in mt7601u_alloc_device()
449 dev->hw = hw; in mt7601u_alloc_device()
450 mutex_init(&dev->vendor_req_mutex); in mt7601u_alloc_device()
451 mutex_init(&dev->reg_atomic_mutex); in mt7601u_alloc_device()
452 mutex_init(&dev->hw_atomic_mutex); in mt7601u_alloc_device()
453 mutex_init(&dev->mutex); in mt7601u_alloc_device()
454 spin_lock_init(&dev->tx_lock); in mt7601u_alloc_device()
455 spin_lock_init(&dev->rx_lock); in mt7601u_alloc_device()
456 spin_lock_init(&dev->lock); in mt7601u_alloc_device()
457 spin_lock_init(&dev->mac_lock); in mt7601u_alloc_device()
458 spin_lock_init(&dev->con_mon_lock); in mt7601u_alloc_device()
459 atomic_set(&dev->avg_ampdu_len, 1); in mt7601u_alloc_device()
460 skb_queue_head_init(&dev->tx_skb_done); in mt7601u_alloc_device()
462 dev->stat_wq = alloc_workqueue("mt7601u", WQ_UNBOUND, 0); in mt7601u_alloc_device()
463 if (!dev->stat_wq) { in mt7601u_alloc_device()
468 return dev; in mt7601u_alloc_device()
524 mt76_init_sband(struct mt7601u_dev *dev, struct ieee80211_supported_band *sband, in mt76_init_sband() argument
533 chanlist = devm_kmemdup(dev->dev, chan, size, GFP_KERNEL); in mt76_init_sband()
556 dev->chandef.chan = &sband->channels[0]; in mt76_init_sband()
562 mt76_init_sband_2g(struct mt7601u_dev *dev) in mt76_init_sband_2g() argument
564 dev->sband_2g = devm_kzalloc(dev->dev, sizeof(*dev->sband_2g), in mt76_init_sband_2g()
566 dev->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = dev->sband_2g; in mt76_init_sband_2g()
568 WARN_ON(dev->ee->reg.start - 1 + dev->ee->reg.num > in mt76_init_sband_2g()
571 return mt76_init_sband(dev, dev->sband_2g, in mt76_init_sband_2g()
572 &mt76_channels_2ghz[dev->ee->reg.start - 1], in mt76_init_sband_2g()
573 dev->ee->reg.num, in mt76_init_sband_2g()
577 int mt7601u_register_device(struct mt7601u_dev *dev) in mt7601u_register_device() argument
579 struct ieee80211_hw *hw = dev->hw; in mt7601u_register_device()
586 dev->wcid_mask[0] |= 1; in mt7601u_register_device()
589 dev->mon_wcid = devm_kmalloc(dev->dev, sizeof(*dev->mon_wcid), in mt7601u_register_device()
591 if (!dev->mon_wcid) in mt7601u_register_device()
593 dev->mon_wcid->idx = 0xff; in mt7601u_register_device()
594 dev->mon_wcid->hw_key_idx = -1; in mt7601u_register_device()
596 SET_IEEE80211_DEV(hw, dev->dev); in mt7601u_register_device()
611 SET_IEEE80211_PERM_ADDR(hw, dev->macaddr); in mt7601u_register_device()
616 ret = mt76_init_sband_2g(dev); in mt7601u_register_device()
620 INIT_DELAYED_WORK(&dev->mac_work, mt7601u_mac_work); in mt7601u_register_device()
621 INIT_DELAYED_WORK(&dev->stat_work, mt7601u_tx_stat); in mt7601u_register_device()
627 mt7601u_init_debugfs(dev); in mt7601u_register_device()