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/sched.h>
39 #include <linux/unistd.h>
40 #include <linux/types.h>
41 #include <linux/interrupt.h>
42 #include <linux/moduleparam.h>
44 #include <linux/slab.h>
45 #include <linux/errno.h>
46 #include <linux/string.h>
47 #include <linux/skbuff.h>
49 #include <linux/usb.h>
51 #include <net/bluetooth/bluetooth.h>
52 #include <net/bluetooth/hci_core.h>
56 #ifndef CONFIG_BT_HCIUSB_DEBUG
61 #ifndef CONFIG_BT_HCIUSB_ZERO_PACKET
62 #undef URB_ZERO_PACKET
63 #define URB_ZERO_PACKET 0
66 static int ignore = 0;
67 static int ignore_dga = 0;
68 static int ignore_csr = 0;
69 static int ignore_sniffer = 0;
70 static int disable_scofix = 0;
71 static int force_scofix = 0;
74 #ifdef CONFIG_BT_HCIUSB_SCO
80 static struct usb_driver hci_usb_driver;
82 static struct usb_device_id bluetooth_ids[] = {
83 /* Generic Bluetooth USB device */
84 { USB_DEVICE_INFO(HCI_DEV_CLASS, HCI_DEV_SUBCLASS, HCI_DEV_PROTOCOL) },
86 /* AVM BlueFRITZ! USB v2.0 */
87 { USB_DEVICE(0x057c, 0x3800) },
89 /* Bluetooth Ultraport Module from IBM */
90 { USB_DEVICE(0x04bf, 0x030a) },
92 /* ALPS Modules with non-standard id */
93 { USB_DEVICE(0x044e, 0x3001) },
94 { USB_DEVICE(0x044e, 0x3002) },
96 /* Ericsson with non-standard id */
97 { USB_DEVICE(0x0bdb, 0x1002) },
99 /* Canyon CN-BTU1 with HID interfaces */
100 { USB_DEVICE(0x0c10, 0x0000), .driver_info = HCI_RESET },
102 { } /* Terminating entry */
105 MODULE_DEVICE_TABLE (usb, bluetooth_ids);
107 static struct usb_device_id blacklist_ids[] = {
108 /* CSR BlueCore devices */
109 { USB_DEVICE(0x0a12, 0x0001), .driver_info = HCI_CSR },
111 /* Broadcom BCM2033 without firmware */
112 { USB_DEVICE(0x0a5c, 0x2033), .driver_info = HCI_IGNORE },
114 /* Broadcom BCM2035 */
115 { USB_DEVICE(0x0a5c, 0x200a), .driver_info = HCI_RESET | HCI_WRONG_SCO_MTU },
116 { USB_DEVICE(0x0a5c, 0x2009), .driver_info = HCI_BCM92035 },
118 /* IBM/Lenovo ThinkPad with Broadcom chip */
119 { USB_DEVICE(0x0a5c, 0x201e), .driver_info = HCI_WRONG_SCO_MTU },
120 { USB_DEVICE(0x0a5c, 0x2110), .driver_info = HCI_WRONG_SCO_MTU },
122 /* ANYCOM Bluetooth USB-200 and USB-250 */
123 { USB_DEVICE(0x0a5c, 0x2111), .driver_info = HCI_RESET },
125 /* HP laptop with Broadcom chip */
126 { USB_DEVICE(0x03f0, 0x171d), .driver_info = HCI_WRONG_SCO_MTU },
128 /* Microsoft Wireless Transceiver for Bluetooth 2.0 */
129 { USB_DEVICE(0x045e, 0x009c), .driver_info = HCI_RESET },
131 /* Kensington Bluetooth USB adapter */
132 { USB_DEVICE(0x047d, 0x105d), .driver_info = HCI_RESET },
133 { USB_DEVICE(0x047d, 0x105e), .driver_info = HCI_WRONG_SCO_MTU },
135 /* ISSC Bluetooth Adapter v3.1 */
136 { USB_DEVICE(0x1131, 0x1001), .driver_info = HCI_RESET },
138 /* RTX Telecom based adapters with buggy SCO support */
139 { USB_DEVICE(0x0400, 0x0807), .driver_info = HCI_BROKEN_ISOC },
140 { USB_DEVICE(0x0400, 0x080a), .driver_info = HCI_BROKEN_ISOC },
142 /* Belkin F8T012 and F8T013 devices */
143 { USB_DEVICE(0x050d, 0x0012), .driver_info = HCI_WRONG_SCO_MTU },
144 { USB_DEVICE(0x050d, 0x0013), .driver_info = HCI_WRONG_SCO_MTU },
146 /* Digianswer devices */
147 { USB_DEVICE(0x08fd, 0x0001), .driver_info = HCI_DIGIANSWER },
148 { USB_DEVICE(0x08fd, 0x0002), .driver_info = HCI_IGNORE },
150 /* CSR BlueCore Bluetooth Sniffer */
151 { USB_DEVICE(0x0a12, 0x0002), .driver_info = HCI_SNIFFER },
153 /* Frontline ComProbe Bluetooth Sniffer */
154 { USB_DEVICE(0x16d3, 0x0002), .driver_info = HCI_SNIFFER },
156 { } /* Terminating entry */
159 static struct _urb *_urb_alloc(int isoc, gfp_t gfp)
161 struct _urb *_urb = kmalloc(sizeof(struct _urb) +
162 sizeof(struct usb_iso_packet_descriptor) * isoc, gfp);
164 memset(_urb, 0, sizeof(*_urb));
165 usb_init_urb(&_urb->urb);
170 static struct _urb *_urb_dequeue(struct _urb_queue *q)
172 struct _urb *_urb = NULL;
174 spin_lock_irqsave(&q->lock, flags);
176 struct list_head *head = &q->head;
177 struct list_head *next = head->next;
179 _urb = list_entry(next, struct _urb, list);
180 list_del(next); _urb->queue = NULL;
183 spin_unlock_irqrestore(&q->lock, flags);
187 static void hci_usb_rx_complete(struct urb *urb);
188 static void hci_usb_tx_complete(struct urb *urb);
190 #define __pending_tx(husb, type) (&husb->pending_tx[type-1])
191 #define __pending_q(husb, type) (&husb->pending_q[type-1])
192 #define __completed_q(husb, type) (&husb->completed_q[type-1])
193 #define __transmit_q(husb, type) (&husb->transmit_q[type-1])
194 #define __reassembly(husb, type) (husb->reassembly[type-1])
196 static inline struct _urb *__get_completed(struct hci_usb *husb, int type)
198 return _urb_dequeue(__completed_q(husb, type));
201 #ifdef CONFIG_BT_HCIUSB_SCO
202 static void __fill_isoc_desc(struct urb *urb, int len, int mtu)
206 BT_DBG("len %d mtu %d", len, mtu);
208 for (i=0; i < HCI_MAX_ISOC_FRAMES && len >= mtu; i++, offset += mtu, len -= mtu) {
209 urb->iso_frame_desc[i].offset = offset;
210 urb->iso_frame_desc[i].length = mtu;
211 BT_DBG("desc %d offset %d len %d", i, offset, mtu);
213 if (len && i < HCI_MAX_ISOC_FRAMES) {
214 urb->iso_frame_desc[i].offset = offset;
215 urb->iso_frame_desc[i].length = len;
216 BT_DBG("desc %d offset %d len %d", i, offset, len);
219 urb->number_of_packets = i;
223 static int hci_usb_intr_rx_submit(struct hci_usb *husb)
227 int err, pipe, interval, size;
230 BT_DBG("%s", husb->hdev->name);
232 size = le16_to_cpu(husb->intr_in_ep->desc.wMaxPacketSize);
234 buf = kmalloc(size, GFP_ATOMIC);
238 _urb = _urb_alloc(0, GFP_ATOMIC);
243 _urb->type = HCI_EVENT_PKT;
244 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
247 pipe = usb_rcvintpipe(husb->udev, husb->intr_in_ep->desc.bEndpointAddress);
248 interval = husb->intr_in_ep->desc.bInterval;
249 usb_fill_int_urb(urb, husb->udev, pipe, buf, size, hci_usb_rx_complete, husb, interval);
251 err = usb_submit_urb(urb, GFP_ATOMIC);
253 BT_ERR("%s intr rx submit failed urb %p err %d",
254 husb->hdev->name, urb, err);
262 static int hci_usb_bulk_rx_submit(struct hci_usb *husb)
266 int err, pipe, size = HCI_MAX_FRAME_SIZE;
269 buf = kmalloc(size, GFP_ATOMIC);
273 _urb = _urb_alloc(0, GFP_ATOMIC);
278 _urb->type = HCI_ACLDATA_PKT;
279 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
282 pipe = usb_rcvbulkpipe(husb->udev, husb->bulk_in_ep->desc.bEndpointAddress);
283 usb_fill_bulk_urb(urb, husb->udev, pipe, buf, size, hci_usb_rx_complete, husb);
284 urb->transfer_flags = 0;
286 BT_DBG("%s urb %p", husb->hdev->name, urb);
288 err = usb_submit_urb(urb, GFP_ATOMIC);
290 BT_ERR("%s bulk rx submit failed urb %p err %d",
291 husb->hdev->name, urb, err);
299 #ifdef CONFIG_BT_HCIUSB_SCO
300 static int hci_usb_isoc_rx_submit(struct hci_usb *husb)
307 mtu = le16_to_cpu(husb->isoc_in_ep->desc.wMaxPacketSize);
308 size = mtu * HCI_MAX_ISOC_FRAMES;
310 buf = kmalloc(size, GFP_ATOMIC);
314 _urb = _urb_alloc(HCI_MAX_ISOC_FRAMES, GFP_ATOMIC);
319 _urb->type = HCI_SCODATA_PKT;
320 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
325 urb->dev = husb->udev;
326 urb->pipe = usb_rcvisocpipe(husb->udev, husb->isoc_in_ep->desc.bEndpointAddress);
327 urb->complete = hci_usb_rx_complete;
329 urb->interval = husb->isoc_in_ep->desc.bInterval;
331 urb->transfer_buffer_length = size;
332 urb->transfer_buffer = buf;
333 urb->transfer_flags = URB_ISO_ASAP;
335 __fill_isoc_desc(urb, size, mtu);
337 BT_DBG("%s urb %p", husb->hdev->name, urb);
339 err = usb_submit_urb(urb, GFP_ATOMIC);
341 BT_ERR("%s isoc rx submit failed urb %p err %d",
342 husb->hdev->name, urb, err);
351 /* Initialize device */
352 static int hci_usb_open(struct hci_dev *hdev)
354 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
358 BT_DBG("%s", hdev->name);
360 if (test_and_set_bit(HCI_RUNNING, &hdev->flags))
363 write_lock_irqsave(&husb->completion_lock, flags);
365 err = hci_usb_intr_rx_submit(husb);
367 for (i = 0; i < HCI_MAX_BULK_RX; i++)
368 hci_usb_bulk_rx_submit(husb);
370 #ifdef CONFIG_BT_HCIUSB_SCO
371 if (husb->isoc_iface)
372 for (i = 0; i < HCI_MAX_ISOC_RX; i++)
373 hci_usb_isoc_rx_submit(husb);
376 clear_bit(HCI_RUNNING, &hdev->flags);
379 write_unlock_irqrestore(&husb->completion_lock, flags);
384 static int hci_usb_flush(struct hci_dev *hdev)
386 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
389 BT_DBG("%s", hdev->name);
391 for (i = 0; i < 4; i++)
392 skb_queue_purge(&husb->transmit_q[i]);
396 static void hci_usb_unlink_urbs(struct hci_usb *husb)
400 BT_DBG("%s", husb->hdev->name);
402 for (i = 0; i < 4; i++) {
406 /* Kill pending requests */
407 while ((_urb = _urb_dequeue(&husb->pending_q[i]))) {
409 BT_DBG("%s unlinking _urb %p type %d urb %p",
410 husb->hdev->name, _urb, _urb->type, urb);
412 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
415 /* Release completed requests */
416 while ((_urb = _urb_dequeue(&husb->completed_q[i]))) {
418 BT_DBG("%s freeing _urb %p type %d urb %p",
419 husb->hdev->name, _urb, _urb->type, urb);
420 kfree(urb->setup_packet);
421 kfree(urb->transfer_buffer);
425 /* Release reassembly buffers */
426 if (husb->reassembly[i]) {
427 kfree_skb(husb->reassembly[i]);
428 husb->reassembly[i] = NULL;
434 static int hci_usb_close(struct hci_dev *hdev)
436 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
439 if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags))
442 BT_DBG("%s", hdev->name);
444 /* Synchronize with completion handlers */
445 write_lock_irqsave(&husb->completion_lock, flags);
446 write_unlock_irqrestore(&husb->completion_lock, flags);
448 hci_usb_unlink_urbs(husb);
453 static int __tx_submit(struct hci_usb *husb, struct _urb *_urb)
455 struct urb *urb = &_urb->urb;
458 BT_DBG("%s urb %p type %d", husb->hdev->name, urb, _urb->type);
460 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
461 err = usb_submit_urb(urb, GFP_ATOMIC);
463 BT_ERR("%s tx submit failed urb %p type %d err %d",
464 husb->hdev->name, urb, _urb->type, err);
466 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
468 atomic_inc(__pending_tx(husb, _urb->type));
473 static inline int hci_usb_send_ctrl(struct hci_usb *husb, struct sk_buff *skb)
475 struct _urb *_urb = __get_completed(husb, bt_cb(skb)->pkt_type);
476 struct usb_ctrlrequest *dr;
480 _urb = _urb_alloc(0, GFP_ATOMIC);
483 _urb->type = bt_cb(skb)->pkt_type;
485 dr = kmalloc(sizeof(*dr), GFP_ATOMIC);
491 dr = (void *) _urb->urb.setup_packet;
493 dr->bRequestType = husb->ctrl_req;
497 dr->wLength = __cpu_to_le16(skb->len);
500 usb_fill_control_urb(urb, husb->udev, usb_sndctrlpipe(husb->udev, 0),
501 (void *) dr, skb->data, skb->len, hci_usb_tx_complete, husb);
503 BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
506 return __tx_submit(husb, _urb);
509 static inline int hci_usb_send_bulk(struct hci_usb *husb, struct sk_buff *skb)
511 struct _urb *_urb = __get_completed(husb, bt_cb(skb)->pkt_type);
516 _urb = _urb_alloc(0, GFP_ATOMIC);
519 _urb->type = bt_cb(skb)->pkt_type;
523 pipe = usb_sndbulkpipe(husb->udev, husb->bulk_out_ep->desc.bEndpointAddress);
524 usb_fill_bulk_urb(urb, husb->udev, pipe, skb->data, skb->len,
525 hci_usb_tx_complete, husb);
526 urb->transfer_flags = URB_ZERO_PACKET;
528 BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
531 return __tx_submit(husb, _urb);
534 #ifdef CONFIG_BT_HCIUSB_SCO
535 static inline int hci_usb_send_isoc(struct hci_usb *husb, struct sk_buff *skb)
537 struct _urb *_urb = __get_completed(husb, bt_cb(skb)->pkt_type);
541 _urb = _urb_alloc(HCI_MAX_ISOC_FRAMES, GFP_ATOMIC);
544 _urb->type = bt_cb(skb)->pkt_type;
547 BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
552 urb->dev = husb->udev;
553 urb->pipe = usb_sndisocpipe(husb->udev, husb->isoc_out_ep->desc.bEndpointAddress);
554 urb->complete = hci_usb_tx_complete;
555 urb->transfer_flags = URB_ISO_ASAP;
557 urb->interval = husb->isoc_out_ep->desc.bInterval;
559 urb->transfer_buffer = skb->data;
560 urb->transfer_buffer_length = skb->len;
562 __fill_isoc_desc(urb, skb->len, le16_to_cpu(husb->isoc_out_ep->desc.wMaxPacketSize));
565 return __tx_submit(husb, _urb);
569 static void hci_usb_tx_process(struct hci_usb *husb)
571 struct sk_buff_head *q;
574 BT_DBG("%s", husb->hdev->name);
577 clear_bit(HCI_USB_TX_WAKEUP, &husb->state);
579 /* Process command queue */
580 q = __transmit_q(husb, HCI_COMMAND_PKT);
581 if (!atomic_read(__pending_tx(husb, HCI_COMMAND_PKT)) &&
582 (skb = skb_dequeue(q))) {
583 if (hci_usb_send_ctrl(husb, skb) < 0)
584 skb_queue_head(q, skb);
587 #ifdef CONFIG_BT_HCIUSB_SCO
588 /* Process SCO queue */
589 q = __transmit_q(husb, HCI_SCODATA_PKT);
590 if (atomic_read(__pending_tx(husb, HCI_SCODATA_PKT)) < HCI_MAX_ISOC_TX &&
591 (skb = skb_dequeue(q))) {
592 if (hci_usb_send_isoc(husb, skb) < 0)
593 skb_queue_head(q, skb);
597 /* Process ACL queue */
598 q = __transmit_q(husb, HCI_ACLDATA_PKT);
599 while (atomic_read(__pending_tx(husb, HCI_ACLDATA_PKT)) < HCI_MAX_BULK_TX &&
600 (skb = skb_dequeue(q))) {
601 if (hci_usb_send_bulk(husb, skb) < 0) {
602 skb_queue_head(q, skb);
606 } while(test_bit(HCI_USB_TX_WAKEUP, &husb->state));
609 static inline void hci_usb_tx_wakeup(struct hci_usb *husb)
611 /* Serialize TX queue processing to avoid data reordering */
612 if (!test_and_set_bit(HCI_USB_TX_PROCESS, &husb->state)) {
613 hci_usb_tx_process(husb);
614 clear_bit(HCI_USB_TX_PROCESS, &husb->state);
616 set_bit(HCI_USB_TX_WAKEUP, &husb->state);
619 /* Send frames from HCI layer */
620 static int hci_usb_send_frame(struct sk_buff *skb)
622 struct hci_dev *hdev = (struct hci_dev *) skb->dev;
623 struct hci_usb *husb;
626 BT_ERR("frame for uknown device (hdev=NULL)");
630 if (!test_bit(HCI_RUNNING, &hdev->flags))
633 BT_DBG("%s type %d len %d", hdev->name, bt_cb(skb)->pkt_type, skb->len);
635 husb = (struct hci_usb *) hdev->driver_data;
637 switch (bt_cb(skb)->pkt_type) {
638 case HCI_COMMAND_PKT:
642 case HCI_ACLDATA_PKT:
646 #ifdef CONFIG_BT_HCIUSB_SCO
647 case HCI_SCODATA_PKT:
657 read_lock(&husb->completion_lock);
659 skb_queue_tail(__transmit_q(husb, bt_cb(skb)->pkt_type), skb);
660 hci_usb_tx_wakeup(husb);
662 read_unlock(&husb->completion_lock);
666 static inline int __recv_frame(struct hci_usb *husb, int type, void *data, int count)
668 BT_DBG("%s type %d data %p count %d", husb->hdev->name, type, data, count);
670 husb->hdev->stat.byte_rx += count;
673 struct sk_buff *skb = __reassembly(husb, type);
674 struct { int expect; } *scb;
678 /* Start of the frame */
682 if (count >= HCI_EVENT_HDR_SIZE) {
683 struct hci_event_hdr *h = data;
684 len = HCI_EVENT_HDR_SIZE + h->plen;
689 case HCI_ACLDATA_PKT:
690 if (count >= HCI_ACL_HDR_SIZE) {
691 struct hci_acl_hdr *h = data;
692 len = HCI_ACL_HDR_SIZE + __le16_to_cpu(h->dlen);
696 #ifdef CONFIG_BT_HCIUSB_SCO
697 case HCI_SCODATA_PKT:
698 if (count >= HCI_SCO_HDR_SIZE) {
699 struct hci_sco_hdr *h = data;
700 len = HCI_SCO_HDR_SIZE + h->dlen;
706 BT_DBG("new packet len %d", len);
708 skb = bt_skb_alloc(len, GFP_ATOMIC);
710 BT_ERR("%s no memory for the packet", husb->hdev->name);
713 skb->dev = (void *) husb->hdev;
714 bt_cb(skb)->pkt_type = type;
716 __reassembly(husb, type) = skb;
718 scb = (void *) skb->cb;
722 scb = (void *) skb->cb;
726 len = min(len, count);
728 memcpy(skb_put(skb, len), data, len);
733 __reassembly(husb, type) = NULL;
734 bt_cb(skb)->pkt_type = type;
738 count -= len; data += len;
743 static void hci_usb_rx_complete(struct urb *urb)
745 struct _urb *_urb = container_of(urb, struct _urb, urb);
746 struct hci_usb *husb = (void *) urb->context;
747 struct hci_dev *hdev = husb->hdev;
748 int err, count = urb->actual_length;
750 BT_DBG("%s urb %p type %d status %d count %d flags %x", hdev->name, urb,
751 _urb->type, urb->status, count, urb->transfer_flags);
753 read_lock(&husb->completion_lock);
755 if (!test_bit(HCI_RUNNING, &hdev->flags))
758 if (urb->status || !count)
761 if (_urb->type == HCI_SCODATA_PKT) {
762 #ifdef CONFIG_BT_HCIUSB_SCO
764 for (i=0; i < urb->number_of_packets; i++) {
765 BT_DBG("desc %d status %d offset %d len %d", i,
766 urb->iso_frame_desc[i].status,
767 urb->iso_frame_desc[i].offset,
768 urb->iso_frame_desc[i].actual_length);
770 if (!urb->iso_frame_desc[i].status)
771 __recv_frame(husb, _urb->type,
772 urb->transfer_buffer + urb->iso_frame_desc[i].offset,
773 urb->iso_frame_desc[i].actual_length);
779 err = __recv_frame(husb, _urb->type, urb->transfer_buffer, count);
781 BT_ERR("%s corrupted packet: type %d count %d",
782 husb->hdev->name, _urb->type, count);
788 urb->dev = husb->udev;
789 err = usb_submit_urb(urb, GFP_ATOMIC);
790 BT_DBG("%s urb %p type %d resubmit status %d", hdev->name, urb,
794 read_unlock(&husb->completion_lock);
797 static void hci_usb_tx_complete(struct urb *urb)
799 struct _urb *_urb = container_of(urb, struct _urb, urb);
800 struct hci_usb *husb = (void *) urb->context;
801 struct hci_dev *hdev = husb->hdev;
803 BT_DBG("%s urb %p status %d flags %x", hdev->name, urb,
804 urb->status, urb->transfer_flags);
806 atomic_dec(__pending_tx(husb, _urb->type));
808 urb->transfer_buffer = NULL;
809 kfree_skb((struct sk_buff *) _urb->priv);
811 if (!test_bit(HCI_RUNNING, &hdev->flags))
815 hdev->stat.byte_tx += urb->transfer_buffer_length;
819 read_lock(&husb->completion_lock);
822 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
824 hci_usb_tx_wakeup(husb);
826 read_unlock(&husb->completion_lock);
829 static void hci_usb_destruct(struct hci_dev *hdev)
831 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
833 BT_DBG("%s", hdev->name);
838 static void hci_usb_notify(struct hci_dev *hdev, unsigned int evt)
840 BT_DBG("%s evt %d", hdev->name, evt);
843 static int hci_usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
845 struct usb_device *udev = interface_to_usbdev(intf);
846 struct usb_host_endpoint *bulk_out_ep = NULL;
847 struct usb_host_endpoint *bulk_in_ep = NULL;
848 struct usb_host_endpoint *intr_in_ep = NULL;
849 struct usb_host_endpoint *ep;
850 struct usb_host_interface *uif;
851 struct usb_interface *isoc_iface;
852 struct hci_usb *husb;
853 struct hci_dev *hdev;
854 int i, e, size, isoc_ifnum, isoc_alts;
856 BT_DBG("udev %p intf %p", udev, intf);
858 if (!id->driver_info) {
859 const struct usb_device_id *match;
860 match = usb_match_id(intf, blacklist_ids);
865 if (ignore || id->driver_info & HCI_IGNORE)
868 if (ignore_dga && id->driver_info & HCI_DIGIANSWER)
871 if (ignore_csr && id->driver_info & HCI_CSR)
874 if (ignore_sniffer && id->driver_info & HCI_SNIFFER)
877 if (intf->cur_altsetting->desc.bInterfaceNumber > 0)
880 /* Find endpoints that we need */
881 uif = intf->cur_altsetting;
882 for (e = 0; e < uif->desc.bNumEndpoints; e++) {
883 ep = &uif->endpoint[e];
885 switch (ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
886 case USB_ENDPOINT_XFER_INT:
887 if (ep->desc.bEndpointAddress & USB_DIR_IN)
891 case USB_ENDPOINT_XFER_BULK:
892 if (ep->desc.bEndpointAddress & USB_DIR_IN)
900 if (!bulk_in_ep || !bulk_out_ep || !intr_in_ep) {
901 BT_DBG("Bulk endpoints not found");
905 if (!(husb = kzalloc(sizeof(struct hci_usb), GFP_KERNEL))) {
906 BT_ERR("Can't allocate: control structure");
911 husb->bulk_out_ep = bulk_out_ep;
912 husb->bulk_in_ep = bulk_in_ep;
913 husb->intr_in_ep = intr_in_ep;
915 if (id->driver_info & HCI_DIGIANSWER)
916 husb->ctrl_req = USB_TYPE_VENDOR;
918 husb->ctrl_req = USB_TYPE_CLASS;
920 /* Find isochronous endpoints that we can use */
926 #ifdef CONFIG_BT_HCIUSB_SCO
927 if (isoc && !(id->driver_info & (HCI_BROKEN_ISOC | HCI_SNIFFER)))
928 isoc_iface = usb_ifnum_to_if(udev, isoc_ifnum);
932 struct usb_host_endpoint *isoc_out_ep = NULL;
933 struct usb_host_endpoint *isoc_in_ep = NULL;
935 for (a = 0; a < isoc_iface->num_altsetting; a++) {
936 uif = &isoc_iface->altsetting[a];
937 for (e = 0; e < uif->desc.bNumEndpoints; e++) {
938 ep = &uif->endpoint[e];
940 switch (ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
941 case USB_ENDPOINT_XFER_ISOC:
942 if (le16_to_cpu(ep->desc.wMaxPacketSize) < size ||
943 uif->desc.bAlternateSetting != isoc)
945 size = le16_to_cpu(ep->desc.wMaxPacketSize);
947 isoc_alts = uif->desc.bAlternateSetting;
949 if (ep->desc.bEndpointAddress & USB_DIR_IN)
958 if (!isoc_in_ep || !isoc_out_ep)
959 BT_DBG("Isoc endpoints not found");
961 BT_DBG("isoc ifnum %d alts %d", isoc_ifnum, isoc_alts);
962 if (usb_driver_claim_interface(&hci_usb_driver, isoc_iface, husb) != 0)
963 BT_ERR("Can't claim isoc interface");
964 else if (usb_set_interface(udev, isoc_ifnum, isoc_alts)) {
965 BT_ERR("Can't set isoc interface settings");
966 husb->isoc_iface = isoc_iface;
967 usb_driver_release_interface(&hci_usb_driver, isoc_iface);
968 husb->isoc_iface = NULL;
970 husb->isoc_iface = isoc_iface;
971 husb->isoc_in_ep = isoc_in_ep;
972 husb->isoc_out_ep = isoc_out_ep;
978 rwlock_init(&husb->completion_lock);
980 for (i = 0; i < 4; i++) {
981 skb_queue_head_init(&husb->transmit_q[i]);
982 _urb_queue_init(&husb->pending_q[i]);
983 _urb_queue_init(&husb->completed_q[i]);
986 /* Initialize and register HCI device */
987 hdev = hci_alloc_dev();
989 BT_ERR("Can't allocate HCI device");
995 hdev->type = HCI_USB;
996 hdev->driver_data = husb;
997 SET_HCIDEV_DEV(hdev, &intf->dev);
999 hdev->open = hci_usb_open;
1000 hdev->close = hci_usb_close;
1001 hdev->flush = hci_usb_flush;
1002 hdev->send = hci_usb_send_frame;
1003 hdev->destruct = hci_usb_destruct;
1004 hdev->notify = hci_usb_notify;
1006 hdev->owner = THIS_MODULE;
1008 if (reset || id->driver_info & HCI_RESET)
1009 set_bit(HCI_QUIRK_RESET_ON_INIT, &hdev->quirks);
1011 if (force_scofix || id->driver_info & HCI_WRONG_SCO_MTU) {
1012 if (!disable_scofix)
1013 set_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks);
1016 if (id->driver_info & HCI_SNIFFER) {
1017 if (le16_to_cpu(udev->descriptor.bcdDevice) > 0x997)
1018 set_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks);
1021 if (id->driver_info & HCI_BCM92035) {
1022 unsigned char cmd[] = { 0x3b, 0xfc, 0x01, 0x00 };
1023 struct sk_buff *skb;
1025 skb = bt_skb_alloc(sizeof(cmd), GFP_KERNEL);
1027 memcpy(skb_put(skb, sizeof(cmd)), cmd, sizeof(cmd));
1028 skb_queue_tail(&hdev->driver_init, skb);
1032 if (hci_register_dev(hdev) < 0) {
1033 BT_ERR("Can't register HCI device");
1038 usb_set_intfdata(intf, husb);
1042 if (husb->isoc_iface)
1043 usb_driver_release_interface(&hci_usb_driver, husb->isoc_iface);
1050 static void hci_usb_disconnect(struct usb_interface *intf)
1052 struct hci_usb *husb = usb_get_intfdata(intf);
1053 struct hci_dev *hdev;
1055 if (!husb || intf == husb->isoc_iface)
1058 usb_set_intfdata(intf, NULL);
1061 BT_DBG("%s", hdev->name);
1063 hci_usb_close(hdev);
1065 if (husb->isoc_iface)
1066 usb_driver_release_interface(&hci_usb_driver, husb->isoc_iface);
1068 if (hci_unregister_dev(hdev) < 0)
1069 BT_ERR("Can't unregister HCI device %s", hdev->name);
1074 static int hci_usb_suspend(struct usb_interface *intf, pm_message_t message)
1076 struct hci_usb *husb = usb_get_intfdata(intf);
1077 struct list_head killed;
1078 unsigned long flags;
1081 if (!husb || intf == husb->isoc_iface)
1084 hci_suspend_dev(husb->hdev);
1086 INIT_LIST_HEAD(&killed);
1088 for (i = 0; i < 4; i++) {
1089 struct _urb_queue *q = &husb->pending_q[i];
1090 struct _urb *_urb, *_tmp;
1092 while ((_urb = _urb_dequeue(q))) {
1093 /* reset queue since _urb_dequeue sets it to NULL */
1095 usb_kill_urb(&_urb->urb);
1096 list_add(&_urb->list, &killed);
1099 spin_lock_irqsave(&q->lock, flags);
1101 list_for_each_entry_safe(_urb, _tmp, &killed, list) {
1102 list_move_tail(&_urb->list, &q->head);
1105 spin_unlock_irqrestore(&q->lock, flags);
1111 static int hci_usb_resume(struct usb_interface *intf)
1113 struct hci_usb *husb = usb_get_intfdata(intf);
1114 unsigned long flags;
1117 if (!husb || intf == husb->isoc_iface)
1120 for (i = 0; i < 4; i++) {
1121 struct _urb_queue *q = &husb->pending_q[i];
1124 spin_lock_irqsave(&q->lock, flags);
1126 list_for_each_entry(_urb, &q->head, list) {
1127 err = usb_submit_urb(&_urb->urb, GFP_ATOMIC);
1132 spin_unlock_irqrestore(&q->lock, flags);
1138 hci_resume_dev(husb->hdev);
1143 static struct usb_driver hci_usb_driver = {
1145 .probe = hci_usb_probe,
1146 .disconnect = hci_usb_disconnect,
1147 .suspend = hci_usb_suspend,
1148 .resume = hci_usb_resume,
1149 .id_table = bluetooth_ids,
1152 static int __init hci_usb_init(void)
1156 BT_INFO("HCI USB driver ver %s", VERSION);
1158 if ((err = usb_register(&hci_usb_driver)) < 0)
1159 BT_ERR("Failed to register HCI USB driver");
1164 static void __exit hci_usb_exit(void)
1166 usb_deregister(&hci_usb_driver);
1169 module_init(hci_usb_init);
1170 module_exit(hci_usb_exit);
1172 module_param(ignore, bool, 0644);
1173 MODULE_PARM_DESC(ignore, "Ignore devices from the matching table");
1175 module_param(ignore_dga, bool, 0644);
1176 MODULE_PARM_DESC(ignore_dga, "Ignore devices with id 08fd:0001");
1178 module_param(ignore_csr, bool, 0644);
1179 MODULE_PARM_DESC(ignore_csr, "Ignore devices with id 0a12:0001");
1181 module_param(ignore_sniffer, bool, 0644);
1182 MODULE_PARM_DESC(ignore_sniffer, "Ignore devices with id 0a12:0002");
1184 module_param(disable_scofix, bool, 0644);
1185 MODULE_PARM_DESC(disable_scofix, "Disable fixup of wrong SCO buffer size");
1187 module_param(force_scofix, bool, 0644);
1188 MODULE_PARM_DESC(force_scofix, "Force fixup of wrong SCO buffers size");
1190 module_param(reset, bool, 0644);
1191 MODULE_PARM_DESC(reset, "Send HCI reset command on initialization");
1193 #ifdef CONFIG_BT_HCIUSB_SCO
1194 module_param(isoc, int, 0644);
1195 MODULE_PARM_DESC(isoc, "Set isochronous transfers for SCO over HCI support");
1198 MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>, Marcel Holtmann <marcel@holtmann.org>");
1199 MODULE_DESCRIPTION("Bluetooth HCI USB driver ver " VERSION);
1200 MODULE_VERSION(VERSION);
1201 MODULE_LICENSE("GPL");