[PATCH] Kprobes: preempt_disable/enable() simplification
[linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git] / drivers / bluetooth / hci_usb.c
blob6756cb20b753875e7a22cc3c7f047d2e134b9ea6
1 /*
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>
55 #include "hci_usb.h"
57 #ifndef CONFIG_BT_HCIUSB_DEBUG
58 #undef BT_DBG
59 #define BT_DBG(D...)
60 #endif
62 #ifndef CONFIG_BT_HCIUSB_ZERO_PACKET
63 #undef URB_ZERO_PACKET
64 #define URB_ZERO_PACKET 0
65 #endif
67 static int ignore = 0;
68 static int ignore_csr = 0;
69 static int ignore_sniffer = 0;
70 static int reset = 0;
72 #ifdef CONFIG_BT_HCIUSB_SCO
73 static int isoc = 2;
74 #endif
76 #define VERSION "2.9"
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 /* CSR BlueCore devices */
104 { USB_DEVICE(0x0a12, 0x0001), .driver_info = HCI_CSR },
106 /* Broadcom BCM2033 without firmware */
107 { USB_DEVICE(0x0a5c, 0x2033), .driver_info = HCI_IGNORE },
109 /* Broadcom BCM2035 */
110 { USB_DEVICE(0x0a5c, 0x200a), .driver_info = HCI_RESET | HCI_BROKEN_ISOC },
111 { USB_DEVICE(0x0a5c, 0x2009), .driver_info = HCI_BCM92035 },
113 /* Microsoft Wireless Transceiver for Bluetooth 2.0 */
114 { USB_DEVICE(0x045e, 0x009c), .driver_info = HCI_RESET },
116 /* Kensington Bluetooth USB adapter */
117 { USB_DEVICE(0x047d, 0x105d), .driver_info = HCI_RESET },
119 /* ISSC Bluetooth Adapter v3.1 */
120 { USB_DEVICE(0x1131, 0x1001), .driver_info = HCI_RESET },
122 /* RTX Telecom based adapter with buggy SCO support */
123 { USB_DEVICE(0x0400, 0x0807), .driver_info = HCI_BROKEN_ISOC },
125 /* Digianswer devices */
126 { USB_DEVICE(0x08fd, 0x0001), .driver_info = HCI_DIGIANSWER },
127 { USB_DEVICE(0x08fd, 0x0002), .driver_info = HCI_IGNORE },
129 /* CSR BlueCore Bluetooth Sniffer */
130 { USB_DEVICE(0x0a12, 0x0002), .driver_info = HCI_SNIFFER },
132 { } /* Terminating entry */
135 static struct _urb *_urb_alloc(int isoc, gfp_t gfp)
137 struct _urb *_urb = kmalloc(sizeof(struct _urb) +
138 sizeof(struct usb_iso_packet_descriptor) * isoc, gfp);
139 if (_urb) {
140 memset(_urb, 0, sizeof(*_urb));
141 usb_init_urb(&_urb->urb);
143 return _urb;
146 static struct _urb *_urb_dequeue(struct _urb_queue *q)
148 struct _urb *_urb = NULL;
149 unsigned long flags;
150 spin_lock_irqsave(&q->lock, flags);
152 struct list_head *head = &q->head;
153 struct list_head *next = head->next;
154 if (next != head) {
155 _urb = list_entry(next, struct _urb, list);
156 list_del(next); _urb->queue = NULL;
159 spin_unlock_irqrestore(&q->lock, flags);
160 return _urb;
163 static void hci_usb_rx_complete(struct urb *urb, struct pt_regs *regs);
164 static void hci_usb_tx_complete(struct urb *urb, struct pt_regs *regs);
166 #define __pending_tx(husb, type) (&husb->pending_tx[type-1])
167 #define __pending_q(husb, type) (&husb->pending_q[type-1])
168 #define __completed_q(husb, type) (&husb->completed_q[type-1])
169 #define __transmit_q(husb, type) (&husb->transmit_q[type-1])
170 #define __reassembly(husb, type) (husb->reassembly[type-1])
172 static inline struct _urb *__get_completed(struct hci_usb *husb, int type)
174 return _urb_dequeue(__completed_q(husb, type));
177 #ifdef CONFIG_BT_HCIUSB_SCO
178 static void __fill_isoc_desc(struct urb *urb, int len, int mtu)
180 int offset = 0, i;
182 BT_DBG("len %d mtu %d", len, mtu);
184 for (i=0; i < HCI_MAX_ISOC_FRAMES && len >= mtu; i++, offset += mtu, len -= mtu) {
185 urb->iso_frame_desc[i].offset = offset;
186 urb->iso_frame_desc[i].length = mtu;
187 BT_DBG("desc %d offset %d len %d", i, offset, mtu);
189 if (len && i < HCI_MAX_ISOC_FRAMES) {
190 urb->iso_frame_desc[i].offset = offset;
191 urb->iso_frame_desc[i].length = len;
192 BT_DBG("desc %d offset %d len %d", i, offset, len);
193 i++;
195 urb->number_of_packets = i;
197 #endif
199 static int hci_usb_intr_rx_submit(struct hci_usb *husb)
201 struct _urb *_urb;
202 struct urb *urb;
203 int err, pipe, interval, size;
204 void *buf;
206 BT_DBG("%s", husb->hdev->name);
208 size = le16_to_cpu(husb->intr_in_ep->desc.wMaxPacketSize);
210 buf = kmalloc(size, GFP_ATOMIC);
211 if (!buf)
212 return -ENOMEM;
214 _urb = _urb_alloc(0, GFP_ATOMIC);
215 if (!_urb) {
216 kfree(buf);
217 return -ENOMEM;
219 _urb->type = HCI_EVENT_PKT;
220 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
222 urb = &_urb->urb;
223 pipe = usb_rcvintpipe(husb->udev, husb->intr_in_ep->desc.bEndpointAddress);
224 interval = husb->intr_in_ep->desc.bInterval;
225 usb_fill_int_urb(urb, husb->udev, pipe, buf, size, hci_usb_rx_complete, husb, interval);
227 err = usb_submit_urb(urb, GFP_ATOMIC);
228 if (err) {
229 BT_ERR("%s intr rx submit failed urb %p err %d",
230 husb->hdev->name, urb, err);
231 _urb_unlink(_urb);
232 _urb_free(_urb);
233 kfree(buf);
235 return err;
238 static int hci_usb_bulk_rx_submit(struct hci_usb *husb)
240 struct _urb *_urb;
241 struct urb *urb;
242 int err, pipe, size = HCI_MAX_FRAME_SIZE;
243 void *buf;
245 buf = kmalloc(size, GFP_ATOMIC);
246 if (!buf)
247 return -ENOMEM;
249 _urb = _urb_alloc(0, GFP_ATOMIC);
250 if (!_urb) {
251 kfree(buf);
252 return -ENOMEM;
254 _urb->type = HCI_ACLDATA_PKT;
255 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
257 urb = &_urb->urb;
258 pipe = usb_rcvbulkpipe(husb->udev, husb->bulk_in_ep->desc.bEndpointAddress);
259 usb_fill_bulk_urb(urb, husb->udev, pipe, buf, size, hci_usb_rx_complete, husb);
260 urb->transfer_flags = 0;
262 BT_DBG("%s urb %p", husb->hdev->name, urb);
264 err = usb_submit_urb(urb, GFP_ATOMIC);
265 if (err) {
266 BT_ERR("%s bulk rx submit failed urb %p err %d",
267 husb->hdev->name, urb, err);
268 _urb_unlink(_urb);
269 _urb_free(_urb);
270 kfree(buf);
272 return err;
275 #ifdef CONFIG_BT_HCIUSB_SCO
276 static int hci_usb_isoc_rx_submit(struct hci_usb *husb)
278 struct _urb *_urb;
279 struct urb *urb;
280 int err, mtu, size;
281 void *buf;
283 mtu = le16_to_cpu(husb->isoc_in_ep->desc.wMaxPacketSize);
284 size = mtu * HCI_MAX_ISOC_FRAMES;
286 buf = kmalloc(size, GFP_ATOMIC);
287 if (!buf)
288 return -ENOMEM;
290 _urb = _urb_alloc(HCI_MAX_ISOC_FRAMES, GFP_ATOMIC);
291 if (!_urb) {
292 kfree(buf);
293 return -ENOMEM;
295 _urb->type = HCI_SCODATA_PKT;
296 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
298 urb = &_urb->urb;
300 urb->context = husb;
301 urb->dev = husb->udev;
302 urb->pipe = usb_rcvisocpipe(husb->udev, husb->isoc_in_ep->desc.bEndpointAddress);
303 urb->complete = hci_usb_rx_complete;
305 urb->interval = husb->isoc_in_ep->desc.bInterval;
307 urb->transfer_buffer_length = size;
308 urb->transfer_buffer = buf;
309 urb->transfer_flags = URB_ISO_ASAP;
311 __fill_isoc_desc(urb, size, mtu);
313 BT_DBG("%s urb %p", husb->hdev->name, urb);
315 err = usb_submit_urb(urb, GFP_ATOMIC);
316 if (err) {
317 BT_ERR("%s isoc rx submit failed urb %p err %d",
318 husb->hdev->name, urb, err);
319 _urb_unlink(_urb);
320 _urb_free(_urb);
321 kfree(buf);
323 return err;
325 #endif
327 /* Initialize device */
328 static int hci_usb_open(struct hci_dev *hdev)
330 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
331 int i, err;
332 unsigned long flags;
334 BT_DBG("%s", hdev->name);
336 if (test_and_set_bit(HCI_RUNNING, &hdev->flags))
337 return 0;
339 write_lock_irqsave(&husb->completion_lock, flags);
341 err = hci_usb_intr_rx_submit(husb);
342 if (!err) {
343 for (i = 0; i < HCI_MAX_BULK_RX; i++)
344 hci_usb_bulk_rx_submit(husb);
346 #ifdef CONFIG_BT_HCIUSB_SCO
347 if (husb->isoc_iface)
348 for (i = 0; i < HCI_MAX_ISOC_RX; i++)
349 hci_usb_isoc_rx_submit(husb);
350 #endif
351 } else {
352 clear_bit(HCI_RUNNING, &hdev->flags);
355 write_unlock_irqrestore(&husb->completion_lock, flags);
356 return err;
359 /* Reset device */
360 static int hci_usb_flush(struct hci_dev *hdev)
362 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
363 int i;
365 BT_DBG("%s", hdev->name);
367 for (i = 0; i < 4; i++)
368 skb_queue_purge(&husb->transmit_q[i]);
369 return 0;
372 static void hci_usb_unlink_urbs(struct hci_usb *husb)
374 int i;
376 BT_DBG("%s", husb->hdev->name);
378 for (i = 0; i < 4; i++) {
379 struct _urb *_urb;
380 struct urb *urb;
382 /* Kill pending requests */
383 while ((_urb = _urb_dequeue(&husb->pending_q[i]))) {
384 urb = &_urb->urb;
385 BT_DBG("%s unlinking _urb %p type %d urb %p",
386 husb->hdev->name, _urb, _urb->type, urb);
387 usb_kill_urb(urb);
388 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
391 /* Release completed requests */
392 while ((_urb = _urb_dequeue(&husb->completed_q[i]))) {
393 urb = &_urb->urb;
394 BT_DBG("%s freeing _urb %p type %d urb %p",
395 husb->hdev->name, _urb, _urb->type, urb);
396 kfree(urb->setup_packet);
397 kfree(urb->transfer_buffer);
398 _urb_free(_urb);
401 /* Release reassembly buffers */
402 if (husb->reassembly[i]) {
403 kfree_skb(husb->reassembly[i]);
404 husb->reassembly[i] = NULL;
409 /* Close device */
410 static int hci_usb_close(struct hci_dev *hdev)
412 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
413 unsigned long flags;
415 if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags))
416 return 0;
418 BT_DBG("%s", hdev->name);
420 /* Synchronize with completion handlers */
421 write_lock_irqsave(&husb->completion_lock, flags);
422 write_unlock_irqrestore(&husb->completion_lock, flags);
424 hci_usb_unlink_urbs(husb);
425 hci_usb_flush(hdev);
426 return 0;
429 static int __tx_submit(struct hci_usb *husb, struct _urb *_urb)
431 struct urb *urb = &_urb->urb;
432 int err;
434 BT_DBG("%s urb %p type %d", husb->hdev->name, urb, _urb->type);
436 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
437 err = usb_submit_urb(urb, GFP_ATOMIC);
438 if (err) {
439 BT_ERR("%s tx submit failed urb %p type %d err %d",
440 husb->hdev->name, urb, _urb->type, err);
441 _urb_unlink(_urb);
442 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
443 } else
444 atomic_inc(__pending_tx(husb, _urb->type));
446 return err;
449 static inline int hci_usb_send_ctrl(struct hci_usb *husb, struct sk_buff *skb)
451 struct _urb *_urb = __get_completed(husb, bt_cb(skb)->pkt_type);
452 struct usb_ctrlrequest *dr;
453 struct urb *urb;
455 if (!_urb) {
456 _urb = _urb_alloc(0, GFP_ATOMIC);
457 if (!_urb)
458 return -ENOMEM;
459 _urb->type = bt_cb(skb)->pkt_type;
461 dr = kmalloc(sizeof(*dr), GFP_ATOMIC);
462 if (!dr) {
463 _urb_free(_urb);
464 return -ENOMEM;
466 } else
467 dr = (void *) _urb->urb.setup_packet;
469 dr->bRequestType = husb->ctrl_req;
470 dr->bRequest = 0;
471 dr->wIndex = 0;
472 dr->wValue = 0;
473 dr->wLength = __cpu_to_le16(skb->len);
475 urb = &_urb->urb;
476 usb_fill_control_urb(urb, husb->udev, usb_sndctrlpipe(husb->udev, 0),
477 (void *) dr, skb->data, skb->len, hci_usb_tx_complete, husb);
479 BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
481 _urb->priv = skb;
482 return __tx_submit(husb, _urb);
485 static inline int hci_usb_send_bulk(struct hci_usb *husb, struct sk_buff *skb)
487 struct _urb *_urb = __get_completed(husb, bt_cb(skb)->pkt_type);
488 struct urb *urb;
489 int pipe;
491 if (!_urb) {
492 _urb = _urb_alloc(0, GFP_ATOMIC);
493 if (!_urb)
494 return -ENOMEM;
495 _urb->type = bt_cb(skb)->pkt_type;
498 urb = &_urb->urb;
499 pipe = usb_sndbulkpipe(husb->udev, husb->bulk_out_ep->desc.bEndpointAddress);
500 usb_fill_bulk_urb(urb, husb->udev, pipe, skb->data, skb->len,
501 hci_usb_tx_complete, husb);
502 urb->transfer_flags = URB_ZERO_PACKET;
504 BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
506 _urb->priv = skb;
507 return __tx_submit(husb, _urb);
510 #ifdef CONFIG_BT_HCIUSB_SCO
511 static inline int hci_usb_send_isoc(struct hci_usb *husb, struct sk_buff *skb)
513 struct _urb *_urb = __get_completed(husb, bt_cb(skb)->pkt_type);
514 struct urb *urb;
516 if (!_urb) {
517 _urb = _urb_alloc(HCI_MAX_ISOC_FRAMES, GFP_ATOMIC);
518 if (!_urb)
519 return -ENOMEM;
520 _urb->type = bt_cb(skb)->pkt_type;
523 BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
525 urb = &_urb->urb;
527 urb->context = husb;
528 urb->dev = husb->udev;
529 urb->pipe = usb_sndisocpipe(husb->udev, husb->isoc_out_ep->desc.bEndpointAddress);
530 urb->complete = hci_usb_tx_complete;
531 urb->transfer_flags = URB_ISO_ASAP;
533 urb->interval = husb->isoc_out_ep->desc.bInterval;
535 urb->transfer_buffer = skb->data;
536 urb->transfer_buffer_length = skb->len;
538 __fill_isoc_desc(urb, skb->len, le16_to_cpu(husb->isoc_out_ep->desc.wMaxPacketSize));
540 _urb->priv = skb;
541 return __tx_submit(husb, _urb);
543 #endif
545 static void hci_usb_tx_process(struct hci_usb *husb)
547 struct sk_buff_head *q;
548 struct sk_buff *skb;
550 BT_DBG("%s", husb->hdev->name);
552 do {
553 clear_bit(HCI_USB_TX_WAKEUP, &husb->state);
555 /* Process command queue */
556 q = __transmit_q(husb, HCI_COMMAND_PKT);
557 if (!atomic_read(__pending_tx(husb, HCI_COMMAND_PKT)) &&
558 (skb = skb_dequeue(q))) {
559 if (hci_usb_send_ctrl(husb, skb) < 0)
560 skb_queue_head(q, skb);
563 #ifdef CONFIG_BT_HCIUSB_SCO
564 /* Process SCO queue */
565 q = __transmit_q(husb, HCI_SCODATA_PKT);
566 if (atomic_read(__pending_tx(husb, HCI_SCODATA_PKT)) < HCI_MAX_ISOC_TX &&
567 (skb = skb_dequeue(q))) {
568 if (hci_usb_send_isoc(husb, skb) < 0)
569 skb_queue_head(q, skb);
571 #endif
573 /* Process ACL queue */
574 q = __transmit_q(husb, HCI_ACLDATA_PKT);
575 while (atomic_read(__pending_tx(husb, HCI_ACLDATA_PKT)) < HCI_MAX_BULK_TX &&
576 (skb = skb_dequeue(q))) {
577 if (hci_usb_send_bulk(husb, skb) < 0) {
578 skb_queue_head(q, skb);
579 break;
582 } while(test_bit(HCI_USB_TX_WAKEUP, &husb->state));
585 static inline void hci_usb_tx_wakeup(struct hci_usb *husb)
587 /* Serialize TX queue processing to avoid data reordering */
588 if (!test_and_set_bit(HCI_USB_TX_PROCESS, &husb->state)) {
589 hci_usb_tx_process(husb);
590 clear_bit(HCI_USB_TX_PROCESS, &husb->state);
591 } else
592 set_bit(HCI_USB_TX_WAKEUP, &husb->state);
595 /* Send frames from HCI layer */
596 static int hci_usb_send_frame(struct sk_buff *skb)
598 struct hci_dev *hdev = (struct hci_dev *) skb->dev;
599 struct hci_usb *husb;
601 if (!hdev) {
602 BT_ERR("frame for uknown device (hdev=NULL)");
603 return -ENODEV;
606 if (!test_bit(HCI_RUNNING, &hdev->flags))
607 return -EBUSY;
609 BT_DBG("%s type %d len %d", hdev->name, bt_cb(skb)->pkt_type, skb->len);
611 husb = (struct hci_usb *) hdev->driver_data;
613 switch (bt_cb(skb)->pkt_type) {
614 case HCI_COMMAND_PKT:
615 hdev->stat.cmd_tx++;
616 break;
618 case HCI_ACLDATA_PKT:
619 hdev->stat.acl_tx++;
620 break;
622 #ifdef CONFIG_BT_HCIUSB_SCO
623 case HCI_SCODATA_PKT:
624 hdev->stat.sco_tx++;
625 break;
626 #endif
628 default:
629 kfree_skb(skb);
630 return 0;
633 read_lock(&husb->completion_lock);
635 skb_queue_tail(__transmit_q(husb, bt_cb(skb)->pkt_type), skb);
636 hci_usb_tx_wakeup(husb);
638 read_unlock(&husb->completion_lock);
639 return 0;
642 static inline int __recv_frame(struct hci_usb *husb, int type, void *data, int count)
644 BT_DBG("%s type %d data %p count %d", husb->hdev->name, type, data, count);
646 husb->hdev->stat.byte_rx += count;
648 while (count) {
649 struct sk_buff *skb = __reassembly(husb, type);
650 struct { int expect; } *scb;
651 int len = 0;
653 if (!skb) {
654 /* Start of the frame */
656 switch (type) {
657 case HCI_EVENT_PKT:
658 if (count >= HCI_EVENT_HDR_SIZE) {
659 struct hci_event_hdr *h = data;
660 len = HCI_EVENT_HDR_SIZE + h->plen;
661 } else
662 return -EILSEQ;
663 break;
665 case HCI_ACLDATA_PKT:
666 if (count >= HCI_ACL_HDR_SIZE) {
667 struct hci_acl_hdr *h = data;
668 len = HCI_ACL_HDR_SIZE + __le16_to_cpu(h->dlen);
669 } else
670 return -EILSEQ;
671 break;
672 #ifdef CONFIG_BT_HCIUSB_SCO
673 case HCI_SCODATA_PKT:
674 if (count >= HCI_SCO_HDR_SIZE) {
675 struct hci_sco_hdr *h = data;
676 len = HCI_SCO_HDR_SIZE + h->dlen;
677 } else
678 return -EILSEQ;
679 break;
680 #endif
682 BT_DBG("new packet len %d", len);
684 skb = bt_skb_alloc(len, GFP_ATOMIC);
685 if (!skb) {
686 BT_ERR("%s no memory for the packet", husb->hdev->name);
687 return -ENOMEM;
689 skb->dev = (void *) husb->hdev;
690 bt_cb(skb)->pkt_type = type;
692 __reassembly(husb, type) = skb;
694 scb = (void *) skb->cb;
695 scb->expect = len;
696 } else {
697 /* Continuation */
698 scb = (void *) skb->cb;
699 len = scb->expect;
702 len = min(len, count);
704 memcpy(skb_put(skb, len), data, len);
706 scb->expect -= len;
707 if (!scb->expect) {
708 /* Complete frame */
709 __reassembly(husb, type) = NULL;
710 bt_cb(skb)->pkt_type = type;
711 hci_recv_frame(skb);
714 count -= len; data += len;
716 return 0;
719 static void hci_usb_rx_complete(struct urb *urb, struct pt_regs *regs)
721 struct _urb *_urb = container_of(urb, struct _urb, urb);
722 struct hci_usb *husb = (void *) urb->context;
723 struct hci_dev *hdev = husb->hdev;
724 int err, count = urb->actual_length;
726 BT_DBG("%s urb %p type %d status %d count %d flags %x", hdev->name, urb,
727 _urb->type, urb->status, count, urb->transfer_flags);
729 read_lock(&husb->completion_lock);
731 if (!test_bit(HCI_RUNNING, &hdev->flags))
732 goto unlock;
734 if (urb->status || !count)
735 goto resubmit;
737 if (_urb->type == HCI_SCODATA_PKT) {
738 #ifdef CONFIG_BT_HCIUSB_SCO
739 int i;
740 for (i=0; i < urb->number_of_packets; i++) {
741 BT_DBG("desc %d status %d offset %d len %d", i,
742 urb->iso_frame_desc[i].status,
743 urb->iso_frame_desc[i].offset,
744 urb->iso_frame_desc[i].actual_length);
746 if (!urb->iso_frame_desc[i].status)
747 __recv_frame(husb, _urb->type,
748 urb->transfer_buffer + urb->iso_frame_desc[i].offset,
749 urb->iso_frame_desc[i].actual_length);
751 #else
753 #endif
754 } else {
755 err = __recv_frame(husb, _urb->type, urb->transfer_buffer, count);
756 if (err < 0) {
757 BT_ERR("%s corrupted packet: type %d count %d",
758 husb->hdev->name, _urb->type, count);
759 hdev->stat.err_rx++;
763 resubmit:
764 urb->dev = husb->udev;
765 err = usb_submit_urb(urb, GFP_ATOMIC);
766 BT_DBG("%s urb %p type %d resubmit status %d", hdev->name, urb,
767 _urb->type, err);
769 unlock:
770 read_unlock(&husb->completion_lock);
773 static void hci_usb_tx_complete(struct urb *urb, struct pt_regs *regs)
775 struct _urb *_urb = container_of(urb, struct _urb, urb);
776 struct hci_usb *husb = (void *) urb->context;
777 struct hci_dev *hdev = husb->hdev;
779 BT_DBG("%s urb %p status %d flags %x", hdev->name, urb,
780 urb->status, urb->transfer_flags);
782 atomic_dec(__pending_tx(husb, _urb->type));
784 urb->transfer_buffer = NULL;
785 kfree_skb((struct sk_buff *) _urb->priv);
787 if (!test_bit(HCI_RUNNING, &hdev->flags))
788 return;
790 if (!urb->status)
791 hdev->stat.byte_tx += urb->transfer_buffer_length;
792 else
793 hdev->stat.err_tx++;
795 read_lock(&husb->completion_lock);
797 _urb_unlink(_urb);
798 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
800 hci_usb_tx_wakeup(husb);
802 read_unlock(&husb->completion_lock);
805 static void hci_usb_destruct(struct hci_dev *hdev)
807 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
809 BT_DBG("%s", hdev->name);
811 kfree(husb);
814 static void hci_usb_notify(struct hci_dev *hdev, unsigned int evt)
816 BT_DBG("%s evt %d", hdev->name, evt);
819 static int hci_usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
821 struct usb_device *udev = interface_to_usbdev(intf);
822 struct usb_host_endpoint *bulk_out_ep = NULL;
823 struct usb_host_endpoint *bulk_in_ep = NULL;
824 struct usb_host_endpoint *intr_in_ep = NULL;
825 struct usb_host_endpoint *ep;
826 struct usb_host_interface *uif;
827 struct usb_interface *isoc_iface;
828 struct hci_usb *husb;
829 struct hci_dev *hdev;
830 int i, e, size, isoc_ifnum, isoc_alts;
832 BT_DBG("udev %p intf %p", udev, intf);
834 if (!id->driver_info) {
835 const struct usb_device_id *match;
836 match = usb_match_id(intf, blacklist_ids);
837 if (match)
838 id = match;
841 if (ignore || id->driver_info & HCI_IGNORE)
842 return -ENODEV;
844 if (ignore_csr && id->driver_info & HCI_CSR)
845 return -ENODEV;
847 if (ignore_sniffer && id->driver_info & HCI_SNIFFER)
848 return -ENODEV;
850 if (intf->cur_altsetting->desc.bInterfaceNumber > 0)
851 return -ENODEV;
853 /* Find endpoints that we need */
854 uif = intf->cur_altsetting;
855 for (e = 0; e < uif->desc.bNumEndpoints; e++) {
856 ep = &uif->endpoint[e];
858 switch (ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
859 case USB_ENDPOINT_XFER_INT:
860 if (ep->desc.bEndpointAddress & USB_DIR_IN)
861 intr_in_ep = ep;
862 break;
864 case USB_ENDPOINT_XFER_BULK:
865 if (ep->desc.bEndpointAddress & USB_DIR_IN)
866 bulk_in_ep = ep;
867 else
868 bulk_out_ep = ep;
869 break;
873 if (!bulk_in_ep || !bulk_out_ep || !intr_in_ep) {
874 BT_DBG("Bulk endpoints not found");
875 goto done;
878 if (!(husb = kmalloc(sizeof(struct hci_usb), GFP_KERNEL))) {
879 BT_ERR("Can't allocate: control structure");
880 goto done;
883 memset(husb, 0, sizeof(struct hci_usb));
885 husb->udev = udev;
886 husb->bulk_out_ep = bulk_out_ep;
887 husb->bulk_in_ep = bulk_in_ep;
888 husb->intr_in_ep = intr_in_ep;
890 if (id->driver_info & HCI_DIGIANSWER)
891 husb->ctrl_req = USB_TYPE_VENDOR;
892 else
893 husb->ctrl_req = USB_TYPE_CLASS;
895 /* Find isochronous endpoints that we can use */
896 size = 0;
897 isoc_iface = NULL;
898 isoc_alts = 0;
899 isoc_ifnum = 1;
901 #ifdef CONFIG_BT_HCIUSB_SCO
902 if (isoc && !(id->driver_info & (HCI_BROKEN_ISOC | HCI_SNIFFER)))
903 isoc_iface = usb_ifnum_to_if(udev, isoc_ifnum);
905 if (isoc_iface) {
906 int a;
907 struct usb_host_endpoint *isoc_out_ep = NULL;
908 struct usb_host_endpoint *isoc_in_ep = NULL;
910 for (a = 0; a < isoc_iface->num_altsetting; a++) {
911 uif = &isoc_iface->altsetting[a];
912 for (e = 0; e < uif->desc.bNumEndpoints; e++) {
913 ep = &uif->endpoint[e];
915 switch (ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
916 case USB_ENDPOINT_XFER_ISOC:
917 if (le16_to_cpu(ep->desc.wMaxPacketSize) < size ||
918 uif->desc.bAlternateSetting != isoc)
919 break;
920 size = le16_to_cpu(ep->desc.wMaxPacketSize);
922 isoc_alts = uif->desc.bAlternateSetting;
924 if (ep->desc.bEndpointAddress & USB_DIR_IN)
925 isoc_in_ep = ep;
926 else
927 isoc_out_ep = ep;
928 break;
933 if (!isoc_in_ep || !isoc_out_ep)
934 BT_DBG("Isoc endpoints not found");
935 else {
936 BT_DBG("isoc ifnum %d alts %d", isoc_ifnum, isoc_alts);
937 if (usb_driver_claim_interface(&hci_usb_driver, isoc_iface, husb) != 0)
938 BT_ERR("Can't claim isoc interface");
939 else if (usb_set_interface(udev, isoc_ifnum, isoc_alts)) {
940 BT_ERR("Can't set isoc interface settings");
941 husb->isoc_iface = isoc_iface;
942 usb_driver_release_interface(&hci_usb_driver, isoc_iface);
943 husb->isoc_iface = NULL;
944 } else {
945 husb->isoc_iface = isoc_iface;
946 husb->isoc_in_ep = isoc_in_ep;
947 husb->isoc_out_ep = isoc_out_ep;
951 #endif
953 rwlock_init(&husb->completion_lock);
955 for (i = 0; i < 4; i++) {
956 skb_queue_head_init(&husb->transmit_q[i]);
957 _urb_queue_init(&husb->pending_q[i]);
958 _urb_queue_init(&husb->completed_q[i]);
961 /* Initialize and register HCI device */
962 hdev = hci_alloc_dev();
963 if (!hdev) {
964 BT_ERR("Can't allocate HCI device");
965 goto probe_error;
968 husb->hdev = hdev;
970 hdev->type = HCI_USB;
971 hdev->driver_data = husb;
972 SET_HCIDEV_DEV(hdev, &intf->dev);
974 hdev->open = hci_usb_open;
975 hdev->close = hci_usb_close;
976 hdev->flush = hci_usb_flush;
977 hdev->send = hci_usb_send_frame;
978 hdev->destruct = hci_usb_destruct;
979 hdev->notify = hci_usb_notify;
981 hdev->owner = THIS_MODULE;
983 if (reset || id->driver_info & HCI_RESET)
984 set_bit(HCI_QUIRK_RESET_ON_INIT, &hdev->quirks);
986 if (id->driver_info & HCI_SNIFFER) {
987 if (le16_to_cpu(udev->descriptor.bcdDevice) > 0x997)
988 set_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks);
991 if (id->driver_info & HCI_BCM92035) {
992 unsigned char cmd[] = { 0x3b, 0xfc, 0x01, 0x00 };
993 struct sk_buff *skb;
995 skb = bt_skb_alloc(sizeof(cmd), GFP_KERNEL);
996 if (skb) {
997 memcpy(skb_put(skb, sizeof(cmd)), cmd, sizeof(cmd));
998 skb_queue_tail(&hdev->driver_init, skb);
1002 if (hci_register_dev(hdev) < 0) {
1003 BT_ERR("Can't register HCI device");
1004 hci_free_dev(hdev);
1005 goto probe_error;
1008 usb_set_intfdata(intf, husb);
1009 return 0;
1011 probe_error:
1012 if (husb->isoc_iface)
1013 usb_driver_release_interface(&hci_usb_driver, husb->isoc_iface);
1014 kfree(husb);
1016 done:
1017 return -EIO;
1020 static void hci_usb_disconnect(struct usb_interface *intf)
1022 struct hci_usb *husb = usb_get_intfdata(intf);
1023 struct hci_dev *hdev;
1025 if (!husb || intf == husb->isoc_iface)
1026 return;
1028 usb_set_intfdata(intf, NULL);
1029 hdev = husb->hdev;
1031 BT_DBG("%s", hdev->name);
1033 hci_usb_close(hdev);
1035 if (husb->isoc_iface)
1036 usb_driver_release_interface(&hci_usb_driver, husb->isoc_iface);
1038 if (hci_unregister_dev(hdev) < 0)
1039 BT_ERR("Can't unregister HCI device %s", hdev->name);
1041 hci_free_dev(hdev);
1044 static struct usb_driver hci_usb_driver = {
1045 .owner = THIS_MODULE,
1046 .name = "hci_usb",
1047 .probe = hci_usb_probe,
1048 .disconnect = hci_usb_disconnect,
1049 .id_table = bluetooth_ids,
1052 static int __init hci_usb_init(void)
1054 int err;
1056 BT_INFO("HCI USB driver ver %s", VERSION);
1058 if ((err = usb_register(&hci_usb_driver)) < 0)
1059 BT_ERR("Failed to register HCI USB driver");
1061 return err;
1064 static void __exit hci_usb_exit(void)
1066 usb_deregister(&hci_usb_driver);
1069 module_init(hci_usb_init);
1070 module_exit(hci_usb_exit);
1072 module_param(ignore, bool, 0644);
1073 MODULE_PARM_DESC(ignore, "Ignore devices from the matching table");
1075 module_param(ignore_csr, bool, 0644);
1076 MODULE_PARM_DESC(ignore_csr, "Ignore devices with id 0a12:0001");
1078 module_param(ignore_sniffer, bool, 0644);
1079 MODULE_PARM_DESC(ignore_sniffer, "Ignore devices with id 0a12:0002");
1081 module_param(reset, bool, 0644);
1082 MODULE_PARM_DESC(reset, "Send HCI reset command on initialization");
1084 #ifdef CONFIG_BT_HCIUSB_SCO
1085 module_param(isoc, int, 0644);
1086 MODULE_PARM_DESC(isoc, "Set isochronous transfers for SCO over HCI support");
1087 #endif
1089 MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>, Marcel Holtmann <marcel@holtmann.org>");
1090 MODULE_DESCRIPTION("Bluetooth HCI USB driver ver " VERSION);
1091 MODULE_VERSION(VERSION);
1092 MODULE_LICENSE("GPL");