diff options
Diffstat (limited to 'drivers/net/usb')
-rw-r--r-- | drivers/net/usb/cdc_eem.c | 3 | ||||
-rw-r--r-- | drivers/net/usb/cdc_ether.c | 41 | ||||
-rw-r--r-- | drivers/net/usb/ipheth.c | 5 | ||||
-rw-r--r-- | drivers/net/usb/qmi_wwan.c | 55 | ||||
-rw-r--r-- | drivers/net/usb/smsc95xx.c | 1 | ||||
-rw-r--r-- | drivers/net/usb/usbnet.c | 11 |
6 files changed, 97 insertions, 19 deletions
diff --git a/drivers/net/usb/cdc_eem.c b/drivers/net/usb/cdc_eem.c index c81e278629ff..08d55b6bf272 100644 --- a/drivers/net/usb/cdc_eem.c +++ b/drivers/net/usb/cdc_eem.c | |||
@@ -31,6 +31,7 @@ | |||
31 | #include <linux/usb/cdc.h> | 31 | #include <linux/usb/cdc.h> |
32 | #include <linux/usb/usbnet.h> | 32 | #include <linux/usb/usbnet.h> |
33 | #include <linux/gfp.h> | 33 | #include <linux/gfp.h> |
34 | #include <linux/if_vlan.h> | ||
34 | 35 | ||
35 | 36 | ||
36 | /* | 37 | /* |
@@ -92,7 +93,7 @@ static int eem_bind(struct usbnet *dev, struct usb_interface *intf) | |||
92 | 93 | ||
93 | /* no jumbogram (16K) support for now */ | 94 | /* no jumbogram (16K) support for now */ |
94 | 95 | ||
95 | dev->net->hard_header_len += EEM_HEAD + ETH_FCS_LEN; | 96 | dev->net->hard_header_len += EEM_HEAD + ETH_FCS_LEN + VLAN_HLEN; |
96 | dev->hard_mtu = dev->net->mtu + dev->net->hard_header_len; | 97 | dev->hard_mtu = dev->net->mtu + dev->net->hard_header_len; |
97 | 98 | ||
98 | return 0; | 99 | return 0; |
diff --git a/drivers/net/usb/cdc_ether.c b/drivers/net/usb/cdc_ether.c index a03de7197049..d0129827602b 100644 --- a/drivers/net/usb/cdc_ether.c +++ b/drivers/net/usb/cdc_ether.c | |||
@@ -592,6 +592,32 @@ static const struct usb_device_id products [] = { | |||
592 | .driver_info = 0, | 592 | .driver_info = 0, |
593 | }, | 593 | }, |
594 | 594 | ||
595 | /* Novatel USB551L and MC551 - handled by qmi_wwan */ | ||
596 | { | ||
597 | .match_flags = USB_DEVICE_ID_MATCH_VENDOR | ||
598 | | USB_DEVICE_ID_MATCH_PRODUCT | ||
599 | | USB_DEVICE_ID_MATCH_INT_INFO, | ||
600 | .idVendor = NOVATEL_VENDOR_ID, | ||
601 | .idProduct = 0xB001, | ||
602 | .bInterfaceClass = USB_CLASS_COMM, | ||
603 | .bInterfaceSubClass = USB_CDC_SUBCLASS_ETHERNET, | ||
604 | .bInterfaceProtocol = USB_CDC_PROTO_NONE, | ||
605 | .driver_info = 0, | ||
606 | }, | ||
607 | |||
608 | /* Novatel E362 - handled by qmi_wwan */ | ||
609 | { | ||
610 | .match_flags = USB_DEVICE_ID_MATCH_VENDOR | ||
611 | | USB_DEVICE_ID_MATCH_PRODUCT | ||
612 | | USB_DEVICE_ID_MATCH_INT_INFO, | ||
613 | .idVendor = NOVATEL_VENDOR_ID, | ||
614 | .idProduct = 0x9010, | ||
615 | .bInterfaceClass = USB_CLASS_COMM, | ||
616 | .bInterfaceSubClass = USB_CDC_SUBCLASS_ETHERNET, | ||
617 | .bInterfaceProtocol = USB_CDC_PROTO_NONE, | ||
618 | .driver_info = 0, | ||
619 | }, | ||
620 | |||
595 | /* | 621 | /* |
596 | * WHITELIST!!! | 622 | * WHITELIST!!! |
597 | * | 623 | * |
@@ -604,21 +630,6 @@ static const struct usb_device_id products [] = { | |||
604 | * because of bugs/quirks in a given product (like Zaurus, above). | 630 | * because of bugs/quirks in a given product (like Zaurus, above). |
605 | */ | 631 | */ |
606 | { | 632 | { |
607 | /* Novatel USB551L */ | ||
608 | /* This match must come *before* the generic CDC-ETHER match so that | ||
609 | * we get FLAG_WWAN set on the device, since it's descriptors are | ||
610 | * generic CDC-ETHER. | ||
611 | */ | ||
612 | .match_flags = USB_DEVICE_ID_MATCH_VENDOR | ||
613 | | USB_DEVICE_ID_MATCH_PRODUCT | ||
614 | | USB_DEVICE_ID_MATCH_INT_INFO, | ||
615 | .idVendor = NOVATEL_VENDOR_ID, | ||
616 | .idProduct = 0xB001, | ||
617 | .bInterfaceClass = USB_CLASS_COMM, | ||
618 | .bInterfaceSubClass = USB_CDC_SUBCLASS_ETHERNET, | ||
619 | .bInterfaceProtocol = USB_CDC_PROTO_NONE, | ||
620 | .driver_info = (unsigned long)&wwan_info, | ||
621 | }, { | ||
622 | /* ZTE (Vodafone) K3805-Z */ | 633 | /* ZTE (Vodafone) K3805-Z */ |
623 | .match_flags = USB_DEVICE_ID_MATCH_VENDOR | 634 | .match_flags = USB_DEVICE_ID_MATCH_VENDOR |
624 | | USB_DEVICE_ID_MATCH_PRODUCT | 635 | | USB_DEVICE_ID_MATCH_PRODUCT |
diff --git a/drivers/net/usb/ipheth.c b/drivers/net/usb/ipheth.c index a28a983d465e..534d8becbbdc 100644 --- a/drivers/net/usb/ipheth.c +++ b/drivers/net/usb/ipheth.c | |||
@@ -62,6 +62,7 @@ | |||
62 | #define USB_PRODUCT_IPAD 0x129a | 62 | #define USB_PRODUCT_IPAD 0x129a |
63 | #define USB_PRODUCT_IPHONE_4_VZW 0x129c | 63 | #define USB_PRODUCT_IPHONE_4_VZW 0x129c |
64 | #define USB_PRODUCT_IPHONE_4S 0x12a0 | 64 | #define USB_PRODUCT_IPHONE_4S 0x12a0 |
65 | #define USB_PRODUCT_IPHONE_5 0x12a8 | ||
65 | 66 | ||
66 | #define IPHETH_USBINTF_CLASS 255 | 67 | #define IPHETH_USBINTF_CLASS 255 |
67 | #define IPHETH_USBINTF_SUBCLASS 253 | 68 | #define IPHETH_USBINTF_SUBCLASS 253 |
@@ -113,6 +114,10 @@ static struct usb_device_id ipheth_table[] = { | |||
113 | USB_VENDOR_APPLE, USB_PRODUCT_IPHONE_4S, | 114 | USB_VENDOR_APPLE, USB_PRODUCT_IPHONE_4S, |
114 | IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS, | 115 | IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS, |
115 | IPHETH_USBINTF_PROTO) }, | 116 | IPHETH_USBINTF_PROTO) }, |
117 | { USB_DEVICE_AND_INTERFACE_INFO( | ||
118 | USB_VENDOR_APPLE, USB_PRODUCT_IPHONE_5, | ||
119 | IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS, | ||
120 | IPHETH_USBINTF_PROTO) }, | ||
116 | { } | 121 | { } |
117 | }; | 122 | }; |
118 | MODULE_DEVICE_TABLE(usb, ipheth_table); | 123 | MODULE_DEVICE_TABLE(usb, ipheth_table); |
diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c index 6883c371c59f..3b566fa0f8e6 100644 --- a/drivers/net/usb/qmi_wwan.c +++ b/drivers/net/usb/qmi_wwan.c | |||
@@ -369,18 +369,73 @@ static const struct usb_device_id products[] = { | |||
369 | USB_VENDOR_AND_INTERFACE_INFO(0x106c, USB_CLASS_VENDOR_SPEC, 0xf1, 0xff), | 369 | USB_VENDOR_AND_INTERFACE_INFO(0x106c, USB_CLASS_VENDOR_SPEC, 0xf1, 0xff), |
370 | .driver_info = (unsigned long)&qmi_wwan_info, | 370 | .driver_info = (unsigned long)&qmi_wwan_info, |
371 | }, | 371 | }, |
372 | { /* Novatel USB551L and MC551 */ | ||
373 | USB_DEVICE_AND_INTERFACE_INFO(0x1410, 0xb001, | ||
374 | USB_CLASS_COMM, | ||
375 | USB_CDC_SUBCLASS_ETHERNET, | ||
376 | USB_CDC_PROTO_NONE), | ||
377 | .driver_info = (unsigned long)&qmi_wwan_info, | ||
378 | }, | ||
379 | { /* Novatel E362 */ | ||
380 | USB_DEVICE_AND_INTERFACE_INFO(0x1410, 0x9010, | ||
381 | USB_CLASS_COMM, | ||
382 | USB_CDC_SUBCLASS_ETHERNET, | ||
383 | USB_CDC_PROTO_NONE), | ||
384 | .driver_info = (unsigned long)&qmi_wwan_info, | ||
385 | }, | ||
372 | 386 | ||
373 | /* 3. Combined interface devices matching on interface number */ | 387 | /* 3. Combined interface devices matching on interface number */ |
388 | {QMI_FIXED_INTF(0x19d2, 0x0002, 1)}, | ||
389 | {QMI_FIXED_INTF(0x19d2, 0x0012, 1)}, | ||
390 | {QMI_FIXED_INTF(0x19d2, 0x0017, 3)}, | ||
391 | {QMI_FIXED_INTF(0x19d2, 0x0021, 4)}, | ||
392 | {QMI_FIXED_INTF(0x19d2, 0x0025, 1)}, | ||
393 | {QMI_FIXED_INTF(0x19d2, 0x0031, 4)}, | ||
394 | {QMI_FIXED_INTF(0x19d2, 0x0042, 4)}, | ||
395 | {QMI_FIXED_INTF(0x19d2, 0x0049, 5)}, | ||
396 | {QMI_FIXED_INTF(0x19d2, 0x0052, 4)}, | ||
374 | {QMI_FIXED_INTF(0x19d2, 0x0055, 1)}, /* ZTE (Vodafone) K3520-Z */ | 397 | {QMI_FIXED_INTF(0x19d2, 0x0055, 1)}, /* ZTE (Vodafone) K3520-Z */ |
398 | {QMI_FIXED_INTF(0x19d2, 0x0058, 4)}, | ||
375 | {QMI_FIXED_INTF(0x19d2, 0x0063, 4)}, /* ZTE (Vodafone) K3565-Z */ | 399 | {QMI_FIXED_INTF(0x19d2, 0x0063, 4)}, /* ZTE (Vodafone) K3565-Z */ |
376 | {QMI_FIXED_INTF(0x19d2, 0x0104, 4)}, /* ZTE (Vodafone) K4505-Z */ | 400 | {QMI_FIXED_INTF(0x19d2, 0x0104, 4)}, /* ZTE (Vodafone) K4505-Z */ |
401 | {QMI_FIXED_INTF(0x19d2, 0x0113, 5)}, | ||
402 | {QMI_FIXED_INTF(0x19d2, 0x0118, 5)}, | ||
403 | {QMI_FIXED_INTF(0x19d2, 0x0121, 5)}, | ||
404 | {QMI_FIXED_INTF(0x19d2, 0x0123, 4)}, | ||
405 | {QMI_FIXED_INTF(0x19d2, 0x0124, 5)}, | ||
406 | {QMI_FIXED_INTF(0x19d2, 0x0125, 6)}, | ||
407 | {QMI_FIXED_INTF(0x19d2, 0x0126, 5)}, | ||
408 | {QMI_FIXED_INTF(0x19d2, 0x0130, 1)}, | ||
409 | {QMI_FIXED_INTF(0x19d2, 0x0133, 3)}, | ||
410 | {QMI_FIXED_INTF(0x19d2, 0x0141, 5)}, | ||
377 | {QMI_FIXED_INTF(0x19d2, 0x0157, 5)}, /* ZTE MF683 */ | 411 | {QMI_FIXED_INTF(0x19d2, 0x0157, 5)}, /* ZTE MF683 */ |
412 | {QMI_FIXED_INTF(0x19d2, 0x0158, 3)}, | ||
378 | {QMI_FIXED_INTF(0x19d2, 0x0167, 4)}, /* ZTE MF820D */ | 413 | {QMI_FIXED_INTF(0x19d2, 0x0167, 4)}, /* ZTE MF820D */ |
414 | {QMI_FIXED_INTF(0x19d2, 0x0168, 4)}, | ||
415 | {QMI_FIXED_INTF(0x19d2, 0x0176, 3)}, | ||
416 | {QMI_FIXED_INTF(0x19d2, 0x0178, 3)}, | ||
417 | {QMI_FIXED_INTF(0x19d2, 0x0191, 4)}, /* ZTE EuFi890 */ | ||
418 | {QMI_FIXED_INTF(0x19d2, 0x0199, 1)}, /* ZTE MF820S */ | ||
419 | {QMI_FIXED_INTF(0x19d2, 0x0200, 1)}, | ||
420 | {QMI_FIXED_INTF(0x19d2, 0x0257, 3)}, /* ZTE MF821 */ | ||
379 | {QMI_FIXED_INTF(0x19d2, 0x0326, 4)}, /* ZTE MF821D */ | 421 | {QMI_FIXED_INTF(0x19d2, 0x0326, 4)}, /* ZTE MF821D */ |
380 | {QMI_FIXED_INTF(0x19d2, 0x1008, 4)}, /* ZTE (Vodafone) K3570-Z */ | 422 | {QMI_FIXED_INTF(0x19d2, 0x1008, 4)}, /* ZTE (Vodafone) K3570-Z */ |
381 | {QMI_FIXED_INTF(0x19d2, 0x1010, 4)}, /* ZTE (Vodafone) K3571-Z */ | 423 | {QMI_FIXED_INTF(0x19d2, 0x1010, 4)}, /* ZTE (Vodafone) K3571-Z */ |
424 | {QMI_FIXED_INTF(0x19d2, 0x1012, 4)}, | ||
382 | {QMI_FIXED_INTF(0x19d2, 0x1018, 3)}, /* ZTE (Vodafone) K5006-Z */ | 425 | {QMI_FIXED_INTF(0x19d2, 0x1018, 3)}, /* ZTE (Vodafone) K5006-Z */ |
426 | {QMI_FIXED_INTF(0x19d2, 0x1021, 2)}, | ||
427 | {QMI_FIXED_INTF(0x19d2, 0x1245, 4)}, | ||
428 | {QMI_FIXED_INTF(0x19d2, 0x1247, 4)}, | ||
429 | {QMI_FIXED_INTF(0x19d2, 0x1252, 4)}, | ||
430 | {QMI_FIXED_INTF(0x19d2, 0x1254, 4)}, | ||
431 | {QMI_FIXED_INTF(0x19d2, 0x1255, 3)}, | ||
432 | {QMI_FIXED_INTF(0x19d2, 0x1255, 4)}, | ||
433 | {QMI_FIXED_INTF(0x19d2, 0x1256, 4)}, | ||
434 | {QMI_FIXED_INTF(0x19d2, 0x1401, 2)}, | ||
383 | {QMI_FIXED_INTF(0x19d2, 0x1402, 2)}, /* ZTE MF60 */ | 435 | {QMI_FIXED_INTF(0x19d2, 0x1402, 2)}, /* ZTE MF60 */ |
436 | {QMI_FIXED_INTF(0x19d2, 0x1424, 2)}, | ||
437 | {QMI_FIXED_INTF(0x19d2, 0x1425, 2)}, | ||
438 | {QMI_FIXED_INTF(0x19d2, 0x1426, 2)}, /* ZTE MF91 */ | ||
384 | {QMI_FIXED_INTF(0x19d2, 0x2002, 4)}, /* ZTE (Vodafone) K3765-Z */ | 439 | {QMI_FIXED_INTF(0x19d2, 0x2002, 4)}, /* ZTE (Vodafone) K3765-Z */ |
385 | {QMI_FIXED_INTF(0x0f3d, 0x68a2, 8)}, /* Sierra Wireless MC7700 */ | 440 | {QMI_FIXED_INTF(0x0f3d, 0x68a2, 8)}, /* Sierra Wireless MC7700 */ |
386 | {QMI_FIXED_INTF(0x114f, 0x68a2, 8)}, /* Sierra Wireless MC7750 */ | 441 | {QMI_FIXED_INTF(0x114f, 0x68a2, 8)}, /* Sierra Wireless MC7750 */ |
diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c index 7479a5761d0d..3286166415b4 100644 --- a/drivers/net/usb/smsc95xx.c +++ b/drivers/net/usb/smsc95xx.c | |||
@@ -1344,6 +1344,7 @@ static struct sk_buff *smsc95xx_tx_fixup(struct usbnet *dev, | |||
1344 | } else { | 1344 | } else { |
1345 | u32 csum_preamble = smsc95xx_calc_csum_preamble(skb); | 1345 | u32 csum_preamble = smsc95xx_calc_csum_preamble(skb); |
1346 | skb_push(skb, 4); | 1346 | skb_push(skb, 4); |
1347 | cpu_to_le32s(&csum_preamble); | ||
1347 | memcpy(skb->data, &csum_preamble, 4); | 1348 | memcpy(skb->data, &csum_preamble, 4); |
1348 | } | 1349 | } |
1349 | } | 1350 | } |
diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c index f9819d10b1f9..edb81ed06950 100644 --- a/drivers/net/usb/usbnet.c +++ b/drivers/net/usb/usbnet.c | |||
@@ -359,10 +359,12 @@ static enum skb_state defer_bh(struct usbnet *dev, struct sk_buff *skb, | |||
359 | void usbnet_defer_kevent (struct usbnet *dev, int work) | 359 | void usbnet_defer_kevent (struct usbnet *dev, int work) |
360 | { | 360 | { |
361 | set_bit (work, &dev->flags); | 361 | set_bit (work, &dev->flags); |
362 | if (!schedule_work (&dev->kevent)) | 362 | if (!schedule_work (&dev->kevent)) { |
363 | netdev_err(dev->net, "kevent %d may have been dropped\n", work); | 363 | if (net_ratelimit()) |
364 | else | 364 | netdev_err(dev->net, "kevent %d may have been dropped\n", work); |
365 | } else { | ||
365 | netdev_dbg(dev->net, "kevent %d scheduled\n", work); | 366 | netdev_dbg(dev->net, "kevent %d scheduled\n", work); |
367 | } | ||
366 | } | 368 | } |
367 | EXPORT_SYMBOL_GPL(usbnet_defer_kevent); | 369 | EXPORT_SYMBOL_GPL(usbnet_defer_kevent); |
368 | 370 | ||
@@ -1158,6 +1160,7 @@ netdev_tx_t usbnet_start_xmit (struct sk_buff *skb, | |||
1158 | usb_anchor_urb(urb, &dev->deferred); | 1160 | usb_anchor_urb(urb, &dev->deferred); |
1159 | /* no use to process more packets */ | 1161 | /* no use to process more packets */ |
1160 | netif_stop_queue(net); | 1162 | netif_stop_queue(net); |
1163 | usb_put_urb(urb); | ||
1161 | spin_unlock_irqrestore(&dev->txq.lock, flags); | 1164 | spin_unlock_irqrestore(&dev->txq.lock, flags); |
1162 | netdev_dbg(dev->net, "Delaying transmission for resumption\n"); | 1165 | netdev_dbg(dev->net, "Delaying transmission for resumption\n"); |
1163 | goto deferred; | 1166 | goto deferred; |
@@ -1310,6 +1313,8 @@ void usbnet_disconnect (struct usb_interface *intf) | |||
1310 | 1313 | ||
1311 | cancel_work_sync(&dev->kevent); | 1314 | cancel_work_sync(&dev->kevent); |
1312 | 1315 | ||
1316 | usb_scuttle_anchored_urbs(&dev->deferred); | ||
1317 | |||
1313 | if (dev->driver_info->unbind) | 1318 | if (dev->driver_info->unbind) |
1314 | dev->driver_info->unbind (dev, intf); | 1319 | dev->driver_info->unbind (dev, intf); |
1315 | 1320 | ||