cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

gs_usb.c (33052B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/* CAN driver for Geschwister Schneider USB/CAN devices
      3 * and bytewerk.org candleLight USB CAN interfaces.
      4 *
      5 * Copyright (C) 2013-2016 Geschwister Schneider Technologie-,
      6 * Entwicklungs- und Vertriebs UG (Haftungsbeschränkt).
      7 * Copyright (C) 2016 Hubert Denkmair
      8 *
      9 * Many thanks to all socketcan devs!
     10 */
     11
     12#include <linux/bitfield.h>
     13#include <linux/ethtool.h>
     14#include <linux/init.h>
     15#include <linux/module.h>
     16#include <linux/netdevice.h>
     17#include <linux/signal.h>
     18#include <linux/usb.h>
     19
     20#include <linux/can.h>
     21#include <linux/can/dev.h>
     22#include <linux/can/error.h>
     23
     24/* Device specific constants */
     25#define USB_GSUSB_1_VENDOR_ID 0x1d50
     26#define USB_GSUSB_1_PRODUCT_ID 0x606f
     27
     28#define USB_CANDLELIGHT_VENDOR_ID 0x1209
     29#define USB_CANDLELIGHT_PRODUCT_ID 0x2323
     30
     31#define USB_CES_CANEXT_FD_VENDOR_ID 0x1cd2
     32#define USB_CES_CANEXT_FD_PRODUCT_ID 0x606f
     33
     34#define USB_ABE_CANDEBUGGER_FD_VENDOR_ID 0x16d0
     35#define USB_ABE_CANDEBUGGER_FD_PRODUCT_ID 0x10b8
     36
     37#define GSUSB_ENDPOINT_IN 1
     38#define GSUSB_ENDPOINT_OUT 2
     39
     40/* Device specific constants */
     41enum gs_usb_breq {
     42	GS_USB_BREQ_HOST_FORMAT = 0,
     43	GS_USB_BREQ_BITTIMING,
     44	GS_USB_BREQ_MODE,
     45	GS_USB_BREQ_BERR,
     46	GS_USB_BREQ_BT_CONST,
     47	GS_USB_BREQ_DEVICE_CONFIG,
     48	GS_USB_BREQ_TIMESTAMP,
     49	GS_USB_BREQ_IDENTIFY,
     50	GS_USB_BREQ_GET_USER_ID,
     51	GS_USB_BREQ_QUIRK_CANTACT_PRO_DATA_BITTIMING = GS_USB_BREQ_GET_USER_ID,
     52	GS_USB_BREQ_SET_USER_ID,
     53	GS_USB_BREQ_DATA_BITTIMING,
     54	GS_USB_BREQ_BT_CONST_EXT,
     55};
     56
     57enum gs_can_mode {
     58	/* reset a channel. turns it off */
     59	GS_CAN_MODE_RESET = 0,
     60	/* starts a channel */
     61	GS_CAN_MODE_START
     62};
     63
     64enum gs_can_state {
     65	GS_CAN_STATE_ERROR_ACTIVE = 0,
     66	GS_CAN_STATE_ERROR_WARNING,
     67	GS_CAN_STATE_ERROR_PASSIVE,
     68	GS_CAN_STATE_BUS_OFF,
     69	GS_CAN_STATE_STOPPED,
     70	GS_CAN_STATE_SLEEPING
     71};
     72
     73enum gs_can_identify_mode {
     74	GS_CAN_IDENTIFY_OFF = 0,
     75	GS_CAN_IDENTIFY_ON
     76};
     77
     78/* data types passed between host and device */
     79
     80/* The firmware on the original USB2CAN by Geschwister Schneider
     81 * Technologie Entwicklungs- und Vertriebs UG exchanges all data
     82 * between the host and the device in host byte order. This is done
     83 * with the struct gs_host_config::byte_order member, which is sent
     84 * first to indicate the desired byte order.
     85 *
     86 * The widely used open source firmware candleLight doesn't support
     87 * this feature and exchanges the data in little endian byte order.
     88 */
     89struct gs_host_config {
     90	__le32 byte_order;
     91} __packed;
     92
     93struct gs_device_config {
     94	u8 reserved1;
     95	u8 reserved2;
     96	u8 reserved3;
     97	u8 icount;
     98	__le32 sw_version;
     99	__le32 hw_version;
    100} __packed;
    101
    102#define GS_CAN_MODE_NORMAL 0
    103#define GS_CAN_MODE_LISTEN_ONLY BIT(0)
    104#define GS_CAN_MODE_LOOP_BACK BIT(1)
    105#define GS_CAN_MODE_TRIPLE_SAMPLE BIT(2)
    106#define GS_CAN_MODE_ONE_SHOT BIT(3)
    107#define GS_CAN_MODE_HW_TIMESTAMP BIT(4)
    108/* GS_CAN_FEATURE_IDENTIFY BIT(5) */
    109/* GS_CAN_FEATURE_USER_ID BIT(6) */
    110#define GS_CAN_MODE_PAD_PKTS_TO_MAX_PKT_SIZE BIT(7)
    111#define GS_CAN_MODE_FD BIT(8)
    112/* GS_CAN_FEATURE_REQ_USB_QUIRK_LPC546XX BIT(9) */
    113/* GS_CAN_FEATURE_BT_CONST_EXT BIT(10) */
    114
    115struct gs_device_mode {
    116	__le32 mode;
    117	__le32 flags;
    118} __packed;
    119
    120struct gs_device_state {
    121	__le32 state;
    122	__le32 rxerr;
    123	__le32 txerr;
    124} __packed;
    125
    126struct gs_device_bittiming {
    127	__le32 prop_seg;
    128	__le32 phase_seg1;
    129	__le32 phase_seg2;
    130	__le32 sjw;
    131	__le32 brp;
    132} __packed;
    133
    134struct gs_identify_mode {
    135	__le32 mode;
    136} __packed;
    137
    138#define GS_CAN_FEATURE_LISTEN_ONLY BIT(0)
    139#define GS_CAN_FEATURE_LOOP_BACK BIT(1)
    140#define GS_CAN_FEATURE_TRIPLE_SAMPLE BIT(2)
    141#define GS_CAN_FEATURE_ONE_SHOT BIT(3)
    142#define GS_CAN_FEATURE_HW_TIMESTAMP BIT(4)
    143#define GS_CAN_FEATURE_IDENTIFY BIT(5)
    144#define GS_CAN_FEATURE_USER_ID BIT(6)
    145#define GS_CAN_FEATURE_PAD_PKTS_TO_MAX_PKT_SIZE BIT(7)
    146#define GS_CAN_FEATURE_FD BIT(8)
    147#define GS_CAN_FEATURE_REQ_USB_QUIRK_LPC546XX BIT(9)
    148#define GS_CAN_FEATURE_BT_CONST_EXT BIT(10)
    149#define GS_CAN_FEATURE_MASK GENMASK(10, 0)
    150
    151/* internal quirks - keep in GS_CAN_FEATURE space for now */
    152
    153/* CANtact Pro original firmware:
    154 * BREQ DATA_BITTIMING overlaps with GET_USER_ID
    155 */
    156#define GS_CAN_FEATURE_QUIRK_BREQ_CANTACT_PRO BIT(31)
    157
    158struct gs_device_bt_const {
    159	__le32 feature;
    160	__le32 fclk_can;
    161	__le32 tseg1_min;
    162	__le32 tseg1_max;
    163	__le32 tseg2_min;
    164	__le32 tseg2_max;
    165	__le32 sjw_max;
    166	__le32 brp_min;
    167	__le32 brp_max;
    168	__le32 brp_inc;
    169} __packed;
    170
    171struct gs_device_bt_const_extended {
    172	__le32 feature;
    173	__le32 fclk_can;
    174	__le32 tseg1_min;
    175	__le32 tseg1_max;
    176	__le32 tseg2_min;
    177	__le32 tseg2_max;
    178	__le32 sjw_max;
    179	__le32 brp_min;
    180	__le32 brp_max;
    181	__le32 brp_inc;
    182
    183	__le32 dtseg1_min;
    184	__le32 dtseg1_max;
    185	__le32 dtseg2_min;
    186	__le32 dtseg2_max;
    187	__le32 dsjw_max;
    188	__le32 dbrp_min;
    189	__le32 dbrp_max;
    190	__le32 dbrp_inc;
    191} __packed;
    192
    193#define GS_CAN_FLAG_OVERFLOW BIT(0)
    194#define GS_CAN_FLAG_FD BIT(1)
    195#define GS_CAN_FLAG_BRS BIT(2)
    196#define GS_CAN_FLAG_ESI BIT(3)
    197
    198struct classic_can {
    199	u8 data[8];
    200} __packed;
    201
    202struct classic_can_quirk {
    203	u8 data[8];
    204	u8 quirk;
    205} __packed;
    206
    207struct canfd {
    208	u8 data[64];
    209} __packed;
    210
    211struct canfd_quirk {
    212	u8 data[64];
    213	u8 quirk;
    214} __packed;
    215
    216struct gs_host_frame {
    217	u32 echo_id;
    218	__le32 can_id;
    219
    220	u8 can_dlc;
    221	u8 channel;
    222	u8 flags;
    223	u8 reserved;
    224
    225	union {
    226		DECLARE_FLEX_ARRAY(struct classic_can, classic_can);
    227		DECLARE_FLEX_ARRAY(struct classic_can_quirk, classic_can_quirk);
    228		DECLARE_FLEX_ARRAY(struct canfd, canfd);
    229		DECLARE_FLEX_ARRAY(struct canfd_quirk, canfd_quirk);
    230	};
    231} __packed;
    232/* The GS USB devices make use of the same flags and masks as in
    233 * linux/can.h and linux/can/error.h, and no additional mapping is necessary.
    234 */
    235
    236/* Only send a max of GS_MAX_TX_URBS frames per channel at a time. */
    237#define GS_MAX_TX_URBS 10
    238/* Only launch a max of GS_MAX_RX_URBS usb requests at a time. */
    239#define GS_MAX_RX_URBS 30
    240/* Maximum number of interfaces the driver supports per device.
    241 * Current hardware only supports 3 interfaces. The future may vary.
    242 */
    243#define GS_MAX_INTF 3
    244
    245struct gs_tx_context {
    246	struct gs_can *dev;
    247	unsigned int echo_id;
    248};
    249
    250struct gs_can {
    251	struct can_priv can; /* must be the first member */
    252
    253	struct gs_usb *parent;
    254
    255	struct net_device *netdev;
    256	struct usb_device *udev;
    257	struct usb_interface *iface;
    258
    259	struct can_bittiming_const bt_const, data_bt_const;
    260	unsigned int channel;	/* channel number */
    261
    262	u32 feature;
    263	unsigned int hf_size_tx;
    264
    265	/* This lock prevents a race condition between xmit and receive. */
    266	spinlock_t tx_ctx_lock;
    267	struct gs_tx_context tx_context[GS_MAX_TX_URBS];
    268
    269	struct usb_anchor tx_submitted;
    270	atomic_t active_tx_urbs;
    271	void *rxbuf[GS_MAX_RX_URBS];
    272	dma_addr_t rxbuf_dma[GS_MAX_RX_URBS];
    273};
    274
    275/* usb interface struct */
    276struct gs_usb {
    277	struct gs_can *canch[GS_MAX_INTF];
    278	struct usb_anchor rx_submitted;
    279	struct usb_device *udev;
    280	unsigned int hf_size_rx;
    281	u8 active_channels;
    282};
    283
    284/* 'allocate' a tx context.
    285 * returns a valid tx context or NULL if there is no space.
    286 */
    287static struct gs_tx_context *gs_alloc_tx_context(struct gs_can *dev)
    288{
    289	int i = 0;
    290	unsigned long flags;
    291
    292	spin_lock_irqsave(&dev->tx_ctx_lock, flags);
    293
    294	for (; i < GS_MAX_TX_URBS; i++) {
    295		if (dev->tx_context[i].echo_id == GS_MAX_TX_URBS) {
    296			dev->tx_context[i].echo_id = i;
    297			spin_unlock_irqrestore(&dev->tx_ctx_lock, flags);
    298			return &dev->tx_context[i];
    299		}
    300	}
    301
    302	spin_unlock_irqrestore(&dev->tx_ctx_lock, flags);
    303	return NULL;
    304}
    305
    306/* releases a tx context
    307 */
    308static void gs_free_tx_context(struct gs_tx_context *txc)
    309{
    310	txc->echo_id = GS_MAX_TX_URBS;
    311}
    312
    313/* Get a tx context by id.
    314 */
    315static struct gs_tx_context *gs_get_tx_context(struct gs_can *dev,
    316					       unsigned int id)
    317{
    318	unsigned long flags;
    319
    320	if (id < GS_MAX_TX_URBS) {
    321		spin_lock_irqsave(&dev->tx_ctx_lock, flags);
    322		if (dev->tx_context[id].echo_id == id) {
    323			spin_unlock_irqrestore(&dev->tx_ctx_lock, flags);
    324			return &dev->tx_context[id];
    325		}
    326		spin_unlock_irqrestore(&dev->tx_ctx_lock, flags);
    327	}
    328	return NULL;
    329}
    330
    331static int gs_cmd_reset(struct gs_can *gsdev)
    332{
    333	struct gs_device_mode *dm;
    334	struct usb_interface *intf = gsdev->iface;
    335	int rc;
    336
    337	dm = kzalloc(sizeof(*dm), GFP_KERNEL);
    338	if (!dm)
    339		return -ENOMEM;
    340
    341	dm->mode = GS_CAN_MODE_RESET;
    342
    343	rc = usb_control_msg(interface_to_usbdev(intf),
    344			     usb_sndctrlpipe(interface_to_usbdev(intf), 0),
    345			     GS_USB_BREQ_MODE,
    346			     USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_INTERFACE,
    347			     gsdev->channel, 0, dm, sizeof(*dm), 1000);
    348
    349	kfree(dm);
    350
    351	return rc;
    352}
    353
    354static void gs_update_state(struct gs_can *dev, struct can_frame *cf)
    355{
    356	struct can_device_stats *can_stats = &dev->can.can_stats;
    357
    358	if (cf->can_id & CAN_ERR_RESTARTED) {
    359		dev->can.state = CAN_STATE_ERROR_ACTIVE;
    360		can_stats->restarts++;
    361	} else if (cf->can_id & CAN_ERR_BUSOFF) {
    362		dev->can.state = CAN_STATE_BUS_OFF;
    363		can_stats->bus_off++;
    364	} else if (cf->can_id & CAN_ERR_CRTL) {
    365		if ((cf->data[1] & CAN_ERR_CRTL_TX_WARNING) ||
    366		    (cf->data[1] & CAN_ERR_CRTL_RX_WARNING)) {
    367			dev->can.state = CAN_STATE_ERROR_WARNING;
    368			can_stats->error_warning++;
    369		} else if ((cf->data[1] & CAN_ERR_CRTL_TX_PASSIVE) ||
    370			   (cf->data[1] & CAN_ERR_CRTL_RX_PASSIVE)) {
    371			dev->can.state = CAN_STATE_ERROR_PASSIVE;
    372			can_stats->error_passive++;
    373		} else {
    374			dev->can.state = CAN_STATE_ERROR_ACTIVE;
    375		}
    376	}
    377}
    378
    379static void gs_usb_receive_bulk_callback(struct urb *urb)
    380{
    381	struct gs_usb *usbcan = urb->context;
    382	struct gs_can *dev;
    383	struct net_device *netdev;
    384	int rc;
    385	struct net_device_stats *stats;
    386	struct gs_host_frame *hf = urb->transfer_buffer;
    387	struct gs_tx_context *txc;
    388	struct can_frame *cf;
    389	struct canfd_frame *cfd;
    390	struct sk_buff *skb;
    391
    392	BUG_ON(!usbcan);
    393
    394	switch (urb->status) {
    395	case 0: /* success */
    396		break;
    397	case -ENOENT:
    398	case -ESHUTDOWN:
    399		return;
    400	default:
    401		/* do not resubmit aborted urbs. eg: when device goes down */
    402		return;
    403	}
    404
    405	/* device reports out of range channel id */
    406	if (hf->channel >= GS_MAX_INTF)
    407		goto device_detach;
    408
    409	dev = usbcan->canch[hf->channel];
    410
    411	netdev = dev->netdev;
    412	stats = &netdev->stats;
    413
    414	if (!netif_device_present(netdev))
    415		return;
    416
    417	if (hf->echo_id == -1) { /* normal rx */
    418		if (hf->flags & GS_CAN_FLAG_FD) {
    419			skb = alloc_canfd_skb(dev->netdev, &cfd);
    420			if (!skb)
    421				return;
    422
    423			cfd->can_id = le32_to_cpu(hf->can_id);
    424			cfd->len = can_fd_dlc2len(hf->can_dlc);
    425			if (hf->flags & GS_CAN_FLAG_BRS)
    426				cfd->flags |= CANFD_BRS;
    427			if (hf->flags & GS_CAN_FLAG_ESI)
    428				cfd->flags |= CANFD_ESI;
    429
    430			memcpy(cfd->data, hf->canfd->data, cfd->len);
    431		} else {
    432			skb = alloc_can_skb(dev->netdev, &cf);
    433			if (!skb)
    434				return;
    435
    436			cf->can_id = le32_to_cpu(hf->can_id);
    437			can_frame_set_cc_len(cf, hf->can_dlc, dev->can.ctrlmode);
    438
    439			memcpy(cf->data, hf->classic_can->data, 8);
    440
    441			/* ERROR frames tell us information about the controller */
    442			if (le32_to_cpu(hf->can_id) & CAN_ERR_FLAG)
    443				gs_update_state(dev, cf);
    444		}
    445
    446		netdev->stats.rx_packets++;
    447		netdev->stats.rx_bytes += hf->can_dlc;
    448
    449		netif_rx(skb);
    450	} else { /* echo_id == hf->echo_id */
    451		if (hf->echo_id >= GS_MAX_TX_URBS) {
    452			netdev_err(netdev,
    453				   "Unexpected out of range echo id %u\n",
    454				   hf->echo_id);
    455			goto resubmit_urb;
    456		}
    457
    458		txc = gs_get_tx_context(dev, hf->echo_id);
    459
    460		/* bad devices send bad echo_ids. */
    461		if (!txc) {
    462			netdev_err(netdev,
    463				   "Unexpected unused echo id %u\n",
    464				   hf->echo_id);
    465			goto resubmit_urb;
    466		}
    467
    468		netdev->stats.tx_packets++;
    469		netdev->stats.tx_bytes += can_get_echo_skb(netdev, hf->echo_id,
    470							   NULL);
    471
    472		gs_free_tx_context(txc);
    473
    474		atomic_dec(&dev->active_tx_urbs);
    475
    476		netif_wake_queue(netdev);
    477	}
    478
    479	if (hf->flags & GS_CAN_FLAG_OVERFLOW) {
    480		skb = alloc_can_err_skb(netdev, &cf);
    481		if (!skb)
    482			goto resubmit_urb;
    483
    484		cf->can_id |= CAN_ERR_CRTL;
    485		cf->len = CAN_ERR_DLC;
    486		cf->data[1] = CAN_ERR_CRTL_RX_OVERFLOW;
    487		stats->rx_over_errors++;
    488		stats->rx_errors++;
    489		netif_rx(skb);
    490	}
    491
    492 resubmit_urb:
    493	usb_fill_bulk_urb(urb, usbcan->udev,
    494			  usb_rcvbulkpipe(usbcan->udev, GSUSB_ENDPOINT_IN),
    495			  hf, dev->parent->hf_size_rx,
    496			  gs_usb_receive_bulk_callback, usbcan);
    497
    498	rc = usb_submit_urb(urb, GFP_ATOMIC);
    499
    500	/* USB failure take down all interfaces */
    501	if (rc == -ENODEV) {
    502 device_detach:
    503		for (rc = 0; rc < GS_MAX_INTF; rc++) {
    504			if (usbcan->canch[rc])
    505				netif_device_detach(usbcan->canch[rc]->netdev);
    506		}
    507	}
    508}
    509
    510static int gs_usb_set_bittiming(struct net_device *netdev)
    511{
    512	struct gs_can *dev = netdev_priv(netdev);
    513	struct can_bittiming *bt = &dev->can.bittiming;
    514	struct usb_interface *intf = dev->iface;
    515	int rc;
    516	struct gs_device_bittiming *dbt;
    517
    518	dbt = kmalloc(sizeof(*dbt), GFP_KERNEL);
    519	if (!dbt)
    520		return -ENOMEM;
    521
    522	dbt->prop_seg = cpu_to_le32(bt->prop_seg);
    523	dbt->phase_seg1 = cpu_to_le32(bt->phase_seg1);
    524	dbt->phase_seg2 = cpu_to_le32(bt->phase_seg2);
    525	dbt->sjw = cpu_to_le32(bt->sjw);
    526	dbt->brp = cpu_to_le32(bt->brp);
    527
    528	/* request bit timings */
    529	rc = usb_control_msg(interface_to_usbdev(intf),
    530			     usb_sndctrlpipe(interface_to_usbdev(intf), 0),
    531			     GS_USB_BREQ_BITTIMING,
    532			     USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_INTERFACE,
    533			     dev->channel, 0, dbt, sizeof(*dbt), 1000);
    534
    535	kfree(dbt);
    536
    537	if (rc < 0)
    538		dev_err(netdev->dev.parent, "Couldn't set bittimings (err=%d)",
    539			rc);
    540
    541	return (rc > 0) ? 0 : rc;
    542}
    543
    544static int gs_usb_set_data_bittiming(struct net_device *netdev)
    545{
    546	struct gs_can *dev = netdev_priv(netdev);
    547	struct can_bittiming *bt = &dev->can.data_bittiming;
    548	struct usb_interface *intf = dev->iface;
    549	struct gs_device_bittiming *dbt;
    550	u8 request = GS_USB_BREQ_DATA_BITTIMING;
    551	int rc;
    552
    553	dbt = kmalloc(sizeof(*dbt), GFP_KERNEL);
    554	if (!dbt)
    555		return -ENOMEM;
    556
    557	dbt->prop_seg = cpu_to_le32(bt->prop_seg);
    558	dbt->phase_seg1 = cpu_to_le32(bt->phase_seg1);
    559	dbt->phase_seg2 = cpu_to_le32(bt->phase_seg2);
    560	dbt->sjw = cpu_to_le32(bt->sjw);
    561	dbt->brp = cpu_to_le32(bt->brp);
    562
    563	if (dev->feature & GS_CAN_FEATURE_QUIRK_BREQ_CANTACT_PRO)
    564		request = GS_USB_BREQ_QUIRK_CANTACT_PRO_DATA_BITTIMING;
    565
    566	/* request bit timings */
    567	rc = usb_control_msg(interface_to_usbdev(intf),
    568			     usb_sndctrlpipe(interface_to_usbdev(intf), 0),
    569			     request,
    570			     USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_INTERFACE,
    571			     dev->channel, 0, dbt, sizeof(*dbt), 1000);
    572
    573	kfree(dbt);
    574
    575	if (rc < 0)
    576		dev_err(netdev->dev.parent,
    577			"Couldn't set data bittimings (err=%d)", rc);
    578
    579	return (rc > 0) ? 0 : rc;
    580}
    581
    582static void gs_usb_xmit_callback(struct urb *urb)
    583{
    584	struct gs_tx_context *txc = urb->context;
    585	struct gs_can *dev = txc->dev;
    586	struct net_device *netdev = dev->netdev;
    587
    588	if (urb->status)
    589		netdev_info(netdev, "usb xmit fail %u\n", txc->echo_id);
    590
    591	usb_free_coherent(urb->dev, urb->transfer_buffer_length,
    592			  urb->transfer_buffer, urb->transfer_dma);
    593}
    594
    595static netdev_tx_t gs_can_start_xmit(struct sk_buff *skb,
    596				     struct net_device *netdev)
    597{
    598	struct gs_can *dev = netdev_priv(netdev);
    599	struct net_device_stats *stats = &dev->netdev->stats;
    600	struct urb *urb;
    601	struct gs_host_frame *hf;
    602	struct can_frame *cf;
    603	struct canfd_frame *cfd;
    604	int rc;
    605	unsigned int idx;
    606	struct gs_tx_context *txc;
    607
    608	if (can_dropped_invalid_skb(netdev, skb))
    609		return NETDEV_TX_OK;
    610
    611	/* find an empty context to keep track of transmission */
    612	txc = gs_alloc_tx_context(dev);
    613	if (!txc)
    614		return NETDEV_TX_BUSY;
    615
    616	/* create a URB, and a buffer for it */
    617	urb = usb_alloc_urb(0, GFP_ATOMIC);
    618	if (!urb)
    619		goto nomem_urb;
    620
    621	hf = usb_alloc_coherent(dev->udev, dev->hf_size_tx, GFP_ATOMIC,
    622				&urb->transfer_dma);
    623	if (!hf) {
    624		netdev_err(netdev, "No memory left for USB buffer\n");
    625		goto nomem_hf;
    626	}
    627
    628	idx = txc->echo_id;
    629
    630	if (idx >= GS_MAX_TX_URBS) {
    631		netdev_err(netdev, "Invalid tx context %u\n", idx);
    632		goto badidx;
    633	}
    634
    635	hf->echo_id = idx;
    636	hf->channel = dev->channel;
    637	hf->flags = 0;
    638	hf->reserved = 0;
    639
    640	if (can_is_canfd_skb(skb)) {
    641		cfd = (struct canfd_frame *)skb->data;
    642
    643		hf->can_id = cpu_to_le32(cfd->can_id);
    644		hf->can_dlc = can_fd_len2dlc(cfd->len);
    645		hf->flags |= GS_CAN_FLAG_FD;
    646		if (cfd->flags & CANFD_BRS)
    647			hf->flags |= GS_CAN_FLAG_BRS;
    648		if (cfd->flags & CANFD_ESI)
    649			hf->flags |= GS_CAN_FLAG_ESI;
    650
    651		memcpy(hf->canfd->data, cfd->data, cfd->len);
    652	} else {
    653		cf = (struct can_frame *)skb->data;
    654
    655		hf->can_id = cpu_to_le32(cf->can_id);
    656		hf->can_dlc = can_get_cc_dlc(cf, dev->can.ctrlmode);
    657
    658		memcpy(hf->classic_can->data, cf->data, cf->len);
    659	}
    660
    661	usb_fill_bulk_urb(urb, dev->udev,
    662			  usb_sndbulkpipe(dev->udev, GSUSB_ENDPOINT_OUT),
    663			  hf, dev->hf_size_tx,
    664			  gs_usb_xmit_callback, txc);
    665
    666	urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
    667	usb_anchor_urb(urb, &dev->tx_submitted);
    668
    669	can_put_echo_skb(skb, netdev, idx, 0);
    670
    671	atomic_inc(&dev->active_tx_urbs);
    672
    673	rc = usb_submit_urb(urb, GFP_ATOMIC);
    674	if (unlikely(rc)) {			/* usb send failed */
    675		atomic_dec(&dev->active_tx_urbs);
    676
    677		can_free_echo_skb(netdev, idx, NULL);
    678		gs_free_tx_context(txc);
    679
    680		usb_unanchor_urb(urb);
    681		usb_free_coherent(dev->udev, urb->transfer_buffer_length,
    682				  urb->transfer_buffer, urb->transfer_dma);
    683
    684		if (rc == -ENODEV) {
    685			netif_device_detach(netdev);
    686		} else {
    687			netdev_err(netdev, "usb_submit failed (err=%d)\n", rc);
    688			stats->tx_dropped++;
    689		}
    690	} else {
    691		/* Slow down tx path */
    692		if (atomic_read(&dev->active_tx_urbs) >= GS_MAX_TX_URBS)
    693			netif_stop_queue(netdev);
    694	}
    695
    696	/* let usb core take care of this urb */
    697	usb_free_urb(urb);
    698
    699	return NETDEV_TX_OK;
    700
    701 badidx:
    702	usb_free_coherent(dev->udev, urb->transfer_buffer_length,
    703			  urb->transfer_buffer, urb->transfer_dma);
    704 nomem_hf:
    705	usb_free_urb(urb);
    706
    707 nomem_urb:
    708	gs_free_tx_context(txc);
    709	dev_kfree_skb(skb);
    710	stats->tx_dropped++;
    711	return NETDEV_TX_OK;
    712}
    713
    714static int gs_can_open(struct net_device *netdev)
    715{
    716	struct gs_can *dev = netdev_priv(netdev);
    717	struct gs_usb *parent = dev->parent;
    718	int rc, i;
    719	struct gs_device_mode *dm;
    720	struct gs_host_frame *hf;
    721	u32 ctrlmode;
    722	u32 flags = 0;
    723
    724	rc = open_candev(netdev);
    725	if (rc)
    726		return rc;
    727
    728	ctrlmode = dev->can.ctrlmode;
    729	if (ctrlmode & CAN_CTRLMODE_FD) {
    730		flags |= GS_CAN_MODE_FD;
    731
    732		if (dev->feature & GS_CAN_FEATURE_REQ_USB_QUIRK_LPC546XX)
    733			dev->hf_size_tx = struct_size(hf, canfd_quirk, 1);
    734		else
    735			dev->hf_size_tx = struct_size(hf, canfd, 1);
    736	} else {
    737		if (dev->feature & GS_CAN_FEATURE_REQ_USB_QUIRK_LPC546XX)
    738			dev->hf_size_tx = struct_size(hf, classic_can_quirk, 1);
    739		else
    740			dev->hf_size_tx = struct_size(hf, classic_can, 1);
    741	}
    742
    743	if (!parent->active_channels) {
    744		for (i = 0; i < GS_MAX_RX_URBS; i++) {
    745			struct urb *urb;
    746			u8 *buf;
    747			dma_addr_t buf_dma;
    748
    749			/* alloc rx urb */
    750			urb = usb_alloc_urb(0, GFP_KERNEL);
    751			if (!urb)
    752				return -ENOMEM;
    753
    754			/* alloc rx buffer */
    755			buf = usb_alloc_coherent(dev->udev,
    756						 dev->parent->hf_size_rx,
    757						 GFP_KERNEL,
    758						 &buf_dma);
    759			if (!buf) {
    760				netdev_err(netdev,
    761					   "No memory left for USB buffer\n");
    762				usb_free_urb(urb);
    763				return -ENOMEM;
    764			}
    765
    766			urb->transfer_dma = buf_dma;
    767
    768			/* fill, anchor, and submit rx urb */
    769			usb_fill_bulk_urb(urb,
    770					  dev->udev,
    771					  usb_rcvbulkpipe(dev->udev,
    772							  GSUSB_ENDPOINT_IN),
    773					  buf,
    774					  dev->parent->hf_size_rx,
    775					  gs_usb_receive_bulk_callback, parent);
    776			urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
    777
    778			usb_anchor_urb(urb, &parent->rx_submitted);
    779
    780			rc = usb_submit_urb(urb, GFP_KERNEL);
    781			if (rc) {
    782				if (rc == -ENODEV)
    783					netif_device_detach(dev->netdev);
    784
    785				netdev_err(netdev,
    786					   "usb_submit failed (err=%d)\n", rc);
    787
    788				usb_unanchor_urb(urb);
    789				usb_free_coherent(dev->udev,
    790						  sizeof(struct gs_host_frame),
    791						  buf,
    792						  buf_dma);
    793				usb_free_urb(urb);
    794				break;
    795			}
    796
    797			dev->rxbuf[i] = buf;
    798			dev->rxbuf_dma[i] = buf_dma;
    799
    800			/* Drop reference,
    801			 * USB core will take care of freeing it
    802			 */
    803			usb_free_urb(urb);
    804		}
    805	}
    806
    807	dm = kmalloc(sizeof(*dm), GFP_KERNEL);
    808	if (!dm)
    809		return -ENOMEM;
    810
    811	/* flags */
    812	if (ctrlmode & CAN_CTRLMODE_LOOPBACK)
    813		flags |= GS_CAN_MODE_LOOP_BACK;
    814	else if (ctrlmode & CAN_CTRLMODE_LISTENONLY)
    815		flags |= GS_CAN_MODE_LISTEN_ONLY;
    816
    817	/* Controller is not allowed to retry TX
    818	 * this mode is unavailable on atmels uc3c hardware
    819	 */
    820	if (ctrlmode & CAN_CTRLMODE_ONE_SHOT)
    821		flags |= GS_CAN_MODE_ONE_SHOT;
    822
    823	if (ctrlmode & CAN_CTRLMODE_3_SAMPLES)
    824		flags |= GS_CAN_MODE_TRIPLE_SAMPLE;
    825
    826	/* finally start device */
    827	dm->mode = cpu_to_le32(GS_CAN_MODE_START);
    828	dm->flags = cpu_to_le32(flags);
    829	rc = usb_control_msg(interface_to_usbdev(dev->iface),
    830			     usb_sndctrlpipe(interface_to_usbdev(dev->iface), 0),
    831			     GS_USB_BREQ_MODE,
    832			     USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_INTERFACE,
    833			     dev->channel, 0, dm, sizeof(*dm), 1000);
    834
    835	if (rc < 0) {
    836		netdev_err(netdev, "Couldn't start device (err=%d)\n", rc);
    837		kfree(dm);
    838		return rc;
    839	}
    840
    841	kfree(dm);
    842
    843	dev->can.state = CAN_STATE_ERROR_ACTIVE;
    844
    845	parent->active_channels++;
    846	if (!(dev->can.ctrlmode & CAN_CTRLMODE_LISTENONLY))
    847		netif_start_queue(netdev);
    848
    849	return 0;
    850}
    851
    852static int gs_can_close(struct net_device *netdev)
    853{
    854	int rc;
    855	struct gs_can *dev = netdev_priv(netdev);
    856	struct gs_usb *parent = dev->parent;
    857	unsigned int i;
    858
    859	netif_stop_queue(netdev);
    860
    861	/* Stop polling */
    862	parent->active_channels--;
    863	if (!parent->active_channels) {
    864		usb_kill_anchored_urbs(&parent->rx_submitted);
    865		for (i = 0; i < GS_MAX_RX_URBS; i++)
    866			usb_free_coherent(dev->udev,
    867					  sizeof(struct gs_host_frame),
    868					  dev->rxbuf[i],
    869					  dev->rxbuf_dma[i]);
    870	}
    871
    872	/* Stop sending URBs */
    873	usb_kill_anchored_urbs(&dev->tx_submitted);
    874	atomic_set(&dev->active_tx_urbs, 0);
    875
    876	/* reset the device */
    877	rc = gs_cmd_reset(dev);
    878	if (rc < 0)
    879		netdev_warn(netdev, "Couldn't shutdown device (err=%d)", rc);
    880
    881	/* reset tx contexts */
    882	for (rc = 0; rc < GS_MAX_TX_URBS; rc++) {
    883		dev->tx_context[rc].dev = dev;
    884		dev->tx_context[rc].echo_id = GS_MAX_TX_URBS;
    885	}
    886
    887	/* close the netdev */
    888	close_candev(netdev);
    889
    890	return 0;
    891}
    892
    893static const struct net_device_ops gs_usb_netdev_ops = {
    894	.ndo_open = gs_can_open,
    895	.ndo_stop = gs_can_close,
    896	.ndo_start_xmit = gs_can_start_xmit,
    897	.ndo_change_mtu = can_change_mtu,
    898};
    899
    900static int gs_usb_set_identify(struct net_device *netdev, bool do_identify)
    901{
    902	struct gs_can *dev = netdev_priv(netdev);
    903	struct gs_identify_mode *imode;
    904	int rc;
    905
    906	imode = kmalloc(sizeof(*imode), GFP_KERNEL);
    907
    908	if (!imode)
    909		return -ENOMEM;
    910
    911	if (do_identify)
    912		imode->mode = cpu_to_le32(GS_CAN_IDENTIFY_ON);
    913	else
    914		imode->mode = cpu_to_le32(GS_CAN_IDENTIFY_OFF);
    915
    916	rc = usb_control_msg(interface_to_usbdev(dev->iface),
    917			     usb_sndctrlpipe(interface_to_usbdev(dev->iface), 0),
    918			     GS_USB_BREQ_IDENTIFY,
    919			     USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_INTERFACE,
    920			     dev->channel, 0, imode, sizeof(*imode), 100);
    921
    922	kfree(imode);
    923
    924	return (rc > 0) ? 0 : rc;
    925}
    926
    927/* blink LED's for finding the this interface */
    928static int gs_usb_set_phys_id(struct net_device *dev,
    929			      enum ethtool_phys_id_state state)
    930{
    931	int rc = 0;
    932
    933	switch (state) {
    934	case ETHTOOL_ID_ACTIVE:
    935		rc = gs_usb_set_identify(dev, GS_CAN_IDENTIFY_ON);
    936		break;
    937	case ETHTOOL_ID_INACTIVE:
    938		rc = gs_usb_set_identify(dev, GS_CAN_IDENTIFY_OFF);
    939		break;
    940	default:
    941		break;
    942	}
    943
    944	return rc;
    945}
    946
    947static const struct ethtool_ops gs_usb_ethtool_ops = {
    948	.set_phys_id = gs_usb_set_phys_id,
    949};
    950
    951static struct gs_can *gs_make_candev(unsigned int channel,
    952				     struct usb_interface *intf,
    953				     struct gs_device_config *dconf)
    954{
    955	struct gs_can *dev;
    956	struct net_device *netdev;
    957	int rc;
    958	struct gs_device_bt_const *bt_const;
    959	struct gs_device_bt_const_extended *bt_const_extended;
    960	u32 feature;
    961
    962	bt_const = kmalloc(sizeof(*bt_const), GFP_KERNEL);
    963	if (!bt_const)
    964		return ERR_PTR(-ENOMEM);
    965
    966	/* fetch bit timing constants */
    967	rc = usb_control_msg(interface_to_usbdev(intf),
    968			     usb_rcvctrlpipe(interface_to_usbdev(intf), 0),
    969			     GS_USB_BREQ_BT_CONST,
    970			     USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_INTERFACE,
    971			     channel, 0, bt_const, sizeof(*bt_const), 1000);
    972
    973	if (rc < 0) {
    974		dev_err(&intf->dev,
    975			"Couldn't get bit timing const for channel (err=%d)\n",
    976			rc);
    977		kfree(bt_const);
    978		return ERR_PTR(rc);
    979	}
    980
    981	/* create netdev */
    982	netdev = alloc_candev(sizeof(struct gs_can), GS_MAX_TX_URBS);
    983	if (!netdev) {
    984		dev_err(&intf->dev, "Couldn't allocate candev\n");
    985		kfree(bt_const);
    986		return ERR_PTR(-ENOMEM);
    987	}
    988
    989	dev = netdev_priv(netdev);
    990
    991	netdev->netdev_ops = &gs_usb_netdev_ops;
    992
    993	netdev->flags |= IFF_ECHO; /* we support full roundtrip echo */
    994
    995	/* dev setup */
    996	strcpy(dev->bt_const.name, "gs_usb");
    997	dev->bt_const.tseg1_min = le32_to_cpu(bt_const->tseg1_min);
    998	dev->bt_const.tseg1_max = le32_to_cpu(bt_const->tseg1_max);
    999	dev->bt_const.tseg2_min = le32_to_cpu(bt_const->tseg2_min);
   1000	dev->bt_const.tseg2_max = le32_to_cpu(bt_const->tseg2_max);
   1001	dev->bt_const.sjw_max = le32_to_cpu(bt_const->sjw_max);
   1002	dev->bt_const.brp_min = le32_to_cpu(bt_const->brp_min);
   1003	dev->bt_const.brp_max = le32_to_cpu(bt_const->brp_max);
   1004	dev->bt_const.brp_inc = le32_to_cpu(bt_const->brp_inc);
   1005
   1006	dev->udev = interface_to_usbdev(intf);
   1007	dev->iface = intf;
   1008	dev->netdev = netdev;
   1009	dev->channel = channel;
   1010
   1011	init_usb_anchor(&dev->tx_submitted);
   1012	atomic_set(&dev->active_tx_urbs, 0);
   1013	spin_lock_init(&dev->tx_ctx_lock);
   1014	for (rc = 0; rc < GS_MAX_TX_URBS; rc++) {
   1015		dev->tx_context[rc].dev = dev;
   1016		dev->tx_context[rc].echo_id = GS_MAX_TX_URBS;
   1017	}
   1018
   1019	/* can setup */
   1020	dev->can.state = CAN_STATE_STOPPED;
   1021	dev->can.clock.freq = le32_to_cpu(bt_const->fclk_can);
   1022	dev->can.bittiming_const = &dev->bt_const;
   1023	dev->can.do_set_bittiming = gs_usb_set_bittiming;
   1024
   1025	dev->can.ctrlmode_supported = CAN_CTRLMODE_CC_LEN8_DLC;
   1026
   1027	feature = le32_to_cpu(bt_const->feature);
   1028	dev->feature = FIELD_GET(GS_CAN_FEATURE_MASK, feature);
   1029	if (feature & GS_CAN_FEATURE_LISTEN_ONLY)
   1030		dev->can.ctrlmode_supported |= CAN_CTRLMODE_LISTENONLY;
   1031
   1032	if (feature & GS_CAN_FEATURE_LOOP_BACK)
   1033		dev->can.ctrlmode_supported |= CAN_CTRLMODE_LOOPBACK;
   1034
   1035	if (feature & GS_CAN_FEATURE_TRIPLE_SAMPLE)
   1036		dev->can.ctrlmode_supported |= CAN_CTRLMODE_3_SAMPLES;
   1037
   1038	if (feature & GS_CAN_FEATURE_ONE_SHOT)
   1039		dev->can.ctrlmode_supported |= CAN_CTRLMODE_ONE_SHOT;
   1040
   1041	if (feature & GS_CAN_FEATURE_FD) {
   1042		dev->can.ctrlmode_supported |= CAN_CTRLMODE_FD;
   1043		/* The data bit timing will be overwritten, if
   1044		 * GS_CAN_FEATURE_BT_CONST_EXT is set.
   1045		 */
   1046		dev->can.data_bittiming_const = &dev->bt_const;
   1047		dev->can.do_set_data_bittiming = gs_usb_set_data_bittiming;
   1048	}
   1049
   1050	/* The CANtact Pro from LinkLayer Labs is based on the
   1051	 * LPC54616 µC, which is affected by the NXP LPC USB transfer
   1052	 * erratum. However, the current firmware (version 2) doesn't
   1053	 * set the GS_CAN_FEATURE_REQ_USB_QUIRK_LPC546XX bit. Set the
   1054	 * feature GS_CAN_FEATURE_REQ_USB_QUIRK_LPC546XX to workaround
   1055	 * this issue.
   1056	 *
   1057	 * For the GS_USB_BREQ_DATA_BITTIMING USB control message the
   1058	 * CANtact Pro firmware uses a request value, which is already
   1059	 * used by the candleLight firmware for a different purpose
   1060	 * (GS_USB_BREQ_GET_USER_ID). Set the feature
   1061	 * GS_CAN_FEATURE_QUIRK_BREQ_CANTACT_PRO to workaround this
   1062	 * issue.
   1063	 */
   1064	if (dev->udev->descriptor.idVendor == cpu_to_le16(USB_GSUSB_1_VENDOR_ID) &&
   1065	    dev->udev->descriptor.idProduct == cpu_to_le16(USB_GSUSB_1_PRODUCT_ID) &&
   1066	    dev->udev->manufacturer && dev->udev->product &&
   1067	    !strcmp(dev->udev->manufacturer, "LinkLayer Labs") &&
   1068	    !strcmp(dev->udev->product, "CANtact Pro") &&
   1069	    (le32_to_cpu(dconf->sw_version) <= 2))
   1070		dev->feature |= GS_CAN_FEATURE_REQ_USB_QUIRK_LPC546XX |
   1071			GS_CAN_FEATURE_QUIRK_BREQ_CANTACT_PRO;
   1072
   1073	if (le32_to_cpu(dconf->sw_version) > 1)
   1074		if (feature & GS_CAN_FEATURE_IDENTIFY)
   1075			netdev->ethtool_ops = &gs_usb_ethtool_ops;
   1076
   1077	kfree(bt_const);
   1078
   1079	/* fetch extended bit timing constants if device has feature
   1080	 * GS_CAN_FEATURE_FD and GS_CAN_FEATURE_BT_CONST_EXT
   1081	 */
   1082	if (feature & GS_CAN_FEATURE_FD &&
   1083	    feature & GS_CAN_FEATURE_BT_CONST_EXT) {
   1084		bt_const_extended = kmalloc(sizeof(*bt_const_extended), GFP_KERNEL);
   1085		if (!bt_const_extended)
   1086			return ERR_PTR(-ENOMEM);
   1087
   1088		rc = usb_control_msg(interface_to_usbdev(intf),
   1089				     usb_rcvctrlpipe(interface_to_usbdev(intf), 0),
   1090				     GS_USB_BREQ_BT_CONST_EXT,
   1091				     USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_INTERFACE,
   1092				     channel, 0, bt_const_extended,
   1093				     sizeof(*bt_const_extended),
   1094				     1000);
   1095		if (rc < 0) {
   1096			dev_err(&intf->dev,
   1097				"Couldn't get extended bit timing const for channel (err=%d)\n",
   1098				rc);
   1099			kfree(bt_const_extended);
   1100			return ERR_PTR(rc);
   1101		}
   1102
   1103		strcpy(dev->data_bt_const.name, "gs_usb");
   1104		dev->data_bt_const.tseg1_min = le32_to_cpu(bt_const_extended->dtseg1_min);
   1105		dev->data_bt_const.tseg1_max = le32_to_cpu(bt_const_extended->dtseg1_max);
   1106		dev->data_bt_const.tseg2_min = le32_to_cpu(bt_const_extended->dtseg2_min);
   1107		dev->data_bt_const.tseg2_max = le32_to_cpu(bt_const_extended->dtseg2_max);
   1108		dev->data_bt_const.sjw_max = le32_to_cpu(bt_const_extended->dsjw_max);
   1109		dev->data_bt_const.brp_min = le32_to_cpu(bt_const_extended->dbrp_min);
   1110		dev->data_bt_const.brp_max = le32_to_cpu(bt_const_extended->dbrp_max);
   1111		dev->data_bt_const.brp_inc = le32_to_cpu(bt_const_extended->dbrp_inc);
   1112
   1113		dev->can.data_bittiming_const = &dev->data_bt_const;
   1114
   1115		kfree(bt_const_extended);
   1116	}
   1117
   1118	SET_NETDEV_DEV(netdev, &intf->dev);
   1119
   1120	rc = register_candev(dev->netdev);
   1121	if (rc) {
   1122		free_candev(dev->netdev);
   1123		dev_err(&intf->dev, "Couldn't register candev (err=%d)\n", rc);
   1124		return ERR_PTR(rc);
   1125	}
   1126
   1127	return dev;
   1128}
   1129
   1130static void gs_destroy_candev(struct gs_can *dev)
   1131{
   1132	unregister_candev(dev->netdev);
   1133	usb_kill_anchored_urbs(&dev->tx_submitted);
   1134	free_candev(dev->netdev);
   1135}
   1136
   1137static int gs_usb_probe(struct usb_interface *intf,
   1138			const struct usb_device_id *id)
   1139{
   1140	struct usb_device *udev = interface_to_usbdev(intf);
   1141	struct gs_host_frame *hf;
   1142	struct gs_usb *dev;
   1143	int rc = -ENOMEM;
   1144	unsigned int icount, i;
   1145	struct gs_host_config *hconf;
   1146	struct gs_device_config *dconf;
   1147
   1148	hconf = kmalloc(sizeof(*hconf), GFP_KERNEL);
   1149	if (!hconf)
   1150		return -ENOMEM;
   1151
   1152	hconf->byte_order = cpu_to_le32(0x0000beef);
   1153
   1154	/* send host config */
   1155	rc = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
   1156			     GS_USB_BREQ_HOST_FORMAT,
   1157			     USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_INTERFACE,
   1158			     1, intf->cur_altsetting->desc.bInterfaceNumber,
   1159			     hconf, sizeof(*hconf), 1000);
   1160
   1161	kfree(hconf);
   1162
   1163	if (rc < 0) {
   1164		dev_err(&intf->dev, "Couldn't send data format (err=%d)\n", rc);
   1165		return rc;
   1166	}
   1167
   1168	dconf = kmalloc(sizeof(*dconf), GFP_KERNEL);
   1169	if (!dconf)
   1170		return -ENOMEM;
   1171
   1172	/* read device config */
   1173	rc = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
   1174			     GS_USB_BREQ_DEVICE_CONFIG,
   1175			     USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_INTERFACE,
   1176			     1, intf->cur_altsetting->desc.bInterfaceNumber,
   1177			     dconf, sizeof(*dconf), 1000);
   1178	if (rc < 0) {
   1179		dev_err(&intf->dev, "Couldn't get device config: (err=%d)\n",
   1180			rc);
   1181		kfree(dconf);
   1182		return rc;
   1183	}
   1184
   1185	icount = dconf->icount + 1;
   1186	dev_info(&intf->dev, "Configuring for %u interfaces\n", icount);
   1187
   1188	if (icount > GS_MAX_INTF) {
   1189		dev_err(&intf->dev,
   1190			"Driver cannot handle more that %u CAN interfaces\n",
   1191			GS_MAX_INTF);
   1192		kfree(dconf);
   1193		return -EINVAL;
   1194	}
   1195
   1196	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
   1197	if (!dev) {
   1198		kfree(dconf);
   1199		return -ENOMEM;
   1200	}
   1201
   1202	init_usb_anchor(&dev->rx_submitted);
   1203	/* default to classic CAN, switch to CAN-FD if at least one of
   1204	 * our channels support CAN-FD.
   1205	 */
   1206	dev->hf_size_rx = struct_size(hf, classic_can, 1);
   1207
   1208	usb_set_intfdata(intf, dev);
   1209	dev->udev = udev;
   1210
   1211	for (i = 0; i < icount; i++) {
   1212		dev->canch[i] = gs_make_candev(i, intf, dconf);
   1213		if (IS_ERR_OR_NULL(dev->canch[i])) {
   1214			/* save error code to return later */
   1215			rc = PTR_ERR(dev->canch[i]);
   1216
   1217			/* on failure destroy previously created candevs */
   1218			icount = i;
   1219			for (i = 0; i < icount; i++)
   1220				gs_destroy_candev(dev->canch[i]);
   1221
   1222			usb_kill_anchored_urbs(&dev->rx_submitted);
   1223			kfree(dconf);
   1224			kfree(dev);
   1225			return rc;
   1226		}
   1227		dev->canch[i]->parent = dev;
   1228
   1229		if (dev->canch[i]->can.ctrlmode_supported & CAN_CTRLMODE_FD)
   1230			dev->hf_size_rx = struct_size(hf, canfd, 1);
   1231	}
   1232
   1233	kfree(dconf);
   1234
   1235	return 0;
   1236}
   1237
   1238static void gs_usb_disconnect(struct usb_interface *intf)
   1239{
   1240	struct gs_usb *dev = usb_get_intfdata(intf);
   1241	unsigned int i;
   1242
   1243	usb_set_intfdata(intf, NULL);
   1244
   1245	if (!dev) {
   1246		dev_err(&intf->dev, "Disconnect (nodata)\n");
   1247		return;
   1248	}
   1249
   1250	for (i = 0; i < GS_MAX_INTF; i++)
   1251		if (dev->canch[i])
   1252			gs_destroy_candev(dev->canch[i]);
   1253
   1254	usb_kill_anchored_urbs(&dev->rx_submitted);
   1255	kfree(dev);
   1256}
   1257
   1258static const struct usb_device_id gs_usb_table[] = {
   1259	{ USB_DEVICE_INTERFACE_NUMBER(USB_GSUSB_1_VENDOR_ID,
   1260				      USB_GSUSB_1_PRODUCT_ID, 0) },
   1261	{ USB_DEVICE_INTERFACE_NUMBER(USB_CANDLELIGHT_VENDOR_ID,
   1262				      USB_CANDLELIGHT_PRODUCT_ID, 0) },
   1263	{ USB_DEVICE_INTERFACE_NUMBER(USB_CES_CANEXT_FD_VENDOR_ID,
   1264				      USB_CES_CANEXT_FD_PRODUCT_ID, 0) },
   1265	{ USB_DEVICE_INTERFACE_NUMBER(USB_ABE_CANDEBUGGER_FD_VENDOR_ID,
   1266				      USB_ABE_CANDEBUGGER_FD_PRODUCT_ID, 0) },
   1267	{} /* Terminating entry */
   1268};
   1269
   1270MODULE_DEVICE_TABLE(usb, gs_usb_table);
   1271
   1272static struct usb_driver gs_usb_driver = {
   1273	.name = "gs_usb",
   1274	.probe = gs_usb_probe,
   1275	.disconnect = gs_usb_disconnect,
   1276	.id_table = gs_usb_table,
   1277};
   1278
   1279module_usb_driver(gs_usb_driver);
   1280
   1281MODULE_AUTHOR("Maximilian Schneider <mws@schneidersoft.net>");
   1282MODULE_DESCRIPTION(
   1283"Socket CAN device driver for Geschwister Schneider Technologie-, "
   1284"Entwicklungs- und Vertriebs UG. USB2.0 to CAN interfaces\n"
   1285"and bytewerk.org candleLight USB CAN interfaces.");
   1286MODULE_LICENSE("GPL v2");