Lines Matching refs:dev

24 mt7603_set_tmac_template(struct mt7603_dev *dev)  in mt7603_set_tmac_template()  argument
33 addr = mt7603_reg_map(dev, MT_CLIENT_BASE_PHYS_ADDR); in mt7603_set_tmac_template()
36 mt76_wr(dev, addr + 4 * i, desc[i]); in mt7603_set_tmac_template()
40 mt7603_dma_sched_init(struct mt7603_dev *dev) in mt7603_dma_sched_init() argument
54 page_count = mt76_get_field(dev, MT_PSE_FC_P0, in mt7603_dma_sched_init()
59 mt76_wr(dev, MT_PSE_FRP, in mt7603_dma_sched_init()
64 mt76_wr(dev, MT_HIGH_PRIORITY_1, 0x55555553); in mt7603_dma_sched_init()
65 mt76_wr(dev, MT_HIGH_PRIORITY_2, 0x78555555); in mt7603_dma_sched_init()
67 mt76_wr(dev, MT_QUEUE_PRIORITY_1, 0x2b1a096e); in mt7603_dma_sched_init()
68 mt76_wr(dev, MT_QUEUE_PRIORITY_2, 0x785f4d3c); in mt7603_dma_sched_init()
70 mt76_wr(dev, MT_PRIORITY_MASK, 0xffffffff); in mt7603_dma_sched_init()
72 mt76_wr(dev, MT_SCH_1, page_count | (2 << 28)); in mt7603_dma_sched_init()
73 mt76_wr(dev, MT_SCH_2, max_amsdu_pages); in mt7603_dma_sched_init()
76 mt76_wr(dev, MT_PAGE_COUNT(i), max_amsdu_pages); in mt7603_dma_sched_init()
79 mt76_wr(dev, MT_PAGE_COUNT(5), mcu_pages); in mt7603_dma_sched_init()
82 mt76_wr(dev, MT_PAGE_COUNT(7), beacon_pages); in mt7603_dma_sched_init()
85 mt76_wr(dev, MT_PAGE_COUNT(8), max_mcast_pages); in mt7603_dma_sched_init()
88 if (is_mt7603(dev)) in mt7603_dma_sched_init()
91 mt76_wr(dev, MT_RSV_MAX_THRESH, page_count - reserved_count); in mt7603_dma_sched_init()
93 if (is_mt7603(dev) && mt76xx_rev(dev) >= MT7603_REV_E2) { in mt7603_dma_sched_init()
94 mt76_wr(dev, MT_GROUP_THRESH(0), in mt7603_dma_sched_init()
96 mt76_wr(dev, MT_GROUP_THRESH(1), beacon_pages); in mt7603_dma_sched_init()
97 mt76_wr(dev, MT_BMAP_0, 0x0080ff5f); in mt7603_dma_sched_init()
98 mt76_wr(dev, MT_GROUP_THRESH(2), mcu_pages); in mt7603_dma_sched_init()
99 mt76_wr(dev, MT_BMAP_1, 0x00000020); in mt7603_dma_sched_init()
101 mt76_wr(dev, MT_GROUP_THRESH(0), page_count); in mt7603_dma_sched_init()
102 mt76_wr(dev, MT_BMAP_0, 0xffff); in mt7603_dma_sched_init()
105 mt76_wr(dev, MT_SCH_4, 0); in mt7603_dma_sched_init()
108 mt76_wr(dev, MT_TXTIME_THRESH(i), 0xfffff); in mt7603_dma_sched_init()
110 mt76_set(dev, MT_SCH_4, BIT(6)); in mt7603_dma_sched_init()
114 mt7603_phy_init(struct mt7603_dev *dev) in mt7603_phy_init() argument
116 int rx_chains = dev->mphy.antenna_mask; in mt7603_phy_init()
119 mt76_rmw(dev, MT_WF_RMAC_RMCR, in mt7603_phy_init()
125 mt76_rmw_field(dev, MT_TMAC_TCR, MT_TMAC_TCR_TX_STREAMS, in mt7603_phy_init()
128 dev->agc0 = mt76_rr(dev, MT_AGC(0)); in mt7603_phy_init()
129 dev->agc3 = mt76_rr(dev, MT_AGC(3)); in mt7603_phy_init()
133 mt7603_mac_init(struct mt7603_dev *dev) in mt7603_mac_init() argument
139 mt76_wr(dev, MT_AGG_BA_SIZE_LIMIT_0, in mt7603_mac_init()
145 mt76_wr(dev, MT_AGG_BA_SIZE_LIMIT_1, in mt7603_mac_init()
151 mt76_wr(dev, MT_AGG_LIMIT, in mt7603_mac_init()
157 mt76_wr(dev, MT_AGG_LIMIT_1, in mt7603_mac_init()
163 mt76_wr(dev, MT_AGG_CONTROL, in mt7603_mac_init()
168 mt76_wr(dev, MT_AGG_RETRY_CONTROL, in mt7603_mac_init()
172 mt76_wr(dev, MT_DMA_DCR0, MT_DMA_DCR0_RX_VEC_DROP | in mt7603_mac_init()
175 mt76_rmw(dev, MT_DMA_VCFR0, BIT(0), BIT(13)); in mt7603_mac_init()
176 mt76_rmw(dev, MT_DMA_TMCFR0, BIT(0) | BIT(1), BIT(13)); in mt7603_mac_init()
178 mt76_clear(dev, MT_WF_RMAC_TMR_PA, BIT(31)); in mt7603_mac_init()
180 mt76_set(dev, MT_WF_RMACDR, MT_WF_RMACDR_MAXLEN_20BIT); in mt7603_mac_init()
181 mt76_rmw(dev, MT_WF_RMAC_MAXMINLEN, 0xffffff, 0x19000); in mt7603_mac_init()
183 mt76_wr(dev, MT_WF_RFCR1, 0); in mt7603_mac_init()
185 mt76_set(dev, MT_TMAC_TCR, MT_TMAC_TCR_RX_RIFS_MODE); in mt7603_mac_init()
187 mt7603_set_tmac_template(dev); in mt7603_mac_init()
190 addr = mt7603_reg_map(dev, MT_CLIENT_BASE_PHYS_ADDR); in mt7603_mac_init()
191 mt76_set(dev, addr + MT_CLIENT_RXINF, MT_CLIENT_RXINF_RXSH_GROUPS); in mt7603_mac_init()
194 mt76_set(dev, MT_DMA_DCR1, GENMASK(13, 11)); in mt7603_mac_init()
196 mt76_rmw_field(dev, MT_AGG_PCR_RTS, MT_AGG_PCR_RTS_PKT_THR, 3); in mt7603_mac_init()
197 mt76_set(dev, MT_TMAC_PCR, MT_TMAC_PCR_SPE_EN); in mt7603_mac_init()
200 mt76_rmw_field(dev, MT_TXREQ, MT_TXREQ_CCA_SRC_SEL, 2); in mt7603_mac_init()
202 mt76_wr(dev, MT_RXREQ, 4); in mt7603_mac_init()
205 mt76_wr(dev, MT_DMA_RCFR0, 0xc0000000); in mt7603_mac_init()
208 mt76_wr(dev, MT_DMA_TCFR0, in mt7603_mac_init()
213 mt76_wr(dev, MT_DMA_TCFR1, in mt7603_mac_init()
218 mt76_wr(dev, MT_MCU_PCIE_REMAP_1, MT_PSE_WTBL_2_PHYS_ADDR); in mt7603_mac_init()
221 mt7603_wtbl_clear(dev, i); in mt7603_mac_init()
224 mt7603_wtbl_init(dev, MT7603_WTBL_RESERVED, -1, bc_addr); in mt7603_mac_init()
225 dev->global_sta.wcid.idx = MT7603_WTBL_RESERVED; in mt7603_mac_init()
226 rcu_assign_pointer(dev->mt76.wcid[MT7603_WTBL_RESERVED], in mt7603_mac_init()
227 &dev->global_sta.wcid); in mt7603_mac_init()
229 mt76_rmw_field(dev, MT_LPON_BTEIR, MT_LPON_BTEIR_MBSS_MODE, 2); in mt7603_mac_init()
230 mt76_rmw_field(dev, MT_WF_RMACDR, MT_WF_RMACDR_MBSSID_MASK, 2); in mt7603_mac_init()
232 mt76_wr(dev, MT_AGG_ARUCR, in mt7603_mac_init()
242 mt76_wr(dev, MT_AGG_ARDCR, in mt7603_mac_init()
252 mt76_wr(dev, MT_AGG_ARCR, in mt7603_mac_init()
258 mt76_set(dev, MT_WTBL_RMVTCR, MT_WTBL_RMVTCR_RX_MV_MODE); in mt7603_mac_init()
260 mt76_clear(dev, MT_SEC_SCR, MT_SEC_SCR_MASK_ORDER); in mt7603_mac_init()
261 mt76_clear(dev, MT_SEC_SCR, BIT(18)); in mt7603_mac_init()
265 mt76_rmw_field(dev, MT_LPON_SBTOR(i), MT_LPON_SBTOR_TIME_OFFSET, in mt7603_mac_init()
270 mt7603_init_hardware(struct mt7603_dev *dev) in mt7603_init_hardware() argument
274 mt76_wr(dev, MT_INT_SOURCE_CSR, ~0); in mt7603_init_hardware()
276 ret = mt7603_eeprom_init(dev); in mt7603_init_hardware()
280 ret = mt7603_dma_init(dev); in mt7603_init_hardware()
284 mt76_wr(dev, MT_WPDMA_GLO_CFG, 0x52000850); in mt7603_init_hardware()
285 mt7603_mac_dma_start(dev); in mt7603_init_hardware()
286 dev->rxfilter = mt76_rr(dev, MT_WF_RFCR); in mt7603_init_hardware()
287 set_bit(MT76_STATE_INITIALIZED, &dev->mphy.state); in mt7603_init_hardware()
290 mt76_wr(dev, MT_PSE_RTA, MT_PSE_RTA_BUSY | MT_PSE_RTA_WRITE | in mt7603_init_hardware()
292 mt76_poll(dev, MT_PSE_RTA, MT_PSE_RTA_BUSY, 0, 5000); in mt7603_init_hardware()
295 ret = mt7603_mcu_init(dev); in mt7603_init_hardware()
299 mt7603_dma_sched_init(dev); in mt7603_init_hardware()
300 mt7603_mcu_set_eeprom(dev); in mt7603_init_hardware()
301 mt7603_phy_init(dev); in mt7603_init_hardware()
302 mt7603_mac_init(dev); in mt7603_init_hardware()
336 struct mt7603_dev *dev = container_of(mphy->dev, struct mt7603_dev, in mt7603_led_set_config() local
344 addr = mt7603_reg_map(dev, MT_LED_STATUS_0(mphy->leds.pin)); in mt7603_led_set_config()
345 mt76_wr(dev, addr, val); in mt7603_led_set_config()
346 addr = mt7603_reg_map(dev, MT_LED_STATUS_1(mphy->leds.pin)); in mt7603_led_set_config()
347 mt76_wr(dev, addr, val); in mt7603_led_set_config()
353 addr = mt7603_reg_map(dev, MT_LED_CTRL); in mt7603_led_set_config()
354 mt76_wr(dev, addr, val); in mt7603_led_set_config()
384 static u32 __mt7603_reg_addr(struct mt7603_dev *dev, u32 addr) in __mt7603_reg_addr() argument
389 return mt7603_reg_map(dev, addr); in __mt7603_reg_addr()
394 struct mt7603_dev *dev = container_of(mdev, struct mt7603_dev, mt76); in mt7603_rr() local
395 u32 addr = __mt7603_reg_addr(dev, offset); in mt7603_rr()
397 return dev->bus_ops->rr(mdev, addr); in mt7603_rr()
402 struct mt7603_dev *dev = container_of(mdev, struct mt7603_dev, mt76); in mt7603_wr() local
403 u32 addr = __mt7603_reg_addr(dev, offset); in mt7603_wr()
405 dev->bus_ops->wr(mdev, addr, val); in mt7603_wr()
410 struct mt7603_dev *dev = container_of(mdev, struct mt7603_dev, mt76); in mt7603_rmw() local
411 u32 addr = __mt7603_reg_addr(dev, offset); in mt7603_rmw()
413 return dev->bus_ops->rmw(mdev, addr, mask, val); in mt7603_rmw()
421 struct mt7603_dev *dev = hw->priv; in mt7603_regd_notifier() local
423 dev->mt76.region = request->dfs_region; in mt7603_regd_notifier()
424 dev->ed_monitor = dev->ed_monitor_enabled && in mt7603_regd_notifier()
425 dev->mt76.region == NL80211_DFS_ETSI; in mt7603_regd_notifier()
444 mt7603_init_txpower(struct mt7603_dev *dev, in mt7603_init_txpower() argument
448 u8 *eeprom = (u8 *)dev->mt76.eeprom.data; in mt7603_init_txpower()
455 if (ext_pa && is_mt7603(dev)) in mt7603_init_txpower()
469 dev->tx_power_limit = target_power; in mt7603_init_txpower()
470 dev->mphy.txpower_cur = target_power; in mt7603_init_txpower()
475 if (dev->mphy.antenna_mask & BIT(1)) in mt7603_init_txpower()
485 int mt7603_register_device(struct mt7603_dev *dev) in mt7603_register_device() argument
488 struct ieee80211_hw *hw = mt76_hw(dev); in mt7603_register_device()
492 dev->bus_ops = dev->mt76.bus; in mt7603_register_device()
493 bus_ops = devm_kmemdup(dev->mt76.dev, dev->bus_ops, sizeof(*bus_ops), in mt7603_register_device()
501 dev->mt76.bus = bus_ops; in mt7603_register_device()
503 spin_lock_init(&dev->ps_lock); in mt7603_register_device()
505 INIT_DELAYED_WORK(&dev->mphy.mac_work, mt7603_mac_work); in mt7603_register_device()
506 tasklet_setup(&dev->mt76.pre_tbtt_tasklet, mt7603_pre_tbtt_tasklet); in mt7603_register_device()
508 dev->slottime = 9; in mt7603_register_device()
509 dev->sensitivity_limit = 28; in mt7603_register_device()
510 dev->dynamic_sensitivity = true; in mt7603_register_device()
512 ret = mt7603_init_hardware(dev); in mt7603_register_device()
536 dev->mphy.leds.cdev.brightness_set = mt7603_led_set_brightness; in mt7603_register_device()
537 dev->mphy.leds.cdev.blink_set = mt7603_led_set_blink; in mt7603_register_device()
542 ret = mt76_register_device(&dev->mt76, true, mt76_rates, in mt7603_register_device()
547 mt7603_init_debugfs(dev); in mt7603_register_device()
548 mt7603_init_txpower(dev, &dev->mphy.sband_2g.sband); in mt7603_register_device()
553 void mt7603_unregister_device(struct mt7603_dev *dev) in mt7603_unregister_device() argument
555 tasklet_disable(&dev->mt76.pre_tbtt_tasklet); in mt7603_unregister_device()
556 mt76_unregister_device(&dev->mt76); in mt7603_unregister_device()
557 mt7603_mcu_exit(dev); in mt7603_unregister_device()
558 mt7603_dma_cleanup(dev); in mt7603_unregister_device()
559 mt76_free_device(&dev->mt76); in mt7603_unregister_device()