@@ -377,10 +377,6 @@ struct lan78xx_net {
377
377
struct tasklet_struct bh ;
378
378
struct delayed_work wq ;
379
379
380
- struct usb_host_endpoint * ep_blkin ;
381
- struct usb_host_endpoint * ep_blkout ;
382
- struct usb_host_endpoint * ep_intr ;
383
-
384
380
int msg_enable ;
385
381
386
382
struct urb * urb_intr ;
@@ -2860,78 +2856,12 @@ lan78xx_start_xmit(struct sk_buff *skb, struct net_device *net)
2860
2856
return NETDEV_TX_OK ;
2861
2857
}
2862
2858
2863
- static int
2864
- lan78xx_get_endpoints (struct lan78xx_net * dev , struct usb_interface * intf )
2865
- {
2866
- int tmp ;
2867
- struct usb_host_interface * alt = NULL ;
2868
- struct usb_host_endpoint * in = NULL , * out = NULL ;
2869
- struct usb_host_endpoint * status = NULL ;
2870
-
2871
- for (tmp = 0 ; tmp < intf -> num_altsetting ; tmp ++ ) {
2872
- unsigned ep ;
2873
-
2874
- in = NULL ;
2875
- out = NULL ;
2876
- status = NULL ;
2877
- alt = intf -> altsetting + tmp ;
2878
-
2879
- for (ep = 0 ; ep < alt -> desc .bNumEndpoints ; ep ++ ) {
2880
- struct usb_host_endpoint * e ;
2881
- int intr = 0 ;
2882
-
2883
- e = alt -> endpoint + ep ;
2884
- switch (e -> desc .bmAttributes ) {
2885
- case USB_ENDPOINT_XFER_INT :
2886
- if (!usb_endpoint_dir_in (& e -> desc ))
2887
- continue ;
2888
- intr = 1 ;
2889
- /* FALLTHROUGH */
2890
- case USB_ENDPOINT_XFER_BULK :
2891
- break ;
2892
- default :
2893
- continue ;
2894
- }
2895
- if (usb_endpoint_dir_in (& e -> desc )) {
2896
- if (!intr && !in )
2897
- in = e ;
2898
- else if (intr && !status )
2899
- status = e ;
2900
- } else {
2901
- if (!out )
2902
- out = e ;
2903
- }
2904
- }
2905
- if (in && out )
2906
- break ;
2907
- }
2908
- if (!alt || !in || !out )
2909
- return - EINVAL ;
2910
-
2911
- dev -> pipe_in = usb_rcvbulkpipe (dev -> udev ,
2912
- in -> desc .bEndpointAddress &
2913
- USB_ENDPOINT_NUMBER_MASK );
2914
- dev -> pipe_out = usb_sndbulkpipe (dev -> udev ,
2915
- out -> desc .bEndpointAddress &
2916
- USB_ENDPOINT_NUMBER_MASK );
2917
- dev -> ep_intr = status ;
2918
-
2919
- return 0 ;
2920
- }
2921
-
2922
2859
static int lan78xx_bind (struct lan78xx_net * dev , struct usb_interface * intf )
2923
2860
{
2924
2861
struct lan78xx_priv * pdata = NULL ;
2925
2862
int ret ;
2926
2863
int i ;
2927
2864
2928
- ret = lan78xx_get_endpoints (dev , intf );
2929
- if (ret ) {
2930
- netdev_warn (dev -> net , "lan78xx_get_endpoints failed: %d\n" ,
2931
- ret );
2932
- return ret ;
2933
- }
2934
-
2935
2865
dev -> data [0 ] = (unsigned long )kzalloc (sizeof (* pdata ), GFP_KERNEL );
2936
2866
2937
2867
pdata = (struct lan78xx_priv * )(dev -> data [0 ]);
@@ -3700,6 +3630,7 @@ static void lan78xx_stat_monitor(struct timer_list *t)
3700
3630
static int lan78xx_probe (struct usb_interface * intf ,
3701
3631
const struct usb_device_id * id )
3702
3632
{
3633
+ struct usb_host_endpoint * ep_blkin , * ep_blkout , * ep_intr ;
3703
3634
struct lan78xx_net * dev ;
3704
3635
struct net_device * netdev ;
3705
3636
struct usb_device * udev ;
@@ -3748,6 +3679,34 @@ static int lan78xx_probe(struct usb_interface *intf,
3748
3679
3749
3680
mutex_init (& dev -> stats .access_lock );
3750
3681
3682
+ if (intf -> cur_altsetting -> desc .bNumEndpoints < 3 ) {
3683
+ ret = - ENODEV ;
3684
+ goto out2 ;
3685
+ }
3686
+
3687
+ dev -> pipe_in = usb_rcvbulkpipe (udev , BULK_IN_PIPE );
3688
+ ep_blkin = usb_pipe_endpoint (udev , dev -> pipe_in );
3689
+ if (!ep_blkin || !usb_endpoint_is_bulk_in (& ep_blkin -> desc )) {
3690
+ ret = - ENODEV ;
3691
+ goto out2 ;
3692
+ }
3693
+
3694
+ dev -> pipe_out = usb_sndbulkpipe (udev , BULK_OUT_PIPE );
3695
+ ep_blkout = usb_pipe_endpoint (udev , dev -> pipe_out );
3696
+ if (!ep_blkout || !usb_endpoint_is_bulk_out (& ep_blkout -> desc )) {
3697
+ ret = - ENODEV ;
3698
+ goto out2 ;
3699
+ }
3700
+
3701
+ ep_intr = & intf -> cur_altsetting -> endpoint [2 ];
3702
+ if (!usb_endpoint_is_int_in (& ep_intr -> desc )) {
3703
+ ret = - ENODEV ;
3704
+ goto out2 ;
3705
+ }
3706
+
3707
+ dev -> pipe_intr = usb_rcvintpipe (dev -> udev ,
3708
+ usb_endpoint_num (& ep_intr -> desc ));
3709
+
3751
3710
ret = lan78xx_bind (dev , intf );
3752
3711
if (ret < 0 )
3753
3712
goto out2 ;
@@ -3759,23 +3718,7 @@ static int lan78xx_probe(struct usb_interface *intf,
3759
3718
netdev -> max_mtu = MAX_SINGLE_PACKET_SIZE ;
3760
3719
netif_set_gso_max_size (netdev , MAX_SINGLE_PACKET_SIZE - MAX_HEADER );
3761
3720
3762
- if (intf -> cur_altsetting -> desc .bNumEndpoints < 3 ) {
3763
- ret = - ENODEV ;
3764
- goto out3 ;
3765
- }
3766
-
3767
- dev -> ep_blkin = (intf -> cur_altsetting )-> endpoint + 0 ;
3768
- dev -> ep_blkout = (intf -> cur_altsetting )-> endpoint + 1 ;
3769
- dev -> ep_intr = (intf -> cur_altsetting )-> endpoint + 2 ;
3770
-
3771
- dev -> pipe_in = usb_rcvbulkpipe (udev , BULK_IN_PIPE );
3772
- dev -> pipe_out = usb_sndbulkpipe (udev , BULK_OUT_PIPE );
3773
-
3774
- dev -> pipe_intr = usb_rcvintpipe (dev -> udev ,
3775
- dev -> ep_intr -> desc .bEndpointAddress &
3776
- USB_ENDPOINT_NUMBER_MASK );
3777
- period = dev -> ep_intr -> desc .bInterval ;
3778
-
3721
+ period = ep_intr -> desc .bInterval ;
3779
3722
maxp = usb_maxpacket (dev -> udev , dev -> pipe_intr , 0 );
3780
3723
buf = kmalloc (maxp , GFP_KERNEL );
3781
3724
if (buf ) {
0 commit comments