linux/drivers/net/usb/lg-vl600.c

// SPDX-License-Identifier: GPL-2.0-or-later
/*
 * Ethernet interface part of the LG VL600 LTE modem (4G dongle)
 *
 * Copyright (C) 2011 Intel Corporation
 * Author: Andrzej Zaborowski <[email protected]>
 */
#include <linux/etherdevice.h>
#include <linux/ethtool.h>
#include <linux/mii.h>
#include <linux/usb.h>
#include <linux/usb/cdc.h>
#include <linux/usb/usbnet.h>
#include <linux/if_ether.h>
#include <linux/if_arp.h>
#include <linux/inetdevice.h>
#include <linux/module.h>

/*
 * The device has a CDC ACM port for modem control (it claims to be
 * CDC ACM anyway) and a CDC Ethernet port for actual network data.
 * It will however ignore data on both ports that is not encapsulated
 * in a specific way, any data returned is also encapsulated the same
 * way.  The headers don't seem to follow any popular standard.
 *
 * This driver adds and strips these headers from the ethernet frames
 * sent/received from the CDC Ethernet port.  The proprietary header
 * replaces the standard ethernet header in a packet so only actual
 * ethernet frames are allowed.  The headers allow some form of
 * multiplexing by using non standard values of the .h_proto field.
 * Windows/Mac drivers do send a couple of such frames to the device
 * during initialisation, with protocol set to 0x0906 or 0x0b06 and (what
 * seems to be) a flag in the .dummy_flags.  This doesn't seem necessary
 * for modem operation but can possibly be used for GPS or other functions.
 */

struct vl600_frame_hdr {} __attribute__((packed));

struct vl600_pkt_hdr {} __attribute__((packed));

struct vl600_state {};

static int vl600_bind(struct usbnet *dev, struct usb_interface *intf)
{}

static void vl600_unbind(struct usbnet *dev, struct usb_interface *intf)
{}

static int vl600_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
{}

static struct sk_buff *vl600_tx_fixup(struct usbnet *dev,
		struct sk_buff *skb, gfp_t flags)
{}

static const struct driver_info	vl600_info =;

static const struct usb_device_id products[] =;
MODULE_DEVICE_TABLE(usb, products);

static struct usb_driver lg_vl600_driver =;

module_usb_driver();

MODULE_AUTHOR();
MODULE_DESCRIPTION();
MODULE_LICENSE();