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 /* Microsoft Wireless Transceiver for Bluetooth 2.0 */
122 { USB_DEVICE(0x045e, 0x009c), .driver_info = HCI_RESET },
124 /* Kensington Bluetooth USB adapter */
125 { USB_DEVICE(0x047d, 0x105d), .driver_info = HCI_RESET },
127 /* ISSC Bluetooth Adapter v3.1 */
128 { USB_DEVICE(0x1131, 0x1001), .driver_info = HCI_RESET },
130 /* RTX Telecom based adapters with buggy SCO support */
131 { USB_DEVICE(0x0400, 0x0807), .driver_info = HCI_BROKEN_ISOC },
132 { USB_DEVICE(0x0400, 0x080a), .driver_info = HCI_BROKEN_ISOC },
134 /* Belkin F8T012 and F8T013 devices */
135 { USB_DEVICE(0x050d, 0x0012), .driver_info = HCI_WRONG_SCO_MTU },
136 { USB_DEVICE(0x050d, 0x0013), .driver_info = HCI_WRONG_SCO_MTU },
138 /* Digianswer devices */
139 { USB_DEVICE(0x08fd, 0x0001), .driver_info = HCI_DIGIANSWER },
140 { USB_DEVICE(0x08fd, 0x0002), .driver_info = HCI_IGNORE },
142 /* CSR BlueCore Bluetooth Sniffer */
143 { USB_DEVICE(0x0a12, 0x0002), .driver_info = HCI_SNIFFER },
145 /* Frontline ComProbe Bluetooth Sniffer */
146 { USB_DEVICE(0x16d3, 0x0002), .driver_info = HCI_SNIFFER },
148 { } /* Terminating entry */
151 static struct _urb *_urb_alloc(int isoc, gfp_t gfp)
153 struct _urb *_urb = kmalloc(sizeof(struct _urb) +
154 sizeof(struct usb_iso_packet_descriptor) * isoc, gfp);
156 memset(_urb, 0, sizeof(*_urb));
157 usb_init_urb(&_urb->urb);
162 static struct _urb *_urb_dequeue(struct _urb_queue *q)
164 struct _urb *_urb = NULL;
166 spin_lock_irqsave(&q->lock, flags);
168 struct list_head *head = &q->head;
169 struct list_head *next = head->next;
171 _urb = list_entry(next, struct _urb, list);
172 list_del(next); _urb->queue = NULL;
175 spin_unlock_irqrestore(&q->lock, flags);
179 static void hci_usb_rx_complete(struct urb *urb, struct pt_regs *regs);
180 static void hci_usb_tx_complete(struct urb *urb, struct pt_regs *regs);
182 #define __pending_tx(husb, type) (&husb->pending_tx[type-1])
183 #define __pending_q(husb, type) (&husb->pending_q[type-1])
184 #define __completed_q(husb, type) (&husb->completed_q[type-1])
185 #define __transmit_q(husb, type) (&husb->transmit_q[type-1])
186 #define __reassembly(husb, type) (husb->reassembly[type-1])
188 static inline struct _urb *__get_completed(struct hci_usb *husb, int type)
190 return _urb_dequeue(__completed_q(husb, type));
193 #ifdef CONFIG_BT_HCIUSB_SCO
194 static void __fill_isoc_desc(struct urb *urb, int len, int mtu)
198 BT_DBG("len %d mtu %d", len, mtu);
200 for (i=0; i < HCI_MAX_ISOC_FRAMES && len >= mtu; i++, offset += mtu, len -= mtu) {
201 urb->iso_frame_desc[i].offset = offset;
202 urb->iso_frame_desc[i].length = mtu;
203 BT_DBG("desc %d offset %d len %d", i, offset, mtu);
205 if (len && i < HCI_MAX_ISOC_FRAMES) {
206 urb->iso_frame_desc[i].offset = offset;
207 urb->iso_frame_desc[i].length = len;
208 BT_DBG("desc %d offset %d len %d", i, offset, len);
211 urb->number_of_packets = i;
215 static int hci_usb_intr_rx_submit(struct hci_usb *husb)
219 int err, pipe, interval, size;
222 BT_DBG("%s", husb->hdev->name);
224 size = le16_to_cpu(husb->intr_in_ep->desc.wMaxPacketSize);
226 buf = kmalloc(size, GFP_ATOMIC);
230 _urb = _urb_alloc(0, GFP_ATOMIC);
235 _urb->type = HCI_EVENT_PKT;
236 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
239 pipe = usb_rcvintpipe(husb->udev, husb->intr_in_ep->desc.bEndpointAddress);
240 interval = husb->intr_in_ep->desc.bInterval;
241 usb_fill_int_urb(urb, husb->udev, pipe, buf, size, hci_usb_rx_complete, husb, interval);
243 err = usb_submit_urb(urb, GFP_ATOMIC);
245 BT_ERR("%s intr rx submit failed urb %p err %d",
246 husb->hdev->name, urb, err);
254 static int hci_usb_bulk_rx_submit(struct hci_usb *husb)
258 int err, pipe, size = HCI_MAX_FRAME_SIZE;
261 buf = kmalloc(size, GFP_ATOMIC);
265 _urb = _urb_alloc(0, GFP_ATOMIC);
270 _urb->type = HCI_ACLDATA_PKT;
271 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
274 pipe = usb_rcvbulkpipe(husb->udev, husb->bulk_in_ep->desc.bEndpointAddress);
275 usb_fill_bulk_urb(urb, husb->udev, pipe, buf, size, hci_usb_rx_complete, husb);
276 urb->transfer_flags = 0;
278 BT_DBG("%s urb %p", husb->hdev->name, urb);
280 err = usb_submit_urb(urb, GFP_ATOMIC);
282 BT_ERR("%s bulk rx submit failed urb %p err %d",
283 husb->hdev->name, urb, err);
291 #ifdef CONFIG_BT_HCIUSB_SCO
292 static int hci_usb_isoc_rx_submit(struct hci_usb *husb)
299 mtu = le16_to_cpu(husb->isoc_in_ep->desc.wMaxPacketSize);
300 size = mtu * HCI_MAX_ISOC_FRAMES;
302 buf = kmalloc(size, GFP_ATOMIC);
306 _urb = _urb_alloc(HCI_MAX_ISOC_FRAMES, GFP_ATOMIC);
311 _urb->type = HCI_SCODATA_PKT;
312 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
317 urb->dev = husb->udev;
318 urb->pipe = usb_rcvisocpipe(husb->udev, husb->isoc_in_ep->desc.bEndpointAddress);
319 urb->complete = hci_usb_rx_complete;
321 urb->interval = husb->isoc_in_ep->desc.bInterval;
323 urb->transfer_buffer_length = size;
324 urb->transfer_buffer = buf;
325 urb->transfer_flags = URB_ISO_ASAP;
327 __fill_isoc_desc(urb, size, mtu);
329 BT_DBG("%s urb %p", husb->hdev->name, urb);
331 err = usb_submit_urb(urb, GFP_ATOMIC);
333 BT_ERR("%s isoc rx submit failed urb %p err %d",
334 husb->hdev->name, urb, err);
343 /* Initialize device */
344 static int hci_usb_open(struct hci_dev *hdev)
346 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
350 BT_DBG("%s", hdev->name);
352 if (test_and_set_bit(HCI_RUNNING, &hdev->flags))
355 write_lock_irqsave(&husb->completion_lock, flags);
357 err = hci_usb_intr_rx_submit(husb);
359 for (i = 0; i < HCI_MAX_BULK_RX; i++)
360 hci_usb_bulk_rx_submit(husb);
362 #ifdef CONFIG_BT_HCIUSB_SCO
363 if (husb->isoc_iface)
364 for (i = 0; i < HCI_MAX_ISOC_RX; i++)
365 hci_usb_isoc_rx_submit(husb);
368 clear_bit(HCI_RUNNING, &hdev->flags);
371 write_unlock_irqrestore(&husb->completion_lock, flags);
376 static int hci_usb_flush(struct hci_dev *hdev)
378 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
381 BT_DBG("%s", hdev->name);
383 for (i = 0; i < 4; i++)
384 skb_queue_purge(&husb->transmit_q[i]);
388 static void hci_usb_unlink_urbs(struct hci_usb *husb)
392 BT_DBG("%s", husb->hdev->name);
394 for (i = 0; i < 4; i++) {
398 /* Kill pending requests */
399 while ((_urb = _urb_dequeue(&husb->pending_q[i]))) {
401 BT_DBG("%s unlinking _urb %p type %d urb %p",
402 husb->hdev->name, _urb, _urb->type, urb);
404 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
407 /* Release completed requests */
408 while ((_urb = _urb_dequeue(&husb->completed_q[i]))) {
410 BT_DBG("%s freeing _urb %p type %d urb %p",
411 husb->hdev->name, _urb, _urb->type, urb);
412 kfree(urb->setup_packet);
413 kfree(urb->transfer_buffer);
417 /* Release reassembly buffers */
418 if (husb->reassembly[i]) {
419 kfree_skb(husb->reassembly[i]);
420 husb->reassembly[i] = NULL;
426 static int hci_usb_close(struct hci_dev *hdev)
428 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
431 if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags))
434 BT_DBG("%s", hdev->name);
436 /* Synchronize with completion handlers */
437 write_lock_irqsave(&husb->completion_lock, flags);
438 write_unlock_irqrestore(&husb->completion_lock, flags);
440 hci_usb_unlink_urbs(husb);
445 static int __tx_submit(struct hci_usb *husb, struct _urb *_urb)
447 struct urb *urb = &_urb->urb;
450 BT_DBG("%s urb %p type %d", husb->hdev->name, urb, _urb->type);
452 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
453 err = usb_submit_urb(urb, GFP_ATOMIC);
455 BT_ERR("%s tx submit failed urb %p type %d err %d",
456 husb->hdev->name, urb, _urb->type, err);
458 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
460 atomic_inc(__pending_tx(husb, _urb->type));
465 static inline int hci_usb_send_ctrl(struct hci_usb *husb, struct sk_buff *skb)
467 struct _urb *_urb = __get_completed(husb, bt_cb(skb)->pkt_type);
468 struct usb_ctrlrequest *dr;
472 _urb = _urb_alloc(0, GFP_ATOMIC);
475 _urb->type = bt_cb(skb)->pkt_type;
477 dr = kmalloc(sizeof(*dr), GFP_ATOMIC);
483 dr = (void *) _urb->urb.setup_packet;
485 dr->bRequestType = husb->ctrl_req;
489 dr->wLength = __cpu_to_le16(skb->len);
492 usb_fill_control_urb(urb, husb->udev, usb_sndctrlpipe(husb->udev, 0),
493 (void *) dr, skb->data, skb->len, hci_usb_tx_complete, husb);
495 BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
498 return __tx_submit(husb, _urb);
501 static inline int hci_usb_send_bulk(struct hci_usb *husb, struct sk_buff *skb)
503 struct _urb *_urb = __get_completed(husb, bt_cb(skb)->pkt_type);
508 _urb = _urb_alloc(0, GFP_ATOMIC);
511 _urb->type = bt_cb(skb)->pkt_type;
515 pipe = usb_sndbulkpipe(husb->udev, husb->bulk_out_ep->desc.bEndpointAddress);
516 usb_fill_bulk_urb(urb, husb->udev, pipe, skb->data, skb->len,
517 hci_usb_tx_complete, husb);
518 urb->transfer_flags = URB_ZERO_PACKET;
520 BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
523 return __tx_submit(husb, _urb);
526 #ifdef CONFIG_BT_HCIUSB_SCO
527 static inline int hci_usb_send_isoc(struct hci_usb *husb, struct sk_buff *skb)
529 struct _urb *_urb = __get_completed(husb, bt_cb(skb)->pkt_type);
533 _urb = _urb_alloc(HCI_MAX_ISOC_FRAMES, GFP_ATOMIC);
536 _urb->type = bt_cb(skb)->pkt_type;
539 BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
544 urb->dev = husb->udev;
545 urb->pipe = usb_sndisocpipe(husb->udev, husb->isoc_out_ep->desc.bEndpointAddress);
546 urb->complete = hci_usb_tx_complete;
547 urb->transfer_flags = URB_ISO_ASAP;
549 urb->interval = husb->isoc_out_ep->desc.bInterval;
551 urb->transfer_buffer = skb->data;
552 urb->transfer_buffer_length = skb->len;
554 __fill_isoc_desc(urb, skb->len, le16_to_cpu(husb->isoc_out_ep->desc.wMaxPacketSize));
557 return __tx_submit(husb, _urb);
561 static void hci_usb_tx_process(struct hci_usb *husb)
563 struct sk_buff_head *q;
566 BT_DBG("%s", husb->hdev->name);
569 clear_bit(HCI_USB_TX_WAKEUP, &husb->state);
571 /* Process command queue */
572 q = __transmit_q(husb, HCI_COMMAND_PKT);
573 if (!atomic_read(__pending_tx(husb, HCI_COMMAND_PKT)) &&
574 (skb = skb_dequeue(q))) {
575 if (hci_usb_send_ctrl(husb, skb) < 0)
576 skb_queue_head(q, skb);
579 #ifdef CONFIG_BT_HCIUSB_SCO
580 /* Process SCO queue */
581 q = __transmit_q(husb, HCI_SCODATA_PKT);
582 if (atomic_read(__pending_tx(husb, HCI_SCODATA_PKT)) < HCI_MAX_ISOC_TX &&
583 (skb = skb_dequeue(q))) {
584 if (hci_usb_send_isoc(husb, skb) < 0)
585 skb_queue_head(q, skb);
589 /* Process ACL queue */
590 q = __transmit_q(husb, HCI_ACLDATA_PKT);
591 while (atomic_read(__pending_tx(husb, HCI_ACLDATA_PKT)) < HCI_MAX_BULK_TX &&
592 (skb = skb_dequeue(q))) {
593 if (hci_usb_send_bulk(husb, skb) < 0) {
594 skb_queue_head(q, skb);
598 } while(test_bit(HCI_USB_TX_WAKEUP, &husb->state));
601 static inline void hci_usb_tx_wakeup(struct hci_usb *husb)
603 /* Serialize TX queue processing to avoid data reordering */
604 if (!test_and_set_bit(HCI_USB_TX_PROCESS, &husb->state)) {
605 hci_usb_tx_process(husb);
606 clear_bit(HCI_USB_TX_PROCESS, &husb->state);
608 set_bit(HCI_USB_TX_WAKEUP, &husb->state);
611 /* Send frames from HCI layer */
612 static int hci_usb_send_frame(struct sk_buff *skb)
614 struct hci_dev *hdev = (struct hci_dev *) skb->dev;
615 struct hci_usb *husb;
618 BT_ERR("frame for uknown device (hdev=NULL)");
622 if (!test_bit(HCI_RUNNING, &hdev->flags))
625 BT_DBG("%s type %d len %d", hdev->name, bt_cb(skb)->pkt_type, skb->len);
627 husb = (struct hci_usb *) hdev->driver_data;
629 switch (bt_cb(skb)->pkt_type) {
630 case HCI_COMMAND_PKT:
634 case HCI_ACLDATA_PKT:
638 #ifdef CONFIG_BT_HCIUSB_SCO
639 case HCI_SCODATA_PKT:
649 read_lock(&husb->completion_lock);
651 skb_queue_tail(__transmit_q(husb, bt_cb(skb)->pkt_type), skb);
652 hci_usb_tx_wakeup(husb);
654 read_unlock(&husb->completion_lock);
658 static inline int __recv_frame(struct hci_usb *husb, int type, void *data, int count)
660 BT_DBG("%s type %d data %p count %d", husb->hdev->name, type, data, count);
662 husb->hdev->stat.byte_rx += count;
665 struct sk_buff *skb = __reassembly(husb, type);
666 struct { int expect; } *scb;
670 /* Start of the frame */
674 if (count >= HCI_EVENT_HDR_SIZE) {
675 struct hci_event_hdr *h = data;
676 len = HCI_EVENT_HDR_SIZE + h->plen;
681 case HCI_ACLDATA_PKT:
682 if (count >= HCI_ACL_HDR_SIZE) {
683 struct hci_acl_hdr *h = data;
684 len = HCI_ACL_HDR_SIZE + __le16_to_cpu(h->dlen);
688 #ifdef CONFIG_BT_HCIUSB_SCO
689 case HCI_SCODATA_PKT:
690 if (count >= HCI_SCO_HDR_SIZE) {
691 struct hci_sco_hdr *h = data;
692 len = HCI_SCO_HDR_SIZE + h->dlen;
698 BT_DBG("new packet len %d", len);
700 skb = bt_skb_alloc(len, GFP_ATOMIC);
702 BT_ERR("%s no memory for the packet", husb->hdev->name);
705 skb->dev = (void *) husb->hdev;
706 bt_cb(skb)->pkt_type = type;
708 __reassembly(husb, type) = skb;
710 scb = (void *) skb->cb;
714 scb = (void *) skb->cb;
718 len = min(len, count);
720 memcpy(skb_put(skb, len), data, len);
725 __reassembly(husb, type) = NULL;
726 bt_cb(skb)->pkt_type = type;
730 count -= len; data += len;
735 static void hci_usb_rx_complete(struct urb *urb, struct pt_regs *regs)
737 struct _urb *_urb = container_of(urb, struct _urb, urb);
738 struct hci_usb *husb = (void *) urb->context;
739 struct hci_dev *hdev = husb->hdev;
740 int err, count = urb->actual_length;
742 BT_DBG("%s urb %p type %d status %d count %d flags %x", hdev->name, urb,
743 _urb->type, urb->status, count, urb->transfer_flags);
745 read_lock(&husb->completion_lock);
747 if (!test_bit(HCI_RUNNING, &hdev->flags))
750 if (urb->status || !count)
753 if (_urb->type == HCI_SCODATA_PKT) {
754 #ifdef CONFIG_BT_HCIUSB_SCO
756 for (i=0; i < urb->number_of_packets; i++) {
757 BT_DBG("desc %d status %d offset %d len %d", i,
758 urb->iso_frame_desc[i].status,
759 urb->iso_frame_desc[i].offset,
760 urb->iso_frame_desc[i].actual_length);
762 if (!urb->iso_frame_desc[i].status)
763 __recv_frame(husb, _urb->type,
764 urb->transfer_buffer + urb->iso_frame_desc[i].offset,
765 urb->iso_frame_desc[i].actual_length);
771 err = __recv_frame(husb, _urb->type, urb->transfer_buffer, count);
773 BT_ERR("%s corrupted packet: type %d count %d",
774 husb->hdev->name, _urb->type, count);
780 urb->dev = husb->udev;
781 err = usb_submit_urb(urb, GFP_ATOMIC);
782 BT_DBG("%s urb %p type %d resubmit status %d", hdev->name, urb,
786 read_unlock(&husb->completion_lock);
789 static void hci_usb_tx_complete(struct urb *urb, struct pt_regs *regs)
791 struct _urb *_urb = container_of(urb, struct _urb, urb);
792 struct hci_usb *husb = (void *) urb->context;
793 struct hci_dev *hdev = husb->hdev;
795 BT_DBG("%s urb %p status %d flags %x", hdev->name, urb,
796 urb->status, urb->transfer_flags);
798 atomic_dec(__pending_tx(husb, _urb->type));
800 urb->transfer_buffer = NULL;
801 kfree_skb((struct sk_buff *) _urb->priv);
803 if (!test_bit(HCI_RUNNING, &hdev->flags))
807 hdev->stat.byte_tx += urb->transfer_buffer_length;
811 read_lock(&husb->completion_lock);
814 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
816 hci_usb_tx_wakeup(husb);
818 read_unlock(&husb->completion_lock);
821 static void hci_usb_destruct(struct hci_dev *hdev)
823 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
825 BT_DBG("%s", hdev->name);
830 static void hci_usb_notify(struct hci_dev *hdev, unsigned int evt)
832 BT_DBG("%s evt %d", hdev->name, evt);
835 static int hci_usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
837 struct usb_device *udev = interface_to_usbdev(intf);
838 struct usb_host_endpoint *bulk_out_ep = NULL;
839 struct usb_host_endpoint *bulk_in_ep = NULL;
840 struct usb_host_endpoint *intr_in_ep = NULL;
841 struct usb_host_endpoint *ep;
842 struct usb_host_interface *uif;
843 struct usb_interface *isoc_iface;
844 struct hci_usb *husb;
845 struct hci_dev *hdev;
846 int i, e, size, isoc_ifnum, isoc_alts;
848 BT_DBG("udev %p intf %p", udev, intf);
850 if (!id->driver_info) {
851 const struct usb_device_id *match;
852 match = usb_match_id(intf, blacklist_ids);
857 if (ignore || id->driver_info & HCI_IGNORE)
860 if (ignore_dga && id->driver_info & HCI_DIGIANSWER)
863 if (ignore_csr && id->driver_info & HCI_CSR)
866 if (ignore_sniffer && id->driver_info & HCI_SNIFFER)
869 if (intf->cur_altsetting->desc.bInterfaceNumber > 0)
872 /* Find endpoints that we need */
873 uif = intf->cur_altsetting;
874 for (e = 0; e < uif->desc.bNumEndpoints; e++) {
875 ep = &uif->endpoint[e];
877 switch (ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
878 case USB_ENDPOINT_XFER_INT:
879 if (ep->desc.bEndpointAddress & USB_DIR_IN)
883 case USB_ENDPOINT_XFER_BULK:
884 if (ep->desc.bEndpointAddress & USB_DIR_IN)
892 if (!bulk_in_ep || !bulk_out_ep || !intr_in_ep) {
893 BT_DBG("Bulk endpoints not found");
897 if (!(husb = kzalloc(sizeof(struct hci_usb), GFP_KERNEL))) {
898 BT_ERR("Can't allocate: control structure");
903 husb->bulk_out_ep = bulk_out_ep;
904 husb->bulk_in_ep = bulk_in_ep;
905 husb->intr_in_ep = intr_in_ep;
907 if (id->driver_info & HCI_DIGIANSWER)
908 husb->ctrl_req = USB_TYPE_VENDOR;
910 husb->ctrl_req = USB_TYPE_CLASS;
912 /* Find isochronous endpoints that we can use */
918 #ifdef CONFIG_BT_HCIUSB_SCO
919 if (isoc && !(id->driver_info & (HCI_BROKEN_ISOC | HCI_SNIFFER)))
920 isoc_iface = usb_ifnum_to_if(udev, isoc_ifnum);
924 struct usb_host_endpoint *isoc_out_ep = NULL;
925 struct usb_host_endpoint *isoc_in_ep = NULL;
927 for (a = 0; a < isoc_iface->num_altsetting; a++) {
928 uif = &isoc_iface->altsetting[a];
929 for (e = 0; e < uif->desc.bNumEndpoints; e++) {
930 ep = &uif->endpoint[e];
932 switch (ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
933 case USB_ENDPOINT_XFER_ISOC:
934 if (le16_to_cpu(ep->desc.wMaxPacketSize) < size ||
935 uif->desc.bAlternateSetting != isoc)
937 size = le16_to_cpu(ep->desc.wMaxPacketSize);
939 isoc_alts = uif->desc.bAlternateSetting;
941 if (ep->desc.bEndpointAddress & USB_DIR_IN)
950 if (!isoc_in_ep || !isoc_out_ep)
951 BT_DBG("Isoc endpoints not found");
953 BT_DBG("isoc ifnum %d alts %d", isoc_ifnum, isoc_alts);
954 if (usb_driver_claim_interface(&hci_usb_driver, isoc_iface, husb) != 0)
955 BT_ERR("Can't claim isoc interface");
956 else if (usb_set_interface(udev, isoc_ifnum, isoc_alts)) {
957 BT_ERR("Can't set isoc interface settings");
958 husb->isoc_iface = isoc_iface;
959 usb_driver_release_interface(&hci_usb_driver, isoc_iface);
960 husb->isoc_iface = NULL;
962 husb->isoc_iface = isoc_iface;
963 husb->isoc_in_ep = isoc_in_ep;
964 husb->isoc_out_ep = isoc_out_ep;
970 rwlock_init(&husb->completion_lock);
972 for (i = 0; i < 4; i++) {
973 skb_queue_head_init(&husb->transmit_q[i]);
974 _urb_queue_init(&husb->pending_q[i]);
975 _urb_queue_init(&husb->completed_q[i]);
978 /* Initialize and register HCI device */
979 hdev = hci_alloc_dev();
981 BT_ERR("Can't allocate HCI device");
987 hdev->type = HCI_USB;
988 hdev->driver_data = husb;
989 SET_HCIDEV_DEV(hdev, &intf->dev);
991 hdev->open = hci_usb_open;
992 hdev->close = hci_usb_close;
993 hdev->flush = hci_usb_flush;
994 hdev->send = hci_usb_send_frame;
995 hdev->destruct = hci_usb_destruct;
996 hdev->notify = hci_usb_notify;
998 hdev->owner = THIS_MODULE;
1000 if (reset || id->driver_info & HCI_RESET)
1001 set_bit(HCI_QUIRK_RESET_ON_INIT, &hdev->quirks);
1003 if (force_scofix || id->driver_info & HCI_WRONG_SCO_MTU) {
1004 if (!disable_scofix)
1005 set_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks);
1008 if (id->driver_info & HCI_SNIFFER) {
1009 if (le16_to_cpu(udev->descriptor.bcdDevice) > 0x997)
1010 set_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks);
1013 if (id->driver_info & HCI_BCM92035) {
1014 unsigned char cmd[] = { 0x3b, 0xfc, 0x01, 0x00 };
1015 struct sk_buff *skb;
1017 skb = bt_skb_alloc(sizeof(cmd), GFP_KERNEL);
1019 memcpy(skb_put(skb, sizeof(cmd)), cmd, sizeof(cmd));
1020 skb_queue_tail(&hdev->driver_init, skb);
1024 if (hci_register_dev(hdev) < 0) {
1025 BT_ERR("Can't register HCI device");
1030 usb_set_intfdata(intf, husb);
1034 if (husb->isoc_iface)
1035 usb_driver_release_interface(&hci_usb_driver, husb->isoc_iface);
1042 static void hci_usb_disconnect(struct usb_interface *intf)
1044 struct hci_usb *husb = usb_get_intfdata(intf);
1045 struct hci_dev *hdev;
1047 if (!husb || intf == husb->isoc_iface)
1050 usb_set_intfdata(intf, NULL);
1053 BT_DBG("%s", hdev->name);
1055 hci_usb_close(hdev);
1057 if (husb->isoc_iface)
1058 usb_driver_release_interface(&hci_usb_driver, husb->isoc_iface);
1060 if (hci_unregister_dev(hdev) < 0)
1061 BT_ERR("Can't unregister HCI device %s", hdev->name);
1066 static int hci_usb_suspend(struct usb_interface *intf, pm_message_t message)
1068 struct hci_usb *husb = usb_get_intfdata(intf);
1069 struct list_head killed;
1070 unsigned long flags;
1073 if (!husb || intf == husb->isoc_iface)
1076 hci_suspend_dev(husb->hdev);
1078 INIT_LIST_HEAD(&killed);
1080 for (i = 0; i < 4; i++) {
1081 struct _urb_queue *q = &husb->pending_q[i];
1082 struct _urb *_urb, *_tmp;
1084 while ((_urb = _urb_dequeue(q))) {
1085 /* reset queue since _urb_dequeue sets it to NULL */
1087 usb_kill_urb(&_urb->urb);
1088 list_add(&_urb->list, &killed);
1091 spin_lock_irqsave(&q->lock, flags);
1093 list_for_each_entry_safe(_urb, _tmp, &killed, list) {
1094 list_move_tail(&_urb->list, &q->head);
1097 spin_unlock_irqrestore(&q->lock, flags);
1103 static int hci_usb_resume(struct usb_interface *intf)
1105 struct hci_usb *husb = usb_get_intfdata(intf);
1106 unsigned long flags;
1109 if (!husb || intf == husb->isoc_iface)
1112 for (i = 0; i < 4; i++) {
1113 struct _urb_queue *q = &husb->pending_q[i];
1116 spin_lock_irqsave(&q->lock, flags);
1118 list_for_each_entry(_urb, &q->head, list) {
1119 err = usb_submit_urb(&_urb->urb, GFP_ATOMIC);
1124 spin_unlock_irqrestore(&q->lock, flags);
1130 hci_resume_dev(husb->hdev);
1135 static struct usb_driver hci_usb_driver = {
1137 .probe = hci_usb_probe,
1138 .disconnect = hci_usb_disconnect,
1139 .suspend = hci_usb_suspend,
1140 .resume = hci_usb_resume,
1141 .id_table = bluetooth_ids,
1144 static int __init hci_usb_init(void)
1148 BT_INFO("HCI USB driver ver %s", VERSION);
1150 if ((err = usb_register(&hci_usb_driver)) < 0)
1151 BT_ERR("Failed to register HCI USB driver");
1156 static void __exit hci_usb_exit(void)
1158 usb_deregister(&hci_usb_driver);
1161 module_init(hci_usb_init);
1162 module_exit(hci_usb_exit);
1164 module_param(ignore, bool, 0644);
1165 MODULE_PARM_DESC(ignore, "Ignore devices from the matching table");
1167 module_param(ignore_dga, bool, 0644);
1168 MODULE_PARM_DESC(ignore_dga, "Ignore devices with id 08fd:0001");
1170 module_param(ignore_csr, bool, 0644);
1171 MODULE_PARM_DESC(ignore_csr, "Ignore devices with id 0a12:0001");
1173 module_param(ignore_sniffer, bool, 0644);
1174 MODULE_PARM_DESC(ignore_sniffer, "Ignore devices with id 0a12:0002");
1176 module_param(disable_scofix, bool, 0644);
1177 MODULE_PARM_DESC(disable_scofix, "Disable fixup of wrong SCO buffer size");
1179 module_param(force_scofix, bool, 0644);
1180 MODULE_PARM_DESC(force_scofix, "Force fixup of wrong SCO buffers size");
1182 module_param(reset, bool, 0644);
1183 MODULE_PARM_DESC(reset, "Send HCI reset command on initialization");
1185 #ifdef CONFIG_BT_HCIUSB_SCO
1186 module_param(isoc, int, 0644);
1187 MODULE_PARM_DESC(isoc, "Set isochronous transfers for SCO over HCI support");
1190 MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>, Marcel Holtmann <marcel@holtmann.org>");
1191 MODULE_DESCRIPTION("Bluetooth HCI USB driver ver " VERSION);
1192 MODULE_VERSION(VERSION);
1193 MODULE_LICENSE("GPL");