Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/drivers/bluetooth/btusb.c
15109 views
1
/*
2
*
3
* Generic Bluetooth USB driver
4
*
5
* Copyright (C) 2005-2008 Marcel Holtmann <[email protected]>
6
*
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 as published by
10
* the Free Software Foundation; either version 2 of the License, or
11
* (at your option) any later version.
12
*
13
* This program is distributed in the hope that it will be useful,
14
* but WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
* GNU General Public License for more details.
17
*
18
* You should have received a copy of the GNU General Public License
19
* along with this program; if not, write to the Free Software
20
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21
*
22
*/
23
24
#include <linux/kernel.h>
25
#include <linux/module.h>
26
#include <linux/init.h>
27
#include <linux/slab.h>
28
#include <linux/types.h>
29
#include <linux/sched.h>
30
#include <linux/errno.h>
31
#include <linux/skbuff.h>
32
33
#include <linux/usb.h>
34
35
#include <net/bluetooth/bluetooth.h>
36
#include <net/bluetooth/hci_core.h>
37
38
#define VERSION "0.6"
39
40
static int ignore_dga;
41
static int ignore_csr;
42
static int ignore_sniffer;
43
static int disable_scofix;
44
static int force_scofix;
45
46
static int reset = 1;
47
48
static struct usb_driver btusb_driver;
49
50
#define BTUSB_IGNORE 0x01
51
#define BTUSB_DIGIANSWER 0x02
52
#define BTUSB_CSR 0x04
53
#define BTUSB_SNIFFER 0x08
54
#define BTUSB_BCM92035 0x10
55
#define BTUSB_BROKEN_ISOC 0x20
56
#define BTUSB_WRONG_SCO_MTU 0x40
57
58
static struct usb_device_id btusb_table[] = {
59
/* Generic Bluetooth USB device */
60
{ USB_DEVICE_INFO(0xe0, 0x01, 0x01) },
61
62
/* Apple MacBookPro 7,1 */
63
{ USB_DEVICE(0x05ac, 0x8213) },
64
65
/* Apple iMac11,1 */
66
{ USB_DEVICE(0x05ac, 0x8215) },
67
68
/* Apple MacBookPro6,2 */
69
{ USB_DEVICE(0x05ac, 0x8218) },
70
71
/* Apple MacBookAir3,1, MacBookAir3,2 */
72
{ USB_DEVICE(0x05ac, 0x821b) },
73
74
/* Apple MacBookPro8,2 */
75
{ USB_DEVICE(0x05ac, 0x821a) },
76
77
/* AVM BlueFRITZ! USB v2.0 */
78
{ USB_DEVICE(0x057c, 0x3800) },
79
80
/* Bluetooth Ultraport Module from IBM */
81
{ USB_DEVICE(0x04bf, 0x030a) },
82
83
/* ALPS Modules with non-standard id */
84
{ USB_DEVICE(0x044e, 0x3001) },
85
{ USB_DEVICE(0x044e, 0x3002) },
86
87
/* Ericsson with non-standard id */
88
{ USB_DEVICE(0x0bdb, 0x1002) },
89
90
/* Canyon CN-BTU1 with HID interfaces */
91
{ USB_DEVICE(0x0c10, 0x0000) },
92
93
{ } /* Terminating entry */
94
};
95
96
MODULE_DEVICE_TABLE(usb, btusb_table);
97
98
static struct usb_device_id blacklist_table[] = {
99
/* CSR BlueCore devices */
100
{ USB_DEVICE(0x0a12, 0x0001), .driver_info = BTUSB_CSR },
101
102
/* Broadcom BCM2033 without firmware */
103
{ USB_DEVICE(0x0a5c, 0x2033), .driver_info = BTUSB_IGNORE },
104
105
/* Atheros 3011 with sflash firmware */
106
{ USB_DEVICE(0x0cf3, 0x3002), .driver_info = BTUSB_IGNORE },
107
{ USB_DEVICE(0x13d3, 0x3304), .driver_info = BTUSB_IGNORE },
108
109
/* Atheros AR9285 Malbec with sflash firmware */
110
{ USB_DEVICE(0x03f0, 0x311d), .driver_info = BTUSB_IGNORE },
111
112
/* Atheros 3012 with sflash firmware */
113
{ USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_IGNORE },
114
115
/* Atheros AR5BBU12 with sflash firmware */
116
{ USB_DEVICE(0x0489, 0xe02c), .driver_info = BTUSB_IGNORE },
117
118
/* Broadcom BCM2035 */
119
{ USB_DEVICE(0x0a5c, 0x2035), .driver_info = BTUSB_WRONG_SCO_MTU },
120
{ USB_DEVICE(0x0a5c, 0x200a), .driver_info = BTUSB_WRONG_SCO_MTU },
121
{ USB_DEVICE(0x0a5c, 0x2009), .driver_info = BTUSB_BCM92035 },
122
123
/* Broadcom BCM2045 */
124
{ USB_DEVICE(0x0a5c, 0x2039), .driver_info = BTUSB_WRONG_SCO_MTU },
125
{ USB_DEVICE(0x0a5c, 0x2101), .driver_info = BTUSB_WRONG_SCO_MTU },
126
127
/* IBM/Lenovo ThinkPad with Broadcom chip */
128
{ USB_DEVICE(0x0a5c, 0x201e), .driver_info = BTUSB_WRONG_SCO_MTU },
129
{ USB_DEVICE(0x0a5c, 0x2110), .driver_info = BTUSB_WRONG_SCO_MTU },
130
131
/* HP laptop with Broadcom chip */
132
{ USB_DEVICE(0x03f0, 0x171d), .driver_info = BTUSB_WRONG_SCO_MTU },
133
134
/* Dell laptop with Broadcom chip */
135
{ USB_DEVICE(0x413c, 0x8126), .driver_info = BTUSB_WRONG_SCO_MTU },
136
137
/* Dell Wireless 370 and 410 devices */
138
{ USB_DEVICE(0x413c, 0x8152), .driver_info = BTUSB_WRONG_SCO_MTU },
139
{ USB_DEVICE(0x413c, 0x8156), .driver_info = BTUSB_WRONG_SCO_MTU },
140
141
/* Belkin F8T012 and F8T013 devices */
142
{ USB_DEVICE(0x050d, 0x0012), .driver_info = BTUSB_WRONG_SCO_MTU },
143
{ USB_DEVICE(0x050d, 0x0013), .driver_info = BTUSB_WRONG_SCO_MTU },
144
145
/* Asus WL-BTD202 device */
146
{ USB_DEVICE(0x0b05, 0x1715), .driver_info = BTUSB_WRONG_SCO_MTU },
147
148
/* Kensington Bluetooth USB adapter */
149
{ USB_DEVICE(0x047d, 0x105e), .driver_info = BTUSB_WRONG_SCO_MTU },
150
151
/* RTX Telecom based adapters with buggy SCO support */
152
{ USB_DEVICE(0x0400, 0x0807), .driver_info = BTUSB_BROKEN_ISOC },
153
{ USB_DEVICE(0x0400, 0x080a), .driver_info = BTUSB_BROKEN_ISOC },
154
155
/* CONWISE Technology based adapters with buggy SCO support */
156
{ USB_DEVICE(0x0e5e, 0x6622), .driver_info = BTUSB_BROKEN_ISOC },
157
158
/* Digianswer devices */
159
{ USB_DEVICE(0x08fd, 0x0001), .driver_info = BTUSB_DIGIANSWER },
160
{ USB_DEVICE(0x08fd, 0x0002), .driver_info = BTUSB_IGNORE },
161
162
/* CSR BlueCore Bluetooth Sniffer */
163
{ USB_DEVICE(0x0a12, 0x0002), .driver_info = BTUSB_SNIFFER },
164
165
/* Frontline ComProbe Bluetooth Sniffer */
166
{ USB_DEVICE(0x16d3, 0x0002), .driver_info = BTUSB_SNIFFER },
167
168
{ } /* Terminating entry */
169
};
170
171
#define BTUSB_MAX_ISOC_FRAMES 10
172
173
#define BTUSB_INTR_RUNNING 0
174
#define BTUSB_BULK_RUNNING 1
175
#define BTUSB_ISOC_RUNNING 2
176
#define BTUSB_SUSPENDING 3
177
#define BTUSB_DID_ISO_RESUME 4
178
179
struct btusb_data {
180
struct hci_dev *hdev;
181
struct usb_device *udev;
182
struct usb_interface *intf;
183
struct usb_interface *isoc;
184
185
spinlock_t lock;
186
187
unsigned long flags;
188
189
struct work_struct work;
190
struct work_struct waker;
191
192
struct usb_anchor tx_anchor;
193
struct usb_anchor intr_anchor;
194
struct usb_anchor bulk_anchor;
195
struct usb_anchor isoc_anchor;
196
struct usb_anchor deferred;
197
int tx_in_flight;
198
spinlock_t txlock;
199
200
struct usb_endpoint_descriptor *intr_ep;
201
struct usb_endpoint_descriptor *bulk_tx_ep;
202
struct usb_endpoint_descriptor *bulk_rx_ep;
203
struct usb_endpoint_descriptor *isoc_tx_ep;
204
struct usb_endpoint_descriptor *isoc_rx_ep;
205
206
__u8 cmdreq_type;
207
208
unsigned int sco_num;
209
int isoc_altsetting;
210
int suspend_count;
211
};
212
213
static int inc_tx(struct btusb_data *data)
214
{
215
unsigned long flags;
216
int rv;
217
218
spin_lock_irqsave(&data->txlock, flags);
219
rv = test_bit(BTUSB_SUSPENDING, &data->flags);
220
if (!rv)
221
data->tx_in_flight++;
222
spin_unlock_irqrestore(&data->txlock, flags);
223
224
return rv;
225
}
226
227
static void btusb_intr_complete(struct urb *urb)
228
{
229
struct hci_dev *hdev = urb->context;
230
struct btusb_data *data = hdev->driver_data;
231
int err;
232
233
BT_DBG("%s urb %p status %d count %d", hdev->name,
234
urb, urb->status, urb->actual_length);
235
236
if (!test_bit(HCI_RUNNING, &hdev->flags))
237
return;
238
239
if (urb->status == 0) {
240
hdev->stat.byte_rx += urb->actual_length;
241
242
if (hci_recv_fragment(hdev, HCI_EVENT_PKT,
243
urb->transfer_buffer,
244
urb->actual_length) < 0) {
245
BT_ERR("%s corrupted event packet", hdev->name);
246
hdev->stat.err_rx++;
247
}
248
}
249
250
if (!test_bit(BTUSB_INTR_RUNNING, &data->flags))
251
return;
252
253
usb_mark_last_busy(data->udev);
254
usb_anchor_urb(urb, &data->intr_anchor);
255
256
err = usb_submit_urb(urb, GFP_ATOMIC);
257
if (err < 0) {
258
if (err != -EPERM)
259
BT_ERR("%s urb %p failed to resubmit (%d)",
260
hdev->name, urb, -err);
261
usb_unanchor_urb(urb);
262
}
263
}
264
265
static int btusb_submit_intr_urb(struct hci_dev *hdev, gfp_t mem_flags)
266
{
267
struct btusb_data *data = hdev->driver_data;
268
struct urb *urb;
269
unsigned char *buf;
270
unsigned int pipe;
271
int err, size;
272
273
BT_DBG("%s", hdev->name);
274
275
if (!data->intr_ep)
276
return -ENODEV;
277
278
urb = usb_alloc_urb(0, mem_flags);
279
if (!urb)
280
return -ENOMEM;
281
282
size = le16_to_cpu(data->intr_ep->wMaxPacketSize);
283
284
buf = kmalloc(size, mem_flags);
285
if (!buf) {
286
usb_free_urb(urb);
287
return -ENOMEM;
288
}
289
290
pipe = usb_rcvintpipe(data->udev, data->intr_ep->bEndpointAddress);
291
292
usb_fill_int_urb(urb, data->udev, pipe, buf, size,
293
btusb_intr_complete, hdev,
294
data->intr_ep->bInterval);
295
296
urb->transfer_flags |= URB_FREE_BUFFER;
297
298
usb_anchor_urb(urb, &data->intr_anchor);
299
300
err = usb_submit_urb(urb, mem_flags);
301
if (err < 0) {
302
BT_ERR("%s urb %p submission failed (%d)",
303
hdev->name, urb, -err);
304
usb_unanchor_urb(urb);
305
}
306
307
usb_free_urb(urb);
308
309
return err;
310
}
311
312
static void btusb_bulk_complete(struct urb *urb)
313
{
314
struct hci_dev *hdev = urb->context;
315
struct btusb_data *data = hdev->driver_data;
316
int err;
317
318
BT_DBG("%s urb %p status %d count %d", hdev->name,
319
urb, urb->status, urb->actual_length);
320
321
if (!test_bit(HCI_RUNNING, &hdev->flags))
322
return;
323
324
if (urb->status == 0) {
325
hdev->stat.byte_rx += urb->actual_length;
326
327
if (hci_recv_fragment(hdev, HCI_ACLDATA_PKT,
328
urb->transfer_buffer,
329
urb->actual_length) < 0) {
330
BT_ERR("%s corrupted ACL packet", hdev->name);
331
hdev->stat.err_rx++;
332
}
333
}
334
335
if (!test_bit(BTUSB_BULK_RUNNING, &data->flags))
336
return;
337
338
usb_anchor_urb(urb, &data->bulk_anchor);
339
usb_mark_last_busy(data->udev);
340
341
err = usb_submit_urb(urb, GFP_ATOMIC);
342
if (err < 0) {
343
if (err != -EPERM)
344
BT_ERR("%s urb %p failed to resubmit (%d)",
345
hdev->name, urb, -err);
346
usb_unanchor_urb(urb);
347
}
348
}
349
350
static int btusb_submit_bulk_urb(struct hci_dev *hdev, gfp_t mem_flags)
351
{
352
struct btusb_data *data = hdev->driver_data;
353
struct urb *urb;
354
unsigned char *buf;
355
unsigned int pipe;
356
int err, size = HCI_MAX_FRAME_SIZE;
357
358
BT_DBG("%s", hdev->name);
359
360
if (!data->bulk_rx_ep)
361
return -ENODEV;
362
363
urb = usb_alloc_urb(0, mem_flags);
364
if (!urb)
365
return -ENOMEM;
366
367
buf = kmalloc(size, mem_flags);
368
if (!buf) {
369
usb_free_urb(urb);
370
return -ENOMEM;
371
}
372
373
pipe = usb_rcvbulkpipe(data->udev, data->bulk_rx_ep->bEndpointAddress);
374
375
usb_fill_bulk_urb(urb, data->udev, pipe,
376
buf, size, btusb_bulk_complete, hdev);
377
378
urb->transfer_flags |= URB_FREE_BUFFER;
379
380
usb_mark_last_busy(data->udev);
381
usb_anchor_urb(urb, &data->bulk_anchor);
382
383
err = usb_submit_urb(urb, mem_flags);
384
if (err < 0) {
385
BT_ERR("%s urb %p submission failed (%d)",
386
hdev->name, urb, -err);
387
usb_unanchor_urb(urb);
388
}
389
390
usb_free_urb(urb);
391
392
return err;
393
}
394
395
static void btusb_isoc_complete(struct urb *urb)
396
{
397
struct hci_dev *hdev = urb->context;
398
struct btusb_data *data = hdev->driver_data;
399
int i, err;
400
401
BT_DBG("%s urb %p status %d count %d", hdev->name,
402
urb, urb->status, urb->actual_length);
403
404
if (!test_bit(HCI_RUNNING, &hdev->flags))
405
return;
406
407
if (urb->status == 0) {
408
for (i = 0; i < urb->number_of_packets; i++) {
409
unsigned int offset = urb->iso_frame_desc[i].offset;
410
unsigned int length = urb->iso_frame_desc[i].actual_length;
411
412
if (urb->iso_frame_desc[i].status)
413
continue;
414
415
hdev->stat.byte_rx += length;
416
417
if (hci_recv_fragment(hdev, HCI_SCODATA_PKT,
418
urb->transfer_buffer + offset,
419
length) < 0) {
420
BT_ERR("%s corrupted SCO packet", hdev->name);
421
hdev->stat.err_rx++;
422
}
423
}
424
}
425
426
if (!test_bit(BTUSB_ISOC_RUNNING, &data->flags))
427
return;
428
429
usb_anchor_urb(urb, &data->isoc_anchor);
430
431
err = usb_submit_urb(urb, GFP_ATOMIC);
432
if (err < 0) {
433
if (err != -EPERM)
434
BT_ERR("%s urb %p failed to resubmit (%d)",
435
hdev->name, urb, -err);
436
usb_unanchor_urb(urb);
437
}
438
}
439
440
static inline void __fill_isoc_descriptor(struct urb *urb, int len, int mtu)
441
{
442
int i, offset = 0;
443
444
BT_DBG("len %d mtu %d", len, mtu);
445
446
for (i = 0; i < BTUSB_MAX_ISOC_FRAMES && len >= mtu;
447
i++, offset += mtu, len -= mtu) {
448
urb->iso_frame_desc[i].offset = offset;
449
urb->iso_frame_desc[i].length = mtu;
450
}
451
452
if (len && i < BTUSB_MAX_ISOC_FRAMES) {
453
urb->iso_frame_desc[i].offset = offset;
454
urb->iso_frame_desc[i].length = len;
455
i++;
456
}
457
458
urb->number_of_packets = i;
459
}
460
461
static int btusb_submit_isoc_urb(struct hci_dev *hdev, gfp_t mem_flags)
462
{
463
struct btusb_data *data = hdev->driver_data;
464
struct urb *urb;
465
unsigned char *buf;
466
unsigned int pipe;
467
int err, size;
468
469
BT_DBG("%s", hdev->name);
470
471
if (!data->isoc_rx_ep)
472
return -ENODEV;
473
474
urb = usb_alloc_urb(BTUSB_MAX_ISOC_FRAMES, mem_flags);
475
if (!urb)
476
return -ENOMEM;
477
478
size = le16_to_cpu(data->isoc_rx_ep->wMaxPacketSize) *
479
BTUSB_MAX_ISOC_FRAMES;
480
481
buf = kmalloc(size, mem_flags);
482
if (!buf) {
483
usb_free_urb(urb);
484
return -ENOMEM;
485
}
486
487
pipe = usb_rcvisocpipe(data->udev, data->isoc_rx_ep->bEndpointAddress);
488
489
urb->dev = data->udev;
490
urb->pipe = pipe;
491
urb->context = hdev;
492
urb->complete = btusb_isoc_complete;
493
urb->interval = data->isoc_rx_ep->bInterval;
494
495
urb->transfer_flags = URB_FREE_BUFFER | URB_ISO_ASAP;
496
urb->transfer_buffer = buf;
497
urb->transfer_buffer_length = size;
498
499
__fill_isoc_descriptor(urb, size,
500
le16_to_cpu(data->isoc_rx_ep->wMaxPacketSize));
501
502
usb_anchor_urb(urb, &data->isoc_anchor);
503
504
err = usb_submit_urb(urb, mem_flags);
505
if (err < 0) {
506
BT_ERR("%s urb %p submission failed (%d)",
507
hdev->name, urb, -err);
508
usb_unanchor_urb(urb);
509
}
510
511
usb_free_urb(urb);
512
513
return err;
514
}
515
516
static void btusb_tx_complete(struct urb *urb)
517
{
518
struct sk_buff *skb = urb->context;
519
struct hci_dev *hdev = (struct hci_dev *) skb->dev;
520
struct btusb_data *data = hdev->driver_data;
521
522
BT_DBG("%s urb %p status %d count %d", hdev->name,
523
urb, urb->status, urb->actual_length);
524
525
if (!test_bit(HCI_RUNNING, &hdev->flags))
526
goto done;
527
528
if (!urb->status)
529
hdev->stat.byte_tx += urb->transfer_buffer_length;
530
else
531
hdev->stat.err_tx++;
532
533
done:
534
spin_lock(&data->txlock);
535
data->tx_in_flight--;
536
spin_unlock(&data->txlock);
537
538
kfree(urb->setup_packet);
539
540
kfree_skb(skb);
541
}
542
543
static void btusb_isoc_tx_complete(struct urb *urb)
544
{
545
struct sk_buff *skb = urb->context;
546
struct hci_dev *hdev = (struct hci_dev *) skb->dev;
547
548
BT_DBG("%s urb %p status %d count %d", hdev->name,
549
urb, urb->status, urb->actual_length);
550
551
if (!test_bit(HCI_RUNNING, &hdev->flags))
552
goto done;
553
554
if (!urb->status)
555
hdev->stat.byte_tx += urb->transfer_buffer_length;
556
else
557
hdev->stat.err_tx++;
558
559
done:
560
kfree(urb->setup_packet);
561
562
kfree_skb(skb);
563
}
564
565
static int btusb_open(struct hci_dev *hdev)
566
{
567
struct btusb_data *data = hdev->driver_data;
568
int err;
569
570
BT_DBG("%s", hdev->name);
571
572
err = usb_autopm_get_interface(data->intf);
573
if (err < 0)
574
return err;
575
576
data->intf->needs_remote_wakeup = 1;
577
578
if (test_and_set_bit(HCI_RUNNING, &hdev->flags))
579
goto done;
580
581
if (test_and_set_bit(BTUSB_INTR_RUNNING, &data->flags))
582
goto done;
583
584
err = btusb_submit_intr_urb(hdev, GFP_KERNEL);
585
if (err < 0)
586
goto failed;
587
588
err = btusb_submit_bulk_urb(hdev, GFP_KERNEL);
589
if (err < 0) {
590
usb_kill_anchored_urbs(&data->intr_anchor);
591
goto failed;
592
}
593
594
set_bit(BTUSB_BULK_RUNNING, &data->flags);
595
btusb_submit_bulk_urb(hdev, GFP_KERNEL);
596
597
done:
598
usb_autopm_put_interface(data->intf);
599
return 0;
600
601
failed:
602
clear_bit(BTUSB_INTR_RUNNING, &data->flags);
603
clear_bit(HCI_RUNNING, &hdev->flags);
604
usb_autopm_put_interface(data->intf);
605
return err;
606
}
607
608
static void btusb_stop_traffic(struct btusb_data *data)
609
{
610
usb_kill_anchored_urbs(&data->intr_anchor);
611
usb_kill_anchored_urbs(&data->bulk_anchor);
612
usb_kill_anchored_urbs(&data->isoc_anchor);
613
}
614
615
static int btusb_close(struct hci_dev *hdev)
616
{
617
struct btusb_data *data = hdev->driver_data;
618
int err;
619
620
BT_DBG("%s", hdev->name);
621
622
if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags))
623
return 0;
624
625
cancel_work_sync(&data->work);
626
cancel_work_sync(&data->waker);
627
628
clear_bit(BTUSB_ISOC_RUNNING, &data->flags);
629
clear_bit(BTUSB_BULK_RUNNING, &data->flags);
630
clear_bit(BTUSB_INTR_RUNNING, &data->flags);
631
632
btusb_stop_traffic(data);
633
err = usb_autopm_get_interface(data->intf);
634
if (err < 0)
635
goto failed;
636
637
data->intf->needs_remote_wakeup = 0;
638
usb_autopm_put_interface(data->intf);
639
640
failed:
641
usb_scuttle_anchored_urbs(&data->deferred);
642
return 0;
643
}
644
645
static int btusb_flush(struct hci_dev *hdev)
646
{
647
struct btusb_data *data = hdev->driver_data;
648
649
BT_DBG("%s", hdev->name);
650
651
usb_kill_anchored_urbs(&data->tx_anchor);
652
653
return 0;
654
}
655
656
static int btusb_send_frame(struct sk_buff *skb)
657
{
658
struct hci_dev *hdev = (struct hci_dev *) skb->dev;
659
struct btusb_data *data = hdev->driver_data;
660
struct usb_ctrlrequest *dr;
661
struct urb *urb;
662
unsigned int pipe;
663
int err;
664
665
BT_DBG("%s", hdev->name);
666
667
if (!test_bit(HCI_RUNNING, &hdev->flags))
668
return -EBUSY;
669
670
switch (bt_cb(skb)->pkt_type) {
671
case HCI_COMMAND_PKT:
672
urb = usb_alloc_urb(0, GFP_ATOMIC);
673
if (!urb)
674
return -ENOMEM;
675
676
dr = kmalloc(sizeof(*dr), GFP_ATOMIC);
677
if (!dr) {
678
usb_free_urb(urb);
679
return -ENOMEM;
680
}
681
682
dr->bRequestType = data->cmdreq_type;
683
dr->bRequest = 0;
684
dr->wIndex = 0;
685
dr->wValue = 0;
686
dr->wLength = __cpu_to_le16(skb->len);
687
688
pipe = usb_sndctrlpipe(data->udev, 0x00);
689
690
usb_fill_control_urb(urb, data->udev, pipe, (void *) dr,
691
skb->data, skb->len, btusb_tx_complete, skb);
692
693
hdev->stat.cmd_tx++;
694
break;
695
696
case HCI_ACLDATA_PKT:
697
if (!data->bulk_tx_ep || (hdev->conn_hash.acl_num < 1 &&
698
hdev->conn_hash.le_num < 1))
699
return -ENODEV;
700
701
urb = usb_alloc_urb(0, GFP_ATOMIC);
702
if (!urb)
703
return -ENOMEM;
704
705
pipe = usb_sndbulkpipe(data->udev,
706
data->bulk_tx_ep->bEndpointAddress);
707
708
usb_fill_bulk_urb(urb, data->udev, pipe,
709
skb->data, skb->len, btusb_tx_complete, skb);
710
711
hdev->stat.acl_tx++;
712
break;
713
714
case HCI_SCODATA_PKT:
715
if (!data->isoc_tx_ep || hdev->conn_hash.sco_num < 1)
716
return -ENODEV;
717
718
urb = usb_alloc_urb(BTUSB_MAX_ISOC_FRAMES, GFP_ATOMIC);
719
if (!urb)
720
return -ENOMEM;
721
722
pipe = usb_sndisocpipe(data->udev,
723
data->isoc_tx_ep->bEndpointAddress);
724
725
usb_fill_int_urb(urb, data->udev, pipe,
726
skb->data, skb->len, btusb_isoc_tx_complete,
727
skb, data->isoc_tx_ep->bInterval);
728
729
urb->transfer_flags = URB_ISO_ASAP;
730
731
__fill_isoc_descriptor(urb, skb->len,
732
le16_to_cpu(data->isoc_tx_ep->wMaxPacketSize));
733
734
hdev->stat.sco_tx++;
735
goto skip_waking;
736
737
default:
738
return -EILSEQ;
739
}
740
741
err = inc_tx(data);
742
if (err) {
743
usb_anchor_urb(urb, &data->deferred);
744
schedule_work(&data->waker);
745
err = 0;
746
goto done;
747
}
748
749
skip_waking:
750
usb_anchor_urb(urb, &data->tx_anchor);
751
752
err = usb_submit_urb(urb, GFP_ATOMIC);
753
if (err < 0) {
754
BT_ERR("%s urb %p submission failed", hdev->name, urb);
755
kfree(urb->setup_packet);
756
usb_unanchor_urb(urb);
757
} else {
758
usb_mark_last_busy(data->udev);
759
}
760
761
usb_free_urb(urb);
762
763
done:
764
return err;
765
}
766
767
static void btusb_destruct(struct hci_dev *hdev)
768
{
769
struct btusb_data *data = hdev->driver_data;
770
771
BT_DBG("%s", hdev->name);
772
773
kfree(data);
774
}
775
776
static void btusb_notify(struct hci_dev *hdev, unsigned int evt)
777
{
778
struct btusb_data *data = hdev->driver_data;
779
780
BT_DBG("%s evt %d", hdev->name, evt);
781
782
if (hdev->conn_hash.sco_num != data->sco_num) {
783
data->sco_num = hdev->conn_hash.sco_num;
784
schedule_work(&data->work);
785
}
786
}
787
788
static inline int __set_isoc_interface(struct hci_dev *hdev, int altsetting)
789
{
790
struct btusb_data *data = hdev->driver_data;
791
struct usb_interface *intf = data->isoc;
792
struct usb_endpoint_descriptor *ep_desc;
793
int i, err;
794
795
if (!data->isoc)
796
return -ENODEV;
797
798
err = usb_set_interface(data->udev, 1, altsetting);
799
if (err < 0) {
800
BT_ERR("%s setting interface failed (%d)", hdev->name, -err);
801
return err;
802
}
803
804
data->isoc_altsetting = altsetting;
805
806
data->isoc_tx_ep = NULL;
807
data->isoc_rx_ep = NULL;
808
809
for (i = 0; i < intf->cur_altsetting->desc.bNumEndpoints; i++) {
810
ep_desc = &intf->cur_altsetting->endpoint[i].desc;
811
812
if (!data->isoc_tx_ep && usb_endpoint_is_isoc_out(ep_desc)) {
813
data->isoc_tx_ep = ep_desc;
814
continue;
815
}
816
817
if (!data->isoc_rx_ep && usb_endpoint_is_isoc_in(ep_desc)) {
818
data->isoc_rx_ep = ep_desc;
819
continue;
820
}
821
}
822
823
if (!data->isoc_tx_ep || !data->isoc_rx_ep) {
824
BT_ERR("%s invalid SCO descriptors", hdev->name);
825
return -ENODEV;
826
}
827
828
return 0;
829
}
830
831
static void btusb_work(struct work_struct *work)
832
{
833
struct btusb_data *data = container_of(work, struct btusb_data, work);
834
struct hci_dev *hdev = data->hdev;
835
int err;
836
837
if (hdev->conn_hash.sco_num > 0) {
838
if (!test_bit(BTUSB_DID_ISO_RESUME, &data->flags)) {
839
err = usb_autopm_get_interface(data->isoc ? data->isoc : data->intf);
840
if (err < 0) {
841
clear_bit(BTUSB_ISOC_RUNNING, &data->flags);
842
usb_kill_anchored_urbs(&data->isoc_anchor);
843
return;
844
}
845
846
set_bit(BTUSB_DID_ISO_RESUME, &data->flags);
847
}
848
if (data->isoc_altsetting != 2) {
849
clear_bit(BTUSB_ISOC_RUNNING, &data->flags);
850
usb_kill_anchored_urbs(&data->isoc_anchor);
851
852
if (__set_isoc_interface(hdev, 2) < 0)
853
return;
854
}
855
856
if (!test_and_set_bit(BTUSB_ISOC_RUNNING, &data->flags)) {
857
if (btusb_submit_isoc_urb(hdev, GFP_KERNEL) < 0)
858
clear_bit(BTUSB_ISOC_RUNNING, &data->flags);
859
else
860
btusb_submit_isoc_urb(hdev, GFP_KERNEL);
861
}
862
} else {
863
clear_bit(BTUSB_ISOC_RUNNING, &data->flags);
864
usb_kill_anchored_urbs(&data->isoc_anchor);
865
866
__set_isoc_interface(hdev, 0);
867
if (test_and_clear_bit(BTUSB_DID_ISO_RESUME, &data->flags))
868
usb_autopm_put_interface(data->isoc ? data->isoc : data->intf);
869
}
870
}
871
872
static void btusb_waker(struct work_struct *work)
873
{
874
struct btusb_data *data = container_of(work, struct btusb_data, waker);
875
int err;
876
877
err = usb_autopm_get_interface(data->intf);
878
if (err < 0)
879
return;
880
881
usb_autopm_put_interface(data->intf);
882
}
883
884
static int btusb_probe(struct usb_interface *intf,
885
const struct usb_device_id *id)
886
{
887
struct usb_endpoint_descriptor *ep_desc;
888
struct btusb_data *data;
889
struct hci_dev *hdev;
890
int i, err;
891
892
BT_DBG("intf %p id %p", intf, id);
893
894
/* interface numbers are hardcoded in the spec */
895
if (intf->cur_altsetting->desc.bInterfaceNumber != 0)
896
return -ENODEV;
897
898
if (!id->driver_info) {
899
const struct usb_device_id *match;
900
match = usb_match_id(intf, blacklist_table);
901
if (match)
902
id = match;
903
}
904
905
if (id->driver_info == BTUSB_IGNORE)
906
return -ENODEV;
907
908
if (ignore_dga && id->driver_info & BTUSB_DIGIANSWER)
909
return -ENODEV;
910
911
if (ignore_csr && id->driver_info & BTUSB_CSR)
912
return -ENODEV;
913
914
if (ignore_sniffer && id->driver_info & BTUSB_SNIFFER)
915
return -ENODEV;
916
917
data = kzalloc(sizeof(*data), GFP_KERNEL);
918
if (!data)
919
return -ENOMEM;
920
921
for (i = 0; i < intf->cur_altsetting->desc.bNumEndpoints; i++) {
922
ep_desc = &intf->cur_altsetting->endpoint[i].desc;
923
924
if (!data->intr_ep && usb_endpoint_is_int_in(ep_desc)) {
925
data->intr_ep = ep_desc;
926
continue;
927
}
928
929
if (!data->bulk_tx_ep && usb_endpoint_is_bulk_out(ep_desc)) {
930
data->bulk_tx_ep = ep_desc;
931
continue;
932
}
933
934
if (!data->bulk_rx_ep && usb_endpoint_is_bulk_in(ep_desc)) {
935
data->bulk_rx_ep = ep_desc;
936
continue;
937
}
938
}
939
940
if (!data->intr_ep || !data->bulk_tx_ep || !data->bulk_rx_ep) {
941
kfree(data);
942
return -ENODEV;
943
}
944
945
data->cmdreq_type = USB_TYPE_CLASS;
946
947
data->udev = interface_to_usbdev(intf);
948
data->intf = intf;
949
950
spin_lock_init(&data->lock);
951
952
INIT_WORK(&data->work, btusb_work);
953
INIT_WORK(&data->waker, btusb_waker);
954
spin_lock_init(&data->txlock);
955
956
init_usb_anchor(&data->tx_anchor);
957
init_usb_anchor(&data->intr_anchor);
958
init_usb_anchor(&data->bulk_anchor);
959
init_usb_anchor(&data->isoc_anchor);
960
init_usb_anchor(&data->deferred);
961
962
hdev = hci_alloc_dev();
963
if (!hdev) {
964
kfree(data);
965
return -ENOMEM;
966
}
967
968
hdev->bus = HCI_USB;
969
hdev->driver_data = data;
970
971
data->hdev = hdev;
972
973
SET_HCIDEV_DEV(hdev, &intf->dev);
974
975
hdev->open = btusb_open;
976
hdev->close = btusb_close;
977
hdev->flush = btusb_flush;
978
hdev->send = btusb_send_frame;
979
hdev->destruct = btusb_destruct;
980
hdev->notify = btusb_notify;
981
982
hdev->owner = THIS_MODULE;
983
984
/* Interface numbers are hardcoded in the specification */
985
data->isoc = usb_ifnum_to_if(data->udev, 1);
986
987
if (!reset)
988
set_bit(HCI_QUIRK_NO_RESET, &hdev->quirks);
989
990
if (force_scofix || id->driver_info & BTUSB_WRONG_SCO_MTU) {
991
if (!disable_scofix)
992
set_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks);
993
}
994
995
if (id->driver_info & BTUSB_BROKEN_ISOC)
996
data->isoc = NULL;
997
998
if (id->driver_info & BTUSB_DIGIANSWER) {
999
data->cmdreq_type = USB_TYPE_VENDOR;
1000
set_bit(HCI_QUIRK_NO_RESET, &hdev->quirks);
1001
}
1002
1003
if (id->driver_info & BTUSB_CSR) {
1004
struct usb_device *udev = data->udev;
1005
1006
/* Old firmware would otherwise execute USB reset */
1007
if (le16_to_cpu(udev->descriptor.bcdDevice) < 0x117)
1008
set_bit(HCI_QUIRK_NO_RESET, &hdev->quirks);
1009
}
1010
1011
if (id->driver_info & BTUSB_SNIFFER) {
1012
struct usb_device *udev = data->udev;
1013
1014
/* New sniffer firmware has crippled HCI interface */
1015
if (le16_to_cpu(udev->descriptor.bcdDevice) > 0x997)
1016
set_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks);
1017
1018
data->isoc = NULL;
1019
}
1020
1021
if (id->driver_info & BTUSB_BCM92035) {
1022
unsigned char cmd[] = { 0x3b, 0xfc, 0x01, 0x00 };
1023
struct sk_buff *skb;
1024
1025
skb = bt_skb_alloc(sizeof(cmd), GFP_KERNEL);
1026
if (skb) {
1027
memcpy(skb_put(skb, sizeof(cmd)), cmd, sizeof(cmd));
1028
skb_queue_tail(&hdev->driver_init, skb);
1029
}
1030
}
1031
1032
if (data->isoc) {
1033
err = usb_driver_claim_interface(&btusb_driver,
1034
data->isoc, data);
1035
if (err < 0) {
1036
hci_free_dev(hdev);
1037
kfree(data);
1038
return err;
1039
}
1040
}
1041
1042
err = hci_register_dev(hdev);
1043
if (err < 0) {
1044
hci_free_dev(hdev);
1045
kfree(data);
1046
return err;
1047
}
1048
1049
usb_set_intfdata(intf, data);
1050
1051
return 0;
1052
}
1053
1054
static void btusb_disconnect(struct usb_interface *intf)
1055
{
1056
struct btusb_data *data = usb_get_intfdata(intf);
1057
struct hci_dev *hdev;
1058
1059
BT_DBG("intf %p", intf);
1060
1061
if (!data)
1062
return;
1063
1064
hdev = data->hdev;
1065
1066
__hci_dev_hold(hdev);
1067
1068
usb_set_intfdata(data->intf, NULL);
1069
1070
if (data->isoc)
1071
usb_set_intfdata(data->isoc, NULL);
1072
1073
hci_unregister_dev(hdev);
1074
1075
if (intf == data->isoc)
1076
usb_driver_release_interface(&btusb_driver, data->intf);
1077
else if (data->isoc)
1078
usb_driver_release_interface(&btusb_driver, data->isoc);
1079
1080
__hci_dev_put(hdev);
1081
1082
hci_free_dev(hdev);
1083
}
1084
1085
#ifdef CONFIG_PM
1086
static int btusb_suspend(struct usb_interface *intf, pm_message_t message)
1087
{
1088
struct btusb_data *data = usb_get_intfdata(intf);
1089
1090
BT_DBG("intf %p", intf);
1091
1092
if (data->suspend_count++)
1093
return 0;
1094
1095
spin_lock_irq(&data->txlock);
1096
if (!((message.event & PM_EVENT_AUTO) && data->tx_in_flight)) {
1097
set_bit(BTUSB_SUSPENDING, &data->flags);
1098
spin_unlock_irq(&data->txlock);
1099
} else {
1100
spin_unlock_irq(&data->txlock);
1101
data->suspend_count--;
1102
return -EBUSY;
1103
}
1104
1105
cancel_work_sync(&data->work);
1106
1107
btusb_stop_traffic(data);
1108
usb_kill_anchored_urbs(&data->tx_anchor);
1109
1110
return 0;
1111
}
1112
1113
static void play_deferred(struct btusb_data *data)
1114
{
1115
struct urb *urb;
1116
int err;
1117
1118
while ((urb = usb_get_from_anchor(&data->deferred))) {
1119
err = usb_submit_urb(urb, GFP_ATOMIC);
1120
if (err < 0)
1121
break;
1122
1123
data->tx_in_flight++;
1124
}
1125
usb_scuttle_anchored_urbs(&data->deferred);
1126
}
1127
1128
static int btusb_resume(struct usb_interface *intf)
1129
{
1130
struct btusb_data *data = usb_get_intfdata(intf);
1131
struct hci_dev *hdev = data->hdev;
1132
int err = 0;
1133
1134
BT_DBG("intf %p", intf);
1135
1136
if (--data->suspend_count)
1137
return 0;
1138
1139
if (!test_bit(HCI_RUNNING, &hdev->flags))
1140
goto done;
1141
1142
if (test_bit(BTUSB_INTR_RUNNING, &data->flags)) {
1143
err = btusb_submit_intr_urb(hdev, GFP_NOIO);
1144
if (err < 0) {
1145
clear_bit(BTUSB_INTR_RUNNING, &data->flags);
1146
goto failed;
1147
}
1148
}
1149
1150
if (test_bit(BTUSB_BULK_RUNNING, &data->flags)) {
1151
err = btusb_submit_bulk_urb(hdev, GFP_NOIO);
1152
if (err < 0) {
1153
clear_bit(BTUSB_BULK_RUNNING, &data->flags);
1154
goto failed;
1155
}
1156
1157
btusb_submit_bulk_urb(hdev, GFP_NOIO);
1158
}
1159
1160
if (test_bit(BTUSB_ISOC_RUNNING, &data->flags)) {
1161
if (btusb_submit_isoc_urb(hdev, GFP_NOIO) < 0)
1162
clear_bit(BTUSB_ISOC_RUNNING, &data->flags);
1163
else
1164
btusb_submit_isoc_urb(hdev, GFP_NOIO);
1165
}
1166
1167
spin_lock_irq(&data->txlock);
1168
play_deferred(data);
1169
clear_bit(BTUSB_SUSPENDING, &data->flags);
1170
spin_unlock_irq(&data->txlock);
1171
schedule_work(&data->work);
1172
1173
return 0;
1174
1175
failed:
1176
usb_scuttle_anchored_urbs(&data->deferred);
1177
done:
1178
spin_lock_irq(&data->txlock);
1179
clear_bit(BTUSB_SUSPENDING, &data->flags);
1180
spin_unlock_irq(&data->txlock);
1181
1182
return err;
1183
}
1184
#endif
1185
1186
static struct usb_driver btusb_driver = {
1187
.name = "btusb",
1188
.probe = btusb_probe,
1189
.disconnect = btusb_disconnect,
1190
#ifdef CONFIG_PM
1191
.suspend = btusb_suspend,
1192
.resume = btusb_resume,
1193
#endif
1194
.id_table = btusb_table,
1195
.supports_autosuspend = 1,
1196
};
1197
1198
static int __init btusb_init(void)
1199
{
1200
BT_INFO("Generic Bluetooth USB driver ver %s", VERSION);
1201
1202
return usb_register(&btusb_driver);
1203
}
1204
1205
static void __exit btusb_exit(void)
1206
{
1207
usb_deregister(&btusb_driver);
1208
}
1209
1210
module_init(btusb_init);
1211
module_exit(btusb_exit);
1212
1213
module_param(ignore_dga, bool, 0644);
1214
MODULE_PARM_DESC(ignore_dga, "Ignore devices with id 08fd:0001");
1215
1216
module_param(ignore_csr, bool, 0644);
1217
MODULE_PARM_DESC(ignore_csr, "Ignore devices with id 0a12:0001");
1218
1219
module_param(ignore_sniffer, bool, 0644);
1220
MODULE_PARM_DESC(ignore_sniffer, "Ignore devices with id 0a12:0002");
1221
1222
module_param(disable_scofix, bool, 0644);
1223
MODULE_PARM_DESC(disable_scofix, "Disable fixup of wrong SCO buffer size");
1224
1225
module_param(force_scofix, bool, 0644);
1226
MODULE_PARM_DESC(force_scofix, "Force fixup of wrong SCO buffers size");
1227
1228
module_param(reset, bool, 0644);
1229
MODULE_PARM_DESC(reset, "Send HCI reset command on initialization");
1230
1231
MODULE_AUTHOR("Marcel Holtmann <[email protected]>");
1232
MODULE_DESCRIPTION("Generic Bluetooth USB driver ver " VERSION);
1233
MODULE_VERSION(VERSION);
1234
MODULE_LICENSE("GPL");
1235
1236