Lines Matching +full:txrx +full:- +full:1
1 // SPDX-License-Identifier: ISC
32 if (!mt76_connac_pm_ref(&dev->mphy, &dev->pm)) { in mt7921s_txrx_worker()
33 queue_work(mdev->wq, &dev->pm.wake_work); in mt7921s_txrx_worker()
38 mt76_connac_pm_unref(&dev->mphy, &dev->pm); in mt7921s_txrx_worker()
43 struct mt76_connac_pm *pm = &dev->pm; in mt7921s_unregister_device()
45 cancel_work_sync(&dev->init_work); in mt7921s_unregister_device()
46 mt76_unregister_device(&dev->mt76); in mt7921s_unregister_device()
47 cancel_delayed_work_sync(&pm->ps_work); in mt7921s_unregister_device()
48 cancel_work_sync(&pm->wake_work); in mt7921s_unregister_device()
50 mt76s_deinit(&dev->mt76); in mt7921s_unregister_device()
52 skb_queue_purge(&dev->mt76.mcu.res_q); in mt7921s_unregister_device()
54 mt76_free_device(&dev->mt76); in mt7921s_unregister_device()
59 struct mt76_sdio *sdio = &dev->sdio; in mt7921s_parse_intr()
60 struct mt7921_sdio_intr *irq_data = sdio->intr_data; in mt7921s_parse_intr()
63 sdio_claim_host(sdio->func); in mt7921s_parse_intr()
64 err = sdio_readsb(sdio->func, irq_data, MCR_WHISR, sizeof(*irq_data)); in mt7921s_parse_intr()
65 sdio_release_host(sdio->func); in mt7921s_parse_intr()
70 if (irq_data->rx.num[0] > 16 || in mt7921s_parse_intr()
71 irq_data->rx.num[1] > 128) in mt7921s_parse_intr()
72 return -EINVAL; in mt7921s_parse_intr()
74 intr->isr = irq_data->isr; in mt7921s_parse_intr()
75 intr->rec_mb = irq_data->rec_mb; in mt7921s_parse_intr()
76 intr->tx.wtqcr = irq_data->tx.wtqcr; in mt7921s_parse_intr()
77 intr->rx.num = irq_data->rx.num; in mt7921s_parse_intr()
80 intr->rx.len[0] = irq_data->rx.len0; in mt7921s_parse_intr()
82 intr->rx.len[1] = irq_data->rx.len1; in mt7921s_parse_intr()
131 ops = mt792x_get_mac80211_ops(&func->dev, &mt7921_ops, in mt7921s_probe()
132 (void *)id->driver_data, &features); in mt7921s_probe()
134 return -ENOMEM; in mt7921s_probe()
136 mdev = mt76_alloc_device(&func->dev, sizeof(*dev), ops, &drv_ops); in mt7921s_probe()
138 return -ENOMEM; in mt7921s_probe()
141 dev->fw_features = features; in mt7921s_probe()
142 dev->hif_ops = &mt7921_sdio_ops; in mt7921s_probe()
153 atomic_set(&mdev->bus_hung, false); in mt7921s_probe()
155 mdev->rev = (mt76_rr(dev, MT_HW_CHIPID) << 16) | in mt7921s_probe()
157 dev_dbg(mdev->dev, "ASIC revision: %04x\n", mdev->rev); in mt7921s_probe()
159 mdev->sdio.parse_irq = mt7921s_parse_intr; in mt7921s_probe()
160 mdev->sdio.intr_data = devm_kmalloc(mdev->dev, in mt7921s_probe()
163 if (!mdev->sdio.intr_data) { in mt7921s_probe()
164 ret = -ENOMEM; in mt7921s_probe()
180 ret = mt76_worker_setup(mt76_hw(dev), &mdev->sdio.txrx_worker, in mt7921s_probe()
181 mt7921s_txrx_worker, "sdio-txrx"); in mt7921s_probe()
185 sched_set_fifo_low(mdev->sdio.txrx_worker.task); in mt7921s_probe()
194 mt76s_deinit(&dev->mt76); in mt7921s_probe()
195 mt76_free_device(&dev->mt76); in mt7921s_probe()
211 struct mt76_connac_pm *pm = &dev->pm; in mt7921s_suspend()
212 struct mt76_dev *mdev = &dev->mt76; in mt7921s_suspend()
215 pm->suspended = true; in mt7921s_suspend()
216 set_bit(MT76_STATE_SUSPEND, &mdev->phy.state); in mt7921s_suspend()
218 flush_work(&dev->reset_work); in mt7921s_suspend()
219 cancel_delayed_work_sync(&pm->ps_work); in mt7921s_suspend()
220 cancel_work_sync(&pm->wake_work); in mt7921s_suspend()
233 mt76_txq_schedule_all(&dev->mphy); in mt7921s_suspend()
234 mt76_worker_disable(&mdev->tx_worker); in mt7921s_suspend()
235 mt76_worker_disable(&mdev->sdio.status_worker); in mt7921s_suspend()
236 mt76_worker_disable(&mdev->sdio.stat_worker); in mt7921s_suspend()
237 clear_bit(MT76_READING_STATS, &dev->mphy.state); in mt7921s_suspend()
240 mt76_worker_schedule(&mdev->sdio.txrx_worker); in mt7921s_suspend()
241 wait_event_timeout(dev->mt76.sdio.wait, in mt7921s_suspend()
242 mt76s_txqs_empty(&dev->mt76), 5 * HZ); in mt7921s_suspend()
249 mt76_worker_disable(&mdev->sdio.txrx_worker); in mt7921s_suspend()
250 mt76_worker_disable(&mdev->sdio.net_worker); in mt7921s_suspend()
261 mt76_worker_enable(&mdev->sdio.net_worker); in mt7921s_suspend()
262 mt76_worker_enable(&mdev->sdio.txrx_worker); in mt7921s_suspend()
266 mt76_worker_enable(&mdev->tx_worker); in mt7921s_suspend()
267 mt76_worker_enable(&mdev->sdio.status_worker); in mt7921s_suspend()
268 mt76_worker_enable(&mdev->sdio.stat_worker); in mt7921s_suspend()
270 if (!pm->ds_enable) in mt7921s_suspend()
274 clear_bit(MT76_STATE_SUSPEND, &mdev->phy.state); in mt7921s_suspend()
275 pm->suspended = false; in mt7921s_suspend()
278 mt792x_reset(&dev->mt76); in mt7921s_suspend()
287 struct mt76_connac_pm *pm = &dev->pm; in mt7921s_resume()
288 struct mt76_dev *mdev = &dev->mt76; in mt7921s_resume()
291 clear_bit(MT76_STATE_SUSPEND, &mdev->phy.state); in mt7921s_resume()
297 mt76_worker_enable(&mdev->tx_worker); in mt7921s_resume()
298 mt76_worker_enable(&mdev->sdio.txrx_worker); in mt7921s_resume()
299 mt76_worker_enable(&mdev->sdio.status_worker); in mt7921s_resume()
300 mt76_worker_enable(&mdev->sdio.net_worker); in mt7921s_resume()
301 mt76_worker_enable(&mdev->sdio.stat_worker); in mt7921s_resume()
304 if (!pm->ds_enable) in mt7921s_resume()
309 pm->suspended = false; in mt7921s_resume()
312 mt792x_reset(&dev->mt76); in mt7921s_resume()