Lines Matching refs:rt2x00dev

23 static bool rt2x00usb_check_usb_error(struct rt2x00_dev *rt2x00dev, int status)  in rt2x00usb_check_usb_error()  argument
28 if (!test_bit(DEVICE_STATE_STARTED, &rt2x00dev->flags)) in rt2x00usb_check_usb_error()
32 rt2x00dev->num_proto_errs++; in rt2x00usb_check_usb_error()
34 rt2x00dev->num_proto_errs = 0; in rt2x00usb_check_usb_error()
36 if (rt2x00dev->num_proto_errs > 3) in rt2x00usb_check_usb_error()
45 int rt2x00usb_vendor_request(struct rt2x00_dev *rt2x00dev, in rt2x00usb_vendor_request() argument
51 struct usb_device *usb_dev = to_usb_device_intf(rt2x00dev->dev); in rt2x00usb_vendor_request()
58 if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags)) in rt2x00usb_vendor_request()
68 if (rt2x00usb_check_usb_error(rt2x00dev, status)) { in rt2x00usb_vendor_request()
70 clear_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags); in rt2x00usb_vendor_request()
75 rt2x00_err(rt2x00dev, in rt2x00usb_vendor_request()
83 int rt2x00usb_vendor_req_buff_lock(struct rt2x00_dev *rt2x00dev, in rt2x00usb_vendor_req_buff_lock() argument
90 BUG_ON(!mutex_is_locked(&rt2x00dev->csr_mutex)); in rt2x00usb_vendor_req_buff_lock()
95 if (unlikely(!rt2x00dev->csr.cache || buffer_length > CSR_CACHE_SIZE)) { in rt2x00usb_vendor_req_buff_lock()
96 rt2x00_err(rt2x00dev, "CSR cache not available\n"); in rt2x00usb_vendor_req_buff_lock()
101 memcpy(rt2x00dev->csr.cache, buffer, buffer_length); in rt2x00usb_vendor_req_buff_lock()
103 status = rt2x00usb_vendor_request(rt2x00dev, request, requesttype, in rt2x00usb_vendor_req_buff_lock()
104 offset, 0, rt2x00dev->csr.cache, in rt2x00usb_vendor_req_buff_lock()
108 memcpy(buffer, rt2x00dev->csr.cache, buffer_length); in rt2x00usb_vendor_req_buff_lock()
114 int rt2x00usb_vendor_request_buff(struct rt2x00_dev *rt2x00dev, in rt2x00usb_vendor_request_buff() argument
123 mutex_lock(&rt2x00dev->csr_mutex); in rt2x00usb_vendor_request_buff()
130 status = rt2x00usb_vendor_req_buff_lock(rt2x00dev, request, in rt2x00usb_vendor_request_buff()
139 mutex_unlock(&rt2x00dev->csr_mutex); in rt2x00usb_vendor_request_buff()
145 int rt2x00usb_regbusy_read(struct rt2x00_dev *rt2x00dev, in rt2x00usb_regbusy_read() argument
152 if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags)) in rt2x00usb_regbusy_read()
156 *reg = rt2x00usb_register_read_lock(rt2x00dev, offset); in rt2x00usb_regbusy_read()
162 rt2x00_err(rt2x00dev, "Indirect register access failed: offset=0x%.08x, value=0x%.08x\n", in rt2x00usb_regbusy_read()
174 struct rt2x00_dev *rt2x00dev; member
181 if (rd->callback(rd->rt2x00dev, urb->status, le32_to_cpu(rd->reg))) { in rt2x00usb_register_read_async_cb()
182 usb_anchor_urb(urb, rd->rt2x00dev->anchor); in rt2x00usb_register_read_async_cb()
191 void rt2x00usb_register_read_async(struct rt2x00_dev *rt2x00dev, in rt2x00usb_register_read_async() argument
195 struct usb_device *usb_dev = to_usb_device_intf(rt2x00dev->dev); in rt2x00usb_register_read_async()
209 rd->rt2x00dev = rt2x00dev; in rt2x00usb_register_read_async()
220 usb_anchor_urb(urb, rt2x00dev->anchor); in rt2x00usb_register_read_async()
250 struct rt2x00_dev *rt2x00dev = in rt2x00usb_work_txdone() local
255 tx_queue_for_each(rt2x00dev, queue) { in rt2x00usb_work_txdone()
271 struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev; in rt2x00usb_interrupt_txdone() local
285 if (rt2x00dev->ops->lib->tx_dma_done) in rt2x00usb_interrupt_txdone()
286 rt2x00dev->ops->lib->tx_dma_done(entry); in rt2x00usb_interrupt_txdone()
291 if (!rt2x00_has_cap_flag(rt2x00dev, REQUIRE_TXSTATUS_FIFO) || in rt2x00usb_interrupt_txdone()
292 !kfifo_is_empty(&rt2x00dev->txstatus_fifo)) in rt2x00usb_interrupt_txdone()
293 queue_work(rt2x00dev->workqueue, &rt2x00dev->txdone_work); in rt2x00usb_interrupt_txdone()
298 struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev; in rt2x00usb_kick_tx_entry() local
299 struct usb_device *usb_dev = to_usb_device_intf(rt2x00dev->dev); in rt2x00usb_kick_tx_entry()
313 length = rt2x00dev->ops->lib->get_tx_data_len(entry); in rt2x00usb_kick_tx_entry()
318 rt2x00_warn(rt2x00dev, "TX SKB padding error, out of memory\n"); in rt2x00usb_kick_tx_entry()
332 if (rt2x00usb_check_usb_error(rt2x00dev, status)) in rt2x00usb_kick_tx_entry()
333 clear_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags); in rt2x00usb_kick_tx_entry()
346 struct rt2x00_dev *rt2x00dev = in rt2x00usb_work_rxdone() local
352 while (!rt2x00queue_empty(rt2x00dev->rx)) { in rt2x00usb_work_rxdone()
353 entry = rt2x00queue_get_entry(rt2x00dev->rx, Q_INDEX_DONE); in rt2x00usb_work_rxdone()
375 struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev; in rt2x00usb_interrupt_rxdone() local
396 queue_work(rt2x00dev->workqueue, &rt2x00dev->rxdone_work); in rt2x00usb_interrupt_rxdone()
401 struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev; in rt2x00usb_kick_rx_entry() local
402 struct usb_device *usb_dev = to_usb_device_intf(rt2x00dev->dev); in rt2x00usb_kick_rx_entry()
418 if (rt2x00usb_check_usb_error(rt2x00dev, status)) in rt2x00usb_kick_rx_entry()
419 clear_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags); in rt2x00usb_kick_rx_entry()
457 struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev; in rt2x00usb_flush_entry() local
470 (rt2x00_has_cap_flag(rt2x00dev, REQUIRE_BEACON_GUARD))) in rt2x00usb_flush_entry()
493 completion = &queue->rt2x00dev->txdone_work; in rt2x00usb_flush_queue()
496 completion = &queue->rt2x00dev->rxdone_work; in rt2x00usb_flush_queue()
515 queue_work(queue->rt2x00dev->workqueue, completion); in rt2x00usb_flush_queue()
528 rt2x00_warn(queue->rt2x00dev, "TX queue %d DMA timed out, invoke forced reset\n", in rt2x00usb_watchdog_tx_dma()
544 void rt2x00usb_watchdog(struct rt2x00_dev *rt2x00dev) in rt2x00usb_watchdog() argument
548 tx_queue_for_each(rt2x00dev, queue) { in rt2x00usb_watchdog()
560 void rt2x00usb_disable_radio(struct rt2x00_dev *rt2x00dev) in rt2x00usb_disable_radio() argument
562 rt2x00usb_vendor_request_sw(rt2x00dev, USB_RX_CONTROL, 0, 0, in rt2x00usb_disable_radio()
582 struct usb_device *usb_dev = to_usb_device_intf(queue->rt2x00dev->dev); in rt2x00usb_assign_endpoint()
599 static int rt2x00usb_find_endpoints(struct rt2x00_dev *rt2x00dev) in rt2x00usb_find_endpoints() argument
601 struct usb_interface *intf = to_usb_interface(rt2x00dev->dev); in rt2x00usb_find_endpoints()
604 struct data_queue *queue = rt2x00dev->tx; in rt2x00usb_find_endpoints()
618 rt2x00usb_assign_endpoint(rt2x00dev->rx, ep_desc); in rt2x00usb_find_endpoints()
620 (queue != queue_end(rt2x00dev))) { in rt2x00usb_find_endpoints()
631 if (!rt2x00dev->rx->usb_endpoint || !rt2x00dev->tx->usb_endpoint) { in rt2x00usb_find_endpoints()
632 rt2x00_err(rt2x00dev, "Bulk-in/Bulk-out endpoints not found\n"); in rt2x00usb_find_endpoints()
641 txall_queue_for_each(rt2x00dev, queue) { in rt2x00usb_find_endpoints()
651 struct rt2x00_dev *rt2x00dev = queue->rt2x00dev; in rt2x00usb_alloc_entries() local
669 !rt2x00_has_cap_flag(rt2x00dev, REQUIRE_BEACON_GUARD)) in rt2x00usb_alloc_entries()
684 struct rt2x00_dev *rt2x00dev = queue->rt2x00dev; in rt2x00usb_free_entries() local
704 !rt2x00_has_cap_flag(rt2x00dev, REQUIRE_BEACON_GUARD)) in rt2x00usb_free_entries()
714 int rt2x00usb_initialize(struct rt2x00_dev *rt2x00dev) in rt2x00usb_initialize() argument
722 status = rt2x00usb_find_endpoints(rt2x00dev); in rt2x00usb_initialize()
729 queue_for_each(rt2x00dev, queue) { in rt2x00usb_initialize()
738 rt2x00usb_uninitialize(rt2x00dev); in rt2x00usb_initialize()
744 void rt2x00usb_uninitialize(struct rt2x00_dev *rt2x00dev) in rt2x00usb_uninitialize() argument
748 usb_kill_anchored_urbs(rt2x00dev->anchor); in rt2x00usb_uninitialize()
749 hrtimer_cancel(&rt2x00dev->txstatus_timer); in rt2x00usb_uninitialize()
750 cancel_work_sync(&rt2x00dev->rxdone_work); in rt2x00usb_uninitialize()
751 cancel_work_sync(&rt2x00dev->txdone_work); in rt2x00usb_uninitialize()
753 queue_for_each(rt2x00dev, queue) in rt2x00usb_uninitialize()
761 static void rt2x00usb_free_reg(struct rt2x00_dev *rt2x00dev) in rt2x00usb_free_reg() argument
763 kfree(rt2x00dev->rf); in rt2x00usb_free_reg()
764 rt2x00dev->rf = NULL; in rt2x00usb_free_reg()
766 kfree(rt2x00dev->eeprom); in rt2x00usb_free_reg()
767 rt2x00dev->eeprom = NULL; in rt2x00usb_free_reg()
769 kfree(rt2x00dev->csr.cache); in rt2x00usb_free_reg()
770 rt2x00dev->csr.cache = NULL; in rt2x00usb_free_reg()
773 static int rt2x00usb_alloc_reg(struct rt2x00_dev *rt2x00dev) in rt2x00usb_alloc_reg() argument
775 rt2x00dev->csr.cache = kzalloc(CSR_CACHE_SIZE, GFP_KERNEL); in rt2x00usb_alloc_reg()
776 if (!rt2x00dev->csr.cache) in rt2x00usb_alloc_reg()
779 rt2x00dev->eeprom = kzalloc(rt2x00dev->ops->eeprom_size, GFP_KERNEL); in rt2x00usb_alloc_reg()
780 if (!rt2x00dev->eeprom) in rt2x00usb_alloc_reg()
783 rt2x00dev->rf = kzalloc(rt2x00dev->ops->rf_size, GFP_KERNEL); in rt2x00usb_alloc_reg()
784 if (!rt2x00dev->rf) in rt2x00usb_alloc_reg()
792 rt2x00usb_free_reg(rt2x00dev); in rt2x00usb_alloc_reg()
802 struct rt2x00_dev *rt2x00dev; in rt2x00usb_probe() local
817 rt2x00dev = hw->priv; in rt2x00usb_probe()
818 rt2x00dev->dev = &usb_intf->dev; in rt2x00usb_probe()
819 rt2x00dev->ops = ops; in rt2x00usb_probe()
820 rt2x00dev->hw = hw; in rt2x00usb_probe()
822 rt2x00_set_chip_intf(rt2x00dev, RT2X00_CHIP_INTF_USB); in rt2x00usb_probe()
824 INIT_WORK(&rt2x00dev->rxdone_work, rt2x00usb_work_rxdone); in rt2x00usb_probe()
825 INIT_WORK(&rt2x00dev->txdone_work, rt2x00usb_work_txdone); in rt2x00usb_probe()
826 hrtimer_init(&rt2x00dev->txstatus_timer, CLOCK_MONOTONIC, in rt2x00usb_probe()
829 retval = rt2x00usb_alloc_reg(rt2x00dev); in rt2x00usb_probe()
833 rt2x00dev->anchor = devm_kmalloc(&usb_dev->dev, in rt2x00usb_probe()
836 if (!rt2x00dev->anchor) { in rt2x00usb_probe()
840 init_usb_anchor(rt2x00dev->anchor); in rt2x00usb_probe()
842 retval = rt2x00lib_probe_dev(rt2x00dev); in rt2x00usb_probe()
849 usb_kill_anchored_urbs(rt2x00dev->anchor); in rt2x00usb_probe()
852 rt2x00usb_free_reg(rt2x00dev); in rt2x00usb_probe()
869 struct rt2x00_dev *rt2x00dev = hw->priv; in rt2x00usb_disconnect() local
874 rt2x00lib_remove_dev(rt2x00dev); in rt2x00usb_disconnect()
875 rt2x00usb_free_reg(rt2x00dev); in rt2x00usb_disconnect()
890 struct rt2x00_dev *rt2x00dev = hw->priv; in rt2x00usb_suspend() local
892 return rt2x00lib_suspend(rt2x00dev); in rt2x00usb_suspend()
899 struct rt2x00_dev *rt2x00dev = hw->priv; in rt2x00usb_resume() local
901 return rt2x00lib_resume(rt2x00dev); in rt2x00usb_resume()