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 * Based on original USB Bluetooth driver for Linux kernel
28 * Copyright (c) 2000 Greg Kroah-Hartman <greg@kroah.com>
29 * Copyright (c) 2000 Mark Douglas Corner <mcorner@umich.edu>
31 * $Id: hci_usb.c,v 1.8 2002/07/18 17:23:09 maxk Exp $
35 #include <linux/config.h>
36 #include <linux/module.h>
38 #include <linux/version.h>
39 #include <linux/kernel.h>
40 #include <linux/init.h>
41 #include <linux/sched.h>
42 #include <linux/unistd.h>
43 #include <linux/types.h>
44 #include <linux/interrupt.h>
46 #include <linux/slab.h>
47 #include <linux/errno.h>
48 #include <linux/string.h>
49 #include <linux/skbuff.h>
51 #include <linux/usb.h>
53 #include <net/bluetooth/bluetooth.h>
54 #include <net/bluetooth/hci_core.h>
60 #define BT_DBG( A... )
62 #define BT_DMP( A... )
65 #ifndef CONFIG_BLUEZ_HCIUSB_ZERO_PACKET
66 #undef USB_ZERO_PACKET
67 #define USB_ZERO_PACKET 0
70 static struct usb_driver hci_usb_driver;
72 static struct usb_device_id bluetooth_ids[] = {
73 /* Generic Bluetooth USB device */
74 { USB_DEVICE_INFO(HCI_DEV_CLASS, HCI_DEV_SUBCLASS, HCI_DEV_PROTOCOL) },
76 /* AVM BlueFRITZ! USB v2.0 */
77 { USB_DEVICE(0x057c, 0x3800) },
79 /* Bluetooth Ultraport Module from IBM */
80 { USB_DEVICE(0x04bf, 0x030a) },
82 /* ALPS Modules with non-standard id */
83 { USB_DEVICE(0x044e, 0x3001) },
84 { USB_DEVICE(0x044e, 0x3002) },
86 /* Ericsson with non-standard id */
87 { USB_DEVICE(0x0bdb, 0x1002) },
89 { } /* Terminating entry */
92 MODULE_DEVICE_TABLE (usb, bluetooth_ids);
94 static struct usb_device_id blacklist_ids[] = {
95 /* Broadcom BCM2033 without firmware */
96 { USB_DEVICE(0x0a5c, 0x2033), driver_info: HCI_IGNORE },
98 /* Broadcom BCM2035 */
99 { USB_DEVICE(0x0a5c, 0x200a), driver_info: HCI_RESET },
101 /* ISSC Bluetooth Adapter v3.1 */
102 { USB_DEVICE(0x1131, 0x1001), driver_info: HCI_RESET },
104 /* Digianswer device */
105 { USB_DEVICE(0x08fd, 0x0001), driver_info: HCI_DIGIANSWER },
107 /* RTX Telecom based adapter with buggy SCO support */
108 { USB_DEVICE(0x0400, 0x0807), driver_info: HCI_BROKEN_ISOC },
110 { } /* Terminating entry */
113 struct _urb *_urb_alloc(int isoc, int gfp)
115 struct _urb *_urb = kmalloc(sizeof(struct _urb) +
116 sizeof(struct iso_packet_descriptor) * isoc, gfp);
118 memset(_urb, 0, sizeof(*_urb));
119 spin_lock_init(&_urb->urb.lock);
124 struct _urb *_urb_dequeue(struct _urb_queue *q)
126 struct _urb *_urb = NULL;
128 spin_lock_irqsave(&q->lock, flags);
130 struct list_head *head = &q->head;
131 struct list_head *next = head->next;
133 _urb = list_entry(next, struct _urb, list);
134 list_del(next); _urb->queue = NULL;
137 spin_unlock_irqrestore(&q->lock, flags);
141 static void hci_usb_rx_complete(struct urb *urb);
142 static void hci_usb_tx_complete(struct urb *urb);
144 #define __pending_tx(husb, type) (&husb->pending_tx[type-1])
145 #define __pending_q(husb, type) (&husb->pending_q[type-1])
146 #define __completed_q(husb, type) (&husb->completed_q[type-1])
147 #define __transmit_q(husb, type) (&husb->transmit_q[type-1])
148 #define __reassembly(husb, type) (husb->reassembly[type-1])
150 static inline struct _urb *__get_completed(struct hci_usb *husb, int type)
152 return _urb_dequeue(__completed_q(husb, type));
155 #ifdef CONFIG_BLUEZ_HCIUSB_SCO
156 static void __fill_isoc_desc(struct urb *urb, int len, int mtu)
160 BT_DBG("len %d mtu %d", len, mtu);
162 for (i=0; i < HCI_MAX_ISOC_FRAMES && len >= mtu; i++, offset += mtu, len -= mtu) {
163 urb->iso_frame_desc[i].offset = offset;
164 urb->iso_frame_desc[i].length = mtu;
165 BT_DBG("desc %d offset %d len %d", i, offset, mtu);
167 if (len && i < HCI_MAX_ISOC_FRAMES) {
168 urb->iso_frame_desc[i].offset = offset;
169 urb->iso_frame_desc[i].length = len;
170 BT_DBG("desc %d offset %d len %d", i, offset, len);
173 urb->number_of_packets = i;
177 static int hci_usb_intr_rx_submit(struct hci_usb *husb)
181 int err, pipe, interval, size;
184 BT_DBG("%s", husb->hdev.name);
186 size = husb->intr_in_ep->wMaxPacketSize;
188 buf = kmalloc(size, GFP_ATOMIC);
192 _urb = _urb_alloc(0, GFP_ATOMIC);
197 _urb->type = HCI_EVENT_PKT;
198 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
201 pipe = usb_rcvintpipe(husb->udev, husb->intr_in_ep->bEndpointAddress);
202 interval = husb->intr_in_ep->bInterval;
203 FILL_INT_URB(urb, husb->udev, pipe, buf, size, hci_usb_rx_complete, husb, interval);
205 err = usb_submit_urb(urb);
207 BT_ERR("%s intr rx submit failed urb %p err %d",
208 husb->hdev.name, urb, err);
216 static int hci_usb_bulk_rx_submit(struct hci_usb *husb)
220 int err, pipe, size = HCI_MAX_FRAME_SIZE;
223 buf = kmalloc(size, GFP_ATOMIC);
227 _urb = _urb_alloc(0, GFP_ATOMIC);
232 _urb->type = HCI_ACLDATA_PKT;
233 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
236 pipe = usb_rcvbulkpipe(husb->udev, husb->bulk_in_ep->bEndpointAddress);
237 FILL_BULK_URB(urb, husb->udev, pipe, buf, size, hci_usb_rx_complete, husb);
238 urb->transfer_flags = USB_QUEUE_BULK;
240 BT_DBG("%s urb %p", husb->hdev.name, urb);
242 err = usb_submit_urb(urb);
244 BT_ERR("%s bulk rx submit failed urb %p err %d",
245 husb->hdev.name, urb, err);
253 #ifdef CONFIG_BLUEZ_HCIUSB_SCO
254 static int hci_usb_isoc_rx_submit(struct hci_usb *husb)
261 mtu = husb->isoc_in_ep->wMaxPacketSize;
262 size = mtu * HCI_MAX_ISOC_FRAMES;
264 buf = kmalloc(size, GFP_ATOMIC);
268 _urb = _urb_alloc(HCI_MAX_ISOC_FRAMES, GFP_ATOMIC);
273 _urb->type = HCI_SCODATA_PKT;
274 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
279 urb->dev = husb->udev;
280 urb->pipe = usb_rcvisocpipe(husb->udev, husb->isoc_in_ep->bEndpointAddress);
281 urb->complete = hci_usb_rx_complete;
283 urb->transfer_buffer_length = size;
284 urb->transfer_buffer = buf;
285 urb->transfer_flags = USB_ISO_ASAP;
287 __fill_isoc_desc(urb, size, mtu);
289 BT_DBG("%s urb %p", husb->hdev.name, urb);
291 err = usb_submit_urb(urb);
293 BT_ERR("%s isoc rx submit failed urb %p err %d",
294 husb->hdev.name, urb, err);
303 /* Initialize device */
304 static int hci_usb_open(struct hci_dev *hdev)
306 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
310 BT_DBG("%s", hdev->name);
312 if (test_and_set_bit(HCI_RUNNING, &hdev->flags))
317 write_lock_irqsave(&husb->completion_lock, flags);
319 err = hci_usb_intr_rx_submit(husb);
321 for (i = 0; i < HCI_MAX_BULK_RX; i++)
322 hci_usb_bulk_rx_submit(husb);
324 #ifdef CONFIG_BLUEZ_HCIUSB_SCO
325 if (husb->isoc_iface)
326 for (i = 0; i < HCI_MAX_ISOC_RX; i++)
327 hci_usb_isoc_rx_submit(husb);
330 clear_bit(HCI_RUNNING, &hdev->flags);
334 write_unlock_irqrestore(&husb->completion_lock, flags);
339 static int hci_usb_flush(struct hci_dev *hdev)
341 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
344 BT_DBG("%s", hdev->name);
346 for (i=0; i < 4; i++)
347 skb_queue_purge(&husb->transmit_q[i]);
351 static void hci_usb_unlink_urbs(struct hci_usb *husb)
355 BT_DBG("%s", husb->hdev.name);
357 for (i=0; i < 4; i++) {
361 /* Kill pending requests */
362 while ((_urb = _urb_dequeue(&husb->pending_q[i]))) {
364 BT_DBG("%s unlinking _urb %p type %d urb %p",
365 husb->hdev.name, _urb, _urb->type, urb);
367 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
370 /* Release completed requests */
371 while ((_urb = _urb_dequeue(&husb->completed_q[i]))) {
373 BT_DBG("%s freeing _urb %p type %d urb %p",
374 husb->hdev.name, _urb, _urb->type, urb);
375 if (urb->setup_packet)
376 kfree(urb->setup_packet);
377 if (urb->transfer_buffer)
378 kfree(urb->transfer_buffer);
382 /* Release reassembly buffers */
383 if (husb->reassembly[i]) {
384 kfree_skb(husb->reassembly[i]);
385 husb->reassembly[i] = NULL;
391 static int hci_usb_close(struct hci_dev *hdev)
393 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
396 if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags))
399 BT_DBG("%s", hdev->name);
401 /* Synchronize with completion handlers */
402 write_lock_irqsave(&husb->completion_lock, flags);
403 write_unlock_irqrestore(&husb->completion_lock, flags);
405 hci_usb_unlink_urbs(husb);
412 static int __tx_submit(struct hci_usb *husb, struct _urb *_urb)
414 struct urb *urb = &_urb->urb;
417 BT_DBG("%s urb %p type %d", husb->hdev.name, urb, _urb->type);
419 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
420 err = usb_submit_urb(urb);
422 BT_ERR("%s tx submit failed urb %p type %d err %d",
423 husb->hdev.name, urb, _urb->type, err);
425 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
427 atomic_inc(__pending_tx(husb, _urb->type));
432 static inline int hci_usb_send_ctrl(struct hci_usb *husb, struct sk_buff *skb)
434 struct _urb *_urb = __get_completed(husb, skb->pkt_type);
435 struct usb_ctrlrequest *dr;
439 _urb = _urb_alloc(0, GFP_ATOMIC);
442 _urb->type = skb->pkt_type;
444 dr = kmalloc(sizeof(*dr), GFP_ATOMIC);
450 dr = (void *) _urb->urb.setup_packet;
452 dr->bRequestType = husb->ctrl_req;
456 dr->wLength = __cpu_to_le16(skb->len);
459 FILL_CONTROL_URB(urb, husb->udev, usb_sndctrlpipe(husb->udev, 0),
460 (void *) dr, skb->data, skb->len, hci_usb_tx_complete, husb);
462 BT_DBG("%s skb %p len %d", husb->hdev.name, skb, skb->len);
465 return __tx_submit(husb, _urb);
468 static inline int hci_usb_send_bulk(struct hci_usb *husb, struct sk_buff *skb)
470 struct _urb *_urb = __get_completed(husb, skb->pkt_type);
475 _urb = _urb_alloc(0, GFP_ATOMIC);
478 _urb->type = skb->pkt_type;
482 pipe = usb_sndbulkpipe(husb->udev, husb->bulk_out_ep->bEndpointAddress);
483 FILL_BULK_URB(urb, husb->udev, pipe, skb->data, skb->len,
484 hci_usb_tx_complete, husb);
485 urb->transfer_flags = USB_QUEUE_BULK | USB_ZERO_PACKET;
487 BT_DBG("%s skb %p len %d", husb->hdev.name, skb, skb->len);
490 return __tx_submit(husb, _urb);
493 #ifdef CONFIG_BLUEZ_HCIUSB_SCO
494 static inline int hci_usb_send_isoc(struct hci_usb *husb, struct sk_buff *skb)
496 struct _urb *_urb = __get_completed(husb, skb->pkt_type);
500 _urb = _urb_alloc(HCI_MAX_ISOC_FRAMES, GFP_ATOMIC);
503 _urb->type = skb->pkt_type;
506 BT_DBG("%s skb %p len %d", husb->hdev.name, skb, skb->len);
511 urb->dev = husb->udev;
512 urb->pipe = usb_sndisocpipe(husb->udev, husb->isoc_out_ep->bEndpointAddress);
513 urb->complete = hci_usb_tx_complete;
514 urb->transfer_flags = USB_ISO_ASAP;
516 urb->transfer_buffer = skb->data;
517 urb->transfer_buffer_length = skb->len;
519 __fill_isoc_desc(urb, skb->len, husb->isoc_out_ep->wMaxPacketSize);
522 return __tx_submit(husb, _urb);
526 static void hci_usb_tx_process(struct hci_usb *husb)
528 struct sk_buff_head *q;
531 BT_DBG("%s", husb->hdev.name);
534 clear_bit(HCI_USB_TX_WAKEUP, &husb->state);
536 /* Process command queue */
537 q = __transmit_q(husb, HCI_COMMAND_PKT);
538 if (!atomic_read(__pending_tx(husb, HCI_COMMAND_PKT)) &&
539 (skb = skb_dequeue(q))) {
540 if (hci_usb_send_ctrl(husb, skb) < 0)
541 skb_queue_head(q, skb);
544 #ifdef CONFIG_BLUEZ_HCIUSB_SCO
545 /* Process SCO queue */
546 q = __transmit_q(husb, HCI_SCODATA_PKT);
547 if (atomic_read(__pending_tx(husb, HCI_SCODATA_PKT)) < HCI_MAX_ISOC_TX &&
548 (skb = skb_dequeue(q))) {
549 if (hci_usb_send_isoc(husb, skb) < 0)
550 skb_queue_head(q, skb);
554 /* Process ACL queue */
555 q = __transmit_q(husb, HCI_ACLDATA_PKT);
556 while (atomic_read(__pending_tx(husb, HCI_ACLDATA_PKT)) < HCI_MAX_BULK_TX &&
557 (skb = skb_dequeue(q))) {
558 if (hci_usb_send_bulk(husb, skb) < 0) {
559 skb_queue_head(q, skb);
563 } while(test_bit(HCI_USB_TX_WAKEUP, &husb->state));
566 static inline void hci_usb_tx_wakeup(struct hci_usb *husb)
568 /* Serialize TX queue processing to avoid data reordering */
569 if (!test_and_set_bit(HCI_USB_TX_PROCESS, &husb->state)) {
570 hci_usb_tx_process(husb);
571 clear_bit(HCI_USB_TX_PROCESS, &husb->state);
573 set_bit(HCI_USB_TX_WAKEUP, &husb->state);
576 /* Send frames from HCI layer */
577 static int hci_usb_send_frame(struct sk_buff *skb)
579 struct hci_dev *hdev = (struct hci_dev *) skb->dev;
580 struct hci_usb *husb;
583 BT_ERR("frame for uknown device (hdev=NULL)");
587 if (!test_bit(HCI_RUNNING, &hdev->flags))
590 BT_DBG("%s type %d len %d", hdev->name, skb->pkt_type, skb->len);
592 husb = (struct hci_usb *) hdev->driver_data;
594 switch (skb->pkt_type) {
595 case HCI_COMMAND_PKT:
599 case HCI_ACLDATA_PKT:
603 #ifdef CONFIG_BLUEZ_HCIUSB_SCO
604 case HCI_SCODATA_PKT:
614 read_lock(&husb->completion_lock);
616 skb_queue_tail(__transmit_q(husb, skb->pkt_type), skb);
617 hci_usb_tx_wakeup(husb);
619 read_unlock(&husb->completion_lock);
623 static inline int __recv_frame(struct hci_usb *husb, int type, void *data, int count)
625 BT_DBG("%s type %d data %p count %d", husb->hdev.name, type, data, count);
627 husb->hdev.stat.byte_rx += count;
630 struct sk_buff *skb = __reassembly(husb, type);
631 struct { int expect; } *scb;
635 /* Start of the frame */
639 if (count >= HCI_EVENT_HDR_SIZE) {
640 hci_event_hdr *h = data;
641 len = HCI_EVENT_HDR_SIZE + h->plen;
646 case HCI_ACLDATA_PKT:
647 if (count >= HCI_ACL_HDR_SIZE) {
648 hci_acl_hdr *h = data;
649 len = HCI_ACL_HDR_SIZE + __le16_to_cpu(h->dlen);
653 #ifdef CONFIG_BLUEZ_HCIUSB_SCO
654 case HCI_SCODATA_PKT:
655 if (count >= HCI_SCO_HDR_SIZE) {
656 hci_sco_hdr *h = data;
657 len = HCI_SCO_HDR_SIZE + h->dlen;
663 BT_DBG("new packet len %d", len);
665 skb = bluez_skb_alloc(len, GFP_ATOMIC);
667 BT_ERR("%s no memory for the packet", husb->hdev.name);
670 skb->dev = (void *) &husb->hdev;
671 skb->pkt_type = type;
673 __reassembly(husb, type) = skb;
675 scb = (void *) skb->cb;
679 scb = (void *) skb->cb;
683 len = min(len, count);
685 memcpy(skb_put(skb, len), data, len);
690 __reassembly(husb, type) = NULL;
694 count -= len; data += len;
699 static void hci_usb_rx_complete(struct urb *urb)
701 struct _urb *_urb = container_of(urb, struct _urb, urb);
702 struct hci_usb *husb = (void *) urb->context;
703 struct hci_dev *hdev = &husb->hdev;
704 int err, count = urb->actual_length;
706 BT_DBG("%s urb %p type %d status %d count %d flags %x", hdev->name, urb,
707 _urb->type, urb->status, count, urb->transfer_flags);
709 read_lock(&husb->completion_lock);
711 if (!test_bit(HCI_RUNNING, &hdev->flags))
714 if (urb->status || !count)
717 if (_urb->type == HCI_SCODATA_PKT) {
718 #ifdef CONFIG_BLUEZ_HCIUSB_SCO
720 for (i=0; i < urb->number_of_packets; i++) {
721 BT_DBG("desc %d status %d offset %d len %d", i,
722 urb->iso_frame_desc[i].status,
723 urb->iso_frame_desc[i].offset,
724 urb->iso_frame_desc[i].actual_length);
726 if (!urb->iso_frame_desc[i].status)
727 __recv_frame(husb, _urb->type,
728 urb->transfer_buffer + urb->iso_frame_desc[i].offset,
729 urb->iso_frame_desc[i].actual_length);
735 err = __recv_frame(husb, _urb->type, urb->transfer_buffer, count);
737 BT_ERR("%s corrupted packet: type %d count %d",
738 husb->hdev.name, _urb->type, count);
744 if (_urb->type != HCI_EVENT_PKT) {
745 urb->dev = husb->udev;
746 err = usb_submit_urb(urb);
747 BT_DBG("%s urb %p type %d resubmit status %d", hdev->name, urb,
752 read_unlock(&husb->completion_lock);
755 static void hci_usb_tx_complete(struct urb *urb)
757 struct _urb *_urb = container_of(urb, struct _urb, urb);
758 struct hci_usb *husb = (void *) urb->context;
759 struct hci_dev *hdev = &husb->hdev;
761 BT_DBG("%s urb %p status %d flags %x", hdev->name, urb,
762 urb->status, urb->transfer_flags);
764 atomic_dec(__pending_tx(husb, _urb->type));
766 urb->transfer_buffer = NULL;
767 kfree_skb((struct sk_buff *) _urb->priv);
769 if (!test_bit(HCI_RUNNING, &hdev->flags))
773 hdev->stat.byte_tx += urb->transfer_buffer_length;
777 read_lock(&husb->completion_lock);
780 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
782 hci_usb_tx_wakeup(husb);
784 read_unlock(&husb->completion_lock);
787 static void hci_usb_destruct(struct hci_dev *hdev)
789 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
791 BT_DBG("%s", hdev->name);
796 static void *hci_usb_probe(struct usb_device *udev, unsigned int ifnum, const struct usb_device_id *id)
798 struct usb_endpoint_descriptor *bulk_out_ep[HCI_MAX_IFACE_NUM];
799 struct usb_endpoint_descriptor *isoc_out_ep[HCI_MAX_IFACE_NUM];
800 struct usb_endpoint_descriptor *bulk_in_ep[HCI_MAX_IFACE_NUM];
801 struct usb_endpoint_descriptor *isoc_in_ep[HCI_MAX_IFACE_NUM];
802 struct usb_endpoint_descriptor *intr_in_ep[HCI_MAX_IFACE_NUM];
803 struct usb_interface_descriptor *uif;
804 struct usb_endpoint_descriptor *ep;
805 struct usb_interface *iface, *isoc_iface;
806 struct hci_usb *husb;
807 struct hci_dev *hdev;
808 int i, a, e, size, ifn, isoc_ifnum, isoc_alts;
810 BT_DBG("udev %p ifnum %d", udev, ifnum);
812 iface = &udev->actconfig->interface[0];
814 if (!id->driver_info) {
815 const struct usb_device_id *match;
816 match = usb_match_id(udev, iface, blacklist_ids);
821 if (id->driver_info & HCI_IGNORE)
824 /* Check number of endpoints */
825 if (udev->actconfig->interface[ifnum].altsetting[0].bNumEndpoints < 3)
828 memset(bulk_out_ep, 0, sizeof(bulk_out_ep));
829 memset(isoc_out_ep, 0, sizeof(isoc_out_ep));
830 memset(bulk_in_ep, 0, sizeof(bulk_in_ep));
831 memset(isoc_in_ep, 0, sizeof(isoc_in_ep));
832 memset(intr_in_ep, 0, sizeof(intr_in_ep));
836 isoc_alts = isoc_ifnum = 0;
838 /* Find endpoints that we need */
840 ifn = MIN(udev->actconfig->bNumInterfaces, HCI_MAX_IFACE_NUM);
841 for (i = 0; i < ifn; i++) {
842 iface = &udev->actconfig->interface[i];
843 for (a = 0; a < iface->num_altsetting; a++) {
844 uif = &iface->altsetting[a];
845 for (e = 0; e < uif->bNumEndpoints; e++) {
846 ep = &uif->endpoint[e];
848 switch (ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
849 case USB_ENDPOINT_XFER_INT:
850 if (ep->bEndpointAddress & USB_DIR_IN)
854 case USB_ENDPOINT_XFER_BULK:
855 if (ep->bEndpointAddress & USB_DIR_IN)
861 #ifdef CONFIG_BLUEZ_HCIUSB_SCO
862 case USB_ENDPOINT_XFER_ISOC:
863 if (ep->wMaxPacketSize < size || a > 2)
865 size = ep->wMaxPacketSize;
871 if (ep->bEndpointAddress & USB_DIR_IN)
882 if (!bulk_in_ep[0] || !bulk_out_ep[0] || !intr_in_ep[0]) {
883 BT_DBG("Bulk endpoints not found");
887 #ifdef CONFIG_BLUEZ_HCIUSB_SCO
888 if (id->driver_info & HCI_BROKEN_ISOC || !isoc_in_ep[1] || !isoc_out_ep[1]) {
889 BT_DBG("Isoc endpoints not found");
894 if (!(husb = kmalloc(sizeof(struct hci_usb), GFP_KERNEL))) {
895 BT_ERR("Can't allocate: control structure");
899 memset(husb, 0, sizeof(struct hci_usb));
902 husb->bulk_out_ep = bulk_out_ep[0];
903 husb->bulk_in_ep = bulk_in_ep[0];
904 husb->intr_in_ep = intr_in_ep[0];
906 if (id->driver_info & HCI_DIGIANSWER)
907 husb->ctrl_req = HCI_DIGI_REQ;
909 husb->ctrl_req = HCI_CTRL_REQ;
911 #ifdef CONFIG_BLUEZ_HCIUSB_SCO
913 BT_DBG("isoc ifnum %d alts %d", isoc_ifnum, isoc_alts);
914 if (usb_set_interface(udev, isoc_ifnum, isoc_alts)) {
915 BT_ERR("Can't set isoc interface settings");
918 usb_driver_claim_interface(&hci_usb_driver, isoc_iface, husb);
919 husb->isoc_iface = isoc_iface;
920 husb->isoc_in_ep = isoc_in_ep[isoc_ifnum];
921 husb->isoc_out_ep = isoc_out_ep[isoc_ifnum];
925 husb->completion_lock = RW_LOCK_UNLOCKED;
927 for (i = 0; i < 4; i++) {
928 skb_queue_head_init(&husb->transmit_q[i]);
929 _urb_queue_init(&husb->pending_q[i]);
930 _urb_queue_init(&husb->completed_q[i]);
933 /* Initialize and register HCI device */
936 hdev->type = HCI_USB;
937 hdev->driver_data = husb;
939 hdev->open = hci_usb_open;
940 hdev->close = hci_usb_close;
941 hdev->flush = hci_usb_flush;
942 hdev->send = hci_usb_send_frame;
943 hdev->destruct = hci_usb_destruct;
945 if (id->driver_info & HCI_RESET)
946 set_bit(HCI_QUIRK_RESET_ON_INIT, &hdev->quirks);
948 if (hci_register_dev(hdev) < 0) {
949 BT_ERR("Can't register HCI device");
962 static void hci_usb_disconnect(struct usb_device *udev, void *ptr)
964 struct hci_usb *husb = (struct hci_usb *) ptr;
965 struct hci_dev *hdev = &husb->hdev;
970 BT_DBG("%s", hdev->name);
974 if (husb->isoc_iface)
975 usb_driver_release_interface(&hci_usb_driver, husb->isoc_iface);
977 if (hci_unregister_dev(hdev) < 0)
978 BT_ERR("Can't unregister HCI device %s", hdev->name);
981 static struct usb_driver hci_usb_driver = {
983 probe: hci_usb_probe,
984 disconnect: hci_usb_disconnect,
985 id_table: bluetooth_ids,
988 int hci_usb_init(void)
992 BT_INFO("BlueZ HCI USB driver ver %s Copyright (C) 2000,2001 Qualcomm Inc",
994 BT_INFO("Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>");
996 if ((err = usb_register(&hci_usb_driver)) < 0)
997 BT_ERR("Failed to register HCI USB driver");
1002 void hci_usb_cleanup(void)
1004 usb_deregister(&hci_usb_driver);
1007 module_init(hci_usb_init);
1008 module_exit(hci_usb_cleanup);
1010 MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>, Marcel Holtmann <marcel@holtmann.org>");
1011 MODULE_DESCRIPTION("BlueZ HCI USB driver ver " VERSION);
1012 MODULE_LICENSE("GPL");