aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/zd1211rw/zd_usb.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/zd1211rw/zd_usb.c')
-rw-r--r--drivers/net/wireless/zd1211rw/zd_usb.c651
1 files changed, 524 insertions, 127 deletions
diff --git a/drivers/net/wireless/zd1211rw/zd_usb.c b/drivers/net/wireless/zd1211rw/zd_usb.c
index 818e1480ca93..631194d49828 100644
--- a/drivers/net/wireless/zd1211rw/zd_usb.c
+++ b/drivers/net/wireless/zd1211rw/zd_usb.c
@@ -55,10 +55,12 @@ static struct usb_device_id usb_ids[] = {
55 { USB_DEVICE(0x129b, 0x1666), .driver_info = DEVICE_ZD1211 }, 55 { USB_DEVICE(0x129b, 0x1666), .driver_info = DEVICE_ZD1211 },
56 { USB_DEVICE(0x13b1, 0x001e), .driver_info = DEVICE_ZD1211 }, 56 { USB_DEVICE(0x13b1, 0x001e), .driver_info = DEVICE_ZD1211 },
57 { USB_DEVICE(0x1435, 0x0711), .driver_info = DEVICE_ZD1211 }, 57 { USB_DEVICE(0x1435, 0x0711), .driver_info = DEVICE_ZD1211 },
58 { USB_DEVICE(0x14ea, 0xab10), .driver_info = DEVICE_ZD1211 },
58 { USB_DEVICE(0x14ea, 0xab13), .driver_info = DEVICE_ZD1211 }, 59 { USB_DEVICE(0x14ea, 0xab13), .driver_info = DEVICE_ZD1211 },
59 { USB_DEVICE(0x157e, 0x300a), .driver_info = DEVICE_ZD1211 }, 60 { USB_DEVICE(0x157e, 0x300a), .driver_info = DEVICE_ZD1211 },
60 { USB_DEVICE(0x157e, 0x300b), .driver_info = DEVICE_ZD1211 }, 61 { USB_DEVICE(0x157e, 0x300b), .driver_info = DEVICE_ZD1211 },
61 { USB_DEVICE(0x157e, 0x3204), .driver_info = DEVICE_ZD1211 }, 62 { USB_DEVICE(0x157e, 0x3204), .driver_info = DEVICE_ZD1211 },
63 { USB_DEVICE(0x157e, 0x3207), .driver_info = DEVICE_ZD1211 },
62 { USB_DEVICE(0x1740, 0x2000), .driver_info = DEVICE_ZD1211 }, 64 { USB_DEVICE(0x1740, 0x2000), .driver_info = DEVICE_ZD1211 },
63 { USB_DEVICE(0x6891, 0xa727), .driver_info = DEVICE_ZD1211 }, 65 { USB_DEVICE(0x6891, 0xa727), .driver_info = DEVICE_ZD1211 },
64 /* ZD1211B */ 66 /* ZD1211B */
@@ -92,6 +94,7 @@ static struct usb_device_id usb_ids[] = {
92 { USB_DEVICE(0x157e, 0x300d), .driver_info = DEVICE_ZD1211B }, 94 { USB_DEVICE(0x157e, 0x300d), .driver_info = DEVICE_ZD1211B },
93 { USB_DEVICE(0x1582, 0x6003), .driver_info = DEVICE_ZD1211B }, 95 { USB_DEVICE(0x1582, 0x6003), .driver_info = DEVICE_ZD1211B },
94 { USB_DEVICE(0x2019, 0x5303), .driver_info = DEVICE_ZD1211B }, 96 { USB_DEVICE(0x2019, 0x5303), .driver_info = DEVICE_ZD1211B },
97 { USB_DEVICE(0x2019, 0xed01), .driver_info = DEVICE_ZD1211B },
95 /* "Driverless" devices that need ejecting */ 98 /* "Driverless" devices that need ejecting */
96 { USB_DEVICE(0x0ace, 0x2011), .driver_info = DEVICE_INSTALLER }, 99 { USB_DEVICE(0x0ace, 0x2011), .driver_info = DEVICE_INSTALLER },
97 { USB_DEVICE(0x0ace, 0x20ff), .driver_info = DEVICE_INSTALLER }, 100 { USB_DEVICE(0x0ace, 0x20ff), .driver_info = DEVICE_INSTALLER },
@@ -375,8 +378,10 @@ static inline void handle_regs_int(struct urb *urb)
375 int_num = le16_to_cpu(*(__le16 *)(urb->transfer_buffer+2)); 378 int_num = le16_to_cpu(*(__le16 *)(urb->transfer_buffer+2));
376 if (int_num == CR_INTERRUPT) { 379 if (int_num == CR_INTERRUPT) {
377 struct zd_mac *mac = zd_hw_mac(zd_usb_to_hw(urb->context)); 380 struct zd_mac *mac = zd_hw_mac(zd_usb_to_hw(urb->context));
381 spin_lock(&mac->lock);
378 memcpy(&mac->intr_buffer, urb->transfer_buffer, 382 memcpy(&mac->intr_buffer, urb->transfer_buffer,
379 USB_MAX_EP_INT_BUFFER); 383 USB_MAX_EP_INT_BUFFER);
384 spin_unlock(&mac->lock);
380 schedule_work(&mac->process_intr); 385 schedule_work(&mac->process_intr);
381 } else if (intr->read_regs_enabled) { 386 } else if (intr->read_regs_enabled) {
382 intr->read_regs.length = len = urb->actual_length; 387 intr->read_regs.length = len = urb->actual_length;
@@ -407,8 +412,10 @@ static void int_urb_complete(struct urb *urb)
407 case -ENOENT: 412 case -ENOENT:
408 case -ECONNRESET: 413 case -ECONNRESET:
409 case -EPIPE: 414 case -EPIPE:
410 goto kfree; 415 dev_dbg_f(urb_dev(urb), "urb %p error %d\n", urb, urb->status);
416 return;
411 default: 417 default:
418 dev_dbg_f(urb_dev(urb), "urb %p error %d\n", urb, urb->status);
412 goto resubmit; 419 goto resubmit;
413 } 420 }
414 421
@@ -439,12 +446,11 @@ static void int_urb_complete(struct urb *urb)
439resubmit: 446resubmit:
440 r = usb_submit_urb(urb, GFP_ATOMIC); 447 r = usb_submit_urb(urb, GFP_ATOMIC);
441 if (r) { 448 if (r) {
442 dev_dbg_f(urb_dev(urb), "resubmit urb %p\n", urb); 449 dev_dbg_f(urb_dev(urb), "error: resubmit urb %p err code %d\n",
443 goto kfree; 450 urb, r);
451 /* TODO: add worker to reset intr->urb */
444 } 452 }
445 return; 453 return;
446kfree:
447 kfree(urb->transfer_buffer);
448} 454}
449 455
450static inline int int_urb_interval(struct usb_device *udev) 456static inline int int_urb_interval(struct usb_device *udev)
@@ -475,9 +481,8 @@ static inline int usb_int_enabled(struct zd_usb *usb)
475int zd_usb_enable_int(struct zd_usb *usb) 481int zd_usb_enable_int(struct zd_usb *usb)
476{ 482{
477 int r; 483 int r;
478 struct usb_device *udev; 484 struct usb_device *udev = zd_usb_to_usbdev(usb);
479 struct zd_usb_interrupt *intr = &usb->intr; 485 struct zd_usb_interrupt *intr = &usb->intr;
480 void *transfer_buffer = NULL;
481 struct urb *urb; 486 struct urb *urb;
482 487
483 dev_dbg_f(zd_usb_dev(usb), "\n"); 488 dev_dbg_f(zd_usb_dev(usb), "\n");
@@ -498,20 +503,21 @@ int zd_usb_enable_int(struct zd_usb *usb)
498 intr->urb = urb; 503 intr->urb = urb;
499 spin_unlock_irq(&intr->lock); 504 spin_unlock_irq(&intr->lock);
500 505
501 /* TODO: make it a DMA buffer */
502 r = -ENOMEM; 506 r = -ENOMEM;
503 transfer_buffer = kmalloc(USB_MAX_EP_INT_BUFFER, GFP_KERNEL); 507 intr->buffer = usb_alloc_coherent(udev, USB_MAX_EP_INT_BUFFER,
504 if (!transfer_buffer) { 508 GFP_KERNEL, &intr->buffer_dma);
509 if (!intr->buffer) {
505 dev_dbg_f(zd_usb_dev(usb), 510 dev_dbg_f(zd_usb_dev(usb),
506 "couldn't allocate transfer_buffer\n"); 511 "couldn't allocate transfer_buffer\n");
507 goto error_set_urb_null; 512 goto error_set_urb_null;
508 } 513 }
509 514
510 udev = zd_usb_to_usbdev(usb);
511 usb_fill_int_urb(urb, udev, usb_rcvintpipe(udev, EP_INT_IN), 515 usb_fill_int_urb(urb, udev, usb_rcvintpipe(udev, EP_INT_IN),
512 transfer_buffer, USB_MAX_EP_INT_BUFFER, 516 intr->buffer, USB_MAX_EP_INT_BUFFER,
513 int_urb_complete, usb, 517 int_urb_complete, usb,
514 intr->interval); 518 intr->interval);
519 urb->transfer_dma = intr->buffer_dma;
520 urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
515 521
516 dev_dbg_f(zd_usb_dev(usb), "submit urb %p\n", intr->urb); 522 dev_dbg_f(zd_usb_dev(usb), "submit urb %p\n", intr->urb);
517 r = usb_submit_urb(urb, GFP_KERNEL); 523 r = usb_submit_urb(urb, GFP_KERNEL);
@@ -523,7 +529,8 @@ int zd_usb_enable_int(struct zd_usb *usb)
523 529
524 return 0; 530 return 0;
525error: 531error:
526 kfree(transfer_buffer); 532 usb_free_coherent(udev, USB_MAX_EP_INT_BUFFER,
533 intr->buffer, intr->buffer_dma);
527error_set_urb_null: 534error_set_urb_null:
528 spin_lock_irq(&intr->lock); 535 spin_lock_irq(&intr->lock);
529 intr->urb = NULL; 536 intr->urb = NULL;
@@ -537,8 +544,11 @@ out:
537void zd_usb_disable_int(struct zd_usb *usb) 544void zd_usb_disable_int(struct zd_usb *usb)
538{ 545{
539 unsigned long flags; 546 unsigned long flags;
547 struct usb_device *udev = zd_usb_to_usbdev(usb);
540 struct zd_usb_interrupt *intr = &usb->intr; 548 struct zd_usb_interrupt *intr = &usb->intr;
541 struct urb *urb; 549 struct urb *urb;
550 void *buffer;
551 dma_addr_t buffer_dma;
542 552
543 spin_lock_irqsave(&intr->lock, flags); 553 spin_lock_irqsave(&intr->lock, flags);
544 urb = intr->urb; 554 urb = intr->urb;
@@ -547,11 +557,18 @@ void zd_usb_disable_int(struct zd_usb *usb)
547 return; 557 return;
548 } 558 }
549 intr->urb = NULL; 559 intr->urb = NULL;
560 buffer = intr->buffer;
561 buffer_dma = intr->buffer_dma;
562 intr->buffer = NULL;
550 spin_unlock_irqrestore(&intr->lock, flags); 563 spin_unlock_irqrestore(&intr->lock, flags);
551 564
552 usb_kill_urb(urb); 565 usb_kill_urb(urb);
553 dev_dbg_f(zd_usb_dev(usb), "urb %p killed\n", urb); 566 dev_dbg_f(zd_usb_dev(usb), "urb %p killed\n", urb);
554 usb_free_urb(urb); 567 usb_free_urb(urb);
568
569 if (buffer)
570 usb_free_coherent(udev, USB_MAX_EP_INT_BUFFER,
571 buffer, buffer_dma);
555} 572}
556 573
557static void handle_rx_packet(struct zd_usb *usb, const u8 *buffer, 574static void handle_rx_packet(struct zd_usb *usb, const u8 *buffer,
@@ -599,6 +616,7 @@ static void handle_rx_packet(struct zd_usb *usb, const u8 *buffer,
599 616
600static void rx_urb_complete(struct urb *urb) 617static void rx_urb_complete(struct urb *urb)
601{ 618{
619 int r;
602 struct zd_usb *usb; 620 struct zd_usb *usb;
603 struct zd_usb_rx *rx; 621 struct zd_usb_rx *rx;
604 const u8 *buffer; 622 const u8 *buffer;
@@ -613,6 +631,7 @@ static void rx_urb_complete(struct urb *urb)
613 case -ENOENT: 631 case -ENOENT:
614 case -ECONNRESET: 632 case -ECONNRESET:
615 case -EPIPE: 633 case -EPIPE:
634 dev_dbg_f(urb_dev(urb), "urb %p error %d\n", urb, urb->status);
616 return; 635 return;
617 default: 636 default:
618 dev_dbg_f(urb_dev(urb), "urb %p error %d\n", urb, urb->status); 637 dev_dbg_f(urb_dev(urb), "urb %p error %d\n", urb, urb->status);
@@ -624,6 +643,8 @@ static void rx_urb_complete(struct urb *urb)
624 usb = urb->context; 643 usb = urb->context;
625 rx = &usb->rx; 644 rx = &usb->rx;
626 645
646 tasklet_schedule(&rx->reset_timer_tasklet);
647
627 if (length%rx->usb_packet_size > rx->usb_packet_size-4) { 648 if (length%rx->usb_packet_size > rx->usb_packet_size-4) {
628 /* If there is an old first fragment, we don't care. */ 649 /* If there is an old first fragment, we don't care. */
629 dev_dbg_f(urb_dev(urb), "*** first fragment ***\n"); 650 dev_dbg_f(urb_dev(urb), "*** first fragment ***\n");
@@ -652,7 +673,9 @@ static void rx_urb_complete(struct urb *urb)
652 } 673 }
653 674
654resubmit: 675resubmit:
655 usb_submit_urb(urb, GFP_ATOMIC); 676 r = usb_submit_urb(urb, GFP_ATOMIC);
677 if (r)
678 dev_dbg_f(urb_dev(urb), "urb %p resubmit error %d\n", urb, r);
656} 679}
657 680
658static struct urb *alloc_rx_urb(struct zd_usb *usb) 681static struct urb *alloc_rx_urb(struct zd_usb *usb)
@@ -688,7 +711,7 @@ static void free_rx_urb(struct urb *urb)
688 usb_free_urb(urb); 711 usb_free_urb(urb);
689} 712}
690 713
691int zd_usb_enable_rx(struct zd_usb *usb) 714static int __zd_usb_enable_rx(struct zd_usb *usb)
692{ 715{
693 int i, r; 716 int i, r;
694 struct zd_usb_rx *rx = &usb->rx; 717 struct zd_usb_rx *rx = &usb->rx;
@@ -740,7 +763,21 @@ error:
740 return r; 763 return r;
741} 764}
742 765
743void zd_usb_disable_rx(struct zd_usb *usb) 766int zd_usb_enable_rx(struct zd_usb *usb)
767{
768 int r;
769 struct zd_usb_rx *rx = &usb->rx;
770
771 mutex_lock(&rx->setup_mutex);
772 r = __zd_usb_enable_rx(usb);
773 mutex_unlock(&rx->setup_mutex);
774
775 zd_usb_reset_rx_idle_timer(usb);
776
777 return r;
778}
779
780static void __zd_usb_disable_rx(struct zd_usb *usb)
744{ 781{
745 int i; 782 int i;
746 unsigned long flags; 783 unsigned long flags;
@@ -767,6 +804,41 @@ void zd_usb_disable_rx(struct zd_usb *usb)
767 spin_unlock_irqrestore(&rx->lock, flags); 804 spin_unlock_irqrestore(&rx->lock, flags);
768} 805}
769 806
807void zd_usb_disable_rx(struct zd_usb *usb)
808{
809 struct zd_usb_rx *rx = &usb->rx;
810
811 mutex_lock(&rx->setup_mutex);
812 __zd_usb_disable_rx(usb);
813 mutex_unlock(&rx->setup_mutex);
814
815 tasklet_kill(&rx->reset_timer_tasklet);
816 cancel_delayed_work_sync(&rx->idle_work);
817}
818
819static void zd_usb_reset_rx(struct zd_usb *usb)
820{
821 bool do_reset;
822 struct zd_usb_rx *rx = &usb->rx;
823 unsigned long flags;
824
825 mutex_lock(&rx->setup_mutex);
826
827 spin_lock_irqsave(&rx->lock, flags);
828 do_reset = rx->urbs != NULL;
829 spin_unlock_irqrestore(&rx->lock, flags);
830
831 if (do_reset) {
832 __zd_usb_disable_rx(usb);
833 __zd_usb_enable_rx(usb);
834 }
835
836 mutex_unlock(&rx->setup_mutex);
837
838 if (do_reset)
839 zd_usb_reset_rx_idle_timer(usb);
840}
841
770/** 842/**
771 * zd_usb_disable_tx - disable transmission 843 * zd_usb_disable_tx - disable transmission
772 * @usb: the zd1211rw-private USB structure 844 * @usb: the zd1211rw-private USB structure
@@ -777,19 +849,21 @@ void zd_usb_disable_tx(struct zd_usb *usb)
777{ 849{
778 struct zd_usb_tx *tx = &usb->tx; 850 struct zd_usb_tx *tx = &usb->tx;
779 unsigned long flags; 851 unsigned long flags;
780 struct list_head *pos, *n; 852
853 atomic_set(&tx->enabled, 0);
854
855 /* kill all submitted tx-urbs */
856 usb_kill_anchored_urbs(&tx->submitted);
781 857
782 spin_lock_irqsave(&tx->lock, flags); 858 spin_lock_irqsave(&tx->lock, flags);
783 list_for_each_safe(pos, n, &tx->free_urb_list) { 859 WARN_ON(!skb_queue_empty(&tx->submitted_skbs));
784 list_del(pos); 860 WARN_ON(tx->submitted_urbs != 0);
785 usb_free_urb(list_entry(pos, struct urb, urb_list));
786 }
787 tx->enabled = 0;
788 tx->submitted_urbs = 0; 861 tx->submitted_urbs = 0;
862 spin_unlock_irqrestore(&tx->lock, flags);
863
789 /* The stopped state is ignored, relying on ieee80211_wake_queues() 864 /* The stopped state is ignored, relying on ieee80211_wake_queues()
790 * in a potentionally following zd_usb_enable_tx(). 865 * in a potentionally following zd_usb_enable_tx().
791 */ 866 */
792 spin_unlock_irqrestore(&tx->lock, flags);
793} 867}
794 868
795/** 869/**
@@ -805,63 +879,13 @@ void zd_usb_enable_tx(struct zd_usb *usb)
805 struct zd_usb_tx *tx = &usb->tx; 879 struct zd_usb_tx *tx = &usb->tx;
806 880
807 spin_lock_irqsave(&tx->lock, flags); 881 spin_lock_irqsave(&tx->lock, flags);
808 tx->enabled = 1; 882 atomic_set(&tx->enabled, 1);
809 tx->submitted_urbs = 0; 883 tx->submitted_urbs = 0;
810 ieee80211_wake_queues(zd_usb_to_hw(usb)); 884 ieee80211_wake_queues(zd_usb_to_hw(usb));
811 tx->stopped = 0; 885 tx->stopped = 0;
812 spin_unlock_irqrestore(&tx->lock, flags); 886 spin_unlock_irqrestore(&tx->lock, flags);
813} 887}
814 888
815/**
816 * alloc_tx_urb - provides an tx URB
817 * @usb: a &struct zd_usb pointer
818 *
819 * Allocates a new URB. If possible takes the urb from the free list in
820 * usb->tx.
821 */
822static struct urb *alloc_tx_urb(struct zd_usb *usb)
823{
824 struct zd_usb_tx *tx = &usb->tx;
825 unsigned long flags;
826 struct list_head *entry;
827 struct urb *urb;
828
829 spin_lock_irqsave(&tx->lock, flags);
830 if (list_empty(&tx->free_urb_list)) {
831 urb = usb_alloc_urb(0, GFP_ATOMIC);
832 goto out;
833 }
834 entry = tx->free_urb_list.next;
835 list_del(entry);
836 urb = list_entry(entry, struct urb, urb_list);
837out:
838 spin_unlock_irqrestore(&tx->lock, flags);
839 return urb;
840}
841
842/**
843 * free_tx_urb - frees a used tx URB
844 * @usb: a &struct zd_usb pointer
845 * @urb: URB to be freed
846 *
847 * Frees the transmission URB, which means to put it on the free URB
848 * list.
849 */
850static void free_tx_urb(struct zd_usb *usb, struct urb *urb)
851{
852 struct zd_usb_tx *tx = &usb->tx;
853 unsigned long flags;
854
855 spin_lock_irqsave(&tx->lock, flags);
856 if (!tx->enabled) {
857 usb_free_urb(urb);
858 goto out;
859 }
860 list_add(&urb->urb_list, &tx->free_urb_list);
861out:
862 spin_unlock_irqrestore(&tx->lock, flags);
863}
864
865static void tx_dec_submitted_urbs(struct zd_usb *usb) 889static void tx_dec_submitted_urbs(struct zd_usb *usb)
866{ 890{
867 struct zd_usb_tx *tx = &usb->tx; 891 struct zd_usb_tx *tx = &usb->tx;
@@ -903,6 +927,16 @@ static void tx_urb_complete(struct urb *urb)
903 struct sk_buff *skb; 927 struct sk_buff *skb;
904 struct ieee80211_tx_info *info; 928 struct ieee80211_tx_info *info;
905 struct zd_usb *usb; 929 struct zd_usb *usb;
930 struct zd_usb_tx *tx;
931
932 skb = (struct sk_buff *)urb->context;
933 info = IEEE80211_SKB_CB(skb);
934 /*
935 * grab 'usb' pointer before handing off the skb (since
936 * it might be freed by zd_mac_tx_to_dev or mac80211)
937 */
938 usb = &zd_hw_mac(info->rate_driver_data[0])->chip.usb;
939 tx = &usb->tx;
906 940
907 switch (urb->status) { 941 switch (urb->status) {
908 case 0: 942 case 0:
@@ -920,20 +954,16 @@ static void tx_urb_complete(struct urb *urb)
920 goto resubmit; 954 goto resubmit;
921 } 955 }
922free_urb: 956free_urb:
923 skb = (struct sk_buff *)urb->context; 957 skb_unlink(skb, &usb->tx.submitted_skbs);
924 /*
925 * grab 'usb' pointer before handing off the skb (since
926 * it might be freed by zd_mac_tx_to_dev or mac80211)
927 */
928 info = IEEE80211_SKB_CB(skb);
929 usb = &zd_hw_mac(info->rate_driver_data[0])->chip.usb;
930 zd_mac_tx_to_dev(skb, urb->status); 958 zd_mac_tx_to_dev(skb, urb->status);
931 free_tx_urb(usb, urb); 959 usb_free_urb(urb);
932 tx_dec_submitted_urbs(usb); 960 tx_dec_submitted_urbs(usb);
933 return; 961 return;
934resubmit: 962resubmit:
963 usb_anchor_urb(urb, &tx->submitted);
935 r = usb_submit_urb(urb, GFP_ATOMIC); 964 r = usb_submit_urb(urb, GFP_ATOMIC);
936 if (r) { 965 if (r) {
966 usb_unanchor_urb(urb);
937 dev_dbg_f(urb_dev(urb), "error resubmit urb %p %d\n", urb, r); 967 dev_dbg_f(urb_dev(urb), "error resubmit urb %p %d\n", urb, r);
938 goto free_urb; 968 goto free_urb;
939 } 969 }
@@ -954,10 +984,17 @@ resubmit:
954int zd_usb_tx(struct zd_usb *usb, struct sk_buff *skb) 984int zd_usb_tx(struct zd_usb *usb, struct sk_buff *skb)
955{ 985{
956 int r; 986 int r;
987 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
957 struct usb_device *udev = zd_usb_to_usbdev(usb); 988 struct usb_device *udev = zd_usb_to_usbdev(usb);
958 struct urb *urb; 989 struct urb *urb;
990 struct zd_usb_tx *tx = &usb->tx;
991
992 if (!atomic_read(&tx->enabled)) {
993 r = -ENOENT;
994 goto out;
995 }
959 996
960 urb = alloc_tx_urb(usb); 997 urb = usb_alloc_urb(0, GFP_ATOMIC);
961 if (!urb) { 998 if (!urb) {
962 r = -ENOMEM; 999 r = -ENOMEM;
963 goto out; 1000 goto out;
@@ -966,17 +1003,125 @@ int zd_usb_tx(struct zd_usb *usb, struct sk_buff *skb)
966 usb_fill_bulk_urb(urb, udev, usb_sndbulkpipe(udev, EP_DATA_OUT), 1003 usb_fill_bulk_urb(urb, udev, usb_sndbulkpipe(udev, EP_DATA_OUT),
967 skb->data, skb->len, tx_urb_complete, skb); 1004 skb->data, skb->len, tx_urb_complete, skb);
968 1005
1006 info->rate_driver_data[1] = (void *)jiffies;
1007 skb_queue_tail(&tx->submitted_skbs, skb);
1008 usb_anchor_urb(urb, &tx->submitted);
1009
969 r = usb_submit_urb(urb, GFP_ATOMIC); 1010 r = usb_submit_urb(urb, GFP_ATOMIC);
970 if (r) 1011 if (r) {
1012 dev_dbg_f(zd_usb_dev(usb), "error submit urb %p %d\n", urb, r);
1013 usb_unanchor_urb(urb);
1014 skb_unlink(skb, &tx->submitted_skbs);
971 goto error; 1015 goto error;
1016 }
972 tx_inc_submitted_urbs(usb); 1017 tx_inc_submitted_urbs(usb);
973 return 0; 1018 return 0;
974error: 1019error:
975 free_tx_urb(usb, urb); 1020 usb_free_urb(urb);
976out: 1021out:
977 return r; 1022 return r;
978} 1023}
979 1024
1025static bool zd_tx_timeout(struct zd_usb *usb)
1026{
1027 struct zd_usb_tx *tx = &usb->tx;
1028 struct sk_buff_head *q = &tx->submitted_skbs;
1029 struct sk_buff *skb, *skbnext;
1030 struct ieee80211_tx_info *info;
1031 unsigned long flags, trans_start;
1032 bool have_timedout = false;
1033
1034 spin_lock_irqsave(&q->lock, flags);
1035 skb_queue_walk_safe(q, skb, skbnext) {
1036 info = IEEE80211_SKB_CB(skb);
1037 trans_start = (unsigned long)info->rate_driver_data[1];
1038
1039 if (time_is_before_jiffies(trans_start + ZD_TX_TIMEOUT)) {
1040 have_timedout = true;
1041 break;
1042 }
1043 }
1044 spin_unlock_irqrestore(&q->lock, flags);
1045
1046 return have_timedout;
1047}
1048
1049static void zd_tx_watchdog_handler(struct work_struct *work)
1050{
1051 struct zd_usb *usb =
1052 container_of(work, struct zd_usb, tx.watchdog_work.work);
1053 struct zd_usb_tx *tx = &usb->tx;
1054
1055 if (!atomic_read(&tx->enabled) || !tx->watchdog_enabled)
1056 goto out;
1057 if (!zd_tx_timeout(usb))
1058 goto out;
1059
1060 /* TX halted, try reset */
1061 dev_warn(zd_usb_dev(usb), "TX-stall detected, reseting device...");
1062
1063 usb_queue_reset_device(usb->intf);
1064
1065 /* reset will stop this worker, don't rearm */
1066 return;
1067out:
1068 queue_delayed_work(zd_workqueue, &tx->watchdog_work,
1069 ZD_TX_WATCHDOG_INTERVAL);
1070}
1071
1072void zd_tx_watchdog_enable(struct zd_usb *usb)
1073{
1074 struct zd_usb_tx *tx = &usb->tx;
1075
1076 if (!tx->watchdog_enabled) {
1077 dev_dbg_f(zd_usb_dev(usb), "\n");
1078 queue_delayed_work(zd_workqueue, &tx->watchdog_work,
1079 ZD_TX_WATCHDOG_INTERVAL);
1080 tx->watchdog_enabled = 1;
1081 }
1082}
1083
1084void zd_tx_watchdog_disable(struct zd_usb *usb)
1085{
1086 struct zd_usb_tx *tx = &usb->tx;
1087
1088 if (tx->watchdog_enabled) {
1089 dev_dbg_f(zd_usb_dev(usb), "\n");
1090 tx->watchdog_enabled = 0;
1091 cancel_delayed_work_sync(&tx->watchdog_work);
1092 }
1093}
1094
1095static void zd_rx_idle_timer_handler(struct work_struct *work)
1096{
1097 struct zd_usb *usb =
1098 container_of(work, struct zd_usb, rx.idle_work.work);
1099 struct zd_mac *mac = zd_usb_to_mac(usb);
1100
1101 if (!test_bit(ZD_DEVICE_RUNNING, &mac->flags))
1102 return;
1103
1104 dev_dbg_f(zd_usb_dev(usb), "\n");
1105
1106 /* 30 seconds since last rx, reset rx */
1107 zd_usb_reset_rx(usb);
1108}
1109
1110static void zd_usb_reset_rx_idle_timer_tasklet(unsigned long param)
1111{
1112 struct zd_usb *usb = (struct zd_usb *)param;
1113
1114 zd_usb_reset_rx_idle_timer(usb);
1115}
1116
1117void zd_usb_reset_rx_idle_timer(struct zd_usb *usb)
1118{
1119 struct zd_usb_rx *rx = &usb->rx;
1120
1121 cancel_delayed_work(&rx->idle_work);
1122 queue_delayed_work(zd_workqueue, &rx->idle_work, ZD_RX_IDLE_INTERVAL);
1123}
1124
980static inline void init_usb_interrupt(struct zd_usb *usb) 1125static inline void init_usb_interrupt(struct zd_usb *usb)
981{ 1126{
982 struct zd_usb_interrupt *intr = &usb->intr; 1127 struct zd_usb_interrupt *intr = &usb->intr;
@@ -990,23 +1135,32 @@ static inline void init_usb_interrupt(struct zd_usb *usb)
990static inline void init_usb_rx(struct zd_usb *usb) 1135static inline void init_usb_rx(struct zd_usb *usb)
991{ 1136{
992 struct zd_usb_rx *rx = &usb->rx; 1137 struct zd_usb_rx *rx = &usb->rx;
1138
993 spin_lock_init(&rx->lock); 1139 spin_lock_init(&rx->lock);
1140 mutex_init(&rx->setup_mutex);
994 if (interface_to_usbdev(usb->intf)->speed == USB_SPEED_HIGH) { 1141 if (interface_to_usbdev(usb->intf)->speed == USB_SPEED_HIGH) {
995 rx->usb_packet_size = 512; 1142 rx->usb_packet_size = 512;
996 } else { 1143 } else {
997 rx->usb_packet_size = 64; 1144 rx->usb_packet_size = 64;
998 } 1145 }
999 ZD_ASSERT(rx->fragment_length == 0); 1146 ZD_ASSERT(rx->fragment_length == 0);
1147 INIT_DELAYED_WORK(&rx->idle_work, zd_rx_idle_timer_handler);
1148 rx->reset_timer_tasklet.func = zd_usb_reset_rx_idle_timer_tasklet;
1149 rx->reset_timer_tasklet.data = (unsigned long)usb;
1000} 1150}
1001 1151
1002static inline void init_usb_tx(struct zd_usb *usb) 1152static inline void init_usb_tx(struct zd_usb *usb)
1003{ 1153{
1004 struct zd_usb_tx *tx = &usb->tx; 1154 struct zd_usb_tx *tx = &usb->tx;
1155
1005 spin_lock_init(&tx->lock); 1156 spin_lock_init(&tx->lock);
1006 tx->enabled = 0; 1157 atomic_set(&tx->enabled, 0);
1007 tx->stopped = 0; 1158 tx->stopped = 0;
1008 INIT_LIST_HEAD(&tx->free_urb_list); 1159 skb_queue_head_init(&tx->submitted_skbs);
1160 init_usb_anchor(&tx->submitted);
1009 tx->submitted_urbs = 0; 1161 tx->submitted_urbs = 0;
1162 tx->watchdog_enabled = 0;
1163 INIT_DELAYED_WORK(&tx->watchdog_work, zd_tx_watchdog_handler);
1010} 1164}
1011 1165
1012void zd_usb_init(struct zd_usb *usb, struct ieee80211_hw *hw, 1166void zd_usb_init(struct zd_usb *usb, struct ieee80211_hw *hw,
@@ -1015,6 +1169,7 @@ void zd_usb_init(struct zd_usb *usb, struct ieee80211_hw *hw,
1015 memset(usb, 0, sizeof(*usb)); 1169 memset(usb, 0, sizeof(*usb));
1016 usb->intf = usb_get_intf(intf); 1170 usb->intf = usb_get_intf(intf);
1017 usb_set_intfdata(usb->intf, hw); 1171 usb_set_intfdata(usb->intf, hw);
1172 init_usb_anchor(&usb->submitted_cmds);
1018 init_usb_interrupt(usb); 1173 init_usb_interrupt(usb);
1019 init_usb_tx(usb); 1174 init_usb_tx(usb);
1020 init_usb_rx(usb); 1175 init_usb_rx(usb);
@@ -1238,6 +1393,7 @@ static void disconnect(struct usb_interface *intf)
1238 ieee80211_unregister_hw(hw); 1393 ieee80211_unregister_hw(hw);
1239 1394
1240 /* Just in case something has gone wrong! */ 1395 /* Just in case something has gone wrong! */
1396 zd_usb_disable_tx(usb);
1241 zd_usb_disable_rx(usb); 1397 zd_usb_disable_rx(usb);
1242 zd_usb_disable_int(usb); 1398 zd_usb_disable_int(usb);
1243 1399
@@ -1253,11 +1409,92 @@ static void disconnect(struct usb_interface *intf)
1253 dev_dbg(&intf->dev, "disconnected\n"); 1409 dev_dbg(&intf->dev, "disconnected\n");
1254} 1410}
1255 1411
1412static void zd_usb_resume(struct zd_usb *usb)
1413{
1414 struct zd_mac *mac = zd_usb_to_mac(usb);
1415 int r;
1416
1417 dev_dbg_f(zd_usb_dev(usb), "\n");
1418
1419 r = zd_op_start(zd_usb_to_hw(usb));
1420 if (r < 0) {
1421 dev_warn(zd_usb_dev(usb), "Device resume failed "
1422 "with error code %d. Retrying...\n", r);
1423 if (usb->was_running)
1424 set_bit(ZD_DEVICE_RUNNING, &mac->flags);
1425 usb_queue_reset_device(usb->intf);
1426 return;
1427 }
1428
1429 if (mac->type != NL80211_IFTYPE_UNSPECIFIED) {
1430 r = zd_restore_settings(mac);
1431 if (r < 0) {
1432 dev_dbg(zd_usb_dev(usb),
1433 "failed to restore settings, %d\n", r);
1434 return;
1435 }
1436 }
1437}
1438
1439static void zd_usb_stop(struct zd_usb *usb)
1440{
1441 dev_dbg_f(zd_usb_dev(usb), "\n");
1442
1443 zd_op_stop(zd_usb_to_hw(usb));
1444
1445 zd_usb_disable_tx(usb);
1446 zd_usb_disable_rx(usb);
1447 zd_usb_disable_int(usb);
1448
1449 usb->initialized = 0;
1450}
1451
1452static int pre_reset(struct usb_interface *intf)
1453{
1454 struct ieee80211_hw *hw = usb_get_intfdata(intf);
1455 struct zd_mac *mac;
1456 struct zd_usb *usb;
1457
1458 if (!hw || intf->condition != USB_INTERFACE_BOUND)
1459 return 0;
1460
1461 mac = zd_hw_mac(hw);
1462 usb = &mac->chip.usb;
1463
1464 usb->was_running = test_bit(ZD_DEVICE_RUNNING, &mac->flags);
1465
1466 zd_usb_stop(usb);
1467
1468 mutex_lock(&mac->chip.mutex);
1469 return 0;
1470}
1471
1472static int post_reset(struct usb_interface *intf)
1473{
1474 struct ieee80211_hw *hw = usb_get_intfdata(intf);
1475 struct zd_mac *mac;
1476 struct zd_usb *usb;
1477
1478 if (!hw || intf->condition != USB_INTERFACE_BOUND)
1479 return 0;
1480
1481 mac = zd_hw_mac(hw);
1482 usb = &mac->chip.usb;
1483
1484 mutex_unlock(&mac->chip.mutex);
1485
1486 if (usb->was_running)
1487 zd_usb_resume(usb);
1488 return 0;
1489}
1490
1256static struct usb_driver driver = { 1491static struct usb_driver driver = {
1257 .name = KBUILD_MODNAME, 1492 .name = KBUILD_MODNAME,
1258 .id_table = usb_ids, 1493 .id_table = usb_ids,
1259 .probe = probe, 1494 .probe = probe,
1260 .disconnect = disconnect, 1495 .disconnect = disconnect,
1496 .pre_reset = pre_reset,
1497 .post_reset = post_reset,
1261}; 1498};
1262 1499
1263struct workqueue_struct *zd_workqueue; 1500struct workqueue_struct *zd_workqueue;
@@ -1296,6 +1533,31 @@ static void __exit usb_exit(void)
1296module_init(usb_init); 1533module_init(usb_init);
1297module_exit(usb_exit); 1534module_exit(usb_exit);
1298 1535
1536static int zd_ep_regs_out_msg(struct usb_device *udev, void *data, int len,
1537 int *actual_length, int timeout)
1538{
1539 /* In USB 2.0 mode EP_REGS_OUT endpoint is interrupt type. However in
1540 * USB 1.1 mode endpoint is bulk. Select correct type URB by endpoint
1541 * descriptor.
1542 */
1543 struct usb_host_endpoint *ep;
1544 unsigned int pipe;
1545
1546 pipe = usb_sndintpipe(udev, EP_REGS_OUT);
1547 ep = usb_pipe_endpoint(udev, pipe);
1548 if (!ep)
1549 return -EINVAL;
1550
1551 if (usb_endpoint_xfer_int(&ep->desc)) {
1552 return usb_interrupt_msg(udev, pipe, data, len,
1553 actual_length, timeout);
1554 } else {
1555 pipe = usb_sndbulkpipe(udev, EP_REGS_OUT);
1556 return usb_bulk_msg(udev, pipe, data, len, actual_length,
1557 timeout);
1558 }
1559}
1560
1299static int usb_int_regs_length(unsigned int count) 1561static int usb_int_regs_length(unsigned int count)
1300{ 1562{
1301 return sizeof(struct usb_int_regs) + count * sizeof(struct reg_data); 1563 return sizeof(struct usb_int_regs) + count * sizeof(struct reg_data);
@@ -1391,30 +1653,34 @@ int zd_usb_ioread16v(struct zd_usb *usb, u16 *values,
1391 return -EWOULDBLOCK; 1653 return -EWOULDBLOCK;
1392 } 1654 }
1393 if (!usb_int_enabled(usb)) { 1655 if (!usb_int_enabled(usb)) {
1394 dev_dbg_f(zd_usb_dev(usb), 1656 dev_dbg_f(zd_usb_dev(usb),
1395 "error: usb interrupt not enabled\n"); 1657 "error: usb interrupt not enabled\n");
1396 return -EWOULDBLOCK; 1658 return -EWOULDBLOCK;
1397 } 1659 }
1398 1660
1661 ZD_ASSERT(mutex_is_locked(&zd_usb_to_chip(usb)->mutex));
1662 BUILD_BUG_ON(sizeof(struct usb_req_read_regs) + USB_MAX_IOREAD16_COUNT *
1663 sizeof(__le16) > sizeof(usb->req_buf));
1664 BUG_ON(sizeof(struct usb_req_read_regs) + count * sizeof(__le16) >
1665 sizeof(usb->req_buf));
1666
1399 req_len = sizeof(struct usb_req_read_regs) + count * sizeof(__le16); 1667 req_len = sizeof(struct usb_req_read_regs) + count * sizeof(__le16);
1400 req = kmalloc(req_len, GFP_KERNEL); 1668 req = (void *)usb->req_buf;
1401 if (!req) 1669
1402 return -ENOMEM;
1403 req->id = cpu_to_le16(USB_REQ_READ_REGS); 1670 req->id = cpu_to_le16(USB_REQ_READ_REGS);
1404 for (i = 0; i < count; i++) 1671 for (i = 0; i < count; i++)
1405 req->addr[i] = cpu_to_le16((u16)addresses[i]); 1672 req->addr[i] = cpu_to_le16((u16)addresses[i]);
1406 1673
1407 udev = zd_usb_to_usbdev(usb); 1674 udev = zd_usb_to_usbdev(usb);
1408 prepare_read_regs_int(usb); 1675 prepare_read_regs_int(usb);
1409 r = usb_bulk_msg(udev, usb_sndbulkpipe(udev, EP_REGS_OUT), 1676 r = zd_ep_regs_out_msg(udev, req, req_len, &actual_req_len, 50 /*ms*/);
1410 req, req_len, &actual_req_len, 1000 /* ms */);
1411 if (r) { 1677 if (r) {
1412 dev_dbg_f(zd_usb_dev(usb), 1678 dev_dbg_f(zd_usb_dev(usb),
1413 "error in usb_bulk_msg(). Error number %d\n", r); 1679 "error in zd_ep_regs_out_msg(). Error number %d\n", r);
1414 goto error; 1680 goto error;
1415 } 1681 }
1416 if (req_len != actual_req_len) { 1682 if (req_len != actual_req_len) {
1417 dev_dbg_f(zd_usb_dev(usb), "error in usb_bulk_msg()\n" 1683 dev_dbg_f(zd_usb_dev(usb), "error in zd_ep_regs_out_msg()\n"
1418 " req_len %d != actual_req_len %d\n", 1684 " req_len %d != actual_req_len %d\n",
1419 req_len, actual_req_len); 1685 req_len, actual_req_len);
1420 r = -EIO; 1686 r = -EIO;
@@ -1422,7 +1688,7 @@ int zd_usb_ioread16v(struct zd_usb *usb, u16 *values,
1422 } 1688 }
1423 1689
1424 timeout = wait_for_completion_timeout(&usb->intr.read_regs.completion, 1690 timeout = wait_for_completion_timeout(&usb->intr.read_regs.completion,
1425 msecs_to_jiffies(1000)); 1691 msecs_to_jiffies(50));
1426 if (!timeout) { 1692 if (!timeout) {
1427 disable_read_regs_int(usb); 1693 disable_read_regs_int(usb);
1428 dev_dbg_f(zd_usb_dev(usb), "read timed out\n"); 1694 dev_dbg_f(zd_usb_dev(usb), "read timed out\n");
@@ -1432,17 +1698,110 @@ int zd_usb_ioread16v(struct zd_usb *usb, u16 *values,
1432 1698
1433 r = get_results(usb, values, req, count); 1699 r = get_results(usb, values, req, count);
1434error: 1700error:
1435 kfree(req);
1436 return r; 1701 return r;
1437} 1702}
1438 1703
1439int zd_usb_iowrite16v(struct zd_usb *usb, const struct zd_ioreq16 *ioreqs, 1704static void iowrite16v_urb_complete(struct urb *urb)
1440 unsigned int count) 1705{
1706 struct zd_usb *usb = urb->context;
1707
1708 if (urb->status && !usb->cmd_error)
1709 usb->cmd_error = urb->status;
1710
1711 if (!usb->cmd_error &&
1712 urb->actual_length != urb->transfer_buffer_length)
1713 usb->cmd_error = -EIO;
1714}
1715
1716static int zd_submit_waiting_urb(struct zd_usb *usb, bool last)
1717{
1718 int r = 0;
1719 struct urb *urb = usb->urb_async_waiting;
1720
1721 if (!urb)
1722 return 0;
1723
1724 usb->urb_async_waiting = NULL;
1725
1726 if (!last)
1727 urb->transfer_flags |= URB_NO_INTERRUPT;
1728
1729 usb_anchor_urb(urb, &usb->submitted_cmds);
1730 r = usb_submit_urb(urb, GFP_KERNEL);
1731 if (r) {
1732 usb_unanchor_urb(urb);
1733 dev_dbg_f(zd_usb_dev(usb),
1734 "error in usb_submit_urb(). Error number %d\n", r);
1735 goto error;
1736 }
1737
1738 /* fall-through with r == 0 */
1739error:
1740 usb_free_urb(urb);
1741 return r;
1742}
1743
1744void zd_usb_iowrite16v_async_start(struct zd_usb *usb)
1745{
1746 ZD_ASSERT(usb_anchor_empty(&usb->submitted_cmds));
1747 ZD_ASSERT(usb->urb_async_waiting == NULL);
1748 ZD_ASSERT(!usb->in_async);
1749
1750 ZD_ASSERT(mutex_is_locked(&zd_usb_to_chip(usb)->mutex));
1751
1752 usb->in_async = 1;
1753 usb->cmd_error = 0;
1754 usb->urb_async_waiting = NULL;
1755}
1756
1757int zd_usb_iowrite16v_async_end(struct zd_usb *usb, unsigned int timeout)
1758{
1759 int r;
1760
1761 ZD_ASSERT(mutex_is_locked(&zd_usb_to_chip(usb)->mutex));
1762 ZD_ASSERT(usb->in_async);
1763
1764 /* Submit last iowrite16v URB */
1765 r = zd_submit_waiting_urb(usb, true);
1766 if (r) {
1767 dev_dbg_f(zd_usb_dev(usb),
1768 "error in zd_submit_waiting_usb(). "
1769 "Error number %d\n", r);
1770
1771 usb_kill_anchored_urbs(&usb->submitted_cmds);
1772 goto error;
1773 }
1774
1775 if (timeout)
1776 timeout = usb_wait_anchor_empty_timeout(&usb->submitted_cmds,
1777 timeout);
1778 if (!timeout) {
1779 usb_kill_anchored_urbs(&usb->submitted_cmds);
1780 if (usb->cmd_error == -ENOENT) {
1781 dev_dbg_f(zd_usb_dev(usb), "timed out");
1782 r = -ETIMEDOUT;
1783 goto error;
1784 }
1785 }
1786
1787 r = usb->cmd_error;
1788error:
1789 usb->in_async = 0;
1790 return r;
1791}
1792
1793int zd_usb_iowrite16v_async(struct zd_usb *usb, const struct zd_ioreq16 *ioreqs,
1794 unsigned int count)
1441{ 1795{
1442 int r; 1796 int r;
1443 struct usb_device *udev; 1797 struct usb_device *udev;
1444 struct usb_req_write_regs *req = NULL; 1798 struct usb_req_write_regs *req = NULL;
1445 int i, req_len, actual_req_len; 1799 int i, req_len;
1800 struct urb *urb;
1801 struct usb_host_endpoint *ep;
1802
1803 ZD_ASSERT(mutex_is_locked(&zd_usb_to_chip(usb)->mutex));
1804 ZD_ASSERT(usb->in_async);
1446 1805
1447 if (count == 0) 1806 if (count == 0)
1448 return 0; 1807 return 0;
@@ -1458,11 +1817,23 @@ int zd_usb_iowrite16v(struct zd_usb *usb, const struct zd_ioreq16 *ioreqs,
1458 return -EWOULDBLOCK; 1817 return -EWOULDBLOCK;
1459 } 1818 }
1460 1819
1820 udev = zd_usb_to_usbdev(usb);
1821
1822 ep = usb_pipe_endpoint(udev, usb_sndintpipe(udev, EP_REGS_OUT));
1823 if (!ep)
1824 return -ENOENT;
1825
1826 urb = usb_alloc_urb(0, GFP_KERNEL);
1827 if (!urb)
1828 return -ENOMEM;
1829
1461 req_len = sizeof(struct usb_req_write_regs) + 1830 req_len = sizeof(struct usb_req_write_regs) +
1462 count * sizeof(struct reg_data); 1831 count * sizeof(struct reg_data);
1463 req = kmalloc(req_len, GFP_KERNEL); 1832 req = kmalloc(req_len, GFP_KERNEL);
1464 if (!req) 1833 if (!req) {
1465 return -ENOMEM; 1834 r = -ENOMEM;
1835 goto error;
1836 }
1466 1837
1467 req->id = cpu_to_le16(USB_REQ_WRITE_REGS); 1838 req->id = cpu_to_le16(USB_REQ_WRITE_REGS);
1468 for (i = 0; i < count; i++) { 1839 for (i = 0; i < count; i++) {
@@ -1471,29 +1842,52 @@ int zd_usb_iowrite16v(struct zd_usb *usb, const struct zd_ioreq16 *ioreqs,
1471 rw->value = cpu_to_le16(ioreqs[i].value); 1842 rw->value = cpu_to_le16(ioreqs[i].value);
1472 } 1843 }
1473 1844
1474 udev = zd_usb_to_usbdev(usb); 1845 /* In USB 2.0 mode endpoint is interrupt type. However in USB 1.1 mode
1475 r = usb_bulk_msg(udev, usb_sndbulkpipe(udev, EP_REGS_OUT), 1846 * endpoint is bulk. Select correct type URB by endpoint descriptor.
1476 req, req_len, &actual_req_len, 1000 /* ms */); 1847 */
1848 if (usb_endpoint_xfer_int(&ep->desc))
1849 usb_fill_int_urb(urb, udev, usb_sndintpipe(udev, EP_REGS_OUT),
1850 req, req_len, iowrite16v_urb_complete, usb,
1851 ep->desc.bInterval);
1852 else
1853 usb_fill_bulk_urb(urb, udev, usb_sndbulkpipe(udev, EP_REGS_OUT),
1854 req, req_len, iowrite16v_urb_complete, usb);
1855
1856 urb->transfer_flags |= URB_FREE_BUFFER;
1857
1858 /* Submit previous URB */
1859 r = zd_submit_waiting_urb(usb, false);
1477 if (r) { 1860 if (r) {
1478 dev_dbg_f(zd_usb_dev(usb), 1861 dev_dbg_f(zd_usb_dev(usb),
1479 "error in usb_bulk_msg(). Error number %d\n", r); 1862 "error in zd_submit_waiting_usb(). "
1480 goto error; 1863 "Error number %d\n", r);
1481 }
1482 if (req_len != actual_req_len) {
1483 dev_dbg_f(zd_usb_dev(usb),
1484 "error in usb_bulk_msg()"
1485 " req_len %d != actual_req_len %d\n",
1486 req_len, actual_req_len);
1487 r = -EIO;
1488 goto error; 1864 goto error;
1489 } 1865 }
1490 1866
1491 /* FALL-THROUGH with r == 0 */ 1867 /* Delay submit so that URB_NO_INTERRUPT flag can be set for all URBs
1868 * of currect batch except for very last.
1869 */
1870 usb->urb_async_waiting = urb;
1871 return 0;
1492error: 1872error:
1493 kfree(req); 1873 usb_free_urb(urb);
1494 return r; 1874 return r;
1495} 1875}
1496 1876
1877int zd_usb_iowrite16v(struct zd_usb *usb, const struct zd_ioreq16 *ioreqs,
1878 unsigned int count)
1879{
1880 int r;
1881
1882 zd_usb_iowrite16v_async_start(usb);
1883 r = zd_usb_iowrite16v_async(usb, ioreqs, count);
1884 if (r) {
1885 zd_usb_iowrite16v_async_end(usb, 0);
1886 return r;
1887 }
1888 return zd_usb_iowrite16v_async_end(usb, 50 /* ms */);
1889}
1890
1497int zd_usb_rfwrite(struct zd_usb *usb, u32 value, u8 bits) 1891int zd_usb_rfwrite(struct zd_usb *usb, u32 value, u8 bits)
1498{ 1892{
1499 int r; 1893 int r;
@@ -1531,18 +1925,23 @@ int zd_usb_rfwrite(struct zd_usb *usb, u32 value, u8 bits)
1531 1925
1532 dev_dbg_f(zd_usb_dev(usb), "value %#09x bits %d\n", value, bits); 1926 dev_dbg_f(zd_usb_dev(usb), "value %#09x bits %d\n", value, bits);
1533 1927
1534 r = zd_usb_ioread16(usb, &bit_value_template, CR203); 1928 r = zd_usb_ioread16(usb, &bit_value_template, ZD_CR203);
1535 if (r) { 1929 if (r) {
1536 dev_dbg_f(zd_usb_dev(usb), 1930 dev_dbg_f(zd_usb_dev(usb),
1537 "error %d: Couldn't read CR203\n", r); 1931 "error %d: Couldn't read ZD_CR203\n", r);
1538 goto out; 1932 return r;
1539 } 1933 }
1540 bit_value_template &= ~(RF_IF_LE|RF_CLK|RF_DATA); 1934 bit_value_template &= ~(RF_IF_LE|RF_CLK|RF_DATA);
1541 1935
1936 ZD_ASSERT(mutex_is_locked(&zd_usb_to_chip(usb)->mutex));
1937 BUILD_BUG_ON(sizeof(struct usb_req_rfwrite) +
1938 USB_MAX_RFWRITE_BIT_COUNT * sizeof(__le16) >
1939 sizeof(usb->req_buf));
1940 BUG_ON(sizeof(struct usb_req_rfwrite) + bits * sizeof(__le16) >
1941 sizeof(usb->req_buf));
1942
1542 req_len = sizeof(struct usb_req_rfwrite) + bits * sizeof(__le16); 1943 req_len = sizeof(struct usb_req_rfwrite) + bits * sizeof(__le16);
1543 req = kmalloc(req_len, GFP_KERNEL); 1944 req = (void *)usb->req_buf;
1544 if (!req)
1545 return -ENOMEM;
1546 1945
1547 req->id = cpu_to_le16(USB_REQ_WRITE_RF); 1946 req->id = cpu_to_le16(USB_REQ_WRITE_RF);
1548 /* 1: 3683a, but not used in ZYDAS driver */ 1947 /* 1: 3683a, but not used in ZYDAS driver */
@@ -1557,15 +1956,14 @@ int zd_usb_rfwrite(struct zd_usb *usb, u32 value, u8 bits)
1557 } 1956 }
1558 1957
1559 udev = zd_usb_to_usbdev(usb); 1958 udev = zd_usb_to_usbdev(usb);
1560 r = usb_bulk_msg(udev, usb_sndbulkpipe(udev, EP_REGS_OUT), 1959 r = zd_ep_regs_out_msg(udev, req, req_len, &actual_req_len, 50 /*ms*/);
1561 req, req_len, &actual_req_len, 1000 /* ms */);
1562 if (r) { 1960 if (r) {
1563 dev_dbg_f(zd_usb_dev(usb), 1961 dev_dbg_f(zd_usb_dev(usb),
1564 "error in usb_bulk_msg(). Error number %d\n", r); 1962 "error in zd_ep_regs_out_msg(). Error number %d\n", r);
1565 goto out; 1963 goto out;
1566 } 1964 }
1567 if (req_len != actual_req_len) { 1965 if (req_len != actual_req_len) {
1568 dev_dbg_f(zd_usb_dev(usb), "error in usb_bulk_msg()" 1966 dev_dbg_f(zd_usb_dev(usb), "error in zd_ep_regs_out_msg()"
1569 " req_len %d != actual_req_len %d\n", 1967 " req_len %d != actual_req_len %d\n",
1570 req_len, actual_req_len); 1968 req_len, actual_req_len);
1571 r = -EIO; 1969 r = -EIO;
@@ -1574,6 +1972,5 @@ int zd_usb_rfwrite(struct zd_usb *usb, u32 value, u8 bits)
1574 1972
1575 /* FALL-THROUGH with r == 0 */ 1973 /* FALL-THROUGH with r == 0 */
1576out: 1974out:
1577 kfree(req);
1578 return r; 1975 return r;
1579} 1976}