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
66 static int ignore_dga;
67 static int ignore_csr;
68 static int ignore_sniffer;
69 static int disable_scofix;
70 static int force_scofix;
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, 0x2035), .driver_info = HCI_RESET | HCI_WRONG_SCO_MTU },
115 { USB_DEVICE(0x0a5c, 0x200a), .driver_info = HCI_RESET | HCI_WRONG_SCO_MTU },
116 { USB_DEVICE(0x0a5c, 0x2009), .driver_info = HCI_BCM92035 },
118 /* Broadcom BCM2045 */
119 { USB_DEVICE(0x0a5c, 0x2039), .driver_info = HCI_RESET | HCI_WRONG_SCO_MTU },
120 { USB_DEVICE(0x0a5c, 0x2101), .driver_info = HCI_RESET | HCI_WRONG_SCO_MTU },
122 /* IBM/Lenovo ThinkPad with Broadcom chip */
123 { USB_DEVICE(0x0a5c, 0x201e), .driver_info = HCI_RESET | HCI_WRONG_SCO_MTU },
124 { USB_DEVICE(0x0a5c, 0x2110), .driver_info = HCI_RESET | HCI_WRONG_SCO_MTU },
127 { USB_DEVICE(0x0a5c, 0x2100), .driver_info = HCI_RESET },
129 /* ANYCOM Bluetooth USB-200 and USB-250 */
130 { USB_DEVICE(0x0a5c, 0x2111), .driver_info = HCI_RESET },
132 /* HP laptop with Broadcom chip */
133 { USB_DEVICE(0x03f0, 0x171d), .driver_info = HCI_RESET | HCI_WRONG_SCO_MTU },
135 /* Dell laptop with Broadcom chip */
136 { USB_DEVICE(0x413c, 0x8126), .driver_info = HCI_RESET | HCI_WRONG_SCO_MTU },
137 /* Dell Wireless 370 */
138 { USB_DEVICE(0x413c, 0x8156), .driver_info = HCI_RESET | HCI_WRONG_SCO_MTU },
139 /* Dell Wireless 410 */
140 { USB_DEVICE(0x413c, 0x8152), .driver_info = HCI_RESET | HCI_WRONG_SCO_MTU },
143 { USB_DEVICE(0x0a5c, 0x2151), .driver_info = HCI_RESET },
145 /* Microsoft Wireless Transceiver for Bluetooth 2.0 */
146 { USB_DEVICE(0x045e, 0x009c), .driver_info = HCI_RESET },
148 /* Kensington Bluetooth USB adapter */
149 { USB_DEVICE(0x047d, 0x105d), .driver_info = HCI_RESET },
150 { USB_DEVICE(0x047d, 0x105e), .driver_info = HCI_RESET | HCI_WRONG_SCO_MTU },
152 /* ISSC Bluetooth Adapter v3.1 */
153 { USB_DEVICE(0x1131, 0x1001), .driver_info = HCI_RESET },
155 /* RTX Telecom based adapters with buggy SCO support */
156 { USB_DEVICE(0x0400, 0x0807), .driver_info = HCI_BROKEN_ISOC },
157 { USB_DEVICE(0x0400, 0x080a), .driver_info = HCI_BROKEN_ISOC },
159 /* CONWISE Technology based adapters with buggy SCO support */
160 { USB_DEVICE(0x0e5e, 0x6622), .driver_info = HCI_BROKEN_ISOC },
162 /* Belkin F8T012 and F8T013 devices */
163 { USB_DEVICE(0x050d, 0x0012), .driver_info = HCI_RESET | HCI_WRONG_SCO_MTU },
164 { USB_DEVICE(0x050d, 0x0013), .driver_info = HCI_RESET | HCI_WRONG_SCO_MTU },
166 /* Digianswer devices */
167 { USB_DEVICE(0x08fd, 0x0001), .driver_info = HCI_DIGIANSWER },
168 { USB_DEVICE(0x08fd, 0x0002), .driver_info = HCI_IGNORE },
170 /* CSR BlueCore Bluetooth Sniffer */
171 { USB_DEVICE(0x0a12, 0x0002), .driver_info = HCI_SNIFFER },
173 /* Frontline ComProbe Bluetooth Sniffer */
174 { USB_DEVICE(0x16d3, 0x0002), .driver_info = HCI_SNIFFER },
176 { } /* Terminating entry */
179 static struct _urb *_urb_alloc(int isoc, gfp_t gfp)
181 struct _urb *_urb = kmalloc(sizeof(struct _urb) +
182 sizeof(struct usb_iso_packet_descriptor) * isoc, gfp);
184 memset(_urb, 0, sizeof(*_urb));
185 usb_init_urb(&_urb->urb);
190 static struct _urb *_urb_dequeue(struct _urb_queue *q)
192 struct _urb *_urb = NULL;
194 spin_lock_irqsave(&q->lock, flags);
196 struct list_head *head = &q->head;
197 struct list_head *next = head->next;
199 _urb = list_entry(next, struct _urb, list);
200 list_del(next); _urb->queue = NULL;
203 spin_unlock_irqrestore(&q->lock, flags);
207 static void hci_usb_rx_complete(struct urb *urb);
208 static void hci_usb_tx_complete(struct urb *urb);
210 #define __pending_tx(husb, type) (&husb->pending_tx[type-1])
211 #define __pending_q(husb, type) (&husb->pending_q[type-1])
212 #define __completed_q(husb, type) (&husb->completed_q[type-1])
213 #define __transmit_q(husb, type) (&husb->transmit_q[type-1])
215 static inline struct _urb *__get_completed(struct hci_usb *husb, int type)
217 return _urb_dequeue(__completed_q(husb, type));
220 #ifdef CONFIG_BT_HCIUSB_SCO
221 static void __fill_isoc_desc(struct urb *urb, int len, int mtu)
225 BT_DBG("len %d mtu %d", len, mtu);
227 for (i=0; i < HCI_MAX_ISOC_FRAMES && len >= mtu; i++, offset += mtu, len -= mtu) {
228 urb->iso_frame_desc[i].offset = offset;
229 urb->iso_frame_desc[i].length = mtu;
230 BT_DBG("desc %d offset %d len %d", i, offset, mtu);
232 if (len && i < HCI_MAX_ISOC_FRAMES) {
233 urb->iso_frame_desc[i].offset = offset;
234 urb->iso_frame_desc[i].length = len;
235 BT_DBG("desc %d offset %d len %d", i, offset, len);
238 urb->number_of_packets = i;
242 static int hci_usb_intr_rx_submit(struct hci_usb *husb)
246 int err, pipe, interval, size;
249 BT_DBG("%s", husb->hdev->name);
251 size = le16_to_cpu(husb->intr_in_ep->desc.wMaxPacketSize);
253 buf = kmalloc(size, GFP_ATOMIC);
257 _urb = _urb_alloc(0, GFP_ATOMIC);
262 _urb->type = HCI_EVENT_PKT;
263 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
266 pipe = usb_rcvintpipe(husb->udev, husb->intr_in_ep->desc.bEndpointAddress);
267 interval = husb->intr_in_ep->desc.bInterval;
268 usb_fill_int_urb(urb, husb->udev, pipe, buf, size, hci_usb_rx_complete, husb, interval);
270 err = usb_submit_urb(urb, GFP_ATOMIC);
272 BT_ERR("%s intr rx submit failed urb %p err %d",
273 husb->hdev->name, urb, err);
281 static int hci_usb_bulk_rx_submit(struct hci_usb *husb)
285 int err, pipe, size = HCI_MAX_FRAME_SIZE;
288 buf = kmalloc(size, GFP_ATOMIC);
292 _urb = _urb_alloc(0, GFP_ATOMIC);
297 _urb->type = HCI_ACLDATA_PKT;
298 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
301 pipe = usb_rcvbulkpipe(husb->udev, husb->bulk_in_ep->desc.bEndpointAddress);
302 usb_fill_bulk_urb(urb, husb->udev, pipe, buf, size, hci_usb_rx_complete, husb);
303 urb->transfer_flags = 0;
305 BT_DBG("%s urb %p", husb->hdev->name, urb);
307 err = usb_submit_urb(urb, GFP_ATOMIC);
309 BT_ERR("%s bulk rx submit failed urb %p err %d",
310 husb->hdev->name, urb, err);
318 #ifdef CONFIG_BT_HCIUSB_SCO
319 static int hci_usb_isoc_rx_submit(struct hci_usb *husb)
326 mtu = le16_to_cpu(husb->isoc_in_ep->desc.wMaxPacketSize);
327 size = mtu * HCI_MAX_ISOC_FRAMES;
329 buf = kmalloc(size, GFP_ATOMIC);
333 _urb = _urb_alloc(HCI_MAX_ISOC_FRAMES, GFP_ATOMIC);
338 _urb->type = HCI_SCODATA_PKT;
339 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
344 urb->dev = husb->udev;
345 urb->pipe = usb_rcvisocpipe(husb->udev, husb->isoc_in_ep->desc.bEndpointAddress);
346 urb->complete = hci_usb_rx_complete;
348 urb->interval = husb->isoc_in_ep->desc.bInterval;
350 urb->transfer_buffer_length = size;
351 urb->transfer_buffer = buf;
352 urb->transfer_flags = URB_ISO_ASAP;
354 __fill_isoc_desc(urb, size, mtu);
356 BT_DBG("%s urb %p", husb->hdev->name, urb);
358 err = usb_submit_urb(urb, GFP_ATOMIC);
360 BT_ERR("%s isoc rx submit failed urb %p err %d",
361 husb->hdev->name, urb, err);
370 /* Initialize device */
371 static int hci_usb_open(struct hci_dev *hdev)
373 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
377 BT_DBG("%s", hdev->name);
379 if (test_and_set_bit(HCI_RUNNING, &hdev->flags))
382 write_lock_irqsave(&husb->completion_lock, flags);
384 err = hci_usb_intr_rx_submit(husb);
386 for (i = 0; i < HCI_MAX_BULK_RX; i++)
387 hci_usb_bulk_rx_submit(husb);
389 #ifdef CONFIG_BT_HCIUSB_SCO
390 if (husb->isoc_iface)
391 for (i = 0; i < HCI_MAX_ISOC_RX; i++)
392 hci_usb_isoc_rx_submit(husb);
395 clear_bit(HCI_RUNNING, &hdev->flags);
398 write_unlock_irqrestore(&husb->completion_lock, flags);
403 static int hci_usb_flush(struct hci_dev *hdev)
405 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
408 BT_DBG("%s", hdev->name);
410 for (i = 0; i < 4; i++)
411 skb_queue_purge(&husb->transmit_q[i]);
415 static void hci_usb_unlink_urbs(struct hci_usb *husb)
419 BT_DBG("%s", husb->hdev->name);
421 for (i = 0; i < 4; i++) {
425 /* Kill pending requests */
426 while ((_urb = _urb_dequeue(&husb->pending_q[i]))) {
428 BT_DBG("%s unlinking _urb %p type %d urb %p",
429 husb->hdev->name, _urb, _urb->type, urb);
431 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
434 /* Release completed requests */
435 while ((_urb = _urb_dequeue(&husb->completed_q[i]))) {
437 BT_DBG("%s freeing _urb %p type %d urb %p",
438 husb->hdev->name, _urb, _urb->type, urb);
439 kfree(urb->setup_packet);
440 kfree(urb->transfer_buffer);
447 static int hci_usb_close(struct hci_dev *hdev)
449 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
452 if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags))
455 BT_DBG("%s", hdev->name);
457 /* Synchronize with completion handlers */
458 write_lock_irqsave(&husb->completion_lock, flags);
459 write_unlock_irqrestore(&husb->completion_lock, flags);
461 hci_usb_unlink_urbs(husb);
466 static int __tx_submit(struct hci_usb *husb, struct _urb *_urb)
468 struct urb *urb = &_urb->urb;
471 BT_DBG("%s urb %p type %d", husb->hdev->name, urb, _urb->type);
473 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
474 err = usb_submit_urb(urb, GFP_ATOMIC);
476 BT_ERR("%s tx submit failed urb %p type %d err %d",
477 husb->hdev->name, urb, _urb->type, err);
479 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
481 atomic_inc(__pending_tx(husb, _urb->type));
486 static inline int hci_usb_send_ctrl(struct hci_usb *husb, struct sk_buff *skb)
488 struct _urb *_urb = __get_completed(husb, bt_cb(skb)->pkt_type);
489 struct usb_ctrlrequest *dr;
493 _urb = _urb_alloc(0, GFP_ATOMIC);
496 _urb->type = bt_cb(skb)->pkt_type;
498 dr = kmalloc(sizeof(*dr), GFP_ATOMIC);
504 dr = (void *) _urb->urb.setup_packet;
506 dr->bRequestType = husb->ctrl_req;
510 dr->wLength = __cpu_to_le16(skb->len);
513 usb_fill_control_urb(urb, husb->udev, usb_sndctrlpipe(husb->udev, 0),
514 (void *) dr, skb->data, skb->len, hci_usb_tx_complete, husb);
516 BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
519 return __tx_submit(husb, _urb);
522 static inline int hci_usb_send_bulk(struct hci_usb *husb, struct sk_buff *skb)
524 struct _urb *_urb = __get_completed(husb, bt_cb(skb)->pkt_type);
529 _urb = _urb_alloc(0, GFP_ATOMIC);
532 _urb->type = bt_cb(skb)->pkt_type;
536 pipe = usb_sndbulkpipe(husb->udev, husb->bulk_out_ep->desc.bEndpointAddress);
537 usb_fill_bulk_urb(urb, husb->udev, pipe, skb->data, skb->len,
538 hci_usb_tx_complete, husb);
539 urb->transfer_flags = URB_ZERO_PACKET;
541 BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
544 return __tx_submit(husb, _urb);
547 #ifdef CONFIG_BT_HCIUSB_SCO
548 static inline int hci_usb_send_isoc(struct hci_usb *husb, struct sk_buff *skb)
550 struct _urb *_urb = __get_completed(husb, bt_cb(skb)->pkt_type);
554 _urb = _urb_alloc(HCI_MAX_ISOC_FRAMES, GFP_ATOMIC);
557 _urb->type = bt_cb(skb)->pkt_type;
560 BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
565 urb->dev = husb->udev;
566 urb->pipe = usb_sndisocpipe(husb->udev, husb->isoc_out_ep->desc.bEndpointAddress);
567 urb->complete = hci_usb_tx_complete;
568 urb->transfer_flags = URB_ISO_ASAP;
570 urb->interval = husb->isoc_out_ep->desc.bInterval;
572 urb->transfer_buffer = skb->data;
573 urb->transfer_buffer_length = skb->len;
575 __fill_isoc_desc(urb, skb->len, le16_to_cpu(husb->isoc_out_ep->desc.wMaxPacketSize));
578 return __tx_submit(husb, _urb);
582 static void hci_usb_tx_process(struct hci_usb *husb)
584 struct sk_buff_head *q;
587 BT_DBG("%s", husb->hdev->name);
590 clear_bit(HCI_USB_TX_WAKEUP, &husb->state);
592 /* Process command queue */
593 q = __transmit_q(husb, HCI_COMMAND_PKT);
594 if (!atomic_read(__pending_tx(husb, HCI_COMMAND_PKT)) &&
595 (skb = skb_dequeue(q))) {
596 if (hci_usb_send_ctrl(husb, skb) < 0)
597 skb_queue_head(q, skb);
600 #ifdef CONFIG_BT_HCIUSB_SCO
601 /* Process SCO queue */
602 q = __transmit_q(husb, HCI_SCODATA_PKT);
603 if (atomic_read(__pending_tx(husb, HCI_SCODATA_PKT)) < HCI_MAX_ISOC_TX &&
604 (skb = skb_dequeue(q))) {
605 if (hci_usb_send_isoc(husb, skb) < 0)
606 skb_queue_head(q, skb);
610 /* Process ACL queue */
611 q = __transmit_q(husb, HCI_ACLDATA_PKT);
612 while (atomic_read(__pending_tx(husb, HCI_ACLDATA_PKT)) < HCI_MAX_BULK_TX &&
613 (skb = skb_dequeue(q))) {
614 if (hci_usb_send_bulk(husb, skb) < 0) {
615 skb_queue_head(q, skb);
619 } while(test_bit(HCI_USB_TX_WAKEUP, &husb->state));
622 static inline void hci_usb_tx_wakeup(struct hci_usb *husb)
624 /* Serialize TX queue processing to avoid data reordering */
625 if (!test_and_set_bit(HCI_USB_TX_PROCESS, &husb->state)) {
626 hci_usb_tx_process(husb);
627 clear_bit(HCI_USB_TX_PROCESS, &husb->state);
629 set_bit(HCI_USB_TX_WAKEUP, &husb->state);
632 /* Send frames from HCI layer */
633 static int hci_usb_send_frame(struct sk_buff *skb)
635 struct hci_dev *hdev = (struct hci_dev *) skb->dev;
636 struct hci_usb *husb;
639 BT_ERR("frame for uknown device (hdev=NULL)");
643 if (!test_bit(HCI_RUNNING, &hdev->flags))
646 BT_DBG("%s type %d len %d", hdev->name, bt_cb(skb)->pkt_type, skb->len);
648 husb = (struct hci_usb *) hdev->driver_data;
650 switch (bt_cb(skb)->pkt_type) {
651 case HCI_COMMAND_PKT:
655 case HCI_ACLDATA_PKT:
659 #ifdef CONFIG_BT_HCIUSB_SCO
660 case HCI_SCODATA_PKT:
670 read_lock(&husb->completion_lock);
672 skb_queue_tail(__transmit_q(husb, bt_cb(skb)->pkt_type), skb);
673 hci_usb_tx_wakeup(husb);
675 read_unlock(&husb->completion_lock);
679 static void hci_usb_rx_complete(struct urb *urb)
681 struct _urb *_urb = container_of(urb, struct _urb, urb);
682 struct hci_usb *husb = (void *) urb->context;
683 struct hci_dev *hdev = husb->hdev;
684 int err, count = urb->actual_length;
686 BT_DBG("%s urb %p type %d status %d count %d flags %x", hdev->name, urb,
687 _urb->type, urb->status, count, urb->transfer_flags);
689 read_lock(&husb->completion_lock);
691 if (!test_bit(HCI_RUNNING, &hdev->flags))
694 if (urb->status || !count)
697 if (_urb->type == HCI_SCODATA_PKT) {
698 #ifdef CONFIG_BT_HCIUSB_SCO
700 for (i=0; i < urb->number_of_packets; i++) {
701 BT_DBG("desc %d status %d offset %d len %d", i,
702 urb->iso_frame_desc[i].status,
703 urb->iso_frame_desc[i].offset,
704 urb->iso_frame_desc[i].actual_length);
706 if (!urb->iso_frame_desc[i].status) {
707 husb->hdev->stat.byte_rx += urb->iso_frame_desc[i].actual_length;
708 hci_recv_fragment(husb->hdev, _urb->type,
709 urb->transfer_buffer + urb->iso_frame_desc[i].offset,
710 urb->iso_frame_desc[i].actual_length);
717 husb->hdev->stat.byte_rx += count;
718 err = hci_recv_fragment(husb->hdev, _urb->type, urb->transfer_buffer, count);
720 BT_ERR("%s corrupted packet: type %d count %d",
721 husb->hdev->name, _urb->type, count);
727 urb->dev = husb->udev;
728 err = usb_submit_urb(urb, GFP_ATOMIC);
729 BT_DBG("%s urb %p type %d resubmit status %d", hdev->name, urb,
733 read_unlock(&husb->completion_lock);
736 static void hci_usb_tx_complete(struct urb *urb)
738 struct _urb *_urb = container_of(urb, struct _urb, urb);
739 struct hci_usb *husb = (void *) urb->context;
740 struct hci_dev *hdev = husb->hdev;
742 BT_DBG("%s urb %p status %d flags %x", hdev->name, urb,
743 urb->status, urb->transfer_flags);
745 atomic_dec(__pending_tx(husb, _urb->type));
747 urb->transfer_buffer = NULL;
748 kfree_skb((struct sk_buff *) _urb->priv);
750 if (!test_bit(HCI_RUNNING, &hdev->flags))
754 hdev->stat.byte_tx += urb->transfer_buffer_length;
758 read_lock(&husb->completion_lock);
761 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
763 hci_usb_tx_wakeup(husb);
765 read_unlock(&husb->completion_lock);
768 static void hci_usb_destruct(struct hci_dev *hdev)
770 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
772 BT_DBG("%s", hdev->name);
777 static void hci_usb_notify(struct hci_dev *hdev, unsigned int evt)
779 BT_DBG("%s evt %d", hdev->name, evt);
782 static int hci_usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
784 struct usb_device *udev = interface_to_usbdev(intf);
785 struct usb_host_endpoint *bulk_out_ep = NULL;
786 struct usb_host_endpoint *bulk_in_ep = NULL;
787 struct usb_host_endpoint *intr_in_ep = NULL;
788 struct usb_host_endpoint *ep;
789 struct usb_host_interface *uif;
790 struct usb_interface *isoc_iface;
791 struct hci_usb *husb;
792 struct hci_dev *hdev;
793 int i, e, size, isoc_ifnum, isoc_alts;
795 BT_DBG("udev %p intf %p", udev, intf);
797 if (!id->driver_info) {
798 const struct usb_device_id *match;
799 match = usb_match_id(intf, blacklist_ids);
804 if (ignore || id->driver_info & HCI_IGNORE)
807 if (ignore_dga && id->driver_info & HCI_DIGIANSWER)
810 if (ignore_csr && id->driver_info & HCI_CSR)
813 if (ignore_sniffer && id->driver_info & HCI_SNIFFER)
816 if (intf->cur_altsetting->desc.bInterfaceNumber > 0)
819 /* Find endpoints that we need */
820 uif = intf->cur_altsetting;
821 for (e = 0; e < uif->desc.bNumEndpoints; e++) {
822 ep = &uif->endpoint[e];
824 switch (ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
825 case USB_ENDPOINT_XFER_INT:
826 if (ep->desc.bEndpointAddress & USB_DIR_IN)
830 case USB_ENDPOINT_XFER_BULK:
831 if (ep->desc.bEndpointAddress & USB_DIR_IN)
839 if (!bulk_in_ep || !bulk_out_ep || !intr_in_ep) {
840 BT_DBG("Bulk endpoints not found");
844 if (!(husb = kzalloc(sizeof(struct hci_usb), GFP_KERNEL))) {
845 BT_ERR("Can't allocate: control structure");
850 husb->bulk_out_ep = bulk_out_ep;
851 husb->bulk_in_ep = bulk_in_ep;
852 husb->intr_in_ep = intr_in_ep;
854 if (id->driver_info & HCI_DIGIANSWER)
855 husb->ctrl_req = USB_TYPE_VENDOR;
857 husb->ctrl_req = USB_TYPE_CLASS;
859 /* Find isochronous endpoints that we can use */
865 #ifdef CONFIG_BT_HCIUSB_SCO
866 if (isoc && !(id->driver_info & (HCI_BROKEN_ISOC | HCI_SNIFFER)))
867 isoc_iface = usb_ifnum_to_if(udev, isoc_ifnum);
871 struct usb_host_endpoint *isoc_out_ep = NULL;
872 struct usb_host_endpoint *isoc_in_ep = NULL;
874 for (a = 0; a < isoc_iface->num_altsetting; a++) {
875 uif = &isoc_iface->altsetting[a];
876 for (e = 0; e < uif->desc.bNumEndpoints; e++) {
877 ep = &uif->endpoint[e];
879 switch (ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
880 case USB_ENDPOINT_XFER_ISOC:
881 if (le16_to_cpu(ep->desc.wMaxPacketSize) < size ||
882 uif->desc.bAlternateSetting != isoc)
884 size = le16_to_cpu(ep->desc.wMaxPacketSize);
886 isoc_alts = uif->desc.bAlternateSetting;
888 if (ep->desc.bEndpointAddress & USB_DIR_IN)
897 if (!isoc_in_ep || !isoc_out_ep)
898 BT_DBG("Isoc endpoints not found");
900 BT_DBG("isoc ifnum %d alts %d", isoc_ifnum, isoc_alts);
901 if (usb_driver_claim_interface(&hci_usb_driver, isoc_iface, husb) != 0)
902 BT_ERR("Can't claim isoc interface");
903 else if (usb_set_interface(udev, isoc_ifnum, isoc_alts)) {
904 BT_ERR("Can't set isoc interface settings");
905 husb->isoc_iface = isoc_iface;
906 usb_driver_release_interface(&hci_usb_driver, isoc_iface);
907 husb->isoc_iface = NULL;
909 husb->isoc_iface = isoc_iface;
910 husb->isoc_in_ep = isoc_in_ep;
911 husb->isoc_out_ep = isoc_out_ep;
917 rwlock_init(&husb->completion_lock);
919 for (i = 0; i < 4; i++) {
920 skb_queue_head_init(&husb->transmit_q[i]);
921 _urb_queue_init(&husb->pending_q[i]);
922 _urb_queue_init(&husb->completed_q[i]);
925 /* Initialize and register HCI device */
926 hdev = hci_alloc_dev();
928 BT_ERR("Can't allocate HCI device");
934 hdev->type = HCI_USB;
935 hdev->driver_data = husb;
936 SET_HCIDEV_DEV(hdev, &intf->dev);
938 hdev->open = hci_usb_open;
939 hdev->close = hci_usb_close;
940 hdev->flush = hci_usb_flush;
941 hdev->send = hci_usb_send_frame;
942 hdev->destruct = hci_usb_destruct;
943 hdev->notify = hci_usb_notify;
945 hdev->owner = THIS_MODULE;
947 if (reset || id->driver_info & HCI_RESET)
948 set_bit(HCI_QUIRK_RESET_ON_INIT, &hdev->quirks);
950 if (force_scofix || id->driver_info & HCI_WRONG_SCO_MTU) {
952 set_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks);
955 if (id->driver_info & HCI_SNIFFER) {
956 if (le16_to_cpu(udev->descriptor.bcdDevice) > 0x997)
957 set_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks);
960 if (id->driver_info & HCI_BCM92035) {
961 unsigned char cmd[] = { 0x3b, 0xfc, 0x01, 0x00 };
964 skb = bt_skb_alloc(sizeof(cmd), GFP_KERNEL);
966 memcpy(skb_put(skb, sizeof(cmd)), cmd, sizeof(cmd));
967 skb_queue_tail(&hdev->driver_init, skb);
971 if (hci_register_dev(hdev) < 0) {
972 BT_ERR("Can't register HCI device");
977 usb_set_intfdata(intf, husb);
981 if (husb->isoc_iface)
982 usb_driver_release_interface(&hci_usb_driver, husb->isoc_iface);
989 static void hci_usb_disconnect(struct usb_interface *intf)
991 struct hci_usb *husb = usb_get_intfdata(intf);
992 struct hci_dev *hdev;
994 if (!husb || intf == husb->isoc_iface)
997 usb_set_intfdata(intf, NULL);
1000 BT_DBG("%s", hdev->name);
1002 hci_usb_close(hdev);
1004 if (husb->isoc_iface)
1005 usb_driver_release_interface(&hci_usb_driver, husb->isoc_iface);
1007 if (hci_unregister_dev(hdev) < 0)
1008 BT_ERR("Can't unregister HCI device %s", hdev->name);
1013 static int hci_usb_suspend(struct usb_interface *intf, pm_message_t message)
1015 struct hci_usb *husb = usb_get_intfdata(intf);
1016 struct list_head killed;
1017 unsigned long flags;
1020 if (!husb || intf == husb->isoc_iface)
1023 hci_suspend_dev(husb->hdev);
1025 INIT_LIST_HEAD(&killed);
1027 for (i = 0; i < 4; i++) {
1028 struct _urb_queue *q = &husb->pending_q[i];
1029 struct _urb *_urb, *_tmp;
1031 while ((_urb = _urb_dequeue(q))) {
1032 /* reset queue since _urb_dequeue sets it to NULL */
1034 usb_kill_urb(&_urb->urb);
1035 list_add(&_urb->list, &killed);
1038 spin_lock_irqsave(&q->lock, flags);
1040 list_for_each_entry_safe(_urb, _tmp, &killed, list) {
1041 list_move_tail(&_urb->list, &q->head);
1044 spin_unlock_irqrestore(&q->lock, flags);
1050 static int hci_usb_resume(struct usb_interface *intf)
1052 struct hci_usb *husb = usb_get_intfdata(intf);
1053 unsigned long flags;
1056 if (!husb || intf == husb->isoc_iface)
1059 for (i = 0; i < 4; i++) {
1060 struct _urb_queue *q = &husb->pending_q[i];
1063 spin_lock_irqsave(&q->lock, flags);
1065 list_for_each_entry(_urb, &q->head, list) {
1066 err = usb_submit_urb(&_urb->urb, GFP_ATOMIC);
1071 spin_unlock_irqrestore(&q->lock, flags);
1077 hci_resume_dev(husb->hdev);
1082 static struct usb_driver hci_usb_driver = {
1084 .probe = hci_usb_probe,
1085 .disconnect = hci_usb_disconnect,
1086 .suspend = hci_usb_suspend,
1087 .resume = hci_usb_resume,
1088 .id_table = bluetooth_ids,
1091 static int __init hci_usb_init(void)
1095 BT_INFO("HCI USB driver ver %s", VERSION);
1097 if ((err = usb_register(&hci_usb_driver)) < 0)
1098 BT_ERR("Failed to register HCI USB driver");
1103 static void __exit hci_usb_exit(void)
1105 usb_deregister(&hci_usb_driver);
1108 module_init(hci_usb_init);
1109 module_exit(hci_usb_exit);
1111 module_param(ignore, bool, 0644);
1112 MODULE_PARM_DESC(ignore, "Ignore devices from the matching table");
1114 module_param(ignore_dga, bool, 0644);
1115 MODULE_PARM_DESC(ignore_dga, "Ignore devices with id 08fd:0001");
1117 module_param(ignore_csr, bool, 0644);
1118 MODULE_PARM_DESC(ignore_csr, "Ignore devices with id 0a12:0001");
1120 module_param(ignore_sniffer, bool, 0644);
1121 MODULE_PARM_DESC(ignore_sniffer, "Ignore devices with id 0a12:0002");
1123 module_param(disable_scofix, bool, 0644);
1124 MODULE_PARM_DESC(disable_scofix, "Disable fixup of wrong SCO buffer size");
1126 module_param(force_scofix, bool, 0644);
1127 MODULE_PARM_DESC(force_scofix, "Force fixup of wrong SCO buffers size");
1129 module_param(reset, bool, 0644);
1130 MODULE_PARM_DESC(reset, "Send HCI reset command on initialization");
1132 #ifdef CONFIG_BT_HCIUSB_SCO
1133 module_param(isoc, int, 0644);
1134 MODULE_PARM_DESC(isoc, "Set isochronous transfers for SCO over HCI support");
1137 MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>, Marcel Holtmann <marcel@holtmann.org>");
1138 MODULE_DESCRIPTION("Bluetooth HCI USB driver ver " VERSION);
1139 MODULE_VERSION(VERSION);
1140 MODULE_LICENSE("GPL");