]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/blob - drivers/bluetooth/hci_usb.c
[Bluetooth] Correct SCO buffer size on request
[mirror_ubuntu-zesty-kernel.git] / drivers / bluetooth / hci_usb.c
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>
5
6 Copyright (C) 2003 Maxim Krasnyansky <maxk@qualcomm.com>
7
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;
11
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.
20
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.
24 */
25
26 /*
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>
31 *
32 */
33
34 #include <linux/module.h>
35
36 #include <linux/kernel.h>
37 #include <linux/init.h>
38 #include <linux/sched.h>
39 #include <linux/unistd.h>
40 #include <linux/types.h>
41 #include <linux/interrupt.h>
42 #include <linux/moduleparam.h>
43
44 #include <linux/slab.h>
45 #include <linux/errno.h>
46 #include <linux/string.h>
47 #include <linux/skbuff.h>
48
49 #include <linux/usb.h>
50
51 #include <net/bluetooth/bluetooth.h>
52 #include <net/bluetooth/hci_core.h>
53
54 #include "hci_usb.h"
55
56 #ifndef CONFIG_BT_HCIUSB_DEBUG
57 #undef BT_DBG
58 #define BT_DBG(D...)
59 #endif
60
61 #ifndef CONFIG_BT_HCIUSB_ZERO_PACKET
62 #undef URB_ZERO_PACKET
63 #define URB_ZERO_PACKET 0
64 #endif
65
66 static int ignore = 0;
67 static int ignore_dga = 0;
68 static int ignore_csr = 0;
69 static int ignore_sniffer = 0;
70 static int reset = 0;
71
72 #ifdef CONFIG_BT_HCIUSB_SCO
73 static int isoc = 2;
74 #endif
75
76 #define VERSION "2.9"
77
78 static struct usb_driver hci_usb_driver;
79
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) },
83
84 /* AVM BlueFRITZ! USB v2.0 */
85 { USB_DEVICE(0x057c, 0x3800) },
86
87 /* Bluetooth Ultraport Module from IBM */
88 { USB_DEVICE(0x04bf, 0x030a) },
89
90 /* ALPS Modules with non-standard id */
91 { USB_DEVICE(0x044e, 0x3001) },
92 { USB_DEVICE(0x044e, 0x3002) },
93
94 /* Ericsson with non-standard id */
95 { USB_DEVICE(0x0bdb, 0x1002) },
96
97 { } /* Terminating entry */
98 };
99
100 MODULE_DEVICE_TABLE (usb, bluetooth_ids);
101
102 static struct usb_device_id blacklist_ids[] = {
103 /* CSR BlueCore devices */
104 { USB_DEVICE(0x0a12, 0x0001), .driver_info = HCI_CSR },
105
106 /* Broadcom BCM2033 without firmware */
107 { USB_DEVICE(0x0a5c, 0x2033), .driver_info = HCI_IGNORE },
108
109 /* Broadcom BCM2035 */
110 { USB_DEVICE(0x0a5c, 0x200a), .driver_info = HCI_RESET | HCI_BROKEN_ISOC },
111 { USB_DEVICE(0x0a5c, 0x2009), .driver_info = HCI_BCM92035 },
112
113 /* Microsoft Wireless Transceiver for Bluetooth 2.0 */
114 { USB_DEVICE(0x045e, 0x009c), .driver_info = HCI_RESET },
115
116 /* Kensington Bluetooth USB adapter */
117 { USB_DEVICE(0x047d, 0x105d), .driver_info = HCI_RESET },
118
119 /* ISSC Bluetooth Adapter v3.1 */
120 { USB_DEVICE(0x1131, 0x1001), .driver_info = HCI_RESET },
121
122 /* RTX Telecom based adapter with buggy SCO support */
123 { USB_DEVICE(0x0400, 0x0807), .driver_info = HCI_BROKEN_ISOC },
124
125 /* Belkin F8T012 */
126 { USB_DEVICE(0x050d, 0x0012), .driver_info = HCI_WRONG_SCO_MTU },
127
128 /* Digianswer devices */
129 { USB_DEVICE(0x08fd, 0x0001), .driver_info = HCI_DIGIANSWER },
130 { USB_DEVICE(0x08fd, 0x0002), .driver_info = HCI_IGNORE },
131
132 /* CSR BlueCore Bluetooth Sniffer */
133 { USB_DEVICE(0x0a12, 0x0002), .driver_info = HCI_SNIFFER },
134
135 /* Frontline ComProbe Bluetooth Sniffer */
136 { USB_DEVICE(0x16d3, 0x0002), .driver_info = HCI_SNIFFER },
137
138 { } /* Terminating entry */
139 };
140
141 static struct _urb *_urb_alloc(int isoc, gfp_t gfp)
142 {
143 struct _urb *_urb = kmalloc(sizeof(struct _urb) +
144 sizeof(struct usb_iso_packet_descriptor) * isoc, gfp);
145 if (_urb) {
146 memset(_urb, 0, sizeof(*_urb));
147 usb_init_urb(&_urb->urb);
148 }
149 return _urb;
150 }
151
152 static struct _urb *_urb_dequeue(struct _urb_queue *q)
153 {
154 struct _urb *_urb = NULL;
155 unsigned long flags;
156 spin_lock_irqsave(&q->lock, flags);
157 {
158 struct list_head *head = &q->head;
159 struct list_head *next = head->next;
160 if (next != head) {
161 _urb = list_entry(next, struct _urb, list);
162 list_del(next); _urb->queue = NULL;
163 }
164 }
165 spin_unlock_irqrestore(&q->lock, flags);
166 return _urb;
167 }
168
169 static void hci_usb_rx_complete(struct urb *urb, struct pt_regs *regs);
170 static void hci_usb_tx_complete(struct urb *urb, struct pt_regs *regs);
171
172 #define __pending_tx(husb, type) (&husb->pending_tx[type-1])
173 #define __pending_q(husb, type) (&husb->pending_q[type-1])
174 #define __completed_q(husb, type) (&husb->completed_q[type-1])
175 #define __transmit_q(husb, type) (&husb->transmit_q[type-1])
176 #define __reassembly(husb, type) (husb->reassembly[type-1])
177
178 static inline struct _urb *__get_completed(struct hci_usb *husb, int type)
179 {
180 return _urb_dequeue(__completed_q(husb, type));
181 }
182
183 #ifdef CONFIG_BT_HCIUSB_SCO
184 static void __fill_isoc_desc(struct urb *urb, int len, int mtu)
185 {
186 int offset = 0, i;
187
188 BT_DBG("len %d mtu %d", len, mtu);
189
190 for (i=0; i < HCI_MAX_ISOC_FRAMES && len >= mtu; i++, offset += mtu, len -= mtu) {
191 urb->iso_frame_desc[i].offset = offset;
192 urb->iso_frame_desc[i].length = mtu;
193 BT_DBG("desc %d offset %d len %d", i, offset, mtu);
194 }
195 if (len && i < HCI_MAX_ISOC_FRAMES) {
196 urb->iso_frame_desc[i].offset = offset;
197 urb->iso_frame_desc[i].length = len;
198 BT_DBG("desc %d offset %d len %d", i, offset, len);
199 i++;
200 }
201 urb->number_of_packets = i;
202 }
203 #endif
204
205 static int hci_usb_intr_rx_submit(struct hci_usb *husb)
206 {
207 struct _urb *_urb;
208 struct urb *urb;
209 int err, pipe, interval, size;
210 void *buf;
211
212 BT_DBG("%s", husb->hdev->name);
213
214 size = le16_to_cpu(husb->intr_in_ep->desc.wMaxPacketSize);
215
216 buf = kmalloc(size, GFP_ATOMIC);
217 if (!buf)
218 return -ENOMEM;
219
220 _urb = _urb_alloc(0, GFP_ATOMIC);
221 if (!_urb) {
222 kfree(buf);
223 return -ENOMEM;
224 }
225 _urb->type = HCI_EVENT_PKT;
226 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
227
228 urb = &_urb->urb;
229 pipe = usb_rcvintpipe(husb->udev, husb->intr_in_ep->desc.bEndpointAddress);
230 interval = husb->intr_in_ep->desc.bInterval;
231 usb_fill_int_urb(urb, husb->udev, pipe, buf, size, hci_usb_rx_complete, husb, interval);
232
233 err = usb_submit_urb(urb, GFP_ATOMIC);
234 if (err) {
235 BT_ERR("%s intr rx submit failed urb %p err %d",
236 husb->hdev->name, urb, err);
237 _urb_unlink(_urb);
238 _urb_free(_urb);
239 kfree(buf);
240 }
241 return err;
242 }
243
244 static int hci_usb_bulk_rx_submit(struct hci_usb *husb)
245 {
246 struct _urb *_urb;
247 struct urb *urb;
248 int err, pipe, size = HCI_MAX_FRAME_SIZE;
249 void *buf;
250
251 buf = kmalloc(size, GFP_ATOMIC);
252 if (!buf)
253 return -ENOMEM;
254
255 _urb = _urb_alloc(0, GFP_ATOMIC);
256 if (!_urb) {
257 kfree(buf);
258 return -ENOMEM;
259 }
260 _urb->type = HCI_ACLDATA_PKT;
261 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
262
263 urb = &_urb->urb;
264 pipe = usb_rcvbulkpipe(husb->udev, husb->bulk_in_ep->desc.bEndpointAddress);
265 usb_fill_bulk_urb(urb, husb->udev, pipe, buf, size, hci_usb_rx_complete, husb);
266 urb->transfer_flags = 0;
267
268 BT_DBG("%s urb %p", husb->hdev->name, urb);
269
270 err = usb_submit_urb(urb, GFP_ATOMIC);
271 if (err) {
272 BT_ERR("%s bulk rx submit failed urb %p err %d",
273 husb->hdev->name, urb, err);
274 _urb_unlink(_urb);
275 _urb_free(_urb);
276 kfree(buf);
277 }
278 return err;
279 }
280
281 #ifdef CONFIG_BT_HCIUSB_SCO
282 static int hci_usb_isoc_rx_submit(struct hci_usb *husb)
283 {
284 struct _urb *_urb;
285 struct urb *urb;
286 int err, mtu, size;
287 void *buf;
288
289 mtu = le16_to_cpu(husb->isoc_in_ep->desc.wMaxPacketSize);
290 size = mtu * HCI_MAX_ISOC_FRAMES;
291
292 buf = kmalloc(size, GFP_ATOMIC);
293 if (!buf)
294 return -ENOMEM;
295
296 _urb = _urb_alloc(HCI_MAX_ISOC_FRAMES, GFP_ATOMIC);
297 if (!_urb) {
298 kfree(buf);
299 return -ENOMEM;
300 }
301 _urb->type = HCI_SCODATA_PKT;
302 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
303
304 urb = &_urb->urb;
305
306 urb->context = husb;
307 urb->dev = husb->udev;
308 urb->pipe = usb_rcvisocpipe(husb->udev, husb->isoc_in_ep->desc.bEndpointAddress);
309 urb->complete = hci_usb_rx_complete;
310
311 urb->interval = husb->isoc_in_ep->desc.bInterval;
312
313 urb->transfer_buffer_length = size;
314 urb->transfer_buffer = buf;
315 urb->transfer_flags = URB_ISO_ASAP;
316
317 __fill_isoc_desc(urb, size, mtu);
318
319 BT_DBG("%s urb %p", husb->hdev->name, urb);
320
321 err = usb_submit_urb(urb, GFP_ATOMIC);
322 if (err) {
323 BT_ERR("%s isoc rx submit failed urb %p err %d",
324 husb->hdev->name, urb, err);
325 _urb_unlink(_urb);
326 _urb_free(_urb);
327 kfree(buf);
328 }
329 return err;
330 }
331 #endif
332
333 /* Initialize device */
334 static int hci_usb_open(struct hci_dev *hdev)
335 {
336 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
337 int i, err;
338 unsigned long flags;
339
340 BT_DBG("%s", hdev->name);
341
342 if (test_and_set_bit(HCI_RUNNING, &hdev->flags))
343 return 0;
344
345 write_lock_irqsave(&husb->completion_lock, flags);
346
347 err = hci_usb_intr_rx_submit(husb);
348 if (!err) {
349 for (i = 0; i < HCI_MAX_BULK_RX; i++)
350 hci_usb_bulk_rx_submit(husb);
351
352 #ifdef CONFIG_BT_HCIUSB_SCO
353 if (husb->isoc_iface)
354 for (i = 0; i < HCI_MAX_ISOC_RX; i++)
355 hci_usb_isoc_rx_submit(husb);
356 #endif
357 } else {
358 clear_bit(HCI_RUNNING, &hdev->flags);
359 }
360
361 write_unlock_irqrestore(&husb->completion_lock, flags);
362 return err;
363 }
364
365 /* Reset device */
366 static int hci_usb_flush(struct hci_dev *hdev)
367 {
368 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
369 int i;
370
371 BT_DBG("%s", hdev->name);
372
373 for (i = 0; i < 4; i++)
374 skb_queue_purge(&husb->transmit_q[i]);
375 return 0;
376 }
377
378 static void hci_usb_unlink_urbs(struct hci_usb *husb)
379 {
380 int i;
381
382 BT_DBG("%s", husb->hdev->name);
383
384 for (i = 0; i < 4; i++) {
385 struct _urb *_urb;
386 struct urb *urb;
387
388 /* Kill pending requests */
389 while ((_urb = _urb_dequeue(&husb->pending_q[i]))) {
390 urb = &_urb->urb;
391 BT_DBG("%s unlinking _urb %p type %d urb %p",
392 husb->hdev->name, _urb, _urb->type, urb);
393 usb_kill_urb(urb);
394 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
395 }
396
397 /* Release completed requests */
398 while ((_urb = _urb_dequeue(&husb->completed_q[i]))) {
399 urb = &_urb->urb;
400 BT_DBG("%s freeing _urb %p type %d urb %p",
401 husb->hdev->name, _urb, _urb->type, urb);
402 kfree(urb->setup_packet);
403 kfree(urb->transfer_buffer);
404 _urb_free(_urb);
405 }
406
407 /* Release reassembly buffers */
408 if (husb->reassembly[i]) {
409 kfree_skb(husb->reassembly[i]);
410 husb->reassembly[i] = NULL;
411 }
412 }
413 }
414
415 /* Close device */
416 static int hci_usb_close(struct hci_dev *hdev)
417 {
418 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
419 unsigned long flags;
420
421 if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags))
422 return 0;
423
424 BT_DBG("%s", hdev->name);
425
426 /* Synchronize with completion handlers */
427 write_lock_irqsave(&husb->completion_lock, flags);
428 write_unlock_irqrestore(&husb->completion_lock, flags);
429
430 hci_usb_unlink_urbs(husb);
431 hci_usb_flush(hdev);
432 return 0;
433 }
434
435 static int __tx_submit(struct hci_usb *husb, struct _urb *_urb)
436 {
437 struct urb *urb = &_urb->urb;
438 int err;
439
440 BT_DBG("%s urb %p type %d", husb->hdev->name, urb, _urb->type);
441
442 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
443 err = usb_submit_urb(urb, GFP_ATOMIC);
444 if (err) {
445 BT_ERR("%s tx submit failed urb %p type %d err %d",
446 husb->hdev->name, urb, _urb->type, err);
447 _urb_unlink(_urb);
448 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
449 } else
450 atomic_inc(__pending_tx(husb, _urb->type));
451
452 return err;
453 }
454
455 static inline int hci_usb_send_ctrl(struct hci_usb *husb, struct sk_buff *skb)
456 {
457 struct _urb *_urb = __get_completed(husb, bt_cb(skb)->pkt_type);
458 struct usb_ctrlrequest *dr;
459 struct urb *urb;
460
461 if (!_urb) {
462 _urb = _urb_alloc(0, GFP_ATOMIC);
463 if (!_urb)
464 return -ENOMEM;
465 _urb->type = bt_cb(skb)->pkt_type;
466
467 dr = kmalloc(sizeof(*dr), GFP_ATOMIC);
468 if (!dr) {
469 _urb_free(_urb);
470 return -ENOMEM;
471 }
472 } else
473 dr = (void *) _urb->urb.setup_packet;
474
475 dr->bRequestType = husb->ctrl_req;
476 dr->bRequest = 0;
477 dr->wIndex = 0;
478 dr->wValue = 0;
479 dr->wLength = __cpu_to_le16(skb->len);
480
481 urb = &_urb->urb;
482 usb_fill_control_urb(urb, husb->udev, usb_sndctrlpipe(husb->udev, 0),
483 (void *) dr, skb->data, skb->len, hci_usb_tx_complete, husb);
484
485 BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
486
487 _urb->priv = skb;
488 return __tx_submit(husb, _urb);
489 }
490
491 static inline int hci_usb_send_bulk(struct hci_usb *husb, struct sk_buff *skb)
492 {
493 struct _urb *_urb = __get_completed(husb, bt_cb(skb)->pkt_type);
494 struct urb *urb;
495 int pipe;
496
497 if (!_urb) {
498 _urb = _urb_alloc(0, GFP_ATOMIC);
499 if (!_urb)
500 return -ENOMEM;
501 _urb->type = bt_cb(skb)->pkt_type;
502 }
503
504 urb = &_urb->urb;
505 pipe = usb_sndbulkpipe(husb->udev, husb->bulk_out_ep->desc.bEndpointAddress);
506 usb_fill_bulk_urb(urb, husb->udev, pipe, skb->data, skb->len,
507 hci_usb_tx_complete, husb);
508 urb->transfer_flags = URB_ZERO_PACKET;
509
510 BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
511
512 _urb->priv = skb;
513 return __tx_submit(husb, _urb);
514 }
515
516 #ifdef CONFIG_BT_HCIUSB_SCO
517 static inline int hci_usb_send_isoc(struct hci_usb *husb, struct sk_buff *skb)
518 {
519 struct _urb *_urb = __get_completed(husb, bt_cb(skb)->pkt_type);
520 struct urb *urb;
521
522 if (!_urb) {
523 _urb = _urb_alloc(HCI_MAX_ISOC_FRAMES, GFP_ATOMIC);
524 if (!_urb)
525 return -ENOMEM;
526 _urb->type = bt_cb(skb)->pkt_type;
527 }
528
529 BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
530
531 urb = &_urb->urb;
532
533 urb->context = husb;
534 urb->dev = husb->udev;
535 urb->pipe = usb_sndisocpipe(husb->udev, husb->isoc_out_ep->desc.bEndpointAddress);
536 urb->complete = hci_usb_tx_complete;
537 urb->transfer_flags = URB_ISO_ASAP;
538
539 urb->interval = husb->isoc_out_ep->desc.bInterval;
540
541 urb->transfer_buffer = skb->data;
542 urb->transfer_buffer_length = skb->len;
543
544 __fill_isoc_desc(urb, skb->len, le16_to_cpu(husb->isoc_out_ep->desc.wMaxPacketSize));
545
546 _urb->priv = skb;
547 return __tx_submit(husb, _urb);
548 }
549 #endif
550
551 static void hci_usb_tx_process(struct hci_usb *husb)
552 {
553 struct sk_buff_head *q;
554 struct sk_buff *skb;
555
556 BT_DBG("%s", husb->hdev->name);
557
558 do {
559 clear_bit(HCI_USB_TX_WAKEUP, &husb->state);
560
561 /* Process command queue */
562 q = __transmit_q(husb, HCI_COMMAND_PKT);
563 if (!atomic_read(__pending_tx(husb, HCI_COMMAND_PKT)) &&
564 (skb = skb_dequeue(q))) {
565 if (hci_usb_send_ctrl(husb, skb) < 0)
566 skb_queue_head(q, skb);
567 }
568
569 #ifdef CONFIG_BT_HCIUSB_SCO
570 /* Process SCO queue */
571 q = __transmit_q(husb, HCI_SCODATA_PKT);
572 if (atomic_read(__pending_tx(husb, HCI_SCODATA_PKT)) < HCI_MAX_ISOC_TX &&
573 (skb = skb_dequeue(q))) {
574 if (hci_usb_send_isoc(husb, skb) < 0)
575 skb_queue_head(q, skb);
576 }
577 #endif
578
579 /* Process ACL queue */
580 q = __transmit_q(husb, HCI_ACLDATA_PKT);
581 while (atomic_read(__pending_tx(husb, HCI_ACLDATA_PKT)) < HCI_MAX_BULK_TX &&
582 (skb = skb_dequeue(q))) {
583 if (hci_usb_send_bulk(husb, skb) < 0) {
584 skb_queue_head(q, skb);
585 break;
586 }
587 }
588 } while(test_bit(HCI_USB_TX_WAKEUP, &husb->state));
589 }
590
591 static inline void hci_usb_tx_wakeup(struct hci_usb *husb)
592 {
593 /* Serialize TX queue processing to avoid data reordering */
594 if (!test_and_set_bit(HCI_USB_TX_PROCESS, &husb->state)) {
595 hci_usb_tx_process(husb);
596 clear_bit(HCI_USB_TX_PROCESS, &husb->state);
597 } else
598 set_bit(HCI_USB_TX_WAKEUP, &husb->state);
599 }
600
601 /* Send frames from HCI layer */
602 static int hci_usb_send_frame(struct sk_buff *skb)
603 {
604 struct hci_dev *hdev = (struct hci_dev *) skb->dev;
605 struct hci_usb *husb;
606
607 if (!hdev) {
608 BT_ERR("frame for uknown device (hdev=NULL)");
609 return -ENODEV;
610 }
611
612 if (!test_bit(HCI_RUNNING, &hdev->flags))
613 return -EBUSY;
614
615 BT_DBG("%s type %d len %d", hdev->name, bt_cb(skb)->pkt_type, skb->len);
616
617 husb = (struct hci_usb *) hdev->driver_data;
618
619 switch (bt_cb(skb)->pkt_type) {
620 case HCI_COMMAND_PKT:
621 hdev->stat.cmd_tx++;
622 break;
623
624 case HCI_ACLDATA_PKT:
625 hdev->stat.acl_tx++;
626 break;
627
628 #ifdef CONFIG_BT_HCIUSB_SCO
629 case HCI_SCODATA_PKT:
630 hdev->stat.sco_tx++;
631 break;
632 #endif
633
634 default:
635 kfree_skb(skb);
636 return 0;
637 }
638
639 read_lock(&husb->completion_lock);
640
641 skb_queue_tail(__transmit_q(husb, bt_cb(skb)->pkt_type), skb);
642 hci_usb_tx_wakeup(husb);
643
644 read_unlock(&husb->completion_lock);
645 return 0;
646 }
647
648 static inline int __recv_frame(struct hci_usb *husb, int type, void *data, int count)
649 {
650 BT_DBG("%s type %d data %p count %d", husb->hdev->name, type, data, count);
651
652 husb->hdev->stat.byte_rx += count;
653
654 while (count) {
655 struct sk_buff *skb = __reassembly(husb, type);
656 struct { int expect; } *scb;
657 int len = 0;
658
659 if (!skb) {
660 /* Start of the frame */
661
662 switch (type) {
663 case HCI_EVENT_PKT:
664 if (count >= HCI_EVENT_HDR_SIZE) {
665 struct hci_event_hdr *h = data;
666 len = HCI_EVENT_HDR_SIZE + h->plen;
667 } else
668 return -EILSEQ;
669 break;
670
671 case HCI_ACLDATA_PKT:
672 if (count >= HCI_ACL_HDR_SIZE) {
673 struct hci_acl_hdr *h = data;
674 len = HCI_ACL_HDR_SIZE + __le16_to_cpu(h->dlen);
675 } else
676 return -EILSEQ;
677 break;
678 #ifdef CONFIG_BT_HCIUSB_SCO
679 case HCI_SCODATA_PKT:
680 if (count >= HCI_SCO_HDR_SIZE) {
681 struct hci_sco_hdr *h = data;
682 len = HCI_SCO_HDR_SIZE + h->dlen;
683 } else
684 return -EILSEQ;
685 break;
686 #endif
687 }
688 BT_DBG("new packet len %d", len);
689
690 skb = bt_skb_alloc(len, GFP_ATOMIC);
691 if (!skb) {
692 BT_ERR("%s no memory for the packet", husb->hdev->name);
693 return -ENOMEM;
694 }
695 skb->dev = (void *) husb->hdev;
696 bt_cb(skb)->pkt_type = type;
697
698 __reassembly(husb, type) = skb;
699
700 scb = (void *) skb->cb;
701 scb->expect = len;
702 } else {
703 /* Continuation */
704 scb = (void *) skb->cb;
705 len = scb->expect;
706 }
707
708 len = min(len, count);
709
710 memcpy(skb_put(skb, len), data, len);
711
712 scb->expect -= len;
713 if (!scb->expect) {
714 /* Complete frame */
715 __reassembly(husb, type) = NULL;
716 bt_cb(skb)->pkt_type = type;
717 hci_recv_frame(skb);
718 }
719
720 count -= len; data += len;
721 }
722 return 0;
723 }
724
725 static void hci_usb_rx_complete(struct urb *urb, struct pt_regs *regs)
726 {
727 struct _urb *_urb = container_of(urb, struct _urb, urb);
728 struct hci_usb *husb = (void *) urb->context;
729 struct hci_dev *hdev = husb->hdev;
730 int err, count = urb->actual_length;
731
732 BT_DBG("%s urb %p type %d status %d count %d flags %x", hdev->name, urb,
733 _urb->type, urb->status, count, urb->transfer_flags);
734
735 read_lock(&husb->completion_lock);
736
737 if (!test_bit(HCI_RUNNING, &hdev->flags))
738 goto unlock;
739
740 if (urb->status || !count)
741 goto resubmit;
742
743 if (_urb->type == HCI_SCODATA_PKT) {
744 #ifdef CONFIG_BT_HCIUSB_SCO
745 int i;
746 for (i=0; i < urb->number_of_packets; i++) {
747 BT_DBG("desc %d status %d offset %d len %d", i,
748 urb->iso_frame_desc[i].status,
749 urb->iso_frame_desc[i].offset,
750 urb->iso_frame_desc[i].actual_length);
751
752 if (!urb->iso_frame_desc[i].status)
753 __recv_frame(husb, _urb->type,
754 urb->transfer_buffer + urb->iso_frame_desc[i].offset,
755 urb->iso_frame_desc[i].actual_length);
756 }
757 #else
758 ;
759 #endif
760 } else {
761 err = __recv_frame(husb, _urb->type, urb->transfer_buffer, count);
762 if (err < 0) {
763 BT_ERR("%s corrupted packet: type %d count %d",
764 husb->hdev->name, _urb->type, count);
765 hdev->stat.err_rx++;
766 }
767 }
768
769 resubmit:
770 urb->dev = husb->udev;
771 err = usb_submit_urb(urb, GFP_ATOMIC);
772 BT_DBG("%s urb %p type %d resubmit status %d", hdev->name, urb,
773 _urb->type, err);
774
775 unlock:
776 read_unlock(&husb->completion_lock);
777 }
778
779 static void hci_usb_tx_complete(struct urb *urb, struct pt_regs *regs)
780 {
781 struct _urb *_urb = container_of(urb, struct _urb, urb);
782 struct hci_usb *husb = (void *) urb->context;
783 struct hci_dev *hdev = husb->hdev;
784
785 BT_DBG("%s urb %p status %d flags %x", hdev->name, urb,
786 urb->status, urb->transfer_flags);
787
788 atomic_dec(__pending_tx(husb, _urb->type));
789
790 urb->transfer_buffer = NULL;
791 kfree_skb((struct sk_buff *) _urb->priv);
792
793 if (!test_bit(HCI_RUNNING, &hdev->flags))
794 return;
795
796 if (!urb->status)
797 hdev->stat.byte_tx += urb->transfer_buffer_length;
798 else
799 hdev->stat.err_tx++;
800
801 read_lock(&husb->completion_lock);
802
803 _urb_unlink(_urb);
804 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
805
806 hci_usb_tx_wakeup(husb);
807
808 read_unlock(&husb->completion_lock);
809 }
810
811 static void hci_usb_destruct(struct hci_dev *hdev)
812 {
813 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
814
815 BT_DBG("%s", hdev->name);
816
817 kfree(husb);
818 }
819
820 static void hci_usb_notify(struct hci_dev *hdev, unsigned int evt)
821 {
822 BT_DBG("%s evt %d", hdev->name, evt);
823 }
824
825 static int hci_usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
826 {
827 struct usb_device *udev = interface_to_usbdev(intf);
828 struct usb_host_endpoint *bulk_out_ep = NULL;
829 struct usb_host_endpoint *bulk_in_ep = NULL;
830 struct usb_host_endpoint *intr_in_ep = NULL;
831 struct usb_host_endpoint *ep;
832 struct usb_host_interface *uif;
833 struct usb_interface *isoc_iface;
834 struct hci_usb *husb;
835 struct hci_dev *hdev;
836 int i, e, size, isoc_ifnum, isoc_alts;
837
838 BT_DBG("udev %p intf %p", udev, intf);
839
840 if (!id->driver_info) {
841 const struct usb_device_id *match;
842 match = usb_match_id(intf, blacklist_ids);
843 if (match)
844 id = match;
845 }
846
847 if (ignore || id->driver_info & HCI_IGNORE)
848 return -ENODEV;
849
850 if (ignore_dga && id->driver_info & HCI_DIGIANSWER)
851 return -ENODEV;
852
853 if (ignore_csr && id->driver_info & HCI_CSR)
854 return -ENODEV;
855
856 if (ignore_sniffer && id->driver_info & HCI_SNIFFER)
857 return -ENODEV;
858
859 if (intf->cur_altsetting->desc.bInterfaceNumber > 0)
860 return -ENODEV;
861
862 /* Find endpoints that we need */
863 uif = intf->cur_altsetting;
864 for (e = 0; e < uif->desc.bNumEndpoints; e++) {
865 ep = &uif->endpoint[e];
866
867 switch (ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
868 case USB_ENDPOINT_XFER_INT:
869 if (ep->desc.bEndpointAddress & USB_DIR_IN)
870 intr_in_ep = ep;
871 break;
872
873 case USB_ENDPOINT_XFER_BULK:
874 if (ep->desc.bEndpointAddress & USB_DIR_IN)
875 bulk_in_ep = ep;
876 else
877 bulk_out_ep = ep;
878 break;
879 }
880 }
881
882 if (!bulk_in_ep || !bulk_out_ep || !intr_in_ep) {
883 BT_DBG("Bulk endpoints not found");
884 goto done;
885 }
886
887 if (!(husb = kzalloc(sizeof(struct hci_usb), GFP_KERNEL))) {
888 BT_ERR("Can't allocate: control structure");
889 goto done;
890 }
891
892 husb->udev = udev;
893 husb->bulk_out_ep = bulk_out_ep;
894 husb->bulk_in_ep = bulk_in_ep;
895 husb->intr_in_ep = intr_in_ep;
896
897 if (id->driver_info & HCI_DIGIANSWER)
898 husb->ctrl_req = USB_TYPE_VENDOR;
899 else
900 husb->ctrl_req = USB_TYPE_CLASS;
901
902 /* Find isochronous endpoints that we can use */
903 size = 0;
904 isoc_iface = NULL;
905 isoc_alts = 0;
906 isoc_ifnum = 1;
907
908 #ifdef CONFIG_BT_HCIUSB_SCO
909 if (isoc && !(id->driver_info & (HCI_BROKEN_ISOC | HCI_SNIFFER)))
910 isoc_iface = usb_ifnum_to_if(udev, isoc_ifnum);
911
912 if (isoc_iface) {
913 int a;
914 struct usb_host_endpoint *isoc_out_ep = NULL;
915 struct usb_host_endpoint *isoc_in_ep = NULL;
916
917 for (a = 0; a < isoc_iface->num_altsetting; a++) {
918 uif = &isoc_iface->altsetting[a];
919 for (e = 0; e < uif->desc.bNumEndpoints; e++) {
920 ep = &uif->endpoint[e];
921
922 switch (ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
923 case USB_ENDPOINT_XFER_ISOC:
924 if (le16_to_cpu(ep->desc.wMaxPacketSize) < size ||
925 uif->desc.bAlternateSetting != isoc)
926 break;
927 size = le16_to_cpu(ep->desc.wMaxPacketSize);
928
929 isoc_alts = uif->desc.bAlternateSetting;
930
931 if (ep->desc.bEndpointAddress & USB_DIR_IN)
932 isoc_in_ep = ep;
933 else
934 isoc_out_ep = ep;
935 break;
936 }
937 }
938 }
939
940 if (!isoc_in_ep || !isoc_out_ep)
941 BT_DBG("Isoc endpoints not found");
942 else {
943 BT_DBG("isoc ifnum %d alts %d", isoc_ifnum, isoc_alts);
944 if (usb_driver_claim_interface(&hci_usb_driver, isoc_iface, husb) != 0)
945 BT_ERR("Can't claim isoc interface");
946 else if (usb_set_interface(udev, isoc_ifnum, isoc_alts)) {
947 BT_ERR("Can't set isoc interface settings");
948 husb->isoc_iface = isoc_iface;
949 usb_driver_release_interface(&hci_usb_driver, isoc_iface);
950 husb->isoc_iface = NULL;
951 } else {
952 husb->isoc_iface = isoc_iface;
953 husb->isoc_in_ep = isoc_in_ep;
954 husb->isoc_out_ep = isoc_out_ep;
955 }
956 }
957 }
958 #endif
959
960 rwlock_init(&husb->completion_lock);
961
962 for (i = 0; i < 4; i++) {
963 skb_queue_head_init(&husb->transmit_q[i]);
964 _urb_queue_init(&husb->pending_q[i]);
965 _urb_queue_init(&husb->completed_q[i]);
966 }
967
968 /* Initialize and register HCI device */
969 hdev = hci_alloc_dev();
970 if (!hdev) {
971 BT_ERR("Can't allocate HCI device");
972 goto probe_error;
973 }
974
975 husb->hdev = hdev;
976
977 hdev->type = HCI_USB;
978 hdev->driver_data = husb;
979 SET_HCIDEV_DEV(hdev, &intf->dev);
980
981 hdev->open = hci_usb_open;
982 hdev->close = hci_usb_close;
983 hdev->flush = hci_usb_flush;
984 hdev->send = hci_usb_send_frame;
985 hdev->destruct = hci_usb_destruct;
986 hdev->notify = hci_usb_notify;
987
988 hdev->owner = THIS_MODULE;
989
990 if (reset || id->driver_info & HCI_RESET)
991 set_bit(HCI_QUIRK_RESET_ON_INIT, &hdev->quirks);
992
993 if (id->driver_info & HCI_WRONG_SCO_MTU)
994 set_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks);
995
996 if (id->driver_info & HCI_SNIFFER) {
997 if (le16_to_cpu(udev->descriptor.bcdDevice) > 0x997)
998 set_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks);
999 }
1000
1001 if (id->driver_info & HCI_BCM92035) {
1002 unsigned char cmd[] = { 0x3b, 0xfc, 0x01, 0x00 };
1003 struct sk_buff *skb;
1004
1005 skb = bt_skb_alloc(sizeof(cmd), GFP_KERNEL);
1006 if (skb) {
1007 memcpy(skb_put(skb, sizeof(cmd)), cmd, sizeof(cmd));
1008 skb_queue_tail(&hdev->driver_init, skb);
1009 }
1010 }
1011
1012 if (hci_register_dev(hdev) < 0) {
1013 BT_ERR("Can't register HCI device");
1014 hci_free_dev(hdev);
1015 goto probe_error;
1016 }
1017
1018 usb_set_intfdata(intf, husb);
1019 return 0;
1020
1021 probe_error:
1022 if (husb->isoc_iface)
1023 usb_driver_release_interface(&hci_usb_driver, husb->isoc_iface);
1024 kfree(husb);
1025
1026 done:
1027 return -EIO;
1028 }
1029
1030 static void hci_usb_disconnect(struct usb_interface *intf)
1031 {
1032 struct hci_usb *husb = usb_get_intfdata(intf);
1033 struct hci_dev *hdev;
1034
1035 if (!husb || intf == husb->isoc_iface)
1036 return;
1037
1038 usb_set_intfdata(intf, NULL);
1039 hdev = husb->hdev;
1040
1041 BT_DBG("%s", hdev->name);
1042
1043 hci_usb_close(hdev);
1044
1045 if (husb->isoc_iface)
1046 usb_driver_release_interface(&hci_usb_driver, husb->isoc_iface);
1047
1048 if (hci_unregister_dev(hdev) < 0)
1049 BT_ERR("Can't unregister HCI device %s", hdev->name);
1050
1051 hci_free_dev(hdev);
1052 }
1053
1054 static int hci_usb_suspend(struct usb_interface *intf, pm_message_t message)
1055 {
1056 struct hci_usb *husb = usb_get_intfdata(intf);
1057 struct list_head killed;
1058 unsigned long flags;
1059 int i;
1060
1061 if (!husb || intf == husb->isoc_iface)
1062 return 0;
1063
1064 hci_suspend_dev(husb->hdev);
1065
1066 INIT_LIST_HEAD(&killed);
1067
1068 for (i = 0; i < 4; i++) {
1069 struct _urb_queue *q = &husb->pending_q[i];
1070 struct _urb *_urb, *_tmp;
1071
1072 while ((_urb = _urb_dequeue(q))) {
1073 /* reset queue since _urb_dequeue sets it to NULL */
1074 _urb->queue = q;
1075 usb_kill_urb(&_urb->urb);
1076 list_add(&_urb->list, &killed);
1077 }
1078
1079 spin_lock_irqsave(&q->lock, flags);
1080
1081 list_for_each_entry_safe(_urb, _tmp, &killed, list) {
1082 list_move_tail(&_urb->list, &q->head);
1083 }
1084
1085 spin_unlock_irqrestore(&q->lock, flags);
1086 }
1087
1088 return 0;
1089 }
1090
1091 static int hci_usb_resume(struct usb_interface *intf)
1092 {
1093 struct hci_usb *husb = usb_get_intfdata(intf);
1094 unsigned long flags;
1095 int i, err = 0;
1096
1097 if (!husb || intf == husb->isoc_iface)
1098 return 0;
1099
1100 for (i = 0; i < 4; i++) {
1101 struct _urb_queue *q = &husb->pending_q[i];
1102 struct _urb *_urb;
1103
1104 spin_lock_irqsave(&q->lock, flags);
1105
1106 list_for_each_entry(_urb, &q->head, list) {
1107 err = usb_submit_urb(&_urb->urb, GFP_ATOMIC);
1108 if (err)
1109 break;
1110 }
1111
1112 spin_unlock_irqrestore(&q->lock, flags);
1113
1114 if (err)
1115 return -EIO;
1116 }
1117
1118 hci_resume_dev(husb->hdev);
1119
1120 return 0;
1121 }
1122
1123 static struct usb_driver hci_usb_driver = {
1124 .name = "hci_usb",
1125 .probe = hci_usb_probe,
1126 .disconnect = hci_usb_disconnect,
1127 .suspend = hci_usb_suspend,
1128 .resume = hci_usb_resume,
1129 .id_table = bluetooth_ids,
1130 };
1131
1132 static int __init hci_usb_init(void)
1133 {
1134 int err;
1135
1136 BT_INFO("HCI USB driver ver %s", VERSION);
1137
1138 if ((err = usb_register(&hci_usb_driver)) < 0)
1139 BT_ERR("Failed to register HCI USB driver");
1140
1141 return err;
1142 }
1143
1144 static void __exit hci_usb_exit(void)
1145 {
1146 usb_deregister(&hci_usb_driver);
1147 }
1148
1149 module_init(hci_usb_init);
1150 module_exit(hci_usb_exit);
1151
1152 module_param(ignore, bool, 0644);
1153 MODULE_PARM_DESC(ignore, "Ignore devices from the matching table");
1154
1155 module_param(ignore_dga, bool, 0644);
1156 MODULE_PARM_DESC(ignore_dga, "Ignore devices with id 08fd:0001");
1157
1158 module_param(ignore_csr, bool, 0644);
1159 MODULE_PARM_DESC(ignore_csr, "Ignore devices with id 0a12:0001");
1160
1161 module_param(ignore_sniffer, bool, 0644);
1162 MODULE_PARM_DESC(ignore_sniffer, "Ignore devices with id 0a12:0002");
1163
1164 module_param(reset, bool, 0644);
1165 MODULE_PARM_DESC(reset, "Send HCI reset command on initialization");
1166
1167 #ifdef CONFIG_BT_HCIUSB_SCO
1168 module_param(isoc, int, 0644);
1169 MODULE_PARM_DESC(isoc, "Set isochronous transfers for SCO over HCI support");
1170 #endif
1171
1172 MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>, Marcel Holtmann <marcel@holtmann.org>");
1173 MODULE_DESCRIPTION("Bluetooth HCI USB driver ver " VERSION);
1174 MODULE_VERSION(VERSION);
1175 MODULE_LICENSE("GPL");