#include <linux/module.h>
#include <linux/sched.h>
#include <linux/stddef.h>
#include <linux/netdevice.h>
#include <linux/etherdevice.h>
#include <linux/ethtool.h>
#include <linux/mii.h>
#include <linux/usb.h>
#include <linux/crc32.h>
#include <linux/usb/usbnet.h>
#include <linux/slab.h>
#define DM_READ_REGS …
#define DM_WRITE_REGS …
#define DM_READ_MEMS …
#define DM_WRITE_REG …
#define DM_WRITE_MEMS …
#define DM_WRITE_MEM …
#define DM_NET_CTRL …
#define DM_RX_CTRL …
#define DM_SHARED_CTRL …
#define DM_SHARED_ADDR …
#define DM_SHARED_DATA …
#define DM_PHY_ADDR …
#define DM_MCAST_ADDR …
#define DM_GPR_CTRL …
#define DM_GPR_DATA …
#define DM_CHIP_ID …
#define DM_MODE_CTRL …
#define ID_DM9601 …
#define ID_DM9620 …
#define DM_MAX_MCAST …
#define DM_MCAST_SIZE …
#define DM_EEPROM_LEN …
#define DM_TX_OVERHEAD …
#define DM_RX_OVERHEAD …
#define DM_TIMEOUT …
static int dm_read(struct usbnet *dev, u8 reg, u16 length, void *data)
{ … }
static int dm_read_reg(struct usbnet *dev, u8 reg, u8 *value)
{ … }
static int dm_write(struct usbnet *dev, u8 reg, u16 length, void *data)
{ … }
static int dm_write_reg(struct usbnet *dev, u8 reg, u8 value)
{ … }
static void dm_write_async(struct usbnet *dev, u8 reg, u16 length,
const void *data)
{ … }
static void dm_write_reg_async(struct usbnet *dev, u8 reg, u8 value)
{ … }
static int dm_read_shared_word(struct usbnet *dev, int phy, u8 reg, __le16 *value)
{ … }
static int dm_write_shared_word(struct usbnet *dev, int phy, u8 reg, __le16 value)
{ … }
static int dm_read_eeprom_word(struct usbnet *dev, u8 offset, void *value)
{ … }
static int dm9601_get_eeprom_len(struct net_device *dev)
{ … }
static int dm9601_get_eeprom(struct net_device *net,
struct ethtool_eeprom *eeprom, u8 * data)
{ … }
static int dm9601_mdio_read(struct net_device *netdev, int phy_id, int loc)
{ … }
static void dm9601_mdio_write(struct net_device *netdev, int phy_id, int loc,
int val)
{ … }
static void dm9601_get_drvinfo(struct net_device *net,
struct ethtool_drvinfo *info)
{ … }
static u32 dm9601_get_link(struct net_device *net)
{ … }
static int dm9601_ioctl(struct net_device *net, struct ifreq *rq, int cmd)
{ … }
static const struct ethtool_ops dm9601_ethtool_ops = …;
static void dm9601_set_multicast(struct net_device *net)
{ … }
static void __dm9601_set_mac_address(struct usbnet *dev)
{ … }
static int dm9601_set_mac_address(struct net_device *net, void *p)
{ … }
static const struct net_device_ops dm9601_netdev_ops = …;
static int dm9601_bind(struct usbnet *dev, struct usb_interface *intf)
{ … }
static int dm9601_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
{ … }
static struct sk_buff *dm9601_tx_fixup(struct usbnet *dev, struct sk_buff *skb,
gfp_t flags)
{ … }
static void dm9601_status(struct usbnet *dev, struct urb *urb)
{ … }
static int dm9601_link_reset(struct usbnet *dev)
{ … }
static const struct driver_info dm9601_info = …;
static const struct usb_device_id products[] = …;
MODULE_DEVICE_TABLE(usb, products);
static struct usb_driver dm9601_driver = …;
module_usb_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;