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, 0x200a), .driver_info = HCI_RESET | HCI_WRONG_SCO_MTU },
115 { USB_DEVICE(0x0a5c, 0x2009), .driver_info = HCI_BCM92035 },
117 /* IBM/Lenovo ThinkPad with Broadcom chip */
118 { USB_DEVICE(0x0a5c, 0x201e), .driver_info = HCI_WRONG_SCO_MTU },
119 { USB_DEVICE(0x0a5c, 0x2110), .driver_info = HCI_WRONG_SCO_MTU },
122 { USB_DEVICE(0x0a5c, 0x2100), .driver_info = HCI_RESET },
124 /* ANYCOM Bluetooth USB-200 and USB-250 */
125 { USB_DEVICE(0x0a5c, 0x2111), .driver_info = HCI_RESET },
127 /* HP laptop with Broadcom chip */
128 { USB_DEVICE(0x03f0, 0x171d), .driver_info = HCI_WRONG_SCO_MTU },
130 /* Dell laptop with Broadcom chip */
131 { USB_DEVICE(0x413c, 0x8126), .driver_info = HCI_WRONG_SCO_MTU },
133 /* Microsoft Wireless Transceiver for Bluetooth 2.0 */
134 { USB_DEVICE(0x045e, 0x009c), .driver_info = HCI_RESET },
136 /* Kensington Bluetooth USB adapter */
137 { USB_DEVICE(0x047d, 0x105d), .driver_info = HCI_RESET },
138 { USB_DEVICE(0x047d, 0x105e), .driver_info = HCI_WRONG_SCO_MTU },
140 /* ISSC Bluetooth Adapter v3.1 */
141 { USB_DEVICE(0x1131, 0x1001), .driver_info = HCI_RESET },
143 /* RTX Telecom based adapters with buggy SCO support */
144 { USB_DEVICE(0x0400, 0x0807), .driver_info = HCI_BROKEN_ISOC },
145 { USB_DEVICE(0x0400, 0x080a), .driver_info = HCI_BROKEN_ISOC },
147 /* Belkin F8T012 and F8T013 devices */
148 { USB_DEVICE(0x050d, 0x0012), .driver_info = HCI_WRONG_SCO_MTU },
149 { USB_DEVICE(0x050d, 0x0013), .driver_info = HCI_WRONG_SCO_MTU },
151 /* Digianswer devices */
152 { USB_DEVICE(0x08fd, 0x0001), .driver_info = HCI_DIGIANSWER },
153 { USB_DEVICE(0x08fd, 0x0002), .driver_info = HCI_IGNORE },
155 /* CSR BlueCore Bluetooth Sniffer */
156 { USB_DEVICE(0x0a12, 0x0002), .driver_info = HCI_SNIFFER },
158 /* Frontline ComProbe Bluetooth Sniffer */
159 { USB_DEVICE(0x16d3, 0x0002), .driver_info = HCI_SNIFFER },
161 { } /* Terminating entry */
164 static struct _urb *_urb_alloc(int isoc, gfp_t gfp)
166 struct _urb *_urb = kmalloc(sizeof(struct _urb) +
167 sizeof(struct usb_iso_packet_descriptor) * isoc, gfp);
169 memset(_urb, 0, sizeof(*_urb));
170 usb_init_urb(&_urb->urb);
175 static struct _urb *_urb_dequeue(struct _urb_queue *q)
177 struct _urb *_urb = NULL;
179 spin_lock_irqsave(&q->lock, flags);
181 struct list_head *head = &q->head;
182 struct list_head *next = head->next;
184 _urb = list_entry(next, struct _urb, list);
185 list_del(next); _urb->queue = NULL;
188 spin_unlock_irqrestore(&q->lock, flags);
192 static void hci_usb_rx_complete(struct urb *urb);
193 static void hci_usb_tx_complete(struct urb *urb);
195 #define __pending_tx(husb, type) (&husb->pending_tx[type-1])
196 #define __pending_q(husb, type) (&husb->pending_q[type-1])
197 #define __completed_q(husb, type) (&husb->completed_q[type-1])
198 #define __transmit_q(husb, type) (&husb->transmit_q[type-1])
199 #define __reassembly(husb, type) (husb->reassembly[type-1])
201 static inline struct _urb *__get_completed(struct hci_usb *husb, int type)
203 return _urb_dequeue(__completed_q(husb, type));
206 #ifdef CONFIG_BT_HCIUSB_SCO
207 static void __fill_isoc_desc(struct urb *urb, int len, int mtu)
211 BT_DBG("len %d mtu %d", len, mtu);
213 for (i=0; i < HCI_MAX_ISOC_FRAMES && len >= mtu; i++, offset += mtu, len -= mtu) {
214 urb->iso_frame_desc[i].offset = offset;
215 urb->iso_frame_desc[i].length = mtu;
216 BT_DBG("desc %d offset %d len %d", i, offset, mtu);
218 if (len && i < HCI_MAX_ISOC_FRAMES) {
219 urb->iso_frame_desc[i].offset = offset;
220 urb->iso_frame_desc[i].length = len;
221 BT_DBG("desc %d offset %d len %d", i, offset, len);
224 urb->number_of_packets = i;
228 static int hci_usb_intr_rx_submit(struct hci_usb *husb)
232 int err, pipe, interval, size;
235 BT_DBG("%s", husb->hdev->name);
237 size = le16_to_cpu(husb->intr_in_ep->desc.wMaxPacketSize);
239 buf = kmalloc(size, GFP_ATOMIC);
243 _urb = _urb_alloc(0, GFP_ATOMIC);
248 _urb->type = HCI_EVENT_PKT;
249 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
252 pipe = usb_rcvintpipe(husb->udev, husb->intr_in_ep->desc.bEndpointAddress);
253 interval = husb->intr_in_ep->desc.bInterval;
254 usb_fill_int_urb(urb, husb->udev, pipe, buf, size, hci_usb_rx_complete, husb, interval);
256 err = usb_submit_urb(urb, GFP_ATOMIC);
258 BT_ERR("%s intr rx submit failed urb %p err %d",
259 husb->hdev->name, urb, err);
267 static int hci_usb_bulk_rx_submit(struct hci_usb *husb)
271 int err, pipe, size = HCI_MAX_FRAME_SIZE;
274 buf = kmalloc(size, GFP_ATOMIC);
278 _urb = _urb_alloc(0, GFP_ATOMIC);
283 _urb->type = HCI_ACLDATA_PKT;
284 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
287 pipe = usb_rcvbulkpipe(husb->udev, husb->bulk_in_ep->desc.bEndpointAddress);
288 usb_fill_bulk_urb(urb, husb->udev, pipe, buf, size, hci_usb_rx_complete, husb);
289 urb->transfer_flags = 0;
291 BT_DBG("%s urb %p", husb->hdev->name, urb);
293 err = usb_submit_urb(urb, GFP_ATOMIC);
295 BT_ERR("%s bulk rx submit failed urb %p err %d",
296 husb->hdev->name, urb, err);
304 #ifdef CONFIG_BT_HCIUSB_SCO
305 static int hci_usb_isoc_rx_submit(struct hci_usb *husb)
312 mtu = le16_to_cpu(husb->isoc_in_ep->desc.wMaxPacketSize);
313 size = mtu * HCI_MAX_ISOC_FRAMES;
315 buf = kmalloc(size, GFP_ATOMIC);
319 _urb = _urb_alloc(HCI_MAX_ISOC_FRAMES, GFP_ATOMIC);
324 _urb->type = HCI_SCODATA_PKT;
325 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
330 urb->dev = husb->udev;
331 urb->pipe = usb_rcvisocpipe(husb->udev, husb->isoc_in_ep->desc.bEndpointAddress);
332 urb->complete = hci_usb_rx_complete;
334 urb->interval = husb->isoc_in_ep->desc.bInterval;
336 urb->transfer_buffer_length = size;
337 urb->transfer_buffer = buf;
338 urb->transfer_flags = URB_ISO_ASAP;
340 __fill_isoc_desc(urb, size, mtu);
342 BT_DBG("%s urb %p", husb->hdev->name, urb);
344 err = usb_submit_urb(urb, GFP_ATOMIC);
346 BT_ERR("%s isoc rx submit failed urb %p err %d",
347 husb->hdev->name, urb, err);
356 /* Initialize device */
357 static int hci_usb_open(struct hci_dev *hdev)
359 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
363 BT_DBG("%s", hdev->name);
365 if (test_and_set_bit(HCI_RUNNING, &hdev->flags))
368 write_lock_irqsave(&husb->completion_lock, flags);
370 err = hci_usb_intr_rx_submit(husb);
372 for (i = 0; i < HCI_MAX_BULK_RX; i++)
373 hci_usb_bulk_rx_submit(husb);
375 #ifdef CONFIG_BT_HCIUSB_SCO
376 if (husb->isoc_iface)
377 for (i = 0; i < HCI_MAX_ISOC_RX; i++)
378 hci_usb_isoc_rx_submit(husb);
381 clear_bit(HCI_RUNNING, &hdev->flags);
384 write_unlock_irqrestore(&husb->completion_lock, flags);
389 static int hci_usb_flush(struct hci_dev *hdev)
391 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
394 BT_DBG("%s", hdev->name);
396 for (i = 0; i < 4; i++)
397 skb_queue_purge(&husb->transmit_q[i]);
401 static void hci_usb_unlink_urbs(struct hci_usb *husb)
405 BT_DBG("%s", husb->hdev->name);
407 for (i = 0; i < 4; i++) {
411 /* Kill pending requests */
412 while ((_urb = _urb_dequeue(&husb->pending_q[i]))) {
414 BT_DBG("%s unlinking _urb %p type %d urb %p",
415 husb->hdev->name, _urb, _urb->type, urb);
417 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
420 /* Release completed requests */
421 while ((_urb = _urb_dequeue(&husb->completed_q[i]))) {
423 BT_DBG("%s freeing _urb %p type %d urb %p",
424 husb->hdev->name, _urb, _urb->type, urb);
425 kfree(urb->setup_packet);
426 kfree(urb->transfer_buffer);
430 /* Release reassembly buffers */
431 if (husb->reassembly[i]) {
432 kfree_skb(husb->reassembly[i]);
433 husb->reassembly[i] = NULL;
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 inline int __recv_frame(struct hci_usb *husb, int type, void *data, int count)
673 BT_DBG("%s type %d data %p count %d", husb->hdev->name, type, data, count);
675 husb->hdev->stat.byte_rx += count;
678 struct sk_buff *skb = __reassembly(husb, type);
679 struct { int expect; } *scb;
683 /* Start of the frame */
687 if (count >= HCI_EVENT_HDR_SIZE) {
688 struct hci_event_hdr *h = data;
689 len = HCI_EVENT_HDR_SIZE + h->plen;
694 case HCI_ACLDATA_PKT:
695 if (count >= HCI_ACL_HDR_SIZE) {
696 struct hci_acl_hdr *h = data;
697 len = HCI_ACL_HDR_SIZE + __le16_to_cpu(h->dlen);
701 #ifdef CONFIG_BT_HCIUSB_SCO
702 case HCI_SCODATA_PKT:
703 if (count >= HCI_SCO_HDR_SIZE) {
704 struct hci_sco_hdr *h = data;
705 len = HCI_SCO_HDR_SIZE + h->dlen;
711 BT_DBG("new packet len %d", len);
713 skb = bt_skb_alloc(len, GFP_ATOMIC);
715 BT_ERR("%s no memory for the packet", husb->hdev->name);
718 skb->dev = (void *) husb->hdev;
719 bt_cb(skb)->pkt_type = type;
721 __reassembly(husb, type) = skb;
723 scb = (void *) skb->cb;
727 scb = (void *) skb->cb;
731 len = min(len, count);
733 memcpy(skb_put(skb, len), data, len);
738 __reassembly(husb, type) = NULL;
739 bt_cb(skb)->pkt_type = type;
743 count -= len; data += len;
748 static void hci_usb_rx_complete(struct urb *urb)
750 struct _urb *_urb = container_of(urb, struct _urb, urb);
751 struct hci_usb *husb = (void *) urb->context;
752 struct hci_dev *hdev = husb->hdev;
753 int err, count = urb->actual_length;
755 BT_DBG("%s urb %p type %d status %d count %d flags %x", hdev->name, urb,
756 _urb->type, urb->status, count, urb->transfer_flags);
758 read_lock(&husb->completion_lock);
760 if (!test_bit(HCI_RUNNING, &hdev->flags))
763 if (urb->status || !count)
766 if (_urb->type == HCI_SCODATA_PKT) {
767 #ifdef CONFIG_BT_HCIUSB_SCO
769 for (i=0; i < urb->number_of_packets; i++) {
770 BT_DBG("desc %d status %d offset %d len %d", i,
771 urb->iso_frame_desc[i].status,
772 urb->iso_frame_desc[i].offset,
773 urb->iso_frame_desc[i].actual_length);
775 if (!urb->iso_frame_desc[i].status)
776 __recv_frame(husb, _urb->type,
777 urb->transfer_buffer + urb->iso_frame_desc[i].offset,
778 urb->iso_frame_desc[i].actual_length);
784 err = __recv_frame(husb, _urb->type, urb->transfer_buffer, count);
786 BT_ERR("%s corrupted packet: type %d count %d",
787 husb->hdev->name, _urb->type, count);
793 urb->dev = husb->udev;
794 err = usb_submit_urb(urb, GFP_ATOMIC);
795 BT_DBG("%s urb %p type %d resubmit status %d", hdev->name, urb,
799 read_unlock(&husb->completion_lock);
802 static void hci_usb_tx_complete(struct urb *urb)
804 struct _urb *_urb = container_of(urb, struct _urb, urb);
805 struct hci_usb *husb = (void *) urb->context;
806 struct hci_dev *hdev = husb->hdev;
808 BT_DBG("%s urb %p status %d flags %x", hdev->name, urb,
809 urb->status, urb->transfer_flags);
811 atomic_dec(__pending_tx(husb, _urb->type));
813 urb->transfer_buffer = NULL;
814 kfree_skb((struct sk_buff *) _urb->priv);
816 if (!test_bit(HCI_RUNNING, &hdev->flags))
820 hdev->stat.byte_tx += urb->transfer_buffer_length;
824 read_lock(&husb->completion_lock);
827 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
829 hci_usb_tx_wakeup(husb);
831 read_unlock(&husb->completion_lock);
834 static void hci_usb_destruct(struct hci_dev *hdev)
836 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
838 BT_DBG("%s", hdev->name);
843 static void hci_usb_notify(struct hci_dev *hdev, unsigned int evt)
845 BT_DBG("%s evt %d", hdev->name, evt);
848 static int hci_usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
850 struct usb_device *udev = interface_to_usbdev(intf);
851 struct usb_host_endpoint *bulk_out_ep = NULL;
852 struct usb_host_endpoint *bulk_in_ep = NULL;
853 struct usb_host_endpoint *intr_in_ep = NULL;
854 struct usb_host_endpoint *ep;
855 struct usb_host_interface *uif;
856 struct usb_interface *isoc_iface;
857 struct hci_usb *husb;
858 struct hci_dev *hdev;
859 int i, e, size, isoc_ifnum, isoc_alts;
861 BT_DBG("udev %p intf %p", udev, intf);
863 if (!id->driver_info) {
864 const struct usb_device_id *match;
865 match = usb_match_id(intf, blacklist_ids);
870 if (ignore || id->driver_info & HCI_IGNORE)
873 if (ignore_dga && id->driver_info & HCI_DIGIANSWER)
876 if (ignore_csr && id->driver_info & HCI_CSR)
879 if (ignore_sniffer && id->driver_info & HCI_SNIFFER)
882 if (intf->cur_altsetting->desc.bInterfaceNumber > 0)
885 /* Find endpoints that we need */
886 uif = intf->cur_altsetting;
887 for (e = 0; e < uif->desc.bNumEndpoints; e++) {
888 ep = &uif->endpoint[e];
890 switch (ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
891 case USB_ENDPOINT_XFER_INT:
892 if (ep->desc.bEndpointAddress & USB_DIR_IN)
896 case USB_ENDPOINT_XFER_BULK:
897 if (ep->desc.bEndpointAddress & USB_DIR_IN)
905 if (!bulk_in_ep || !bulk_out_ep || !intr_in_ep) {
906 BT_DBG("Bulk endpoints not found");
910 if (!(husb = kzalloc(sizeof(struct hci_usb), GFP_KERNEL))) {
911 BT_ERR("Can't allocate: control structure");
916 husb->bulk_out_ep = bulk_out_ep;
917 husb->bulk_in_ep = bulk_in_ep;
918 husb->intr_in_ep = intr_in_ep;
920 if (id->driver_info & HCI_DIGIANSWER)
921 husb->ctrl_req = USB_TYPE_VENDOR;
923 husb->ctrl_req = USB_TYPE_CLASS;
925 /* Find isochronous endpoints that we can use */
931 #ifdef CONFIG_BT_HCIUSB_SCO
932 if (isoc && !(id->driver_info & (HCI_BROKEN_ISOC | HCI_SNIFFER)))
933 isoc_iface = usb_ifnum_to_if(udev, isoc_ifnum);
937 struct usb_host_endpoint *isoc_out_ep = NULL;
938 struct usb_host_endpoint *isoc_in_ep = NULL;
940 for (a = 0; a < isoc_iface->num_altsetting; a++) {
941 uif = &isoc_iface->altsetting[a];
942 for (e = 0; e < uif->desc.bNumEndpoints; e++) {
943 ep = &uif->endpoint[e];
945 switch (ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
946 case USB_ENDPOINT_XFER_ISOC:
947 if (le16_to_cpu(ep->desc.wMaxPacketSize) < size ||
948 uif->desc.bAlternateSetting != isoc)
950 size = le16_to_cpu(ep->desc.wMaxPacketSize);
952 isoc_alts = uif->desc.bAlternateSetting;
954 if (ep->desc.bEndpointAddress & USB_DIR_IN)
963 if (!isoc_in_ep || !isoc_out_ep)
964 BT_DBG("Isoc endpoints not found");
966 BT_DBG("isoc ifnum %d alts %d", isoc_ifnum, isoc_alts);
967 if (usb_driver_claim_interface(&hci_usb_driver, isoc_iface, husb) != 0)
968 BT_ERR("Can't claim isoc interface");
969 else if (usb_set_interface(udev, isoc_ifnum, isoc_alts)) {
970 BT_ERR("Can't set isoc interface settings");
971 husb->isoc_iface = isoc_iface;
972 usb_driver_release_interface(&hci_usb_driver, isoc_iface);
973 husb->isoc_iface = NULL;
975 husb->isoc_iface = isoc_iface;
976 husb->isoc_in_ep = isoc_in_ep;
977 husb->isoc_out_ep = isoc_out_ep;
983 rwlock_init(&husb->completion_lock);
985 for (i = 0; i < 4; i++) {
986 skb_queue_head_init(&husb->transmit_q[i]);
987 _urb_queue_init(&husb->pending_q[i]);
988 _urb_queue_init(&husb->completed_q[i]);
991 /* Initialize and register HCI device */
992 hdev = hci_alloc_dev();
994 BT_ERR("Can't allocate HCI device");
1000 hdev->type = HCI_USB;
1001 hdev->driver_data = husb;
1002 SET_HCIDEV_DEV(hdev, &intf->dev);
1004 hdev->open = hci_usb_open;
1005 hdev->close = hci_usb_close;
1006 hdev->flush = hci_usb_flush;
1007 hdev->send = hci_usb_send_frame;
1008 hdev->destruct = hci_usb_destruct;
1009 hdev->notify = hci_usb_notify;
1011 hdev->owner = THIS_MODULE;
1013 if (reset || id->driver_info & HCI_RESET)
1014 set_bit(HCI_QUIRK_RESET_ON_INIT, &hdev->quirks);
1016 if (force_scofix || id->driver_info & HCI_WRONG_SCO_MTU) {
1017 if (!disable_scofix)
1018 set_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks);
1021 if (id->driver_info & HCI_SNIFFER) {
1022 if (le16_to_cpu(udev->descriptor.bcdDevice) > 0x997)
1023 set_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks);
1026 if (id->driver_info & HCI_BCM92035) {
1027 unsigned char cmd[] = { 0x3b, 0xfc, 0x01, 0x00 };
1028 struct sk_buff *skb;
1030 skb = bt_skb_alloc(sizeof(cmd), GFP_KERNEL);
1032 memcpy(skb_put(skb, sizeof(cmd)), cmd, sizeof(cmd));
1033 skb_queue_tail(&hdev->driver_init, skb);
1037 if (hci_register_dev(hdev) < 0) {
1038 BT_ERR("Can't register HCI device");
1043 usb_set_intfdata(intf, husb);
1047 if (husb->isoc_iface)
1048 usb_driver_release_interface(&hci_usb_driver, husb->isoc_iface);
1055 static void hci_usb_disconnect(struct usb_interface *intf)
1057 struct hci_usb *husb = usb_get_intfdata(intf);
1058 struct hci_dev *hdev;
1060 if (!husb || intf == husb->isoc_iface)
1063 usb_set_intfdata(intf, NULL);
1066 BT_DBG("%s", hdev->name);
1068 hci_usb_close(hdev);
1070 if (husb->isoc_iface)
1071 usb_driver_release_interface(&hci_usb_driver, husb->isoc_iface);
1073 if (hci_unregister_dev(hdev) < 0)
1074 BT_ERR("Can't unregister HCI device %s", hdev->name);
1079 static int hci_usb_suspend(struct usb_interface *intf, pm_message_t message)
1081 struct hci_usb *husb = usb_get_intfdata(intf);
1082 struct list_head killed;
1083 unsigned long flags;
1086 if (!husb || intf == husb->isoc_iface)
1089 hci_suspend_dev(husb->hdev);
1091 INIT_LIST_HEAD(&killed);
1093 for (i = 0; i < 4; i++) {
1094 struct _urb_queue *q = &husb->pending_q[i];
1095 struct _urb *_urb, *_tmp;
1097 while ((_urb = _urb_dequeue(q))) {
1098 /* reset queue since _urb_dequeue sets it to NULL */
1100 usb_kill_urb(&_urb->urb);
1101 list_add(&_urb->list, &killed);
1104 spin_lock_irqsave(&q->lock, flags);
1106 list_for_each_entry_safe(_urb, _tmp, &killed, list) {
1107 list_move_tail(&_urb->list, &q->head);
1110 spin_unlock_irqrestore(&q->lock, flags);
1116 static int hci_usb_resume(struct usb_interface *intf)
1118 struct hci_usb *husb = usb_get_intfdata(intf);
1119 unsigned long flags;
1122 if (!husb || intf == husb->isoc_iface)
1125 for (i = 0; i < 4; i++) {
1126 struct _urb_queue *q = &husb->pending_q[i];
1129 spin_lock_irqsave(&q->lock, flags);
1131 list_for_each_entry(_urb, &q->head, list) {
1132 err = usb_submit_urb(&_urb->urb, GFP_ATOMIC);
1137 spin_unlock_irqrestore(&q->lock, flags);
1143 hci_resume_dev(husb->hdev);
1148 static struct usb_driver hci_usb_driver = {
1150 .probe = hci_usb_probe,
1151 .disconnect = hci_usb_disconnect,
1152 .suspend = hci_usb_suspend,
1153 .resume = hci_usb_resume,
1154 .id_table = bluetooth_ids,
1157 static int __init hci_usb_init(void)
1161 BT_INFO("HCI USB driver ver %s", VERSION);
1163 if ((err = usb_register(&hci_usb_driver)) < 0)
1164 BT_ERR("Failed to register HCI USB driver");
1169 static void __exit hci_usb_exit(void)
1171 usb_deregister(&hci_usb_driver);
1174 module_init(hci_usb_init);
1175 module_exit(hci_usb_exit);
1177 module_param(ignore, bool, 0644);
1178 MODULE_PARM_DESC(ignore, "Ignore devices from the matching table");
1180 module_param(ignore_dga, bool, 0644);
1181 MODULE_PARM_DESC(ignore_dga, "Ignore devices with id 08fd:0001");
1183 module_param(ignore_csr, bool, 0644);
1184 MODULE_PARM_DESC(ignore_csr, "Ignore devices with id 0a12:0001");
1186 module_param(ignore_sniffer, bool, 0644);
1187 MODULE_PARM_DESC(ignore_sniffer, "Ignore devices with id 0a12:0002");
1189 module_param(disable_scofix, bool, 0644);
1190 MODULE_PARM_DESC(disable_scofix, "Disable fixup of wrong SCO buffer size");
1192 module_param(force_scofix, bool, 0644);
1193 MODULE_PARM_DESC(force_scofix, "Force fixup of wrong SCO buffers size");
1195 module_param(reset, bool, 0644);
1196 MODULE_PARM_DESC(reset, "Send HCI reset command on initialization");
1198 #ifdef CONFIG_BT_HCIUSB_SCO
1199 module_param(isoc, int, 0644);
1200 MODULE_PARM_DESC(isoc, "Set isochronous transfers for SCO over HCI support");
1203 MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>, Marcel Holtmann <marcel@holtmann.org>");
1204 MODULE_DESCRIPTION("Bluetooth HCI USB driver ver " VERSION);
1205 MODULE_VERSION(VERSION);
1206 MODULE_LICENSE("GPL");