Lines Matching refs:rt2x00dev
49 static bool rt2800usb_hwcrypt_disabled(struct rt2x00_dev *rt2x00dev) in rt2800usb_hwcrypt_disabled() argument
59 struct rt2x00_dev *rt2x00dev = queue->rt2x00dev; in rt2800usb_start_queue() local
64 rt2x00usb_register_read(rt2x00dev, MAC_SYS_CTRL, ®); in rt2800usb_start_queue()
66 rt2x00usb_register_write(rt2x00dev, MAC_SYS_CTRL, reg); in rt2800usb_start_queue()
69 rt2x00usb_register_read(rt2x00dev, BCN_TIME_CFG, ®); in rt2800usb_start_queue()
73 rt2x00usb_register_write(rt2x00dev, BCN_TIME_CFG, reg); in rt2800usb_start_queue()
82 struct rt2x00_dev *rt2x00dev = queue->rt2x00dev; in rt2800usb_stop_queue() local
87 rt2x00usb_register_read(rt2x00dev, MAC_SYS_CTRL, ®); in rt2800usb_stop_queue()
89 rt2x00usb_register_write(rt2x00dev, MAC_SYS_CTRL, reg); in rt2800usb_stop_queue()
92 rt2x00usb_register_read(rt2x00dev, BCN_TIME_CFG, ®); in rt2800usb_stop_queue()
96 rt2x00usb_register_write(rt2x00dev, BCN_TIME_CFG, reg); in rt2800usb_stop_queue()
107 static bool rt2800usb_txstatus_pending(struct rt2x00_dev *rt2x00dev) in rt2800usb_txstatus_pending() argument
111 tx_queue_for_each(rt2x00dev, queue) { in rt2800usb_txstatus_pending()
128 rt2x00_dbg(entry->queue->rt2x00dev, in rt2800usb_entry_txstatus_timeout()
135 static bool rt2800usb_txstatus_timeout(struct rt2x00_dev *rt2x00dev) in rt2800usb_txstatus_timeout() argument
140 tx_queue_for_each(rt2x00dev, queue) { in rt2800usb_txstatus_timeout()
150 static bool rt2800usb_tx_sta_fifo_read_completed(struct rt2x00_dev *rt2x00dev, in rt2800usb_tx_sta_fifo_read_completed() argument
156 rt2x00_warn(rt2x00dev, "TX status read failed %d\n", in rt2800usb_tx_sta_fifo_read_completed()
164 if (!kfifo_put(&rt2x00dev->txstatus_fifo, tx_status)) in rt2800usb_tx_sta_fifo_read_completed()
165 rt2x00_warn(rt2x00dev, "TX status FIFO overrun\n"); in rt2800usb_tx_sta_fifo_read_completed()
167 queue_work(rt2x00dev->workqueue, &rt2x00dev->txdone_work); in rt2800usb_tx_sta_fifo_read_completed()
174 if (rt2800usb_txstatus_timeout(rt2x00dev)) in rt2800usb_tx_sta_fifo_read_completed()
175 queue_work(rt2x00dev->workqueue, &rt2x00dev->txdone_work); in rt2800usb_tx_sta_fifo_read_completed()
177 if (rt2800usb_txstatus_pending(rt2x00dev)) { in rt2800usb_tx_sta_fifo_read_completed()
179 hrtimer_start(&rt2x00dev->txstatus_timer, in rt2800usb_tx_sta_fifo_read_completed()
186 clear_bit(TX_STATUS_READING, &rt2x00dev->flags); in rt2800usb_tx_sta_fifo_read_completed()
192 if (rt2800usb_txstatus_pending(rt2x00dev) && in rt2800usb_tx_sta_fifo_read_completed()
193 !test_and_set_bit(TX_STATUS_READING, &rt2x00dev->flags)) in rt2800usb_tx_sta_fifo_read_completed()
199 static void rt2800usb_async_read_tx_status(struct rt2x00_dev *rt2x00dev) in rt2800usb_async_read_tx_status() argument
202 if (test_and_set_bit(TX_STATUS_READING, &rt2x00dev->flags)) in rt2800usb_async_read_tx_status()
206 hrtimer_start(&rt2x00dev->txstatus_timer, in rt2800usb_async_read_tx_status()
213 struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev; in rt2800usb_tx_dma_done() local
215 rt2800usb_async_read_tx_status(rt2x00dev); in rt2800usb_tx_dma_done()
220 struct rt2x00_dev *rt2x00dev = in rt2800usb_tx_sta_fifo_timeout() local
223 rt2x00usb_register_read_async(rt2x00dev, TX_STA_FIFO, in rt2800usb_tx_sta_fifo_timeout()
232 static int rt2800usb_autorun_detect(struct rt2x00_dev *rt2x00dev) in rt2800usb_autorun_detect() argument
246 ret = rt2x00usb_vendor_request(rt2x00dev, USB_DEVICE_MODE, in rt2800usb_autorun_detect()
261 static char *rt2800usb_get_firmware_name(struct rt2x00_dev *rt2x00dev) in rt2800usb_get_firmware_name() argument
266 static int rt2800usb_write_firmware(struct rt2x00_dev *rt2x00dev, in rt2800usb_write_firmware() argument
277 if (rt2x00_rt(rt2x00dev, RT2860) || in rt2800usb_write_firmware()
278 rt2x00_rt(rt2x00dev, RT2872) || in rt2800usb_write_firmware()
279 rt2x00_rt(rt2x00dev, RT3070)) { in rt2800usb_write_firmware()
290 retval = rt2800usb_autorun_detect(rt2x00dev); in rt2800usb_write_firmware()
294 rt2x00_info(rt2x00dev, in rt2800usb_write_firmware()
296 __clear_bit(REQUIRE_FIRMWARE, &rt2x00dev->cap_flags); in rt2800usb_write_firmware()
298 rt2x00usb_register_multiwrite(rt2x00dev, FIRMWARE_IMAGE_BASE, in rt2800usb_write_firmware()
302 rt2x00usb_register_write(rt2x00dev, H2M_MAILBOX_CID, ~0); in rt2800usb_write_firmware()
303 rt2x00usb_register_write(rt2x00dev, H2M_MAILBOX_STATUS, ~0); in rt2800usb_write_firmware()
309 status = rt2x00usb_vendor_request_sw(rt2x00dev, USB_DEVICE_MODE, in rt2800usb_write_firmware()
313 rt2x00_err(rt2x00dev, "Failed to write Firmware to device\n"); in rt2800usb_write_firmware()
318 rt2x00usb_register_write(rt2x00dev, H2M_MAILBOX_CSR, 0); in rt2800usb_write_firmware()
326 static int rt2800usb_init_registers(struct rt2x00_dev *rt2x00dev) in rt2800usb_init_registers() argument
333 if (rt2800_wait_csr_ready(rt2x00dev)) in rt2800usb_init_registers()
336 rt2x00usb_register_read(rt2x00dev, PBF_SYS_CTRL, ®); in rt2800usb_init_registers()
337 rt2x00usb_register_write(rt2x00dev, PBF_SYS_CTRL, reg & ~0x00002000); in rt2800usb_init_registers()
342 rt2x00usb_register_write(rt2x00dev, MAC_SYS_CTRL, reg); in rt2800usb_init_registers()
344 rt2x00usb_register_write(rt2x00dev, USB_DMA_CFG, 0x00000000); in rt2800usb_init_registers()
346 rt2x00usb_vendor_request_sw(rt2x00dev, USB_DEVICE_MODE, 0, in rt2800usb_init_registers()
349 rt2x00usb_register_write(rt2x00dev, MAC_SYS_CTRL, 0x00000000); in rt2800usb_init_registers()
354 static int rt2800usb_enable_radio(struct rt2x00_dev *rt2x00dev) in rt2800usb_enable_radio() argument
358 if (unlikely(rt2800_wait_wpdma_ready(rt2x00dev))) in rt2800usb_enable_radio()
361 rt2x00usb_register_read(rt2x00dev, USB_DMA_CFG, ®); in rt2800usb_enable_radio()
370 ((rt2x00dev->rx->limit * DATA_FRAME_SIZE) in rt2800usb_enable_radio()
374 rt2x00usb_register_write(rt2x00dev, USB_DMA_CFG, reg); in rt2800usb_enable_radio()
376 return rt2800_enable_radio(rt2x00dev); in rt2800usb_enable_radio()
379 static void rt2800usb_disable_radio(struct rt2x00_dev *rt2x00dev) in rt2800usb_disable_radio() argument
381 rt2800_disable_radio(rt2x00dev); in rt2800usb_disable_radio()
384 static int rt2800usb_set_state(struct rt2x00_dev *rt2x00dev, in rt2800usb_set_state() argument
388 rt2800_mcu_request(rt2x00dev, MCU_WAKEUP, 0xff, 0, 2); in rt2800usb_set_state()
390 rt2800_mcu_request(rt2x00dev, MCU_SLEEP, 0xff, 0xff, 2); in rt2800usb_set_state()
395 static int rt2800usb_set_device_state(struct rt2x00_dev *rt2x00dev, in rt2800usb_set_device_state() argument
407 rt2800usb_set_state(rt2x00dev, STATE_AWAKE); in rt2800usb_set_device_state()
409 retval = rt2800usb_enable_radio(rt2x00dev); in rt2800usb_set_device_state()
416 rt2800usb_disable_radio(rt2x00dev); in rt2800usb_set_device_state()
417 rt2800usb_set_state(rt2x00dev, STATE_SLEEP); in rt2800usb_set_device_state()
427 retval = rt2800usb_set_state(rt2x00dev, state); in rt2800usb_set_device_state()
435 rt2x00_err(rt2x00dev, "Device failed to enter state %d (%d)\n", in rt2800usb_set_device_state()
444 static void rt2800usb_watchdog(struct rt2x00_dev *rt2x00dev) in rt2800usb_watchdog() argument
449 rt2x00usb_register_read(rt2x00dev, TXRXQ_PCNT, ®); in rt2800usb_watchdog()
451 rt2x00_warn(rt2x00dev, "TX HW queue 0 timed out, invoke forced kick\n"); in rt2800usb_watchdog()
453 rt2x00usb_register_write(rt2x00dev, PBF_CFG, 0xf40012); in rt2800usb_watchdog()
461 rt2x00usb_register_write(rt2x00dev, PBF_CFG, 0xf40006); in rt2800usb_watchdog()
464 rt2x00usb_register_read(rt2x00dev, TXRXQ_PCNT, ®); in rt2800usb_watchdog()
466 rt2x00_warn(rt2x00dev, "TX HW queue 1 timed out, invoke forced kick\n"); in rt2800usb_watchdog()
468 rt2x00usb_register_write(rt2x00dev, PBF_CFG, 0xf4000a); in rt2800usb_watchdog()
476 rt2x00usb_register_write(rt2x00dev, PBF_CFG, 0xf40006); in rt2800usb_watchdog()
479 rt2x00usb_watchdog(rt2x00dev); in rt2800usb_watchdog()
581 rt2x00_dbg(entry->queue->rt2x00dev, in rt2800usb_txdone_entry_check()
590 static void rt2800usb_txdone(struct rt2x00_dev *rt2x00dev) in rt2800usb_txdone() argument
598 while (kfifo_get(&rt2x00dev->txstatus_fifo, ®)) { in rt2800usb_txdone()
604 queue = rt2x00queue_get_tx_queue(rt2x00dev, qid); in rt2800usb_txdone()
607 rt2x00_dbg(rt2x00dev, "Got TX status for an empty queue %u, dropping\n", in rt2800usb_txdone()
616 rt2x00_warn(rt2x00dev, "Data pending for entry %u in queue %u\n", in rt2800usb_txdone()
629 static void rt2800usb_txdone_nostatus(struct rt2x00_dev *rt2x00dev) in rt2800usb_txdone_nostatus() argument
641 tx_queue_for_each(rt2x00dev, queue) { in rt2800usb_txdone_nostatus()
661 struct rt2x00_dev *rt2x00dev = in rt2800usb_work_txdone() local
664 while (!kfifo_is_empty(&rt2x00dev->txstatus_fifo) || in rt2800usb_work_txdone()
665 rt2800usb_txstatus_timeout(rt2x00dev)) { in rt2800usb_work_txdone()
667 rt2800usb_txdone(rt2x00dev); in rt2800usb_work_txdone()
669 rt2800usb_txdone_nostatus(rt2x00dev); in rt2800usb_work_txdone()
676 if (rt2800usb_txstatus_pending(rt2x00dev)) in rt2800usb_work_txdone()
677 rt2800usb_async_read_tx_status(rt2x00dev); in rt2800usb_work_txdone()
718 rt2x00_err(entry->queue->rt2x00dev, in rt2800usb_fill_rxdone()
776 static int rt2800usb_efuse_detect(struct rt2x00_dev *rt2x00dev) in rt2800usb_efuse_detect() argument
780 retval = rt2800usb_autorun_detect(rt2x00dev); in rt2800usb_efuse_detect()
785 return rt2800_efuse_detect(rt2x00dev); in rt2800usb_efuse_detect()
788 static int rt2800usb_read_eeprom(struct rt2x00_dev *rt2x00dev) in rt2800usb_read_eeprom() argument
792 retval = rt2800usb_efuse_detect(rt2x00dev); in rt2800usb_read_eeprom()
796 retval = rt2800_read_eeprom_efuse(rt2x00dev); in rt2800usb_read_eeprom()
798 retval = rt2x00usb_eeprom_read(rt2x00dev, rt2x00dev->eeprom, in rt2800usb_read_eeprom()
804 static int rt2800usb_probe_hw(struct rt2x00_dev *rt2x00dev) in rt2800usb_probe_hw() argument
808 retval = rt2800_probe_hw(rt2x00dev); in rt2800usb_probe_hw()
815 rt2x00dev->txstatus_timer.function = rt2800usb_tx_sta_fifo_timeout; in rt2800usb_probe_hw()
820 INIT_WORK(&rt2x00dev->txdone_work, rt2800usb_work_txdone); in rt2800usb_probe_hw()
908 struct rt2x00_dev *rt2x00dev = queue->rt2x00dev; in rt2800usb_queue_init() local
911 rt2800_get_txwi_rxwi_size(rt2x00dev, &txwi_size, &rxwi_size); in rt2800usb_queue_init()