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>
This commit is contained in:
committed by
David S. Miller
parent
d005a09edf
commit
7a635ea989
@@ -387,8 +387,12 @@ static int rx_submit (struct usbnet *dev, struct urb *urb, gfp_t flags)
|
||||
static inline void rx_process (struct usbnet *dev, struct sk_buff *skb)
|
||||
{
|
||||
if (dev->driver_info->rx_fixup &&
|
||||
!dev->driver_info->rx_fixup (dev, skb))
|
||||
goto error;
|
||||
!dev->driver_info->rx_fixup (dev, skb)) {
|
||||
/* With RX_ASSEMBLE, rx_fixup() must update counters */
|
||||
if (!(dev->driver_info->flags & FLAG_RX_ASSEMBLE))
|
||||
dev->net->stats.rx_errors++;
|
||||
goto done;
|
||||
}
|
||||
// else network stack removes extra byte if we forced a short packet
|
||||
|
||||
if (skb->len) {
|
||||
@@ -401,8 +405,8 @@ static inline void rx_process (struct usbnet *dev, struct sk_buff *skb)
|
||||
}
|
||||
|
||||
netif_dbg(dev, rx_err, dev->net, "drop\n");
|
||||
error:
|
||||
dev->net->stats.rx_errors++;
|
||||
done:
|
||||
skb_queue_tail(&dev->done, skb);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user