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 /* Dell laptop with Broadcom chip */
129 { USB_DEVICE(0x413c, 0x8126), .driver_info = HCI_WRONG_SCO_MTU },
131 /* Microsoft Wireless Transceiver for Bluetooth 2.0 */
132 { USB_DEVICE(0x045e, 0x009c), .driver_info = HCI_RESET },
134 /* Kensington Bluetooth USB adapter */
135 { USB_DEVICE(0x047d, 0x105d), .driver_info = HCI_RESET },
136 { USB_DEVICE(0x047d, 0x105e), .driver_info = HCI_WRONG_SCO_MTU },
138 /* ISSC Bluetooth Adapter v3.1 */
139 { USB_DEVICE(0x1131, 0x1001), .driver_info = HCI_RESET },
141 /* RTX Telecom based adapters with buggy SCO support */
142 { USB_DEVICE(0x0400, 0x0807), .driver_info = HCI_BROKEN_ISOC },
143 { USB_DEVICE(0x0400, 0x080a), .driver_info = HCI_BROKEN_ISOC },
145 /* Belkin F8T012 and F8T013 devices */
146 { USB_DEVICE(0x050d, 0x0012), .driver_info = HCI_WRONG_SCO_MTU },
147 { USB_DEVICE(0x050d, 0x0013), .driver_info = HCI_WRONG_SCO_MTU },
149 /* Digianswer devices */
150 { USB_DEVICE(0x08fd, 0x0001), .driver_info = HCI_DIGIANSWER },
151 { USB_DEVICE(0x08fd, 0x0002), .driver_info = HCI_IGNORE },
153 /* CSR BlueCore Bluetooth Sniffer */
154 { USB_DEVICE(0x0a12, 0x0002), .driver_info = HCI_SNIFFER },
156 /* Frontline ComProbe Bluetooth Sniffer */
157 { USB_DEVICE(0x16d3, 0x0002), .driver_info = HCI_SNIFFER },
159 { } /* Terminating entry */
162 static struct _urb *_urb_alloc(int isoc, gfp_t gfp)
164 struct _urb *_urb = kmalloc(sizeof(struct _urb) +
165 sizeof(struct usb_iso_packet_descriptor) * isoc, gfp);
167 memset(_urb, 0, sizeof(*_urb));
168 usb_init_urb(&_urb->urb);
173 static struct _urb *_urb_dequeue(struct _urb_queue *q)
175 struct _urb *_urb = NULL;
177 spin_lock_irqsave(&q->lock, flags);
179 struct list_head *head = &q->head;
180 struct list_head *next = head->next;
182 _urb = list_entry(next, struct _urb, list);
183 list_del(next); _urb->queue = NULL;
186 spin_unlock_irqrestore(&q->lock, flags);
190 static void hci_usb_rx_complete(struct urb *urb);
191 static void hci_usb_tx_complete(struct urb *urb);
193 #define __pending_tx(husb, type) (&husb->pending_tx[type-1])
194 #define __pending_q(husb, type) (&husb->pending_q[type-1])
195 #define __completed_q(husb, type) (&husb->completed_q[type-1])
196 #define __transmit_q(husb, type) (&husb->transmit_q[type-1])
197 #define __reassembly(husb, type) (husb->reassembly[type-1])
199 static inline struct _urb *__get_completed(struct hci_usb *husb, int type)
201 return _urb_dequeue(__completed_q(husb, type));
204 #ifdef CONFIG_BT_HCIUSB_SCO
205 static void __fill_isoc_desc(struct urb *urb, int len, int mtu)
209 BT_DBG("len %d mtu %d", len, mtu);
211 for (i=0; i < HCI_MAX_ISOC_FRAMES && len >= mtu; i++, offset += mtu, len -= mtu) {
212 urb->iso_frame_desc[i].offset = offset;
213 urb->iso_frame_desc[i].length = mtu;
214 BT_DBG("desc %d offset %d len %d", i, offset, mtu);
216 if (len && i < HCI_MAX_ISOC_FRAMES) {
217 urb->iso_frame_desc[i].offset = offset;
218 urb->iso_frame_desc[i].length = len;
219 BT_DBG("desc %d offset %d len %d", i, offset, len);
222 urb->number_of_packets = i;
226 static int hci_usb_intr_rx_submit(struct hci_usb *husb)
230 int err, pipe, interval, size;
233 BT_DBG("%s", husb->hdev->name);
235 size = le16_to_cpu(husb->intr_in_ep->desc.wMaxPacketSize);
237 buf = kmalloc(size, GFP_ATOMIC);
241 _urb = _urb_alloc(0, GFP_ATOMIC);
246 _urb->type = HCI_EVENT_PKT;
247 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
250 pipe = usb_rcvintpipe(husb->udev, husb->intr_in_ep->desc.bEndpointAddress);
251 interval = husb->intr_in_ep->desc.bInterval;
252 usb_fill_int_urb(urb, husb->udev, pipe, buf, size, hci_usb_rx_complete, husb, interval);
254 err = usb_submit_urb(urb, GFP_ATOMIC);
256 BT_ERR("%s intr rx submit failed urb %p err %d",
257 husb->hdev->name, urb, err);
265 static int hci_usb_bulk_rx_submit(struct hci_usb *husb)
269 int err, pipe, size = HCI_MAX_FRAME_SIZE;
272 buf = kmalloc(size, GFP_ATOMIC);
276 _urb = _urb_alloc(0, GFP_ATOMIC);
281 _urb->type = HCI_ACLDATA_PKT;
282 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
285 pipe = usb_rcvbulkpipe(husb->udev, husb->bulk_in_ep->desc.bEndpointAddress);
286 usb_fill_bulk_urb(urb, husb->udev, pipe, buf, size, hci_usb_rx_complete, husb);
287 urb->transfer_flags = 0;
289 BT_DBG("%s urb %p", husb->hdev->name, urb);
291 err = usb_submit_urb(urb, GFP_ATOMIC);
293 BT_ERR("%s bulk rx submit failed urb %p err %d",
294 husb->hdev->name, urb, err);
302 #ifdef CONFIG_BT_HCIUSB_SCO
303 static int hci_usb_isoc_rx_submit(struct hci_usb *husb)
310 mtu = le16_to_cpu(husb->isoc_in_ep->desc.wMaxPacketSize);
311 size = mtu * HCI_MAX_ISOC_FRAMES;
313 buf = kmalloc(size, GFP_ATOMIC);
317 _urb = _urb_alloc(HCI_MAX_ISOC_FRAMES, GFP_ATOMIC);
322 _urb->type = HCI_SCODATA_PKT;
323 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
328 urb->dev = husb->udev;
329 urb->pipe = usb_rcvisocpipe(husb->udev, husb->isoc_in_ep->desc.bEndpointAddress);
330 urb->complete = hci_usb_rx_complete;
332 urb->interval = husb->isoc_in_ep->desc.bInterval;
334 urb->transfer_buffer_length = size;
335 urb->transfer_buffer = buf;
336 urb->transfer_flags = URB_ISO_ASAP;
338 __fill_isoc_desc(urb, size, mtu);
340 BT_DBG("%s urb %p", husb->hdev->name, urb);
342 err = usb_submit_urb(urb, GFP_ATOMIC);
344 BT_ERR("%s isoc rx submit failed urb %p err %d",
345 husb->hdev->name, urb, err);
354 /* Initialize device */
355 static int hci_usb_open(struct hci_dev *hdev)
357 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
361 BT_DBG("%s", hdev->name);
363 if (test_and_set_bit(HCI_RUNNING, &hdev->flags))
366 write_lock_irqsave(&husb->completion_lock, flags);
368 err = hci_usb_intr_rx_submit(husb);
370 for (i = 0; i < HCI_MAX_BULK_RX; i++)
371 hci_usb_bulk_rx_submit(husb);
373 #ifdef CONFIG_BT_HCIUSB_SCO
374 if (husb->isoc_iface)
375 for (i = 0; i < HCI_MAX_ISOC_RX; i++)
376 hci_usb_isoc_rx_submit(husb);
379 clear_bit(HCI_RUNNING, &hdev->flags);
382 write_unlock_irqrestore(&husb->completion_lock, flags);
387 static int hci_usb_flush(struct hci_dev *hdev)
389 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
392 BT_DBG("%s", hdev->name);
394 for (i = 0; i < 4; i++)
395 skb_queue_purge(&husb->transmit_q[i]);
399 static void hci_usb_unlink_urbs(struct hci_usb *husb)
403 BT_DBG("%s", husb->hdev->name);
405 for (i = 0; i < 4; i++) {
409 /* Kill pending requests */
410 while ((_urb = _urb_dequeue(&husb->pending_q[i]))) {
412 BT_DBG("%s unlinking _urb %p type %d urb %p",
413 husb->hdev->name, _urb, _urb->type, urb);
415 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
418 /* Release completed requests */
419 while ((_urb = _urb_dequeue(&husb->completed_q[i]))) {
421 BT_DBG("%s freeing _urb %p type %d urb %p",
422 husb->hdev->name, _urb, _urb->type, urb);
423 kfree(urb->setup_packet);
424 kfree(urb->transfer_buffer);
428 /* Release reassembly buffers */
429 if (husb->reassembly[i]) {
430 kfree_skb(husb->reassembly[i]);
431 husb->reassembly[i] = NULL;
437 static int hci_usb_close(struct hci_dev *hdev)
439 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
442 if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags))
445 BT_DBG("%s", hdev->name);
447 /* Synchronize with completion handlers */
448 write_lock_irqsave(&husb->completion_lock, flags);
449 write_unlock_irqrestore(&husb->completion_lock, flags);
451 hci_usb_unlink_urbs(husb);
456 static int __tx_submit(struct hci_usb *husb, struct _urb *_urb)
458 struct urb *urb = &_urb->urb;
461 BT_DBG("%s urb %p type %d", husb->hdev->name, urb, _urb->type);
463 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
464 err = usb_submit_urb(urb, GFP_ATOMIC);
466 BT_ERR("%s tx submit failed urb %p type %d err %d",
467 husb->hdev->name, urb, _urb->type, err);
469 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
471 atomic_inc(__pending_tx(husb, _urb->type));
476 static inline int hci_usb_send_ctrl(struct hci_usb *husb, struct sk_buff *skb)
478 struct _urb *_urb = __get_completed(husb, bt_cb(skb)->pkt_type);
479 struct usb_ctrlrequest *dr;
483 _urb = _urb_alloc(0, GFP_ATOMIC);
486 _urb->type = bt_cb(skb)->pkt_type;
488 dr = kmalloc(sizeof(*dr), GFP_ATOMIC);
494 dr = (void *) _urb->urb.setup_packet;
496 dr->bRequestType = husb->ctrl_req;
500 dr->wLength = __cpu_to_le16(skb->len);
503 usb_fill_control_urb(urb, husb->udev, usb_sndctrlpipe(husb->udev, 0),
504 (void *) dr, skb->data, skb->len, hci_usb_tx_complete, husb);
506 BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
509 return __tx_submit(husb, _urb);
512 static inline int hci_usb_send_bulk(struct hci_usb *husb, struct sk_buff *skb)
514 struct _urb *_urb = __get_completed(husb, bt_cb(skb)->pkt_type);
519 _urb = _urb_alloc(0, GFP_ATOMIC);
522 _urb->type = bt_cb(skb)->pkt_type;
526 pipe = usb_sndbulkpipe(husb->udev, husb->bulk_out_ep->desc.bEndpointAddress);
527 usb_fill_bulk_urb(urb, husb->udev, pipe, skb->data, skb->len,
528 hci_usb_tx_complete, husb);
529 urb->transfer_flags = URB_ZERO_PACKET;
531 BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
534 return __tx_submit(husb, _urb);
537 #ifdef CONFIG_BT_HCIUSB_SCO
538 static inline int hci_usb_send_isoc(struct hci_usb *husb, struct sk_buff *skb)
540 struct _urb *_urb = __get_completed(husb, bt_cb(skb)->pkt_type);
544 _urb = _urb_alloc(HCI_MAX_ISOC_FRAMES, GFP_ATOMIC);
547 _urb->type = bt_cb(skb)->pkt_type;
550 BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
555 urb->dev = husb->udev;
556 urb->pipe = usb_sndisocpipe(husb->udev, husb->isoc_out_ep->desc.bEndpointAddress);
557 urb->complete = hci_usb_tx_complete;
558 urb->transfer_flags = URB_ISO_ASAP;
560 urb->interval = husb->isoc_out_ep->desc.bInterval;
562 urb->transfer_buffer = skb->data;
563 urb->transfer_buffer_length = skb->len;
565 __fill_isoc_desc(urb, skb->len, le16_to_cpu(husb->isoc_out_ep->desc.wMaxPacketSize));
568 return __tx_submit(husb, _urb);
572 static void hci_usb_tx_process(struct hci_usb *husb)
574 struct sk_buff_head *q;
577 BT_DBG("%s", husb->hdev->name);
580 clear_bit(HCI_USB_TX_WAKEUP, &husb->state);
582 /* Process command queue */
583 q = __transmit_q(husb, HCI_COMMAND_PKT);
584 if (!atomic_read(__pending_tx(husb, HCI_COMMAND_PKT)) &&
585 (skb = skb_dequeue(q))) {
586 if (hci_usb_send_ctrl(husb, skb) < 0)
587 skb_queue_head(q, skb);
590 #ifdef CONFIG_BT_HCIUSB_SCO
591 /* Process SCO queue */
592 q = __transmit_q(husb, HCI_SCODATA_PKT);
593 if (atomic_read(__pending_tx(husb, HCI_SCODATA_PKT)) < HCI_MAX_ISOC_TX &&
594 (skb = skb_dequeue(q))) {
595 if (hci_usb_send_isoc(husb, skb) < 0)
596 skb_queue_head(q, skb);
600 /* Process ACL queue */
601 q = __transmit_q(husb, HCI_ACLDATA_PKT);
602 while (atomic_read(__pending_tx(husb, HCI_ACLDATA_PKT)) < HCI_MAX_BULK_TX &&
603 (skb = skb_dequeue(q))) {
604 if (hci_usb_send_bulk(husb, skb) < 0) {
605 skb_queue_head(q, skb);
609 } while(test_bit(HCI_USB_TX_WAKEUP, &husb->state));
612 static inline void hci_usb_tx_wakeup(struct hci_usb *husb)
614 /* Serialize TX queue processing to avoid data reordering */
615 if (!test_and_set_bit(HCI_USB_TX_PROCESS, &husb->state)) {
616 hci_usb_tx_process(husb);
617 clear_bit(HCI_USB_TX_PROCESS, &husb->state);
619 set_bit(HCI_USB_TX_WAKEUP, &husb->state);
622 /* Send frames from HCI layer */
623 static int hci_usb_send_frame(struct sk_buff *skb)
625 struct hci_dev *hdev = (struct hci_dev *) skb->dev;
626 struct hci_usb *husb;
629 BT_ERR("frame for uknown device (hdev=NULL)");
633 if (!test_bit(HCI_RUNNING, &hdev->flags))
636 BT_DBG("%s type %d len %d", hdev->name, bt_cb(skb)->pkt_type, skb->len);
638 husb = (struct hci_usb *) hdev->driver_data;
640 switch (bt_cb(skb)->pkt_type) {
641 case HCI_COMMAND_PKT:
645 case HCI_ACLDATA_PKT:
649 #ifdef CONFIG_BT_HCIUSB_SCO
650 case HCI_SCODATA_PKT:
660 read_lock(&husb->completion_lock);
662 skb_queue_tail(__transmit_q(husb, bt_cb(skb)->pkt_type), skb);
663 hci_usb_tx_wakeup(husb);
665 read_unlock(&husb->completion_lock);
669 static inline int __recv_frame(struct hci_usb *husb, int type, void *data, int count)
671 BT_DBG("%s type %d data %p count %d", husb->hdev->name, type, data, count);
673 husb->hdev->stat.byte_rx += count;
676 struct sk_buff *skb = __reassembly(husb, type);
677 struct { int expect; } *scb;
681 /* Start of the frame */
685 if (count >= HCI_EVENT_HDR_SIZE) {
686 struct hci_event_hdr *h = data;
687 len = HCI_EVENT_HDR_SIZE + h->plen;
692 case HCI_ACLDATA_PKT:
693 if (count >= HCI_ACL_HDR_SIZE) {
694 struct hci_acl_hdr *h = data;
695 len = HCI_ACL_HDR_SIZE + __le16_to_cpu(h->dlen);
699 #ifdef CONFIG_BT_HCIUSB_SCO
700 case HCI_SCODATA_PKT:
701 if (count >= HCI_SCO_HDR_SIZE) {
702 struct hci_sco_hdr *h = data;
703 len = HCI_SCO_HDR_SIZE + h->dlen;
709 BT_DBG("new packet len %d", len);
711 skb = bt_skb_alloc(len, GFP_ATOMIC);
713 BT_ERR("%s no memory for the packet", husb->hdev->name);
716 skb->dev = (void *) husb->hdev;
717 bt_cb(skb)->pkt_type = type;
719 __reassembly(husb, type) = skb;
721 scb = (void *) skb->cb;
725 scb = (void *) skb->cb;
729 len = min(len, count);
731 memcpy(skb_put(skb, len), data, len);
736 __reassembly(husb, type) = NULL;
737 bt_cb(skb)->pkt_type = type;
741 count -= len; data += len;
746 static void hci_usb_rx_complete(struct urb *urb)
748 struct _urb *_urb = container_of(urb, struct _urb, urb);
749 struct hci_usb *husb = (void *) urb->context;
750 struct hci_dev *hdev = husb->hdev;
751 int err, count = urb->actual_length;
753 BT_DBG("%s urb %p type %d status %d count %d flags %x", hdev->name, urb,
754 _urb->type, urb->status, count, urb->transfer_flags);
756 read_lock(&husb->completion_lock);
758 if (!test_bit(HCI_RUNNING, &hdev->flags))
761 if (urb->status || !count)
764 if (_urb->type == HCI_SCODATA_PKT) {
765 #ifdef CONFIG_BT_HCIUSB_SCO
767 for (i=0; i < urb->number_of_packets; i++) {
768 BT_DBG("desc %d status %d offset %d len %d", i,
769 urb->iso_frame_desc[i].status,
770 urb->iso_frame_desc[i].offset,
771 urb->iso_frame_desc[i].actual_length);
773 if (!urb->iso_frame_desc[i].status)
774 __recv_frame(husb, _urb->type,
775 urb->transfer_buffer + urb->iso_frame_desc[i].offset,
776 urb->iso_frame_desc[i].actual_length);
782 err = __recv_frame(husb, _urb->type, urb->transfer_buffer, count);
784 BT_ERR("%s corrupted packet: type %d count %d",
785 husb->hdev->name, _urb->type, count);
791 urb->dev = husb->udev;
792 err = usb_submit_urb(urb, GFP_ATOMIC);
793 BT_DBG("%s urb %p type %d resubmit status %d", hdev->name, urb,
797 read_unlock(&husb->completion_lock);
800 static void hci_usb_tx_complete(struct urb *urb)
802 struct _urb *_urb = container_of(urb, struct _urb, urb);
803 struct hci_usb *husb = (void *) urb->context;
804 struct hci_dev *hdev = husb->hdev;
806 BT_DBG("%s urb %p status %d flags %x", hdev->name, urb,
807 urb->status, urb->transfer_flags);
809 atomic_dec(__pending_tx(husb, _urb->type));
811 urb->transfer_buffer = NULL;
812 kfree_skb((struct sk_buff *) _urb->priv);
814 if (!test_bit(HCI_RUNNING, &hdev->flags))
818 hdev->stat.byte_tx += urb->transfer_buffer_length;
822 read_lock(&husb->completion_lock);
825 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
827 hci_usb_tx_wakeup(husb);
829 read_unlock(&husb->completion_lock);
832 static void hci_usb_destruct(struct hci_dev *hdev)
834 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
836 BT_DBG("%s", hdev->name);
841 static void hci_usb_notify(struct hci_dev *hdev, unsigned int evt)
843 BT_DBG("%s evt %d", hdev->name, evt);
846 static int hci_usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
848 struct usb_device *udev = interface_to_usbdev(intf);
849 struct usb_host_endpoint *bulk_out_ep = NULL;
850 struct usb_host_endpoint *bulk_in_ep = NULL;
851 struct usb_host_endpoint *intr_in_ep = NULL;
852 struct usb_host_endpoint *ep;
853 struct usb_host_interface *uif;
854 struct usb_interface *isoc_iface;
855 struct hci_usb *husb;
856 struct hci_dev *hdev;
857 int i, e, size, isoc_ifnum, isoc_alts;
859 BT_DBG("udev %p intf %p", udev, intf);
861 if (!id->driver_info) {
862 const struct usb_device_id *match;
863 match = usb_match_id(intf, blacklist_ids);
868 if (ignore || id->driver_info & HCI_IGNORE)
871 if (ignore_dga && id->driver_info & HCI_DIGIANSWER)
874 if (ignore_csr && id->driver_info & HCI_CSR)
877 if (ignore_sniffer && id->driver_info & HCI_SNIFFER)
880 if (intf->cur_altsetting->desc.bInterfaceNumber > 0)
883 /* Find endpoints that we need */
884 uif = intf->cur_altsetting;
885 for (e = 0; e < uif->desc.bNumEndpoints; e++) {
886 ep = &uif->endpoint[e];
888 switch (ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
889 case USB_ENDPOINT_XFER_INT:
890 if (ep->desc.bEndpointAddress & USB_DIR_IN)
894 case USB_ENDPOINT_XFER_BULK:
895 if (ep->desc.bEndpointAddress & USB_DIR_IN)
903 if (!bulk_in_ep || !bulk_out_ep || !intr_in_ep) {
904 BT_DBG("Bulk endpoints not found");
908 if (!(husb = kzalloc(sizeof(struct hci_usb), GFP_KERNEL))) {
909 BT_ERR("Can't allocate: control structure");
914 husb->bulk_out_ep = bulk_out_ep;
915 husb->bulk_in_ep = bulk_in_ep;
916 husb->intr_in_ep = intr_in_ep;
918 if (id->driver_info & HCI_DIGIANSWER)
919 husb->ctrl_req = USB_TYPE_VENDOR;
921 husb->ctrl_req = USB_TYPE_CLASS;
923 /* Find isochronous endpoints that we can use */
929 #ifdef CONFIG_BT_HCIUSB_SCO
930 if (isoc && !(id->driver_info & (HCI_BROKEN_ISOC | HCI_SNIFFER)))
931 isoc_iface = usb_ifnum_to_if(udev, isoc_ifnum);
935 struct usb_host_endpoint *isoc_out_ep = NULL;
936 struct usb_host_endpoint *isoc_in_ep = NULL;
938 for (a = 0; a < isoc_iface->num_altsetting; a++) {
939 uif = &isoc_iface->altsetting[a];
940 for (e = 0; e < uif->desc.bNumEndpoints; e++) {
941 ep = &uif->endpoint[e];
943 switch (ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
944 case USB_ENDPOINT_XFER_ISOC:
945 if (le16_to_cpu(ep->desc.wMaxPacketSize) < size ||
946 uif->desc.bAlternateSetting != isoc)
948 size = le16_to_cpu(ep->desc.wMaxPacketSize);
950 isoc_alts = uif->desc.bAlternateSetting;
952 if (ep->desc.bEndpointAddress & USB_DIR_IN)
961 if (!isoc_in_ep || !isoc_out_ep)
962 BT_DBG("Isoc endpoints not found");
964 BT_DBG("isoc ifnum %d alts %d", isoc_ifnum, isoc_alts);
965 if (usb_driver_claim_interface(&hci_usb_driver, isoc_iface, husb) != 0)
966 BT_ERR("Can't claim isoc interface");
967 else if (usb_set_interface(udev, isoc_ifnum, isoc_alts)) {
968 BT_ERR("Can't set isoc interface settings");
969 husb->isoc_iface = isoc_iface;
970 usb_driver_release_interface(&hci_usb_driver, isoc_iface);
971 husb->isoc_iface = NULL;
973 husb->isoc_iface = isoc_iface;
974 husb->isoc_in_ep = isoc_in_ep;
975 husb->isoc_out_ep = isoc_out_ep;
981 rwlock_init(&husb->completion_lock);
983 for (i = 0; i < 4; i++) {
984 skb_queue_head_init(&husb->transmit_q[i]);
985 _urb_queue_init(&husb->pending_q[i]);
986 _urb_queue_init(&husb->completed_q[i]);
989 /* Initialize and register HCI device */
990 hdev = hci_alloc_dev();
992 BT_ERR("Can't allocate HCI device");
998 hdev->type = HCI_USB;
999 hdev->driver_data = husb;
1000 SET_HCIDEV_DEV(hdev, &intf->dev);
1002 hdev->open = hci_usb_open;
1003 hdev->close = hci_usb_close;
1004 hdev->flush = hci_usb_flush;
1005 hdev->send = hci_usb_send_frame;
1006 hdev->destruct = hci_usb_destruct;
1007 hdev->notify = hci_usb_notify;
1009 hdev->owner = THIS_MODULE;
1011 if (reset || id->driver_info & HCI_RESET)
1012 set_bit(HCI_QUIRK_RESET_ON_INIT, &hdev->quirks);
1014 if (force_scofix || id->driver_info & HCI_WRONG_SCO_MTU) {
1015 if (!disable_scofix)
1016 set_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks);
1019 if (id->driver_info & HCI_SNIFFER) {
1020 if (le16_to_cpu(udev->descriptor.bcdDevice) > 0x997)
1021 set_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks);
1024 if (id->driver_info & HCI_BCM92035) {
1025 unsigned char cmd[] = { 0x3b, 0xfc, 0x01, 0x00 };
1026 struct sk_buff *skb;
1028 skb = bt_skb_alloc(sizeof(cmd), GFP_KERNEL);
1030 memcpy(skb_put(skb, sizeof(cmd)), cmd, sizeof(cmd));
1031 skb_queue_tail(&hdev->driver_init, skb);
1035 if (hci_register_dev(hdev) < 0) {
1036 BT_ERR("Can't register HCI device");
1041 usb_set_intfdata(intf, husb);
1045 if (husb->isoc_iface)
1046 usb_driver_release_interface(&hci_usb_driver, husb->isoc_iface);
1053 static void hci_usb_disconnect(struct usb_interface *intf)
1055 struct hci_usb *husb = usb_get_intfdata(intf);
1056 struct hci_dev *hdev;
1058 if (!husb || intf == husb->isoc_iface)
1061 usb_set_intfdata(intf, NULL);
1064 BT_DBG("%s", hdev->name);
1066 hci_usb_close(hdev);
1068 if (husb->isoc_iface)
1069 usb_driver_release_interface(&hci_usb_driver, husb->isoc_iface);
1071 if (hci_unregister_dev(hdev) < 0)
1072 BT_ERR("Can't unregister HCI device %s", hdev->name);
1077 static int hci_usb_suspend(struct usb_interface *intf, pm_message_t message)
1079 struct hci_usb *husb = usb_get_intfdata(intf);
1080 struct list_head killed;
1081 unsigned long flags;
1084 if (!husb || intf == husb->isoc_iface)
1087 hci_suspend_dev(husb->hdev);
1089 INIT_LIST_HEAD(&killed);
1091 for (i = 0; i < 4; i++) {
1092 struct _urb_queue *q = &husb->pending_q[i];
1093 struct _urb *_urb, *_tmp;
1095 while ((_urb = _urb_dequeue(q))) {
1096 /* reset queue since _urb_dequeue sets it to NULL */
1098 usb_kill_urb(&_urb->urb);
1099 list_add(&_urb->list, &killed);
1102 spin_lock_irqsave(&q->lock, flags);
1104 list_for_each_entry_safe(_urb, _tmp, &killed, list) {
1105 list_move_tail(&_urb->list, &q->head);
1108 spin_unlock_irqrestore(&q->lock, flags);
1114 static int hci_usb_resume(struct usb_interface *intf)
1116 struct hci_usb *husb = usb_get_intfdata(intf);
1117 unsigned long flags;
1120 if (!husb || intf == husb->isoc_iface)
1123 for (i = 0; i < 4; i++) {
1124 struct _urb_queue *q = &husb->pending_q[i];
1127 spin_lock_irqsave(&q->lock, flags);
1129 list_for_each_entry(_urb, &q->head, list) {
1130 err = usb_submit_urb(&_urb->urb, GFP_ATOMIC);
1135 spin_unlock_irqrestore(&q->lock, flags);
1141 hci_resume_dev(husb->hdev);
1146 static struct usb_driver hci_usb_driver = {
1148 .probe = hci_usb_probe,
1149 .disconnect = hci_usb_disconnect,
1150 .suspend = hci_usb_suspend,
1151 .resume = hci_usb_resume,
1152 .id_table = bluetooth_ids,
1155 static int __init hci_usb_init(void)
1159 BT_INFO("HCI USB driver ver %s", VERSION);
1161 if ((err = usb_register(&hci_usb_driver)) < 0)
1162 BT_ERR("Failed to register HCI USB driver");
1167 static void __exit hci_usb_exit(void)
1169 usb_deregister(&hci_usb_driver);
1172 module_init(hci_usb_init);
1173 module_exit(hci_usb_exit);
1175 module_param(ignore, bool, 0644);
1176 MODULE_PARM_DESC(ignore, "Ignore devices from the matching table");
1178 module_param(ignore_dga, bool, 0644);
1179 MODULE_PARM_DESC(ignore_dga, "Ignore devices with id 08fd:0001");
1181 module_param(ignore_csr, bool, 0644);
1182 MODULE_PARM_DESC(ignore_csr, "Ignore devices with id 0a12:0001");
1184 module_param(ignore_sniffer, bool, 0644);
1185 MODULE_PARM_DESC(ignore_sniffer, "Ignore devices with id 0a12:0002");
1187 module_param(disable_scofix, bool, 0644);
1188 MODULE_PARM_DESC(disable_scofix, "Disable fixup of wrong SCO buffer size");
1190 module_param(force_scofix, bool, 0644);
1191 MODULE_PARM_DESC(force_scofix, "Force fixup of wrong SCO buffers size");
1193 module_param(reset, bool, 0644);
1194 MODULE_PARM_DESC(reset, "Send HCI reset command on initialization");
1196 #ifdef CONFIG_BT_HCIUSB_SCO
1197 module_param(isoc, int, 0644);
1198 MODULE_PARM_DESC(isoc, "Set isochronous transfers for SCO over HCI support");
1201 MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>, Marcel Holtmann <marcel@holtmann.org>");
1202 MODULE_DESCRIPTION("Bluetooth HCI USB driver ver " VERSION);
1203 MODULE_VERSION(VERSION);
1204 MODULE_LICENSE("GPL");