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 static int ignore = 0;
72 #ifdef CONFIG_BT_HCIUSB_SCO
78 static struct usb_driver hci_usb_driver;
80 static struct usb_device_id bluetooth_ids[] = {
81 /* Generic Bluetooth USB device */
82 { USB_DEVICE_INFO(HCI_DEV_CLASS, HCI_DEV_SUBCLASS, HCI_DEV_PROTOCOL) },
84 /* AVM BlueFRITZ! USB v2.0 */
85 { USB_DEVICE(0x057c, 0x3800) },
87 /* Bluetooth Ultraport Module from IBM */
88 { USB_DEVICE(0x04bf, 0x030a) },
90 /* ALPS Modules with non-standard id */
91 { USB_DEVICE(0x044e, 0x3001) },
92 { USB_DEVICE(0x044e, 0x3002) },
94 /* Ericsson with non-standard id */
95 { USB_DEVICE(0x0bdb, 0x1002) },
97 { } /* Terminating entry */
100 MODULE_DEVICE_TABLE (usb, bluetooth_ids);
102 static struct usb_device_id blacklist_ids[] = {
103 /* Broadcom BCM2033 without firmware */
104 { USB_DEVICE(0x0a5c, 0x2033), .driver_info = HCI_IGNORE },
106 /* Broadcom BCM2035 */
107 { USB_DEVICE(0x0a5c, 0x2009), .driver_info = HCI_RESET | HCI_BROKEN_ISOC },
108 { USB_DEVICE(0x0a5c, 0x200a), .driver_info = HCI_RESET | HCI_BROKEN_ISOC },
110 /* Microsoft Wireless Transceiver for Bluetooth 2.0 */
111 { USB_DEVICE(0x045e, 0x009c), .driver_info = HCI_RESET | HCI_BROKEN_ISOC },
113 /* ISSC Bluetooth Adapter v3.1 */
114 { USB_DEVICE(0x1131, 0x1001), .driver_info = HCI_RESET },
116 /* Digianswer devices */
117 { USB_DEVICE(0x08fd, 0x0001), .driver_info = HCI_DIGIANSWER },
118 { USB_DEVICE(0x08fd, 0x0002), .driver_info = HCI_IGNORE },
120 /* RTX Telecom based adapter with buggy SCO support */
121 { USB_DEVICE(0x0400, 0x0807), .driver_info = HCI_BROKEN_ISOC },
123 { } /* Terminating entry */
126 static struct _urb *_urb_alloc(int isoc, int gfp)
128 struct _urb *_urb = kmalloc(sizeof(struct _urb) +
129 sizeof(struct usb_iso_packet_descriptor) * isoc, gfp);
131 memset(_urb, 0, sizeof(*_urb));
132 usb_init_urb(&_urb->urb);
137 static struct _urb *_urb_dequeue(struct _urb_queue *q)
139 struct _urb *_urb = NULL;
141 spin_lock_irqsave(&q->lock, flags);
143 struct list_head *head = &q->head;
144 struct list_head *next = head->next;
146 _urb = list_entry(next, struct _urb, list);
147 list_del(next); _urb->queue = NULL;
150 spin_unlock_irqrestore(&q->lock, flags);
154 static void hci_usb_rx_complete(struct urb *urb, struct pt_regs *regs);
155 static void hci_usb_tx_complete(struct urb *urb, struct pt_regs *regs);
157 #define __pending_tx(husb, type) (&husb->pending_tx[type-1])
158 #define __pending_q(husb, type) (&husb->pending_q[type-1])
159 #define __completed_q(husb, type) (&husb->completed_q[type-1])
160 #define __transmit_q(husb, type) (&husb->transmit_q[type-1])
161 #define __reassembly(husb, type) (husb->reassembly[type-1])
163 static inline struct _urb *__get_completed(struct hci_usb *husb, int type)
165 return _urb_dequeue(__completed_q(husb, type));
168 #ifdef CONFIG_BT_HCIUSB_SCO
169 static void __fill_isoc_desc(struct urb *urb, int len, int mtu)
173 BT_DBG("len %d mtu %d", len, mtu);
175 for (i=0; i < HCI_MAX_ISOC_FRAMES && len >= mtu; i++, offset += mtu, len -= mtu) {
176 urb->iso_frame_desc[i].offset = offset;
177 urb->iso_frame_desc[i].length = mtu;
178 BT_DBG("desc %d offset %d len %d", i, offset, mtu);
180 if (len && i < HCI_MAX_ISOC_FRAMES) {
181 urb->iso_frame_desc[i].offset = offset;
182 urb->iso_frame_desc[i].length = len;
183 BT_DBG("desc %d offset %d len %d", i, offset, len);
186 urb->number_of_packets = i;
190 static int hci_usb_intr_rx_submit(struct hci_usb *husb)
194 int err, pipe, interval, size;
197 BT_DBG("%s", husb->hdev->name);
199 size = le16_to_cpu(husb->intr_in_ep->desc.wMaxPacketSize);
201 buf = kmalloc(size, GFP_ATOMIC);
205 _urb = _urb_alloc(0, GFP_ATOMIC);
210 _urb->type = HCI_EVENT_PKT;
211 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
214 pipe = usb_rcvintpipe(husb->udev, husb->intr_in_ep->desc.bEndpointAddress);
215 interval = husb->intr_in_ep->desc.bInterval;
216 usb_fill_int_urb(urb, husb->udev, pipe, buf, size, hci_usb_rx_complete, husb, interval);
218 err = usb_submit_urb(urb, GFP_ATOMIC);
220 BT_ERR("%s intr rx submit failed urb %p err %d",
221 husb->hdev->name, urb, err);
229 static int hci_usb_bulk_rx_submit(struct hci_usb *husb)
233 int err, pipe, size = HCI_MAX_FRAME_SIZE;
236 buf = kmalloc(size, GFP_ATOMIC);
240 _urb = _urb_alloc(0, GFP_ATOMIC);
245 _urb->type = HCI_ACLDATA_PKT;
246 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
249 pipe = usb_rcvbulkpipe(husb->udev, husb->bulk_in_ep->desc.bEndpointAddress);
250 usb_fill_bulk_urb(urb, husb->udev, pipe, buf, size, hci_usb_rx_complete, husb);
251 urb->transfer_flags = 0;
253 BT_DBG("%s urb %p", husb->hdev->name, urb);
255 err = usb_submit_urb(urb, GFP_ATOMIC);
257 BT_ERR("%s bulk rx submit failed urb %p err %d",
258 husb->hdev->name, urb, err);
266 #ifdef CONFIG_BT_HCIUSB_SCO
267 static int hci_usb_isoc_rx_submit(struct hci_usb *husb)
274 mtu = le16_to_cpu(husb->isoc_in_ep->desc.wMaxPacketSize);
275 size = mtu * HCI_MAX_ISOC_FRAMES;
277 buf = kmalloc(size, GFP_ATOMIC);
281 _urb = _urb_alloc(HCI_MAX_ISOC_FRAMES, GFP_ATOMIC);
286 _urb->type = HCI_SCODATA_PKT;
287 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
292 urb->dev = husb->udev;
293 urb->pipe = usb_rcvisocpipe(husb->udev, husb->isoc_in_ep->desc.bEndpointAddress);
294 urb->complete = hci_usb_rx_complete;
296 urb->interval = husb->isoc_in_ep->desc.bInterval;
298 urb->transfer_buffer_length = size;
299 urb->transfer_buffer = buf;
300 urb->transfer_flags = URB_ISO_ASAP;
302 __fill_isoc_desc(urb, size, mtu);
304 BT_DBG("%s urb %p", husb->hdev->name, urb);
306 err = usb_submit_urb(urb, GFP_ATOMIC);
308 BT_ERR("%s isoc rx submit failed urb %p err %d",
309 husb->hdev->name, urb, err);
318 /* Initialize device */
319 static int hci_usb_open(struct hci_dev *hdev)
321 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
325 BT_DBG("%s", hdev->name);
327 if (test_and_set_bit(HCI_RUNNING, &hdev->flags))
330 write_lock_irqsave(&husb->completion_lock, flags);
332 err = hci_usb_intr_rx_submit(husb);
334 for (i = 0; i < HCI_MAX_BULK_RX; i++)
335 hci_usb_bulk_rx_submit(husb);
337 #ifdef CONFIG_BT_HCIUSB_SCO
338 if (husb->isoc_iface)
339 for (i = 0; i < HCI_MAX_ISOC_RX; i++)
340 hci_usb_isoc_rx_submit(husb);
343 clear_bit(HCI_RUNNING, &hdev->flags);
346 write_unlock_irqrestore(&husb->completion_lock, flags);
351 static int hci_usb_flush(struct hci_dev *hdev)
353 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
356 BT_DBG("%s", hdev->name);
358 for (i = 0; i < 4; i++)
359 skb_queue_purge(&husb->transmit_q[i]);
363 static void hci_usb_unlink_urbs(struct hci_usb *husb)
367 BT_DBG("%s", husb->hdev->name);
369 for (i = 0; i < 4; i++) {
373 /* Kill pending requests */
374 while ((_urb = _urb_dequeue(&husb->pending_q[i]))) {
376 BT_DBG("%s unlinking _urb %p type %d urb %p",
377 husb->hdev->name, _urb, _urb->type, urb);
379 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
382 /* Release completed requests */
383 while ((_urb = _urb_dequeue(&husb->completed_q[i]))) {
385 BT_DBG("%s freeing _urb %p type %d urb %p",
386 husb->hdev->name, _urb, _urb->type, urb);
387 if (urb->setup_packet)
388 kfree(urb->setup_packet);
389 if (urb->transfer_buffer)
390 kfree(urb->transfer_buffer);
394 /* Release reassembly buffers */
395 if (husb->reassembly[i]) {
396 kfree_skb(husb->reassembly[i]);
397 husb->reassembly[i] = NULL;
403 static int hci_usb_close(struct hci_dev *hdev)
405 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
408 if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags))
411 BT_DBG("%s", hdev->name);
413 /* Synchronize with completion handlers */
414 write_lock_irqsave(&husb->completion_lock, flags);
415 write_unlock_irqrestore(&husb->completion_lock, flags);
417 hci_usb_unlink_urbs(husb);
422 static int __tx_submit(struct hci_usb *husb, struct _urb *_urb)
424 struct urb *urb = &_urb->urb;
427 BT_DBG("%s urb %p type %d", husb->hdev->name, urb, _urb->type);
429 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
430 err = usb_submit_urb(urb, GFP_ATOMIC);
432 BT_ERR("%s tx submit failed urb %p type %d err %d",
433 husb->hdev->name, urb, _urb->type, err);
435 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
437 atomic_inc(__pending_tx(husb, _urb->type));
442 static inline int hci_usb_send_ctrl(struct hci_usb *husb, struct sk_buff *skb)
444 struct _urb *_urb = __get_completed(husb, skb->pkt_type);
445 struct usb_ctrlrequest *dr;
449 _urb = _urb_alloc(0, GFP_ATOMIC);
452 _urb->type = skb->pkt_type;
454 dr = kmalloc(sizeof(*dr), GFP_ATOMIC);
460 dr = (void *) _urb->urb.setup_packet;
462 dr->bRequestType = husb->ctrl_req;
466 dr->wLength = __cpu_to_le16(skb->len);
469 usb_fill_control_urb(urb, husb->udev, usb_sndctrlpipe(husb->udev, 0),
470 (void *) dr, skb->data, skb->len, hci_usb_tx_complete, husb);
472 BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
475 return __tx_submit(husb, _urb);
478 static inline int hci_usb_send_bulk(struct hci_usb *husb, struct sk_buff *skb)
480 struct _urb *_urb = __get_completed(husb, skb->pkt_type);
485 _urb = _urb_alloc(0, GFP_ATOMIC);
488 _urb->type = skb->pkt_type;
492 pipe = usb_sndbulkpipe(husb->udev, husb->bulk_out_ep->desc.bEndpointAddress);
493 usb_fill_bulk_urb(urb, husb->udev, pipe, skb->data, skb->len,
494 hci_usb_tx_complete, husb);
495 urb->transfer_flags = URB_ZERO_PACKET;
497 BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
500 return __tx_submit(husb, _urb);
503 #ifdef CONFIG_BT_HCIUSB_SCO
504 static inline int hci_usb_send_isoc(struct hci_usb *husb, struct sk_buff *skb)
506 struct _urb *_urb = __get_completed(husb, skb->pkt_type);
510 _urb = _urb_alloc(HCI_MAX_ISOC_FRAMES, GFP_ATOMIC);
513 _urb->type = skb->pkt_type;
516 BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
521 urb->dev = husb->udev;
522 urb->pipe = usb_sndisocpipe(husb->udev, husb->isoc_out_ep->desc.bEndpointAddress);
523 urb->complete = hci_usb_tx_complete;
524 urb->transfer_flags = URB_ISO_ASAP;
526 urb->interval = husb->isoc_out_ep->desc.bInterval;
528 urb->transfer_buffer = skb->data;
529 urb->transfer_buffer_length = skb->len;
531 __fill_isoc_desc(urb, skb->len, le16_to_cpu(husb->isoc_out_ep->desc.wMaxPacketSize));
534 return __tx_submit(husb, _urb);
538 static void hci_usb_tx_process(struct hci_usb *husb)
540 struct sk_buff_head *q;
543 BT_DBG("%s", husb->hdev->name);
546 clear_bit(HCI_USB_TX_WAKEUP, &husb->state);
548 /* Process command queue */
549 q = __transmit_q(husb, HCI_COMMAND_PKT);
550 if (!atomic_read(__pending_tx(husb, HCI_COMMAND_PKT)) &&
551 (skb = skb_dequeue(q))) {
552 if (hci_usb_send_ctrl(husb, skb) < 0)
553 skb_queue_head(q, skb);
556 #ifdef CONFIG_BT_HCIUSB_SCO
557 /* Process SCO queue */
558 q = __transmit_q(husb, HCI_SCODATA_PKT);
559 if (atomic_read(__pending_tx(husb, HCI_SCODATA_PKT)) < HCI_MAX_ISOC_TX &&
560 (skb = skb_dequeue(q))) {
561 if (hci_usb_send_isoc(husb, skb) < 0)
562 skb_queue_head(q, skb);
566 /* Process ACL queue */
567 q = __transmit_q(husb, HCI_ACLDATA_PKT);
568 while (atomic_read(__pending_tx(husb, HCI_ACLDATA_PKT)) < HCI_MAX_BULK_TX &&
569 (skb = skb_dequeue(q))) {
570 if (hci_usb_send_bulk(husb, skb) < 0) {
571 skb_queue_head(q, skb);
575 } while(test_bit(HCI_USB_TX_WAKEUP, &husb->state));
578 static inline void hci_usb_tx_wakeup(struct hci_usb *husb)
580 /* Serialize TX queue processing to avoid data reordering */
581 if (!test_and_set_bit(HCI_USB_TX_PROCESS, &husb->state)) {
582 hci_usb_tx_process(husb);
583 clear_bit(HCI_USB_TX_PROCESS, &husb->state);
585 set_bit(HCI_USB_TX_WAKEUP, &husb->state);
588 /* Send frames from HCI layer */
589 static int hci_usb_send_frame(struct sk_buff *skb)
591 struct hci_dev *hdev = (struct hci_dev *) skb->dev;
592 struct hci_usb *husb;
595 BT_ERR("frame for uknown device (hdev=NULL)");
599 if (!test_bit(HCI_RUNNING, &hdev->flags))
602 BT_DBG("%s type %d len %d", hdev->name, skb->pkt_type, skb->len);
604 husb = (struct hci_usb *) hdev->driver_data;
606 switch (skb->pkt_type) {
607 case HCI_COMMAND_PKT:
611 case HCI_ACLDATA_PKT:
615 #ifdef CONFIG_BT_HCIUSB_SCO
616 case HCI_SCODATA_PKT:
626 read_lock(&husb->completion_lock);
628 skb_queue_tail(__transmit_q(husb, skb->pkt_type), skb);
629 hci_usb_tx_wakeup(husb);
631 read_unlock(&husb->completion_lock);
635 static inline int __recv_frame(struct hci_usb *husb, int type, void *data, int count)
637 BT_DBG("%s type %d data %p count %d", husb->hdev->name, type, data, count);
639 husb->hdev->stat.byte_rx += count;
642 struct sk_buff *skb = __reassembly(husb, type);
643 struct { int expect; } *scb;
647 /* Start of the frame */
651 if (count >= HCI_EVENT_HDR_SIZE) {
652 struct hci_event_hdr *h = data;
653 len = HCI_EVENT_HDR_SIZE + h->plen;
658 case HCI_ACLDATA_PKT:
659 if (count >= HCI_ACL_HDR_SIZE) {
660 struct hci_acl_hdr *h = data;
661 len = HCI_ACL_HDR_SIZE + __le16_to_cpu(h->dlen);
665 #ifdef CONFIG_BT_HCIUSB_SCO
666 case HCI_SCODATA_PKT:
667 if (count >= HCI_SCO_HDR_SIZE) {
668 struct hci_sco_hdr *h = data;
669 len = HCI_SCO_HDR_SIZE + h->dlen;
675 BT_DBG("new packet len %d", len);
677 skb = bt_skb_alloc(len, GFP_ATOMIC);
679 BT_ERR("%s no memory for the packet", husb->hdev->name);
682 skb->dev = (void *) husb->hdev;
683 skb->pkt_type = type;
685 __reassembly(husb, type) = skb;
687 scb = (void *) skb->cb;
691 scb = (void *) skb->cb;
695 len = min(len, count);
697 memcpy(skb_put(skb, len), data, len);
702 __reassembly(husb, type) = NULL;
706 count -= len; data += len;
711 static void hci_usb_rx_complete(struct urb *urb, struct pt_regs *regs)
713 struct _urb *_urb = container_of(urb, struct _urb, urb);
714 struct hci_usb *husb = (void *) urb->context;
715 struct hci_dev *hdev = husb->hdev;
716 int err, count = urb->actual_length;
718 BT_DBG("%s urb %p type %d status %d count %d flags %x", hdev->name, urb,
719 _urb->type, urb->status, count, urb->transfer_flags);
721 read_lock(&husb->completion_lock);
723 if (!test_bit(HCI_RUNNING, &hdev->flags))
726 if (urb->status || !count)
729 if (_urb->type == HCI_SCODATA_PKT) {
730 #ifdef CONFIG_BT_HCIUSB_SCO
732 for (i=0; i < urb->number_of_packets; i++) {
733 BT_DBG("desc %d status %d offset %d len %d", i,
734 urb->iso_frame_desc[i].status,
735 urb->iso_frame_desc[i].offset,
736 urb->iso_frame_desc[i].actual_length);
738 if (!urb->iso_frame_desc[i].status)
739 __recv_frame(husb, _urb->type,
740 urb->transfer_buffer + urb->iso_frame_desc[i].offset,
741 urb->iso_frame_desc[i].actual_length);
747 err = __recv_frame(husb, _urb->type, urb->transfer_buffer, count);
749 BT_ERR("%s corrupted packet: type %d count %d",
750 husb->hdev->name, _urb->type, count);
756 urb->dev = husb->udev;
757 err = usb_submit_urb(urb, GFP_ATOMIC);
758 BT_DBG("%s urb %p type %d resubmit status %d", hdev->name, urb,
762 read_unlock(&husb->completion_lock);
765 static void hci_usb_tx_complete(struct urb *urb, struct pt_regs *regs)
767 struct _urb *_urb = container_of(urb, struct _urb, urb);
768 struct hci_usb *husb = (void *) urb->context;
769 struct hci_dev *hdev = husb->hdev;
771 BT_DBG("%s urb %p status %d flags %x", hdev->name, urb,
772 urb->status, urb->transfer_flags);
774 atomic_dec(__pending_tx(husb, _urb->type));
776 urb->transfer_buffer = NULL;
777 kfree_skb((struct sk_buff *) _urb->priv);
779 if (!test_bit(HCI_RUNNING, &hdev->flags))
783 hdev->stat.byte_tx += urb->transfer_buffer_length;
787 read_lock(&husb->completion_lock);
790 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
792 hci_usb_tx_wakeup(husb);
794 read_unlock(&husb->completion_lock);
797 static void hci_usb_destruct(struct hci_dev *hdev)
799 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
801 BT_DBG("%s", hdev->name);
806 static void hci_usb_notify(struct hci_dev *hdev, unsigned int evt)
808 BT_DBG("%s evt %d", hdev->name, evt);
811 static int hci_usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
813 struct usb_device *udev = interface_to_usbdev(intf);
814 struct usb_host_endpoint *bulk_out_ep = NULL;
815 struct usb_host_endpoint *bulk_in_ep = NULL;
816 struct usb_host_endpoint *intr_in_ep = NULL;
817 struct usb_host_endpoint *ep;
818 struct usb_host_interface *uif;
819 struct usb_interface *isoc_iface;
820 struct hci_usb *husb;
821 struct hci_dev *hdev;
822 int i, e, size, isoc_ifnum, isoc_alts;
824 BT_DBG("udev %p intf %p", udev, intf);
826 if (!id->driver_info) {
827 const struct usb_device_id *match;
828 match = usb_match_id(intf, blacklist_ids);
833 if (ignore || id->driver_info & HCI_IGNORE)
836 if (intf->cur_altsetting->desc.bInterfaceNumber > 0)
839 /* Find endpoints that we need */
840 uif = intf->cur_altsetting;
841 for (e = 0; e < uif->desc.bNumEndpoints; e++) {
842 ep = &uif->endpoint[e];
844 switch (ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
845 case USB_ENDPOINT_XFER_INT:
846 if (ep->desc.bEndpointAddress & USB_DIR_IN)
850 case USB_ENDPOINT_XFER_BULK:
851 if (ep->desc.bEndpointAddress & USB_DIR_IN)
859 if (!bulk_in_ep || !bulk_out_ep || !intr_in_ep) {
860 BT_DBG("Bulk endpoints not found");
864 if (!(husb = kmalloc(sizeof(struct hci_usb), GFP_KERNEL))) {
865 BT_ERR("Can't allocate: control structure");
869 memset(husb, 0, sizeof(struct hci_usb));
872 husb->bulk_out_ep = bulk_out_ep;
873 husb->bulk_in_ep = bulk_in_ep;
874 husb->intr_in_ep = intr_in_ep;
876 if (id->driver_info & HCI_DIGIANSWER)
877 husb->ctrl_req = USB_TYPE_VENDOR;
879 husb->ctrl_req = USB_TYPE_CLASS;
881 /* Find isochronous endpoints that we can use */
887 #ifdef CONFIG_BT_HCIUSB_SCO
888 if (isoc && !(id->driver_info & HCI_BROKEN_ISOC))
889 isoc_iface = usb_ifnum_to_if(udev, isoc_ifnum);
893 struct usb_host_endpoint *isoc_out_ep = NULL;
894 struct usb_host_endpoint *isoc_in_ep = NULL;
896 for (a = 0; a < isoc_iface->num_altsetting; a++) {
897 uif = &isoc_iface->altsetting[a];
898 for (e = 0; e < uif->desc.bNumEndpoints; e++) {
899 ep = &uif->endpoint[e];
901 switch (ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
902 case USB_ENDPOINT_XFER_ISOC:
903 if (le16_to_cpu(ep->desc.wMaxPacketSize) < size ||
904 uif->desc.bAlternateSetting != isoc)
906 size = le16_to_cpu(ep->desc.wMaxPacketSize);
908 isoc_alts = uif->desc.bAlternateSetting;
910 if (ep->desc.bEndpointAddress & USB_DIR_IN)
919 if (!isoc_in_ep || !isoc_out_ep)
920 BT_DBG("Isoc endpoints not found");
922 BT_DBG("isoc ifnum %d alts %d", isoc_ifnum, isoc_alts);
923 if (usb_driver_claim_interface(&hci_usb_driver, isoc_iface, husb) != 0)
924 BT_ERR("Can't claim isoc interface");
925 else if (usb_set_interface(udev, isoc_ifnum, isoc_alts)) {
926 BT_ERR("Can't set isoc interface settings");
927 husb->isoc_iface = isoc_iface;
928 usb_driver_release_interface(&hci_usb_driver, isoc_iface);
929 husb->isoc_iface = NULL;
931 husb->isoc_iface = isoc_iface;
932 husb->isoc_in_ep = isoc_in_ep;
933 husb->isoc_out_ep = isoc_out_ep;
939 rwlock_init(&husb->completion_lock);
941 for (i = 0; i < 4; i++) {
942 skb_queue_head_init(&husb->transmit_q[i]);
943 _urb_queue_init(&husb->pending_q[i]);
944 _urb_queue_init(&husb->completed_q[i]);
947 /* Initialize and register HCI device */
948 hdev = hci_alloc_dev();
950 BT_ERR("Can't allocate HCI device");
956 hdev->type = HCI_USB;
957 hdev->driver_data = husb;
958 SET_HCIDEV_DEV(hdev, &intf->dev);
960 hdev->open = hci_usb_open;
961 hdev->close = hci_usb_close;
962 hdev->flush = hci_usb_flush;
963 hdev->send = hci_usb_send_frame;
964 hdev->destruct = hci_usb_destruct;
965 hdev->notify = hci_usb_notify;
967 hdev->owner = THIS_MODULE;
969 if (reset || id->driver_info & HCI_RESET)
970 set_bit(HCI_QUIRK_RESET_ON_INIT, &hdev->quirks);
972 if (hci_register_dev(hdev) < 0) {
973 BT_ERR("Can't register HCI device");
978 usb_set_intfdata(intf, husb);
982 if (husb->isoc_iface)
983 usb_driver_release_interface(&hci_usb_driver, husb->isoc_iface);
990 static void hci_usb_disconnect(struct usb_interface *intf)
992 struct hci_usb *husb = usb_get_intfdata(intf);
993 struct hci_dev *hdev;
995 if (!husb || intf == husb->isoc_iface)
998 usb_set_intfdata(intf, NULL);
1001 BT_DBG("%s", hdev->name);
1003 hci_usb_close(hdev);
1005 if (husb->isoc_iface)
1006 usb_driver_release_interface(&hci_usb_driver, husb->isoc_iface);
1008 if (hci_unregister_dev(hdev) < 0)
1009 BT_ERR("Can't unregister HCI device %s", hdev->name);
1014 static struct usb_driver hci_usb_driver = {
1015 .owner = THIS_MODULE,
1017 .probe = hci_usb_probe,
1018 .disconnect = hci_usb_disconnect,
1019 .id_table = bluetooth_ids,
1022 static int __init hci_usb_init(void)
1026 BT_INFO("HCI USB driver ver %s", VERSION);
1028 if ((err = usb_register(&hci_usb_driver)) < 0)
1029 BT_ERR("Failed to register HCI USB driver");
1034 static void __exit hci_usb_exit(void)
1036 usb_deregister(&hci_usb_driver);
1039 module_init(hci_usb_init);
1040 module_exit(hci_usb_exit);
1042 module_param(ignore, bool, 0644);
1043 MODULE_PARM_DESC(ignore, "Ignore devices from the matching table");
1045 module_param(reset, bool, 0644);
1046 MODULE_PARM_DESC(reset, "Send HCI reset command on initialization");
1048 #ifdef CONFIG_BT_HCIUSB_SCO
1049 module_param(isoc, int, 0644);
1050 MODULE_PARM_DESC(isoc, "Set isochronous transfers for SCO over HCI support");
1053 MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>, Marcel Holtmann <marcel@holtmann.org>");
1054 MODULE_DESCRIPTION("Bluetooth HCI USB driver ver " VERSION);
1055 MODULE_VERSION(VERSION);
1056 MODULE_LICENSE("GPL");