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 },
121 /* ANYCOM Bluetooth USB-200 and USB-250 */
122 { USB_DEVICE(0x0a5c, 0x2111), .driver_info = HCI_RESET },
124 /* HP laptop with Broadcom chip */
125 { USB_DEVICE(0x03f0, 0x171d), .driver_info = HCI_WRONG_SCO_MTU },
127 /* Dell laptop with Broadcom chip */
128 { USB_DEVICE(0x413c, 0x8126), .driver_info = HCI_WRONG_SCO_MTU },
130 /* Microsoft Wireless Transceiver for Bluetooth 2.0 */
131 { USB_DEVICE(0x045e, 0x009c), .driver_info = HCI_RESET },
133 /* Kensington Bluetooth USB adapter */
134 { USB_DEVICE(0x047d, 0x105d), .driver_info = HCI_RESET },
135 { USB_DEVICE(0x047d, 0x105e), .driver_info = HCI_WRONG_SCO_MTU },
137 /* ISSC Bluetooth Adapter v3.1 */
138 { USB_DEVICE(0x1131, 0x1001), .driver_info = HCI_RESET },
140 /* RTX Telecom based adapters with buggy SCO support */
141 { USB_DEVICE(0x0400, 0x0807), .driver_info = HCI_BROKEN_ISOC },
142 { USB_DEVICE(0x0400, 0x080a), .driver_info = HCI_BROKEN_ISOC },
144 /* Belkin F8T012 and F8T013 devices */
145 { USB_DEVICE(0x050d, 0x0012), .driver_info = HCI_WRONG_SCO_MTU },
146 { USB_DEVICE(0x050d, 0x0013), .driver_info = HCI_WRONG_SCO_MTU },
148 /* Digianswer devices */
149 { USB_DEVICE(0x08fd, 0x0001), .driver_info = HCI_DIGIANSWER },
150 { USB_DEVICE(0x08fd, 0x0002), .driver_info = HCI_IGNORE },
152 /* CSR BlueCore Bluetooth Sniffer */
153 { USB_DEVICE(0x0a12, 0x0002), .driver_info = HCI_SNIFFER },
155 /* Frontline ComProbe Bluetooth Sniffer */
156 { USB_DEVICE(0x16d3, 0x0002), .driver_info = HCI_SNIFFER },
158 { } /* Terminating entry */
161 static struct _urb *_urb_alloc(int isoc, gfp_t gfp)
163 struct _urb *_urb = kmalloc(sizeof(struct _urb) +
164 sizeof(struct usb_iso_packet_descriptor) * isoc, gfp);
166 memset(_urb, 0, sizeof(*_urb));
167 usb_init_urb(&_urb->urb);
172 static struct _urb *_urb_dequeue(struct _urb_queue *q)
174 struct _urb *_urb = NULL;
176 spin_lock_irqsave(&q->lock, flags);
178 struct list_head *head = &q->head;
179 struct list_head *next = head->next;
181 _urb = list_entry(next, struct _urb, list);
182 list_del(next); _urb->queue = NULL;
185 spin_unlock_irqrestore(&q->lock, flags);
189 static void hci_usb_rx_complete(struct urb *urb);
190 static void hci_usb_tx_complete(struct urb *urb);
192 #define __pending_tx(husb, type) (&husb->pending_tx[type-1])
193 #define __pending_q(husb, type) (&husb->pending_q[type-1])
194 #define __completed_q(husb, type) (&husb->completed_q[type-1])
195 #define __transmit_q(husb, type) (&husb->transmit_q[type-1])
196 #define __reassembly(husb, type) (husb->reassembly[type-1])
198 static inline struct _urb *__get_completed(struct hci_usb *husb, int type)
200 return _urb_dequeue(__completed_q(husb, type));
203 #ifdef CONFIG_BT_HCIUSB_SCO
204 static void __fill_isoc_desc(struct urb *urb, int len, int mtu)
208 BT_DBG("len %d mtu %d", len, mtu);
210 for (i=0; i < HCI_MAX_ISOC_FRAMES && len >= mtu; i++, offset += mtu, len -= mtu) {
211 urb->iso_frame_desc[i].offset = offset;
212 urb->iso_frame_desc[i].length = mtu;
213 BT_DBG("desc %d offset %d len %d", i, offset, mtu);
215 if (len && i < HCI_MAX_ISOC_FRAMES) {
216 urb->iso_frame_desc[i].offset = offset;
217 urb->iso_frame_desc[i].length = len;
218 BT_DBG("desc %d offset %d len %d", i, offset, len);
221 urb->number_of_packets = i;
225 static int hci_usb_intr_rx_submit(struct hci_usb *husb)
229 int err, pipe, interval, size;
232 BT_DBG("%s", husb->hdev->name);
234 size = le16_to_cpu(husb->intr_in_ep->desc.wMaxPacketSize);
236 buf = kmalloc(size, GFP_ATOMIC);
240 _urb = _urb_alloc(0, GFP_ATOMIC);
245 _urb->type = HCI_EVENT_PKT;
246 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
249 pipe = usb_rcvintpipe(husb->udev, husb->intr_in_ep->desc.bEndpointAddress);
250 interval = husb->intr_in_ep->desc.bInterval;
251 usb_fill_int_urb(urb, husb->udev, pipe, buf, size, hci_usb_rx_complete, husb, interval);
253 err = usb_submit_urb(urb, GFP_ATOMIC);
255 BT_ERR("%s intr rx submit failed urb %p err %d",
256 husb->hdev->name, urb, err);
264 static int hci_usb_bulk_rx_submit(struct hci_usb *husb)
268 int err, pipe, size = HCI_MAX_FRAME_SIZE;
271 buf = kmalloc(size, GFP_ATOMIC);
275 _urb = _urb_alloc(0, GFP_ATOMIC);
280 _urb->type = HCI_ACLDATA_PKT;
281 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
284 pipe = usb_rcvbulkpipe(husb->udev, husb->bulk_in_ep->desc.bEndpointAddress);
285 usb_fill_bulk_urb(urb, husb->udev, pipe, buf, size, hci_usb_rx_complete, husb);
286 urb->transfer_flags = 0;
288 BT_DBG("%s urb %p", husb->hdev->name, urb);
290 err = usb_submit_urb(urb, GFP_ATOMIC);
292 BT_ERR("%s bulk rx submit failed urb %p err %d",
293 husb->hdev->name, urb, err);
301 #ifdef CONFIG_BT_HCIUSB_SCO
302 static int hci_usb_isoc_rx_submit(struct hci_usb *husb)
309 mtu = le16_to_cpu(husb->isoc_in_ep->desc.wMaxPacketSize);
310 size = mtu * HCI_MAX_ISOC_FRAMES;
312 buf = kmalloc(size, GFP_ATOMIC);
316 _urb = _urb_alloc(HCI_MAX_ISOC_FRAMES, GFP_ATOMIC);
321 _urb->type = HCI_SCODATA_PKT;
322 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
327 urb->dev = husb->udev;
328 urb->pipe = usb_rcvisocpipe(husb->udev, husb->isoc_in_ep->desc.bEndpointAddress);
329 urb->complete = hci_usb_rx_complete;
331 urb->interval = husb->isoc_in_ep->desc.bInterval;
333 urb->transfer_buffer_length = size;
334 urb->transfer_buffer = buf;
335 urb->transfer_flags = URB_ISO_ASAP;
337 __fill_isoc_desc(urb, size, mtu);
339 BT_DBG("%s urb %p", husb->hdev->name, urb);
341 err = usb_submit_urb(urb, GFP_ATOMIC);
343 BT_ERR("%s isoc rx submit failed urb %p err %d",
344 husb->hdev->name, urb, err);
353 /* Initialize device */
354 static int hci_usb_open(struct hci_dev *hdev)
356 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
360 BT_DBG("%s", hdev->name);
362 if (test_and_set_bit(HCI_RUNNING, &hdev->flags))
365 write_lock_irqsave(&husb->completion_lock, flags);
367 err = hci_usb_intr_rx_submit(husb);
369 for (i = 0; i < HCI_MAX_BULK_RX; i++)
370 hci_usb_bulk_rx_submit(husb);
372 #ifdef CONFIG_BT_HCIUSB_SCO
373 if (husb->isoc_iface)
374 for (i = 0; i < HCI_MAX_ISOC_RX; i++)
375 hci_usb_isoc_rx_submit(husb);
378 clear_bit(HCI_RUNNING, &hdev->flags);
381 write_unlock_irqrestore(&husb->completion_lock, flags);
386 static int hci_usb_flush(struct hci_dev *hdev)
388 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
391 BT_DBG("%s", hdev->name);
393 for (i = 0; i < 4; i++)
394 skb_queue_purge(&husb->transmit_q[i]);
398 static void hci_usb_unlink_urbs(struct hci_usb *husb)
402 BT_DBG("%s", husb->hdev->name);
404 for (i = 0; i < 4; i++) {
408 /* Kill pending requests */
409 while ((_urb = _urb_dequeue(&husb->pending_q[i]))) {
411 BT_DBG("%s unlinking _urb %p type %d urb %p",
412 husb->hdev->name, _urb, _urb->type, urb);
414 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
417 /* Release completed requests */
418 while ((_urb = _urb_dequeue(&husb->completed_q[i]))) {
420 BT_DBG("%s freeing _urb %p type %d urb %p",
421 husb->hdev->name, _urb, _urb->type, urb);
422 kfree(urb->setup_packet);
423 kfree(urb->transfer_buffer);
427 /* Release reassembly buffers */
428 if (husb->reassembly[i]) {
429 kfree_skb(husb->reassembly[i]);
430 husb->reassembly[i] = NULL;
436 static int hci_usb_close(struct hci_dev *hdev)
438 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
441 if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags))
444 BT_DBG("%s", hdev->name);
446 /* Synchronize with completion handlers */
447 write_lock_irqsave(&husb->completion_lock, flags);
448 write_unlock_irqrestore(&husb->completion_lock, flags);
450 hci_usb_unlink_urbs(husb);
455 static int __tx_submit(struct hci_usb *husb, struct _urb *_urb)
457 struct urb *urb = &_urb->urb;
460 BT_DBG("%s urb %p type %d", husb->hdev->name, urb, _urb->type);
462 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
463 err = usb_submit_urb(urb, GFP_ATOMIC);
465 BT_ERR("%s tx submit failed urb %p type %d err %d",
466 husb->hdev->name, urb, _urb->type, err);
468 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
470 atomic_inc(__pending_tx(husb, _urb->type));
475 static inline int hci_usb_send_ctrl(struct hci_usb *husb, struct sk_buff *skb)
477 struct _urb *_urb = __get_completed(husb, bt_cb(skb)->pkt_type);
478 struct usb_ctrlrequest *dr;
482 _urb = _urb_alloc(0, GFP_ATOMIC);
485 _urb->type = bt_cb(skb)->pkt_type;
487 dr = kmalloc(sizeof(*dr), GFP_ATOMIC);
493 dr = (void *) _urb->urb.setup_packet;
495 dr->bRequestType = husb->ctrl_req;
499 dr->wLength = __cpu_to_le16(skb->len);
502 usb_fill_control_urb(urb, husb->udev, usb_sndctrlpipe(husb->udev, 0),
503 (void *) dr, skb->data, skb->len, hci_usb_tx_complete, husb);
505 BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
508 return __tx_submit(husb, _urb);
511 static inline int hci_usb_send_bulk(struct hci_usb *husb, struct sk_buff *skb)
513 struct _urb *_urb = __get_completed(husb, bt_cb(skb)->pkt_type);
518 _urb = _urb_alloc(0, GFP_ATOMIC);
521 _urb->type = bt_cb(skb)->pkt_type;
525 pipe = usb_sndbulkpipe(husb->udev, husb->bulk_out_ep->desc.bEndpointAddress);
526 usb_fill_bulk_urb(urb, husb->udev, pipe, skb->data, skb->len,
527 hci_usb_tx_complete, husb);
528 urb->transfer_flags = URB_ZERO_PACKET;
530 BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
533 return __tx_submit(husb, _urb);
536 #ifdef CONFIG_BT_HCIUSB_SCO
537 static inline int hci_usb_send_isoc(struct hci_usb *husb, struct sk_buff *skb)
539 struct _urb *_urb = __get_completed(husb, bt_cb(skb)->pkt_type);
543 _urb = _urb_alloc(HCI_MAX_ISOC_FRAMES, GFP_ATOMIC);
546 _urb->type = bt_cb(skb)->pkt_type;
549 BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
554 urb->dev = husb->udev;
555 urb->pipe = usb_sndisocpipe(husb->udev, husb->isoc_out_ep->desc.bEndpointAddress);
556 urb->complete = hci_usb_tx_complete;
557 urb->transfer_flags = URB_ISO_ASAP;
559 urb->interval = husb->isoc_out_ep->desc.bInterval;
561 urb->transfer_buffer = skb->data;
562 urb->transfer_buffer_length = skb->len;
564 __fill_isoc_desc(urb, skb->len, le16_to_cpu(husb->isoc_out_ep->desc.wMaxPacketSize));
567 return __tx_submit(husb, _urb);
571 static void hci_usb_tx_process(struct hci_usb *husb)
573 struct sk_buff_head *q;
576 BT_DBG("%s", husb->hdev->name);
579 clear_bit(HCI_USB_TX_WAKEUP, &husb->state);
581 /* Process command queue */
582 q = __transmit_q(husb, HCI_COMMAND_PKT);
583 if (!atomic_read(__pending_tx(husb, HCI_COMMAND_PKT)) &&
584 (skb = skb_dequeue(q))) {
585 if (hci_usb_send_ctrl(husb, skb) < 0)
586 skb_queue_head(q, skb);
589 #ifdef CONFIG_BT_HCIUSB_SCO
590 /* Process SCO queue */
591 q = __transmit_q(husb, HCI_SCODATA_PKT);
592 if (atomic_read(__pending_tx(husb, HCI_SCODATA_PKT)) < HCI_MAX_ISOC_TX &&
593 (skb = skb_dequeue(q))) {
594 if (hci_usb_send_isoc(husb, skb) < 0)
595 skb_queue_head(q, skb);
599 /* Process ACL queue */
600 q = __transmit_q(husb, HCI_ACLDATA_PKT);
601 while (atomic_read(__pending_tx(husb, HCI_ACLDATA_PKT)) < HCI_MAX_BULK_TX &&
602 (skb = skb_dequeue(q))) {
603 if (hci_usb_send_bulk(husb, skb) < 0) {
604 skb_queue_head(q, skb);
608 } while(test_bit(HCI_USB_TX_WAKEUP, &husb->state));
611 static inline void hci_usb_tx_wakeup(struct hci_usb *husb)
613 /* Serialize TX queue processing to avoid data reordering */
614 if (!test_and_set_bit(HCI_USB_TX_PROCESS, &husb->state)) {
615 hci_usb_tx_process(husb);
616 clear_bit(HCI_USB_TX_PROCESS, &husb->state);
618 set_bit(HCI_USB_TX_WAKEUP, &husb->state);
621 /* Send frames from HCI layer */
622 static int hci_usb_send_frame(struct sk_buff *skb)
624 struct hci_dev *hdev = (struct hci_dev *) skb->dev;
625 struct hci_usb *husb;
628 BT_ERR("frame for uknown device (hdev=NULL)");
632 if (!test_bit(HCI_RUNNING, &hdev->flags))
635 BT_DBG("%s type %d len %d", hdev->name, bt_cb(skb)->pkt_type, skb->len);
637 husb = (struct hci_usb *) hdev->driver_data;
639 switch (bt_cb(skb)->pkt_type) {
640 case HCI_COMMAND_PKT:
644 case HCI_ACLDATA_PKT:
648 #ifdef CONFIG_BT_HCIUSB_SCO
649 case HCI_SCODATA_PKT:
659 read_lock(&husb->completion_lock);
661 skb_queue_tail(__transmit_q(husb, bt_cb(skb)->pkt_type), skb);
662 hci_usb_tx_wakeup(husb);
664 read_unlock(&husb->completion_lock);
668 static inline int __recv_frame(struct hci_usb *husb, int type, void *data, int count)
670 BT_DBG("%s type %d data %p count %d", husb->hdev->name, type, data, count);
672 husb->hdev->stat.byte_rx += count;
675 struct sk_buff *skb = __reassembly(husb, type);
676 struct { int expect; } *scb;
680 /* Start of the frame */
684 if (count >= HCI_EVENT_HDR_SIZE) {
685 struct hci_event_hdr *h = data;
686 len = HCI_EVENT_HDR_SIZE + h->plen;
691 case HCI_ACLDATA_PKT:
692 if (count >= HCI_ACL_HDR_SIZE) {
693 struct hci_acl_hdr *h = data;
694 len = HCI_ACL_HDR_SIZE + __le16_to_cpu(h->dlen);
698 #ifdef CONFIG_BT_HCIUSB_SCO
699 case HCI_SCODATA_PKT:
700 if (count >= HCI_SCO_HDR_SIZE) {
701 struct hci_sco_hdr *h = data;
702 len = HCI_SCO_HDR_SIZE + h->dlen;
708 BT_DBG("new packet len %d", len);
710 skb = bt_skb_alloc(len, GFP_ATOMIC);
712 BT_ERR("%s no memory for the packet", husb->hdev->name);
715 skb->dev = (void *) husb->hdev;
716 bt_cb(skb)->pkt_type = type;
718 __reassembly(husb, type) = skb;
720 scb = (void *) skb->cb;
724 scb = (void *) skb->cb;
728 len = min(len, count);
730 memcpy(skb_put(skb, len), data, len);
735 __reassembly(husb, type) = NULL;
736 bt_cb(skb)->pkt_type = type;
740 count -= len; data += len;
745 static void hci_usb_rx_complete(struct urb *urb)
747 struct _urb *_urb = container_of(urb, struct _urb, urb);
748 struct hci_usb *husb = (void *) urb->context;
749 struct hci_dev *hdev = husb->hdev;
750 int err, count = urb->actual_length;
752 BT_DBG("%s urb %p type %d status %d count %d flags %x", hdev->name, urb,
753 _urb->type, urb->status, count, urb->transfer_flags);
755 read_lock(&husb->completion_lock);
757 if (!test_bit(HCI_RUNNING, &hdev->flags))
760 if (urb->status || !count)
763 if (_urb->type == HCI_SCODATA_PKT) {
764 #ifdef CONFIG_BT_HCIUSB_SCO
766 for (i=0; i < urb->number_of_packets; i++) {
767 BT_DBG("desc %d status %d offset %d len %d", i,
768 urb->iso_frame_desc[i].status,
769 urb->iso_frame_desc[i].offset,
770 urb->iso_frame_desc[i].actual_length);
772 if (!urb->iso_frame_desc[i].status)
773 __recv_frame(husb, _urb->type,
774 urb->transfer_buffer + urb->iso_frame_desc[i].offset,
775 urb->iso_frame_desc[i].actual_length);
781 err = __recv_frame(husb, _urb->type, urb->transfer_buffer, count);
783 BT_ERR("%s corrupted packet: type %d count %d",
784 husb->hdev->name, _urb->type, count);
790 urb->dev = husb->udev;
791 err = usb_submit_urb(urb, GFP_ATOMIC);
792 BT_DBG("%s urb %p type %d resubmit status %d", hdev->name, urb,
796 read_unlock(&husb->completion_lock);
799 static void hci_usb_tx_complete(struct urb *urb)
801 struct _urb *_urb = container_of(urb, struct _urb, urb);
802 struct hci_usb *husb = (void *) urb->context;
803 struct hci_dev *hdev = husb->hdev;
805 BT_DBG("%s urb %p status %d flags %x", hdev->name, urb,
806 urb->status, urb->transfer_flags);
808 atomic_dec(__pending_tx(husb, _urb->type));
810 urb->transfer_buffer = NULL;
811 kfree_skb((struct sk_buff *) _urb->priv);
813 if (!test_bit(HCI_RUNNING, &hdev->flags))
817 hdev->stat.byte_tx += urb->transfer_buffer_length;
821 read_lock(&husb->completion_lock);
824 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
826 hci_usb_tx_wakeup(husb);
828 read_unlock(&husb->completion_lock);
831 static void hci_usb_destruct(struct hci_dev *hdev)
833 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
835 BT_DBG("%s", hdev->name);
840 static void hci_usb_notify(struct hci_dev *hdev, unsigned int evt)
842 BT_DBG("%s evt %d", hdev->name, evt);
845 static int hci_usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
847 struct usb_device *udev = interface_to_usbdev(intf);
848 struct usb_host_endpoint *bulk_out_ep = NULL;
849 struct usb_host_endpoint *bulk_in_ep = NULL;
850 struct usb_host_endpoint *intr_in_ep = NULL;
851 struct usb_host_endpoint *ep;
852 struct usb_host_interface *uif;
853 struct usb_interface *isoc_iface;
854 struct hci_usb *husb;
855 struct hci_dev *hdev;
856 int i, e, size, isoc_ifnum, isoc_alts;
858 BT_DBG("udev %p intf %p", udev, intf);
860 if (!id->driver_info) {
861 const struct usb_device_id *match;
862 match = usb_match_id(intf, blacklist_ids);
867 if (ignore || id->driver_info & HCI_IGNORE)
870 if (ignore_dga && id->driver_info & HCI_DIGIANSWER)
873 if (ignore_csr && id->driver_info & HCI_CSR)
876 if (ignore_sniffer && id->driver_info & HCI_SNIFFER)
879 if (intf->cur_altsetting->desc.bInterfaceNumber > 0)
882 /* Find endpoints that we need */
883 uif = intf->cur_altsetting;
884 for (e = 0; e < uif->desc.bNumEndpoints; e++) {
885 ep = &uif->endpoint[e];
887 switch (ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
888 case USB_ENDPOINT_XFER_INT:
889 if (ep->desc.bEndpointAddress & USB_DIR_IN)
893 case USB_ENDPOINT_XFER_BULK:
894 if (ep->desc.bEndpointAddress & USB_DIR_IN)
902 if (!bulk_in_ep || !bulk_out_ep || !intr_in_ep) {
903 BT_DBG("Bulk endpoints not found");
907 if (!(husb = kzalloc(sizeof(struct hci_usb), GFP_KERNEL))) {
908 BT_ERR("Can't allocate: control structure");
913 husb->bulk_out_ep = bulk_out_ep;
914 husb->bulk_in_ep = bulk_in_ep;
915 husb->intr_in_ep = intr_in_ep;
917 if (id->driver_info & HCI_DIGIANSWER)
918 husb->ctrl_req = USB_TYPE_VENDOR;
920 husb->ctrl_req = USB_TYPE_CLASS;
922 /* Find isochronous endpoints that we can use */
928 #ifdef CONFIG_BT_HCIUSB_SCO
929 if (isoc && !(id->driver_info & (HCI_BROKEN_ISOC | HCI_SNIFFER)))
930 isoc_iface = usb_ifnum_to_if(udev, isoc_ifnum);
934 struct usb_host_endpoint *isoc_out_ep = NULL;
935 struct usb_host_endpoint *isoc_in_ep = NULL;
937 for (a = 0; a < isoc_iface->num_altsetting; a++) {
938 uif = &isoc_iface->altsetting[a];
939 for (e = 0; e < uif->desc.bNumEndpoints; e++) {
940 ep = &uif->endpoint[e];
942 switch (ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
943 case USB_ENDPOINT_XFER_ISOC:
944 if (le16_to_cpu(ep->desc.wMaxPacketSize) < size ||
945 uif->desc.bAlternateSetting != isoc)
947 size = le16_to_cpu(ep->desc.wMaxPacketSize);
949 isoc_alts = uif->desc.bAlternateSetting;
951 if (ep->desc.bEndpointAddress & USB_DIR_IN)
960 if (!isoc_in_ep || !isoc_out_ep)
961 BT_DBG("Isoc endpoints not found");
963 BT_DBG("isoc ifnum %d alts %d", isoc_ifnum, isoc_alts);
964 if (usb_driver_claim_interface(&hci_usb_driver, isoc_iface, husb) != 0)
965 BT_ERR("Can't claim isoc interface");
966 else if (usb_set_interface(udev, isoc_ifnum, isoc_alts)) {
967 BT_ERR("Can't set isoc interface settings");
968 husb->isoc_iface = isoc_iface;
969 usb_driver_release_interface(&hci_usb_driver, isoc_iface);
970 husb->isoc_iface = NULL;
972 husb->isoc_iface = isoc_iface;
973 husb->isoc_in_ep = isoc_in_ep;
974 husb->isoc_out_ep = isoc_out_ep;
980 rwlock_init(&husb->completion_lock);
982 for (i = 0; i < 4; i++) {
983 skb_queue_head_init(&husb->transmit_q[i]);
984 _urb_queue_init(&husb->pending_q[i]);
985 _urb_queue_init(&husb->completed_q[i]);
988 /* Initialize and register HCI device */
989 hdev = hci_alloc_dev();
991 BT_ERR("Can't allocate HCI device");
997 hdev->type = HCI_USB;
998 hdev->driver_data = husb;
999 SET_HCIDEV_DEV(hdev, &intf->dev);
1001 hdev->open = hci_usb_open;
1002 hdev->close = hci_usb_close;
1003 hdev->flush = hci_usb_flush;
1004 hdev->send = hci_usb_send_frame;
1005 hdev->destruct = hci_usb_destruct;
1006 hdev->notify = hci_usb_notify;
1008 hdev->owner = THIS_MODULE;
1010 if (reset || id->driver_info & HCI_RESET)
1011 set_bit(HCI_QUIRK_RESET_ON_INIT, &hdev->quirks);
1013 if (force_scofix || id->driver_info & HCI_WRONG_SCO_MTU) {
1014 if (!disable_scofix)
1015 set_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks);
1018 if (id->driver_info & HCI_SNIFFER) {
1019 if (le16_to_cpu(udev->descriptor.bcdDevice) > 0x997)
1020 set_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks);
1023 if (id->driver_info & HCI_BCM92035) {
1024 unsigned char cmd[] = { 0x3b, 0xfc, 0x01, 0x00 };
1025 struct sk_buff *skb;
1027 skb = bt_skb_alloc(sizeof(cmd), GFP_KERNEL);
1029 memcpy(skb_put(skb, sizeof(cmd)), cmd, sizeof(cmd));
1030 skb_queue_tail(&hdev->driver_init, skb);
1034 if (hci_register_dev(hdev) < 0) {
1035 BT_ERR("Can't register HCI device");
1040 usb_set_intfdata(intf, husb);
1044 if (husb->isoc_iface)
1045 usb_driver_release_interface(&hci_usb_driver, husb->isoc_iface);
1052 static void hci_usb_disconnect(struct usb_interface *intf)
1054 struct hci_usb *husb = usb_get_intfdata(intf);
1055 struct hci_dev *hdev;
1057 if (!husb || intf == husb->isoc_iface)
1060 usb_set_intfdata(intf, NULL);
1063 BT_DBG("%s", hdev->name);
1065 hci_usb_close(hdev);
1067 if (husb->isoc_iface)
1068 usb_driver_release_interface(&hci_usb_driver, husb->isoc_iface);
1070 if (hci_unregister_dev(hdev) < 0)
1071 BT_ERR("Can't unregister HCI device %s", hdev->name);
1076 static int hci_usb_suspend(struct usb_interface *intf, pm_message_t message)
1078 struct hci_usb *husb = usb_get_intfdata(intf);
1079 struct list_head killed;
1080 unsigned long flags;
1083 if (!husb || intf == husb->isoc_iface)
1086 hci_suspend_dev(husb->hdev);
1088 INIT_LIST_HEAD(&killed);
1090 for (i = 0; i < 4; i++) {
1091 struct _urb_queue *q = &husb->pending_q[i];
1092 struct _urb *_urb, *_tmp;
1094 while ((_urb = _urb_dequeue(q))) {
1095 /* reset queue since _urb_dequeue sets it to NULL */
1097 usb_kill_urb(&_urb->urb);
1098 list_add(&_urb->list, &killed);
1101 spin_lock_irqsave(&q->lock, flags);
1103 list_for_each_entry_safe(_urb, _tmp, &killed, list) {
1104 list_move_tail(&_urb->list, &q->head);
1107 spin_unlock_irqrestore(&q->lock, flags);
1113 static int hci_usb_resume(struct usb_interface *intf)
1115 struct hci_usb *husb = usb_get_intfdata(intf);
1116 unsigned long flags;
1119 if (!husb || intf == husb->isoc_iface)
1122 for (i = 0; i < 4; i++) {
1123 struct _urb_queue *q = &husb->pending_q[i];
1126 spin_lock_irqsave(&q->lock, flags);
1128 list_for_each_entry(_urb, &q->head, list) {
1129 err = usb_submit_urb(&_urb->urb, GFP_ATOMIC);
1134 spin_unlock_irqrestore(&q->lock, flags);
1140 hci_resume_dev(husb->hdev);
1145 static struct usb_driver hci_usb_driver = {
1147 .probe = hci_usb_probe,
1148 .disconnect = hci_usb_disconnect,
1149 .suspend = hci_usb_suspend,
1150 .resume = hci_usb_resume,
1151 .id_table = bluetooth_ids,
1154 static int __init hci_usb_init(void)
1158 BT_INFO("HCI USB driver ver %s", VERSION);
1160 if ((err = usb_register(&hci_usb_driver)) < 0)
1161 BT_ERR("Failed to register HCI USB driver");
1166 static void __exit hci_usb_exit(void)
1168 usb_deregister(&hci_usb_driver);
1171 module_init(hci_usb_init);
1172 module_exit(hci_usb_exit);
1174 module_param(ignore, bool, 0644);
1175 MODULE_PARM_DESC(ignore, "Ignore devices from the matching table");
1177 module_param(ignore_dga, bool, 0644);
1178 MODULE_PARM_DESC(ignore_dga, "Ignore devices with id 08fd:0001");
1180 module_param(ignore_csr, bool, 0644);
1181 MODULE_PARM_DESC(ignore_csr, "Ignore devices with id 0a12:0001");
1183 module_param(ignore_sniffer, bool, 0644);
1184 MODULE_PARM_DESC(ignore_sniffer, "Ignore devices with id 0a12:0002");
1186 module_param(disable_scofix, bool, 0644);
1187 MODULE_PARM_DESC(disable_scofix, "Disable fixup of wrong SCO buffer size");
1189 module_param(force_scofix, bool, 0644);
1190 MODULE_PARM_DESC(force_scofix, "Force fixup of wrong SCO buffers size");
1192 module_param(reset, bool, 0644);
1193 MODULE_PARM_DESC(reset, "Send HCI reset command on initialization");
1195 #ifdef CONFIG_BT_HCIUSB_SCO
1196 module_param(isoc, int, 0644);
1197 MODULE_PARM_DESC(isoc, "Set isochronous transfers for SCO over HCI support");
1200 MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>, Marcel Holtmann <marcel@holtmann.org>");
1201 MODULE_DESCRIPTION("Bluetooth HCI USB driver ver " VERSION);
1202 MODULE_VERSION(VERSION);
1203 MODULE_LICENSE("GPL");