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 = (struct rt2x00_dev *)data; in rt2800mmio_pretbtt_tasklet() local
216 rt2x00lib_pretbtt(rt2x00dev); in rt2800mmio_pretbtt_tasklet()
217 if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) in rt2800mmio_pretbtt_tasklet()
218 rt2800mmio_enable_interrupt(rt2x00dev, INT_MASK_CSR_PRE_TBTT); in rt2800mmio_pretbtt_tasklet()
224 struct rt2x00_dev *rt2x00dev = (struct rt2x00_dev *)data; in rt2800mmio_tbtt_tasklet() local
225 struct rt2800_drv_data *drv_data = rt2x00dev->drv_data; in rt2800mmio_tbtt_tasklet()
228 rt2x00lib_beacondone(rt2x00dev); in rt2800mmio_tbtt_tasklet()
230 if (rt2x00dev->intf_ap_count) { in rt2800mmio_tbtt_tasklet()
238 reg = rt2x00mmio_register_read(rt2x00dev, BCN_TIME_CFG); in rt2800mmio_tbtt_tasklet()
240 (rt2x00dev->beacon_int * 16) - 1); in rt2800mmio_tbtt_tasklet()
241 rt2x00mmio_register_write(rt2x00dev, BCN_TIME_CFG, reg); in rt2800mmio_tbtt_tasklet()
243 reg = rt2x00mmio_register_read(rt2x00dev, BCN_TIME_CFG); in rt2800mmio_tbtt_tasklet()
245 (rt2x00dev->beacon_int * 16)); in rt2800mmio_tbtt_tasklet()
246 rt2x00mmio_register_write(rt2x00dev, BCN_TIME_CFG, reg); in rt2800mmio_tbtt_tasklet()
252 if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) in rt2800mmio_tbtt_tasklet()
253 rt2800mmio_enable_interrupt(rt2x00dev, INT_MASK_CSR_TBTT); in rt2800mmio_tbtt_tasklet()
259 struct rt2x00_dev *rt2x00dev = (struct rt2x00_dev *)data; in rt2800mmio_rxdone_tasklet() local
260 if (rt2x00mmio_rxdone(rt2x00dev)) in rt2800mmio_rxdone_tasklet()
261 tasklet_schedule(&rt2x00dev->rxdone_tasklet); in rt2800mmio_rxdone_tasklet()
262 else if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) in rt2800mmio_rxdone_tasklet()
263 rt2800mmio_enable_interrupt(rt2x00dev, INT_MASK_CSR_RX_DONE); in rt2800mmio_rxdone_tasklet()
269 struct rt2x00_dev *rt2x00dev = (struct rt2x00_dev *)data; in rt2800mmio_autowake_tasklet() local
270 rt2800mmio_wakeup(rt2x00dev); in rt2800mmio_autowake_tasklet()
271 if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) in rt2800mmio_autowake_tasklet()
272 rt2800mmio_enable_interrupt(rt2x00dev, in rt2800mmio_autowake_tasklet()
277 static void rt2800mmio_fetch_txstatus(struct rt2x00_dev *rt2x00dev) in rt2800mmio_fetch_txstatus() argument
297 spin_lock_irqsave(&rt2x00dev->irqmask_lock, flags); in rt2800mmio_fetch_txstatus()
299 while (!kfifo_is_full(&rt2x00dev->txstatus_fifo)) { in rt2800mmio_fetch_txstatus()
300 status = rt2x00mmio_register_read(rt2x00dev, TX_STA_FIFO); in rt2800mmio_fetch_txstatus()
304 kfifo_put(&rt2x00dev->txstatus_fifo, status); in rt2800mmio_fetch_txstatus()
307 spin_unlock_irqrestore(&rt2x00dev->irqmask_lock, flags); in rt2800mmio_fetch_txstatus()
312 struct rt2x00_dev *rt2x00dev = (struct rt2x00_dev *)data; in rt2800mmio_txstatus_tasklet() local
314 rt2800_txdone(rt2x00dev, 16); in rt2800mmio_txstatus_tasklet()
316 if (!kfifo_is_empty(&rt2x00dev->txstatus_fifo)) in rt2800mmio_txstatus_tasklet()
317 tasklet_schedule(&rt2x00dev->txstatus_tasklet); in rt2800mmio_txstatus_tasklet()
324 struct rt2x00_dev *rt2x00dev = dev_instance; in rt2800mmio_interrupt() local
328 reg = rt2x00mmio_register_read(rt2x00dev, INT_SOURCE_CSR); in rt2800mmio_interrupt()
329 rt2x00mmio_register_write(rt2x00dev, INT_SOURCE_CSR, reg); in rt2800mmio_interrupt()
334 if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) in rt2800mmio_interrupt()
346 rt2800mmio_fetch_txstatus(rt2x00dev); in rt2800mmio_interrupt()
347 if (!kfifo_is_empty(&rt2x00dev->txstatus_fifo)) in rt2800mmio_interrupt()
348 tasklet_schedule(&rt2x00dev->txstatus_tasklet); in rt2800mmio_interrupt()
352 tasklet_hi_schedule(&rt2x00dev->pretbtt_tasklet); in rt2800mmio_interrupt()
355 tasklet_hi_schedule(&rt2x00dev->tbtt_tasklet); in rt2800mmio_interrupt()
358 tasklet_schedule(&rt2x00dev->rxdone_tasklet); in rt2800mmio_interrupt()
361 tasklet_schedule(&rt2x00dev->autowake_tasklet); in rt2800mmio_interrupt()
367 spin_lock(&rt2x00dev->irqmask_lock); in rt2800mmio_interrupt()
368 reg = rt2x00mmio_register_read(rt2x00dev, INT_MASK_CSR); in rt2800mmio_interrupt()
370 rt2x00mmio_register_write(rt2x00dev, INT_MASK_CSR, reg); in rt2800mmio_interrupt()
371 spin_unlock(&rt2x00dev->irqmask_lock); in rt2800mmio_interrupt()
377 void rt2800mmio_toggle_irq(struct rt2x00_dev *rt2x00dev, in rt2800mmio_toggle_irq() argument
388 reg = rt2x00mmio_register_read(rt2x00dev, INT_SOURCE_CSR); in rt2800mmio_toggle_irq()
389 rt2x00mmio_register_write(rt2x00dev, INT_SOURCE_CSR, reg); in rt2800mmio_toggle_irq()
392 spin_lock_irqsave(&rt2x00dev->irqmask_lock, flags); in rt2800mmio_toggle_irq()
401 rt2x00mmio_register_write(rt2x00dev, INT_MASK_CSR, reg); in rt2800mmio_toggle_irq()
402 spin_unlock_irqrestore(&rt2x00dev->irqmask_lock, flags); in rt2800mmio_toggle_irq()
408 tasklet_kill(&rt2x00dev->txstatus_tasklet); in rt2800mmio_toggle_irq()
409 tasklet_kill(&rt2x00dev->rxdone_tasklet); in rt2800mmio_toggle_irq()
410 tasklet_kill(&rt2x00dev->autowake_tasklet); in rt2800mmio_toggle_irq()
411 tasklet_kill(&rt2x00dev->tbtt_tasklet); in rt2800mmio_toggle_irq()
412 tasklet_kill(&rt2x00dev->pretbtt_tasklet); in rt2800mmio_toggle_irq()
422 struct rt2x00_dev *rt2x00dev = queue->rt2x00dev; in rt2800mmio_start_queue() local
427 reg = rt2x00mmio_register_read(rt2x00dev, MAC_SYS_CTRL); in rt2800mmio_start_queue()
429 rt2x00mmio_register_write(rt2x00dev, MAC_SYS_CTRL, reg); in rt2800mmio_start_queue()
432 reg = rt2x00mmio_register_read(rt2x00dev, BCN_TIME_CFG); in rt2800mmio_start_queue()
436 rt2x00mmio_register_write(rt2x00dev, BCN_TIME_CFG, reg); in rt2800mmio_start_queue()
438 reg = rt2x00mmio_register_read(rt2x00dev, INT_TIMER_EN); in rt2800mmio_start_queue()
440 rt2x00mmio_register_write(rt2x00dev, INT_TIMER_EN, reg); in rt2800mmio_start_queue()
453 struct rt2x00_dev *rt2x00dev = queue->rt2x00dev; in rt2800mmio_kick_queue() local
463 rt2x00mmio_register_write(rt2x00dev, TX_CTX_IDX(queue->qid), in rt2800mmio_kick_queue()
465 hrtimer_start(&rt2x00dev->txstatus_timer, in rt2800mmio_kick_queue()
470 rt2x00mmio_register_write(rt2x00dev, TX_CTX_IDX(5), in rt2800mmio_kick_queue()
481 struct rt2x00_dev *rt2x00dev = queue->rt2x00dev; in rt2800mmio_flush_queue() local
512 queue_work(rt2x00dev->workqueue, &rt2x00dev->txdone_work); in rt2800mmio_flush_queue()
525 struct rt2x00_dev *rt2x00dev = queue->rt2x00dev; in rt2800mmio_stop_queue() local
530 reg = rt2x00mmio_register_read(rt2x00dev, MAC_SYS_CTRL); in rt2800mmio_stop_queue()
532 rt2x00mmio_register_write(rt2x00dev, MAC_SYS_CTRL, reg); in rt2800mmio_stop_queue()
535 reg = rt2x00mmio_register_read(rt2x00dev, BCN_TIME_CFG); in rt2800mmio_stop_queue()
539 rt2x00mmio_register_write(rt2x00dev, BCN_TIME_CFG, reg); in rt2800mmio_stop_queue()
541 reg = rt2x00mmio_register_read(rt2x00dev, INT_TIMER_EN); in rt2800mmio_stop_queue()
543 rt2x00mmio_register_write(rt2x00dev, INT_TIMER_EN, reg); in rt2800mmio_stop_queue()
550 tasklet_kill(&rt2x00dev->tbtt_tasklet); in rt2800mmio_stop_queue()
551 tasklet_kill(&rt2x00dev->pretbtt_tasklet); in rt2800mmio_stop_queue()
562 struct rt2x00_dev *rt2x00dev = queue->rt2x00dev; in rt2800mmio_queue_init() local
565 rt2800_get_txwi_rxwi_size(rt2x00dev, &txwi_size, &rxwi_size); in rt2800mmio_queue_init()
628 struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev; in rt2800mmio_clear_entry() local
644 rt2x00mmio_register_write(rt2x00dev, RX_CRX_IDX, in rt2800mmio_clear_entry()
653 hrtimer_cancel(&rt2x00dev->txstatus_timer); in rt2800mmio_clear_entry()
658 int rt2800mmio_init_queues(struct rt2x00_dev *rt2x00dev) in rt2800mmio_init_queues() argument
665 entry_priv = rt2x00dev->tx[0].entries[0].priv_data; in rt2800mmio_init_queues()
666 rt2x00mmio_register_write(rt2x00dev, TX_BASE_PTR0, in rt2800mmio_init_queues()
668 rt2x00mmio_register_write(rt2x00dev, TX_MAX_CNT0, in rt2800mmio_init_queues()
669 rt2x00dev->tx[0].limit); in rt2800mmio_init_queues()
670 rt2x00mmio_register_write(rt2x00dev, TX_CTX_IDX0, 0); in rt2800mmio_init_queues()
671 rt2x00mmio_register_write(rt2x00dev, TX_DTX_IDX0, 0); in rt2800mmio_init_queues()
673 entry_priv = rt2x00dev->tx[1].entries[0].priv_data; in rt2800mmio_init_queues()
674 rt2x00mmio_register_write(rt2x00dev, TX_BASE_PTR1, in rt2800mmio_init_queues()
676 rt2x00mmio_register_write(rt2x00dev, TX_MAX_CNT1, in rt2800mmio_init_queues()
677 rt2x00dev->tx[1].limit); in rt2800mmio_init_queues()
678 rt2x00mmio_register_write(rt2x00dev, TX_CTX_IDX1, 0); in rt2800mmio_init_queues()
679 rt2x00mmio_register_write(rt2x00dev, TX_DTX_IDX1, 0); in rt2800mmio_init_queues()
681 entry_priv = rt2x00dev->tx[2].entries[0].priv_data; in rt2800mmio_init_queues()
682 rt2x00mmio_register_write(rt2x00dev, TX_BASE_PTR2, in rt2800mmio_init_queues()
684 rt2x00mmio_register_write(rt2x00dev, TX_MAX_CNT2, in rt2800mmio_init_queues()
685 rt2x00dev->tx[2].limit); in rt2800mmio_init_queues()
686 rt2x00mmio_register_write(rt2x00dev, TX_CTX_IDX2, 0); in rt2800mmio_init_queues()
687 rt2x00mmio_register_write(rt2x00dev, TX_DTX_IDX2, 0); in rt2800mmio_init_queues()
689 entry_priv = rt2x00dev->tx[3].entries[0].priv_data; in rt2800mmio_init_queues()
690 rt2x00mmio_register_write(rt2x00dev, TX_BASE_PTR3, in rt2800mmio_init_queues()
692 rt2x00mmio_register_write(rt2x00dev, TX_MAX_CNT3, in rt2800mmio_init_queues()
693 rt2x00dev->tx[3].limit); in rt2800mmio_init_queues()
694 rt2x00mmio_register_write(rt2x00dev, TX_CTX_IDX3, 0); in rt2800mmio_init_queues()
695 rt2x00mmio_register_write(rt2x00dev, TX_DTX_IDX3, 0); in rt2800mmio_init_queues()
697 rt2x00mmio_register_write(rt2x00dev, TX_BASE_PTR4, 0); in rt2800mmio_init_queues()
698 rt2x00mmio_register_write(rt2x00dev, TX_MAX_CNT4, 0); in rt2800mmio_init_queues()
699 rt2x00mmio_register_write(rt2x00dev, TX_CTX_IDX4, 0); in rt2800mmio_init_queues()
700 rt2x00mmio_register_write(rt2x00dev, TX_DTX_IDX4, 0); in rt2800mmio_init_queues()
702 rt2x00mmio_register_write(rt2x00dev, TX_BASE_PTR5, 0); in rt2800mmio_init_queues()
703 rt2x00mmio_register_write(rt2x00dev, TX_MAX_CNT5, 0); in rt2800mmio_init_queues()
704 rt2x00mmio_register_write(rt2x00dev, TX_CTX_IDX5, 0); in rt2800mmio_init_queues()
705 rt2x00mmio_register_write(rt2x00dev, TX_DTX_IDX5, 0); in rt2800mmio_init_queues()
707 entry_priv = rt2x00dev->rx->entries[0].priv_data; in rt2800mmio_init_queues()
708 rt2x00mmio_register_write(rt2x00dev, RX_BASE_PTR, in rt2800mmio_init_queues()
710 rt2x00mmio_register_write(rt2x00dev, RX_MAX_CNT, in rt2800mmio_init_queues()
711 rt2x00dev->rx[0].limit); in rt2800mmio_init_queues()
712 rt2x00mmio_register_write(rt2x00dev, RX_CRX_IDX, in rt2800mmio_init_queues()
713 rt2x00dev->rx[0].limit - 1); in rt2800mmio_init_queues()
714 rt2x00mmio_register_write(rt2x00dev, RX_DRX_IDX, 0); in rt2800mmio_init_queues()
716 rt2800_disable_wpdma(rt2x00dev); in rt2800mmio_init_queues()
718 rt2x00mmio_register_write(rt2x00dev, DELAY_INT_CFG, 0); in rt2800mmio_init_queues()
724 int rt2800mmio_init_registers(struct rt2x00_dev *rt2x00dev) in rt2800mmio_init_registers() argument
731 reg = rt2x00mmio_register_read(rt2x00dev, WPDMA_RST_IDX); in rt2800mmio_init_registers()
739 rt2x00mmio_register_write(rt2x00dev, WPDMA_RST_IDX, reg); in rt2800mmio_init_registers()
741 rt2x00mmio_register_write(rt2x00dev, PBF_SYS_CTRL, 0x00000e1f); in rt2800mmio_init_registers()
742 rt2x00mmio_register_write(rt2x00dev, PBF_SYS_CTRL, 0x00000e00); in rt2800mmio_init_registers()
744 if (rt2x00_is_pcie(rt2x00dev) && in rt2800mmio_init_registers()
745 (rt2x00_rt(rt2x00dev, RT3090) || in rt2800mmio_init_registers()
746 rt2x00_rt(rt2x00dev, RT3390) || in rt2800mmio_init_registers()
747 rt2x00_rt(rt2x00dev, RT3572) || in rt2800mmio_init_registers()
748 rt2x00_rt(rt2x00dev, RT3593) || in rt2800mmio_init_registers()
749 rt2x00_rt(rt2x00dev, RT5390) || in rt2800mmio_init_registers()
750 rt2x00_rt(rt2x00dev, RT5392) || in rt2800mmio_init_registers()
751 rt2x00_rt(rt2x00dev, RT5592))) { in rt2800mmio_init_registers()
752 reg = rt2x00mmio_register_read(rt2x00dev, AUX_CTRL); in rt2800mmio_init_registers()
755 rt2x00mmio_register_write(rt2x00dev, AUX_CTRL, reg); in rt2800mmio_init_registers()
758 rt2x00mmio_register_write(rt2x00dev, PWR_PIN_CFG, 0x00000003); in rt2800mmio_init_registers()
763 rt2x00mmio_register_write(rt2x00dev, MAC_SYS_CTRL, reg); in rt2800mmio_init_registers()
765 rt2x00mmio_register_write(rt2x00dev, MAC_SYS_CTRL, 0x00000000); in rt2800mmio_init_registers()
774 int rt2800mmio_enable_radio(struct rt2x00_dev *rt2x00dev) in rt2800mmio_enable_radio() argument
777 rt2800_wait_wpdma_ready(rt2x00dev); in rt2800mmio_enable_radio()
779 if (unlikely(rt2800mmio_init_queues(rt2x00dev))) in rt2800mmio_enable_radio()
782 return rt2800_enable_radio(rt2x00dev); in rt2800mmio_enable_radio()
788 struct rt2x00_dev *rt2x00dev = in rt2800mmio_work_txdone() local
791 if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) in rt2800mmio_work_txdone()
794 while (!kfifo_is_empty(&rt2x00dev->txstatus_fifo) || in rt2800mmio_work_txdone()
795 rt2800_txstatus_timeout(rt2x00dev)) { in rt2800mmio_work_txdone()
797 tasklet_disable(&rt2x00dev->txstatus_tasklet); in rt2800mmio_work_txdone()
798 rt2800_txdone(rt2x00dev, UINT_MAX); in rt2800mmio_work_txdone()
799 rt2800_txdone_nostatus(rt2x00dev); in rt2800mmio_work_txdone()
800 tasklet_enable(&rt2x00dev->txstatus_tasklet); in rt2800mmio_work_txdone()
803 if (rt2800_txstatus_pending(rt2x00dev)) in rt2800mmio_work_txdone()
804 hrtimer_start(&rt2x00dev->txstatus_timer, in rt2800mmio_work_txdone()
810 struct rt2x00_dev *rt2x00dev = in rt2800mmio_tx_sta_fifo_timeout() local
813 if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) in rt2800mmio_tx_sta_fifo_timeout()
816 if (!rt2800_txstatus_pending(rt2x00dev)) in rt2800mmio_tx_sta_fifo_timeout()
819 rt2800mmio_fetch_txstatus(rt2x00dev); in rt2800mmio_tx_sta_fifo_timeout()
820 if (!kfifo_is_empty(&rt2x00dev->txstatus_fifo)) in rt2800mmio_tx_sta_fifo_timeout()
821 tasklet_schedule(&rt2x00dev->txstatus_tasklet); in rt2800mmio_tx_sta_fifo_timeout()
823 queue_work(rt2x00dev->workqueue, &rt2x00dev->txdone_work); in rt2800mmio_tx_sta_fifo_timeout()
828 int rt2800mmio_probe_hw(struct rt2x00_dev *rt2x00dev) in rt2800mmio_probe_hw() argument
832 retval = rt2800_probe_hw(rt2x00dev); in rt2800mmio_probe_hw()
839 rt2x00dev->txstatus_timer.function = rt2800mmio_tx_sta_fifo_timeout; in rt2800mmio_probe_hw()
844 INIT_WORK(&rt2x00dev->txdone_work, rt2800mmio_work_txdone); in rt2800mmio_probe_hw()