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