@@ -3680,60 +3680,6 @@ static inline void rx_process(struct lan78xx_net *dev, struct sk_buff *skb)
3680
3680
dev -> net -> stats .rx_errors ++ ;
3681
3681
}
3682
3682
3683
- static void rx_complete (struct urb * urb );
3684
-
3685
- static int rx_submit (struct lan78xx_net * dev , struct sk_buff * skb , gfp_t flags )
3686
- {
3687
- struct skb_data * entry = (struct skb_data * )skb -> cb ;
3688
- size_t size = dev -> rx_urb_size ;
3689
- struct urb * urb = entry -> urb ;
3690
- unsigned long lockflags ;
3691
- int ret = 0 ;
3692
-
3693
- usb_fill_bulk_urb (urb , dev -> udev , dev -> pipe_in ,
3694
- skb -> data , size , rx_complete , skb );
3695
-
3696
- spin_lock_irqsave (& dev -> rxq .lock , lockflags );
3697
-
3698
- if (netif_device_present (dev -> net ) &&
3699
- netif_running (dev -> net ) &&
3700
- !test_bit (EVENT_RX_HALT , & dev -> flags ) &&
3701
- !test_bit (EVENT_DEV_ASLEEP , & dev -> flags )) {
3702
- ret = usb_submit_urb (urb , flags );
3703
- switch (ret ) {
3704
- case 0 :
3705
- lan78xx_queue_skb (& dev -> rxq , skb , rx_start );
3706
- break ;
3707
- case - EPIPE :
3708
- lan78xx_defer_kevent (dev , EVENT_RX_HALT );
3709
- break ;
3710
- case - ENODEV :
3711
- case - ENOENT :
3712
- netif_dbg (dev , ifdown , dev -> net , "device gone\n" );
3713
- netif_device_detach (dev -> net );
3714
- break ;
3715
- case - EHOSTUNREACH :
3716
- ret = - ENOLINK ;
3717
- tasklet_schedule (& dev -> bh );
3718
- break ;
3719
- default :
3720
- netif_dbg (dev , rx_err , dev -> net ,
3721
- "rx submit, %d\n" , ret );
3722
- tasklet_schedule (& dev -> bh );
3723
- break ;
3724
- }
3725
- } else {
3726
- netif_dbg (dev , ifdown , dev -> net , "rx: stopped\n" );
3727
- ret = - ENOLINK ;
3728
- }
3729
- spin_unlock_irqrestore (& dev -> rxq .lock , lockflags );
3730
-
3731
- if (ret )
3732
- lan78xx_release_rx_buf (dev , skb );
3733
-
3734
- return ret ;
3735
- }
3736
-
3737
3683
static void rx_complete (struct urb * urb )
3738
3684
{
3739
3685
struct sk_buff * skb = (struct sk_buff * )urb -> context ;
@@ -3794,6 +3740,58 @@ static void rx_complete(struct urb *urb)
3794
3740
state = defer_bh (dev , skb , & dev -> rxq , state );
3795
3741
}
3796
3742
3743
+ static int rx_submit (struct lan78xx_net * dev , struct sk_buff * skb , gfp_t flags )
3744
+ {
3745
+ struct skb_data * entry = (struct skb_data * )skb -> cb ;
3746
+ size_t size = dev -> rx_urb_size ;
3747
+ struct urb * urb = entry -> urb ;
3748
+ unsigned long lockflags ;
3749
+ int ret = 0 ;
3750
+
3751
+ usb_fill_bulk_urb (urb , dev -> udev , dev -> pipe_in ,
3752
+ skb -> data , size , rx_complete , skb );
3753
+
3754
+ spin_lock_irqsave (& dev -> rxq .lock , lockflags );
3755
+
3756
+ if (netif_device_present (dev -> net ) &&
3757
+ netif_running (dev -> net ) &&
3758
+ !test_bit (EVENT_RX_HALT , & dev -> flags ) &&
3759
+ !test_bit (EVENT_DEV_ASLEEP , & dev -> flags )) {
3760
+ ret = usb_submit_urb (urb , flags );
3761
+ switch (ret ) {
3762
+ case 0 :
3763
+ lan78xx_queue_skb (& dev -> rxq , skb , rx_start );
3764
+ break ;
3765
+ case - EPIPE :
3766
+ lan78xx_defer_kevent (dev , EVENT_RX_HALT );
3767
+ break ;
3768
+ case - ENODEV :
3769
+ case - ENOENT :
3770
+ netif_dbg (dev , ifdown , dev -> net , "device gone\n" );
3771
+ netif_device_detach (dev -> net );
3772
+ break ;
3773
+ case - EHOSTUNREACH :
3774
+ ret = - ENOLINK ;
3775
+ tasklet_schedule (& dev -> bh );
3776
+ break ;
3777
+ default :
3778
+ netif_dbg (dev , rx_err , dev -> net ,
3779
+ "rx submit, %d\n" , ret );
3780
+ tasklet_schedule (& dev -> bh );
3781
+ break ;
3782
+ }
3783
+ } else {
3784
+ netif_dbg (dev , ifdown , dev -> net , "rx: stopped\n" );
3785
+ ret = - ENOLINK ;
3786
+ }
3787
+ spin_unlock_irqrestore (& dev -> rxq .lock , lockflags );
3788
+
3789
+ if (ret )
3790
+ lan78xx_release_rx_buf (dev , skb );
3791
+
3792
+ return ret ;
3793
+ }
3794
+
3797
3795
static void lan78xx_rx_urb_submit_all (struct lan78xx_net * dev )
3798
3796
{
3799
3797
struct sk_buff * rx_buf ;
0 commit comments