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

ems_usb.c (25803B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 * CAN driver for EMS Dr. Thomas Wuensche CPC-USB/ARM7
      4 *
      5 * Copyright (C) 2004-2009 EMS Dr. Thomas Wuensche
      6 */
      7#include <linux/signal.h>
      8#include <linux/slab.h>
      9#include <linux/module.h>
     10#include <linux/netdevice.h>
     11#include <linux/usb.h>
     12
     13#include <linux/can.h>
     14#include <linux/can/dev.h>
     15#include <linux/can/error.h>
     16
     17MODULE_AUTHOR("Sebastian Haas <haas@ems-wuensche.com>");
     18MODULE_DESCRIPTION("CAN driver for EMS Dr. Thomas Wuensche CAN/USB interfaces");
     19MODULE_LICENSE("GPL v2");
     20
     21/* Control-Values for CPC_Control() Command Subject Selection */
     22#define CONTR_CAN_MESSAGE 0x04
     23#define CONTR_CAN_STATE   0x0C
     24#define CONTR_BUS_ERROR   0x1C
     25
     26/* Control Command Actions */
     27#define CONTR_CONT_OFF 0
     28#define CONTR_CONT_ON  1
     29#define CONTR_ONCE     2
     30
     31/* Messages from CPC to PC */
     32#define CPC_MSG_TYPE_CAN_FRAME       1  /* CAN data frame */
     33#define CPC_MSG_TYPE_RTR_FRAME       8  /* CAN remote frame */
     34#define CPC_MSG_TYPE_CAN_PARAMS      12 /* Actual CAN parameters */
     35#define CPC_MSG_TYPE_CAN_STATE       14 /* CAN state message */
     36#define CPC_MSG_TYPE_EXT_CAN_FRAME   16 /* Extended CAN data frame */
     37#define CPC_MSG_TYPE_EXT_RTR_FRAME   17 /* Extended remote frame */
     38#define CPC_MSG_TYPE_CONTROL         19 /* change interface behavior */
     39#define CPC_MSG_TYPE_CONFIRM         20 /* command processed confirmation */
     40#define CPC_MSG_TYPE_OVERRUN         21 /* overrun events */
     41#define CPC_MSG_TYPE_CAN_FRAME_ERROR 23 /* detected bus errors */
     42#define CPC_MSG_TYPE_ERR_COUNTER     25 /* RX/TX error counter */
     43
     44/* Messages from the PC to the CPC interface  */
     45#define CPC_CMD_TYPE_CAN_FRAME     1   /* CAN data frame */
     46#define CPC_CMD_TYPE_CONTROL       3   /* control of interface behavior */
     47#define CPC_CMD_TYPE_CAN_PARAMS    6   /* set CAN parameters */
     48#define CPC_CMD_TYPE_RTR_FRAME     13  /* CAN remote frame */
     49#define CPC_CMD_TYPE_CAN_STATE     14  /* CAN state message */
     50#define CPC_CMD_TYPE_EXT_CAN_FRAME 15  /* Extended CAN data frame */
     51#define CPC_CMD_TYPE_EXT_RTR_FRAME 16  /* Extended CAN remote frame */
     52#define CPC_CMD_TYPE_CAN_EXIT      200 /* exit the CAN */
     53
     54#define CPC_CMD_TYPE_INQ_ERR_COUNTER 25 /* request the CAN error counters */
     55#define CPC_CMD_TYPE_CLEAR_MSG_QUEUE 8  /* clear CPC_MSG queue */
     56#define CPC_CMD_TYPE_CLEAR_CMD_QUEUE 28 /* clear CPC_CMD queue */
     57
     58#define CPC_CC_TYPE_SJA1000 2 /* Philips basic CAN controller */
     59
     60#define CPC_CAN_ECODE_ERRFRAME 0x01 /* Ecode type */
     61
     62/* Overrun types */
     63#define CPC_OVR_EVENT_CAN       0x01
     64#define CPC_OVR_EVENT_CANSTATE  0x02
     65#define CPC_OVR_EVENT_BUSERROR  0x04
     66
     67/*
     68 * If the CAN controller lost a message we indicate it with the highest bit
     69 * set in the count field.
     70 */
     71#define CPC_OVR_HW 0x80
     72
     73/* Size of the "struct ems_cpc_msg" without the union */
     74#define CPC_MSG_HEADER_LEN   11
     75#define CPC_CAN_MSG_MIN_SIZE 5
     76
     77/* Define these values to match your devices */
     78#define USB_CPCUSB_VENDOR_ID 0x12D6
     79
     80#define USB_CPCUSB_ARM7_PRODUCT_ID 0x0444
     81
     82/* Mode register NXP LPC2119/SJA1000 CAN Controller */
     83#define SJA1000_MOD_NORMAL 0x00
     84#define SJA1000_MOD_RM     0x01
     85
     86/* ECC register NXP LPC2119/SJA1000 CAN Controller */
     87#define SJA1000_ECC_SEG   0x1F
     88#define SJA1000_ECC_DIR   0x20
     89#define SJA1000_ECC_ERR   0x06
     90#define SJA1000_ECC_BIT   0x00
     91#define SJA1000_ECC_FORM  0x40
     92#define SJA1000_ECC_STUFF 0x80
     93#define SJA1000_ECC_MASK  0xc0
     94
     95/* Status register content */
     96#define SJA1000_SR_BS 0x80
     97#define SJA1000_SR_ES 0x40
     98
     99#define SJA1000_DEFAULT_OUTPUT_CONTROL 0xDA
    100
    101/*
    102 * The device actually uses a 16MHz clock to generate the CAN clock
    103 * but it expects SJA1000 bit settings based on 8MHz (is internally
    104 * converted).
    105 */
    106#define EMS_USB_ARM7_CLOCK 8000000
    107
    108#define CPC_TX_QUEUE_TRIGGER_LOW	25
    109#define CPC_TX_QUEUE_TRIGGER_HIGH	35
    110
    111/*
    112 * CAN-Message representation in a CPC_MSG. Message object type is
    113 * CPC_MSG_TYPE_CAN_FRAME or CPC_MSG_TYPE_RTR_FRAME or
    114 * CPC_MSG_TYPE_EXT_CAN_FRAME or CPC_MSG_TYPE_EXT_RTR_FRAME.
    115 */
    116struct cpc_can_msg {
    117	__le32 id;
    118	u8 length;
    119	u8 msg[8];
    120};
    121
    122/* Representation of the CAN parameters for the SJA1000 controller */
    123struct cpc_sja1000_params {
    124	u8 mode;
    125	u8 acc_code0;
    126	u8 acc_code1;
    127	u8 acc_code2;
    128	u8 acc_code3;
    129	u8 acc_mask0;
    130	u8 acc_mask1;
    131	u8 acc_mask2;
    132	u8 acc_mask3;
    133	u8 btr0;
    134	u8 btr1;
    135	u8 outp_contr;
    136};
    137
    138/* CAN params message representation */
    139struct cpc_can_params {
    140	u8 cc_type;
    141
    142	/* Will support M16C CAN controller in the future */
    143	union {
    144		struct cpc_sja1000_params sja1000;
    145	} cc_params;
    146};
    147
    148/* Structure for confirmed message handling */
    149struct cpc_confirm {
    150	u8 error; /* error code */
    151};
    152
    153/* Structure for overrun conditions */
    154struct cpc_overrun {
    155	u8 event;
    156	u8 count;
    157};
    158
    159/* SJA1000 CAN errors (compatible to NXP LPC2119) */
    160struct cpc_sja1000_can_error {
    161	u8 ecc;
    162	u8 rxerr;
    163	u8 txerr;
    164};
    165
    166/* structure for CAN error conditions */
    167struct cpc_can_error {
    168	u8 ecode;
    169
    170	struct {
    171		u8 cc_type;
    172
    173		/* Other controllers may also provide error code capture regs */
    174		union {
    175			struct cpc_sja1000_can_error sja1000;
    176		} regs;
    177	} cc;
    178};
    179
    180/*
    181 * Structure containing RX/TX error counter. This structure is used to request
    182 * the values of the CAN controllers TX and RX error counter.
    183 */
    184struct cpc_can_err_counter {
    185	u8 rx;
    186	u8 tx;
    187};
    188
    189/* Main message type used between library and application */
    190struct __packed ems_cpc_msg {
    191	u8 type;	/* type of message */
    192	u8 length;	/* length of data within union 'msg' */
    193	u8 msgid;	/* confirmation handle */
    194	__le32 ts_sec;	/* timestamp in seconds */
    195	__le32 ts_nsec;	/* timestamp in nano seconds */
    196
    197	union {
    198		u8 generic[64];
    199		struct cpc_can_msg can_msg;
    200		struct cpc_can_params can_params;
    201		struct cpc_confirm confirmation;
    202		struct cpc_overrun overrun;
    203		struct cpc_can_error error;
    204		struct cpc_can_err_counter err_counter;
    205		u8 can_state;
    206	} msg;
    207};
    208
    209/*
    210 * Table of devices that work with this driver
    211 * NOTE: This driver supports only CPC-USB/ARM7 (LPC2119) yet.
    212 */
    213static struct usb_device_id ems_usb_table[] = {
    214	{USB_DEVICE(USB_CPCUSB_VENDOR_ID, USB_CPCUSB_ARM7_PRODUCT_ID)},
    215	{} /* Terminating entry */
    216};
    217
    218MODULE_DEVICE_TABLE(usb, ems_usb_table);
    219
    220#define RX_BUFFER_SIZE      64
    221#define CPC_HEADER_SIZE     4
    222#define INTR_IN_BUFFER_SIZE 4
    223
    224#define MAX_RX_URBS 10
    225#define MAX_TX_URBS 10
    226
    227struct ems_usb;
    228
    229struct ems_tx_urb_context {
    230	struct ems_usb *dev;
    231
    232	u32 echo_index;
    233};
    234
    235struct ems_usb {
    236	struct can_priv can; /* must be the first member */
    237
    238	struct sk_buff *echo_skb[MAX_TX_URBS];
    239
    240	struct usb_device *udev;
    241	struct net_device *netdev;
    242
    243	atomic_t active_tx_urbs;
    244	struct usb_anchor tx_submitted;
    245	struct ems_tx_urb_context tx_contexts[MAX_TX_URBS];
    246
    247	struct usb_anchor rx_submitted;
    248
    249	struct urb *intr_urb;
    250
    251	u8 *tx_msg_buffer;
    252
    253	u8 *intr_in_buffer;
    254	unsigned int free_slots; /* remember number of available slots */
    255
    256	struct ems_cpc_msg active_params; /* active controller parameters */
    257	void *rxbuf[MAX_RX_URBS];
    258	dma_addr_t rxbuf_dma[MAX_RX_URBS];
    259};
    260
    261static void ems_usb_read_interrupt_callback(struct urb *urb)
    262{
    263	struct ems_usb *dev = urb->context;
    264	struct net_device *netdev = dev->netdev;
    265	int err;
    266
    267	if (!netif_device_present(netdev))
    268		return;
    269
    270	switch (urb->status) {
    271	case 0:
    272		dev->free_slots = dev->intr_in_buffer[1];
    273		if (dev->free_slots > CPC_TX_QUEUE_TRIGGER_HIGH &&
    274		    netif_queue_stopped(netdev))
    275			netif_wake_queue(netdev);
    276		break;
    277
    278	case -ECONNRESET: /* unlink */
    279	case -ENOENT:
    280	case -EPIPE:
    281	case -EPROTO:
    282	case -ESHUTDOWN:
    283		return;
    284
    285	default:
    286		netdev_info(netdev, "Rx interrupt aborted %d\n", urb->status);
    287		break;
    288	}
    289
    290	err = usb_submit_urb(urb, GFP_ATOMIC);
    291
    292	if (err == -ENODEV)
    293		netif_device_detach(netdev);
    294	else if (err)
    295		netdev_err(netdev, "failed resubmitting intr urb: %d\n", err);
    296}
    297
    298static void ems_usb_rx_can_msg(struct ems_usb *dev, struct ems_cpc_msg *msg)
    299{
    300	struct can_frame *cf;
    301	struct sk_buff *skb;
    302	int i;
    303	struct net_device_stats *stats = &dev->netdev->stats;
    304
    305	skb = alloc_can_skb(dev->netdev, &cf);
    306	if (skb == NULL)
    307		return;
    308
    309	cf->can_id = le32_to_cpu(msg->msg.can_msg.id);
    310	cf->len = can_cc_dlc2len(msg->msg.can_msg.length & 0xF);
    311
    312	if (msg->type == CPC_MSG_TYPE_EXT_CAN_FRAME ||
    313	    msg->type == CPC_MSG_TYPE_EXT_RTR_FRAME)
    314		cf->can_id |= CAN_EFF_FLAG;
    315
    316	if (msg->type == CPC_MSG_TYPE_RTR_FRAME ||
    317	    msg->type == CPC_MSG_TYPE_EXT_RTR_FRAME) {
    318		cf->can_id |= CAN_RTR_FLAG;
    319	} else {
    320		for (i = 0; i < cf->len; i++)
    321			cf->data[i] = msg->msg.can_msg.msg[i];
    322
    323		stats->rx_bytes += cf->len;
    324	}
    325	stats->rx_packets++;
    326
    327	netif_rx(skb);
    328}
    329
    330static void ems_usb_rx_err(struct ems_usb *dev, struct ems_cpc_msg *msg)
    331{
    332	struct can_frame *cf;
    333	struct sk_buff *skb;
    334	struct net_device_stats *stats = &dev->netdev->stats;
    335
    336	skb = alloc_can_err_skb(dev->netdev, &cf);
    337	if (skb == NULL)
    338		return;
    339
    340	if (msg->type == CPC_MSG_TYPE_CAN_STATE) {
    341		u8 state = msg->msg.can_state;
    342
    343		if (state & SJA1000_SR_BS) {
    344			dev->can.state = CAN_STATE_BUS_OFF;
    345			cf->can_id |= CAN_ERR_BUSOFF;
    346
    347			dev->can.can_stats.bus_off++;
    348			can_bus_off(dev->netdev);
    349		} else if (state & SJA1000_SR_ES) {
    350			dev->can.state = CAN_STATE_ERROR_WARNING;
    351			dev->can.can_stats.error_warning++;
    352		} else {
    353			dev->can.state = CAN_STATE_ERROR_ACTIVE;
    354			dev->can.can_stats.error_passive++;
    355		}
    356	} else if (msg->type == CPC_MSG_TYPE_CAN_FRAME_ERROR) {
    357		u8 ecc = msg->msg.error.cc.regs.sja1000.ecc;
    358		u8 txerr = msg->msg.error.cc.regs.sja1000.txerr;
    359		u8 rxerr = msg->msg.error.cc.regs.sja1000.rxerr;
    360
    361		/* bus error interrupt */
    362		dev->can.can_stats.bus_error++;
    363		stats->rx_errors++;
    364
    365		cf->can_id |= CAN_ERR_PROT | CAN_ERR_BUSERROR;
    366
    367		switch (ecc & SJA1000_ECC_MASK) {
    368		case SJA1000_ECC_BIT:
    369			cf->data[2] |= CAN_ERR_PROT_BIT;
    370			break;
    371		case SJA1000_ECC_FORM:
    372			cf->data[2] |= CAN_ERR_PROT_FORM;
    373			break;
    374		case SJA1000_ECC_STUFF:
    375			cf->data[2] |= CAN_ERR_PROT_STUFF;
    376			break;
    377		default:
    378			cf->data[3] = ecc & SJA1000_ECC_SEG;
    379			break;
    380		}
    381
    382		/* Error occurred during transmission? */
    383		if ((ecc & SJA1000_ECC_DIR) == 0)
    384			cf->data[2] |= CAN_ERR_PROT_TX;
    385
    386		if (dev->can.state == CAN_STATE_ERROR_WARNING ||
    387		    dev->can.state == CAN_STATE_ERROR_PASSIVE) {
    388			cf->can_id |= CAN_ERR_CRTL;
    389			cf->data[1] = (txerr > rxerr) ?
    390			    CAN_ERR_CRTL_TX_PASSIVE : CAN_ERR_CRTL_RX_PASSIVE;
    391		}
    392	} else if (msg->type == CPC_MSG_TYPE_OVERRUN) {
    393		cf->can_id |= CAN_ERR_CRTL;
    394		cf->data[1] = CAN_ERR_CRTL_RX_OVERFLOW;
    395
    396		stats->rx_over_errors++;
    397		stats->rx_errors++;
    398	}
    399
    400	netif_rx(skb);
    401}
    402
    403/*
    404 * callback for bulk IN urb
    405 */
    406static void ems_usb_read_bulk_callback(struct urb *urb)
    407{
    408	struct ems_usb *dev = urb->context;
    409	struct net_device *netdev;
    410	int retval;
    411
    412	netdev = dev->netdev;
    413
    414	if (!netif_device_present(netdev))
    415		return;
    416
    417	switch (urb->status) {
    418	case 0: /* success */
    419		break;
    420
    421	case -ENOENT:
    422		return;
    423
    424	default:
    425		netdev_info(netdev, "Rx URB aborted (%d)\n", urb->status);
    426		goto resubmit_urb;
    427	}
    428
    429	if (urb->actual_length > CPC_HEADER_SIZE) {
    430		struct ems_cpc_msg *msg;
    431		u8 *ibuf = urb->transfer_buffer;
    432		u8 msg_count, start;
    433
    434		msg_count = ibuf[0] & ~0x80;
    435
    436		start = CPC_HEADER_SIZE;
    437
    438		while (msg_count) {
    439			msg = (struct ems_cpc_msg *)&ibuf[start];
    440
    441			switch (msg->type) {
    442			case CPC_MSG_TYPE_CAN_STATE:
    443				/* Process CAN state changes */
    444				ems_usb_rx_err(dev, msg);
    445				break;
    446
    447			case CPC_MSG_TYPE_CAN_FRAME:
    448			case CPC_MSG_TYPE_EXT_CAN_FRAME:
    449			case CPC_MSG_TYPE_RTR_FRAME:
    450			case CPC_MSG_TYPE_EXT_RTR_FRAME:
    451				ems_usb_rx_can_msg(dev, msg);
    452				break;
    453
    454			case CPC_MSG_TYPE_CAN_FRAME_ERROR:
    455				/* Process errorframe */
    456				ems_usb_rx_err(dev, msg);
    457				break;
    458
    459			case CPC_MSG_TYPE_OVERRUN:
    460				/* Message lost while receiving */
    461				ems_usb_rx_err(dev, msg);
    462				break;
    463			}
    464
    465			start += CPC_MSG_HEADER_LEN + msg->length;
    466			msg_count--;
    467
    468			if (start > urb->transfer_buffer_length) {
    469				netdev_err(netdev, "format error\n");
    470				break;
    471			}
    472		}
    473	}
    474
    475resubmit_urb:
    476	usb_fill_bulk_urb(urb, dev->udev, usb_rcvbulkpipe(dev->udev, 2),
    477			  urb->transfer_buffer, RX_BUFFER_SIZE,
    478			  ems_usb_read_bulk_callback, dev);
    479
    480	retval = usb_submit_urb(urb, GFP_ATOMIC);
    481
    482	if (retval == -ENODEV)
    483		netif_device_detach(netdev);
    484	else if (retval)
    485		netdev_err(netdev,
    486			   "failed resubmitting read bulk urb: %d\n", retval);
    487}
    488
    489/*
    490 * callback for bulk IN urb
    491 */
    492static void ems_usb_write_bulk_callback(struct urb *urb)
    493{
    494	struct ems_tx_urb_context *context = urb->context;
    495	struct ems_usb *dev;
    496	struct net_device *netdev;
    497
    498	BUG_ON(!context);
    499
    500	dev = context->dev;
    501	netdev = dev->netdev;
    502
    503	/* free up our allocated buffer */
    504	usb_free_coherent(urb->dev, urb->transfer_buffer_length,
    505			  urb->transfer_buffer, urb->transfer_dma);
    506
    507	atomic_dec(&dev->active_tx_urbs);
    508
    509	if (!netif_device_present(netdev))
    510		return;
    511
    512	if (urb->status)
    513		netdev_info(netdev, "Tx URB aborted (%d)\n", urb->status);
    514
    515	netif_trans_update(netdev);
    516
    517	/* transmission complete interrupt */
    518	netdev->stats.tx_packets++;
    519	netdev->stats.tx_bytes += can_get_echo_skb(netdev, context->echo_index,
    520						   NULL);
    521
    522	/* Release context */
    523	context->echo_index = MAX_TX_URBS;
    524
    525}
    526
    527/*
    528 * Send the given CPC command synchronously
    529 */
    530static int ems_usb_command_msg(struct ems_usb *dev, struct ems_cpc_msg *msg)
    531{
    532	int actual_length;
    533
    534	/* Copy payload */
    535	memcpy(&dev->tx_msg_buffer[CPC_HEADER_SIZE], msg,
    536	       msg->length + CPC_MSG_HEADER_LEN);
    537
    538	/* Clear header */
    539	memset(&dev->tx_msg_buffer[0], 0, CPC_HEADER_SIZE);
    540
    541	return usb_bulk_msg(dev->udev, usb_sndbulkpipe(dev->udev, 2),
    542			    &dev->tx_msg_buffer[0],
    543			    msg->length + CPC_MSG_HEADER_LEN + CPC_HEADER_SIZE,
    544			    &actual_length, 1000);
    545}
    546
    547/*
    548 * Change CAN controllers' mode register
    549 */
    550static int ems_usb_write_mode(struct ems_usb *dev, u8 mode)
    551{
    552	dev->active_params.msg.can_params.cc_params.sja1000.mode = mode;
    553
    554	return ems_usb_command_msg(dev, &dev->active_params);
    555}
    556
    557/*
    558 * Send a CPC_Control command to change behaviour when interface receives a CAN
    559 * message, bus error or CAN state changed notifications.
    560 */
    561static int ems_usb_control_cmd(struct ems_usb *dev, u8 val)
    562{
    563	struct ems_cpc_msg cmd;
    564
    565	cmd.type = CPC_CMD_TYPE_CONTROL;
    566	cmd.length = CPC_MSG_HEADER_LEN + 1;
    567
    568	cmd.msgid = 0;
    569
    570	cmd.msg.generic[0] = val;
    571
    572	return ems_usb_command_msg(dev, &cmd);
    573}
    574
    575/*
    576 * Start interface
    577 */
    578static int ems_usb_start(struct ems_usb *dev)
    579{
    580	struct net_device *netdev = dev->netdev;
    581	int err, i;
    582
    583	dev->intr_in_buffer[0] = 0;
    584	dev->free_slots = 50; /* initial size */
    585
    586	for (i = 0; i < MAX_RX_URBS; i++) {
    587		struct urb *urb = NULL;
    588		u8 *buf = NULL;
    589		dma_addr_t buf_dma;
    590
    591		/* create a URB, and a buffer for it */
    592		urb = usb_alloc_urb(0, GFP_KERNEL);
    593		if (!urb) {
    594			err = -ENOMEM;
    595			break;
    596		}
    597
    598		buf = usb_alloc_coherent(dev->udev, RX_BUFFER_SIZE, GFP_KERNEL,
    599					 &buf_dma);
    600		if (!buf) {
    601			netdev_err(netdev, "No memory left for USB buffer\n");
    602			usb_free_urb(urb);
    603			err = -ENOMEM;
    604			break;
    605		}
    606
    607		urb->transfer_dma = buf_dma;
    608
    609		usb_fill_bulk_urb(urb, dev->udev, usb_rcvbulkpipe(dev->udev, 2),
    610				  buf, RX_BUFFER_SIZE,
    611				  ems_usb_read_bulk_callback, dev);
    612		urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
    613		usb_anchor_urb(urb, &dev->rx_submitted);
    614
    615		err = usb_submit_urb(urb, GFP_KERNEL);
    616		if (err) {
    617			usb_unanchor_urb(urb);
    618			usb_free_coherent(dev->udev, RX_BUFFER_SIZE, buf,
    619					  urb->transfer_dma);
    620			usb_free_urb(urb);
    621			break;
    622		}
    623
    624		dev->rxbuf[i] = buf;
    625		dev->rxbuf_dma[i] = buf_dma;
    626
    627		/* Drop reference, USB core will take care of freeing it */
    628		usb_free_urb(urb);
    629	}
    630
    631	/* Did we submit any URBs */
    632	if (i == 0) {
    633		netdev_warn(netdev, "couldn't setup read URBs\n");
    634		return err;
    635	}
    636
    637	/* Warn if we've couldn't transmit all the URBs */
    638	if (i < MAX_RX_URBS)
    639		netdev_warn(netdev, "rx performance may be slow\n");
    640
    641	/* Setup and start interrupt URB */
    642	usb_fill_int_urb(dev->intr_urb, dev->udev,
    643			 usb_rcvintpipe(dev->udev, 1),
    644			 dev->intr_in_buffer,
    645			 INTR_IN_BUFFER_SIZE,
    646			 ems_usb_read_interrupt_callback, dev, 1);
    647
    648	err = usb_submit_urb(dev->intr_urb, GFP_KERNEL);
    649	if (err) {
    650		netdev_warn(netdev, "intr URB submit failed: %d\n", err);
    651
    652		return err;
    653	}
    654
    655	/* CPC-USB will transfer received message to host */
    656	err = ems_usb_control_cmd(dev, CONTR_CAN_MESSAGE | CONTR_CONT_ON);
    657	if (err)
    658		goto failed;
    659
    660	/* CPC-USB will transfer CAN state changes to host */
    661	err = ems_usb_control_cmd(dev, CONTR_CAN_STATE | CONTR_CONT_ON);
    662	if (err)
    663		goto failed;
    664
    665	/* CPC-USB will transfer bus errors to host */
    666	err = ems_usb_control_cmd(dev, CONTR_BUS_ERROR | CONTR_CONT_ON);
    667	if (err)
    668		goto failed;
    669
    670	err = ems_usb_write_mode(dev, SJA1000_MOD_NORMAL);
    671	if (err)
    672		goto failed;
    673
    674	dev->can.state = CAN_STATE_ERROR_ACTIVE;
    675
    676	return 0;
    677
    678failed:
    679	netdev_warn(netdev, "couldn't submit control: %d\n", err);
    680
    681	return err;
    682}
    683
    684static void unlink_all_urbs(struct ems_usb *dev)
    685{
    686	int i;
    687
    688	usb_unlink_urb(dev->intr_urb);
    689
    690	usb_kill_anchored_urbs(&dev->rx_submitted);
    691
    692	for (i = 0; i < MAX_RX_URBS; ++i)
    693		usb_free_coherent(dev->udev, RX_BUFFER_SIZE,
    694				  dev->rxbuf[i], dev->rxbuf_dma[i]);
    695
    696	usb_kill_anchored_urbs(&dev->tx_submitted);
    697	atomic_set(&dev->active_tx_urbs, 0);
    698
    699	for (i = 0; i < MAX_TX_URBS; i++)
    700		dev->tx_contexts[i].echo_index = MAX_TX_URBS;
    701}
    702
    703static int ems_usb_open(struct net_device *netdev)
    704{
    705	struct ems_usb *dev = netdev_priv(netdev);
    706	int err;
    707
    708	err = ems_usb_write_mode(dev, SJA1000_MOD_RM);
    709	if (err)
    710		return err;
    711
    712	/* common open */
    713	err = open_candev(netdev);
    714	if (err)
    715		return err;
    716
    717	/* finally start device */
    718	err = ems_usb_start(dev);
    719	if (err) {
    720		if (err == -ENODEV)
    721			netif_device_detach(dev->netdev);
    722
    723		netdev_warn(netdev, "couldn't start device: %d\n", err);
    724
    725		close_candev(netdev);
    726
    727		return err;
    728	}
    729
    730
    731	netif_start_queue(netdev);
    732
    733	return 0;
    734}
    735
    736static netdev_tx_t ems_usb_start_xmit(struct sk_buff *skb, struct net_device *netdev)
    737{
    738	struct ems_usb *dev = netdev_priv(netdev);
    739	struct ems_tx_urb_context *context = NULL;
    740	struct net_device_stats *stats = &netdev->stats;
    741	struct can_frame *cf = (struct can_frame *)skb->data;
    742	struct ems_cpc_msg *msg;
    743	struct urb *urb;
    744	u8 *buf;
    745	int i, err;
    746	size_t size = CPC_HEADER_SIZE + CPC_MSG_HEADER_LEN
    747			+ sizeof(struct cpc_can_msg);
    748
    749	if (can_dropped_invalid_skb(netdev, skb))
    750		return NETDEV_TX_OK;
    751
    752	/* create a URB, and a buffer for it, and copy the data to the URB */
    753	urb = usb_alloc_urb(0, GFP_ATOMIC);
    754	if (!urb)
    755		goto nomem;
    756
    757	buf = usb_alloc_coherent(dev->udev, size, GFP_ATOMIC, &urb->transfer_dma);
    758	if (!buf) {
    759		netdev_err(netdev, "No memory left for USB buffer\n");
    760		usb_free_urb(urb);
    761		goto nomem;
    762	}
    763
    764	msg = (struct ems_cpc_msg *)&buf[CPC_HEADER_SIZE];
    765
    766	msg->msg.can_msg.id = cpu_to_le32(cf->can_id & CAN_ERR_MASK);
    767	msg->msg.can_msg.length = cf->len;
    768
    769	if (cf->can_id & CAN_RTR_FLAG) {
    770		msg->type = cf->can_id & CAN_EFF_FLAG ?
    771			CPC_CMD_TYPE_EXT_RTR_FRAME : CPC_CMD_TYPE_RTR_FRAME;
    772
    773		msg->length = CPC_CAN_MSG_MIN_SIZE;
    774	} else {
    775		msg->type = cf->can_id & CAN_EFF_FLAG ?
    776			CPC_CMD_TYPE_EXT_CAN_FRAME : CPC_CMD_TYPE_CAN_FRAME;
    777
    778		for (i = 0; i < cf->len; i++)
    779			msg->msg.can_msg.msg[i] = cf->data[i];
    780
    781		msg->length = CPC_CAN_MSG_MIN_SIZE + cf->len;
    782	}
    783
    784	for (i = 0; i < MAX_TX_URBS; i++) {
    785		if (dev->tx_contexts[i].echo_index == MAX_TX_URBS) {
    786			context = &dev->tx_contexts[i];
    787			break;
    788		}
    789	}
    790
    791	/*
    792	 * May never happen! When this happens we'd more URBs in flight as
    793	 * allowed (MAX_TX_URBS).
    794	 */
    795	if (!context) {
    796		usb_free_coherent(dev->udev, size, buf, urb->transfer_dma);
    797		usb_free_urb(urb);
    798
    799		netdev_warn(netdev, "couldn't find free context\n");
    800
    801		return NETDEV_TX_BUSY;
    802	}
    803
    804	context->dev = dev;
    805	context->echo_index = i;
    806
    807	usb_fill_bulk_urb(urb, dev->udev, usb_sndbulkpipe(dev->udev, 2), buf,
    808			  size, ems_usb_write_bulk_callback, context);
    809	urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
    810	usb_anchor_urb(urb, &dev->tx_submitted);
    811
    812	can_put_echo_skb(skb, netdev, context->echo_index, 0);
    813
    814	atomic_inc(&dev->active_tx_urbs);
    815
    816	err = usb_submit_urb(urb, GFP_ATOMIC);
    817	if (unlikely(err)) {
    818		can_free_echo_skb(netdev, context->echo_index, NULL);
    819
    820		usb_unanchor_urb(urb);
    821		usb_free_coherent(dev->udev, size, buf, urb->transfer_dma);
    822
    823		atomic_dec(&dev->active_tx_urbs);
    824
    825		if (err == -ENODEV) {
    826			netif_device_detach(netdev);
    827		} else {
    828			netdev_warn(netdev, "failed tx_urb %d\n", err);
    829
    830			stats->tx_dropped++;
    831		}
    832	} else {
    833		netif_trans_update(netdev);
    834
    835		/* Slow down tx path */
    836		if (atomic_read(&dev->active_tx_urbs) >= MAX_TX_URBS ||
    837		    dev->free_slots < CPC_TX_QUEUE_TRIGGER_LOW) {
    838			netif_stop_queue(netdev);
    839		}
    840	}
    841
    842	/*
    843	 * Release our reference to this URB, the USB core will eventually free
    844	 * it entirely.
    845	 */
    846	usb_free_urb(urb);
    847
    848	return NETDEV_TX_OK;
    849
    850nomem:
    851	dev_kfree_skb(skb);
    852	stats->tx_dropped++;
    853
    854	return NETDEV_TX_OK;
    855}
    856
    857static int ems_usb_close(struct net_device *netdev)
    858{
    859	struct ems_usb *dev = netdev_priv(netdev);
    860
    861	/* Stop polling */
    862	unlink_all_urbs(dev);
    863
    864	netif_stop_queue(netdev);
    865
    866	/* Set CAN controller to reset mode */
    867	if (ems_usb_write_mode(dev, SJA1000_MOD_RM))
    868		netdev_warn(netdev, "couldn't stop device");
    869
    870	close_candev(netdev);
    871
    872	return 0;
    873}
    874
    875static const struct net_device_ops ems_usb_netdev_ops = {
    876	.ndo_open = ems_usb_open,
    877	.ndo_stop = ems_usb_close,
    878	.ndo_start_xmit = ems_usb_start_xmit,
    879	.ndo_change_mtu = can_change_mtu,
    880};
    881
    882static const struct can_bittiming_const ems_usb_bittiming_const = {
    883	.name = "ems_usb",
    884	.tseg1_min = 1,
    885	.tseg1_max = 16,
    886	.tseg2_min = 1,
    887	.tseg2_max = 8,
    888	.sjw_max = 4,
    889	.brp_min = 1,
    890	.brp_max = 64,
    891	.brp_inc = 1,
    892};
    893
    894static int ems_usb_set_mode(struct net_device *netdev, enum can_mode mode)
    895{
    896	struct ems_usb *dev = netdev_priv(netdev);
    897
    898	switch (mode) {
    899	case CAN_MODE_START:
    900		if (ems_usb_write_mode(dev, SJA1000_MOD_NORMAL))
    901			netdev_warn(netdev, "couldn't start device");
    902
    903		if (netif_queue_stopped(netdev))
    904			netif_wake_queue(netdev);
    905		break;
    906
    907	default:
    908		return -EOPNOTSUPP;
    909	}
    910
    911	return 0;
    912}
    913
    914static int ems_usb_set_bittiming(struct net_device *netdev)
    915{
    916	struct ems_usb *dev = netdev_priv(netdev);
    917	struct can_bittiming *bt = &dev->can.bittiming;
    918	u8 btr0, btr1;
    919
    920	btr0 = ((bt->brp - 1) & 0x3f) | (((bt->sjw - 1) & 0x3) << 6);
    921	btr1 = ((bt->prop_seg + bt->phase_seg1 - 1) & 0xf) |
    922		(((bt->phase_seg2 - 1) & 0x7) << 4);
    923	if (dev->can.ctrlmode & CAN_CTRLMODE_3_SAMPLES)
    924		btr1 |= 0x80;
    925
    926	netdev_info(netdev, "setting BTR0=0x%02x BTR1=0x%02x\n", btr0, btr1);
    927
    928	dev->active_params.msg.can_params.cc_params.sja1000.btr0 = btr0;
    929	dev->active_params.msg.can_params.cc_params.sja1000.btr1 = btr1;
    930
    931	return ems_usb_command_msg(dev, &dev->active_params);
    932}
    933
    934static void init_params_sja1000(struct ems_cpc_msg *msg)
    935{
    936	struct cpc_sja1000_params *sja1000 =
    937		&msg->msg.can_params.cc_params.sja1000;
    938
    939	msg->type = CPC_CMD_TYPE_CAN_PARAMS;
    940	msg->length = sizeof(struct cpc_can_params);
    941	msg->msgid = 0;
    942
    943	msg->msg.can_params.cc_type = CPC_CC_TYPE_SJA1000;
    944
    945	/* Acceptance filter open */
    946	sja1000->acc_code0 = 0x00;
    947	sja1000->acc_code1 = 0x00;
    948	sja1000->acc_code2 = 0x00;
    949	sja1000->acc_code3 = 0x00;
    950
    951	/* Acceptance filter open */
    952	sja1000->acc_mask0 = 0xFF;
    953	sja1000->acc_mask1 = 0xFF;
    954	sja1000->acc_mask2 = 0xFF;
    955	sja1000->acc_mask3 = 0xFF;
    956
    957	sja1000->btr0 = 0;
    958	sja1000->btr1 = 0;
    959
    960	sja1000->outp_contr = SJA1000_DEFAULT_OUTPUT_CONTROL;
    961	sja1000->mode = SJA1000_MOD_RM;
    962}
    963
    964/*
    965 * probe function for new CPC-USB devices
    966 */
    967static int ems_usb_probe(struct usb_interface *intf,
    968			 const struct usb_device_id *id)
    969{
    970	struct net_device *netdev;
    971	struct ems_usb *dev;
    972	int i, err = -ENOMEM;
    973
    974	netdev = alloc_candev(sizeof(struct ems_usb), MAX_TX_URBS);
    975	if (!netdev) {
    976		dev_err(&intf->dev, "ems_usb: Couldn't alloc candev\n");
    977		return -ENOMEM;
    978	}
    979
    980	dev = netdev_priv(netdev);
    981
    982	dev->udev = interface_to_usbdev(intf);
    983	dev->netdev = netdev;
    984
    985	dev->can.state = CAN_STATE_STOPPED;
    986	dev->can.clock.freq = EMS_USB_ARM7_CLOCK;
    987	dev->can.bittiming_const = &ems_usb_bittiming_const;
    988	dev->can.do_set_bittiming = ems_usb_set_bittiming;
    989	dev->can.do_set_mode = ems_usb_set_mode;
    990	dev->can.ctrlmode_supported = CAN_CTRLMODE_3_SAMPLES;
    991
    992	netdev->netdev_ops = &ems_usb_netdev_ops;
    993
    994	netdev->flags |= IFF_ECHO; /* we support local echo */
    995
    996	init_usb_anchor(&dev->rx_submitted);
    997
    998	init_usb_anchor(&dev->tx_submitted);
    999	atomic_set(&dev->active_tx_urbs, 0);
   1000
   1001	for (i = 0; i < MAX_TX_URBS; i++)
   1002		dev->tx_contexts[i].echo_index = MAX_TX_URBS;
   1003
   1004	dev->intr_urb = usb_alloc_urb(0, GFP_KERNEL);
   1005	if (!dev->intr_urb)
   1006		goto cleanup_candev;
   1007
   1008	dev->intr_in_buffer = kzalloc(INTR_IN_BUFFER_SIZE, GFP_KERNEL);
   1009	if (!dev->intr_in_buffer)
   1010		goto cleanup_intr_urb;
   1011
   1012	dev->tx_msg_buffer = kzalloc(CPC_HEADER_SIZE +
   1013				     sizeof(struct ems_cpc_msg), GFP_KERNEL);
   1014	if (!dev->tx_msg_buffer)
   1015		goto cleanup_intr_in_buffer;
   1016
   1017	usb_set_intfdata(intf, dev);
   1018
   1019	SET_NETDEV_DEV(netdev, &intf->dev);
   1020
   1021	init_params_sja1000(&dev->active_params);
   1022
   1023	err = ems_usb_command_msg(dev, &dev->active_params);
   1024	if (err) {
   1025		netdev_err(netdev, "couldn't initialize controller: %d\n", err);
   1026		goto cleanup_tx_msg_buffer;
   1027	}
   1028
   1029	err = register_candev(netdev);
   1030	if (err) {
   1031		netdev_err(netdev, "couldn't register CAN device: %d\n", err);
   1032		goto cleanup_tx_msg_buffer;
   1033	}
   1034
   1035	return 0;
   1036
   1037cleanup_tx_msg_buffer:
   1038	kfree(dev->tx_msg_buffer);
   1039
   1040cleanup_intr_in_buffer:
   1041	kfree(dev->intr_in_buffer);
   1042
   1043cleanup_intr_urb:
   1044	usb_free_urb(dev->intr_urb);
   1045
   1046cleanup_candev:
   1047	free_candev(netdev);
   1048
   1049	return err;
   1050}
   1051
   1052/*
   1053 * called by the usb core when the device is removed from the system
   1054 */
   1055static void ems_usb_disconnect(struct usb_interface *intf)
   1056{
   1057	struct ems_usb *dev = usb_get_intfdata(intf);
   1058
   1059	usb_set_intfdata(intf, NULL);
   1060
   1061	if (dev) {
   1062		unregister_netdev(dev->netdev);
   1063
   1064		unlink_all_urbs(dev);
   1065
   1066		usb_free_urb(dev->intr_urb);
   1067
   1068		kfree(dev->intr_in_buffer);
   1069		kfree(dev->tx_msg_buffer);
   1070
   1071		free_candev(dev->netdev);
   1072	}
   1073}
   1074
   1075/* usb specific object needed to register this driver with the usb subsystem */
   1076static struct usb_driver ems_usb_driver = {
   1077	.name = "ems_usb",
   1078	.probe = ems_usb_probe,
   1079	.disconnect = ems_usb_disconnect,
   1080	.id_table = ems_usb_table,
   1081};
   1082
   1083module_usb_driver(ems_usb_driver);