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/config.h>
35 #include <linux/module.h>
37 #include <linux/kernel.h>
38 #include <linux/init.h>
39 #include <linux/sched.h>
40 #include <linux/unistd.h>
41 #include <linux/types.h>
42 #include <linux/interrupt.h>
43 #include <linux/moduleparam.h>
45 #include <linux/slab.h>
46 #include <linux/errno.h>
47 #include <linux/string.h>
48 #include <linux/skbuff.h>
50 #include <linux/usb.h>
52 #include <net/bluetooth/bluetooth.h>
53 #include <net/bluetooth/hci_core.h>
57 #ifndef CONFIG_BT_HCIUSB_DEBUG
64 #ifndef CONFIG_BT_HCIUSB_ZERO_PACKET
65 #undef URB_ZERO_PACKET
66 #define URB_ZERO_PACKET 0
69 #ifdef CONFIG_BT_HCIUSB_SCO
75 static struct usb_driver hci_usb_driver;
77 static struct usb_device_id bluetooth_ids[] = {
78 /* Generic Bluetooth USB device */
79 { USB_DEVICE_INFO(HCI_DEV_CLASS, HCI_DEV_SUBCLASS, HCI_DEV_PROTOCOL) },
81 /* AVM BlueFRITZ! USB v2.0 */
82 { USB_DEVICE(0x057c, 0x3800) },
84 /* Bluetooth Ultraport Module from IBM */
85 { USB_DEVICE(0x04bf, 0x030a) },
87 /* ALPS Modules with non-standard id */
88 { USB_DEVICE(0x044e, 0x3001) },
89 { USB_DEVICE(0x044e, 0x3002) },
91 /* Ericsson with non-standard id */
92 { USB_DEVICE(0x0bdb, 0x1002) },
94 { } /* Terminating entry */
97 MODULE_DEVICE_TABLE (usb, bluetooth_ids);
99 static struct usb_device_id blacklist_ids[] = {
100 /* Broadcom BCM2033 without firmware */
101 { USB_DEVICE(0x0a5c, 0x2033), .driver_info = HCI_IGNORE },
103 /* Broadcom BCM2035 */
104 { USB_DEVICE(0x0a5c, 0x2009), .driver_info = HCI_RESET | HCI_BROKEN_ISOC },
105 { USB_DEVICE(0x0a5c, 0x200a), .driver_info = HCI_RESET | HCI_BROKEN_ISOC },
107 /* Microsoft Wireless Transceiver for Bluetooth 2.0 */
108 { USB_DEVICE(0x045e, 0x009c), .driver_info = HCI_RESET | HCI_BROKEN_ISOC },
110 /* ISSC Bluetooth Adapter v3.1 */
111 { USB_DEVICE(0x1131, 0x1001), .driver_info = HCI_RESET },
113 /* Digianswer devices */
114 { USB_DEVICE(0x08fd, 0x0001), .driver_info = HCI_DIGIANSWER },
115 { USB_DEVICE(0x08fd, 0x0002), .driver_info = HCI_IGNORE },
117 /* RTX Telecom based adapter with buggy SCO support */
118 { USB_DEVICE(0x0400, 0x0807), .driver_info = HCI_BROKEN_ISOC },
120 { } /* Terminating entry */
123 static struct _urb *_urb_alloc(int isoc, int gfp)
125 struct _urb *_urb = kmalloc(sizeof(struct _urb) +
126 sizeof(struct usb_iso_packet_descriptor) * isoc, gfp);
128 memset(_urb, 0, sizeof(*_urb));
129 usb_init_urb(&_urb->urb);
134 static struct _urb *_urb_dequeue(struct _urb_queue *q)
136 struct _urb *_urb = NULL;
138 spin_lock_irqsave(&q->lock, flags);
140 struct list_head *head = &q->head;
141 struct list_head *next = head->next;
143 _urb = list_entry(next, struct _urb, list);
144 list_del(next); _urb->queue = NULL;
147 spin_unlock_irqrestore(&q->lock, flags);
151 static void hci_usb_rx_complete(struct urb *urb, struct pt_regs *regs);
152 static void hci_usb_tx_complete(struct urb *urb, struct pt_regs *regs);
154 #define __pending_tx(husb, type) (&husb->pending_tx[type-1])
155 #define __pending_q(husb, type) (&husb->pending_q[type-1])
156 #define __completed_q(husb, type) (&husb->completed_q[type-1])
157 #define __transmit_q(husb, type) (&husb->transmit_q[type-1])
158 #define __reassembly(husb, type) (husb->reassembly[type-1])
160 static inline struct _urb *__get_completed(struct hci_usb *husb, int type)
162 return _urb_dequeue(__completed_q(husb, type));
165 #ifdef CONFIG_BT_HCIUSB_SCO
166 static void __fill_isoc_desc(struct urb *urb, int len, int mtu)
170 BT_DBG("len %d mtu %d", len, mtu);
172 for (i=0; i < HCI_MAX_ISOC_FRAMES && len >= mtu; i++, offset += mtu, len -= mtu) {
173 urb->iso_frame_desc[i].offset = offset;
174 urb->iso_frame_desc[i].length = mtu;
175 BT_DBG("desc %d offset %d len %d", i, offset, mtu);
177 if (len && i < HCI_MAX_ISOC_FRAMES) {
178 urb->iso_frame_desc[i].offset = offset;
179 urb->iso_frame_desc[i].length = len;
180 BT_DBG("desc %d offset %d len %d", i, offset, len);
183 urb->number_of_packets = i;
187 static int hci_usb_intr_rx_submit(struct hci_usb *husb)
191 int err, pipe, interval, size;
194 BT_DBG("%s", husb->hdev->name);
196 size = husb->intr_in_ep->desc.wMaxPacketSize;
198 buf = kmalloc(size, GFP_ATOMIC);
202 _urb = _urb_alloc(0, GFP_ATOMIC);
207 _urb->type = HCI_EVENT_PKT;
208 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
211 pipe = usb_rcvintpipe(husb->udev, husb->intr_in_ep->desc.bEndpointAddress);
212 interval = husb->intr_in_ep->desc.bInterval;
213 usb_fill_int_urb(urb, husb->udev, pipe, buf, size, hci_usb_rx_complete, husb, interval);
215 err = usb_submit_urb(urb, GFP_ATOMIC);
217 BT_ERR("%s intr rx submit failed urb %p err %d",
218 husb->hdev->name, urb, err);
226 static int hci_usb_bulk_rx_submit(struct hci_usb *husb)
230 int err, pipe, size = HCI_MAX_FRAME_SIZE;
233 buf = kmalloc(size, GFP_ATOMIC);
237 _urb = _urb_alloc(0, GFP_ATOMIC);
242 _urb->type = HCI_ACLDATA_PKT;
243 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
246 pipe = usb_rcvbulkpipe(husb->udev, husb->bulk_in_ep->desc.bEndpointAddress);
247 usb_fill_bulk_urb(urb, husb->udev, pipe, buf, size, hci_usb_rx_complete, husb);
248 urb->transfer_flags = 0;
250 BT_DBG("%s urb %p", husb->hdev->name, urb);
252 err = usb_submit_urb(urb, GFP_ATOMIC);
254 BT_ERR("%s bulk rx submit failed urb %p err %d",
255 husb->hdev->name, urb, err);
263 #ifdef CONFIG_BT_HCIUSB_SCO
264 static int hci_usb_isoc_rx_submit(struct hci_usb *husb)
271 mtu = husb->isoc_in_ep->desc.wMaxPacketSize;
272 size = mtu * HCI_MAX_ISOC_FRAMES;
274 buf = kmalloc(size, GFP_ATOMIC);
278 _urb = _urb_alloc(HCI_MAX_ISOC_FRAMES, GFP_ATOMIC);
283 _urb->type = HCI_SCODATA_PKT;
284 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
289 urb->dev = husb->udev;
290 urb->pipe = usb_rcvisocpipe(husb->udev, husb->isoc_in_ep->desc.bEndpointAddress);
291 urb->complete = hci_usb_rx_complete;
293 urb->interval = husb->isoc_in_ep->desc.bInterval;
295 urb->transfer_buffer_length = size;
296 urb->transfer_buffer = buf;
297 urb->transfer_flags = URB_ISO_ASAP;
299 __fill_isoc_desc(urb, size, mtu);
301 BT_DBG("%s urb %p", husb->hdev->name, urb);
303 err = usb_submit_urb(urb, GFP_ATOMIC);
305 BT_ERR("%s isoc rx submit failed urb %p err %d",
306 husb->hdev->name, urb, err);
315 /* Initialize device */
316 static int hci_usb_open(struct hci_dev *hdev)
318 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
322 BT_DBG("%s", hdev->name);
324 if (test_and_set_bit(HCI_RUNNING, &hdev->flags))
327 write_lock_irqsave(&husb->completion_lock, flags);
329 err = hci_usb_intr_rx_submit(husb);
331 for (i = 0; i < HCI_MAX_BULK_RX; i++)
332 hci_usb_bulk_rx_submit(husb);
334 #ifdef CONFIG_BT_HCIUSB_SCO
335 if (husb->isoc_iface)
336 for (i = 0; i < HCI_MAX_ISOC_RX; i++)
337 hci_usb_isoc_rx_submit(husb);
340 clear_bit(HCI_RUNNING, &hdev->flags);
343 write_unlock_irqrestore(&husb->completion_lock, flags);
348 static int hci_usb_flush(struct hci_dev *hdev)
350 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
353 BT_DBG("%s", hdev->name);
355 for (i = 0; i < 4; i++)
356 skb_queue_purge(&husb->transmit_q[i]);
360 static void hci_usb_unlink_urbs(struct hci_usb *husb)
364 BT_DBG("%s", husb->hdev->name);
366 for (i = 0; i < 4; i++) {
370 /* Kill pending requests */
371 while ((_urb = _urb_dequeue(&husb->pending_q[i]))) {
373 BT_DBG("%s unlinking _urb %p type %d urb %p",
374 husb->hdev->name, _urb, _urb->type, urb);
376 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
379 /* Release completed requests */
380 while ((_urb = _urb_dequeue(&husb->completed_q[i]))) {
382 BT_DBG("%s freeing _urb %p type %d urb %p",
383 husb->hdev->name, _urb, _urb->type, urb);
384 if (urb->setup_packet)
385 kfree(urb->setup_packet);
386 if (urb->transfer_buffer)
387 kfree(urb->transfer_buffer);
391 /* Release reassembly buffers */
392 if (husb->reassembly[i]) {
393 kfree_skb(husb->reassembly[i]);
394 husb->reassembly[i] = NULL;
400 static int hci_usb_close(struct hci_dev *hdev)
402 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
405 if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags))
408 BT_DBG("%s", hdev->name);
410 /* Synchronize with completion handlers */
411 write_lock_irqsave(&husb->completion_lock, flags);
412 write_unlock_irqrestore(&husb->completion_lock, flags);
414 hci_usb_unlink_urbs(husb);
419 static int __tx_submit(struct hci_usb *husb, struct _urb *_urb)
421 struct urb *urb = &_urb->urb;
424 BT_DBG("%s urb %p type %d", husb->hdev->name, urb, _urb->type);
426 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
427 err = usb_submit_urb(urb, GFP_ATOMIC);
429 BT_ERR("%s tx submit failed urb %p type %d err %d",
430 husb->hdev->name, urb, _urb->type, err);
432 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
434 atomic_inc(__pending_tx(husb, _urb->type));
439 static inline int hci_usb_send_ctrl(struct hci_usb *husb, struct sk_buff *skb)
441 struct _urb *_urb = __get_completed(husb, skb->pkt_type);
442 struct usb_ctrlrequest *dr;
446 _urb = _urb_alloc(0, GFP_ATOMIC);
449 _urb->type = skb->pkt_type;
451 dr = kmalloc(sizeof(*dr), GFP_ATOMIC);
457 dr = (void *) _urb->urb.setup_packet;
459 dr->bRequestType = husb->ctrl_req;
463 dr->wLength = __cpu_to_le16(skb->len);
466 usb_fill_control_urb(urb, husb->udev, usb_sndctrlpipe(husb->udev, 0),
467 (void *) dr, skb->data, skb->len, hci_usb_tx_complete, husb);
469 BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
472 return __tx_submit(husb, _urb);
475 static inline int hci_usb_send_bulk(struct hci_usb *husb, struct sk_buff *skb)
477 struct _urb *_urb = __get_completed(husb, skb->pkt_type);
482 _urb = _urb_alloc(0, GFP_ATOMIC);
485 _urb->type = skb->pkt_type;
489 pipe = usb_sndbulkpipe(husb->udev, husb->bulk_out_ep->desc.bEndpointAddress);
490 usb_fill_bulk_urb(urb, husb->udev, pipe, skb->data, skb->len,
491 hci_usb_tx_complete, husb);
492 urb->transfer_flags = URB_ZERO_PACKET;
494 BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
497 return __tx_submit(husb, _urb);
500 #ifdef CONFIG_BT_HCIUSB_SCO
501 static inline int hci_usb_send_isoc(struct hci_usb *husb, struct sk_buff *skb)
503 struct _urb *_urb = __get_completed(husb, skb->pkt_type);
507 _urb = _urb_alloc(HCI_MAX_ISOC_FRAMES, GFP_ATOMIC);
510 _urb->type = skb->pkt_type;
513 BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
518 urb->dev = husb->udev;
519 urb->pipe = usb_sndisocpipe(husb->udev, husb->isoc_out_ep->desc.bEndpointAddress);
520 urb->complete = hci_usb_tx_complete;
521 urb->transfer_flags = URB_ISO_ASAP;
523 urb->interval = husb->isoc_out_ep->desc.bInterval;
525 urb->transfer_buffer = skb->data;
526 urb->transfer_buffer_length = skb->len;
528 __fill_isoc_desc(urb, skb->len, husb->isoc_out_ep->desc.wMaxPacketSize);
531 return __tx_submit(husb, _urb);
535 static void hci_usb_tx_process(struct hci_usb *husb)
537 struct sk_buff_head *q;
540 BT_DBG("%s", husb->hdev->name);
543 clear_bit(HCI_USB_TX_WAKEUP, &husb->state);
545 /* Process command queue */
546 q = __transmit_q(husb, HCI_COMMAND_PKT);
547 if (!atomic_read(__pending_tx(husb, HCI_COMMAND_PKT)) &&
548 (skb = skb_dequeue(q))) {
549 if (hci_usb_send_ctrl(husb, skb) < 0)
550 skb_queue_head(q, skb);
553 #ifdef CONFIG_BT_HCIUSB_SCO
554 /* Process SCO queue */
555 q = __transmit_q(husb, HCI_SCODATA_PKT);
556 if (atomic_read(__pending_tx(husb, HCI_SCODATA_PKT)) < HCI_MAX_ISOC_TX &&
557 (skb = skb_dequeue(q))) {
558 if (hci_usb_send_isoc(husb, skb) < 0)
559 skb_queue_head(q, skb);
563 /* Process ACL queue */
564 q = __transmit_q(husb, HCI_ACLDATA_PKT);
565 while (atomic_read(__pending_tx(husb, HCI_ACLDATA_PKT)) < HCI_MAX_BULK_TX &&
566 (skb = skb_dequeue(q))) {
567 if (hci_usb_send_bulk(husb, skb) < 0) {
568 skb_queue_head(q, skb);
572 } while(test_bit(HCI_USB_TX_WAKEUP, &husb->state));
575 static inline void hci_usb_tx_wakeup(struct hci_usb *husb)
577 /* Serialize TX queue processing to avoid data reordering */
578 if (!test_and_set_bit(HCI_USB_TX_PROCESS, &husb->state)) {
579 hci_usb_tx_process(husb);
580 clear_bit(HCI_USB_TX_PROCESS, &husb->state);
582 set_bit(HCI_USB_TX_WAKEUP, &husb->state);
585 /* Send frames from HCI layer */
586 static int hci_usb_send_frame(struct sk_buff *skb)
588 struct hci_dev *hdev = (struct hci_dev *) skb->dev;
589 struct hci_usb *husb;
592 BT_ERR("frame for uknown device (hdev=NULL)");
596 if (!test_bit(HCI_RUNNING, &hdev->flags))
599 BT_DBG("%s type %d len %d", hdev->name, skb->pkt_type, skb->len);
601 husb = (struct hci_usb *) hdev->driver_data;
603 switch (skb->pkt_type) {
604 case HCI_COMMAND_PKT:
608 case HCI_ACLDATA_PKT:
612 #ifdef CONFIG_BT_HCIUSB_SCO
613 case HCI_SCODATA_PKT:
623 read_lock(&husb->completion_lock);
625 skb_queue_tail(__transmit_q(husb, skb->pkt_type), skb);
626 hci_usb_tx_wakeup(husb);
628 read_unlock(&husb->completion_lock);
632 static inline int __recv_frame(struct hci_usb *husb, int type, void *data, int count)
634 BT_DBG("%s type %d data %p count %d", husb->hdev->name, type, data, count);
636 husb->hdev->stat.byte_rx += count;
639 struct sk_buff *skb = __reassembly(husb, type);
640 struct { int expect; } *scb;
644 /* Start of the frame */
648 if (count >= HCI_EVENT_HDR_SIZE) {
649 struct hci_event_hdr *h = data;
650 len = HCI_EVENT_HDR_SIZE + h->plen;
655 case HCI_ACLDATA_PKT:
656 if (count >= HCI_ACL_HDR_SIZE) {
657 struct hci_acl_hdr *h = data;
658 len = HCI_ACL_HDR_SIZE + __le16_to_cpu(h->dlen);
662 #ifdef CONFIG_BT_HCIUSB_SCO
663 case HCI_SCODATA_PKT:
664 if (count >= HCI_SCO_HDR_SIZE) {
665 struct hci_sco_hdr *h = data;
666 len = HCI_SCO_HDR_SIZE + h->dlen;
672 BT_DBG("new packet len %d", len);
674 skb = bt_skb_alloc(len, GFP_ATOMIC);
676 BT_ERR("%s no memory for the packet", husb->hdev->name);
679 skb->dev = (void *) husb->hdev;
680 skb->pkt_type = type;
682 __reassembly(husb, type) = skb;
684 scb = (void *) skb->cb;
688 scb = (void *) skb->cb;
692 len = min(len, count);
694 memcpy(skb_put(skb, len), data, len);
699 __reassembly(husb, type) = NULL;
703 count -= len; data += len;
708 static void hci_usb_rx_complete(struct urb *urb, struct pt_regs *regs)
710 struct _urb *_urb = container_of(urb, struct _urb, urb);
711 struct hci_usb *husb = (void *) urb->context;
712 struct hci_dev *hdev = husb->hdev;
713 int err, count = urb->actual_length;
715 BT_DBG("%s urb %p type %d status %d count %d flags %x", hdev->name, urb,
716 _urb->type, urb->status, count, urb->transfer_flags);
718 read_lock(&husb->completion_lock);
720 if (!test_bit(HCI_RUNNING, &hdev->flags))
723 if (urb->status || !count)
726 if (_urb->type == HCI_SCODATA_PKT) {
727 #ifdef CONFIG_BT_HCIUSB_SCO
729 for (i=0; i < urb->number_of_packets; i++) {
730 BT_DBG("desc %d status %d offset %d len %d", i,
731 urb->iso_frame_desc[i].status,
732 urb->iso_frame_desc[i].offset,
733 urb->iso_frame_desc[i].actual_length);
735 if (!urb->iso_frame_desc[i].status)
736 __recv_frame(husb, _urb->type,
737 urb->transfer_buffer + urb->iso_frame_desc[i].offset,
738 urb->iso_frame_desc[i].actual_length);
744 err = __recv_frame(husb, _urb->type, urb->transfer_buffer, count);
746 BT_ERR("%s corrupted packet: type %d count %d",
747 husb->hdev->name, _urb->type, count);
753 urb->dev = husb->udev;
754 err = usb_submit_urb(urb, GFP_ATOMIC);
755 BT_DBG("%s urb %p type %d resubmit status %d", hdev->name, urb,
759 read_unlock(&husb->completion_lock);
762 static void hci_usb_tx_complete(struct urb *urb, struct pt_regs *regs)
764 struct _urb *_urb = container_of(urb, struct _urb, urb);
765 struct hci_usb *husb = (void *) urb->context;
766 struct hci_dev *hdev = husb->hdev;
768 BT_DBG("%s urb %p status %d flags %x", hdev->name, urb,
769 urb->status, urb->transfer_flags);
771 atomic_dec(__pending_tx(husb, _urb->type));
773 urb->transfer_buffer = NULL;
774 kfree_skb((struct sk_buff *) _urb->priv);
776 if (!test_bit(HCI_RUNNING, &hdev->flags))
780 hdev->stat.byte_tx += urb->transfer_buffer_length;
784 read_lock(&husb->completion_lock);
787 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
789 hci_usb_tx_wakeup(husb);
791 read_unlock(&husb->completion_lock);
794 static void hci_usb_destruct(struct hci_dev *hdev)
796 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
798 BT_DBG("%s", hdev->name);
803 static void hci_usb_notify(struct hci_dev *hdev, unsigned int evt)
805 BT_DBG("%s evt %d", hdev->name, evt);
808 static int hci_usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
810 struct usb_device *udev = interface_to_usbdev(intf);
811 struct usb_host_endpoint *bulk_out_ep = NULL;
812 struct usb_host_endpoint *bulk_in_ep = NULL;
813 struct usb_host_endpoint *intr_in_ep = NULL;
814 struct usb_host_endpoint *ep;
815 struct usb_host_interface *uif;
816 struct usb_interface *isoc_iface;
817 struct hci_usb *husb;
818 struct hci_dev *hdev;
819 int i, e, size, isoc_ifnum, isoc_alts;
821 BT_DBG("udev %p intf %p", udev, intf);
823 if (!id->driver_info) {
824 const struct usb_device_id *match;
825 match = usb_match_id(intf, blacklist_ids);
830 if (id->driver_info & HCI_IGNORE)
833 if (intf->cur_altsetting->desc.bInterfaceNumber > 0)
836 /* Find endpoints that we need */
837 uif = intf->cur_altsetting;
838 for (e = 0; e < uif->desc.bNumEndpoints; e++) {
839 ep = &uif->endpoint[e];
841 switch (ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
842 case USB_ENDPOINT_XFER_INT:
843 if (ep->desc.bEndpointAddress & USB_DIR_IN)
847 case USB_ENDPOINT_XFER_BULK:
848 if (ep->desc.bEndpointAddress & USB_DIR_IN)
856 if (!bulk_in_ep || !bulk_out_ep || !intr_in_ep) {
857 BT_DBG("Bulk endpoints not found");
861 if (!(husb = kmalloc(sizeof(struct hci_usb), GFP_KERNEL))) {
862 BT_ERR("Can't allocate: control structure");
866 memset(husb, 0, sizeof(struct hci_usb));
869 husb->bulk_out_ep = bulk_out_ep;
870 husb->bulk_in_ep = bulk_in_ep;
871 husb->intr_in_ep = intr_in_ep;
873 if (id->driver_info & HCI_DIGIANSWER)
874 husb->ctrl_req = USB_TYPE_VENDOR;
876 husb->ctrl_req = USB_TYPE_CLASS;
878 /* Find isochronous endpoints that we can use */
884 #ifdef CONFIG_BT_HCIUSB_SCO
885 if (isoc && !(id->driver_info & HCI_BROKEN_ISOC))
886 isoc_iface = usb_ifnum_to_if(udev, isoc_ifnum);
890 struct usb_host_endpoint *isoc_out_ep = NULL;
891 struct usb_host_endpoint *isoc_in_ep = NULL;
893 for (a = 0; a < isoc_iface->num_altsetting; a++) {
894 uif = &isoc_iface->altsetting[a];
895 for (e = 0; e < uif->desc.bNumEndpoints; e++) {
896 ep = &uif->endpoint[e];
898 switch (ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
899 case USB_ENDPOINT_XFER_ISOC:
900 if (ep->desc.wMaxPacketSize < size ||
901 uif->desc.bAlternateSetting != isoc)
903 size = ep->desc.wMaxPacketSize;
905 isoc_alts = uif->desc.bAlternateSetting;
907 if (ep->desc.bEndpointAddress & USB_DIR_IN)
916 if (!isoc_in_ep || !isoc_out_ep)
917 BT_DBG("Isoc endpoints not found");
919 BT_DBG("isoc ifnum %d alts %d", isoc_ifnum, isoc_alts);
920 if (usb_driver_claim_interface(&hci_usb_driver, isoc_iface, husb) != 0)
921 BT_ERR("Can't claim isoc interface");
922 else if (usb_set_interface(udev, isoc_ifnum, isoc_alts)) {
923 BT_ERR("Can't set isoc interface settings");
924 husb->isoc_iface = isoc_iface;
925 usb_driver_release_interface(&hci_usb_driver, isoc_iface);
926 husb->isoc_iface = NULL;
928 husb->isoc_iface = isoc_iface;
929 husb->isoc_in_ep = isoc_in_ep;
930 husb->isoc_out_ep = isoc_out_ep;
936 rwlock_init(&husb->completion_lock);
938 for (i = 0; i < 4; i++) {
939 skb_queue_head_init(&husb->transmit_q[i]);
940 _urb_queue_init(&husb->pending_q[i]);
941 _urb_queue_init(&husb->completed_q[i]);
944 /* Initialize and register HCI device */
945 hdev = hci_alloc_dev();
947 BT_ERR("Can't allocate HCI device");
953 hdev->type = HCI_USB;
954 hdev->driver_data = husb;
955 SET_HCIDEV_DEV(hdev, &intf->dev);
957 hdev->open = hci_usb_open;
958 hdev->close = hci_usb_close;
959 hdev->flush = hci_usb_flush;
960 hdev->send = hci_usb_send_frame;
961 hdev->destruct = hci_usb_destruct;
962 hdev->notify = hci_usb_notify;
964 hdev->owner = THIS_MODULE;
966 if (id->driver_info & HCI_RESET)
967 set_bit(HCI_QUIRK_RESET_ON_INIT, &hdev->quirks);
969 if (hci_register_dev(hdev) < 0) {
970 BT_ERR("Can't register HCI device");
975 usb_set_intfdata(intf, husb);
979 if (husb->isoc_iface)
980 usb_driver_release_interface(&hci_usb_driver, husb->isoc_iface);
987 static void hci_usb_disconnect(struct usb_interface *intf)
989 struct hci_usb *husb = usb_get_intfdata(intf);
990 struct hci_dev *hdev;
992 if (!husb || intf == husb->isoc_iface)
995 usb_set_intfdata(intf, NULL);
998 BT_DBG("%s", hdev->name);
1000 hci_usb_close(hdev);
1002 if (husb->isoc_iface)
1003 usb_driver_release_interface(&hci_usb_driver, husb->isoc_iface);
1005 if (hci_unregister_dev(hdev) < 0)
1006 BT_ERR("Can't unregister HCI device %s", hdev->name);
1011 static struct usb_driver hci_usb_driver = {
1012 .owner = THIS_MODULE,
1014 .probe = hci_usb_probe,
1015 .disconnect = hci_usb_disconnect,
1016 .id_table = bluetooth_ids,
1019 static int __init hci_usb_init(void)
1023 BT_INFO("HCI USB driver ver %s", VERSION);
1025 if ((err = usb_register(&hci_usb_driver)) < 0)
1026 BT_ERR("Failed to register HCI USB driver");
1031 static void __exit hci_usb_exit(void)
1033 usb_deregister(&hci_usb_driver);
1036 module_init(hci_usb_init);
1037 module_exit(hci_usb_exit);
1039 #ifdef CONFIG_BT_HCIUSB_SCO
1040 module_param(isoc, int, 0644);
1041 MODULE_PARM_DESC(isoc, "Set isochronous transfers for SCO over HCI support");
1044 MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>, Marcel Holtmann <marcel@holtmann.org>");
1045 MODULE_DESCRIPTION("Bluetooth HCI USB driver ver " VERSION);
1046 MODULE_VERSION(VERSION);
1047 MODULE_LICENSE("GPL");