#include <linux/can.h>
#include <linux/can/dev.h>
#include <linux/can/error.h>
#include <linux/ethtool.h>
#include <linux/module.h>
#include <linux/netdevice.h>
#include <linux/signal.h>
#include <linux/slab.h>
#include <linux/units.h>
#include <linux/usb.h>
MODULE_AUTHOR(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;
#define ESD_USB_ESDGMBH_VENDOR_ID …
#define ESD_USB_CANUSB2_PRODUCT_ID …
#define ESD_USB_CANUSBM_PRODUCT_ID …
#define ESD_USB_CANUSB3_PRODUCT_ID …
#define ESD_USB_2_CAN_CLOCK …
#define ESD_USB_M_CAN_CLOCK …
#define ESD_USB_3_CAN_CLOCK …
#define ESD_USB_MAX_NETS …
#define ESD_USB_CMD_VERSION …
#define ESD_USB_CMD_CAN_RX …
#define ESD_USB_CMD_CAN_TX …
#define ESD_USB_CMD_SETBAUD …
#define ESD_USB_CMD_TS …
#define ESD_USB_CMD_IDADD …
#define ESD_USB_RTR …
#define ESD_USB_NO_BRS …
#define ESD_USB_ESI …
#define ESD_USB_FD …
#define ESD_USB_EXTID …
#define ESD_USB_EVENT …
#define ESD_USB_IDMASK …
#define ESD_USB_EV_CAN_ERROR_EXT …
#define ESD_USB_LOM …
#define ESD_USB_UBR …
#define ESD_USB_NO_BAUDRATE …
#define ESD_USB_2_TSEG1_SHIFT …
#define ESD_USB_2_TSEG2_SHIFT …
#define ESD_USB_2_SJW_SHIFT …
#define ESD_USB_M_SJW_SHIFT …
#define ESD_USB_TRIPLE_SAMPLES …
#define ESD_USB_3_TDC_MODE_AUTO …
#define ESD_USB_ID_ENABLE …
#define ESD_USB_MAX_ID_SEGMENT …
#define ESD_USB_SJA1000_ECC_SEG …
#define ESD_USB_SJA1000_ECC_DIR …
#define ESD_USB_SJA1000_ECC_ERR …
#define ESD_USB_SJA1000_ECC_BIT …
#define ESD_USB_SJA1000_ECC_FORM …
#define ESD_USB_SJA1000_ECC_STUFF …
#define ESD_USB_SJA1000_ECC_MASK …
#define ESD_USB_BUSSTATE_MASK …
#define ESD_USB_BUSSTATE_WARN …
#define ESD_USB_BUSSTATE_ERRPASSIVE …
#define ESD_USB_BUSSTATE_BUSOFF …
#define ESD_USB_RX_BUFFER_SIZE …
#define ESD_USB_MAX_RX_URBS …
#define ESD_USB_MAX_TX_URBS …
#define ESD_USB_3_BAUDRATE_MODE_DISABLE …
#define ESD_USB_3_BAUDRATE_MODE_INDEX …
#define ESD_USB_3_BAUDRATE_MODE_BTR_CTRL …
#define ESD_USB_3_BAUDRATE_MODE_BTR_CANONICAL …
#define ESD_USB_3_BAUDRATE_MODE_NUM …
#define ESD_USB_3_BAUDRATE_MODE_AUTOBAUD …
#define ESD_USB_3_BAUDRATE_FLAG_FD …
#define ESD_USB_3_BAUDRATE_FLAG_LOM …
#define ESD_USB_3_BAUDRATE_FLAG_STM …
#define ESD_USB_3_BAUDRATE_FLAG_TRS …
#define ESD_USB_3_BAUDRATE_FLAG_TXP …
struct esd_usb_header_msg { … };
struct esd_usb_version_msg { … };
struct esd_usb_version_reply_msg { … };
struct esd_usb_rx_msg { … };
struct esd_usb_tx_msg { … };
struct esd_usb_tx_done_msg { … };
struct esd_usb_id_filter_msg { … };
struct esd_usb_set_baudrate_msg { … };
struct esd_usb_3_baudrate_cfg { … };
struct esd_usb_3_tdc_cfg { … };
struct esd_usb_3_set_baudrate_msg_x { … };
esd_usb_msg;
static struct usb_device_id esd_usb_table[] = …;
MODULE_DEVICE_TABLE(usb, esd_usb_table);
struct esd_usb_net_priv;
struct esd_tx_urb_context { … };
struct esd_usb { … };
struct esd_usb_net_priv { … };
static void esd_usb_rx_event(struct esd_usb_net_priv *priv,
union esd_usb_msg *msg)
{ … }
static void esd_usb_rx_can_msg(struct esd_usb_net_priv *priv,
union esd_usb_msg *msg)
{ … }
static void esd_usb_tx_done_msg(struct esd_usb_net_priv *priv,
union esd_usb_msg *msg)
{ … }
static void esd_usb_read_bulk_callback(struct urb *urb)
{ … }
static void esd_usb_write_bulk_callback(struct urb *urb)
{ … }
static ssize_t firmware_show(struct device *d,
struct device_attribute *attr, char *buf)
{ … }
static DEVICE_ATTR_RO(firmware);
static ssize_t hardware_show(struct device *d,
struct device_attribute *attr, char *buf)
{ … }
static DEVICE_ATTR_RO(hardware);
static ssize_t nets_show(struct device *d,
struct device_attribute *attr, char *buf)
{ … }
static DEVICE_ATTR_RO(nets);
static int esd_usb_send_msg(struct esd_usb *dev, union esd_usb_msg *msg)
{ … }
static int esd_usb_wait_msg(struct esd_usb *dev,
union esd_usb_msg *msg)
{ … }
static int esd_usb_setup_rx_urbs(struct esd_usb *dev)
{ … }
static int esd_usb_start(struct esd_usb_net_priv *priv)
{ … }
static void unlink_all_urbs(struct esd_usb *dev)
{ … }
static int esd_usb_open(struct net_device *netdev)
{ … }
static netdev_tx_t esd_usb_start_xmit(struct sk_buff *skb,
struct net_device *netdev)
{ … }
static int esd_usb_close(struct net_device *netdev)
{ … }
static const struct net_device_ops esd_usb_netdev_ops = …;
static const struct ethtool_ops esd_usb_ethtool_ops = …;
static const struct can_bittiming_const esd_usb_2_bittiming_const = …;
static int esd_usb_2_set_bittiming(struct net_device *netdev)
{ … }
static const struct can_bittiming_const esd_usb_3_nom_bittiming_const = …;
static const struct can_bittiming_const esd_usb_3_data_bittiming_const = …;
static int esd_usb_3_set_bittiming(struct net_device *netdev)
{ … }
static int esd_usb_get_berr_counter(const struct net_device *netdev,
struct can_berr_counter *bec)
{ … }
static int esd_usb_set_mode(struct net_device *netdev, enum can_mode mode)
{ … }
static int esd_usb_probe_one_net(struct usb_interface *intf, int index)
{ … }
static int esd_usb_probe(struct usb_interface *intf,
const struct usb_device_id *id)
{ … }
static void esd_usb_disconnect(struct usb_interface *intf)
{ … }
static struct usb_driver esd_usb_driver = …;
module_usb_driver(…) …;