Lines Matching refs:rt2x00dev
23 static bool rt2x00usb_check_usb_error(struct rt2x00_dev *rt2x00dev, int status) in rt2x00usb_check_usb_error() argument
29 rt2x00dev->num_proto_errs++; in rt2x00usb_check_usb_error()
31 rt2x00dev->num_proto_errs = 0; in rt2x00usb_check_usb_error()
33 if (rt2x00dev->num_proto_errs > 3) in rt2x00usb_check_usb_error()
42 int rt2x00usb_vendor_request(struct rt2x00_dev *rt2x00dev, in rt2x00usb_vendor_request() argument
48 struct usb_device *usb_dev = to_usb_device_intf(rt2x00dev->dev); in rt2x00usb_vendor_request()
55 if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags)) in rt2x00usb_vendor_request()
65 if (rt2x00usb_check_usb_error(rt2x00dev, status)) { in rt2x00usb_vendor_request()
67 clear_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags); in rt2x00usb_vendor_request()
72 rt2x00_err(rt2x00dev, in rt2x00usb_vendor_request()
80 int rt2x00usb_vendor_req_buff_lock(struct rt2x00_dev *rt2x00dev, in rt2x00usb_vendor_req_buff_lock() argument
87 BUG_ON(!mutex_is_locked(&rt2x00dev->csr_mutex)); in rt2x00usb_vendor_req_buff_lock()
92 if (unlikely(!rt2x00dev->csr.cache || buffer_length > CSR_CACHE_SIZE)) { in rt2x00usb_vendor_req_buff_lock()
93 rt2x00_err(rt2x00dev, "CSR cache not available\n"); in rt2x00usb_vendor_req_buff_lock()
98 memcpy(rt2x00dev->csr.cache, buffer, buffer_length); in rt2x00usb_vendor_req_buff_lock()
100 status = rt2x00usb_vendor_request(rt2x00dev, request, requesttype, in rt2x00usb_vendor_req_buff_lock()
101 offset, 0, rt2x00dev->csr.cache, in rt2x00usb_vendor_req_buff_lock()
105 memcpy(buffer, rt2x00dev->csr.cache, buffer_length); in rt2x00usb_vendor_req_buff_lock()
111 int rt2x00usb_vendor_request_buff(struct rt2x00_dev *rt2x00dev, in rt2x00usb_vendor_request_buff() argument
120 mutex_lock(&rt2x00dev->csr_mutex); in rt2x00usb_vendor_request_buff()
127 status = rt2x00usb_vendor_req_buff_lock(rt2x00dev, request, in rt2x00usb_vendor_request_buff()
136 mutex_unlock(&rt2x00dev->csr_mutex); in rt2x00usb_vendor_request_buff()
142 int rt2x00usb_regbusy_read(struct rt2x00_dev *rt2x00dev, in rt2x00usb_regbusy_read() argument
149 if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags)) in rt2x00usb_regbusy_read()
153 *reg = rt2x00usb_register_read_lock(rt2x00dev, offset); in rt2x00usb_regbusy_read()
159 rt2x00_err(rt2x00dev, "Indirect register access failed: offset=0x%.08x, value=0x%.08x\n", in rt2x00usb_regbusy_read()
171 struct rt2x00_dev *rt2x00dev; member
178 if (rd->callback(rd->rt2x00dev, urb->status, le32_to_cpu(rd->reg))) { in rt2x00usb_register_read_async_cb()
179 usb_anchor_urb(urb, rd->rt2x00dev->anchor); in rt2x00usb_register_read_async_cb()
188 void rt2x00usb_register_read_async(struct rt2x00_dev *rt2x00dev, in rt2x00usb_register_read_async() argument
192 struct usb_device *usb_dev = to_usb_device_intf(rt2x00dev->dev); in rt2x00usb_register_read_async()
206 rd->rt2x00dev = rt2x00dev; in rt2x00usb_register_read_async()
217 usb_anchor_urb(urb, rt2x00dev->anchor); in rt2x00usb_register_read_async()
247 struct rt2x00_dev *rt2x00dev = in rt2x00usb_work_txdone() local
252 tx_queue_for_each(rt2x00dev, queue) { in rt2x00usb_work_txdone()
268 struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev; in rt2x00usb_interrupt_txdone() local
282 if (rt2x00dev->ops->lib->tx_dma_done) in rt2x00usb_interrupt_txdone()
283 rt2x00dev->ops->lib->tx_dma_done(entry); in rt2x00usb_interrupt_txdone()
288 if (!rt2x00_has_cap_flag(rt2x00dev, REQUIRE_TXSTATUS_FIFO) || in rt2x00usb_interrupt_txdone()
289 !kfifo_is_empty(&rt2x00dev->txstatus_fifo)) in rt2x00usb_interrupt_txdone()
290 queue_work(rt2x00dev->workqueue, &rt2x00dev->txdone_work); in rt2x00usb_interrupt_txdone()
295 struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev; in rt2x00usb_kick_tx_entry() local
296 struct usb_device *usb_dev = to_usb_device_intf(rt2x00dev->dev); in rt2x00usb_kick_tx_entry()
310 length = rt2x00dev->ops->lib->get_tx_data_len(entry); in rt2x00usb_kick_tx_entry()
315 rt2x00_warn(rt2x00dev, "TX SKB padding error, out of memory\n"); in rt2x00usb_kick_tx_entry()
329 if (rt2x00usb_check_usb_error(rt2x00dev, status)) in rt2x00usb_kick_tx_entry()
330 clear_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags); in rt2x00usb_kick_tx_entry()
343 struct rt2x00_dev *rt2x00dev = in rt2x00usb_work_rxdone() local
349 while (!rt2x00queue_empty(rt2x00dev->rx)) { in rt2x00usb_work_rxdone()
350 entry = rt2x00queue_get_entry(rt2x00dev->rx, Q_INDEX_DONE); in rt2x00usb_work_rxdone()
372 struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev; in rt2x00usb_interrupt_rxdone() local
393 queue_work(rt2x00dev->workqueue, &rt2x00dev->rxdone_work); in rt2x00usb_interrupt_rxdone()
398 struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev; in rt2x00usb_kick_rx_entry() local
399 struct usb_device *usb_dev = to_usb_device_intf(rt2x00dev->dev); in rt2x00usb_kick_rx_entry()
415 if (rt2x00usb_check_usb_error(rt2x00dev, status)) in rt2x00usb_kick_rx_entry()
416 clear_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags); in rt2x00usb_kick_rx_entry()
454 struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev; in rt2x00usb_flush_entry() local
467 (rt2x00_has_cap_flag(rt2x00dev, REQUIRE_BEACON_GUARD))) in rt2x00usb_flush_entry()
490 completion = &queue->rt2x00dev->txdone_work; in rt2x00usb_flush_queue()
493 completion = &queue->rt2x00dev->rxdone_work; in rt2x00usb_flush_queue()
512 queue_work(queue->rt2x00dev->workqueue, completion); in rt2x00usb_flush_queue()
525 rt2x00_warn(queue->rt2x00dev, "TX queue %d DMA timed out, invoke forced reset\n", in rt2x00usb_watchdog_tx_dma()
541 void rt2x00usb_watchdog(struct rt2x00_dev *rt2x00dev) in rt2x00usb_watchdog() argument
545 tx_queue_for_each(rt2x00dev, queue) { in rt2x00usb_watchdog()
557 void rt2x00usb_disable_radio(struct rt2x00_dev *rt2x00dev) in rt2x00usb_disable_radio() argument
559 rt2x00usb_vendor_request_sw(rt2x00dev, USB_RX_CONTROL, 0, 0, in rt2x00usb_disable_radio()
579 struct usb_device *usb_dev = to_usb_device_intf(queue->rt2x00dev->dev); in rt2x00usb_assign_endpoint()
596 static int rt2x00usb_find_endpoints(struct rt2x00_dev *rt2x00dev) in rt2x00usb_find_endpoints() argument
598 struct usb_interface *intf = to_usb_interface(rt2x00dev->dev); in rt2x00usb_find_endpoints()
601 struct data_queue *queue = rt2x00dev->tx; in rt2x00usb_find_endpoints()
615 rt2x00usb_assign_endpoint(rt2x00dev->rx, ep_desc); in rt2x00usb_find_endpoints()
617 (queue != queue_end(rt2x00dev))) { in rt2x00usb_find_endpoints()
628 if (!rt2x00dev->rx->usb_endpoint || !rt2x00dev->tx->usb_endpoint) { in rt2x00usb_find_endpoints()
629 rt2x00_err(rt2x00dev, "Bulk-in/Bulk-out endpoints not found\n"); in rt2x00usb_find_endpoints()
638 txall_queue_for_each(rt2x00dev, queue) { in rt2x00usb_find_endpoints()
648 struct rt2x00_dev *rt2x00dev = queue->rt2x00dev; in rt2x00usb_alloc_entries() local
666 !rt2x00_has_cap_flag(rt2x00dev, REQUIRE_BEACON_GUARD)) in rt2x00usb_alloc_entries()
681 struct rt2x00_dev *rt2x00dev = queue->rt2x00dev; in rt2x00usb_free_entries() local
701 !rt2x00_has_cap_flag(rt2x00dev, REQUIRE_BEACON_GUARD)) in rt2x00usb_free_entries()
711 int rt2x00usb_initialize(struct rt2x00_dev *rt2x00dev) in rt2x00usb_initialize() argument
719 status = rt2x00usb_find_endpoints(rt2x00dev); in rt2x00usb_initialize()
726 queue_for_each(rt2x00dev, queue) { in rt2x00usb_initialize()
735 rt2x00usb_uninitialize(rt2x00dev); in rt2x00usb_initialize()
741 void rt2x00usb_uninitialize(struct rt2x00_dev *rt2x00dev) in rt2x00usb_uninitialize() argument
745 usb_kill_anchored_urbs(rt2x00dev->anchor); in rt2x00usb_uninitialize()
746 hrtimer_cancel(&rt2x00dev->txstatus_timer); in rt2x00usb_uninitialize()
747 cancel_work_sync(&rt2x00dev->rxdone_work); in rt2x00usb_uninitialize()
748 cancel_work_sync(&rt2x00dev->txdone_work); in rt2x00usb_uninitialize()
750 queue_for_each(rt2x00dev, queue) in rt2x00usb_uninitialize()
758 static void rt2x00usb_free_reg(struct rt2x00_dev *rt2x00dev) in rt2x00usb_free_reg() argument
760 kfree(rt2x00dev->rf); in rt2x00usb_free_reg()
761 rt2x00dev->rf = NULL; in rt2x00usb_free_reg()
763 kfree(rt2x00dev->eeprom); in rt2x00usb_free_reg()
764 rt2x00dev->eeprom = NULL; in rt2x00usb_free_reg()
766 kfree(rt2x00dev->csr.cache); in rt2x00usb_free_reg()
767 rt2x00dev->csr.cache = NULL; in rt2x00usb_free_reg()
770 static int rt2x00usb_alloc_reg(struct rt2x00_dev *rt2x00dev) in rt2x00usb_alloc_reg() argument
772 rt2x00dev->csr.cache = kzalloc(CSR_CACHE_SIZE, GFP_KERNEL); in rt2x00usb_alloc_reg()
773 if (!rt2x00dev->csr.cache) in rt2x00usb_alloc_reg()
776 rt2x00dev->eeprom = kzalloc(rt2x00dev->ops->eeprom_size, GFP_KERNEL); in rt2x00usb_alloc_reg()
777 if (!rt2x00dev->eeprom) in rt2x00usb_alloc_reg()
780 rt2x00dev->rf = kzalloc(rt2x00dev->ops->rf_size, GFP_KERNEL); in rt2x00usb_alloc_reg()
781 if (!rt2x00dev->rf) in rt2x00usb_alloc_reg()
789 rt2x00usb_free_reg(rt2x00dev); in rt2x00usb_alloc_reg()
799 struct rt2x00_dev *rt2x00dev; in rt2x00usb_probe() local
814 rt2x00dev = hw->priv; in rt2x00usb_probe()
815 rt2x00dev->dev = &usb_intf->dev; in rt2x00usb_probe()
816 rt2x00dev->ops = ops; in rt2x00usb_probe()
817 rt2x00dev->hw = hw; in rt2x00usb_probe()
819 rt2x00_set_chip_intf(rt2x00dev, RT2X00_CHIP_INTF_USB); in rt2x00usb_probe()
821 INIT_WORK(&rt2x00dev->rxdone_work, rt2x00usb_work_rxdone); in rt2x00usb_probe()
822 INIT_WORK(&rt2x00dev->txdone_work, rt2x00usb_work_txdone); in rt2x00usb_probe()
823 hrtimer_init(&rt2x00dev->txstatus_timer, CLOCK_MONOTONIC, in rt2x00usb_probe()
826 retval = rt2x00usb_alloc_reg(rt2x00dev); in rt2x00usb_probe()
830 rt2x00dev->anchor = devm_kmalloc(&usb_dev->dev, in rt2x00usb_probe()
833 if (!rt2x00dev->anchor) { in rt2x00usb_probe()
837 init_usb_anchor(rt2x00dev->anchor); in rt2x00usb_probe()
839 retval = rt2x00lib_probe_dev(rt2x00dev); in rt2x00usb_probe()
846 usb_kill_anchored_urbs(rt2x00dev->anchor); in rt2x00usb_probe()
849 rt2x00usb_free_reg(rt2x00dev); in rt2x00usb_probe()
866 struct rt2x00_dev *rt2x00dev = hw->priv; in rt2x00usb_disconnect() local
871 rt2x00lib_remove_dev(rt2x00dev); in rt2x00usb_disconnect()
872 rt2x00usb_free_reg(rt2x00dev); in rt2x00usb_disconnect()
887 struct rt2x00_dev *rt2x00dev = hw->priv; in rt2x00usb_suspend() local
889 return rt2x00lib_suspend(rt2x00dev); in rt2x00usb_suspend()
896 struct rt2x00_dev *rt2x00dev = hw->priv; in rt2x00usb_resume() local
898 return rt2x00lib_resume(rt2x00dev); in rt2x00usb_resume()