diff options
author | Andrzej Zaborowski <andrew.zaborowski@intel.com> | 2011-03-28 08:56:33 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-03-30 05:35:08 -0400 |
commit | 7a635ea989991d7f12d57a12f2ba7cb6d211e083 (patch) | |
tree | 63ae2f1dc375fb239237b90f23af93b8a8245132 /include/linux/usb | |
parent | d005a09edf8b12dd1bec651b2cf94caa0e7bb1be (diff) |
net/usb: Ethernet quirks for the LG-VL600 4G modem
This adds a driver for the CDC Ethernet part of this modem. The
device's ID is blacklisted in cdc_ether.c and is white-listed in
this new driver because of the quirks needed to make it useful.
The modem's firmware exposes a CDC ACM port for modem control and a
CDC Ethernet port for network data. The descriptors look fine but
both ports actually are some sort of multiplexers requiring non-
standard headers added/removed from every packet or they get
ignored. All information is based on a usb traffic log from a
Windows machine.
On the Verizon 4G network I've seen speeds up to 1.1MB/s so far with
this driver, a speed-o-meter site reports 16.2Mbps/10.5Mbps.
Userspace scripts are required to talk to the CDC ACM port.
Signed-off-by: Andrzej Zaborowski <balrogg@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux/usb')
-rw-r--r-- | include/linux/usb/usbnet.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/include/linux/usb/usbnet.h b/include/linux/usb/usbnet.h index 44842c8d38c0..201f2228f731 100644 --- a/include/linux/usb/usbnet.h +++ b/include/linux/usb/usbnet.h | |||
@@ -102,6 +102,7 @@ struct driver_info { | |||
102 | * Affects statistic (counters) and short packet handling. | 102 | * Affects statistic (counters) and short packet handling. |
103 | */ | 103 | */ |
104 | #define FLAG_MULTI_PACKET 0x1000 | 104 | #define FLAG_MULTI_PACKET 0x1000 |
105 | #define FLAG_RX_ASSEMBLE 0x2000 /* rx packets may span >1 frames */ | ||
105 | 106 | ||
106 | /* init device ... can sleep, or cause probe() failure */ | 107 | /* init device ... can sleep, or cause probe() failure */ |
107 | int (*bind)(struct usbnet *, struct usb_interface *); | 108 | int (*bind)(struct usbnet *, struct usb_interface *); |
@@ -172,7 +173,9 @@ struct cdc_state { | |||
172 | }; | 173 | }; |
173 | 174 | ||
174 | extern int usbnet_generic_cdc_bind(struct usbnet *, struct usb_interface *); | 175 | extern int usbnet_generic_cdc_bind(struct usbnet *, struct usb_interface *); |
176 | extern int usbnet_cdc_bind(struct usbnet *, struct usb_interface *); | ||
175 | extern void usbnet_cdc_unbind(struct usbnet *, struct usb_interface *); | 177 | extern void usbnet_cdc_unbind(struct usbnet *, struct usb_interface *); |
178 | extern void usbnet_cdc_status(struct usbnet *, struct urb *); | ||
176 | 179 | ||
177 | /* CDC and RNDIS support the same host-chosen packet filters for IN transfers */ | 180 | /* CDC and RNDIS support the same host-chosen packet filters for IN transfers */ |
178 | #define DEFAULT_FILTER (USB_CDC_PACKET_TYPE_BROADCAST \ | 181 | #define DEFAULT_FILTER (USB_CDC_PACKET_TYPE_BROADCAST \ |