aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/bluetooth/btusb.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/bluetooth/btusb.c')
-rw-r--r--drivers/bluetooth/btusb.c515
1 files changed, 375 insertions, 140 deletions
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index a79d657c0845..edfc17bfcd44 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -268,20 +268,24 @@ struct btusb_data {
268 struct usb_interface *intf; 268 struct usb_interface *intf;
269 struct usb_interface *isoc; 269 struct usb_interface *isoc;
270 270
271 spinlock_t lock;
272
273 unsigned long flags; 271 unsigned long flags;
274 272
275 struct work_struct work; 273 struct work_struct work;
276 struct work_struct waker; 274 struct work_struct waker;
277 275
276 struct usb_anchor deferred;
278 struct usb_anchor tx_anchor; 277 struct usb_anchor tx_anchor;
278 int tx_in_flight;
279 spinlock_t txlock;
280
279 struct usb_anchor intr_anchor; 281 struct usb_anchor intr_anchor;
280 struct usb_anchor bulk_anchor; 282 struct usb_anchor bulk_anchor;
281 struct usb_anchor isoc_anchor; 283 struct usb_anchor isoc_anchor;
282 struct usb_anchor deferred; 284 spinlock_t rxlock;
283 int tx_in_flight; 285
284 spinlock_t txlock; 286 struct sk_buff *evt_skb;
287 struct sk_buff *acl_skb;
288 struct sk_buff *sco_skb;
285 289
286 struct usb_endpoint_descriptor *intr_ep; 290 struct usb_endpoint_descriptor *intr_ep;
287 struct usb_endpoint_descriptor *bulk_tx_ep; 291 struct usb_endpoint_descriptor *bulk_tx_ep;
@@ -296,18 +300,189 @@ struct btusb_data {
296 int suspend_count; 300 int suspend_count;
297}; 301};
298 302
299static int inc_tx(struct btusb_data *data) 303static inline void btusb_free_frags(struct btusb_data *data)
300{ 304{
301 unsigned long flags; 305 unsigned long flags;
302 int rv;
303 306
304 spin_lock_irqsave(&data->txlock, flags); 307 spin_lock_irqsave(&data->rxlock, flags);
305 rv = test_bit(BTUSB_SUSPENDING, &data->flags); 308
306 if (!rv) 309 kfree_skb(data->evt_skb);
307 data->tx_in_flight++; 310 data->evt_skb = NULL;
308 spin_unlock_irqrestore(&data->txlock, flags); 311
312 kfree_skb(data->acl_skb);
313 data->acl_skb = NULL;
314
315 kfree_skb(data->sco_skb);
316 data->sco_skb = NULL;
317
318 spin_unlock_irqrestore(&data->rxlock, flags);
319}
320
321static int btusb_recv_intr(struct btusb_data *data, void *buffer, int count)
322{
323 struct sk_buff *skb;
324 int err = 0;
325
326 spin_lock(&data->rxlock);
327 skb = data->evt_skb;
328
329 while (count) {
330 int len;
331
332 if (!skb) {
333 skb = bt_skb_alloc(HCI_MAX_EVENT_SIZE, GFP_ATOMIC);
334 if (!skb) {
335 err = -ENOMEM;
336 break;
337 }
338
339 bt_cb(skb)->pkt_type = HCI_EVENT_PKT;
340 bt_cb(skb)->expect = HCI_EVENT_HDR_SIZE;
341 }
342
343 len = min_t(uint, bt_cb(skb)->expect, count);
344 memcpy(skb_put(skb, len), buffer, len);
345
346 count -= len;
347 buffer += len;
348 bt_cb(skb)->expect -= len;
349
350 if (skb->len == HCI_EVENT_HDR_SIZE) {
351 /* Complete event header */
352 bt_cb(skb)->expect = hci_event_hdr(skb)->plen;
353
354 if (skb_tailroom(skb) < bt_cb(skb)->expect) {
355 kfree_skb(skb);
356 skb = NULL;
357
358 err = -EILSEQ;
359 break;
360 }
361 }
362
363 if (bt_cb(skb)->expect == 0) {
364 /* Complete frame */
365 hci_recv_frame(data->hdev, skb);
366 skb = NULL;
367 }
368 }
369
370 data->evt_skb = skb;
371 spin_unlock(&data->rxlock);
372
373 return err;
374}
375
376static int btusb_recv_bulk(struct btusb_data *data, void *buffer, int count)
377{
378 struct sk_buff *skb;
379 int err = 0;
380
381 spin_lock(&data->rxlock);
382 skb = data->acl_skb;
383
384 while (count) {
385 int len;
309 386
310 return rv; 387 if (!skb) {
388 skb = bt_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC);
389 if (!skb) {
390 err = -ENOMEM;
391 break;
392 }
393
394 bt_cb(skb)->pkt_type = HCI_ACLDATA_PKT;
395 bt_cb(skb)->expect = HCI_ACL_HDR_SIZE;
396 }
397
398 len = min_t(uint, bt_cb(skb)->expect, count);
399 memcpy(skb_put(skb, len), buffer, len);
400
401 count -= len;
402 buffer += len;
403 bt_cb(skb)->expect -= len;
404
405 if (skb->len == HCI_ACL_HDR_SIZE) {
406 __le16 dlen = hci_acl_hdr(skb)->dlen;
407
408 /* Complete ACL header */
409 bt_cb(skb)->expect = __le16_to_cpu(dlen);
410
411 if (skb_tailroom(skb) < bt_cb(skb)->expect) {
412 kfree_skb(skb);
413 skb = NULL;
414
415 err = -EILSEQ;
416 break;
417 }
418 }
419
420 if (bt_cb(skb)->expect == 0) {
421 /* Complete frame */
422 hci_recv_frame(data->hdev, skb);
423 skb = NULL;
424 }
425 }
426
427 data->acl_skb = skb;
428 spin_unlock(&data->rxlock);
429
430 return err;
431}
432
433static int btusb_recv_isoc(struct btusb_data *data, void *buffer, int count)
434{
435 struct sk_buff *skb;
436 int err = 0;
437
438 spin_lock(&data->rxlock);
439 skb = data->sco_skb;
440
441 while (count) {
442 int len;
443
444 if (!skb) {
445 skb = bt_skb_alloc(HCI_MAX_SCO_SIZE, GFP_ATOMIC);
446 if (!skb) {
447 err = -ENOMEM;
448 break;
449 }
450
451 bt_cb(skb)->pkt_type = HCI_SCODATA_PKT;
452 bt_cb(skb)->expect = HCI_SCO_HDR_SIZE;
453 }
454
455 len = min_t(uint, bt_cb(skb)->expect, count);
456 memcpy(skb_put(skb, len), buffer, len);
457
458 count -= len;
459 buffer += len;
460 bt_cb(skb)->expect -= len;
461
462 if (skb->len == HCI_SCO_HDR_SIZE) {
463 /* Complete SCO header */
464 bt_cb(skb)->expect = hci_sco_hdr(skb)->dlen;
465
466 if (skb_tailroom(skb) < bt_cb(skb)->expect) {
467 kfree_skb(skb);
468 skb = NULL;
469
470 err = -EILSEQ;
471 break;
472 }
473 }
474
475 if (bt_cb(skb)->expect == 0) {
476 /* Complete frame */
477 hci_recv_frame(data->hdev, skb);
478 skb = NULL;
479 }
480 }
481
482 data->sco_skb = skb;
483 spin_unlock(&data->rxlock);
484
485 return err;
311} 486}
312 487
313static void btusb_intr_complete(struct urb *urb) 488static void btusb_intr_complete(struct urb *urb)
@@ -316,8 +491,8 @@ static void btusb_intr_complete(struct urb *urb)
316 struct btusb_data *data = hci_get_drvdata(hdev); 491 struct btusb_data *data = hci_get_drvdata(hdev);
317 int err; 492 int err;
318 493
319 BT_DBG("%s urb %p status %d count %d", hdev->name, 494 BT_DBG("%s urb %p status %d count %d", hdev->name, urb, urb->status,
320 urb, urb->status, urb->actual_length); 495 urb->actual_length);
321 496
322 if (!test_bit(HCI_RUNNING, &hdev->flags)) 497 if (!test_bit(HCI_RUNNING, &hdev->flags))
323 return; 498 return;
@@ -325,9 +500,8 @@ static void btusb_intr_complete(struct urb *urb)
325 if (urb->status == 0) { 500 if (urb->status == 0) {
326 hdev->stat.byte_rx += urb->actual_length; 501 hdev->stat.byte_rx += urb->actual_length;
327 502
328 if (hci_recv_fragment(hdev, HCI_EVENT_PKT, 503 if (btusb_recv_intr(data, urb->transfer_buffer,
329 urb->transfer_buffer, 504 urb->actual_length) < 0) {
330 urb->actual_length) < 0) {
331 BT_ERR("%s corrupted event packet", hdev->name); 505 BT_ERR("%s corrupted event packet", hdev->name);
332 hdev->stat.err_rx++; 506 hdev->stat.err_rx++;
333 } 507 }
@@ -348,7 +522,7 @@ static void btusb_intr_complete(struct urb *urb)
348 * -ENODEV: device got disconnected */ 522 * -ENODEV: device got disconnected */
349 if (err != -EPERM && err != -ENODEV) 523 if (err != -EPERM && err != -ENODEV)
350 BT_ERR("%s urb %p failed to resubmit (%d)", 524 BT_ERR("%s urb %p failed to resubmit (%d)",
351 hdev->name, urb, -err); 525 hdev->name, urb, -err);
352 usb_unanchor_urb(urb); 526 usb_unanchor_urb(urb);
353 } 527 }
354} 528}
@@ -381,8 +555,7 @@ static int btusb_submit_intr_urb(struct hci_dev *hdev, gfp_t mem_flags)
381 pipe = usb_rcvintpipe(data->udev, data->intr_ep->bEndpointAddress); 555 pipe = usb_rcvintpipe(data->udev, data->intr_ep->bEndpointAddress);
382 556
383 usb_fill_int_urb(urb, data->udev, pipe, buf, size, 557 usb_fill_int_urb(urb, data->udev, pipe, buf, size,
384 btusb_intr_complete, hdev, 558 btusb_intr_complete, hdev, data->intr_ep->bInterval);
385 data->intr_ep->bInterval);
386 559
387 urb->transfer_flags |= URB_FREE_BUFFER; 560 urb->transfer_flags |= URB_FREE_BUFFER;
388 561
@@ -392,7 +565,7 @@ static int btusb_submit_intr_urb(struct hci_dev *hdev, gfp_t mem_flags)
392 if (err < 0) { 565 if (err < 0) {
393 if (err != -EPERM && err != -ENODEV) 566 if (err != -EPERM && err != -ENODEV)
394 BT_ERR("%s urb %p submission failed (%d)", 567 BT_ERR("%s urb %p submission failed (%d)",
395 hdev->name, urb, -err); 568 hdev->name, urb, -err);
396 usb_unanchor_urb(urb); 569 usb_unanchor_urb(urb);
397 } 570 }
398 571
@@ -407,8 +580,8 @@ static void btusb_bulk_complete(struct urb *urb)
407 struct btusb_data *data = hci_get_drvdata(hdev); 580 struct btusb_data *data = hci_get_drvdata(hdev);
408 int err; 581 int err;
409 582
410 BT_DBG("%s urb %p status %d count %d", hdev->name, 583 BT_DBG("%s urb %p status %d count %d", hdev->name, urb, urb->status,
411 urb, urb->status, urb->actual_length); 584 urb->actual_length);
412 585
413 if (!test_bit(HCI_RUNNING, &hdev->flags)) 586 if (!test_bit(HCI_RUNNING, &hdev->flags))
414 return; 587 return;
@@ -416,9 +589,8 @@ static void btusb_bulk_complete(struct urb *urb)
416 if (urb->status == 0) { 589 if (urb->status == 0) {
417 hdev->stat.byte_rx += urb->actual_length; 590 hdev->stat.byte_rx += urb->actual_length;
418 591
419 if (hci_recv_fragment(hdev, HCI_ACLDATA_PKT, 592 if (btusb_recv_bulk(data, urb->transfer_buffer,
420 urb->transfer_buffer, 593 urb->actual_length) < 0) {
421 urb->actual_length) < 0) {
422 BT_ERR("%s corrupted ACL packet", hdev->name); 594 BT_ERR("%s corrupted ACL packet", hdev->name);
423 hdev->stat.err_rx++; 595 hdev->stat.err_rx++;
424 } 596 }
@@ -439,7 +611,7 @@ static void btusb_bulk_complete(struct urb *urb)
439 * -ENODEV: device got disconnected */ 611 * -ENODEV: device got disconnected */
440 if (err != -EPERM && err != -ENODEV) 612 if (err != -EPERM && err != -ENODEV)
441 BT_ERR("%s urb %p failed to resubmit (%d)", 613 BT_ERR("%s urb %p failed to resubmit (%d)",
442 hdev->name, urb, -err); 614 hdev->name, urb, -err);
443 usb_unanchor_urb(urb); 615 usb_unanchor_urb(urb);
444 } 616 }
445} 617}
@@ -469,8 +641,8 @@ static int btusb_submit_bulk_urb(struct hci_dev *hdev, gfp_t mem_flags)
469 641
470 pipe = usb_rcvbulkpipe(data->udev, data->bulk_rx_ep->bEndpointAddress); 642 pipe = usb_rcvbulkpipe(data->udev, data->bulk_rx_ep->bEndpointAddress);
471 643
472 usb_fill_bulk_urb(urb, data->udev, pipe, 644 usb_fill_bulk_urb(urb, data->udev, pipe, buf, size,
473 buf, size, btusb_bulk_complete, hdev); 645 btusb_bulk_complete, hdev);
474 646
475 urb->transfer_flags |= URB_FREE_BUFFER; 647 urb->transfer_flags |= URB_FREE_BUFFER;
476 648
@@ -481,7 +653,7 @@ static int btusb_submit_bulk_urb(struct hci_dev *hdev, gfp_t mem_flags)
481 if (err < 0) { 653 if (err < 0) {
482 if (err != -EPERM && err != -ENODEV) 654 if (err != -EPERM && err != -ENODEV)
483 BT_ERR("%s urb %p submission failed (%d)", 655 BT_ERR("%s urb %p submission failed (%d)",
484 hdev->name, urb, -err); 656 hdev->name, urb, -err);
485 usb_unanchor_urb(urb); 657 usb_unanchor_urb(urb);
486 } 658 }
487 659
@@ -496,8 +668,8 @@ static void btusb_isoc_complete(struct urb *urb)
496 struct btusb_data *data = hci_get_drvdata(hdev); 668 struct btusb_data *data = hci_get_drvdata(hdev);
497 int i, err; 669 int i, err;
498 670
499 BT_DBG("%s urb %p status %d count %d", hdev->name, 671 BT_DBG("%s urb %p status %d count %d", hdev->name, urb, urb->status,
500 urb, urb->status, urb->actual_length); 672 urb->actual_length);
501 673
502 if (!test_bit(HCI_RUNNING, &hdev->flags)) 674 if (!test_bit(HCI_RUNNING, &hdev->flags))
503 return; 675 return;
@@ -512,9 +684,8 @@ static void btusb_isoc_complete(struct urb *urb)
512 684
513 hdev->stat.byte_rx += length; 685 hdev->stat.byte_rx += length;
514 686
515 if (hci_recv_fragment(hdev, HCI_SCODATA_PKT, 687 if (btusb_recv_isoc(data, urb->transfer_buffer + offset,
516 urb->transfer_buffer + offset, 688 length) < 0) {
517 length) < 0) {
518 BT_ERR("%s corrupted SCO packet", hdev->name); 689 BT_ERR("%s corrupted SCO packet", hdev->name);
519 hdev->stat.err_rx++; 690 hdev->stat.err_rx++;
520 } 691 }
@@ -535,7 +706,7 @@ static void btusb_isoc_complete(struct urb *urb)
535 * -ENODEV: device got disconnected */ 706 * -ENODEV: device got disconnected */
536 if (err != -EPERM && err != -ENODEV) 707 if (err != -EPERM && err != -ENODEV)
537 BT_ERR("%s urb %p failed to resubmit (%d)", 708 BT_ERR("%s urb %p failed to resubmit (%d)",
538 hdev->name, urb, -err); 709 hdev->name, urb, -err);
539 usb_unanchor_urb(urb); 710 usb_unanchor_urb(urb);
540 } 711 }
541} 712}
@@ -590,12 +761,12 @@ static int btusb_submit_isoc_urb(struct hci_dev *hdev, gfp_t mem_flags)
590 pipe = usb_rcvisocpipe(data->udev, data->isoc_rx_ep->bEndpointAddress); 761 pipe = usb_rcvisocpipe(data->udev, data->isoc_rx_ep->bEndpointAddress);
591 762
592 usb_fill_int_urb(urb, data->udev, pipe, buf, size, btusb_isoc_complete, 763 usb_fill_int_urb(urb, data->udev, pipe, buf, size, btusb_isoc_complete,
593 hdev, data->isoc_rx_ep->bInterval); 764 hdev, data->isoc_rx_ep->bInterval);
594 765
595 urb->transfer_flags = URB_FREE_BUFFER | URB_ISO_ASAP; 766 urb->transfer_flags = URB_FREE_BUFFER | URB_ISO_ASAP;
596 767
597 __fill_isoc_descriptor(urb, size, 768 __fill_isoc_descriptor(urb, size,
598 le16_to_cpu(data->isoc_rx_ep->wMaxPacketSize)); 769 le16_to_cpu(data->isoc_rx_ep->wMaxPacketSize));
599 770
600 usb_anchor_urb(urb, &data->isoc_anchor); 771 usb_anchor_urb(urb, &data->isoc_anchor);
601 772
@@ -603,7 +774,7 @@ static int btusb_submit_isoc_urb(struct hci_dev *hdev, gfp_t mem_flags)
603 if (err < 0) { 774 if (err < 0) {
604 if (err != -EPERM && err != -ENODEV) 775 if (err != -EPERM && err != -ENODEV)
605 BT_ERR("%s urb %p submission failed (%d)", 776 BT_ERR("%s urb %p submission failed (%d)",
606 hdev->name, urb, -err); 777 hdev->name, urb, -err);
607 usb_unanchor_urb(urb); 778 usb_unanchor_urb(urb);
608 } 779 }
609 780
@@ -615,11 +786,11 @@ static int btusb_submit_isoc_urb(struct hci_dev *hdev, gfp_t mem_flags)
615static void btusb_tx_complete(struct urb *urb) 786static void btusb_tx_complete(struct urb *urb)
616{ 787{
617 struct sk_buff *skb = urb->context; 788 struct sk_buff *skb = urb->context;
618 struct hci_dev *hdev = (struct hci_dev *) skb->dev; 789 struct hci_dev *hdev = (struct hci_dev *)skb->dev;
619 struct btusb_data *data = hci_get_drvdata(hdev); 790 struct btusb_data *data = hci_get_drvdata(hdev);
620 791
621 BT_DBG("%s urb %p status %d count %d", hdev->name, 792 BT_DBG("%s urb %p status %d count %d", hdev->name, urb, urb->status,
622 urb, urb->status, urb->actual_length); 793 urb->actual_length);
623 794
624 if (!test_bit(HCI_RUNNING, &hdev->flags)) 795 if (!test_bit(HCI_RUNNING, &hdev->flags))
625 goto done; 796 goto done;
@@ -642,10 +813,10 @@ done:
642static void btusb_isoc_tx_complete(struct urb *urb) 813static void btusb_isoc_tx_complete(struct urb *urb)
643{ 814{
644 struct sk_buff *skb = urb->context; 815 struct sk_buff *skb = urb->context;
645 struct hci_dev *hdev = (struct hci_dev *) skb->dev; 816 struct hci_dev *hdev = (struct hci_dev *)skb->dev;
646 817
647 BT_DBG("%s urb %p status %d count %d", hdev->name, 818 BT_DBG("%s urb %p status %d count %d", hdev->name, urb, urb->status,
648 urb, urb->status, urb->actual_length); 819 urb->actual_length);
649 820
650 if (!test_bit(HCI_RUNNING, &hdev->flags)) 821 if (!test_bit(HCI_RUNNING, &hdev->flags))
651 goto done; 822 goto done;
@@ -729,6 +900,8 @@ static int btusb_close(struct hci_dev *hdev)
729 clear_bit(BTUSB_INTR_RUNNING, &data->flags); 900 clear_bit(BTUSB_INTR_RUNNING, &data->flags);
730 901
731 btusb_stop_traffic(data); 902 btusb_stop_traffic(data);
903 btusb_free_frags(data);
904
732 err = usb_autopm_get_interface(data->intf); 905 err = usb_autopm_get_interface(data->intf);
733 if (err < 0) 906 if (err < 0)
734 goto failed; 907 goto failed;
@@ -748,122 +921,181 @@ static int btusb_flush(struct hci_dev *hdev)
748 BT_DBG("%s", hdev->name); 921 BT_DBG("%s", hdev->name);
749 922
750 usb_kill_anchored_urbs(&data->tx_anchor); 923 usb_kill_anchored_urbs(&data->tx_anchor);
924 btusb_free_frags(data);
751 925
752 return 0; 926 return 0;
753} 927}
754 928
755static int btusb_send_frame(struct hci_dev *hdev, struct sk_buff *skb) 929static struct urb *alloc_ctrl_urb(struct hci_dev *hdev, struct sk_buff *skb)
756{ 930{
757 struct btusb_data *data = hci_get_drvdata(hdev); 931 struct btusb_data *data = hci_get_drvdata(hdev);
758 struct usb_ctrlrequest *dr; 932 struct usb_ctrlrequest *dr;
759 struct urb *urb; 933 struct urb *urb;
760 unsigned int pipe; 934 unsigned int pipe;
761 int err;
762 935
763 BT_DBG("%s", hdev->name); 936 urb = usb_alloc_urb(0, GFP_KERNEL);
937 if (!urb)
938 return ERR_PTR(-ENOMEM);
764 939
765 if (!test_bit(HCI_RUNNING, &hdev->flags)) 940 dr = kmalloc(sizeof(*dr), GFP_KERNEL);
766 return -EBUSY; 941 if (!dr) {
942 usb_free_urb(urb);
943 return ERR_PTR(-ENOMEM);
944 }
767 945
768 skb->dev = (void *) hdev; 946 dr->bRequestType = data->cmdreq_type;
947 dr->bRequest = 0;
948 dr->wIndex = 0;
949 dr->wValue = 0;
950 dr->wLength = __cpu_to_le16(skb->len);
769 951
770 switch (bt_cb(skb)->pkt_type) { 952 pipe = usb_sndctrlpipe(data->udev, 0x00);
771 case HCI_COMMAND_PKT:
772 urb = usb_alloc_urb(0, GFP_ATOMIC);
773 if (!urb)
774 return -ENOMEM;
775
776 dr = kmalloc(sizeof(*dr), GFP_ATOMIC);
777 if (!dr) {
778 usb_free_urb(urb);
779 return -ENOMEM;
780 }
781 953
782 dr->bRequestType = data->cmdreq_type; 954 usb_fill_control_urb(urb, data->udev, pipe, (void *)dr,
783 dr->bRequest = 0; 955 skb->data, skb->len, btusb_tx_complete, skb);
784 dr->wIndex = 0;
785 dr->wValue = 0;
786 dr->wLength = __cpu_to_le16(skb->len);
787 956
788 pipe = usb_sndctrlpipe(data->udev, 0x00); 957 skb->dev = (void *)hdev;
789 958
790 usb_fill_control_urb(urb, data->udev, pipe, (void *) dr, 959 return urb;
791 skb->data, skb->len, btusb_tx_complete, skb); 960}
792 961
793 hdev->stat.cmd_tx++; 962static struct urb *alloc_bulk_urb(struct hci_dev *hdev, struct sk_buff *skb)
794 break; 963{
964 struct btusb_data *data = hci_get_drvdata(hdev);
965 struct urb *urb;
966 unsigned int pipe;
795 967
796 case HCI_ACLDATA_PKT: 968 if (!data->bulk_tx_ep)
797 if (!data->bulk_tx_ep) 969 return ERR_PTR(-ENODEV);
798 return -ENODEV;
799 970
800 urb = usb_alloc_urb(0, GFP_ATOMIC); 971 urb = usb_alloc_urb(0, GFP_KERNEL);
801 if (!urb) 972 if (!urb)
802 return -ENOMEM; 973 return ERR_PTR(-ENOMEM);
803 974
804 pipe = usb_sndbulkpipe(data->udev, 975 pipe = usb_sndbulkpipe(data->udev, data->bulk_tx_ep->bEndpointAddress);
805 data->bulk_tx_ep->bEndpointAddress);
806 976
807 usb_fill_bulk_urb(urb, data->udev, pipe, 977 usb_fill_bulk_urb(urb, data->udev, pipe,
808 skb->data, skb->len, btusb_tx_complete, skb); 978 skb->data, skb->len, btusb_tx_complete, skb);
809 979
810 hdev->stat.acl_tx++; 980 skb->dev = (void *)hdev;
811 break;
812 981
813 case HCI_SCODATA_PKT: 982 return urb;
814 if (!data->isoc_tx_ep || hci_conn_num(hdev, SCO_LINK) < 1) 983}
815 return -ENODEV;
816 984
817 urb = usb_alloc_urb(BTUSB_MAX_ISOC_FRAMES, GFP_ATOMIC); 985static struct urb *alloc_isoc_urb(struct hci_dev *hdev, struct sk_buff *skb)
818 if (!urb) 986{
819 return -ENOMEM; 987 struct btusb_data *data = hci_get_drvdata(hdev);
988 struct urb *urb;
989 unsigned int pipe;
820 990
821 pipe = usb_sndisocpipe(data->udev, 991 if (!data->isoc_tx_ep)
822 data->isoc_tx_ep->bEndpointAddress); 992 return ERR_PTR(-ENODEV);
823 993
824 usb_fill_int_urb(urb, data->udev, pipe, 994 urb = usb_alloc_urb(BTUSB_MAX_ISOC_FRAMES, GFP_KERNEL);
825 skb->data, skb->len, btusb_isoc_tx_complete, 995 if (!urb)
826 skb, data->isoc_tx_ep->bInterval); 996 return ERR_PTR(-ENOMEM);
827 997
828 urb->transfer_flags = URB_ISO_ASAP; 998 pipe = usb_sndisocpipe(data->udev, data->isoc_tx_ep->bEndpointAddress);
829 999
830 __fill_isoc_descriptor(urb, skb->len, 1000 usb_fill_int_urb(urb, data->udev, pipe,
831 le16_to_cpu(data->isoc_tx_ep->wMaxPacketSize)); 1001 skb->data, skb->len, btusb_isoc_tx_complete,
1002 skb, data->isoc_tx_ep->bInterval);
832 1003
833 hdev->stat.sco_tx++; 1004 urb->transfer_flags = URB_ISO_ASAP;
834 goto skip_waking;
835 1005
836 default: 1006 __fill_isoc_descriptor(urb, skb->len,
837 return -EILSEQ; 1007 le16_to_cpu(data->isoc_tx_ep->wMaxPacketSize));
838 }
839 1008
840 err = inc_tx(data); 1009 skb->dev = (void *)hdev;
841 if (err) { 1010
842 usb_anchor_urb(urb, &data->deferred); 1011 return urb;
843 schedule_work(&data->waker); 1012}
844 err = 0; 1013
845 goto done; 1014static int submit_tx_urb(struct hci_dev *hdev, struct urb *urb)
846 } 1015{
1016 struct btusb_data *data = hci_get_drvdata(hdev);
1017 int err;
847 1018
848skip_waking:
849 usb_anchor_urb(urb, &data->tx_anchor); 1019 usb_anchor_urb(urb, &data->tx_anchor);
850 1020
851 err = usb_submit_urb(urb, GFP_ATOMIC); 1021 err = usb_submit_urb(urb, GFP_KERNEL);
852 if (err < 0) { 1022 if (err < 0) {
853 if (err != -EPERM && err != -ENODEV) 1023 if (err != -EPERM && err != -ENODEV)
854 BT_ERR("%s urb %p submission failed (%d)", 1024 BT_ERR("%s urb %p submission failed (%d)",
855 hdev->name, urb, -err); 1025 hdev->name, urb, -err);
856 kfree(urb->setup_packet); 1026 kfree(urb->setup_packet);
857 usb_unanchor_urb(urb); 1027 usb_unanchor_urb(urb);
858 } else { 1028 } else {
859 usb_mark_last_busy(data->udev); 1029 usb_mark_last_busy(data->udev);
860 } 1030 }
861 1031
862done:
863 usb_free_urb(urb); 1032 usb_free_urb(urb);
864 return err; 1033 return err;
865} 1034}
866 1035
1036static int submit_or_queue_tx_urb(struct hci_dev *hdev, struct urb *urb)
1037{
1038 struct btusb_data *data = hci_get_drvdata(hdev);
1039 unsigned long flags;
1040 bool suspending;
1041
1042 spin_lock_irqsave(&data->txlock, flags);
1043 suspending = test_bit(BTUSB_SUSPENDING, &data->flags);
1044 if (!suspending)
1045 data->tx_in_flight++;
1046 spin_unlock_irqrestore(&data->txlock, flags);
1047
1048 if (!suspending)
1049 return submit_tx_urb(hdev, urb);
1050
1051 usb_anchor_urb(urb, &data->deferred);
1052 schedule_work(&data->waker);
1053
1054 usb_free_urb(urb);
1055 return 0;
1056}
1057
1058static int btusb_send_frame(struct hci_dev *hdev, struct sk_buff *skb)
1059{
1060 struct urb *urb;
1061
1062 BT_DBG("%s", hdev->name);
1063
1064 if (!test_bit(HCI_RUNNING, &hdev->flags))
1065 return -EBUSY;
1066
1067 switch (bt_cb(skb)->pkt_type) {
1068 case HCI_COMMAND_PKT:
1069 urb = alloc_ctrl_urb(hdev, skb);
1070 if (IS_ERR(urb))
1071 return PTR_ERR(urb);
1072
1073 hdev->stat.cmd_tx++;
1074 return submit_or_queue_tx_urb(hdev, urb);
1075
1076 case HCI_ACLDATA_PKT:
1077 urb = alloc_bulk_urb(hdev, skb);
1078 if (IS_ERR(urb))
1079 return PTR_ERR(urb);
1080
1081 hdev->stat.acl_tx++;
1082 return submit_or_queue_tx_urb(hdev, urb);
1083
1084 case HCI_SCODATA_PKT:
1085 if (hci_conn_num(hdev, SCO_LINK) < 1)
1086 return -ENODEV;
1087
1088 urb = alloc_isoc_urb(hdev, skb);
1089 if (IS_ERR(urb))
1090 return PTR_ERR(urb);
1091
1092 hdev->stat.sco_tx++;
1093 return submit_tx_urb(hdev, urb);
1094 }
1095
1096 return -EILSEQ;
1097}
1098
867static void btusb_notify(struct hci_dev *hdev, unsigned int evt) 1099static void btusb_notify(struct hci_dev *hdev, unsigned int evt)
868{ 1100{
869 struct btusb_data *data = hci_get_drvdata(hdev); 1101 struct btusb_data *data = hci_get_drvdata(hdev);
@@ -940,6 +1172,7 @@ static void btusb_work(struct work_struct *work)
940 1172
941 if (hdev->voice_setting & 0x0020) { 1173 if (hdev->voice_setting & 0x0020) {
942 static const int alts[3] = { 2, 4, 5 }; 1174 static const int alts[3] = { 2, 4, 5 };
1175
943 new_alts = alts[data->sco_num - 1]; 1176 new_alts = alts[data->sco_num - 1];
944 } else { 1177 } else {
945 new_alts = data->sco_num; 1178 new_alts = data->sco_num;
@@ -1012,7 +1245,7 @@ static int btusb_setup_csr(struct hci_dev *hdev)
1012 return -PTR_ERR(skb); 1245 return -PTR_ERR(skb);
1013 } 1246 }
1014 1247
1015 rp = (struct hci_rp_read_local_version *) skb->data; 1248 rp = (struct hci_rp_read_local_version *)skb->data;
1016 1249
1017 if (!rp->status) { 1250 if (!rp->status) {
1018 if (le16_to_cpu(rp->manufacturer) != 10) { 1251 if (le16_to_cpu(rp->manufacturer) != 10) {
@@ -1050,7 +1283,7 @@ struct intel_version {
1050} __packed; 1283} __packed;
1051 1284
1052static const struct firmware *btusb_setup_intel_get_fw(struct hci_dev *hdev, 1285static const struct firmware *btusb_setup_intel_get_fw(struct hci_dev *hdev,
1053 struct intel_version *ver) 1286 struct intel_version *ver)
1054{ 1287{
1055 const struct firmware *fw; 1288 const struct firmware *fw;
1056 char fwname[64]; 1289 char fwname[64];
@@ -1226,7 +1459,7 @@ static int btusb_check_bdaddr_intel(struct hci_dev *hdev)
1226 return -EIO; 1459 return -EIO;
1227 } 1460 }
1228 1461
1229 rp = (struct hci_rp_read_bd_addr *) skb->data; 1462 rp = (struct hci_rp_read_bd_addr *)skb->data;
1230 if (rp->status) { 1463 if (rp->status) {
1231 BT_ERR("%s Intel device address result failed (%02x)", 1464 BT_ERR("%s Intel device address result failed (%02x)",
1232 hdev->name, rp->status); 1465 hdev->name, rp->status);
@@ -1356,6 +1589,7 @@ static int btusb_setup_intel(struct hci_dev *hdev)
1356 1589
1357 if (skb->data[0]) { 1590 if (skb->data[0]) {
1358 u8 evt_status = skb->data[0]; 1591 u8 evt_status = skb->data[0];
1592
1359 BT_ERR("%s enable Intel manufacturer mode event failed (%02x)", 1593 BT_ERR("%s enable Intel manufacturer mode event failed (%02x)",
1360 hdev->name, evt_status); 1594 hdev->name, evt_status);
1361 kfree_skb(skb); 1595 kfree_skb(skb);
@@ -1465,7 +1699,7 @@ static int btusb_set_bdaddr_intel(struct hci_dev *hdev, const bdaddr_t *bdaddr)
1465 if (IS_ERR(skb)) { 1699 if (IS_ERR(skb)) {
1466 ret = PTR_ERR(skb); 1700 ret = PTR_ERR(skb);
1467 BT_ERR("%s: changing Intel device address failed (%ld)", 1701 BT_ERR("%s: changing Intel device address failed (%ld)",
1468 hdev->name, ret); 1702 hdev->name, ret);
1469 return ret; 1703 return ret;
1470 } 1704 }
1471 kfree_skb(skb); 1705 kfree_skb(skb);
@@ -1540,19 +1774,19 @@ static int btusb_setup_bcm_patchram(struct hci_dev *hdev)
1540 if (IS_ERR(skb)) { 1774 if (IS_ERR(skb)) {
1541 ret = PTR_ERR(skb); 1775 ret = PTR_ERR(skb);
1542 BT_ERR("%s: HCI_OP_READ_LOCAL_VERSION failed (%ld)", 1776 BT_ERR("%s: HCI_OP_READ_LOCAL_VERSION failed (%ld)",
1543 hdev->name, ret); 1777 hdev->name, ret);
1544 goto done; 1778 goto done;
1545 } 1779 }
1546 1780
1547 if (skb->len != sizeof(*ver)) { 1781 if (skb->len != sizeof(*ver)) {
1548 BT_ERR("%s: HCI_OP_READ_LOCAL_VERSION event length mismatch", 1782 BT_ERR("%s: HCI_OP_READ_LOCAL_VERSION event length mismatch",
1549 hdev->name); 1783 hdev->name);
1550 kfree_skb(skb); 1784 kfree_skb(skb);
1551 ret = -EIO; 1785 ret = -EIO;
1552 goto done; 1786 goto done;
1553 } 1787 }
1554 1788
1555 ver = (struct hci_rp_read_local_version *) skb->data; 1789 ver = (struct hci_rp_read_local_version *)skb->data;
1556 BT_INFO("%s: BCM: patching hci_ver=%02x hci_rev=%04x lmp_ver=%02x " 1790 BT_INFO("%s: BCM: patching hci_ver=%02x hci_rev=%04x lmp_ver=%02x "
1557 "lmp_subver=%04x", hdev->name, ver->hci_ver, ver->hci_rev, 1791 "lmp_subver=%04x", hdev->name, ver->hci_ver, ver->hci_rev,
1558 ver->lmp_ver, ver->lmp_subver); 1792 ver->lmp_ver, ver->lmp_subver);
@@ -1563,7 +1797,7 @@ static int btusb_setup_bcm_patchram(struct hci_dev *hdev)
1563 if (IS_ERR(skb)) { 1797 if (IS_ERR(skb)) {
1564 ret = PTR_ERR(skb); 1798 ret = PTR_ERR(skb);
1565 BT_ERR("%s: BCM: Download Minidrv command failed (%ld)", 1799 BT_ERR("%s: BCM: Download Minidrv command failed (%ld)",
1566 hdev->name, ret); 1800 hdev->name, ret);
1567 goto reset_fw; 1801 goto reset_fw;
1568 } 1802 }
1569 kfree_skb(skb); 1803 kfree_skb(skb);
@@ -1575,13 +1809,13 @@ static int btusb_setup_bcm_patchram(struct hci_dev *hdev)
1575 fw_size = fw->size; 1809 fw_size = fw->size;
1576 1810
1577 while (fw_size >= sizeof(*cmd)) { 1811 while (fw_size >= sizeof(*cmd)) {
1578 cmd = (struct hci_command_hdr *) fw_ptr; 1812 cmd = (struct hci_command_hdr *)fw_ptr;
1579 fw_ptr += sizeof(*cmd); 1813 fw_ptr += sizeof(*cmd);
1580 fw_size -= sizeof(*cmd); 1814 fw_size -= sizeof(*cmd);
1581 1815
1582 if (fw_size < cmd->plen) { 1816 if (fw_size < cmd->plen) {
1583 BT_ERR("%s: BCM: patch %s is corrupted", 1817 BT_ERR("%s: BCM: patch %s is corrupted",
1584 hdev->name, fw_name); 1818 hdev->name, fw_name);
1585 ret = -EINVAL; 1819 ret = -EINVAL;
1586 goto reset_fw; 1820 goto reset_fw;
1587 } 1821 }
@@ -1597,7 +1831,7 @@ static int btusb_setup_bcm_patchram(struct hci_dev *hdev)
1597 if (IS_ERR(skb)) { 1831 if (IS_ERR(skb)) {
1598 ret = PTR_ERR(skb); 1832 ret = PTR_ERR(skb);
1599 BT_ERR("%s: BCM: patch command %04x failed (%ld)", 1833 BT_ERR("%s: BCM: patch command %04x failed (%ld)",
1600 hdev->name, opcode, ret); 1834 hdev->name, opcode, ret);
1601 goto reset_fw; 1835 goto reset_fw;
1602 } 1836 }
1603 kfree_skb(skb); 1837 kfree_skb(skb);
@@ -1622,19 +1856,19 @@ reset_fw:
1622 if (IS_ERR(skb)) { 1856 if (IS_ERR(skb)) {
1623 ret = PTR_ERR(skb); 1857 ret = PTR_ERR(skb);
1624 BT_ERR("%s: HCI_OP_READ_LOCAL_VERSION failed (%ld)", 1858 BT_ERR("%s: HCI_OP_READ_LOCAL_VERSION failed (%ld)",
1625 hdev->name, ret); 1859 hdev->name, ret);
1626 goto done; 1860 goto done;
1627 } 1861 }
1628 1862
1629 if (skb->len != sizeof(*ver)) { 1863 if (skb->len != sizeof(*ver)) {
1630 BT_ERR("%s: HCI_OP_READ_LOCAL_VERSION event length mismatch", 1864 BT_ERR("%s: HCI_OP_READ_LOCAL_VERSION event length mismatch",
1631 hdev->name); 1865 hdev->name);
1632 kfree_skb(skb); 1866 kfree_skb(skb);
1633 ret = -EIO; 1867 ret = -EIO;
1634 goto done; 1868 goto done;
1635 } 1869 }
1636 1870
1637 ver = (struct hci_rp_read_local_version *) skb->data; 1871 ver = (struct hci_rp_read_local_version *)skb->data;
1638 BT_INFO("%s: BCM: firmware hci_ver=%02x hci_rev=%04x lmp_ver=%02x " 1872 BT_INFO("%s: BCM: firmware hci_ver=%02x hci_rev=%04x lmp_ver=%02x "
1639 "lmp_subver=%04x", hdev->name, ver->hci_ver, ver->hci_rev, 1873 "lmp_subver=%04x", hdev->name, ver->hci_ver, ver->hci_rev,
1640 ver->lmp_ver, ver->lmp_subver); 1874 ver->lmp_ver, ver->lmp_subver);
@@ -1646,19 +1880,19 @@ reset_fw:
1646 if (IS_ERR(skb)) { 1880 if (IS_ERR(skb)) {
1647 ret = PTR_ERR(skb); 1881 ret = PTR_ERR(skb);
1648 BT_ERR("%s: HCI_OP_READ_BD_ADDR failed (%ld)", 1882 BT_ERR("%s: HCI_OP_READ_BD_ADDR failed (%ld)",
1649 hdev->name, ret); 1883 hdev->name, ret);
1650 goto done; 1884 goto done;
1651 } 1885 }
1652 1886
1653 if (skb->len != sizeof(*bda)) { 1887 if (skb->len != sizeof(*bda)) {
1654 BT_ERR("%s: HCI_OP_READ_BD_ADDR event length mismatch", 1888 BT_ERR("%s: HCI_OP_READ_BD_ADDR event length mismatch",
1655 hdev->name); 1889 hdev->name);
1656 kfree_skb(skb); 1890 kfree_skb(skb);
1657 ret = -EIO; 1891 ret = -EIO;
1658 goto done; 1892 goto done;
1659 } 1893 }
1660 1894
1661 bda = (struct hci_rp_read_bd_addr *) skb->data; 1895 bda = (struct hci_rp_read_bd_addr *)skb->data;
1662 if (bda->status) { 1896 if (bda->status) {
1663 BT_ERR("%s: HCI_OP_READ_BD_ADDR error status (%02x)", 1897 BT_ERR("%s: HCI_OP_READ_BD_ADDR error status (%02x)",
1664 hdev->name, bda->status); 1898 hdev->name, bda->status);
@@ -1693,7 +1927,7 @@ static int btusb_set_bdaddr_bcm(struct hci_dev *hdev, const bdaddr_t *bdaddr)
1693 if (IS_ERR(skb)) { 1927 if (IS_ERR(skb)) {
1694 ret = PTR_ERR(skb); 1928 ret = PTR_ERR(skb);
1695 BT_ERR("%s: BCM: Change address command failed (%ld)", 1929 BT_ERR("%s: BCM: Change address command failed (%ld)",
1696 hdev->name, ret); 1930 hdev->name, ret);
1697 return ret; 1931 return ret;
1698 } 1932 }
1699 kfree_skb(skb); 1933 kfree_skb(skb);
@@ -1702,7 +1936,7 @@ static int btusb_set_bdaddr_bcm(struct hci_dev *hdev, const bdaddr_t *bdaddr)
1702} 1936}
1703 1937
1704static int btusb_probe(struct usb_interface *intf, 1938static int btusb_probe(struct usb_interface *intf,
1705 const struct usb_device_id *id) 1939 const struct usb_device_id *id)
1706{ 1940{
1707 struct usb_endpoint_descriptor *ep_desc; 1941 struct usb_endpoint_descriptor *ep_desc;
1708 struct btusb_data *data; 1942 struct btusb_data *data;
@@ -1717,6 +1951,7 @@ static int btusb_probe(struct usb_interface *intf,
1717 1951
1718 if (!id->driver_info) { 1952 if (!id->driver_info) {
1719 const struct usb_device_id *match; 1953 const struct usb_device_id *match;
1954
1720 match = usb_match_id(intf, blacklist_table); 1955 match = usb_match_id(intf, blacklist_table);
1721 if (match) 1956 if (match)
1722 id = match; 1957 id = match;
@@ -1765,17 +2000,16 @@ static int btusb_probe(struct usb_interface *intf,
1765 data->udev = interface_to_usbdev(intf); 2000 data->udev = interface_to_usbdev(intf);
1766 data->intf = intf; 2001 data->intf = intf;
1767 2002
1768 spin_lock_init(&data->lock);
1769
1770 INIT_WORK(&data->work, btusb_work); 2003 INIT_WORK(&data->work, btusb_work);
1771 INIT_WORK(&data->waker, btusb_waker); 2004 INIT_WORK(&data->waker, btusb_waker);
2005 init_usb_anchor(&data->deferred);
2006 init_usb_anchor(&data->tx_anchor);
1772 spin_lock_init(&data->txlock); 2007 spin_lock_init(&data->txlock);
1773 2008
1774 init_usb_anchor(&data->tx_anchor);
1775 init_usb_anchor(&data->intr_anchor); 2009 init_usb_anchor(&data->intr_anchor);
1776 init_usb_anchor(&data->bulk_anchor); 2010 init_usb_anchor(&data->bulk_anchor);
1777 init_usb_anchor(&data->isoc_anchor); 2011 init_usb_anchor(&data->isoc_anchor);
1778 init_usb_anchor(&data->deferred); 2012 spin_lock_init(&data->rxlock);
1779 2013
1780 hdev = hci_alloc_dev(); 2014 hdev = hci_alloc_dev();
1781 if (!hdev) 2015 if (!hdev)
@@ -1867,7 +2101,7 @@ static int btusb_probe(struct usb_interface *intf,
1867 2101
1868 if (data->isoc) { 2102 if (data->isoc) {
1869 err = usb_driver_claim_interface(&btusb_driver, 2103 err = usb_driver_claim_interface(&btusb_driver,
1870 data->isoc, data); 2104 data->isoc, data);
1871 if (err < 0) { 2105 if (err < 0) {
1872 hci_free_dev(hdev); 2106 hci_free_dev(hdev);
1873 return err; 2107 return err;
@@ -1908,6 +2142,7 @@ static void btusb_disconnect(struct usb_interface *intf)
1908 else if (data->isoc) 2142 else if (data->isoc)
1909 usb_driver_release_interface(&btusb_driver, data->isoc); 2143 usb_driver_release_interface(&btusb_driver, data->isoc);
1910 2144
2145 btusb_free_frags(data);
1911 hci_free_dev(hdev); 2146 hci_free_dev(hdev);
1912} 2147}
1913 2148