aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/usb
diff options
context:
space:
mode:
authorAndrzej Zaborowski <andrew.zaborowski@intel.com>2011-03-28 08:56:33 -0400
committerDavid S. Miller <davem@davemloft.net>2011-03-30 05:35:08 -0400
commit7a635ea989991d7f12d57a12f2ba7cb6d211e083 (patch)
tree63ae2f1dc375fb239237b90f23af93b8a8245132 /include/linux/usb
parentd005a09edf8b12dd1bec651b2cf94caa0e7bb1be (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.h3
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
174extern int usbnet_generic_cdc_bind(struct usbnet *, struct usb_interface *); 175extern int usbnet_generic_cdc_bind(struct usbnet *, struct usb_interface *);
176extern int usbnet_cdc_bind(struct usbnet *, struct usb_interface *);
175extern void usbnet_cdc_unbind(struct usbnet *, struct usb_interface *); 177extern void usbnet_cdc_unbind(struct usbnet *, struct usb_interface *);
178extern 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 \