Lines Matching refs:rt2x00dev
29 struct rt2x00_dev *rt2x00dev = queue->rt2x00dev; in rt2800mmio_get_dma_done() local
39 idx = rt2x00mmio_register_read(rt2x00dev, TX_DTX_IDX(qid)); in rt2800mmio_get_dma_done()
42 idx = rt2x00mmio_register_read(rt2x00dev, TX_DTX_IDX(5)); in rt2800mmio_get_dma_done()
189 static void rt2800mmio_wakeup(struct rt2x00_dev *rt2x00dev) in rt2800mmio_wakeup() argument
194 rt2800_config(rt2x00dev, &libconf, IEEE80211_CONF_CHANGE_PS); in rt2800mmio_wakeup()
197 static inline void rt2800mmio_enable_interrupt(struct rt2x00_dev *rt2x00dev, in rt2800mmio_enable_interrupt() argument
206 spin_lock_irq(&rt2x00dev->irqmask_lock); in rt2800mmio_enable_interrupt()
207 reg = rt2x00mmio_register_read(rt2x00dev, INT_MASK_CSR); in rt2800mmio_enable_interrupt()
209 rt2x00mmio_register_write(rt2x00dev, INT_MASK_CSR, reg); in rt2800mmio_enable_interrupt()
210 spin_unlock_irq(&rt2x00dev->irqmask_lock); in rt2800mmio_enable_interrupt()
215 struct rt2x00_dev *rt2x00dev = from_tasklet(rt2x00dev, t, in rt2800mmio_pretbtt_tasklet() local
217 rt2x00lib_pretbtt(rt2x00dev); in rt2800mmio_pretbtt_tasklet()
218 if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) in rt2800mmio_pretbtt_tasklet()
219 rt2800mmio_enable_interrupt(rt2x00dev, INT_MASK_CSR_PRE_TBTT); in rt2800mmio_pretbtt_tasklet()
225 struct rt2x00_dev *rt2x00dev = from_tasklet(rt2x00dev, t, tbtt_tasklet); in rt2800mmio_tbtt_tasklet() local
226 struct rt2800_drv_data *drv_data = rt2x00dev->drv_data; in rt2800mmio_tbtt_tasklet()
229 rt2x00lib_beacondone(rt2x00dev); in rt2800mmio_tbtt_tasklet()
231 if (rt2x00dev->intf_ap_count) { in rt2800mmio_tbtt_tasklet()
239 reg = rt2x00mmio_register_read(rt2x00dev, BCN_TIME_CFG); in rt2800mmio_tbtt_tasklet()
241 (rt2x00dev->beacon_int * 16) - 1); in rt2800mmio_tbtt_tasklet()
242 rt2x00mmio_register_write(rt2x00dev, BCN_TIME_CFG, reg); in rt2800mmio_tbtt_tasklet()
244 reg = rt2x00mmio_register_read(rt2x00dev, BCN_TIME_CFG); in rt2800mmio_tbtt_tasklet()
246 (rt2x00dev->beacon_int * 16)); in rt2800mmio_tbtt_tasklet()
247 rt2x00mmio_register_write(rt2x00dev, BCN_TIME_CFG, reg); in rt2800mmio_tbtt_tasklet()
253 if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) in rt2800mmio_tbtt_tasklet()
254 rt2800mmio_enable_interrupt(rt2x00dev, INT_MASK_CSR_TBTT); in rt2800mmio_tbtt_tasklet()
260 struct rt2x00_dev *rt2x00dev = from_tasklet(rt2x00dev, t, in rt2800mmio_rxdone_tasklet() local
262 if (rt2x00mmio_rxdone(rt2x00dev)) in rt2800mmio_rxdone_tasklet()
263 tasklet_schedule(&rt2x00dev->rxdone_tasklet); in rt2800mmio_rxdone_tasklet()
264 else if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) in rt2800mmio_rxdone_tasklet()
265 rt2800mmio_enable_interrupt(rt2x00dev, INT_MASK_CSR_RX_DONE); in rt2800mmio_rxdone_tasklet()
271 struct rt2x00_dev *rt2x00dev = from_tasklet(rt2x00dev, t, in rt2800mmio_autowake_tasklet() local
273 rt2800mmio_wakeup(rt2x00dev); in rt2800mmio_autowake_tasklet()
274 if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) in rt2800mmio_autowake_tasklet()
275 rt2800mmio_enable_interrupt(rt2x00dev, in rt2800mmio_autowake_tasklet()
280 static void rt2800mmio_fetch_txstatus(struct rt2x00_dev *rt2x00dev) in rt2800mmio_fetch_txstatus() argument
300 spin_lock_irqsave(&rt2x00dev->irqmask_lock, flags); in rt2800mmio_fetch_txstatus()
302 while (!kfifo_is_full(&rt2x00dev->txstatus_fifo)) { in rt2800mmio_fetch_txstatus()
303 status = rt2x00mmio_register_read(rt2x00dev, TX_STA_FIFO); in rt2800mmio_fetch_txstatus()
307 kfifo_put(&rt2x00dev->txstatus_fifo, status); in rt2800mmio_fetch_txstatus()
310 spin_unlock_irqrestore(&rt2x00dev->irqmask_lock, flags); in rt2800mmio_fetch_txstatus()
315 struct rt2x00_dev *rt2x00dev = from_tasklet(rt2x00dev, t, in rt2800mmio_txstatus_tasklet() local
318 rt2800_txdone(rt2x00dev, 16); in rt2800mmio_txstatus_tasklet()
320 if (!kfifo_is_empty(&rt2x00dev->txstatus_fifo)) in rt2800mmio_txstatus_tasklet()
321 tasklet_schedule(&rt2x00dev->txstatus_tasklet); in rt2800mmio_txstatus_tasklet()
328 struct rt2x00_dev *rt2x00dev = dev_instance; in rt2800mmio_interrupt() local
332 reg = rt2x00mmio_register_read(rt2x00dev, INT_SOURCE_CSR); in rt2800mmio_interrupt()
333 rt2x00mmio_register_write(rt2x00dev, INT_SOURCE_CSR, reg); in rt2800mmio_interrupt()
338 if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) in rt2800mmio_interrupt()
350 rt2800mmio_fetch_txstatus(rt2x00dev); in rt2800mmio_interrupt()
351 if (!kfifo_is_empty(&rt2x00dev->txstatus_fifo)) in rt2800mmio_interrupt()
352 tasklet_schedule(&rt2x00dev->txstatus_tasklet); in rt2800mmio_interrupt()
356 tasklet_hi_schedule(&rt2x00dev->pretbtt_tasklet); in rt2800mmio_interrupt()
359 tasklet_hi_schedule(&rt2x00dev->tbtt_tasklet); in rt2800mmio_interrupt()
362 tasklet_schedule(&rt2x00dev->rxdone_tasklet); in rt2800mmio_interrupt()
365 tasklet_schedule(&rt2x00dev->autowake_tasklet); in rt2800mmio_interrupt()
371 spin_lock(&rt2x00dev->irqmask_lock); in rt2800mmio_interrupt()
372 reg = rt2x00mmio_register_read(rt2x00dev, INT_MASK_CSR); in rt2800mmio_interrupt()
374 rt2x00mmio_register_write(rt2x00dev, INT_MASK_CSR, reg); in rt2800mmio_interrupt()
375 spin_unlock(&rt2x00dev->irqmask_lock); in rt2800mmio_interrupt()
381 void rt2800mmio_toggle_irq(struct rt2x00_dev *rt2x00dev, in rt2800mmio_toggle_irq() argument
392 reg = rt2x00mmio_register_read(rt2x00dev, INT_SOURCE_CSR); in rt2800mmio_toggle_irq()
393 rt2x00mmio_register_write(rt2x00dev, INT_SOURCE_CSR, reg); in rt2800mmio_toggle_irq()
396 spin_lock_irqsave(&rt2x00dev->irqmask_lock, flags); in rt2800mmio_toggle_irq()
405 rt2x00mmio_register_write(rt2x00dev, INT_MASK_CSR, reg); in rt2800mmio_toggle_irq()
406 spin_unlock_irqrestore(&rt2x00dev->irqmask_lock, flags); in rt2800mmio_toggle_irq()
412 tasklet_kill(&rt2x00dev->txstatus_tasklet); in rt2800mmio_toggle_irq()
413 tasklet_kill(&rt2x00dev->rxdone_tasklet); in rt2800mmio_toggle_irq()
414 tasklet_kill(&rt2x00dev->autowake_tasklet); in rt2800mmio_toggle_irq()
415 tasklet_kill(&rt2x00dev->tbtt_tasklet); in rt2800mmio_toggle_irq()
416 tasklet_kill(&rt2x00dev->pretbtt_tasklet); in rt2800mmio_toggle_irq()
426 struct rt2x00_dev *rt2x00dev = queue->rt2x00dev; in rt2800mmio_start_queue() local
431 reg = rt2x00mmio_register_read(rt2x00dev, MAC_SYS_CTRL); in rt2800mmio_start_queue()
433 rt2x00mmio_register_write(rt2x00dev, MAC_SYS_CTRL, reg); in rt2800mmio_start_queue()
436 reg = rt2x00mmio_register_read(rt2x00dev, BCN_TIME_CFG); in rt2800mmio_start_queue()
440 rt2x00mmio_register_write(rt2x00dev, BCN_TIME_CFG, reg); in rt2800mmio_start_queue()
442 reg = rt2x00mmio_register_read(rt2x00dev, INT_TIMER_EN); in rt2800mmio_start_queue()
444 rt2x00mmio_register_write(rt2x00dev, INT_TIMER_EN, reg); in rt2800mmio_start_queue()
457 struct rt2x00_dev *rt2x00dev = queue->rt2x00dev; in rt2800mmio_kick_queue() local
467 rt2x00mmio_register_write(rt2x00dev, TX_CTX_IDX(queue->qid), in rt2800mmio_kick_queue()
469 hrtimer_start(&rt2x00dev->txstatus_timer, in rt2800mmio_kick_queue()
474 rt2x00mmio_register_write(rt2x00dev, TX_CTX_IDX(5), in rt2800mmio_kick_queue()
485 struct rt2x00_dev *rt2x00dev = queue->rt2x00dev; in rt2800mmio_flush_queue() local
516 queue_work(rt2x00dev->workqueue, &rt2x00dev->txdone_work); in rt2800mmio_flush_queue()
529 struct rt2x00_dev *rt2x00dev = queue->rt2x00dev; in rt2800mmio_stop_queue() local
534 reg = rt2x00mmio_register_read(rt2x00dev, MAC_SYS_CTRL); in rt2800mmio_stop_queue()
536 rt2x00mmio_register_write(rt2x00dev, MAC_SYS_CTRL, reg); in rt2800mmio_stop_queue()
539 reg = rt2x00mmio_register_read(rt2x00dev, BCN_TIME_CFG); in rt2800mmio_stop_queue()
543 rt2x00mmio_register_write(rt2x00dev, BCN_TIME_CFG, reg); in rt2800mmio_stop_queue()
545 reg = rt2x00mmio_register_read(rt2x00dev, INT_TIMER_EN); in rt2800mmio_stop_queue()
547 rt2x00mmio_register_write(rt2x00dev, INT_TIMER_EN, reg); in rt2800mmio_stop_queue()
554 tasklet_kill(&rt2x00dev->tbtt_tasklet); in rt2800mmio_stop_queue()
555 tasklet_kill(&rt2x00dev->pretbtt_tasklet); in rt2800mmio_stop_queue()
566 struct rt2x00_dev *rt2x00dev = queue->rt2x00dev; in rt2800mmio_queue_init() local
569 rt2800_get_txwi_rxwi_size(rt2x00dev, &txwi_size, &rxwi_size); in rt2800mmio_queue_init()
631 struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev; in rt2800mmio_clear_entry() local
647 rt2x00mmio_register_write(rt2x00dev, RX_CRX_IDX, in rt2800mmio_clear_entry()
656 hrtimer_cancel(&rt2x00dev->txstatus_timer); in rt2800mmio_clear_entry()
661 int rt2800mmio_init_queues(struct rt2x00_dev *rt2x00dev) in rt2800mmio_init_queues() argument
668 entry_priv = rt2x00dev->tx[0].entries[0].priv_data; in rt2800mmio_init_queues()
669 rt2x00mmio_register_write(rt2x00dev, TX_BASE_PTR0, in rt2800mmio_init_queues()
671 rt2x00mmio_register_write(rt2x00dev, TX_MAX_CNT0, in rt2800mmio_init_queues()
672 rt2x00dev->tx[0].limit); in rt2800mmio_init_queues()
673 rt2x00mmio_register_write(rt2x00dev, TX_CTX_IDX0, 0); in rt2800mmio_init_queues()
674 rt2x00mmio_register_write(rt2x00dev, TX_DTX_IDX0, 0); in rt2800mmio_init_queues()
676 entry_priv = rt2x00dev->tx[1].entries[0].priv_data; in rt2800mmio_init_queues()
677 rt2x00mmio_register_write(rt2x00dev, TX_BASE_PTR1, in rt2800mmio_init_queues()
679 rt2x00mmio_register_write(rt2x00dev, TX_MAX_CNT1, in rt2800mmio_init_queues()
680 rt2x00dev->tx[1].limit); in rt2800mmio_init_queues()
681 rt2x00mmio_register_write(rt2x00dev, TX_CTX_IDX1, 0); in rt2800mmio_init_queues()
682 rt2x00mmio_register_write(rt2x00dev, TX_DTX_IDX1, 0); in rt2800mmio_init_queues()
684 entry_priv = rt2x00dev->tx[2].entries[0].priv_data; in rt2800mmio_init_queues()
685 rt2x00mmio_register_write(rt2x00dev, TX_BASE_PTR2, in rt2800mmio_init_queues()
687 rt2x00mmio_register_write(rt2x00dev, TX_MAX_CNT2, in rt2800mmio_init_queues()
688 rt2x00dev->tx[2].limit); in rt2800mmio_init_queues()
689 rt2x00mmio_register_write(rt2x00dev, TX_CTX_IDX2, 0); in rt2800mmio_init_queues()
690 rt2x00mmio_register_write(rt2x00dev, TX_DTX_IDX2, 0); in rt2800mmio_init_queues()
692 entry_priv = rt2x00dev->tx[3].entries[0].priv_data; in rt2800mmio_init_queues()
693 rt2x00mmio_register_write(rt2x00dev, TX_BASE_PTR3, in rt2800mmio_init_queues()
695 rt2x00mmio_register_write(rt2x00dev, TX_MAX_CNT3, in rt2800mmio_init_queues()
696 rt2x00dev->tx[3].limit); in rt2800mmio_init_queues()
697 rt2x00mmio_register_write(rt2x00dev, TX_CTX_IDX3, 0); in rt2800mmio_init_queues()
698 rt2x00mmio_register_write(rt2x00dev, TX_DTX_IDX3, 0); in rt2800mmio_init_queues()
700 rt2x00mmio_register_write(rt2x00dev, TX_BASE_PTR4, 0); in rt2800mmio_init_queues()
701 rt2x00mmio_register_write(rt2x00dev, TX_MAX_CNT4, 0); in rt2800mmio_init_queues()
702 rt2x00mmio_register_write(rt2x00dev, TX_CTX_IDX4, 0); in rt2800mmio_init_queues()
703 rt2x00mmio_register_write(rt2x00dev, TX_DTX_IDX4, 0); in rt2800mmio_init_queues()
705 rt2x00mmio_register_write(rt2x00dev, TX_BASE_PTR5, 0); in rt2800mmio_init_queues()
706 rt2x00mmio_register_write(rt2x00dev, TX_MAX_CNT5, 0); in rt2800mmio_init_queues()
707 rt2x00mmio_register_write(rt2x00dev, TX_CTX_IDX5, 0); in rt2800mmio_init_queues()
708 rt2x00mmio_register_write(rt2x00dev, TX_DTX_IDX5, 0); in rt2800mmio_init_queues()
710 entry_priv = rt2x00dev->rx->entries[0].priv_data; in rt2800mmio_init_queues()
711 rt2x00mmio_register_write(rt2x00dev, RX_BASE_PTR, in rt2800mmio_init_queues()
713 rt2x00mmio_register_write(rt2x00dev, RX_MAX_CNT, in rt2800mmio_init_queues()
714 rt2x00dev->rx[0].limit); in rt2800mmio_init_queues()
715 rt2x00mmio_register_write(rt2x00dev, RX_CRX_IDX, in rt2800mmio_init_queues()
716 rt2x00dev->rx[0].limit - 1); in rt2800mmio_init_queues()
717 rt2x00mmio_register_write(rt2x00dev, RX_DRX_IDX, 0); in rt2800mmio_init_queues()
719 rt2800_disable_wpdma(rt2x00dev); in rt2800mmio_init_queues()
721 rt2x00mmio_register_write(rt2x00dev, DELAY_INT_CFG, 0); in rt2800mmio_init_queues()
727 int rt2800mmio_init_registers(struct rt2x00_dev *rt2x00dev) in rt2800mmio_init_registers() argument
734 reg = rt2x00mmio_register_read(rt2x00dev, WPDMA_RST_IDX); in rt2800mmio_init_registers()
742 rt2x00mmio_register_write(rt2x00dev, WPDMA_RST_IDX, reg); in rt2800mmio_init_registers()
744 rt2x00mmio_register_write(rt2x00dev, PBF_SYS_CTRL, 0x00000e1f); in rt2800mmio_init_registers()
745 rt2x00mmio_register_write(rt2x00dev, PBF_SYS_CTRL, 0x00000e00); in rt2800mmio_init_registers()
747 if (rt2x00_is_pcie(rt2x00dev) && in rt2800mmio_init_registers()
748 (rt2x00_rt(rt2x00dev, RT3090) || in rt2800mmio_init_registers()
749 rt2x00_rt(rt2x00dev, RT3390) || in rt2800mmio_init_registers()
750 rt2x00_rt(rt2x00dev, RT3572) || in rt2800mmio_init_registers()
751 rt2x00_rt(rt2x00dev, RT3593) || in rt2800mmio_init_registers()
752 rt2x00_rt(rt2x00dev, RT5390) || in rt2800mmio_init_registers()
753 rt2x00_rt(rt2x00dev, RT5392) || in rt2800mmio_init_registers()
754 rt2x00_rt(rt2x00dev, RT5592))) { in rt2800mmio_init_registers()
755 reg = rt2x00mmio_register_read(rt2x00dev, AUX_CTRL); in rt2800mmio_init_registers()
758 rt2x00mmio_register_write(rt2x00dev, AUX_CTRL, reg); in rt2800mmio_init_registers()
761 rt2x00mmio_register_write(rt2x00dev, PWR_PIN_CFG, 0x00000003); in rt2800mmio_init_registers()
766 rt2x00mmio_register_write(rt2x00dev, MAC_SYS_CTRL, reg); in rt2800mmio_init_registers()
768 rt2x00mmio_register_write(rt2x00dev, MAC_SYS_CTRL, 0x00000000); in rt2800mmio_init_registers()
777 int rt2800mmio_enable_radio(struct rt2x00_dev *rt2x00dev) in rt2800mmio_enable_radio() argument
780 rt2800_wait_wpdma_ready(rt2x00dev); in rt2800mmio_enable_radio()
782 if (unlikely(rt2800mmio_init_queues(rt2x00dev))) in rt2800mmio_enable_radio()
785 return rt2800_enable_radio(rt2x00dev); in rt2800mmio_enable_radio()
791 struct rt2x00_dev *rt2x00dev = in rt2800mmio_work_txdone() local
794 if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) in rt2800mmio_work_txdone()
797 while (!kfifo_is_empty(&rt2x00dev->txstatus_fifo) || in rt2800mmio_work_txdone()
798 rt2800_txstatus_timeout(rt2x00dev)) { in rt2800mmio_work_txdone()
800 tasklet_disable(&rt2x00dev->txstatus_tasklet); in rt2800mmio_work_txdone()
801 rt2800_txdone(rt2x00dev, UINT_MAX); in rt2800mmio_work_txdone()
802 rt2800_txdone_nostatus(rt2x00dev); in rt2800mmio_work_txdone()
803 tasklet_enable(&rt2x00dev->txstatus_tasklet); in rt2800mmio_work_txdone()
806 if (rt2800_txstatus_pending(rt2x00dev)) in rt2800mmio_work_txdone()
807 hrtimer_start(&rt2x00dev->txstatus_timer, in rt2800mmio_work_txdone()
813 struct rt2x00_dev *rt2x00dev = in rt2800mmio_tx_sta_fifo_timeout() local
816 if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) in rt2800mmio_tx_sta_fifo_timeout()
819 if (!rt2800_txstatus_pending(rt2x00dev)) in rt2800mmio_tx_sta_fifo_timeout()
822 rt2800mmio_fetch_txstatus(rt2x00dev); in rt2800mmio_tx_sta_fifo_timeout()
823 if (!kfifo_is_empty(&rt2x00dev->txstatus_fifo)) in rt2800mmio_tx_sta_fifo_timeout()
824 tasklet_schedule(&rt2x00dev->txstatus_tasklet); in rt2800mmio_tx_sta_fifo_timeout()
826 queue_work(rt2x00dev->workqueue, &rt2x00dev->txdone_work); in rt2800mmio_tx_sta_fifo_timeout()
831 int rt2800mmio_probe_hw(struct rt2x00_dev *rt2x00dev) in rt2800mmio_probe_hw() argument
835 retval = rt2800_probe_hw(rt2x00dev); in rt2800mmio_probe_hw()
842 rt2x00dev->txstatus_timer.function = rt2800mmio_tx_sta_fifo_timeout; in rt2800mmio_probe_hw()
847 INIT_WORK(&rt2x00dev->txdone_work, rt2800mmio_work_txdone); in rt2800mmio_probe_hw()