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 },
121 /* ANYCOM Bluetooth USB-200 and USB-250 */
122 { USB_DEVICE(0x0a5c, 0x2111), .driver_info = HCI_RESET },
124 /* Microsoft Wireless Transceiver for Bluetooth 2.0 */
125 { USB_DEVICE(0x045e, 0x009c), .driver_info = HCI_RESET },
127 /* Kensington Bluetooth USB adapter */
128 { USB_DEVICE(0x047d, 0x105d), .driver_info = HCI_RESET },
129 { USB_DEVICE(0x047d, 0x105e), .driver_info = HCI_WRONG_SCO_MTU },
131 /* ISSC Bluetooth Adapter v3.1 */
132 { USB_DEVICE(0x1131, 0x1001), .driver_info = HCI_RESET },
134 /* RTX Telecom based adapters with buggy SCO support */
135 { USB_DEVICE(0x0400, 0x0807), .driver_info = HCI_BROKEN_ISOC },
136 { USB_DEVICE(0x0400, 0x080a), .driver_info = HCI_BROKEN_ISOC },
138 /* Belkin F8T012 and F8T013 devices */
139 { USB_DEVICE(0x050d, 0x0012), .driver_info = HCI_WRONG_SCO_MTU },
140 { USB_DEVICE(0x050d, 0x0013), .driver_info = HCI_WRONG_SCO_MTU },
142 /* Digianswer devices */
143 { USB_DEVICE(0x08fd, 0x0001), .driver_info = HCI_DIGIANSWER },
144 { USB_DEVICE(0x08fd, 0x0002), .driver_info = HCI_IGNORE },
146 /* CSR BlueCore Bluetooth Sniffer */
147 { USB_DEVICE(0x0a12, 0x0002), .driver_info = HCI_SNIFFER },
149 /* Frontline ComProbe Bluetooth Sniffer */
150 { USB_DEVICE(0x16d3, 0x0002), .driver_info = HCI_SNIFFER },
152 { } /* Terminating entry */
155 static struct _urb *_urb_alloc(int isoc, gfp_t gfp)
157 struct _urb *_urb = kmalloc(sizeof(struct _urb) +
158 sizeof(struct usb_iso_packet_descriptor) * isoc, gfp);
160 memset(_urb, 0, sizeof(*_urb));
161 usb_init_urb(&_urb->urb);
166 static struct _urb *_urb_dequeue(struct _urb_queue *q)
168 struct _urb *_urb = NULL;
170 spin_lock_irqsave(&q->lock, flags);
172 struct list_head *head = &q->head;
173 struct list_head *next = head->next;
175 _urb = list_entry(next, struct _urb, list);
176 list_del(next); _urb->queue = NULL;
179 spin_unlock_irqrestore(&q->lock, flags);
183 static void hci_usb_rx_complete(struct urb *urb);
184 static void hci_usb_tx_complete(struct urb *urb);
186 #define __pending_tx(husb, type) (&husb->pending_tx[type-1])
187 #define __pending_q(husb, type) (&husb->pending_q[type-1])
188 #define __completed_q(husb, type) (&husb->completed_q[type-1])
189 #define __transmit_q(husb, type) (&husb->transmit_q[type-1])
190 #define __reassembly(husb, type) (husb->reassembly[type-1])
192 static inline struct _urb *__get_completed(struct hci_usb *husb, int type)
194 return _urb_dequeue(__completed_q(husb, type));
197 #ifdef CONFIG_BT_HCIUSB_SCO
198 static void __fill_isoc_desc(struct urb *urb, int len, int mtu)
202 BT_DBG("len %d mtu %d", len, mtu);
204 for (i=0; i < HCI_MAX_ISOC_FRAMES && len >= mtu; i++, offset += mtu, len -= mtu) {
205 urb->iso_frame_desc[i].offset = offset;
206 urb->iso_frame_desc[i].length = mtu;
207 BT_DBG("desc %d offset %d len %d", i, offset, mtu);
209 if (len && i < HCI_MAX_ISOC_FRAMES) {
210 urb->iso_frame_desc[i].offset = offset;
211 urb->iso_frame_desc[i].length = len;
212 BT_DBG("desc %d offset %d len %d", i, offset, len);
215 urb->number_of_packets = i;
219 static int hci_usb_intr_rx_submit(struct hci_usb *husb)
223 int err, pipe, interval, size;
226 BT_DBG("%s", husb->hdev->name);
228 size = le16_to_cpu(husb->intr_in_ep->desc.wMaxPacketSize);
230 buf = kmalloc(size, GFP_ATOMIC);
234 _urb = _urb_alloc(0, GFP_ATOMIC);
239 _urb->type = HCI_EVENT_PKT;
240 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
243 pipe = usb_rcvintpipe(husb->udev, husb->intr_in_ep->desc.bEndpointAddress);
244 interval = husb->intr_in_ep->desc.bInterval;
245 usb_fill_int_urb(urb, husb->udev, pipe, buf, size, hci_usb_rx_complete, husb, interval);
247 err = usb_submit_urb(urb, GFP_ATOMIC);
249 BT_ERR("%s intr rx submit failed urb %p err %d",
250 husb->hdev->name, urb, err);
258 static int hci_usb_bulk_rx_submit(struct hci_usb *husb)
262 int err, pipe, size = HCI_MAX_FRAME_SIZE;
265 buf = kmalloc(size, GFP_ATOMIC);
269 _urb = _urb_alloc(0, GFP_ATOMIC);
274 _urb->type = HCI_ACLDATA_PKT;
275 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
278 pipe = usb_rcvbulkpipe(husb->udev, husb->bulk_in_ep->desc.bEndpointAddress);
279 usb_fill_bulk_urb(urb, husb->udev, pipe, buf, size, hci_usb_rx_complete, husb);
280 urb->transfer_flags = 0;
282 BT_DBG("%s urb %p", husb->hdev->name, urb);
284 err = usb_submit_urb(urb, GFP_ATOMIC);
286 BT_ERR("%s bulk rx submit failed urb %p err %d",
287 husb->hdev->name, urb, err);
295 #ifdef CONFIG_BT_HCIUSB_SCO
296 static int hci_usb_isoc_rx_submit(struct hci_usb *husb)
303 mtu = le16_to_cpu(husb->isoc_in_ep->desc.wMaxPacketSize);
304 size = mtu * HCI_MAX_ISOC_FRAMES;
306 buf = kmalloc(size, GFP_ATOMIC);
310 _urb = _urb_alloc(HCI_MAX_ISOC_FRAMES, GFP_ATOMIC);
315 _urb->type = HCI_SCODATA_PKT;
316 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
321 urb->dev = husb->udev;
322 urb->pipe = usb_rcvisocpipe(husb->udev, husb->isoc_in_ep->desc.bEndpointAddress);
323 urb->complete = hci_usb_rx_complete;
325 urb->interval = husb->isoc_in_ep->desc.bInterval;
327 urb->transfer_buffer_length = size;
328 urb->transfer_buffer = buf;
329 urb->transfer_flags = URB_ISO_ASAP;
331 __fill_isoc_desc(urb, size, mtu);
333 BT_DBG("%s urb %p", husb->hdev->name, urb);
335 err = usb_submit_urb(urb, GFP_ATOMIC);
337 BT_ERR("%s isoc rx submit failed urb %p err %d",
338 husb->hdev->name, urb, err);
347 /* Initialize device */
348 static int hci_usb_open(struct hci_dev *hdev)
350 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
354 BT_DBG("%s", hdev->name);
356 if (test_and_set_bit(HCI_RUNNING, &hdev->flags))
359 write_lock_irqsave(&husb->completion_lock, flags);
361 err = hci_usb_intr_rx_submit(husb);
363 for (i = 0; i < HCI_MAX_BULK_RX; i++)
364 hci_usb_bulk_rx_submit(husb);
366 #ifdef CONFIG_BT_HCIUSB_SCO
367 if (husb->isoc_iface)
368 for (i = 0; i < HCI_MAX_ISOC_RX; i++)
369 hci_usb_isoc_rx_submit(husb);
372 clear_bit(HCI_RUNNING, &hdev->flags);
375 write_unlock_irqrestore(&husb->completion_lock, flags);
380 static int hci_usb_flush(struct hci_dev *hdev)
382 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
385 BT_DBG("%s", hdev->name);
387 for (i = 0; i < 4; i++)
388 skb_queue_purge(&husb->transmit_q[i]);
392 static void hci_usb_unlink_urbs(struct hci_usb *husb)
396 BT_DBG("%s", husb->hdev->name);
398 for (i = 0; i < 4; i++) {
402 /* Kill pending requests */
403 while ((_urb = _urb_dequeue(&husb->pending_q[i]))) {
405 BT_DBG("%s unlinking _urb %p type %d urb %p",
406 husb->hdev->name, _urb, _urb->type, urb);
408 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
411 /* Release completed requests */
412 while ((_urb = _urb_dequeue(&husb->completed_q[i]))) {
414 BT_DBG("%s freeing _urb %p type %d urb %p",
415 husb->hdev->name, _urb, _urb->type, urb);
416 kfree(urb->setup_packet);
417 kfree(urb->transfer_buffer);
421 /* Release reassembly buffers */
422 if (husb->reassembly[i]) {
423 kfree_skb(husb->reassembly[i]);
424 husb->reassembly[i] = NULL;
430 static int hci_usb_close(struct hci_dev *hdev)
432 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
435 if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags))
438 BT_DBG("%s", hdev->name);
440 /* Synchronize with completion handlers */
441 write_lock_irqsave(&husb->completion_lock, flags);
442 write_unlock_irqrestore(&husb->completion_lock, flags);
444 hci_usb_unlink_urbs(husb);
449 static int __tx_submit(struct hci_usb *husb, struct _urb *_urb)
451 struct urb *urb = &_urb->urb;
454 BT_DBG("%s urb %p type %d", husb->hdev->name, urb, _urb->type);
456 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
457 err = usb_submit_urb(urb, GFP_ATOMIC);
459 BT_ERR("%s tx submit failed urb %p type %d err %d",
460 husb->hdev->name, urb, _urb->type, err);
462 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
464 atomic_inc(__pending_tx(husb, _urb->type));
469 static inline int hci_usb_send_ctrl(struct hci_usb *husb, struct sk_buff *skb)
471 struct _urb *_urb = __get_completed(husb, bt_cb(skb)->pkt_type);
472 struct usb_ctrlrequest *dr;
476 _urb = _urb_alloc(0, GFP_ATOMIC);
479 _urb->type = bt_cb(skb)->pkt_type;
481 dr = kmalloc(sizeof(*dr), GFP_ATOMIC);
487 dr = (void *) _urb->urb.setup_packet;
489 dr->bRequestType = husb->ctrl_req;
493 dr->wLength = __cpu_to_le16(skb->len);
496 usb_fill_control_urb(urb, husb->udev, usb_sndctrlpipe(husb->udev, 0),
497 (void *) dr, skb->data, skb->len, hci_usb_tx_complete, husb);
499 BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
502 return __tx_submit(husb, _urb);
505 static inline int hci_usb_send_bulk(struct hci_usb *husb, struct sk_buff *skb)
507 struct _urb *_urb = __get_completed(husb, bt_cb(skb)->pkt_type);
512 _urb = _urb_alloc(0, GFP_ATOMIC);
515 _urb->type = bt_cb(skb)->pkt_type;
519 pipe = usb_sndbulkpipe(husb->udev, husb->bulk_out_ep->desc.bEndpointAddress);
520 usb_fill_bulk_urb(urb, husb->udev, pipe, skb->data, skb->len,
521 hci_usb_tx_complete, husb);
522 urb->transfer_flags = URB_ZERO_PACKET;
524 BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
527 return __tx_submit(husb, _urb);
530 #ifdef CONFIG_BT_HCIUSB_SCO
531 static inline int hci_usb_send_isoc(struct hci_usb *husb, struct sk_buff *skb)
533 struct _urb *_urb = __get_completed(husb, bt_cb(skb)->pkt_type);
537 _urb = _urb_alloc(HCI_MAX_ISOC_FRAMES, GFP_ATOMIC);
540 _urb->type = bt_cb(skb)->pkt_type;
543 BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
548 urb->dev = husb->udev;
549 urb->pipe = usb_sndisocpipe(husb->udev, husb->isoc_out_ep->desc.bEndpointAddress);
550 urb->complete = hci_usb_tx_complete;
551 urb->transfer_flags = URB_ISO_ASAP;
553 urb->interval = husb->isoc_out_ep->desc.bInterval;
555 urb->transfer_buffer = skb->data;
556 urb->transfer_buffer_length = skb->len;
558 __fill_isoc_desc(urb, skb->len, le16_to_cpu(husb->isoc_out_ep->desc.wMaxPacketSize));
561 return __tx_submit(husb, _urb);
565 static void hci_usb_tx_process(struct hci_usb *husb)
567 struct sk_buff_head *q;
570 BT_DBG("%s", husb->hdev->name);
573 clear_bit(HCI_USB_TX_WAKEUP, &husb->state);
575 /* Process command queue */
576 q = __transmit_q(husb, HCI_COMMAND_PKT);
577 if (!atomic_read(__pending_tx(husb, HCI_COMMAND_PKT)) &&
578 (skb = skb_dequeue(q))) {
579 if (hci_usb_send_ctrl(husb, skb) < 0)
580 skb_queue_head(q, skb);
583 #ifdef CONFIG_BT_HCIUSB_SCO
584 /* Process SCO queue */
585 q = __transmit_q(husb, HCI_SCODATA_PKT);
586 if (atomic_read(__pending_tx(husb, HCI_SCODATA_PKT)) < HCI_MAX_ISOC_TX &&
587 (skb = skb_dequeue(q))) {
588 if (hci_usb_send_isoc(husb, skb) < 0)
589 skb_queue_head(q, skb);
593 /* Process ACL queue */
594 q = __transmit_q(husb, HCI_ACLDATA_PKT);
595 while (atomic_read(__pending_tx(husb, HCI_ACLDATA_PKT)) < HCI_MAX_BULK_TX &&
596 (skb = skb_dequeue(q))) {
597 if (hci_usb_send_bulk(husb, skb) < 0) {
598 skb_queue_head(q, skb);
602 } while(test_bit(HCI_USB_TX_WAKEUP, &husb->state));
605 static inline void hci_usb_tx_wakeup(struct hci_usb *husb)
607 /* Serialize TX queue processing to avoid data reordering */
608 if (!test_and_set_bit(HCI_USB_TX_PROCESS, &husb->state)) {
609 hci_usb_tx_process(husb);
610 clear_bit(HCI_USB_TX_PROCESS, &husb->state);
612 set_bit(HCI_USB_TX_WAKEUP, &husb->state);
615 /* Send frames from HCI layer */
616 static int hci_usb_send_frame(struct sk_buff *skb)
618 struct hci_dev *hdev = (struct hci_dev *) skb->dev;
619 struct hci_usb *husb;
622 BT_ERR("frame for uknown device (hdev=NULL)");
626 if (!test_bit(HCI_RUNNING, &hdev->flags))
629 BT_DBG("%s type %d len %d", hdev->name, bt_cb(skb)->pkt_type, skb->len);
631 husb = (struct hci_usb *) hdev->driver_data;
633 switch (bt_cb(skb)->pkt_type) {
634 case HCI_COMMAND_PKT:
638 case HCI_ACLDATA_PKT:
642 #ifdef CONFIG_BT_HCIUSB_SCO
643 case HCI_SCODATA_PKT:
653 read_lock(&husb->completion_lock);
655 skb_queue_tail(__transmit_q(husb, bt_cb(skb)->pkt_type), skb);
656 hci_usb_tx_wakeup(husb);
658 read_unlock(&husb->completion_lock);
662 static inline int __recv_frame(struct hci_usb *husb, int type, void *data, int count)
664 BT_DBG("%s type %d data %p count %d", husb->hdev->name, type, data, count);
666 husb->hdev->stat.byte_rx += count;
669 struct sk_buff *skb = __reassembly(husb, type);
670 struct { int expect; } *scb;
674 /* Start of the frame */
678 if (count >= HCI_EVENT_HDR_SIZE) {
679 struct hci_event_hdr *h = data;
680 len = HCI_EVENT_HDR_SIZE + h->plen;
685 case HCI_ACLDATA_PKT:
686 if (count >= HCI_ACL_HDR_SIZE) {
687 struct hci_acl_hdr *h = data;
688 len = HCI_ACL_HDR_SIZE + __le16_to_cpu(h->dlen);
692 #ifdef CONFIG_BT_HCIUSB_SCO
693 case HCI_SCODATA_PKT:
694 if (count >= HCI_SCO_HDR_SIZE) {
695 struct hci_sco_hdr *h = data;
696 len = HCI_SCO_HDR_SIZE + h->dlen;
702 BT_DBG("new packet len %d", len);
704 skb = bt_skb_alloc(len, GFP_ATOMIC);
706 BT_ERR("%s no memory for the packet", husb->hdev->name);
709 skb->dev = (void *) husb->hdev;
710 bt_cb(skb)->pkt_type = type;
712 __reassembly(husb, type) = skb;
714 scb = (void *) skb->cb;
718 scb = (void *) skb->cb;
722 len = min(len, count);
724 memcpy(skb_put(skb, len), data, len);
729 __reassembly(husb, type) = NULL;
730 bt_cb(skb)->pkt_type = type;
734 count -= len; data += len;
739 static void hci_usb_rx_complete(struct urb *urb)
741 struct _urb *_urb = container_of(urb, struct _urb, urb);
742 struct hci_usb *husb = (void *) urb->context;
743 struct hci_dev *hdev = husb->hdev;
744 int err, count = urb->actual_length;
746 BT_DBG("%s urb %p type %d status %d count %d flags %x", hdev->name, urb,
747 _urb->type, urb->status, count, urb->transfer_flags);
749 read_lock(&husb->completion_lock);
751 if (!test_bit(HCI_RUNNING, &hdev->flags))
754 if (urb->status || !count)
757 if (_urb->type == HCI_SCODATA_PKT) {
758 #ifdef CONFIG_BT_HCIUSB_SCO
760 for (i=0; i < urb->number_of_packets; i++) {
761 BT_DBG("desc %d status %d offset %d len %d", i,
762 urb->iso_frame_desc[i].status,
763 urb->iso_frame_desc[i].offset,
764 urb->iso_frame_desc[i].actual_length);
766 if (!urb->iso_frame_desc[i].status)
767 __recv_frame(husb, _urb->type,
768 urb->transfer_buffer + urb->iso_frame_desc[i].offset,
769 urb->iso_frame_desc[i].actual_length);
775 err = __recv_frame(husb, _urb->type, urb->transfer_buffer, count);
777 BT_ERR("%s corrupted packet: type %d count %d",
778 husb->hdev->name, _urb->type, count);
784 urb->dev = husb->udev;
785 err = usb_submit_urb(urb, GFP_ATOMIC);
786 BT_DBG("%s urb %p type %d resubmit status %d", hdev->name, urb,
790 read_unlock(&husb->completion_lock);
793 static void hci_usb_tx_complete(struct urb *urb)
795 struct _urb *_urb = container_of(urb, struct _urb, urb);
796 struct hci_usb *husb = (void *) urb->context;
797 struct hci_dev *hdev = husb->hdev;
799 BT_DBG("%s urb %p status %d flags %x", hdev->name, urb,
800 urb->status, urb->transfer_flags);
802 atomic_dec(__pending_tx(husb, _urb->type));
804 urb->transfer_buffer = NULL;
805 kfree_skb((struct sk_buff *) _urb->priv);
807 if (!test_bit(HCI_RUNNING, &hdev->flags))
811 hdev->stat.byte_tx += urb->transfer_buffer_length;
815 read_lock(&husb->completion_lock);
818 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
820 hci_usb_tx_wakeup(husb);
822 read_unlock(&husb->completion_lock);
825 static void hci_usb_destruct(struct hci_dev *hdev)
827 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
829 BT_DBG("%s", hdev->name);
834 static void hci_usb_notify(struct hci_dev *hdev, unsigned int evt)
836 BT_DBG("%s evt %d", hdev->name, evt);
839 static int hci_usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
841 struct usb_device *udev = interface_to_usbdev(intf);
842 struct usb_host_endpoint *bulk_out_ep = NULL;
843 struct usb_host_endpoint *bulk_in_ep = NULL;
844 struct usb_host_endpoint *intr_in_ep = NULL;
845 struct usb_host_endpoint *ep;
846 struct usb_host_interface *uif;
847 struct usb_interface *isoc_iface;
848 struct hci_usb *husb;
849 struct hci_dev *hdev;
850 int i, e, size, isoc_ifnum, isoc_alts;
852 BT_DBG("udev %p intf %p", udev, intf);
854 if (!id->driver_info) {
855 const struct usb_device_id *match;
856 match = usb_match_id(intf, blacklist_ids);
861 if (ignore || id->driver_info & HCI_IGNORE)
864 if (ignore_dga && id->driver_info & HCI_DIGIANSWER)
867 if (ignore_csr && id->driver_info & HCI_CSR)
870 if (ignore_sniffer && id->driver_info & HCI_SNIFFER)
873 if (intf->cur_altsetting->desc.bInterfaceNumber > 0)
876 /* Find endpoints that we need */
877 uif = intf->cur_altsetting;
878 for (e = 0; e < uif->desc.bNumEndpoints; e++) {
879 ep = &uif->endpoint[e];
881 switch (ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
882 case USB_ENDPOINT_XFER_INT:
883 if (ep->desc.bEndpointAddress & USB_DIR_IN)
887 case USB_ENDPOINT_XFER_BULK:
888 if (ep->desc.bEndpointAddress & USB_DIR_IN)
896 if (!bulk_in_ep || !bulk_out_ep || !intr_in_ep) {
897 BT_DBG("Bulk endpoints not found");
901 if (!(husb = kzalloc(sizeof(struct hci_usb), GFP_KERNEL))) {
902 BT_ERR("Can't allocate: control structure");
907 husb->bulk_out_ep = bulk_out_ep;
908 husb->bulk_in_ep = bulk_in_ep;
909 husb->intr_in_ep = intr_in_ep;
911 if (id->driver_info & HCI_DIGIANSWER)
912 husb->ctrl_req = USB_TYPE_VENDOR;
914 husb->ctrl_req = USB_TYPE_CLASS;
916 /* Find isochronous endpoints that we can use */
922 #ifdef CONFIG_BT_HCIUSB_SCO
923 if (isoc && !(id->driver_info & (HCI_BROKEN_ISOC | HCI_SNIFFER)))
924 isoc_iface = usb_ifnum_to_if(udev, isoc_ifnum);
928 struct usb_host_endpoint *isoc_out_ep = NULL;
929 struct usb_host_endpoint *isoc_in_ep = NULL;
931 for (a = 0; a < isoc_iface->num_altsetting; a++) {
932 uif = &isoc_iface->altsetting[a];
933 for (e = 0; e < uif->desc.bNumEndpoints; e++) {
934 ep = &uif->endpoint[e];
936 switch (ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
937 case USB_ENDPOINT_XFER_ISOC:
938 if (le16_to_cpu(ep->desc.wMaxPacketSize) < size ||
939 uif->desc.bAlternateSetting != isoc)
941 size = le16_to_cpu(ep->desc.wMaxPacketSize);
943 isoc_alts = uif->desc.bAlternateSetting;
945 if (ep->desc.bEndpointAddress & USB_DIR_IN)
954 if (!isoc_in_ep || !isoc_out_ep)
955 BT_DBG("Isoc endpoints not found");
957 BT_DBG("isoc ifnum %d alts %d", isoc_ifnum, isoc_alts);
958 if (usb_driver_claim_interface(&hci_usb_driver, isoc_iface, husb) != 0)
959 BT_ERR("Can't claim isoc interface");
960 else if (usb_set_interface(udev, isoc_ifnum, isoc_alts)) {
961 BT_ERR("Can't set isoc interface settings");
962 husb->isoc_iface = isoc_iface;
963 usb_driver_release_interface(&hci_usb_driver, isoc_iface);
964 husb->isoc_iface = NULL;
966 husb->isoc_iface = isoc_iface;
967 husb->isoc_in_ep = isoc_in_ep;
968 husb->isoc_out_ep = isoc_out_ep;
974 rwlock_init(&husb->completion_lock);
976 for (i = 0; i < 4; i++) {
977 skb_queue_head_init(&husb->transmit_q[i]);
978 _urb_queue_init(&husb->pending_q[i]);
979 _urb_queue_init(&husb->completed_q[i]);
982 /* Initialize and register HCI device */
983 hdev = hci_alloc_dev();
985 BT_ERR("Can't allocate HCI device");
991 hdev->type = HCI_USB;
992 hdev->driver_data = husb;
993 SET_HCIDEV_DEV(hdev, &intf->dev);
995 hdev->open = hci_usb_open;
996 hdev->close = hci_usb_close;
997 hdev->flush = hci_usb_flush;
998 hdev->send = hci_usb_send_frame;
999 hdev->destruct = hci_usb_destruct;
1000 hdev->notify = hci_usb_notify;
1002 hdev->owner = THIS_MODULE;
1004 if (reset || id->driver_info & HCI_RESET)
1005 set_bit(HCI_QUIRK_RESET_ON_INIT, &hdev->quirks);
1007 if (force_scofix || id->driver_info & HCI_WRONG_SCO_MTU) {
1008 if (!disable_scofix)
1009 set_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks);
1012 if (id->driver_info & HCI_SNIFFER) {
1013 if (le16_to_cpu(udev->descriptor.bcdDevice) > 0x997)
1014 set_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks);
1017 if (id->driver_info & HCI_BCM92035) {
1018 unsigned char cmd[] = { 0x3b, 0xfc, 0x01, 0x00 };
1019 struct sk_buff *skb;
1021 skb = bt_skb_alloc(sizeof(cmd), GFP_KERNEL);
1023 memcpy(skb_put(skb, sizeof(cmd)), cmd, sizeof(cmd));
1024 skb_queue_tail(&hdev->driver_init, skb);
1028 if (hci_register_dev(hdev) < 0) {
1029 BT_ERR("Can't register HCI device");
1034 usb_set_intfdata(intf, husb);
1038 if (husb->isoc_iface)
1039 usb_driver_release_interface(&hci_usb_driver, husb->isoc_iface);
1046 static void hci_usb_disconnect(struct usb_interface *intf)
1048 struct hci_usb *husb = usb_get_intfdata(intf);
1049 struct hci_dev *hdev;
1051 if (!husb || intf == husb->isoc_iface)
1054 usb_set_intfdata(intf, NULL);
1057 BT_DBG("%s", hdev->name);
1059 hci_usb_close(hdev);
1061 if (husb->isoc_iface)
1062 usb_driver_release_interface(&hci_usb_driver, husb->isoc_iface);
1064 if (hci_unregister_dev(hdev) < 0)
1065 BT_ERR("Can't unregister HCI device %s", hdev->name);
1070 static int hci_usb_suspend(struct usb_interface *intf, pm_message_t message)
1072 struct hci_usb *husb = usb_get_intfdata(intf);
1073 struct list_head killed;
1074 unsigned long flags;
1077 if (!husb || intf == husb->isoc_iface)
1080 hci_suspend_dev(husb->hdev);
1082 INIT_LIST_HEAD(&killed);
1084 for (i = 0; i < 4; i++) {
1085 struct _urb_queue *q = &husb->pending_q[i];
1086 struct _urb *_urb, *_tmp;
1088 while ((_urb = _urb_dequeue(q))) {
1089 /* reset queue since _urb_dequeue sets it to NULL */
1091 usb_kill_urb(&_urb->urb);
1092 list_add(&_urb->list, &killed);
1095 spin_lock_irqsave(&q->lock, flags);
1097 list_for_each_entry_safe(_urb, _tmp, &killed, list) {
1098 list_move_tail(&_urb->list, &q->head);
1101 spin_unlock_irqrestore(&q->lock, flags);
1107 static int hci_usb_resume(struct usb_interface *intf)
1109 struct hci_usb *husb = usb_get_intfdata(intf);
1110 unsigned long flags;
1113 if (!husb || intf == husb->isoc_iface)
1116 for (i = 0; i < 4; i++) {
1117 struct _urb_queue *q = &husb->pending_q[i];
1120 spin_lock_irqsave(&q->lock, flags);
1122 list_for_each_entry(_urb, &q->head, list) {
1123 err = usb_submit_urb(&_urb->urb, GFP_ATOMIC);
1128 spin_unlock_irqrestore(&q->lock, flags);
1134 hci_resume_dev(husb->hdev);
1139 static struct usb_driver hci_usb_driver = {
1141 .probe = hci_usb_probe,
1142 .disconnect = hci_usb_disconnect,
1143 .suspend = hci_usb_suspend,
1144 .resume = hci_usb_resume,
1145 .id_table = bluetooth_ids,
1148 static int __init hci_usb_init(void)
1152 BT_INFO("HCI USB driver ver %s", VERSION);
1154 if ((err = usb_register(&hci_usb_driver)) < 0)
1155 BT_ERR("Failed to register HCI USB driver");
1160 static void __exit hci_usb_exit(void)
1162 usb_deregister(&hci_usb_driver);
1165 module_init(hci_usb_init);
1166 module_exit(hci_usb_exit);
1168 module_param(ignore, bool, 0644);
1169 MODULE_PARM_DESC(ignore, "Ignore devices from the matching table");
1171 module_param(ignore_dga, bool, 0644);
1172 MODULE_PARM_DESC(ignore_dga, "Ignore devices with id 08fd:0001");
1174 module_param(ignore_csr, bool, 0644);
1175 MODULE_PARM_DESC(ignore_csr, "Ignore devices with id 0a12:0001");
1177 module_param(ignore_sniffer, bool, 0644);
1178 MODULE_PARM_DESC(ignore_sniffer, "Ignore devices with id 0a12:0002");
1180 module_param(disable_scofix, bool, 0644);
1181 MODULE_PARM_DESC(disable_scofix, "Disable fixup of wrong SCO buffer size");
1183 module_param(force_scofix, bool, 0644);
1184 MODULE_PARM_DESC(force_scofix, "Force fixup of wrong SCO buffers size");
1186 module_param(reset, bool, 0644);
1187 MODULE_PARM_DESC(reset, "Send HCI reset command on initialization");
1189 #ifdef CONFIG_BT_HCIUSB_SCO
1190 module_param(isoc, int, 0644);
1191 MODULE_PARM_DESC(isoc, "Set isochronous transfers for SCO over HCI support");
1194 MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>, Marcel Holtmann <marcel@holtmann.org>");
1195 MODULE_DESCRIPTION("Bluetooth HCI USB driver ver " VERSION);
1196 MODULE_VERSION(VERSION);
1197 MODULE_LICENSE("GPL");