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 { } /* Terminating entry */
102 MODULE_DEVICE_TABLE (usb, bluetooth_ids);
104 static struct usb_device_id blacklist_ids[] = {
105 /* CSR BlueCore devices */
106 { USB_DEVICE(0x0a12, 0x0001), .driver_info = HCI_CSR },
108 /* Broadcom BCM2033 without firmware */
109 { USB_DEVICE(0x0a5c, 0x2033), .driver_info = HCI_IGNORE },
111 /* Broadcom BCM2035 */
112 { USB_DEVICE(0x0a5c, 0x200a), .driver_info = HCI_RESET | HCI_BROKEN_ISOC },
113 { USB_DEVICE(0x0a5c, 0x2009), .driver_info = HCI_BCM92035 },
115 /* IBM/Lenovo ThinkPad with Broadcom chip */
116 { USB_DEVICE(0x0a5c, 0x201e), .driver_info = HCI_WRONG_SCO_MTU },
118 /* Microsoft Wireless Transceiver for Bluetooth 2.0 */
119 { USB_DEVICE(0x045e, 0x009c), .driver_info = HCI_RESET },
121 /* Kensington Bluetooth USB adapter */
122 { USB_DEVICE(0x047d, 0x105d), .driver_info = HCI_RESET },
124 /* ISSC Bluetooth Adapter v3.1 */
125 { USB_DEVICE(0x1131, 0x1001), .driver_info = HCI_RESET },
127 /* RTX Telecom based adapter with buggy SCO support */
128 { USB_DEVICE(0x0400, 0x0807), .driver_info = HCI_BROKEN_ISOC },
131 { USB_DEVICE(0x050d, 0x0012), .driver_info = HCI_WRONG_SCO_MTU },
133 /* Digianswer devices */
134 { USB_DEVICE(0x08fd, 0x0001), .driver_info = HCI_DIGIANSWER },
135 { USB_DEVICE(0x08fd, 0x0002), .driver_info = HCI_IGNORE },
137 /* CSR BlueCore Bluetooth Sniffer */
138 { USB_DEVICE(0x0a12, 0x0002), .driver_info = HCI_SNIFFER },
140 /* Frontline ComProbe Bluetooth Sniffer */
141 { USB_DEVICE(0x16d3, 0x0002), .driver_info = HCI_SNIFFER },
143 { } /* Terminating entry */
146 static struct _urb *_urb_alloc(int isoc, gfp_t gfp)
148 struct _urb *_urb = kmalloc(sizeof(struct _urb) +
149 sizeof(struct usb_iso_packet_descriptor) * isoc, gfp);
151 memset(_urb, 0, sizeof(*_urb));
152 usb_init_urb(&_urb->urb);
157 static struct _urb *_urb_dequeue(struct _urb_queue *q)
159 struct _urb *_urb = NULL;
161 spin_lock_irqsave(&q->lock, flags);
163 struct list_head *head = &q->head;
164 struct list_head *next = head->next;
166 _urb = list_entry(next, struct _urb, list);
167 list_del(next); _urb->queue = NULL;
170 spin_unlock_irqrestore(&q->lock, flags);
174 static void hci_usb_rx_complete(struct urb *urb, struct pt_regs *regs);
175 static void hci_usb_tx_complete(struct urb *urb, struct pt_regs *regs);
177 #define __pending_tx(husb, type) (&husb->pending_tx[type-1])
178 #define __pending_q(husb, type) (&husb->pending_q[type-1])
179 #define __completed_q(husb, type) (&husb->completed_q[type-1])
180 #define __transmit_q(husb, type) (&husb->transmit_q[type-1])
181 #define __reassembly(husb, type) (husb->reassembly[type-1])
183 static inline struct _urb *__get_completed(struct hci_usb *husb, int type)
185 return _urb_dequeue(__completed_q(husb, type));
188 #ifdef CONFIG_BT_HCIUSB_SCO
189 static void __fill_isoc_desc(struct urb *urb, int len, int mtu)
193 BT_DBG("len %d mtu %d", len, mtu);
195 for (i=0; i < HCI_MAX_ISOC_FRAMES && len >= mtu; i++, offset += mtu, len -= mtu) {
196 urb->iso_frame_desc[i].offset = offset;
197 urb->iso_frame_desc[i].length = mtu;
198 BT_DBG("desc %d offset %d len %d", i, offset, mtu);
200 if (len && i < HCI_MAX_ISOC_FRAMES) {
201 urb->iso_frame_desc[i].offset = offset;
202 urb->iso_frame_desc[i].length = len;
203 BT_DBG("desc %d offset %d len %d", i, offset, len);
206 urb->number_of_packets = i;
210 static int hci_usb_intr_rx_submit(struct hci_usb *husb)
214 int err, pipe, interval, size;
217 BT_DBG("%s", husb->hdev->name);
219 size = le16_to_cpu(husb->intr_in_ep->desc.wMaxPacketSize);
221 buf = kmalloc(size, GFP_ATOMIC);
225 _urb = _urb_alloc(0, GFP_ATOMIC);
230 _urb->type = HCI_EVENT_PKT;
231 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
234 pipe = usb_rcvintpipe(husb->udev, husb->intr_in_ep->desc.bEndpointAddress);
235 interval = husb->intr_in_ep->desc.bInterval;
236 usb_fill_int_urb(urb, husb->udev, pipe, buf, size, hci_usb_rx_complete, husb, interval);
238 err = usb_submit_urb(urb, GFP_ATOMIC);
240 BT_ERR("%s intr rx submit failed urb %p err %d",
241 husb->hdev->name, urb, err);
249 static int hci_usb_bulk_rx_submit(struct hci_usb *husb)
253 int err, pipe, size = HCI_MAX_FRAME_SIZE;
256 buf = kmalloc(size, GFP_ATOMIC);
260 _urb = _urb_alloc(0, GFP_ATOMIC);
265 _urb->type = HCI_ACLDATA_PKT;
266 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
269 pipe = usb_rcvbulkpipe(husb->udev, husb->bulk_in_ep->desc.bEndpointAddress);
270 usb_fill_bulk_urb(urb, husb->udev, pipe, buf, size, hci_usb_rx_complete, husb);
271 urb->transfer_flags = 0;
273 BT_DBG("%s urb %p", husb->hdev->name, urb);
275 err = usb_submit_urb(urb, GFP_ATOMIC);
277 BT_ERR("%s bulk rx submit failed urb %p err %d",
278 husb->hdev->name, urb, err);
286 #ifdef CONFIG_BT_HCIUSB_SCO
287 static int hci_usb_isoc_rx_submit(struct hci_usb *husb)
294 mtu = le16_to_cpu(husb->isoc_in_ep->desc.wMaxPacketSize);
295 size = mtu * HCI_MAX_ISOC_FRAMES;
297 buf = kmalloc(size, GFP_ATOMIC);
301 _urb = _urb_alloc(HCI_MAX_ISOC_FRAMES, GFP_ATOMIC);
306 _urb->type = HCI_SCODATA_PKT;
307 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
312 urb->dev = husb->udev;
313 urb->pipe = usb_rcvisocpipe(husb->udev, husb->isoc_in_ep->desc.bEndpointAddress);
314 urb->complete = hci_usb_rx_complete;
316 urb->interval = husb->isoc_in_ep->desc.bInterval;
318 urb->transfer_buffer_length = size;
319 urb->transfer_buffer = buf;
320 urb->transfer_flags = URB_ISO_ASAP;
322 __fill_isoc_desc(urb, size, mtu);
324 BT_DBG("%s urb %p", husb->hdev->name, urb);
326 err = usb_submit_urb(urb, GFP_ATOMIC);
328 BT_ERR("%s isoc rx submit failed urb %p err %d",
329 husb->hdev->name, urb, err);
338 /* Initialize device */
339 static int hci_usb_open(struct hci_dev *hdev)
341 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
345 BT_DBG("%s", hdev->name);
347 if (test_and_set_bit(HCI_RUNNING, &hdev->flags))
350 write_lock_irqsave(&husb->completion_lock, flags);
352 err = hci_usb_intr_rx_submit(husb);
354 for (i = 0; i < HCI_MAX_BULK_RX; i++)
355 hci_usb_bulk_rx_submit(husb);
357 #ifdef CONFIG_BT_HCIUSB_SCO
358 if (husb->isoc_iface)
359 for (i = 0; i < HCI_MAX_ISOC_RX; i++)
360 hci_usb_isoc_rx_submit(husb);
363 clear_bit(HCI_RUNNING, &hdev->flags);
366 write_unlock_irqrestore(&husb->completion_lock, flags);
371 static int hci_usb_flush(struct hci_dev *hdev)
373 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
376 BT_DBG("%s", hdev->name);
378 for (i = 0; i < 4; i++)
379 skb_queue_purge(&husb->transmit_q[i]);
383 static void hci_usb_unlink_urbs(struct hci_usb *husb)
387 BT_DBG("%s", husb->hdev->name);
389 for (i = 0; i < 4; i++) {
393 /* Kill pending requests */
394 while ((_urb = _urb_dequeue(&husb->pending_q[i]))) {
396 BT_DBG("%s unlinking _urb %p type %d urb %p",
397 husb->hdev->name, _urb, _urb->type, urb);
399 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
402 /* Release completed requests */
403 while ((_urb = _urb_dequeue(&husb->completed_q[i]))) {
405 BT_DBG("%s freeing _urb %p type %d urb %p",
406 husb->hdev->name, _urb, _urb->type, urb);
407 kfree(urb->setup_packet);
408 kfree(urb->transfer_buffer);
412 /* Release reassembly buffers */
413 if (husb->reassembly[i]) {
414 kfree_skb(husb->reassembly[i]);
415 husb->reassembly[i] = NULL;
421 static int hci_usb_close(struct hci_dev *hdev)
423 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
426 if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags))
429 BT_DBG("%s", hdev->name);
431 /* Synchronize with completion handlers */
432 write_lock_irqsave(&husb->completion_lock, flags);
433 write_unlock_irqrestore(&husb->completion_lock, flags);
435 hci_usb_unlink_urbs(husb);
440 static int __tx_submit(struct hci_usb *husb, struct _urb *_urb)
442 struct urb *urb = &_urb->urb;
445 BT_DBG("%s urb %p type %d", husb->hdev->name, urb, _urb->type);
447 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
448 err = usb_submit_urb(urb, GFP_ATOMIC);
450 BT_ERR("%s tx submit failed urb %p type %d err %d",
451 husb->hdev->name, urb, _urb->type, err);
453 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
455 atomic_inc(__pending_tx(husb, _urb->type));
460 static inline int hci_usb_send_ctrl(struct hci_usb *husb, struct sk_buff *skb)
462 struct _urb *_urb = __get_completed(husb, bt_cb(skb)->pkt_type);
463 struct usb_ctrlrequest *dr;
467 _urb = _urb_alloc(0, GFP_ATOMIC);
470 _urb->type = bt_cb(skb)->pkt_type;
472 dr = kmalloc(sizeof(*dr), GFP_ATOMIC);
478 dr = (void *) _urb->urb.setup_packet;
480 dr->bRequestType = husb->ctrl_req;
484 dr->wLength = __cpu_to_le16(skb->len);
487 usb_fill_control_urb(urb, husb->udev, usb_sndctrlpipe(husb->udev, 0),
488 (void *) dr, skb->data, skb->len, hci_usb_tx_complete, husb);
490 BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
493 return __tx_submit(husb, _urb);
496 static inline int hci_usb_send_bulk(struct hci_usb *husb, struct sk_buff *skb)
498 struct _urb *_urb = __get_completed(husb, bt_cb(skb)->pkt_type);
503 _urb = _urb_alloc(0, GFP_ATOMIC);
506 _urb->type = bt_cb(skb)->pkt_type;
510 pipe = usb_sndbulkpipe(husb->udev, husb->bulk_out_ep->desc.bEndpointAddress);
511 usb_fill_bulk_urb(urb, husb->udev, pipe, skb->data, skb->len,
512 hci_usb_tx_complete, husb);
513 urb->transfer_flags = URB_ZERO_PACKET;
515 BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
518 return __tx_submit(husb, _urb);
521 #ifdef CONFIG_BT_HCIUSB_SCO
522 static inline int hci_usb_send_isoc(struct hci_usb *husb, struct sk_buff *skb)
524 struct _urb *_urb = __get_completed(husb, bt_cb(skb)->pkt_type);
528 _urb = _urb_alloc(HCI_MAX_ISOC_FRAMES, GFP_ATOMIC);
531 _urb->type = bt_cb(skb)->pkt_type;
534 BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
539 urb->dev = husb->udev;
540 urb->pipe = usb_sndisocpipe(husb->udev, husb->isoc_out_ep->desc.bEndpointAddress);
541 urb->complete = hci_usb_tx_complete;
542 urb->transfer_flags = URB_ISO_ASAP;
544 urb->interval = husb->isoc_out_ep->desc.bInterval;
546 urb->transfer_buffer = skb->data;
547 urb->transfer_buffer_length = skb->len;
549 __fill_isoc_desc(urb, skb->len, le16_to_cpu(husb->isoc_out_ep->desc.wMaxPacketSize));
552 return __tx_submit(husb, _urb);
556 static void hci_usb_tx_process(struct hci_usb *husb)
558 struct sk_buff_head *q;
561 BT_DBG("%s", husb->hdev->name);
564 clear_bit(HCI_USB_TX_WAKEUP, &husb->state);
566 /* Process command queue */
567 q = __transmit_q(husb, HCI_COMMAND_PKT);
568 if (!atomic_read(__pending_tx(husb, HCI_COMMAND_PKT)) &&
569 (skb = skb_dequeue(q))) {
570 if (hci_usb_send_ctrl(husb, skb) < 0)
571 skb_queue_head(q, skb);
574 #ifdef CONFIG_BT_HCIUSB_SCO
575 /* Process SCO queue */
576 q = __transmit_q(husb, HCI_SCODATA_PKT);
577 if (atomic_read(__pending_tx(husb, HCI_SCODATA_PKT)) < HCI_MAX_ISOC_TX &&
578 (skb = skb_dequeue(q))) {
579 if (hci_usb_send_isoc(husb, skb) < 0)
580 skb_queue_head(q, skb);
584 /* Process ACL queue */
585 q = __transmit_q(husb, HCI_ACLDATA_PKT);
586 while (atomic_read(__pending_tx(husb, HCI_ACLDATA_PKT)) < HCI_MAX_BULK_TX &&
587 (skb = skb_dequeue(q))) {
588 if (hci_usb_send_bulk(husb, skb) < 0) {
589 skb_queue_head(q, skb);
593 } while(test_bit(HCI_USB_TX_WAKEUP, &husb->state));
596 static inline void hci_usb_tx_wakeup(struct hci_usb *husb)
598 /* Serialize TX queue processing to avoid data reordering */
599 if (!test_and_set_bit(HCI_USB_TX_PROCESS, &husb->state)) {
600 hci_usb_tx_process(husb);
601 clear_bit(HCI_USB_TX_PROCESS, &husb->state);
603 set_bit(HCI_USB_TX_WAKEUP, &husb->state);
606 /* Send frames from HCI layer */
607 static int hci_usb_send_frame(struct sk_buff *skb)
609 struct hci_dev *hdev = (struct hci_dev *) skb->dev;
610 struct hci_usb *husb;
613 BT_ERR("frame for uknown device (hdev=NULL)");
617 if (!test_bit(HCI_RUNNING, &hdev->flags))
620 BT_DBG("%s type %d len %d", hdev->name, bt_cb(skb)->pkt_type, skb->len);
622 husb = (struct hci_usb *) hdev->driver_data;
624 switch (bt_cb(skb)->pkt_type) {
625 case HCI_COMMAND_PKT:
629 case HCI_ACLDATA_PKT:
633 #ifdef CONFIG_BT_HCIUSB_SCO
634 case HCI_SCODATA_PKT:
644 read_lock(&husb->completion_lock);
646 skb_queue_tail(__transmit_q(husb, bt_cb(skb)->pkt_type), skb);
647 hci_usb_tx_wakeup(husb);
649 read_unlock(&husb->completion_lock);
653 static inline int __recv_frame(struct hci_usb *husb, int type, void *data, int count)
655 BT_DBG("%s type %d data %p count %d", husb->hdev->name, type, data, count);
657 husb->hdev->stat.byte_rx += count;
660 struct sk_buff *skb = __reassembly(husb, type);
661 struct { int expect; } *scb;
665 /* Start of the frame */
669 if (count >= HCI_EVENT_HDR_SIZE) {
670 struct hci_event_hdr *h = data;
671 len = HCI_EVENT_HDR_SIZE + h->plen;
676 case HCI_ACLDATA_PKT:
677 if (count >= HCI_ACL_HDR_SIZE) {
678 struct hci_acl_hdr *h = data;
679 len = HCI_ACL_HDR_SIZE + __le16_to_cpu(h->dlen);
683 #ifdef CONFIG_BT_HCIUSB_SCO
684 case HCI_SCODATA_PKT:
685 if (count >= HCI_SCO_HDR_SIZE) {
686 struct hci_sco_hdr *h = data;
687 len = HCI_SCO_HDR_SIZE + h->dlen;
693 BT_DBG("new packet len %d", len);
695 skb = bt_skb_alloc(len, GFP_ATOMIC);
697 BT_ERR("%s no memory for the packet", husb->hdev->name);
700 skb->dev = (void *) husb->hdev;
701 bt_cb(skb)->pkt_type = type;
703 __reassembly(husb, type) = skb;
705 scb = (void *) skb->cb;
709 scb = (void *) skb->cb;
713 len = min(len, count);
715 memcpy(skb_put(skb, len), data, len);
720 __reassembly(husb, type) = NULL;
721 bt_cb(skb)->pkt_type = type;
725 count -= len; data += len;
730 static void hci_usb_rx_complete(struct urb *urb, struct pt_regs *regs)
732 struct _urb *_urb = container_of(urb, struct _urb, urb);
733 struct hci_usb *husb = (void *) urb->context;
734 struct hci_dev *hdev = husb->hdev;
735 int err, count = urb->actual_length;
737 BT_DBG("%s urb %p type %d status %d count %d flags %x", hdev->name, urb,
738 _urb->type, urb->status, count, urb->transfer_flags);
740 read_lock(&husb->completion_lock);
742 if (!test_bit(HCI_RUNNING, &hdev->flags))
745 if (urb->status || !count)
748 if (_urb->type == HCI_SCODATA_PKT) {
749 #ifdef CONFIG_BT_HCIUSB_SCO
751 for (i=0; i < urb->number_of_packets; i++) {
752 BT_DBG("desc %d status %d offset %d len %d", i,
753 urb->iso_frame_desc[i].status,
754 urb->iso_frame_desc[i].offset,
755 urb->iso_frame_desc[i].actual_length);
757 if (!urb->iso_frame_desc[i].status)
758 __recv_frame(husb, _urb->type,
759 urb->transfer_buffer + urb->iso_frame_desc[i].offset,
760 urb->iso_frame_desc[i].actual_length);
766 err = __recv_frame(husb, _urb->type, urb->transfer_buffer, count);
768 BT_ERR("%s corrupted packet: type %d count %d",
769 husb->hdev->name, _urb->type, count);
775 urb->dev = husb->udev;
776 err = usb_submit_urb(urb, GFP_ATOMIC);
777 BT_DBG("%s urb %p type %d resubmit status %d", hdev->name, urb,
781 read_unlock(&husb->completion_lock);
784 static void hci_usb_tx_complete(struct urb *urb, struct pt_regs *regs)
786 struct _urb *_urb = container_of(urb, struct _urb, urb);
787 struct hci_usb *husb = (void *) urb->context;
788 struct hci_dev *hdev = husb->hdev;
790 BT_DBG("%s urb %p status %d flags %x", hdev->name, urb,
791 urb->status, urb->transfer_flags);
793 atomic_dec(__pending_tx(husb, _urb->type));
795 urb->transfer_buffer = NULL;
796 kfree_skb((struct sk_buff *) _urb->priv);
798 if (!test_bit(HCI_RUNNING, &hdev->flags))
802 hdev->stat.byte_tx += urb->transfer_buffer_length;
806 read_lock(&husb->completion_lock);
809 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
811 hci_usb_tx_wakeup(husb);
813 read_unlock(&husb->completion_lock);
816 static void hci_usb_destruct(struct hci_dev *hdev)
818 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
820 BT_DBG("%s", hdev->name);
825 static void hci_usb_notify(struct hci_dev *hdev, unsigned int evt)
827 BT_DBG("%s evt %d", hdev->name, evt);
830 static int hci_usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
832 struct usb_device *udev = interface_to_usbdev(intf);
833 struct usb_host_endpoint *bulk_out_ep = NULL;
834 struct usb_host_endpoint *bulk_in_ep = NULL;
835 struct usb_host_endpoint *intr_in_ep = NULL;
836 struct usb_host_endpoint *ep;
837 struct usb_host_interface *uif;
838 struct usb_interface *isoc_iface;
839 struct hci_usb *husb;
840 struct hci_dev *hdev;
841 int i, e, size, isoc_ifnum, isoc_alts;
843 BT_DBG("udev %p intf %p", udev, intf);
845 if (!id->driver_info) {
846 const struct usb_device_id *match;
847 match = usb_match_id(intf, blacklist_ids);
852 if (ignore || id->driver_info & HCI_IGNORE)
855 if (ignore_dga && id->driver_info & HCI_DIGIANSWER)
858 if (ignore_csr && id->driver_info & HCI_CSR)
861 if (ignore_sniffer && id->driver_info & HCI_SNIFFER)
864 if (intf->cur_altsetting->desc.bInterfaceNumber > 0)
867 /* Find endpoints that we need */
868 uif = intf->cur_altsetting;
869 for (e = 0; e < uif->desc.bNumEndpoints; e++) {
870 ep = &uif->endpoint[e];
872 switch (ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
873 case USB_ENDPOINT_XFER_INT:
874 if (ep->desc.bEndpointAddress & USB_DIR_IN)
878 case USB_ENDPOINT_XFER_BULK:
879 if (ep->desc.bEndpointAddress & USB_DIR_IN)
887 if (!bulk_in_ep || !bulk_out_ep || !intr_in_ep) {
888 BT_DBG("Bulk endpoints not found");
892 if (!(husb = kzalloc(sizeof(struct hci_usb), GFP_KERNEL))) {
893 BT_ERR("Can't allocate: control structure");
898 husb->bulk_out_ep = bulk_out_ep;
899 husb->bulk_in_ep = bulk_in_ep;
900 husb->intr_in_ep = intr_in_ep;
902 if (id->driver_info & HCI_DIGIANSWER)
903 husb->ctrl_req = USB_TYPE_VENDOR;
905 husb->ctrl_req = USB_TYPE_CLASS;
907 /* Find isochronous endpoints that we can use */
913 #ifdef CONFIG_BT_HCIUSB_SCO
914 if (isoc && !(id->driver_info & (HCI_BROKEN_ISOC | HCI_SNIFFER)))
915 isoc_iface = usb_ifnum_to_if(udev, isoc_ifnum);
919 struct usb_host_endpoint *isoc_out_ep = NULL;
920 struct usb_host_endpoint *isoc_in_ep = NULL;
922 for (a = 0; a < isoc_iface->num_altsetting; a++) {
923 uif = &isoc_iface->altsetting[a];
924 for (e = 0; e < uif->desc.bNumEndpoints; e++) {
925 ep = &uif->endpoint[e];
927 switch (ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
928 case USB_ENDPOINT_XFER_ISOC:
929 if (le16_to_cpu(ep->desc.wMaxPacketSize) < size ||
930 uif->desc.bAlternateSetting != isoc)
932 size = le16_to_cpu(ep->desc.wMaxPacketSize);
934 isoc_alts = uif->desc.bAlternateSetting;
936 if (ep->desc.bEndpointAddress & USB_DIR_IN)
945 if (!isoc_in_ep || !isoc_out_ep)
946 BT_DBG("Isoc endpoints not found");
948 BT_DBG("isoc ifnum %d alts %d", isoc_ifnum, isoc_alts);
949 if (usb_driver_claim_interface(&hci_usb_driver, isoc_iface, husb) != 0)
950 BT_ERR("Can't claim isoc interface");
951 else if (usb_set_interface(udev, isoc_ifnum, isoc_alts)) {
952 BT_ERR("Can't set isoc interface settings");
953 husb->isoc_iface = isoc_iface;
954 usb_driver_release_interface(&hci_usb_driver, isoc_iface);
955 husb->isoc_iface = NULL;
957 husb->isoc_iface = isoc_iface;
958 husb->isoc_in_ep = isoc_in_ep;
959 husb->isoc_out_ep = isoc_out_ep;
965 rwlock_init(&husb->completion_lock);
967 for (i = 0; i < 4; i++) {
968 skb_queue_head_init(&husb->transmit_q[i]);
969 _urb_queue_init(&husb->pending_q[i]);
970 _urb_queue_init(&husb->completed_q[i]);
973 /* Initialize and register HCI device */
974 hdev = hci_alloc_dev();
976 BT_ERR("Can't allocate HCI device");
982 hdev->type = HCI_USB;
983 hdev->driver_data = husb;
984 SET_HCIDEV_DEV(hdev, &intf->dev);
986 hdev->open = hci_usb_open;
987 hdev->close = hci_usb_close;
988 hdev->flush = hci_usb_flush;
989 hdev->send = hci_usb_send_frame;
990 hdev->destruct = hci_usb_destruct;
991 hdev->notify = hci_usb_notify;
993 hdev->owner = THIS_MODULE;
995 if (reset || id->driver_info & HCI_RESET)
996 set_bit(HCI_QUIRK_RESET_ON_INIT, &hdev->quirks);
998 if (force_scofix || id->driver_info & HCI_WRONG_SCO_MTU) {
1000 set_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks);
1003 if (id->driver_info & HCI_SNIFFER) {
1004 if (le16_to_cpu(udev->descriptor.bcdDevice) > 0x997)
1005 set_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks);
1008 if (id->driver_info & HCI_BCM92035) {
1009 unsigned char cmd[] = { 0x3b, 0xfc, 0x01, 0x00 };
1010 struct sk_buff *skb;
1012 skb = bt_skb_alloc(sizeof(cmd), GFP_KERNEL);
1014 memcpy(skb_put(skb, sizeof(cmd)), cmd, sizeof(cmd));
1015 skb_queue_tail(&hdev->driver_init, skb);
1019 if (hci_register_dev(hdev) < 0) {
1020 BT_ERR("Can't register HCI device");
1025 usb_set_intfdata(intf, husb);
1029 if (husb->isoc_iface)
1030 usb_driver_release_interface(&hci_usb_driver, husb->isoc_iface);
1037 static void hci_usb_disconnect(struct usb_interface *intf)
1039 struct hci_usb *husb = usb_get_intfdata(intf);
1040 struct hci_dev *hdev;
1042 if (!husb || intf == husb->isoc_iface)
1045 usb_set_intfdata(intf, NULL);
1048 BT_DBG("%s", hdev->name);
1050 hci_usb_close(hdev);
1052 if (husb->isoc_iface)
1053 usb_driver_release_interface(&hci_usb_driver, husb->isoc_iface);
1055 if (hci_unregister_dev(hdev) < 0)
1056 BT_ERR("Can't unregister HCI device %s", hdev->name);
1061 static int hci_usb_suspend(struct usb_interface *intf, pm_message_t message)
1063 struct hci_usb *husb = usb_get_intfdata(intf);
1064 struct list_head killed;
1065 unsigned long flags;
1068 if (!husb || intf == husb->isoc_iface)
1071 hci_suspend_dev(husb->hdev);
1073 INIT_LIST_HEAD(&killed);
1075 for (i = 0; i < 4; i++) {
1076 struct _urb_queue *q = &husb->pending_q[i];
1077 struct _urb *_urb, *_tmp;
1079 while ((_urb = _urb_dequeue(q))) {
1080 /* reset queue since _urb_dequeue sets it to NULL */
1082 usb_kill_urb(&_urb->urb);
1083 list_add(&_urb->list, &killed);
1086 spin_lock_irqsave(&q->lock, flags);
1088 list_for_each_entry_safe(_urb, _tmp, &killed, list) {
1089 list_move_tail(&_urb->list, &q->head);
1092 spin_unlock_irqrestore(&q->lock, flags);
1098 static int hci_usb_resume(struct usb_interface *intf)
1100 struct hci_usb *husb = usb_get_intfdata(intf);
1101 unsigned long flags;
1104 if (!husb || intf == husb->isoc_iface)
1107 for (i = 0; i < 4; i++) {
1108 struct _urb_queue *q = &husb->pending_q[i];
1111 spin_lock_irqsave(&q->lock, flags);
1113 list_for_each_entry(_urb, &q->head, list) {
1114 err = usb_submit_urb(&_urb->urb, GFP_ATOMIC);
1119 spin_unlock_irqrestore(&q->lock, flags);
1125 hci_resume_dev(husb->hdev);
1130 static struct usb_driver hci_usb_driver = {
1132 .probe = hci_usb_probe,
1133 .disconnect = hci_usb_disconnect,
1134 .suspend = hci_usb_suspend,
1135 .resume = hci_usb_resume,
1136 .id_table = bluetooth_ids,
1139 static int __init hci_usb_init(void)
1143 BT_INFO("HCI USB driver ver %s", VERSION);
1145 if ((err = usb_register(&hci_usb_driver)) < 0)
1146 BT_ERR("Failed to register HCI USB driver");
1151 static void __exit hci_usb_exit(void)
1153 usb_deregister(&hci_usb_driver);
1156 module_init(hci_usb_init);
1157 module_exit(hci_usb_exit);
1159 module_param(ignore, bool, 0644);
1160 MODULE_PARM_DESC(ignore, "Ignore devices from the matching table");
1162 module_param(ignore_dga, bool, 0644);
1163 MODULE_PARM_DESC(ignore_dga, "Ignore devices with id 08fd:0001");
1165 module_param(ignore_csr, bool, 0644);
1166 MODULE_PARM_DESC(ignore_csr, "Ignore devices with id 0a12:0001");
1168 module_param(ignore_sniffer, bool, 0644);
1169 MODULE_PARM_DESC(ignore_sniffer, "Ignore devices with id 0a12:0002");
1171 module_param(disable_scofix, bool, 0644);
1172 MODULE_PARM_DESC(disable_scofix, "Disable fixup of wrong SCO buffer size");
1174 module_param(force_scofix, bool, 0644);
1175 MODULE_PARM_DESC(force_scofix, "Force fixup of wrong SCO buffers size");
1177 module_param(reset, bool, 0644);
1178 MODULE_PARM_DESC(reset, "Send HCI reset command on initialization");
1180 #ifdef CONFIG_BT_HCIUSB_SCO
1181 module_param(isoc, int, 0644);
1182 MODULE_PARM_DESC(isoc, "Set isochronous transfers for SCO over HCI support");
1185 MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>, Marcel Holtmann <marcel@holtmann.org>");
1186 MODULE_DESCRIPTION("Bluetooth HCI USB driver ver " VERSION);
1187 MODULE_VERSION(VERSION);
1188 MODULE_LICENSE("GPL");