Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
btusb.c
Go to the documentation of this file.
1 /*
2  *
3  * Generic Bluetooth USB driver
4  *
5  * Copyright (C) 2005-2008 Marcel Holtmann <[email protected]>
6  *
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21  *
22  */
23 
24 #include <linux/module.h>
25 #include <linux/usb.h>
26 
28 #include <net/bluetooth/hci_core.h>
29 
30 #define VERSION "0.6"
31 
32 static bool ignore_dga;
33 static bool ignore_csr;
34 static bool ignore_sniffer;
35 static bool disable_scofix;
36 static bool force_scofix;
37 
38 static bool reset = 1;
39 
40 static struct usb_driver btusb_driver;
41 
42 #define BTUSB_IGNORE 0x01
43 #define BTUSB_DIGIANSWER 0x02
44 #define BTUSB_CSR 0x04
45 #define BTUSB_SNIFFER 0x08
46 #define BTUSB_BCM92035 0x10
47 #define BTUSB_BROKEN_ISOC 0x20
48 #define BTUSB_WRONG_SCO_MTU 0x40
49 #define BTUSB_ATH3012 0x80
50 
51 static struct usb_device_id btusb_table[] = {
52  /* Generic Bluetooth USB device */
53  { USB_DEVICE_INFO(0xe0, 0x01, 0x01) },
54 
55  /* Apple-specific (Broadcom) devices */
56  { USB_VENDOR_AND_INTERFACE_INFO(0x05ac, 0xff, 0x01, 0x01) },
57 
58  /* Broadcom SoftSailing reporting vendor specific */
59  { USB_DEVICE(0x0a5c, 0x21e1) },
60 
61  /* Apple MacBookPro 7,1 */
62  { USB_DEVICE(0x05ac, 0x8213) },
63 
64  /* Apple iMac11,1 */
65  { USB_DEVICE(0x05ac, 0x8215) },
66 
67  /* Apple MacBookPro6,2 */
68  { USB_DEVICE(0x05ac, 0x8218) },
69 
70  /* Apple MacBookAir3,1, MacBookAir3,2 */
71  { USB_DEVICE(0x05ac, 0x821b) },
72 
73  /* Apple MacBookAir4,1 */
74  { USB_DEVICE(0x05ac, 0x821f) },
75 
76  /* Apple MacBookPro8,2 */
77  { USB_DEVICE(0x05ac, 0x821a) },
78 
79  /* Apple MacMini5,1 */
80  { USB_DEVICE(0x05ac, 0x8281) },
81 
82  /* AVM BlueFRITZ! USB v2.0 */
83  { USB_DEVICE(0x057c, 0x3800) },
84 
85  /* Bluetooth Ultraport Module from IBM */
86  { USB_DEVICE(0x04bf, 0x030a) },
87 
88  /* ALPS Modules with non-standard id */
89  { USB_DEVICE(0x044e, 0x3001) },
90  { USB_DEVICE(0x044e, 0x3002) },
91 
92  /* Ericsson with non-standard id */
93  { USB_DEVICE(0x0bdb, 0x1002) },
94 
95  /* Canyon CN-BTU1 with HID interfaces */
96  { USB_DEVICE(0x0c10, 0x0000) },
97 
98  /* Broadcom BCM20702A0 */
99  { USB_DEVICE(0x04ca, 0x2003) },
100  { USB_DEVICE(0x0489, 0xe042) },
101  { USB_DEVICE(0x413c, 0x8197) },
102 
103  /* Foxconn - Hon Hai */
104  { USB_VENDOR_AND_INTERFACE_INFO(0x0489, 0xff, 0x01, 0x01) },
105 
106  /*Broadcom devices with vendor specific id */
107  { USB_VENDOR_AND_INTERFACE_INFO(0x0a5c, 0xff, 0x01, 0x01) },
108 
109  { } /* Terminating entry */
110 };
111 
112 MODULE_DEVICE_TABLE(usb, btusb_table);
113 
114 static struct usb_device_id blacklist_table[] = {
115  /* CSR BlueCore devices */
116  { USB_DEVICE(0x0a12, 0x0001), .driver_info = BTUSB_CSR },
117 
118  /* Broadcom BCM2033 without firmware */
119  { USB_DEVICE(0x0a5c, 0x2033), .driver_info = BTUSB_IGNORE },
120 
121  /* Atheros 3011 with sflash firmware */
122  { USB_DEVICE(0x0cf3, 0x3002), .driver_info = BTUSB_IGNORE },
123  { USB_DEVICE(0x0cf3, 0xe019), .driver_info = BTUSB_IGNORE },
124  { USB_DEVICE(0x13d3, 0x3304), .driver_info = BTUSB_IGNORE },
125  { USB_DEVICE(0x0930, 0x0215), .driver_info = BTUSB_IGNORE },
126  { USB_DEVICE(0x0489, 0xe03d), .driver_info = BTUSB_IGNORE },
127  { USB_DEVICE(0x0489, 0xe027), .driver_info = BTUSB_IGNORE },
128 
129  /* Atheros AR9285 Malbec with sflash firmware */
130  { USB_DEVICE(0x03f0, 0x311d), .driver_info = BTUSB_IGNORE },
131 
132  /* Atheros 3012 with sflash firmware */
133  { USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_ATH3012 },
134  { USB_DEVICE(0x0cf3, 0x311d), .driver_info = BTUSB_ATH3012 },
135  { USB_DEVICE(0x13d3, 0x3375), .driver_info = BTUSB_ATH3012 },
136  { USB_DEVICE(0x04ca, 0x3005), .driver_info = BTUSB_ATH3012 },
137  { USB_DEVICE(0x13d3, 0x3362), .driver_info = BTUSB_ATH3012 },
138  { USB_DEVICE(0x0cf3, 0xe004), .driver_info = BTUSB_ATH3012 },
139  { USB_DEVICE(0x0930, 0x0219), .driver_info = BTUSB_ATH3012 },
140  { USB_DEVICE(0x0489, 0xe057), .driver_info = BTUSB_ATH3012 },
141 
142  /* Atheros AR5BBU12 with sflash firmware */
143  { USB_DEVICE(0x0489, 0xe02c), .driver_info = BTUSB_IGNORE },
144 
145  /* Atheros AR5BBU12 with sflash firmware */
146  { USB_DEVICE(0x0489, 0xe03c), .driver_info = BTUSB_ATH3012 },
147  { USB_DEVICE(0x0489, 0xe036), .driver_info = BTUSB_ATH3012 },
148 
149  /* Broadcom BCM2035 */
150  { USB_DEVICE(0x0a5c, 0x2035), .driver_info = BTUSB_WRONG_SCO_MTU },
151  { USB_DEVICE(0x0a5c, 0x200a), .driver_info = BTUSB_WRONG_SCO_MTU },
152  { USB_DEVICE(0x0a5c, 0x2009), .driver_info = BTUSB_BCM92035 },
153 
154  /* Broadcom BCM2045 */
155  { USB_DEVICE(0x0a5c, 0x2039), .driver_info = BTUSB_WRONG_SCO_MTU },
156  { USB_DEVICE(0x0a5c, 0x2101), .driver_info = BTUSB_WRONG_SCO_MTU },
157 
158  /* IBM/Lenovo ThinkPad with Broadcom chip */
159  { USB_DEVICE(0x0a5c, 0x201e), .driver_info = BTUSB_WRONG_SCO_MTU },
160  { USB_DEVICE(0x0a5c, 0x2110), .driver_info = BTUSB_WRONG_SCO_MTU },
161 
162  /* HP laptop with Broadcom chip */
163  { USB_DEVICE(0x03f0, 0x171d), .driver_info = BTUSB_WRONG_SCO_MTU },
164 
165  /* Dell laptop with Broadcom chip */
166  { USB_DEVICE(0x413c, 0x8126), .driver_info = BTUSB_WRONG_SCO_MTU },
167 
168  /* Dell Wireless 370 and 410 devices */
169  { USB_DEVICE(0x413c, 0x8152), .driver_info = BTUSB_WRONG_SCO_MTU },
170  { USB_DEVICE(0x413c, 0x8156), .driver_info = BTUSB_WRONG_SCO_MTU },
171 
172  /* Belkin F8T012 and F8T013 devices */
173  { USB_DEVICE(0x050d, 0x0012), .driver_info = BTUSB_WRONG_SCO_MTU },
174  { USB_DEVICE(0x050d, 0x0013), .driver_info = BTUSB_WRONG_SCO_MTU },
175 
176  /* Asus WL-BTD202 device */
177  { USB_DEVICE(0x0b05, 0x1715), .driver_info = BTUSB_WRONG_SCO_MTU },
178 
179  /* Kensington Bluetooth USB adapter */
180  { USB_DEVICE(0x047d, 0x105e), .driver_info = BTUSB_WRONG_SCO_MTU },
181 
182  /* RTX Telecom based adapters with buggy SCO support */
183  { USB_DEVICE(0x0400, 0x0807), .driver_info = BTUSB_BROKEN_ISOC },
184  { USB_DEVICE(0x0400, 0x080a), .driver_info = BTUSB_BROKEN_ISOC },
185 
186  /* CONWISE Technology based adapters with buggy SCO support */
187  { USB_DEVICE(0x0e5e, 0x6622), .driver_info = BTUSB_BROKEN_ISOC },
188 
189  /* Digianswer devices */
190  { USB_DEVICE(0x08fd, 0x0001), .driver_info = BTUSB_DIGIANSWER },
191  { USB_DEVICE(0x08fd, 0x0002), .driver_info = BTUSB_IGNORE },
192 
193  /* CSR BlueCore Bluetooth Sniffer */
194  { USB_DEVICE(0x0a12, 0x0002), .driver_info = BTUSB_SNIFFER },
195 
196  /* Frontline ComProbe Bluetooth Sniffer */
197  { USB_DEVICE(0x16d3, 0x0002), .driver_info = BTUSB_SNIFFER },
198 
199  { } /* Terminating entry */
200 };
201 
202 #define BTUSB_MAX_ISOC_FRAMES 10
203 
204 #define BTUSB_INTR_RUNNING 0
205 #define BTUSB_BULK_RUNNING 1
206 #define BTUSB_ISOC_RUNNING 2
207 #define BTUSB_SUSPENDING 3
208 #define BTUSB_DID_ISO_RESUME 4
209 
210 struct btusb_data {
211  struct hci_dev *hdev;
212  struct usb_device *udev;
215 
217 
218  unsigned long flags;
219 
222 
223  struct usb_anchor tx_anchor;
224  struct usb_anchor intr_anchor;
225  struct usb_anchor bulk_anchor;
226  struct usb_anchor isoc_anchor;
227  struct usb_anchor deferred;
230 
236 
238 
239  unsigned int sco_num;
242 };
243 
244 static int inc_tx(struct btusb_data *data)
245 {
246  unsigned long flags;
247  int rv;
248 
249  spin_lock_irqsave(&data->txlock, flags);
250  rv = test_bit(BTUSB_SUSPENDING, &data->flags);
251  if (!rv)
252  data->tx_in_flight++;
253  spin_unlock_irqrestore(&data->txlock, flags);
254 
255  return rv;
256 }
257 
258 static void btusb_intr_complete(struct urb *urb)
259 {
260  struct hci_dev *hdev = urb->context;
261  struct btusb_data *data = hci_get_drvdata(hdev);
262  int err;
263 
264  BT_DBG("%s urb %p status %d count %d", hdev->name,
265  urb, urb->status, urb->actual_length);
266 
267  if (!test_bit(HCI_RUNNING, &hdev->flags))
268  return;
269 
270  if (urb->status == 0) {
271  hdev->stat.byte_rx += urb->actual_length;
272 
274  urb->transfer_buffer,
275  urb->actual_length) < 0) {
276  BT_ERR("%s corrupted event packet", hdev->name);
277  hdev->stat.err_rx++;
278  }
279  }
280 
281  if (!test_bit(BTUSB_INTR_RUNNING, &data->flags))
282  return;
283 
284  usb_mark_last_busy(data->udev);
285  usb_anchor_urb(urb, &data->intr_anchor);
286 
287  err = usb_submit_urb(urb, GFP_ATOMIC);
288  if (err < 0) {
289  /* -EPERM: urb is being killed;
290  * -ENODEV: device got disconnected */
291  if (err != -EPERM && err != -ENODEV)
292  BT_ERR("%s urb %p failed to resubmit (%d)",
293  hdev->name, urb, -err);
294  usb_unanchor_urb(urb);
295  }
296 }
297 
298 static int btusb_submit_intr_urb(struct hci_dev *hdev, gfp_t mem_flags)
299 {
300  struct btusb_data *data = hci_get_drvdata(hdev);
301  struct urb *urb;
302  unsigned char *buf;
303  unsigned int pipe;
304  int err, size;
305 
306  BT_DBG("%s", hdev->name);
307 
308  if (!data->intr_ep)
309  return -ENODEV;
310 
311  urb = usb_alloc_urb(0, mem_flags);
312  if (!urb)
313  return -ENOMEM;
314 
315  size = le16_to_cpu(data->intr_ep->wMaxPacketSize);
316 
317  buf = kmalloc(size, mem_flags);
318  if (!buf) {
319  usb_free_urb(urb);
320  return -ENOMEM;
321  }
322 
323  pipe = usb_rcvintpipe(data->udev, data->intr_ep->bEndpointAddress);
324 
325  usb_fill_int_urb(urb, data->udev, pipe, buf, size,
326  btusb_intr_complete, hdev,
327  data->intr_ep->bInterval);
328 
329  urb->transfer_flags |= URB_FREE_BUFFER;
330 
331  usb_anchor_urb(urb, &data->intr_anchor);
332 
333  err = usb_submit_urb(urb, mem_flags);
334  if (err < 0) {
335  if (err != -EPERM && err != -ENODEV)
336  BT_ERR("%s urb %p submission failed (%d)",
337  hdev->name, urb, -err);
338  usb_unanchor_urb(urb);
339  }
340 
341  usb_free_urb(urb);
342 
343  return err;
344 }
345 
346 static void btusb_bulk_complete(struct urb *urb)
347 {
348  struct hci_dev *hdev = urb->context;
349  struct btusb_data *data = hci_get_drvdata(hdev);
350  int err;
351 
352  BT_DBG("%s urb %p status %d count %d", hdev->name,
353  urb, urb->status, urb->actual_length);
354 
355  if (!test_bit(HCI_RUNNING, &hdev->flags))
356  return;
357 
358  if (urb->status == 0) {
359  hdev->stat.byte_rx += urb->actual_length;
360 
362  urb->transfer_buffer,
363  urb->actual_length) < 0) {
364  BT_ERR("%s corrupted ACL packet", hdev->name);
365  hdev->stat.err_rx++;
366  }
367  }
368 
369  if (!test_bit(BTUSB_BULK_RUNNING, &data->flags))
370  return;
371 
372  usb_anchor_urb(urb, &data->bulk_anchor);
373  usb_mark_last_busy(data->udev);
374 
375  err = usb_submit_urb(urb, GFP_ATOMIC);
376  if (err < 0) {
377  /* -EPERM: urb is being killed;
378  * -ENODEV: device got disconnected */
379  if (err != -EPERM && err != -ENODEV)
380  BT_ERR("%s urb %p failed to resubmit (%d)",
381  hdev->name, urb, -err);
382  usb_unanchor_urb(urb);
383  }
384 }
385 
386 static int btusb_submit_bulk_urb(struct hci_dev *hdev, gfp_t mem_flags)
387 {
388  struct btusb_data *data = hci_get_drvdata(hdev);
389  struct urb *urb;
390  unsigned char *buf;
391  unsigned int pipe;
392  int err, size = HCI_MAX_FRAME_SIZE;
393 
394  BT_DBG("%s", hdev->name);
395 
396  if (!data->bulk_rx_ep)
397  return -ENODEV;
398 
399  urb = usb_alloc_urb(0, mem_flags);
400  if (!urb)
401  return -ENOMEM;
402 
403  buf = kmalloc(size, mem_flags);
404  if (!buf) {
405  usb_free_urb(urb);
406  return -ENOMEM;
407  }
408 
409  pipe = usb_rcvbulkpipe(data->udev, data->bulk_rx_ep->bEndpointAddress);
410 
411  usb_fill_bulk_urb(urb, data->udev, pipe,
412  buf, size, btusb_bulk_complete, hdev);
413 
414  urb->transfer_flags |= URB_FREE_BUFFER;
415 
416  usb_mark_last_busy(data->udev);
417  usb_anchor_urb(urb, &data->bulk_anchor);
418 
419  err = usb_submit_urb(urb, mem_flags);
420  if (err < 0) {
421  if (err != -EPERM && err != -ENODEV)
422  BT_ERR("%s urb %p submission failed (%d)",
423  hdev->name, urb, -err);
424  usb_unanchor_urb(urb);
425  }
426 
427  usb_free_urb(urb);
428 
429  return err;
430 }
431 
432 static void btusb_isoc_complete(struct urb *urb)
433 {
434  struct hci_dev *hdev = urb->context;
435  struct btusb_data *data = hci_get_drvdata(hdev);
436  int i, err;
437 
438  BT_DBG("%s urb %p status %d count %d", hdev->name,
439  urb, urb->status, urb->actual_length);
440 
441  if (!test_bit(HCI_RUNNING, &hdev->flags))
442  return;
443 
444  if (urb->status == 0) {
445  for (i = 0; i < urb->number_of_packets; i++) {
446  unsigned int offset = urb->iso_frame_desc[i].offset;
447  unsigned int length = urb->iso_frame_desc[i].actual_length;
448 
449  if (urb->iso_frame_desc[i].status)
450  continue;
451 
452  hdev->stat.byte_rx += length;
453 
455  urb->transfer_buffer + offset,
456  length) < 0) {
457  BT_ERR("%s corrupted SCO packet", hdev->name);
458  hdev->stat.err_rx++;
459  }
460  }
461  }
462 
463  if (!test_bit(BTUSB_ISOC_RUNNING, &data->flags))
464  return;
465 
466  usb_anchor_urb(urb, &data->isoc_anchor);
467 
468  err = usb_submit_urb(urb, GFP_ATOMIC);
469  if (err < 0) {
470  /* -EPERM: urb is being killed;
471  * -ENODEV: device got disconnected */
472  if (err != -EPERM && err != -ENODEV)
473  BT_ERR("%s urb %p failed to resubmit (%d)",
474  hdev->name, urb, -err);
475  usb_unanchor_urb(urb);
476  }
477 }
478 
479 static inline void __fill_isoc_descriptor(struct urb *urb, int len, int mtu)
480 {
481  int i, offset = 0;
482 
483  BT_DBG("len %d mtu %d", len, mtu);
484 
485  for (i = 0; i < BTUSB_MAX_ISOC_FRAMES && len >= mtu;
486  i++, offset += mtu, len -= mtu) {
487  urb->iso_frame_desc[i].offset = offset;
488  urb->iso_frame_desc[i].length = mtu;
489  }
490 
491  if (len && i < BTUSB_MAX_ISOC_FRAMES) {
492  urb->iso_frame_desc[i].offset = offset;
493  urb->iso_frame_desc[i].length = len;
494  i++;
495  }
496 
497  urb->number_of_packets = i;
498 }
499 
500 static int btusb_submit_isoc_urb(struct hci_dev *hdev, gfp_t mem_flags)
501 {
502  struct btusb_data *data = hci_get_drvdata(hdev);
503  struct urb *urb;
504  unsigned char *buf;
505  unsigned int pipe;
506  int err, size;
507 
508  BT_DBG("%s", hdev->name);
509 
510  if (!data->isoc_rx_ep)
511  return -ENODEV;
512 
513  urb = usb_alloc_urb(BTUSB_MAX_ISOC_FRAMES, mem_flags);
514  if (!urb)
515  return -ENOMEM;
516 
517  size = le16_to_cpu(data->isoc_rx_ep->wMaxPacketSize) *
519 
520  buf = kmalloc(size, mem_flags);
521  if (!buf) {
522  usb_free_urb(urb);
523  return -ENOMEM;
524  }
525 
526  pipe = usb_rcvisocpipe(data->udev, data->isoc_rx_ep->bEndpointAddress);
527 
528  usb_fill_int_urb(urb, data->udev, pipe, buf, size, btusb_isoc_complete,
529  hdev, data->isoc_rx_ep->bInterval);
530 
531  urb->transfer_flags = URB_FREE_BUFFER | URB_ISO_ASAP;
532 
533  __fill_isoc_descriptor(urb, size,
534  le16_to_cpu(data->isoc_rx_ep->wMaxPacketSize));
535 
536  usb_anchor_urb(urb, &data->isoc_anchor);
537 
538  err = usb_submit_urb(urb, mem_flags);
539  if (err < 0) {
540  if (err != -EPERM && err != -ENODEV)
541  BT_ERR("%s urb %p submission failed (%d)",
542  hdev->name, urb, -err);
543  usb_unanchor_urb(urb);
544  }
545 
546  usb_free_urb(urb);
547 
548  return err;
549 }
550 
551 static void btusb_tx_complete(struct urb *urb)
552 {
553  struct sk_buff *skb = urb->context;
554  struct hci_dev *hdev = (struct hci_dev *) skb->dev;
555  struct btusb_data *data = hci_get_drvdata(hdev);
556 
557  BT_DBG("%s urb %p status %d count %d", hdev->name,
558  urb, urb->status, urb->actual_length);
559 
560  if (!test_bit(HCI_RUNNING, &hdev->flags))
561  goto done;
562 
563  if (!urb->status)
564  hdev->stat.byte_tx += urb->transfer_buffer_length;
565  else
566  hdev->stat.err_tx++;
567 
568 done:
569  spin_lock(&data->txlock);
570  data->tx_in_flight--;
571  spin_unlock(&data->txlock);
572 
573  kfree(urb->setup_packet);
574 
575  kfree_skb(skb);
576 }
577 
578 static void btusb_isoc_tx_complete(struct urb *urb)
579 {
580  struct sk_buff *skb = urb->context;
581  struct hci_dev *hdev = (struct hci_dev *) skb->dev;
582 
583  BT_DBG("%s urb %p status %d count %d", hdev->name,
584  urb, urb->status, urb->actual_length);
585 
586  if (!test_bit(HCI_RUNNING, &hdev->flags))
587  goto done;
588 
589  if (!urb->status)
590  hdev->stat.byte_tx += urb->transfer_buffer_length;
591  else
592  hdev->stat.err_tx++;
593 
594 done:
595  kfree(urb->setup_packet);
596 
597  kfree_skb(skb);
598 }
599 
600 static int btusb_open(struct hci_dev *hdev)
601 {
602  struct btusb_data *data = hci_get_drvdata(hdev);
603  int err;
604 
605  BT_DBG("%s", hdev->name);
606 
607  err = usb_autopm_get_interface(data->intf);
608  if (err < 0)
609  return err;
610 
611  data->intf->needs_remote_wakeup = 1;
612 
613  if (test_and_set_bit(HCI_RUNNING, &hdev->flags))
614  goto done;
615 
617  goto done;
618 
619  err = btusb_submit_intr_urb(hdev, GFP_KERNEL);
620  if (err < 0)
621  goto failed;
622 
623  err = btusb_submit_bulk_urb(hdev, GFP_KERNEL);
624  if (err < 0) {
626  goto failed;
627  }
628 
630  btusb_submit_bulk_urb(hdev, GFP_KERNEL);
631 
632 done:
633  usb_autopm_put_interface(data->intf);
634  return 0;
635 
636 failed:
638  clear_bit(HCI_RUNNING, &hdev->flags);
639  usb_autopm_put_interface(data->intf);
640  return err;
641 }
642 
643 static void btusb_stop_traffic(struct btusb_data *data)
644 {
648 }
649 
650 static int btusb_close(struct hci_dev *hdev)
651 {
652  struct btusb_data *data = hci_get_drvdata(hdev);
653  int err;
654 
655  BT_DBG("%s", hdev->name);
656 
657  if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags))
658  return 0;
659 
660  cancel_work_sync(&data->work);
661  cancel_work_sync(&data->waker);
662 
666 
667  btusb_stop_traffic(data);
668  err = usb_autopm_get_interface(data->intf);
669  if (err < 0)
670  goto failed;
671 
672  data->intf->needs_remote_wakeup = 0;
673  usb_autopm_put_interface(data->intf);
674 
675 failed:
677  return 0;
678 }
679 
680 static int btusb_flush(struct hci_dev *hdev)
681 {
682  struct btusb_data *data = hci_get_drvdata(hdev);
683 
684  BT_DBG("%s", hdev->name);
685 
687 
688  return 0;
689 }
690 
691 static int btusb_send_frame(struct sk_buff *skb)
692 {
693  struct hci_dev *hdev = (struct hci_dev *) skb->dev;
694  struct btusb_data *data = hci_get_drvdata(hdev);
695  struct usb_ctrlrequest *dr;
696  struct urb *urb;
697  unsigned int pipe;
698  int err;
699 
700  BT_DBG("%s", hdev->name);
701 
702  if (!test_bit(HCI_RUNNING, &hdev->flags))
703  return -EBUSY;
704 
705  switch (bt_cb(skb)->pkt_type) {
706  case HCI_COMMAND_PKT:
707  urb = usb_alloc_urb(0, GFP_ATOMIC);
708  if (!urb)
709  return -ENOMEM;
710 
711  dr = kmalloc(sizeof(*dr), GFP_ATOMIC);
712  if (!dr) {
713  usb_free_urb(urb);
714  return -ENOMEM;
715  }
716 
717  dr->bRequestType = data->cmdreq_type;
718  dr->bRequest = 0;
719  dr->wIndex = 0;
720  dr->wValue = 0;
721  dr->wLength = __cpu_to_le16(skb->len);
722 
723  pipe = usb_sndctrlpipe(data->udev, 0x00);
724 
725  usb_fill_control_urb(urb, data->udev, pipe, (void *) dr,
726  skb->data, skb->len, btusb_tx_complete, skb);
727 
728  hdev->stat.cmd_tx++;
729  break;
730 
731  case HCI_ACLDATA_PKT:
732  if (!data->bulk_tx_ep)
733  return -ENODEV;
734 
735  urb = usb_alloc_urb(0, GFP_ATOMIC);
736  if (!urb)
737  return -ENOMEM;
738 
739  pipe = usb_sndbulkpipe(data->udev,
740  data->bulk_tx_ep->bEndpointAddress);
741 
742  usb_fill_bulk_urb(urb, data->udev, pipe,
743  skb->data, skb->len, btusb_tx_complete, skb);
744 
745  hdev->stat.acl_tx++;
746  break;
747 
748  case HCI_SCODATA_PKT:
749  if (!data->isoc_tx_ep || hdev->conn_hash.sco_num < 1)
750  return -ENODEV;
751 
753  if (!urb)
754  return -ENOMEM;
755 
756  pipe = usb_sndisocpipe(data->udev,
757  data->isoc_tx_ep->bEndpointAddress);
758 
759  usb_fill_int_urb(urb, data->udev, pipe,
760  skb->data, skb->len, btusb_isoc_tx_complete,
761  skb, data->isoc_tx_ep->bInterval);
762 
763  urb->transfer_flags = URB_ISO_ASAP;
764 
765  __fill_isoc_descriptor(urb, skb->len,
766  le16_to_cpu(data->isoc_tx_ep->wMaxPacketSize));
767 
768  hdev->stat.sco_tx++;
769  goto skip_waking;
770 
771  default:
772  return -EILSEQ;
773  }
774 
775  err = inc_tx(data);
776  if (err) {
777  usb_anchor_urb(urb, &data->deferred);
778  schedule_work(&data->waker);
779  err = 0;
780  goto done;
781  }
782 
783 skip_waking:
784  usb_anchor_urb(urb, &data->tx_anchor);
785 
786  err = usb_submit_urb(urb, GFP_ATOMIC);
787  if (err < 0) {
788  if (err != -EPERM && err != -ENODEV)
789  BT_ERR("%s urb %p submission failed (%d)",
790  hdev->name, urb, -err);
791  kfree(urb->setup_packet);
792  usb_unanchor_urb(urb);
793  } else {
794  usb_mark_last_busy(data->udev);
795  }
796 
797 done:
798  usb_free_urb(urb);
799  return err;
800 }
801 
802 static void btusb_notify(struct hci_dev *hdev, unsigned int evt)
803 {
804  struct btusb_data *data = hci_get_drvdata(hdev);
805 
806  BT_DBG("%s evt %d", hdev->name, evt);
807 
808  if (hdev->conn_hash.sco_num != data->sco_num) {
809  data->sco_num = hdev->conn_hash.sco_num;
810  schedule_work(&data->work);
811  }
812 }
813 
814 static inline int __set_isoc_interface(struct hci_dev *hdev, int altsetting)
815 {
816  struct btusb_data *data = hci_get_drvdata(hdev);
817  struct usb_interface *intf = data->isoc;
819  int i, err;
820 
821  if (!data->isoc)
822  return -ENODEV;
823 
824  err = usb_set_interface(data->udev, 1, altsetting);
825  if (err < 0) {
826  BT_ERR("%s setting interface failed (%d)", hdev->name, -err);
827  return err;
828  }
829 
830  data->isoc_altsetting = altsetting;
831 
832  data->isoc_tx_ep = NULL;
833  data->isoc_rx_ep = NULL;
834 
835  for (i = 0; i < intf->cur_altsetting->desc.bNumEndpoints; i++) {
836  ep_desc = &intf->cur_altsetting->endpoint[i].desc;
837 
838  if (!data->isoc_tx_ep && usb_endpoint_is_isoc_out(ep_desc)) {
839  data->isoc_tx_ep = ep_desc;
840  continue;
841  }
842 
843  if (!data->isoc_rx_ep && usb_endpoint_is_isoc_in(ep_desc)) {
844  data->isoc_rx_ep = ep_desc;
845  continue;
846  }
847  }
848 
849  if (!data->isoc_tx_ep || !data->isoc_rx_ep) {
850  BT_ERR("%s invalid SCO descriptors", hdev->name);
851  return -ENODEV;
852  }
853 
854  return 0;
855 }
856 
857 static void btusb_work(struct work_struct *work)
858 {
859  struct btusb_data *data = container_of(work, struct btusb_data, work);
860  struct hci_dev *hdev = data->hdev;
861  int new_alts;
862  int err;
863 
864  if (hdev->conn_hash.sco_num > 0) {
865  if (!test_bit(BTUSB_DID_ISO_RESUME, &data->flags)) {
866  err = usb_autopm_get_interface(data->isoc ? data->isoc : data->intf);
867  if (err < 0) {
870  return;
871  }
872 
874  }
875 
876  if (hdev->voice_setting & 0x0020) {
877  static const int alts[3] = { 2, 4, 5 };
878  new_alts = alts[hdev->conn_hash.sco_num - 1];
879  } else {
880  new_alts = hdev->conn_hash.sco_num;
881  }
882 
883  if (data->isoc_altsetting != new_alts) {
886 
887  if (__set_isoc_interface(hdev, new_alts) < 0)
888  return;
889  }
890 
891  if (!test_and_set_bit(BTUSB_ISOC_RUNNING, &data->flags)) {
892  if (btusb_submit_isoc_urb(hdev, GFP_KERNEL) < 0)
894  else
895  btusb_submit_isoc_urb(hdev, GFP_KERNEL);
896  }
897  } else {
900 
901  __set_isoc_interface(hdev, 0);
903  usb_autopm_put_interface(data->isoc ? data->isoc : data->intf);
904  }
905 }
906 
907 static void btusb_waker(struct work_struct *work)
908 {
909  struct btusb_data *data = container_of(work, struct btusb_data, waker);
910  int err;
911 
912  err = usb_autopm_get_interface(data->intf);
913  if (err < 0)
914  return;
915 
916  usb_autopm_put_interface(data->intf);
917 }
918 
919 static int btusb_probe(struct usb_interface *intf,
920  const struct usb_device_id *id)
921 {
923  struct btusb_data *data;
924  struct hci_dev *hdev;
925  int i, err;
926 
927  BT_DBG("intf %p id %p", intf, id);
928 
929  /* interface numbers are hardcoded in the spec */
930  if (intf->cur_altsetting->desc.bInterfaceNumber != 0)
931  return -ENODEV;
932 
933  if (!id->driver_info) {
934  const struct usb_device_id *match;
935  match = usb_match_id(intf, blacklist_table);
936  if (match)
937  id = match;
938  }
939 
940  if (id->driver_info == BTUSB_IGNORE)
941  return -ENODEV;
942 
943  if (ignore_dga && id->driver_info & BTUSB_DIGIANSWER)
944  return -ENODEV;
945 
946  if (ignore_csr && id->driver_info & BTUSB_CSR)
947  return -ENODEV;
948 
949  if (ignore_sniffer && id->driver_info & BTUSB_SNIFFER)
950  return -ENODEV;
951 
952  if (id->driver_info & BTUSB_ATH3012) {
953  struct usb_device *udev = interface_to_usbdev(intf);
954 
955  /* Old firmware would otherwise let ath3k driver load
956  * patch and sysconfig files */
957  if (le16_to_cpu(udev->descriptor.bcdDevice) <= 0x0001)
958  return -ENODEV;
959  }
960 
961  data = devm_kzalloc(&intf->dev, sizeof(*data), GFP_KERNEL);
962  if (!data)
963  return -ENOMEM;
964 
965  for (i = 0; i < intf->cur_altsetting->desc.bNumEndpoints; i++) {
966  ep_desc = &intf->cur_altsetting->endpoint[i].desc;
967 
968  if (!data->intr_ep && usb_endpoint_is_int_in(ep_desc)) {
969  data->intr_ep = ep_desc;
970  continue;
971  }
972 
973  if (!data->bulk_tx_ep && usb_endpoint_is_bulk_out(ep_desc)) {
974  data->bulk_tx_ep = ep_desc;
975  continue;
976  }
977 
978  if (!data->bulk_rx_ep && usb_endpoint_is_bulk_in(ep_desc)) {
979  data->bulk_rx_ep = ep_desc;
980  continue;
981  }
982  }
983 
984  if (!data->intr_ep || !data->bulk_tx_ep || !data->bulk_rx_ep)
985  return -ENODEV;
986 
987  data->cmdreq_type = USB_TYPE_CLASS;
988 
989  data->udev = interface_to_usbdev(intf);
990  data->intf = intf;
991 
992  spin_lock_init(&data->lock);
993 
994  INIT_WORK(&data->work, btusb_work);
995  INIT_WORK(&data->waker, btusb_waker);
996  spin_lock_init(&data->txlock);
997 
998  init_usb_anchor(&data->tx_anchor);
999  init_usb_anchor(&data->intr_anchor);
1000  init_usb_anchor(&data->bulk_anchor);
1001  init_usb_anchor(&data->isoc_anchor);
1002  init_usb_anchor(&data->deferred);
1003 
1004  hdev = hci_alloc_dev();
1005  if (!hdev)
1006  return -ENOMEM;
1007 
1008  hdev->bus = HCI_USB;
1009  hci_set_drvdata(hdev, data);
1010 
1011  data->hdev = hdev;
1012 
1013  SET_HCIDEV_DEV(hdev, &intf->dev);
1014 
1015  hdev->open = btusb_open;
1016  hdev->close = btusb_close;
1017  hdev->flush = btusb_flush;
1018  hdev->send = btusb_send_frame;
1019  hdev->notify = btusb_notify;
1020 
1021  /* Interface numbers are hardcoded in the specification */
1022  data->isoc = usb_ifnum_to_if(data->udev, 1);
1023 
1024  if (!reset)
1026 
1027  if (force_scofix || id->driver_info & BTUSB_WRONG_SCO_MTU) {
1028  if (!disable_scofix)
1030  }
1031 
1032  if (id->driver_info & BTUSB_BROKEN_ISOC)
1033  data->isoc = NULL;
1034 
1035  if (id->driver_info & BTUSB_DIGIANSWER) {
1036  data->cmdreq_type = USB_TYPE_VENDOR;
1038  }
1039 
1040  if (id->driver_info & BTUSB_CSR) {
1041  struct usb_device *udev = data->udev;
1042 
1043  /* Old firmware would otherwise execute USB reset */
1044  if (le16_to_cpu(udev->descriptor.bcdDevice) < 0x117)
1046  }
1047 
1048  if (id->driver_info & BTUSB_SNIFFER) {
1049  struct usb_device *udev = data->udev;
1050 
1051  /* New sniffer firmware has crippled HCI interface */
1052  if (le16_to_cpu(udev->descriptor.bcdDevice) > 0x997)
1054 
1055  data->isoc = NULL;
1056  }
1057 
1058  if (id->driver_info & BTUSB_BCM92035) {
1059  unsigned char cmd[] = { 0x3b, 0xfc, 0x01, 0x00 };
1060  struct sk_buff *skb;
1061 
1062  skb = bt_skb_alloc(sizeof(cmd), GFP_KERNEL);
1063  if (skb) {
1064  memcpy(skb_put(skb, sizeof(cmd)), cmd, sizeof(cmd));
1065  skb_queue_tail(&hdev->driver_init, skb);
1066  }
1067  }
1068 
1069  if (data->isoc) {
1070  err = usb_driver_claim_interface(&btusb_driver,
1071  data->isoc, data);
1072  if (err < 0) {
1073  hci_free_dev(hdev);
1074  return err;
1075  }
1076  }
1077 
1078  err = hci_register_dev(hdev);
1079  if (err < 0) {
1080  hci_free_dev(hdev);
1081  return err;
1082  }
1083 
1084  usb_set_intfdata(intf, data);
1085 
1086  return 0;
1087 }
1088 
1089 static void btusb_disconnect(struct usb_interface *intf)
1090 {
1091  struct btusb_data *data = usb_get_intfdata(intf);
1092  struct hci_dev *hdev;
1093 
1094  BT_DBG("intf %p", intf);
1095 
1096  if (!data)
1097  return;
1098 
1099  hdev = data->hdev;
1100  usb_set_intfdata(data->intf, NULL);
1101 
1102  if (data->isoc)
1103  usb_set_intfdata(data->isoc, NULL);
1104 
1105  hci_unregister_dev(hdev);
1106 
1107  if (intf == data->isoc)
1108  usb_driver_release_interface(&btusb_driver, data->intf);
1109  else if (data->isoc)
1110  usb_driver_release_interface(&btusb_driver, data->isoc);
1111 
1112  hci_free_dev(hdev);
1113 }
1114 
1115 #ifdef CONFIG_PM
1116 static int btusb_suspend(struct usb_interface *intf, pm_message_t message)
1117 {
1118  struct btusb_data *data = usb_get_intfdata(intf);
1119 
1120  BT_DBG("intf %p", intf);
1121 
1122  if (data->suspend_count++)
1123  return 0;
1124 
1125  spin_lock_irq(&data->txlock);
1126  if (!(PMSG_IS_AUTO(message) && data->tx_in_flight)) {
1127  set_bit(BTUSB_SUSPENDING, &data->flags);
1128  spin_unlock_irq(&data->txlock);
1129  } else {
1130  spin_unlock_irq(&data->txlock);
1131  data->suspend_count--;
1132  return -EBUSY;
1133  }
1134 
1135  cancel_work_sync(&data->work);
1136 
1137  btusb_stop_traffic(data);
1139 
1140  return 0;
1141 }
1142 
1143 static void play_deferred(struct btusb_data *data)
1144 {
1145  struct urb *urb;
1146  int err;
1147 
1148  while ((urb = usb_get_from_anchor(&data->deferred))) {
1149  err = usb_submit_urb(urb, GFP_ATOMIC);
1150  if (err < 0)
1151  break;
1152 
1153  data->tx_in_flight++;
1154  }
1156 }
1157 
1158 static int btusb_resume(struct usb_interface *intf)
1159 {
1160  struct btusb_data *data = usb_get_intfdata(intf);
1161  struct hci_dev *hdev = data->hdev;
1162  int err = 0;
1163 
1164  BT_DBG("intf %p", intf);
1165 
1166  if (--data->suspend_count)
1167  return 0;
1168 
1169  if (!test_bit(HCI_RUNNING, &hdev->flags))
1170  goto done;
1171 
1172  if (test_bit(BTUSB_INTR_RUNNING, &data->flags)) {
1173  err = btusb_submit_intr_urb(hdev, GFP_NOIO);
1174  if (err < 0) {
1176  goto failed;
1177  }
1178  }
1179 
1180  if (test_bit(BTUSB_BULK_RUNNING, &data->flags)) {
1181  err = btusb_submit_bulk_urb(hdev, GFP_NOIO);
1182  if (err < 0) {
1184  goto failed;
1185  }
1186 
1187  btusb_submit_bulk_urb(hdev, GFP_NOIO);
1188  }
1189 
1190  if (test_bit(BTUSB_ISOC_RUNNING, &data->flags)) {
1191  if (btusb_submit_isoc_urb(hdev, GFP_NOIO) < 0)
1193  else
1194  btusb_submit_isoc_urb(hdev, GFP_NOIO);
1195  }
1196 
1197  spin_lock_irq(&data->txlock);
1198  play_deferred(data);
1199  clear_bit(BTUSB_SUSPENDING, &data->flags);
1200  spin_unlock_irq(&data->txlock);
1201  schedule_work(&data->work);
1202 
1203  return 0;
1204 
1205 failed:
1207 done:
1208  spin_lock_irq(&data->txlock);
1209  clear_bit(BTUSB_SUSPENDING, &data->flags);
1210  spin_unlock_irq(&data->txlock);
1211 
1212  return err;
1213 }
1214 #endif
1215 
1216 static struct usb_driver btusb_driver = {
1217  .name = "btusb",
1218  .probe = btusb_probe,
1219  .disconnect = btusb_disconnect,
1220 #ifdef CONFIG_PM
1221  .suspend = btusb_suspend,
1222  .resume = btusb_resume,
1223 #endif
1224  .id_table = btusb_table,
1225  .supports_autosuspend = 1,
1226  .disable_hub_initiated_lpm = 1,
1227 };
1228 
1229 module_usb_driver(btusb_driver);
1230 
1231 module_param(ignore_dga, bool, 0644);
1232 MODULE_PARM_DESC(ignore_dga, "Ignore devices with id 08fd:0001");
1233 
1234 module_param(ignore_csr, bool, 0644);
1235 MODULE_PARM_DESC(ignore_csr, "Ignore devices with id 0a12:0001");
1236 
1237 module_param(ignore_sniffer, bool, 0644);
1238 MODULE_PARM_DESC(ignore_sniffer, "Ignore devices with id 0a12:0002");
1239 
1240 module_param(disable_scofix, bool, 0644);
1241 MODULE_PARM_DESC(disable_scofix, "Disable fixup of wrong SCO buffer size");
1242 
1243 module_param(force_scofix, bool, 0644);
1244 MODULE_PARM_DESC(force_scofix, "Force fixup of wrong SCO buffers size");
1245 
1246 module_param(reset, bool, 0644);
1247 MODULE_PARM_DESC(reset, "Send HCI reset command on initialization");
1248 
1249 MODULE_AUTHOR("Marcel Holtmann <[email protected]>");
1250 MODULE_DESCRIPTION("Generic Bluetooth USB driver ver " VERSION);
1252 MODULE_LICENSE("GPL");