Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
rt2x00usb.c
Go to the documentation of this file.
1 /*
2  Copyright (C) 2010 Willow Garage <http://www.willowgarage.com>
3  Copyright (C) 2004 - 2010 Ivo van Doorn <[email protected]>
4  <http://rt2x00.serialmonkey.com>
5 
6  This program is free software; you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation; either version 2 of the License, or
9  (at your option) any later version.
10 
11  This program is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with this program; if not, write to the
18  Free Software Foundation, Inc.,
19  59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20  */
21 
22 /*
23  Module: rt2x00usb
24  Abstract: rt2x00 generic usb device routines.
25  */
26 
27 #include <linux/kernel.h>
28 #include <linux/module.h>
29 #include <linux/slab.h>
30 #include <linux/usb.h>
31 #include <linux/bug.h>
32 
33 #include "rt2x00.h"
34 #include "rt2x00usb.h"
35 
36 /*
37  * Interfacing with the HW.
38  */
39 int rt2x00usb_vendor_request(struct rt2x00_dev *rt2x00dev,
40  const u8 request, const u8 requesttype,
41  const u16 offset, const u16 value,
42  void *buffer, const u16 buffer_length,
43  const int timeout)
44 {
45  struct usb_device *usb_dev = to_usb_device_intf(rt2x00dev->dev);
46  int status;
47  unsigned int i;
48  unsigned int pipe =
49  (requesttype == USB_VENDOR_REQUEST_IN) ?
50  usb_rcvctrlpipe(usb_dev, 0) : usb_sndctrlpipe(usb_dev, 0);
51 
52  if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags))
53  return -ENODEV;
54 
55  for (i = 0; i < REGISTER_BUSY_COUNT; i++) {
56  status = usb_control_msg(usb_dev, pipe, request, requesttype,
57  value, offset, buffer, buffer_length,
58  timeout);
59  if (status >= 0)
60  return 0;
61 
62  /*
63  * Check for errors
64  * -ENODEV: Device has disappeared, no point continuing.
65  * All other errors: Try again.
66  */
67  else if (status == -ENODEV) {
68  clear_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags);
69  break;
70  }
71  }
72 
73  ERROR(rt2x00dev,
74  "Vendor Request 0x%02x failed for offset 0x%04x with error %d.\n",
75  request, offset, status);
76 
77  return status;
78 }
80 
82  const u8 request, const u8 requesttype,
83  const u16 offset, void *buffer,
84  const u16 buffer_length, const int timeout)
85 {
86  int status;
87 
88  BUG_ON(!mutex_is_locked(&rt2x00dev->csr_mutex));
89 
90  /*
91  * Check for Cache availability.
92  */
93  if (unlikely(!rt2x00dev->csr.cache || buffer_length > CSR_CACHE_SIZE)) {
94  ERROR(rt2x00dev, "CSR cache not available.\n");
95  return -ENOMEM;
96  }
97 
98  if (requesttype == USB_VENDOR_REQUEST_OUT)
99  memcpy(rt2x00dev->csr.cache, buffer, buffer_length);
100 
101  status = rt2x00usb_vendor_request(rt2x00dev, request, requesttype,
102  offset, 0, rt2x00dev->csr.cache,
103  buffer_length, timeout);
104 
105  if (!status && requesttype == USB_VENDOR_REQUEST_IN)
106  memcpy(buffer, rt2x00dev->csr.cache, buffer_length);
107 
108  return status;
109 }
111 
113  const u8 request, const u8 requesttype,
114  const u16 offset, void *buffer,
115  const u16 buffer_length, const int timeout)
116 {
117  int status = 0;
118  unsigned char *tb;
119  u16 off, len, bsize;
120 
121  mutex_lock(&rt2x00dev->csr_mutex);
122 
123  tb = (char *)buffer;
124  off = offset;
125  len = buffer_length;
126  while (len && !status) {
127  bsize = min_t(u16, CSR_CACHE_SIZE, len);
128  status = rt2x00usb_vendor_req_buff_lock(rt2x00dev, request,
129  requesttype, off, tb,
130  bsize, timeout);
131 
132  tb += bsize;
133  len -= bsize;
134  off += bsize;
135  }
136 
137  mutex_unlock(&rt2x00dev->csr_mutex);
138 
139  return status;
140 }
142 
143 int rt2x00usb_regbusy_read(struct rt2x00_dev *rt2x00dev,
144  const unsigned int offset,
145  const struct rt2x00_field32 field,
146  u32 *reg)
147 {
148  unsigned int i;
149 
150  if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags))
151  return -ENODEV;
152 
153  for (i = 0; i < REGISTER_BUSY_COUNT; i++) {
154  rt2x00usb_register_read_lock(rt2x00dev, offset, reg);
155  if (!rt2x00_get_field32(*reg, field))
156  return 1;
158  }
159 
160  ERROR(rt2x00dev, "Indirect register access failed: "
161  "offset=0x%.08x, value=0x%.08x\n", offset, *reg);
162  *reg = ~0;
163 
164  return 0;
165 }
167 
168 
173  bool (*callback)(struct rt2x00_dev *, int, u32);
174 };
175 
176 static void rt2x00usb_register_read_async_cb(struct urb *urb)
177 {
178  struct rt2x00_async_read_data *rd = urb->context;
179  if (rd->callback(rd->rt2x00dev, urb->status, le32_to_cpu(rd->reg))) {
180  if (usb_submit_urb(urb, GFP_ATOMIC) < 0)
181  kfree(rd);
182  } else
183  kfree(rd);
184 }
185 
187  const unsigned int offset,
188  bool (*callback)(struct rt2x00_dev*, int, u32))
189 {
190  struct usb_device *usb_dev = to_usb_device_intf(rt2x00dev->dev);
191  struct urb *urb;
192  struct rt2x00_async_read_data *rd;
193 
194  rd = kmalloc(sizeof(*rd), GFP_ATOMIC);
195  if (!rd)
196  return;
197 
198  urb = usb_alloc_urb(0, GFP_ATOMIC);
199  if (!urb) {
200  kfree(rd);
201  return;
202  }
203 
204  rd->rt2x00dev = rt2x00dev;
205  rd->callback = callback;
206  rd->cr.bRequestType = USB_VENDOR_REQUEST_IN;
207  rd->cr.bRequest = USB_MULTI_READ;
208  rd->cr.wValue = 0;
209  rd->cr.wIndex = cpu_to_le16(offset);
210  rd->cr.wLength = cpu_to_le16(sizeof(u32));
211 
212  usb_fill_control_urb(urb, usb_dev, usb_rcvctrlpipe(usb_dev, 0),
213  (unsigned char *)(&rd->cr), &rd->reg, sizeof(rd->reg),
214  rt2x00usb_register_read_async_cb, rd);
215  if (usb_submit_urb(urb, GFP_ATOMIC) < 0)
216  kfree(rd);
217  usb_free_urb(urb);
218 }
220 
221 /*
222  * TX data handlers.
223  */
224 static void rt2x00usb_work_txdone_entry(struct queue_entry *entry)
225 {
226  /*
227  * If the transfer to hardware succeeded, it does not mean the
228  * frame was send out correctly. It only means the frame
229  * was successfully pushed to the hardware, we have no
230  * way to determine the transmission status right now.
231  * (Only indirectly by looking at the failed TX counters
232  * in the register).
233  */
234  if (test_bit(ENTRY_DATA_IO_FAILED, &entry->flags))
236  else
238 }
239 
240 static void rt2x00usb_work_txdone(struct work_struct *work)
241 {
242  struct rt2x00_dev *rt2x00dev =
243  container_of(work, struct rt2x00_dev, txdone_work);
244  struct data_queue *queue;
245  struct queue_entry *entry;
246 
247  tx_queue_for_each(rt2x00dev, queue) {
248  while (!rt2x00queue_empty(queue)) {
249  entry = rt2x00queue_get_entry(queue, Q_INDEX_DONE);
250 
251  if (test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags) ||
252  !test_bit(ENTRY_DATA_STATUS_PENDING, &entry->flags))
253  break;
254 
255  rt2x00usb_work_txdone_entry(entry);
256  }
257  }
258 }
259 
260 static void rt2x00usb_interrupt_txdone(struct urb *urb)
261 {
262  struct queue_entry *entry = (struct queue_entry *)urb->context;
263  struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
264 
265  if (!test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags))
266  return;
267  /*
268  * Check if the frame was correctly uploaded
269  */
270  if (urb->status)
271  set_bit(ENTRY_DATA_IO_FAILED, &entry->flags);
272  /*
273  * Report the frame as DMA done
274  */
275  rt2x00lib_dmadone(entry);
276 
277  if (rt2x00dev->ops->lib->tx_dma_done)
278  rt2x00dev->ops->lib->tx_dma_done(entry);
279  /*
280  * Schedule the delayed work for reading the TX status
281  * from the device.
282  */
283  if (!test_bit(REQUIRE_TXSTATUS_FIFO, &rt2x00dev->cap_flags) ||
284  !kfifo_is_empty(&rt2x00dev->txstatus_fifo))
285  queue_work(rt2x00dev->workqueue, &rt2x00dev->txdone_work);
286 }
287 
288 static bool rt2x00usb_kick_tx_entry(struct queue_entry *entry)
289 {
290  struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
291  struct usb_device *usb_dev = to_usb_device_intf(rt2x00dev->dev);
292  struct queue_entry_priv_usb *entry_priv = entry->priv_data;
293  u32 length;
294  int status;
295 
296  if (!test_and_clear_bit(ENTRY_DATA_PENDING, &entry->flags) ||
297  test_bit(ENTRY_DATA_STATUS_PENDING, &entry->flags))
298  return false;
299 
300  /*
301  * USB devices require certain padding at the end of each frame
302  * and urb. Those paddings are not included in skbs. Pass entry
303  * to the driver to determine what the overall length should be.
304  */
305  length = rt2x00dev->ops->lib->get_tx_data_len(entry);
306 
307  status = skb_padto(entry->skb, length);
308  if (unlikely(status)) {
309  /* TODO: report something more appropriate than IO_FAILED. */
310  WARNING(rt2x00dev, "TX SKB padding error, out of memory\n");
311  set_bit(ENTRY_DATA_IO_FAILED, &entry->flags);
312  rt2x00lib_dmadone(entry);
313 
314  return false;
315  }
316 
317  usb_fill_bulk_urb(entry_priv->urb, usb_dev,
318  usb_sndbulkpipe(usb_dev, entry->queue->usb_endpoint),
319  entry->skb->data, length,
320  rt2x00usb_interrupt_txdone, entry);
321 
322  status = usb_submit_urb(entry_priv->urb, GFP_ATOMIC);
323  if (status) {
324  if (status == -ENODEV)
325  clear_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags);
326  set_bit(ENTRY_DATA_IO_FAILED, &entry->flags);
327  rt2x00lib_dmadone(entry);
328  }
329 
330  return false;
331 }
332 
333 /*
334  * RX data handlers.
335  */
336 static void rt2x00usb_work_rxdone(struct work_struct *work)
337 {
338  struct rt2x00_dev *rt2x00dev =
339  container_of(work, struct rt2x00_dev, rxdone_work);
340  struct queue_entry *entry;
341  struct skb_frame_desc *skbdesc;
342  u8 rxd[32];
343 
344  while (!rt2x00queue_empty(rt2x00dev->rx)) {
345  entry = rt2x00queue_get_entry(rt2x00dev->rx, Q_INDEX_DONE);
346 
347  if (test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags) ||
348  !test_bit(ENTRY_DATA_STATUS_PENDING, &entry->flags))
349  break;
350 
351  /*
352  * Fill in desc fields of the skb descriptor
353  */
354  skbdesc = get_skb_frame_desc(entry->skb);
355  skbdesc->desc = rxd;
356  skbdesc->desc_len = entry->queue->desc_size;
357 
358  /*
359  * Send the frame to rt2x00lib for further processing.
360  */
362  }
363 }
364 
365 static void rt2x00usb_interrupt_rxdone(struct urb *urb)
366 {
367  struct queue_entry *entry = (struct queue_entry *)urb->context;
368  struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
369 
371  return;
372 
373  /*
374  * Report the frame as DMA done
375  */
376  rt2x00lib_dmadone(entry);
377 
378  /*
379  * Check if the received data is simply too small
380  * to be actually valid, or if the urb is signaling
381  * a problem.
382  */
383  if (urb->actual_length < entry->queue->desc_size || urb->status)
384  set_bit(ENTRY_DATA_IO_FAILED, &entry->flags);
385 
386  /*
387  * Schedule the delayed work for reading the RX status
388  * from the device.
389  */
390  queue_work(rt2x00dev->workqueue, &rt2x00dev->rxdone_work);
391 }
392 
393 static bool rt2x00usb_kick_rx_entry(struct queue_entry *entry)
394 {
395  struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
396  struct usb_device *usb_dev = to_usb_device_intf(rt2x00dev->dev);
397  struct queue_entry_priv_usb *entry_priv = entry->priv_data;
398  int status;
399 
400  if (test_and_set_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags) ||
401  test_bit(ENTRY_DATA_STATUS_PENDING, &entry->flags))
402  return false;
403 
404  rt2x00lib_dmastart(entry);
405 
406  usb_fill_bulk_urb(entry_priv->urb, usb_dev,
407  usb_rcvbulkpipe(usb_dev, entry->queue->usb_endpoint),
408  entry->skb->data, entry->skb->len,
409  rt2x00usb_interrupt_rxdone, entry);
410 
411  status = usb_submit_urb(entry_priv->urb, GFP_ATOMIC);
412  if (status) {
413  if (status == -ENODEV)
414  clear_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags);
415  set_bit(ENTRY_DATA_IO_FAILED, &entry->flags);
416  rt2x00lib_dmadone(entry);
417  }
418 
419  return false;
420 }
421 
422 void rt2x00usb_kick_queue(struct data_queue *queue)
423 {
424  switch (queue->qid) {
425  case QID_AC_VO:
426  case QID_AC_VI:
427  case QID_AC_BE:
428  case QID_AC_BK:
429  if (!rt2x00queue_empty(queue))
431  rt2x00usb_kick_tx_entry);
432  break;
433  case QID_RX:
434  if (!rt2x00queue_full(queue))
436  rt2x00usb_kick_rx_entry);
437  break;
438  default:
439  break;
440  }
441 }
443 
444 static bool rt2x00usb_flush_entry(struct queue_entry *entry)
445 {
446  struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
447  struct queue_entry_priv_usb *entry_priv = entry->priv_data;
448  struct queue_entry_priv_usb_bcn *bcn_priv = entry->priv_data;
449 
450  if (!test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags))
451  return false;
452 
453  usb_kill_urb(entry_priv->urb);
454 
455  /*
456  * Kill guardian urb (if required by driver).
457  */
458  if ((entry->queue->qid == QID_BEACON) &&
459  (test_bit(REQUIRE_BEACON_GUARD, &rt2x00dev->cap_flags)))
460  usb_kill_urb(bcn_priv->guardian_urb);
461 
462  return false;
463 }
464 
465 void rt2x00usb_flush_queue(struct data_queue *queue, bool drop)
466 {
467  struct work_struct *completion;
468  unsigned int i;
469 
470  if (drop)
472  rt2x00usb_flush_entry);
473 
474  /*
475  * Obtain the queue completion handler
476  */
477  switch (queue->qid) {
478  case QID_AC_VO:
479  case QID_AC_VI:
480  case QID_AC_BE:
481  case QID_AC_BK:
482  completion = &queue->rt2x00dev->txdone_work;
483  break;
484  case QID_RX:
485  completion = &queue->rt2x00dev->rxdone_work;
486  break;
487  default:
488  return;
489  }
490 
491  for (i = 0; i < 10; i++) {
492  /*
493  * Check if the driver is already done, otherwise we
494  * have to sleep a little while to give the driver/hw
495  * the oppurtunity to complete interrupt process itself.
496  */
497  if (rt2x00queue_empty(queue))
498  break;
499 
500  /*
501  * Schedule the completion handler manually, when this
502  * worker function runs, it should cleanup the queue.
503  */
504  queue_work(queue->rt2x00dev->workqueue, completion);
505 
506  /*
507  * Wait for a little while to give the driver
508  * the oppurtunity to recover itself.
509  */
510  msleep(10);
511  }
512 }
514 
515 static void rt2x00usb_watchdog_tx_dma(struct data_queue *queue)
516 {
517  WARNING(queue->rt2x00dev, "TX queue %d DMA timed out,"
518  " invoke forced forced reset\n", queue->qid);
519 
520  rt2x00queue_flush_queue(queue, true);
521 }
522 
523 static int rt2x00usb_dma_timeout(struct data_queue *queue)
524 {
525  struct queue_entry *entry;
526 
527  entry = rt2x00queue_get_entry(queue, Q_INDEX_DMA_DONE);
528  return rt2x00queue_dma_timeout(entry);
529 }
530 
531 void rt2x00usb_watchdog(struct rt2x00_dev *rt2x00dev)
532 {
533  struct data_queue *queue;
534 
535  tx_queue_for_each(rt2x00dev, queue) {
536  if (!rt2x00queue_empty(queue)) {
537  if (rt2x00usb_dma_timeout(queue))
538  rt2x00usb_watchdog_tx_dma(queue);
539  }
540  }
541 }
543 
544 /*
545  * Radio handlers
546  */
547 void rt2x00usb_disable_radio(struct rt2x00_dev *rt2x00dev)
548 {
549  rt2x00usb_vendor_request_sw(rt2x00dev, USB_RX_CONTROL, 0, 0,
551 }
553 
554 /*
555  * Device initialization handlers.
556  */
557 void rt2x00usb_clear_entry(struct queue_entry *entry)
558 {
559  entry->flags = 0;
560 
561  if (entry->queue->qid == QID_RX)
562  rt2x00usb_kick_rx_entry(entry);
563 }
565 
566 static void rt2x00usb_assign_endpoint(struct data_queue *queue,
568 {
569  struct usb_device *usb_dev = to_usb_device_intf(queue->rt2x00dev->dev);
570  int pipe;
571 
572  queue->usb_endpoint = usb_endpoint_num(ep_desc);
573 
574  if (queue->qid == QID_RX) {
575  pipe = usb_rcvbulkpipe(usb_dev, queue->usb_endpoint);
576  queue->usb_maxpacket = usb_maxpacket(usb_dev, pipe, 0);
577  } else {
578  pipe = usb_sndbulkpipe(usb_dev, queue->usb_endpoint);
579  queue->usb_maxpacket = usb_maxpacket(usb_dev, pipe, 1);
580  }
581 
582  if (!queue->usb_maxpacket)
583  queue->usb_maxpacket = 1;
584 }
585 
586 static int rt2x00usb_find_endpoints(struct rt2x00_dev *rt2x00dev)
587 {
588  struct usb_interface *intf = to_usb_interface(rt2x00dev->dev);
589  struct usb_host_interface *intf_desc = intf->cur_altsetting;
591  struct data_queue *queue = rt2x00dev->tx;
592  struct usb_endpoint_descriptor *tx_ep_desc = NULL;
593  unsigned int i;
594 
595  /*
596  * Walk through all available endpoints to search for "bulk in"
597  * and "bulk out" endpoints. When we find such endpoints collect
598  * the information we need from the descriptor and assign it
599  * to the queue.
600  */
601  for (i = 0; i < intf_desc->desc.bNumEndpoints; i++) {
602  ep_desc = &intf_desc->endpoint[i].desc;
603 
604  if (usb_endpoint_is_bulk_in(ep_desc)) {
605  rt2x00usb_assign_endpoint(rt2x00dev->rx, ep_desc);
606  } else if (usb_endpoint_is_bulk_out(ep_desc) &&
607  (queue != queue_end(rt2x00dev))) {
608  rt2x00usb_assign_endpoint(queue, ep_desc);
609  queue = queue_next(queue);
610 
611  tx_ep_desc = ep_desc;
612  }
613  }
614 
615  /*
616  * At least 1 endpoint for RX and 1 endpoint for TX must be available.
617  */
618  if (!rt2x00dev->rx->usb_endpoint || !rt2x00dev->tx->usb_endpoint) {
619  ERROR(rt2x00dev, "Bulk-in/Bulk-out endpoints not found\n");
620  return -EPIPE;
621  }
622 
623  /*
624  * It might be possible not all queues have a dedicated endpoint.
625  * Loop through all TX queues and copy the endpoint information
626  * which we have gathered from already assigned endpoints.
627  */
628  txall_queue_for_each(rt2x00dev, queue) {
629  if (!queue->usb_endpoint)
630  rt2x00usb_assign_endpoint(queue, tx_ep_desc);
631  }
632 
633  return 0;
634 }
635 
636 static int rt2x00usb_alloc_entries(struct data_queue *queue)
637 {
638  struct rt2x00_dev *rt2x00dev = queue->rt2x00dev;
639  struct queue_entry_priv_usb *entry_priv;
640  struct queue_entry_priv_usb_bcn *bcn_priv;
641  unsigned int i;
642 
643  for (i = 0; i < queue->limit; i++) {
644  entry_priv = queue->entries[i].priv_data;
645  entry_priv->urb = usb_alloc_urb(0, GFP_KERNEL);
646  if (!entry_priv->urb)
647  return -ENOMEM;
648  }
649 
650  /*
651  * If this is not the beacon queue or
652  * no guardian byte was required for the beacon,
653  * then we are done.
654  */
655  if (queue->qid != QID_BEACON ||
656  !test_bit(REQUIRE_BEACON_GUARD, &rt2x00dev->cap_flags))
657  return 0;
658 
659  for (i = 0; i < queue->limit; i++) {
660  bcn_priv = queue->entries[i].priv_data;
661  bcn_priv->guardian_urb = usb_alloc_urb(0, GFP_KERNEL);
662  if (!bcn_priv->guardian_urb)
663  return -ENOMEM;
664  }
665 
666  return 0;
667 }
668 
669 static void rt2x00usb_free_entries(struct data_queue *queue)
670 {
671  struct rt2x00_dev *rt2x00dev = queue->rt2x00dev;
672  struct queue_entry_priv_usb *entry_priv;
673  struct queue_entry_priv_usb_bcn *bcn_priv;
674  unsigned int i;
675 
676  if (!queue->entries)
677  return;
678 
679  for (i = 0; i < queue->limit; i++) {
680  entry_priv = queue->entries[i].priv_data;
681  usb_kill_urb(entry_priv->urb);
682  usb_free_urb(entry_priv->urb);
683  }
684 
685  /*
686  * If this is not the beacon queue or
687  * no guardian byte was required for the beacon,
688  * then we are done.
689  */
690  if (queue->qid != QID_BEACON ||
691  !test_bit(REQUIRE_BEACON_GUARD, &rt2x00dev->cap_flags))
692  return;
693 
694  for (i = 0; i < queue->limit; i++) {
695  bcn_priv = queue->entries[i].priv_data;
696  usb_kill_urb(bcn_priv->guardian_urb);
697  usb_free_urb(bcn_priv->guardian_urb);
698  }
699 }
700 
701 int rt2x00usb_initialize(struct rt2x00_dev *rt2x00dev)
702 {
703  struct data_queue *queue;
704  int status;
705 
706  /*
707  * Find endpoints for each queue
708  */
709  status = rt2x00usb_find_endpoints(rt2x00dev);
710  if (status)
711  goto exit;
712 
713  /*
714  * Allocate DMA
715  */
716  queue_for_each(rt2x00dev, queue) {
717  status = rt2x00usb_alloc_entries(queue);
718  if (status)
719  goto exit;
720  }
721 
722  return 0;
723 
724 exit:
725  rt2x00usb_uninitialize(rt2x00dev);
726 
727  return status;
728 }
730 
731 void rt2x00usb_uninitialize(struct rt2x00_dev *rt2x00dev)
732 {
733  struct data_queue *queue;
734 
735  queue_for_each(rt2x00dev, queue)
736  rt2x00usb_free_entries(queue);
737 }
739 
740 /*
741  * USB driver handlers.
742  */
743 static void rt2x00usb_free_reg(struct rt2x00_dev *rt2x00dev)
744 {
745  kfree(rt2x00dev->rf);
746  rt2x00dev->rf = NULL;
747 
748  kfree(rt2x00dev->eeprom);
749  rt2x00dev->eeprom = NULL;
750 
751  kfree(rt2x00dev->csr.cache);
752  rt2x00dev->csr.cache = NULL;
753 }
754 
755 static int rt2x00usb_alloc_reg(struct rt2x00_dev *rt2x00dev)
756 {
757  rt2x00dev->csr.cache = kzalloc(CSR_CACHE_SIZE, GFP_KERNEL);
758  if (!rt2x00dev->csr.cache)
759  goto exit;
760 
761  rt2x00dev->eeprom = kzalloc(rt2x00dev->ops->eeprom_size, GFP_KERNEL);
762  if (!rt2x00dev->eeprom)
763  goto exit;
764 
765  rt2x00dev->rf = kzalloc(rt2x00dev->ops->rf_size, GFP_KERNEL);
766  if (!rt2x00dev->rf)
767  goto exit;
768 
769  return 0;
770 
771 exit:
772  ERROR_PROBE("Failed to allocate registers.\n");
773 
774  rt2x00usb_free_reg(rt2x00dev);
775 
776  return -ENOMEM;
777 }
778 
779 int rt2x00usb_probe(struct usb_interface *usb_intf,
780  const struct rt2x00_ops *ops)
781 {
782  struct usb_device *usb_dev = interface_to_usbdev(usb_intf);
783  struct ieee80211_hw *hw;
784  struct rt2x00_dev *rt2x00dev;
785  int retval;
786 
787  usb_dev = usb_get_dev(usb_dev);
788  usb_reset_device(usb_dev);
789 
790  hw = ieee80211_alloc_hw(sizeof(struct rt2x00_dev), ops->hw);
791  if (!hw) {
792  ERROR_PROBE("Failed to allocate hardware.\n");
793  retval = -ENOMEM;
794  goto exit_put_device;
795  }
796 
797  usb_set_intfdata(usb_intf, hw);
798 
799  rt2x00dev = hw->priv;
800  rt2x00dev->dev = &usb_intf->dev;
801  rt2x00dev->ops = ops;
802  rt2x00dev->hw = hw;
803 
804  rt2x00_set_chip_intf(rt2x00dev, RT2X00_CHIP_INTF_USB);
805 
806  INIT_WORK(&rt2x00dev->rxdone_work, rt2x00usb_work_rxdone);
807  INIT_WORK(&rt2x00dev->txdone_work, rt2x00usb_work_txdone);
810 
811  retval = rt2x00usb_alloc_reg(rt2x00dev);
812  if (retval)
813  goto exit_free_device;
814 
815  retval = rt2x00lib_probe_dev(rt2x00dev);
816  if (retval)
817  goto exit_free_reg;
818 
819  return 0;
820 
821 exit_free_reg:
822  rt2x00usb_free_reg(rt2x00dev);
823 
824 exit_free_device:
825  ieee80211_free_hw(hw);
826 
827 exit_put_device:
828  usb_put_dev(usb_dev);
829 
830  usb_set_intfdata(usb_intf, NULL);
831 
832  return retval;
833 }
835 
836 void rt2x00usb_disconnect(struct usb_interface *usb_intf)
837 {
838  struct ieee80211_hw *hw = usb_get_intfdata(usb_intf);
839  struct rt2x00_dev *rt2x00dev = hw->priv;
840 
841  /*
842  * Free all allocated data.
843  */
844  rt2x00lib_remove_dev(rt2x00dev);
845  rt2x00usb_free_reg(rt2x00dev);
846  ieee80211_free_hw(hw);
847 
848  /*
849  * Free the USB device data.
850  */
851  usb_set_intfdata(usb_intf, NULL);
852  usb_put_dev(interface_to_usbdev(usb_intf));
853 }
855 
856 #ifdef CONFIG_PM
857 int rt2x00usb_suspend(struct usb_interface *usb_intf, pm_message_t state)
858 {
859  struct ieee80211_hw *hw = usb_get_intfdata(usb_intf);
860  struct rt2x00_dev *rt2x00dev = hw->priv;
861 
862  return rt2x00lib_suspend(rt2x00dev, state);
863 }
865 
866 int rt2x00usb_resume(struct usb_interface *usb_intf)
867 {
868  struct ieee80211_hw *hw = usb_get_intfdata(usb_intf);
869  struct rt2x00_dev *rt2x00dev = hw->priv;
870 
871  return rt2x00lib_resume(rt2x00dev);
872 }
874 #endif /* CONFIG_PM */
875 
876 /*
877  * rt2x00usb module information.
878  */
881 MODULE_DESCRIPTION("rt2x00 usb library");
882 MODULE_LICENSE("GPL");