2 HCI USB driver for Linux Bluetooth protocol stack (BlueZ)
3 Copyright (C) 2000-2001 Qualcomm Incorporated
4 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
6 Copyright (C) 2003 Maxim Krasnyansky <maxk@qualcomm.com>
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License version 2 as
10 published by the Free Software Foundation;
12 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
13 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
15 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
16 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
17 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
18 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
19 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
21 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
22 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
23 SOFTWARE IS DISCLAIMED.
27 * Bluetooth HCI USB driver.
28 * Based on original USB Bluetooth driver for Linux kernel
29 * Copyright (c) 2000 Greg Kroah-Hartman <greg@kroah.com>
30 * Copyright (c) 2000 Mark Douglas Corner <mcorner@umich.edu>
34 #include <linux/module.h>
36 #include <linux/kernel.h>
37 #include <linux/init.h>
38 #include <linux/unistd.h>
39 #include <linux/types.h>
40 #include <linux/interrupt.h>
41 #include <linux/moduleparam.h>
43 #include <linux/slab.h>
44 #include <linux/errno.h>
45 #include <linux/string.h>
46 #include <linux/skbuff.h>
48 #include <linux/usb.h>
50 #include <net/bluetooth/bluetooth.h>
51 #include <net/bluetooth/hci_core.h>
55 #ifndef CONFIG_BT_HCIUSB_DEBUG
60 #ifndef CONFIG_BT_HCIUSB_ZERO_PACKET
61 #undef URB_ZERO_PACKET
62 #define URB_ZERO_PACKET 0
65 static int ignore = 0;
66 static int ignore_dga = 0;
67 static int ignore_csr = 0;
68 static int ignore_sniffer = 0;
69 static int disable_scofix = 0;
70 static int force_scofix = 0;
73 #ifdef CONFIG_BT_HCIUSB_SCO
79 static struct usb_driver hci_usb_driver;
81 static struct usb_device_id bluetooth_ids[] = {
82 /* Generic Bluetooth USB device */
83 { USB_DEVICE_INFO(HCI_DEV_CLASS, HCI_DEV_SUBCLASS, HCI_DEV_PROTOCOL) },
85 /* AVM BlueFRITZ! USB v2.0 */
86 { USB_DEVICE(0x057c, 0x3800) },
88 /* Bluetooth Ultraport Module from IBM */
89 { USB_DEVICE(0x04bf, 0x030a) },
91 /* ALPS Modules with non-standard id */
92 { USB_DEVICE(0x044e, 0x3001) },
93 { USB_DEVICE(0x044e, 0x3002) },
95 /* Ericsson with non-standard id */
96 { USB_DEVICE(0x0bdb, 0x1002) },
98 /* Canyon CN-BTU1 with HID interfaces */
99 { USB_DEVICE(0x0c10, 0x0000), .driver_info = HCI_RESET },
101 { } /* Terminating entry */
104 MODULE_DEVICE_TABLE (usb, bluetooth_ids);
106 static struct usb_device_id blacklist_ids[] = {
107 /* CSR BlueCore devices */
108 { USB_DEVICE(0x0a12, 0x0001), .driver_info = HCI_CSR },
110 /* Broadcom BCM2033 without firmware */
111 { USB_DEVICE(0x0a5c, 0x2033), .driver_info = HCI_IGNORE },
113 /* Broadcom BCM2035 */
114 { USB_DEVICE(0x0a5c, 0x2035), .driver_info = HCI_RESET | HCI_WRONG_SCO_MTU },
115 { USB_DEVICE(0x0a5c, 0x200a), .driver_info = HCI_RESET | HCI_WRONG_SCO_MTU },
116 { USB_DEVICE(0x0a5c, 0x2009), .driver_info = HCI_BCM92035 },
118 /* Broadcom BCM2045 */
119 { USB_DEVICE(0x0a5c, 0x2101), .driver_info = HCI_RESET | HCI_WRONG_SCO_MTU },
121 /* IBM/Lenovo ThinkPad with Broadcom chip */
122 { USB_DEVICE(0x0a5c, 0x201e), .driver_info = HCI_RESET | HCI_WRONG_SCO_MTU },
123 { USB_DEVICE(0x0a5c, 0x2110), .driver_info = HCI_RESET | HCI_WRONG_SCO_MTU },
126 { USB_DEVICE(0x0a5c, 0x2100), .driver_info = HCI_RESET },
128 /* ANYCOM Bluetooth USB-200 and USB-250 */
129 { USB_DEVICE(0x0a5c, 0x2111), .driver_info = HCI_RESET },
131 /* HP laptop with Broadcom chip */
132 { USB_DEVICE(0x03f0, 0x171d), .driver_info = HCI_RESET | HCI_WRONG_SCO_MTU },
134 /* Dell laptop with Broadcom chip */
135 { USB_DEVICE(0x413c, 0x8126), .driver_info = HCI_RESET | HCI_WRONG_SCO_MTU },
137 /* Microsoft Wireless Transceiver for Bluetooth 2.0 */
138 { USB_DEVICE(0x045e, 0x009c), .driver_info = HCI_RESET },
140 /* Kensington Bluetooth USB adapter */
141 { USB_DEVICE(0x047d, 0x105d), .driver_info = HCI_RESET },
142 { USB_DEVICE(0x047d, 0x105e), .driver_info = HCI_RESET | HCI_WRONG_SCO_MTU },
144 /* ISSC Bluetooth Adapter v3.1 */
145 { USB_DEVICE(0x1131, 0x1001), .driver_info = HCI_RESET },
147 /* RTX Telecom based adapters with buggy SCO support */
148 { USB_DEVICE(0x0400, 0x0807), .driver_info = HCI_BROKEN_ISOC },
149 { USB_DEVICE(0x0400, 0x080a), .driver_info = HCI_BROKEN_ISOC },
151 /* CONWISE Technology based adapters with buggy SCO support */
152 { USB_DEVICE(0x0e5e, 0x6622), .driver_info = HCI_BROKEN_ISOC },
154 /* Belkin F8T012 and F8T013 devices */
155 { USB_DEVICE(0x050d, 0x0012), .driver_info = HCI_RESET | HCI_WRONG_SCO_MTU },
156 { USB_DEVICE(0x050d, 0x0013), .driver_info = HCI_RESET | HCI_WRONG_SCO_MTU },
158 /* Digianswer devices */
159 { USB_DEVICE(0x08fd, 0x0001), .driver_info = HCI_DIGIANSWER },
160 { USB_DEVICE(0x08fd, 0x0002), .driver_info = HCI_IGNORE },
162 /* CSR BlueCore Bluetooth Sniffer */
163 { USB_DEVICE(0x0a12, 0x0002), .driver_info = HCI_SNIFFER },
165 /* Frontline ComProbe Bluetooth Sniffer */
166 { USB_DEVICE(0x16d3, 0x0002), .driver_info = HCI_SNIFFER },
168 { } /* Terminating entry */
171 static struct _urb *_urb_alloc(int isoc, gfp_t gfp)
173 struct _urb *_urb = kmalloc(sizeof(struct _urb) +
174 sizeof(struct usb_iso_packet_descriptor) * isoc, gfp);
176 memset(_urb, 0, sizeof(*_urb));
177 usb_init_urb(&_urb->urb);
182 static struct _urb *_urb_dequeue(struct _urb_queue *q)
184 struct _urb *_urb = NULL;
186 spin_lock_irqsave(&q->lock, flags);
188 struct list_head *head = &q->head;
189 struct list_head *next = head->next;
191 _urb = list_entry(next, struct _urb, list);
192 list_del(next); _urb->queue = NULL;
195 spin_unlock_irqrestore(&q->lock, flags);
199 static void hci_usb_rx_complete(struct urb *urb);
200 static void hci_usb_tx_complete(struct urb *urb);
202 #define __pending_tx(husb, type) (&husb->pending_tx[type-1])
203 #define __pending_q(husb, type) (&husb->pending_q[type-1])
204 #define __completed_q(husb, type) (&husb->completed_q[type-1])
205 #define __transmit_q(husb, type) (&husb->transmit_q[type-1])
207 static inline struct _urb *__get_completed(struct hci_usb *husb, int type)
209 return _urb_dequeue(__completed_q(husb, type));
212 #ifdef CONFIG_BT_HCIUSB_SCO
213 static void __fill_isoc_desc(struct urb *urb, int len, int mtu)
217 BT_DBG("len %d mtu %d", len, mtu);
219 for (i=0; i < HCI_MAX_ISOC_FRAMES && len >= mtu; i++, offset += mtu, len -= mtu) {
220 urb->iso_frame_desc[i].offset = offset;
221 urb->iso_frame_desc[i].length = mtu;
222 BT_DBG("desc %d offset %d len %d", i, offset, mtu);
224 if (len && i < HCI_MAX_ISOC_FRAMES) {
225 urb->iso_frame_desc[i].offset = offset;
226 urb->iso_frame_desc[i].length = len;
227 BT_DBG("desc %d offset %d len %d", i, offset, len);
230 urb->number_of_packets = i;
234 static int hci_usb_intr_rx_submit(struct hci_usb *husb)
238 int err, pipe, interval, size;
241 BT_DBG("%s", husb->hdev->name);
243 size = le16_to_cpu(husb->intr_in_ep->desc.wMaxPacketSize);
245 buf = kmalloc(size, GFP_ATOMIC);
249 _urb = _urb_alloc(0, GFP_ATOMIC);
254 _urb->type = HCI_EVENT_PKT;
255 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
258 pipe = usb_rcvintpipe(husb->udev, husb->intr_in_ep->desc.bEndpointAddress);
259 interval = husb->intr_in_ep->desc.bInterval;
260 usb_fill_int_urb(urb, husb->udev, pipe, buf, size, hci_usb_rx_complete, husb, interval);
262 err = usb_submit_urb(urb, GFP_ATOMIC);
264 BT_ERR("%s intr rx submit failed urb %p err %d",
265 husb->hdev->name, urb, err);
273 static int hci_usb_bulk_rx_submit(struct hci_usb *husb)
277 int err, pipe, size = HCI_MAX_FRAME_SIZE;
280 buf = kmalloc(size, GFP_ATOMIC);
284 _urb = _urb_alloc(0, GFP_ATOMIC);
289 _urb->type = HCI_ACLDATA_PKT;
290 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
293 pipe = usb_rcvbulkpipe(husb->udev, husb->bulk_in_ep->desc.bEndpointAddress);
294 usb_fill_bulk_urb(urb, husb->udev, pipe, buf, size, hci_usb_rx_complete, husb);
295 urb->transfer_flags = 0;
297 BT_DBG("%s urb %p", husb->hdev->name, urb);
299 err = usb_submit_urb(urb, GFP_ATOMIC);
301 BT_ERR("%s bulk rx submit failed urb %p err %d",
302 husb->hdev->name, urb, err);
310 #ifdef CONFIG_BT_HCIUSB_SCO
311 static int hci_usb_isoc_rx_submit(struct hci_usb *husb)
318 mtu = le16_to_cpu(husb->isoc_in_ep->desc.wMaxPacketSize);
319 size = mtu * HCI_MAX_ISOC_FRAMES;
321 buf = kmalloc(size, GFP_ATOMIC);
325 _urb = _urb_alloc(HCI_MAX_ISOC_FRAMES, GFP_ATOMIC);
330 _urb->type = HCI_SCODATA_PKT;
331 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
336 urb->dev = husb->udev;
337 urb->pipe = usb_rcvisocpipe(husb->udev, husb->isoc_in_ep->desc.bEndpointAddress);
338 urb->complete = hci_usb_rx_complete;
340 urb->interval = husb->isoc_in_ep->desc.bInterval;
342 urb->transfer_buffer_length = size;
343 urb->transfer_buffer = buf;
344 urb->transfer_flags = URB_ISO_ASAP;
346 __fill_isoc_desc(urb, size, mtu);
348 BT_DBG("%s urb %p", husb->hdev->name, urb);
350 err = usb_submit_urb(urb, GFP_ATOMIC);
352 BT_ERR("%s isoc rx submit failed urb %p err %d",
353 husb->hdev->name, urb, err);
362 /* Initialize device */
363 static int hci_usb_open(struct hci_dev *hdev)
365 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
369 BT_DBG("%s", hdev->name);
371 if (test_and_set_bit(HCI_RUNNING, &hdev->flags))
374 write_lock_irqsave(&husb->completion_lock, flags);
376 err = hci_usb_intr_rx_submit(husb);
378 for (i = 0; i < HCI_MAX_BULK_RX; i++)
379 hci_usb_bulk_rx_submit(husb);
381 #ifdef CONFIG_BT_HCIUSB_SCO
382 if (husb->isoc_iface)
383 for (i = 0; i < HCI_MAX_ISOC_RX; i++)
384 hci_usb_isoc_rx_submit(husb);
387 clear_bit(HCI_RUNNING, &hdev->flags);
390 write_unlock_irqrestore(&husb->completion_lock, flags);
395 static int hci_usb_flush(struct hci_dev *hdev)
397 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
400 BT_DBG("%s", hdev->name);
402 for (i = 0; i < 4; i++)
403 skb_queue_purge(&husb->transmit_q[i]);
407 static void hci_usb_unlink_urbs(struct hci_usb *husb)
411 BT_DBG("%s", husb->hdev->name);
413 for (i = 0; i < 4; i++) {
417 /* Kill pending requests */
418 while ((_urb = _urb_dequeue(&husb->pending_q[i]))) {
420 BT_DBG("%s unlinking _urb %p type %d urb %p",
421 husb->hdev->name, _urb, _urb->type, urb);
423 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
426 /* Release completed requests */
427 while ((_urb = _urb_dequeue(&husb->completed_q[i]))) {
429 BT_DBG("%s freeing _urb %p type %d urb %p",
430 husb->hdev->name, _urb, _urb->type, urb);
431 kfree(urb->setup_packet);
432 kfree(urb->transfer_buffer);
439 static int hci_usb_close(struct hci_dev *hdev)
441 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
444 if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags))
447 BT_DBG("%s", hdev->name);
449 /* Synchronize with completion handlers */
450 write_lock_irqsave(&husb->completion_lock, flags);
451 write_unlock_irqrestore(&husb->completion_lock, flags);
453 hci_usb_unlink_urbs(husb);
458 static int __tx_submit(struct hci_usb *husb, struct _urb *_urb)
460 struct urb *urb = &_urb->urb;
463 BT_DBG("%s urb %p type %d", husb->hdev->name, urb, _urb->type);
465 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
466 err = usb_submit_urb(urb, GFP_ATOMIC);
468 BT_ERR("%s tx submit failed urb %p type %d err %d",
469 husb->hdev->name, urb, _urb->type, err);
471 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
473 atomic_inc(__pending_tx(husb, _urb->type));
478 static inline int hci_usb_send_ctrl(struct hci_usb *husb, struct sk_buff *skb)
480 struct _urb *_urb = __get_completed(husb, bt_cb(skb)->pkt_type);
481 struct usb_ctrlrequest *dr;
485 _urb = _urb_alloc(0, GFP_ATOMIC);
488 _urb->type = bt_cb(skb)->pkt_type;
490 dr = kmalloc(sizeof(*dr), GFP_ATOMIC);
496 dr = (void *) _urb->urb.setup_packet;
498 dr->bRequestType = husb->ctrl_req;
502 dr->wLength = __cpu_to_le16(skb->len);
505 usb_fill_control_urb(urb, husb->udev, usb_sndctrlpipe(husb->udev, 0),
506 (void *) dr, skb->data, skb->len, hci_usb_tx_complete, husb);
508 BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
511 return __tx_submit(husb, _urb);
514 static inline int hci_usb_send_bulk(struct hci_usb *husb, struct sk_buff *skb)
516 struct _urb *_urb = __get_completed(husb, bt_cb(skb)->pkt_type);
521 _urb = _urb_alloc(0, GFP_ATOMIC);
524 _urb->type = bt_cb(skb)->pkt_type;
528 pipe = usb_sndbulkpipe(husb->udev, husb->bulk_out_ep->desc.bEndpointAddress);
529 usb_fill_bulk_urb(urb, husb->udev, pipe, skb->data, skb->len,
530 hci_usb_tx_complete, husb);
531 urb->transfer_flags = URB_ZERO_PACKET;
533 BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
536 return __tx_submit(husb, _urb);
539 #ifdef CONFIG_BT_HCIUSB_SCO
540 static inline int hci_usb_send_isoc(struct hci_usb *husb, struct sk_buff *skb)
542 struct _urb *_urb = __get_completed(husb, bt_cb(skb)->pkt_type);
546 _urb = _urb_alloc(HCI_MAX_ISOC_FRAMES, GFP_ATOMIC);
549 _urb->type = bt_cb(skb)->pkt_type;
552 BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
557 urb->dev = husb->udev;
558 urb->pipe = usb_sndisocpipe(husb->udev, husb->isoc_out_ep->desc.bEndpointAddress);
559 urb->complete = hci_usb_tx_complete;
560 urb->transfer_flags = URB_ISO_ASAP;
562 urb->interval = husb->isoc_out_ep->desc.bInterval;
564 urb->transfer_buffer = skb->data;
565 urb->transfer_buffer_length = skb->len;
567 __fill_isoc_desc(urb, skb->len, le16_to_cpu(husb->isoc_out_ep->desc.wMaxPacketSize));
570 return __tx_submit(husb, _urb);
574 static void hci_usb_tx_process(struct hci_usb *husb)
576 struct sk_buff_head *q;
579 BT_DBG("%s", husb->hdev->name);
582 clear_bit(HCI_USB_TX_WAKEUP, &husb->state);
584 /* Process command queue */
585 q = __transmit_q(husb, HCI_COMMAND_PKT);
586 if (!atomic_read(__pending_tx(husb, HCI_COMMAND_PKT)) &&
587 (skb = skb_dequeue(q))) {
588 if (hci_usb_send_ctrl(husb, skb) < 0)
589 skb_queue_head(q, skb);
592 #ifdef CONFIG_BT_HCIUSB_SCO
593 /* Process SCO queue */
594 q = __transmit_q(husb, HCI_SCODATA_PKT);
595 if (atomic_read(__pending_tx(husb, HCI_SCODATA_PKT)) < HCI_MAX_ISOC_TX &&
596 (skb = skb_dequeue(q))) {
597 if (hci_usb_send_isoc(husb, skb) < 0)
598 skb_queue_head(q, skb);
602 /* Process ACL queue */
603 q = __transmit_q(husb, HCI_ACLDATA_PKT);
604 while (atomic_read(__pending_tx(husb, HCI_ACLDATA_PKT)) < HCI_MAX_BULK_TX &&
605 (skb = skb_dequeue(q))) {
606 if (hci_usb_send_bulk(husb, skb) < 0) {
607 skb_queue_head(q, skb);
611 } while(test_bit(HCI_USB_TX_WAKEUP, &husb->state));
614 static inline void hci_usb_tx_wakeup(struct hci_usb *husb)
616 /* Serialize TX queue processing to avoid data reordering */
617 if (!test_and_set_bit(HCI_USB_TX_PROCESS, &husb->state)) {
618 hci_usb_tx_process(husb);
619 clear_bit(HCI_USB_TX_PROCESS, &husb->state);
621 set_bit(HCI_USB_TX_WAKEUP, &husb->state);
624 /* Send frames from HCI layer */
625 static int hci_usb_send_frame(struct sk_buff *skb)
627 struct hci_dev *hdev = (struct hci_dev *) skb->dev;
628 struct hci_usb *husb;
631 BT_ERR("frame for uknown device (hdev=NULL)");
635 if (!test_bit(HCI_RUNNING, &hdev->flags))
638 BT_DBG("%s type %d len %d", hdev->name, bt_cb(skb)->pkt_type, skb->len);
640 husb = (struct hci_usb *) hdev->driver_data;
642 switch (bt_cb(skb)->pkt_type) {
643 case HCI_COMMAND_PKT:
647 case HCI_ACLDATA_PKT:
651 #ifdef CONFIG_BT_HCIUSB_SCO
652 case HCI_SCODATA_PKT:
662 read_lock(&husb->completion_lock);
664 skb_queue_tail(__transmit_q(husb, bt_cb(skb)->pkt_type), skb);
665 hci_usb_tx_wakeup(husb);
667 read_unlock(&husb->completion_lock);
671 static void hci_usb_rx_complete(struct urb *urb)
673 struct _urb *_urb = container_of(urb, struct _urb, urb);
674 struct hci_usb *husb = (void *) urb->context;
675 struct hci_dev *hdev = husb->hdev;
676 int err, count = urb->actual_length;
678 BT_DBG("%s urb %p type %d status %d count %d flags %x", hdev->name, urb,
679 _urb->type, urb->status, count, urb->transfer_flags);
681 read_lock(&husb->completion_lock);
683 if (!test_bit(HCI_RUNNING, &hdev->flags))
686 if (urb->status || !count)
689 if (_urb->type == HCI_SCODATA_PKT) {
690 #ifdef CONFIG_BT_HCIUSB_SCO
692 for (i=0; i < urb->number_of_packets; i++) {
693 BT_DBG("desc %d status %d offset %d len %d", i,
694 urb->iso_frame_desc[i].status,
695 urb->iso_frame_desc[i].offset,
696 urb->iso_frame_desc[i].actual_length);
698 if (!urb->iso_frame_desc[i].status) {
699 husb->hdev->stat.byte_rx += urb->iso_frame_desc[i].actual_length;
700 hci_recv_fragment(husb->hdev, _urb->type,
701 urb->transfer_buffer + urb->iso_frame_desc[i].offset,
702 urb->iso_frame_desc[i].actual_length);
709 husb->hdev->stat.byte_rx += count;
710 err = hci_recv_fragment(husb->hdev, _urb->type, urb->transfer_buffer, count);
712 BT_ERR("%s corrupted packet: type %d count %d",
713 husb->hdev->name, _urb->type, count);
719 urb->dev = husb->udev;
720 err = usb_submit_urb(urb, GFP_ATOMIC);
721 BT_DBG("%s urb %p type %d resubmit status %d", hdev->name, urb,
725 read_unlock(&husb->completion_lock);
728 static void hci_usb_tx_complete(struct urb *urb)
730 struct _urb *_urb = container_of(urb, struct _urb, urb);
731 struct hci_usb *husb = (void *) urb->context;
732 struct hci_dev *hdev = husb->hdev;
734 BT_DBG("%s urb %p status %d flags %x", hdev->name, urb,
735 urb->status, urb->transfer_flags);
737 atomic_dec(__pending_tx(husb, _urb->type));
739 urb->transfer_buffer = NULL;
740 kfree_skb((struct sk_buff *) _urb->priv);
742 if (!test_bit(HCI_RUNNING, &hdev->flags))
746 hdev->stat.byte_tx += urb->transfer_buffer_length;
750 read_lock(&husb->completion_lock);
753 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
755 hci_usb_tx_wakeup(husb);
757 read_unlock(&husb->completion_lock);
760 static void hci_usb_destruct(struct hci_dev *hdev)
762 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
764 BT_DBG("%s", hdev->name);
769 static void hci_usb_notify(struct hci_dev *hdev, unsigned int evt)
771 BT_DBG("%s evt %d", hdev->name, evt);
774 static int hci_usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
776 struct usb_device *udev = interface_to_usbdev(intf);
777 struct usb_host_endpoint *bulk_out_ep = NULL;
778 struct usb_host_endpoint *bulk_in_ep = NULL;
779 struct usb_host_endpoint *intr_in_ep = NULL;
780 struct usb_host_endpoint *ep;
781 struct usb_host_interface *uif;
782 struct usb_interface *isoc_iface;
783 struct hci_usb *husb;
784 struct hci_dev *hdev;
785 int i, e, size, isoc_ifnum, isoc_alts;
787 BT_DBG("udev %p intf %p", udev, intf);
789 if (!id->driver_info) {
790 const struct usb_device_id *match;
791 match = usb_match_id(intf, blacklist_ids);
796 if (ignore || id->driver_info & HCI_IGNORE)
799 if (ignore_dga && id->driver_info & HCI_DIGIANSWER)
802 if (ignore_csr && id->driver_info & HCI_CSR)
805 if (ignore_sniffer && id->driver_info & HCI_SNIFFER)
808 if (intf->cur_altsetting->desc.bInterfaceNumber > 0)
811 /* Find endpoints that we need */
812 uif = intf->cur_altsetting;
813 for (e = 0; e < uif->desc.bNumEndpoints; e++) {
814 ep = &uif->endpoint[e];
816 switch (ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
817 case USB_ENDPOINT_XFER_INT:
818 if (ep->desc.bEndpointAddress & USB_DIR_IN)
822 case USB_ENDPOINT_XFER_BULK:
823 if (ep->desc.bEndpointAddress & USB_DIR_IN)
831 if (!bulk_in_ep || !bulk_out_ep || !intr_in_ep) {
832 BT_DBG("Bulk endpoints not found");
836 if (!(husb = kzalloc(sizeof(struct hci_usb), GFP_KERNEL))) {
837 BT_ERR("Can't allocate: control structure");
842 husb->bulk_out_ep = bulk_out_ep;
843 husb->bulk_in_ep = bulk_in_ep;
844 husb->intr_in_ep = intr_in_ep;
846 if (id->driver_info & HCI_DIGIANSWER)
847 husb->ctrl_req = USB_TYPE_VENDOR;
849 husb->ctrl_req = USB_TYPE_CLASS;
851 /* Find isochronous endpoints that we can use */
857 #ifdef CONFIG_BT_HCIUSB_SCO
858 if (isoc && !(id->driver_info & (HCI_BROKEN_ISOC | HCI_SNIFFER)))
859 isoc_iface = usb_ifnum_to_if(udev, isoc_ifnum);
863 struct usb_host_endpoint *isoc_out_ep = NULL;
864 struct usb_host_endpoint *isoc_in_ep = NULL;
866 for (a = 0; a < isoc_iface->num_altsetting; a++) {
867 uif = &isoc_iface->altsetting[a];
868 for (e = 0; e < uif->desc.bNumEndpoints; e++) {
869 ep = &uif->endpoint[e];
871 switch (ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
872 case USB_ENDPOINT_XFER_ISOC:
873 if (le16_to_cpu(ep->desc.wMaxPacketSize) < size ||
874 uif->desc.bAlternateSetting != isoc)
876 size = le16_to_cpu(ep->desc.wMaxPacketSize);
878 isoc_alts = uif->desc.bAlternateSetting;
880 if (ep->desc.bEndpointAddress & USB_DIR_IN)
889 if (!isoc_in_ep || !isoc_out_ep)
890 BT_DBG("Isoc endpoints not found");
892 BT_DBG("isoc ifnum %d alts %d", isoc_ifnum, isoc_alts);
893 if (usb_driver_claim_interface(&hci_usb_driver, isoc_iface, husb) != 0)
894 BT_ERR("Can't claim isoc interface");
895 else if (usb_set_interface(udev, isoc_ifnum, isoc_alts)) {
896 BT_ERR("Can't set isoc interface settings");
897 husb->isoc_iface = isoc_iface;
898 usb_driver_release_interface(&hci_usb_driver, isoc_iface);
899 husb->isoc_iface = NULL;
901 husb->isoc_iface = isoc_iface;
902 husb->isoc_in_ep = isoc_in_ep;
903 husb->isoc_out_ep = isoc_out_ep;
909 rwlock_init(&husb->completion_lock);
911 for (i = 0; i < 4; i++) {
912 skb_queue_head_init(&husb->transmit_q[i]);
913 _urb_queue_init(&husb->pending_q[i]);
914 _urb_queue_init(&husb->completed_q[i]);
917 /* Initialize and register HCI device */
918 hdev = hci_alloc_dev();
920 BT_ERR("Can't allocate HCI device");
926 hdev->type = HCI_USB;
927 hdev->driver_data = husb;
928 SET_HCIDEV_DEV(hdev, &intf->dev);
930 hdev->open = hci_usb_open;
931 hdev->close = hci_usb_close;
932 hdev->flush = hci_usb_flush;
933 hdev->send = hci_usb_send_frame;
934 hdev->destruct = hci_usb_destruct;
935 hdev->notify = hci_usb_notify;
937 hdev->owner = THIS_MODULE;
939 if (reset || id->driver_info & HCI_RESET)
940 set_bit(HCI_QUIRK_RESET_ON_INIT, &hdev->quirks);
942 if (force_scofix || id->driver_info & HCI_WRONG_SCO_MTU) {
944 set_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks);
947 if (id->driver_info & HCI_SNIFFER) {
948 if (le16_to_cpu(udev->descriptor.bcdDevice) > 0x997)
949 set_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks);
952 if (id->driver_info & HCI_BCM92035) {
953 unsigned char cmd[] = { 0x3b, 0xfc, 0x01, 0x00 };
956 skb = bt_skb_alloc(sizeof(cmd), GFP_KERNEL);
958 memcpy(skb_put(skb, sizeof(cmd)), cmd, sizeof(cmd));
959 skb_queue_tail(&hdev->driver_init, skb);
963 if (hci_register_dev(hdev) < 0) {
964 BT_ERR("Can't register HCI device");
969 usb_set_intfdata(intf, husb);
973 if (husb->isoc_iface)
974 usb_driver_release_interface(&hci_usb_driver, husb->isoc_iface);
981 static void hci_usb_disconnect(struct usb_interface *intf)
983 struct hci_usb *husb = usb_get_intfdata(intf);
984 struct hci_dev *hdev;
986 if (!husb || intf == husb->isoc_iface)
989 usb_set_intfdata(intf, NULL);
992 BT_DBG("%s", hdev->name);
996 if (husb->isoc_iface)
997 usb_driver_release_interface(&hci_usb_driver, husb->isoc_iface);
999 if (hci_unregister_dev(hdev) < 0)
1000 BT_ERR("Can't unregister HCI device %s", hdev->name);
1005 static int hci_usb_suspend(struct usb_interface *intf, pm_message_t message)
1007 struct hci_usb *husb = usb_get_intfdata(intf);
1008 struct list_head killed;
1009 unsigned long flags;
1012 if (!husb || intf == husb->isoc_iface)
1015 hci_suspend_dev(husb->hdev);
1017 INIT_LIST_HEAD(&killed);
1019 for (i = 0; i < 4; i++) {
1020 struct _urb_queue *q = &husb->pending_q[i];
1021 struct _urb *_urb, *_tmp;
1023 while ((_urb = _urb_dequeue(q))) {
1024 /* reset queue since _urb_dequeue sets it to NULL */
1026 usb_kill_urb(&_urb->urb);
1027 list_add(&_urb->list, &killed);
1030 spin_lock_irqsave(&q->lock, flags);
1032 list_for_each_entry_safe(_urb, _tmp, &killed, list) {
1033 list_move_tail(&_urb->list, &q->head);
1036 spin_unlock_irqrestore(&q->lock, flags);
1042 static int hci_usb_resume(struct usb_interface *intf)
1044 struct hci_usb *husb = usb_get_intfdata(intf);
1045 unsigned long flags;
1048 if (!husb || intf == husb->isoc_iface)
1051 for (i = 0; i < 4; i++) {
1052 struct _urb_queue *q = &husb->pending_q[i];
1055 spin_lock_irqsave(&q->lock, flags);
1057 list_for_each_entry(_urb, &q->head, list) {
1058 err = usb_submit_urb(&_urb->urb, GFP_ATOMIC);
1063 spin_unlock_irqrestore(&q->lock, flags);
1069 hci_resume_dev(husb->hdev);
1074 static struct usb_driver hci_usb_driver = {
1076 .probe = hci_usb_probe,
1077 .disconnect = hci_usb_disconnect,
1078 .suspend = hci_usb_suspend,
1079 .resume = hci_usb_resume,
1080 .id_table = bluetooth_ids,
1083 static int __init hci_usb_init(void)
1087 BT_INFO("HCI USB driver ver %s", VERSION);
1089 if ((err = usb_register(&hci_usb_driver)) < 0)
1090 BT_ERR("Failed to register HCI USB driver");
1095 static void __exit hci_usb_exit(void)
1097 usb_deregister(&hci_usb_driver);
1100 module_init(hci_usb_init);
1101 module_exit(hci_usb_exit);
1103 module_param(ignore, bool, 0644);
1104 MODULE_PARM_DESC(ignore, "Ignore devices from the matching table");
1106 module_param(ignore_dga, bool, 0644);
1107 MODULE_PARM_DESC(ignore_dga, "Ignore devices with id 08fd:0001");
1109 module_param(ignore_csr, bool, 0644);
1110 MODULE_PARM_DESC(ignore_csr, "Ignore devices with id 0a12:0001");
1112 module_param(ignore_sniffer, bool, 0644);
1113 MODULE_PARM_DESC(ignore_sniffer, "Ignore devices with id 0a12:0002");
1115 module_param(disable_scofix, bool, 0644);
1116 MODULE_PARM_DESC(disable_scofix, "Disable fixup of wrong SCO buffer size");
1118 module_param(force_scofix, bool, 0644);
1119 MODULE_PARM_DESC(force_scofix, "Force fixup of wrong SCO buffers size");
1121 module_param(reset, bool, 0644);
1122 MODULE_PARM_DESC(reset, "Send HCI reset command on initialization");
1124 #ifdef CONFIG_BT_HCIUSB_SCO
1125 module_param(isoc, int, 0644);
1126 MODULE_PARM_DESC(isoc, "Set isochronous transfers for SCO over HCI support");
1129 MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>, Marcel Holtmann <marcel@holtmann.org>");
1130 MODULE_DESCRIPTION("Bluetooth HCI USB driver ver " VERSION);
1131 MODULE_VERSION(VERSION);
1132 MODULE_LICENSE("GPL");