1 // SPDX-License-Identifier: GPL-2.0
2 /* Parts of this driver are based on the following:
3  *  - Kvaser linux leaf driver (version 4.78)
4  *  - CAN driver for esd CAN-USB/2
5  *  - Kvaser linux usbcanII driver (version 5.3)
6  *
7  * Copyright (C) 2002-2018 KVASER AB, Sweden. All rights reserved.
8  * Copyright (C) 2010 Matthias Fuchs <matthias.fuchs@esd.eu>, esd gmbh
9  * Copyright (C) 2012 Olivier Sobrie <olivier@sobrie.be>
10  * Copyright (C) 2015 Valeo S.A.
11  */
12 
13 #include <linux/completion.h>
14 #include <linux/device.h>
15 #include <linux/gfp.h>
16 #include <linux/jiffies.h>
17 #include <linux/kernel.h>
18 #include <linux/netdevice.h>
19 #include <linux/spinlock.h>
20 #include <linux/string.h>
21 #include <linux/types.h>
22 #include <linux/usb.h>
23 
24 #include <linux/can.h>
25 #include <linux/can/dev.h>
26 #include <linux/can/error.h>
27 #include <linux/can/netlink.h>
28 
29 #include "kvaser_usb.h"
30 
31 /* Forward declaration */
32 static const struct kvaser_usb_dev_cfg kvaser_usb_leaf_dev_cfg;
33 
34 #define CAN_USB_CLOCK			8000000
35 #define MAX_USBCAN_NET_DEVICES		2
36 
37 /* Command header size */
38 #define CMD_HEADER_LEN			2
39 
40 /* Kvaser CAN message flags */
41 #define MSG_FLAG_ERROR_FRAME		BIT(0)
42 #define MSG_FLAG_OVERRUN		BIT(1)
43 #define MSG_FLAG_NERR			BIT(2)
44 #define MSG_FLAG_WAKEUP			BIT(3)
45 #define MSG_FLAG_REMOTE_FRAME		BIT(4)
46 #define MSG_FLAG_RESERVED		BIT(5)
47 #define MSG_FLAG_TX_ACK			BIT(6)
48 #define MSG_FLAG_TX_REQUEST		BIT(7)
49 
50 /* CAN states (M16C CxSTRH register) */
51 #define M16C_STATE_BUS_RESET		BIT(0)
52 #define M16C_STATE_BUS_ERROR		BIT(4)
53 #define M16C_STATE_BUS_PASSIVE		BIT(5)
54 #define M16C_STATE_BUS_OFF		BIT(6)
55 
56 /* Leaf/usbcan command ids */
57 #define CMD_RX_STD_MESSAGE		12
58 #define CMD_TX_STD_MESSAGE		13
59 #define CMD_RX_EXT_MESSAGE		14
60 #define CMD_TX_EXT_MESSAGE		15
61 #define CMD_SET_BUS_PARAMS		16
62 #define CMD_CHIP_STATE_EVENT		20
63 #define CMD_SET_CTRL_MODE		21
64 #define CMD_RESET_CHIP			24
65 #define CMD_START_CHIP			26
66 #define CMD_START_CHIP_REPLY		27
67 #define CMD_STOP_CHIP			28
68 #define CMD_STOP_CHIP_REPLY		29
69 
70 #define CMD_USBCAN_CLOCK_OVERFLOW_EVENT	33
71 
72 #define CMD_GET_CARD_INFO		34
73 #define CMD_GET_CARD_INFO_REPLY		35
74 #define CMD_GET_SOFTWARE_INFO		38
75 #define CMD_GET_SOFTWARE_INFO_REPLY	39
76 #define CMD_FLUSH_QUEUE			48
77 #define CMD_TX_ACKNOWLEDGE		50
78 #define CMD_CAN_ERROR_EVENT		51
79 #define CMD_FLUSH_QUEUE_REPLY		68
80 
81 #define CMD_LEAF_LOG_MESSAGE		106
82 
83 /* error factors */
84 #define M16C_EF_ACKE			BIT(0)
85 #define M16C_EF_CRCE			BIT(1)
86 #define M16C_EF_FORME			BIT(2)
87 #define M16C_EF_STFE			BIT(3)
88 #define M16C_EF_BITE0			BIT(4)
89 #define M16C_EF_BITE1			BIT(5)
90 #define M16C_EF_RCVE			BIT(6)
91 #define M16C_EF_TRE			BIT(7)
92 
93 /* Only Leaf-based devices can report M16C error factors,
94  * thus define our own error status flags for USBCANII
95  */
96 #define USBCAN_ERROR_STATE_NONE		0
97 #define USBCAN_ERROR_STATE_TX_ERROR	BIT(0)
98 #define USBCAN_ERROR_STATE_RX_ERROR	BIT(1)
99 #define USBCAN_ERROR_STATE_BUSERROR	BIT(2)
100 
101 /* bittiming parameters */
102 #define KVASER_USB_TSEG1_MIN		1
103 #define KVASER_USB_TSEG1_MAX		16
104 #define KVASER_USB_TSEG2_MIN		1
105 #define KVASER_USB_TSEG2_MAX		8
106 #define KVASER_USB_SJW_MAX		4
107 #define KVASER_USB_BRP_MIN		1
108 #define KVASER_USB_BRP_MAX		64
109 #define KVASER_USB_BRP_INC		1
110 
111 /* ctrl modes */
112 #define KVASER_CTRL_MODE_NORMAL		1
113 #define KVASER_CTRL_MODE_SILENT		2
114 #define KVASER_CTRL_MODE_SELFRECEPTION	3
115 #define KVASER_CTRL_MODE_OFF		4
116 
117 /* Extended CAN identifier flag */
118 #define KVASER_EXTENDED_FRAME		BIT(31)
119 
120 struct kvaser_cmd_simple {
121 	u8 tid;
122 	u8 channel;
123 } __packed;
124 
125 struct kvaser_cmd_cardinfo {
126 	u8 tid;
127 	u8 nchannels;
128 	__le32 serial_number;
129 	__le32 padding0;
130 	__le32 clock_resolution;
131 	__le32 mfgdate;
132 	u8 ean[8];
133 	u8 hw_revision;
134 	union {
135 		struct {
136 			u8 usb_hs_mode;
137 		} __packed leaf1;
138 		struct {
139 			u8 padding;
140 		} __packed usbcan1;
141 	} __packed;
142 	__le16 padding1;
143 } __packed;
144 
145 struct leaf_cmd_softinfo {
146 	u8 tid;
147 	u8 padding0;
148 	__le32 sw_options;
149 	__le32 fw_version;
150 	__le16 max_outstanding_tx;
151 	__le16 padding1[9];
152 } __packed;
153 
154 struct usbcan_cmd_softinfo {
155 	u8 tid;
156 	u8 fw_name[5];
157 	__le16 max_outstanding_tx;
158 	u8 padding[6];
159 	__le32 fw_version;
160 	__le16 checksum;
161 	__le16 sw_options;
162 } __packed;
163 
164 struct kvaser_cmd_busparams {
165 	u8 tid;
166 	u8 channel;
167 	__le32 bitrate;
168 	u8 tseg1;
169 	u8 tseg2;
170 	u8 sjw;
171 	u8 no_samp;
172 } __packed;
173 
174 struct kvaser_cmd_tx_can {
175 	u8 channel;
176 	u8 tid;
177 	u8 data[14];
178 	union {
179 		struct {
180 			u8 padding;
181 			u8 flags;
182 		} __packed leaf;
183 		struct {
184 			u8 flags;
185 			u8 padding;
186 		} __packed usbcan;
187 	} __packed;
188 } __packed;
189 
190 struct kvaser_cmd_rx_can_header {
191 	u8 channel;
192 	u8 flag;
193 } __packed;
194 
195 struct leaf_cmd_rx_can {
196 	u8 channel;
197 	u8 flag;
198 
199 	__le16 time[3];
200 	u8 data[14];
201 } __packed;
202 
203 struct usbcan_cmd_rx_can {
204 	u8 channel;
205 	u8 flag;
206 
207 	u8 data[14];
208 	__le16 time;
209 } __packed;
210 
211 struct leaf_cmd_chip_state_event {
212 	u8 tid;
213 	u8 channel;
214 
215 	__le16 time[3];
216 	u8 tx_errors_count;
217 	u8 rx_errors_count;
218 
219 	u8 status;
220 	u8 padding[3];
221 } __packed;
222 
223 struct usbcan_cmd_chip_state_event {
224 	u8 tid;
225 	u8 channel;
226 
227 	u8 tx_errors_count;
228 	u8 rx_errors_count;
229 	__le16 time;
230 
231 	u8 status;
232 	u8 padding[3];
233 } __packed;
234 
235 struct kvaser_cmd_tx_acknowledge_header {
236 	u8 channel;
237 	u8 tid;
238 } __packed;
239 
240 struct leaf_cmd_error_event {
241 	u8 tid;
242 	u8 flags;
243 	__le16 time[3];
244 	u8 channel;
245 	u8 padding;
246 	u8 tx_errors_count;
247 	u8 rx_errors_count;
248 	u8 status;
249 	u8 error_factor;
250 } __packed;
251 
252 struct usbcan_cmd_error_event {
253 	u8 tid;
254 	u8 padding;
255 	u8 tx_errors_count_ch0;
256 	u8 rx_errors_count_ch0;
257 	u8 tx_errors_count_ch1;
258 	u8 rx_errors_count_ch1;
259 	u8 status_ch0;
260 	u8 status_ch1;
261 	__le16 time;
262 } __packed;
263 
264 struct kvaser_cmd_ctrl_mode {
265 	u8 tid;
266 	u8 channel;
267 	u8 ctrl_mode;
268 	u8 padding[3];
269 } __packed;
270 
271 struct kvaser_cmd_flush_queue {
272 	u8 tid;
273 	u8 channel;
274 	u8 flags;
275 	u8 padding[3];
276 } __packed;
277 
278 struct leaf_cmd_log_message {
279 	u8 channel;
280 	u8 flags;
281 	__le16 time[3];
282 	u8 dlc;
283 	u8 time_offset;
284 	__le32 id;
285 	u8 data[8];
286 } __packed;
287 
288 struct kvaser_cmd {
289 	u8 len;
290 	u8 id;
291 	union	{
292 		struct kvaser_cmd_simple simple;
293 		struct kvaser_cmd_cardinfo cardinfo;
294 		struct kvaser_cmd_busparams busparams;
295 
296 		struct kvaser_cmd_rx_can_header rx_can_header;
297 		struct kvaser_cmd_tx_acknowledge_header tx_acknowledge_header;
298 
299 		union {
300 			struct leaf_cmd_softinfo softinfo;
301 			struct leaf_cmd_rx_can rx_can;
302 			struct leaf_cmd_chip_state_event chip_state_event;
303 			struct leaf_cmd_error_event error_event;
304 			struct leaf_cmd_log_message log_message;
305 		} __packed leaf;
306 
307 		union {
308 			struct usbcan_cmd_softinfo softinfo;
309 			struct usbcan_cmd_rx_can rx_can;
310 			struct usbcan_cmd_chip_state_event chip_state_event;
311 			struct usbcan_cmd_error_event error_event;
312 		} __packed usbcan;
313 
314 		struct kvaser_cmd_tx_can tx_can;
315 		struct kvaser_cmd_ctrl_mode ctrl_mode;
316 		struct kvaser_cmd_flush_queue flush_queue;
317 	} u;
318 } __packed;
319 
320 /* Summary of a kvaser error event, for a unified Leaf/Usbcan error
321  * handling. Some discrepancies between the two families exist:
322  *
323  * - USBCAN firmware does not report M16C "error factors"
324  * - USBCAN controllers has difficulties reporting if the raised error
325  *   event is for ch0 or ch1. They leave such arbitration to the OS
326  *   driver by letting it compare error counters with previous values
327  *   and decide the error event's channel. Thus for USBCAN, the channel
328  *   field is only advisory.
329  */
330 struct kvaser_usb_err_summary {
331 	u8 channel, status, txerr, rxerr;
332 	union {
333 		struct {
334 			u8 error_factor;
335 		} leaf;
336 		struct {
337 			u8 other_ch_status;
338 			u8 error_state;
339 		} usbcan;
340 	};
341 };
342 
343 static void *
344 kvaser_usb_leaf_frame_to_cmd(const struct kvaser_usb_net_priv *priv,
345 			     const struct sk_buff *skb, int *frame_len,
346 			     int *cmd_len, u16 transid)
347 {
348 	struct kvaser_usb *dev = priv->dev;
349 	struct kvaser_cmd *cmd;
350 	u8 *cmd_tx_can_flags = NULL;		/* GCC */
351 	struct can_frame *cf = (struct can_frame *)skb->data;
352 
353 	*frame_len = cf->can_dlc;
354 
355 	cmd = kmalloc(sizeof(*cmd), GFP_ATOMIC);
356 	if (cmd) {
357 		cmd->u.tx_can.tid = transid & 0xff;
358 		cmd->len = *cmd_len = CMD_HEADER_LEN +
359 				      sizeof(struct kvaser_cmd_tx_can);
360 		cmd->u.tx_can.channel = priv->channel;
361 
362 		switch (dev->card_data.leaf.family) {
363 		case KVASER_LEAF:
364 			cmd_tx_can_flags = &cmd->u.tx_can.leaf.flags;
365 			break;
366 		case KVASER_USBCAN:
367 			cmd_tx_can_flags = &cmd->u.tx_can.usbcan.flags;
368 			break;
369 		}
370 
371 		*cmd_tx_can_flags = 0;
372 
373 		if (cf->can_id & CAN_EFF_FLAG) {
374 			cmd->id = CMD_TX_EXT_MESSAGE;
375 			cmd->u.tx_can.data[0] = (cf->can_id >> 24) & 0x1f;
376 			cmd->u.tx_can.data[1] = (cf->can_id >> 18) & 0x3f;
377 			cmd->u.tx_can.data[2] = (cf->can_id >> 14) & 0x0f;
378 			cmd->u.tx_can.data[3] = (cf->can_id >> 6) & 0xff;
379 			cmd->u.tx_can.data[4] = cf->can_id & 0x3f;
380 		} else {
381 			cmd->id = CMD_TX_STD_MESSAGE;
382 			cmd->u.tx_can.data[0] = (cf->can_id >> 6) & 0x1f;
383 			cmd->u.tx_can.data[1] = cf->can_id & 0x3f;
384 		}
385 
386 		cmd->u.tx_can.data[5] = cf->can_dlc;
387 		memcpy(&cmd->u.tx_can.data[6], cf->data, cf->can_dlc);
388 
389 		if (cf->can_id & CAN_RTR_FLAG)
390 			*cmd_tx_can_flags |= MSG_FLAG_REMOTE_FRAME;
391 	}
392 	return cmd;
393 }
394 
395 static int kvaser_usb_leaf_wait_cmd(const struct kvaser_usb *dev, u8 id,
396 				    struct kvaser_cmd *cmd)
397 {
398 	struct kvaser_cmd *tmp;
399 	void *buf;
400 	int actual_len;
401 	int err;
402 	int pos;
403 	unsigned long to = jiffies + msecs_to_jiffies(KVASER_USB_TIMEOUT);
404 
405 	buf = kzalloc(KVASER_USB_RX_BUFFER_SIZE, GFP_KERNEL);
406 	if (!buf)
407 		return -ENOMEM;
408 
409 	do {
410 		err = kvaser_usb_recv_cmd(dev, buf, KVASER_USB_RX_BUFFER_SIZE,
411 					  &actual_len);
412 		if (err < 0)
413 			goto end;
414 
415 		pos = 0;
416 		while (pos <= actual_len - CMD_HEADER_LEN) {
417 			tmp = buf + pos;
418 
419 			/* Handle commands crossing the USB endpoint max packet
420 			 * size boundary. Check kvaser_usb_read_bulk_callback()
421 			 * for further details.
422 			 */
423 			if (tmp->len == 0) {
424 				pos = round_up(pos,
425 					       le16_to_cpu
426 						(dev->bulk_in->wMaxPacketSize));
427 				continue;
428 			}
429 
430 			if (pos + tmp->len > actual_len) {
431 				dev_err_ratelimited(&dev->intf->dev,
432 						    "Format error\n");
433 				break;
434 			}
435 
436 			if (tmp->id == id) {
437 				memcpy(cmd, tmp, tmp->len);
438 				goto end;
439 			}
440 
441 			pos += tmp->len;
442 		}
443 	} while (time_before(jiffies, to));
444 
445 	err = -EINVAL;
446 
447 end:
448 	kfree(buf);
449 
450 	return err;
451 }
452 
453 static int kvaser_usb_leaf_send_simple_cmd(const struct kvaser_usb *dev,
454 					   u8 cmd_id, int channel)
455 {
456 	struct kvaser_cmd *cmd;
457 	int rc;
458 
459 	cmd = kmalloc(sizeof(*cmd), GFP_KERNEL);
460 	if (!cmd)
461 		return -ENOMEM;
462 
463 	cmd->id = cmd_id;
464 	cmd->len = CMD_HEADER_LEN + sizeof(struct kvaser_cmd_simple);
465 	cmd->u.simple.channel = channel;
466 	cmd->u.simple.tid = 0xff;
467 
468 	rc = kvaser_usb_send_cmd(dev, cmd, cmd->len);
469 
470 	kfree(cmd);
471 	return rc;
472 }
473 
474 static int kvaser_usb_leaf_get_software_info_inner(struct kvaser_usb *dev)
475 {
476 	struct kvaser_cmd cmd;
477 	int err;
478 
479 	err = kvaser_usb_leaf_send_simple_cmd(dev, CMD_GET_SOFTWARE_INFO, 0);
480 	if (err)
481 		return err;
482 
483 	err = kvaser_usb_leaf_wait_cmd(dev, CMD_GET_SOFTWARE_INFO_REPLY, &cmd);
484 	if (err)
485 		return err;
486 
487 	switch (dev->card_data.leaf.family) {
488 	case KVASER_LEAF:
489 		dev->fw_version = le32_to_cpu(cmd.u.leaf.softinfo.fw_version);
490 		dev->max_tx_urbs =
491 			le16_to_cpu(cmd.u.leaf.softinfo.max_outstanding_tx);
492 		break;
493 	case KVASER_USBCAN:
494 		dev->fw_version = le32_to_cpu(cmd.u.usbcan.softinfo.fw_version);
495 		dev->max_tx_urbs =
496 			le16_to_cpu(cmd.u.usbcan.softinfo.max_outstanding_tx);
497 		break;
498 	}
499 
500 	return 0;
501 }
502 
503 static int kvaser_usb_leaf_get_software_info(struct kvaser_usb *dev)
504 {
505 	int err;
506 	int retry = 3;
507 
508 	/* On some x86 laptops, plugging a Kvaser device again after
509 	 * an unplug makes the firmware always ignore the very first
510 	 * command. For such a case, provide some room for retries
511 	 * instead of completely exiting the driver.
512 	 */
513 	do {
514 		err = kvaser_usb_leaf_get_software_info_inner(dev);
515 	} while (--retry && err == -ETIMEDOUT);
516 
517 	return err;
518 }
519 
520 static int kvaser_usb_leaf_get_card_info(struct kvaser_usb *dev)
521 {
522 	struct kvaser_cmd cmd;
523 	int err;
524 
525 	err = kvaser_usb_leaf_send_simple_cmd(dev, CMD_GET_CARD_INFO, 0);
526 	if (err)
527 		return err;
528 
529 	err = kvaser_usb_leaf_wait_cmd(dev, CMD_GET_CARD_INFO_REPLY, &cmd);
530 	if (err)
531 		return err;
532 
533 	dev->nchannels = cmd.u.cardinfo.nchannels;
534 	if (dev->nchannels > KVASER_USB_MAX_NET_DEVICES ||
535 	    (dev->card_data.leaf.family == KVASER_USBCAN &&
536 	     dev->nchannels > MAX_USBCAN_NET_DEVICES))
537 		return -EINVAL;
538 
539 	return 0;
540 }
541 
542 static void kvaser_usb_leaf_tx_acknowledge(const struct kvaser_usb *dev,
543 					   const struct kvaser_cmd *cmd)
544 {
545 	struct net_device_stats *stats;
546 	struct kvaser_usb_tx_urb_context *context;
547 	struct kvaser_usb_net_priv *priv;
548 	unsigned long flags;
549 	u8 channel, tid;
550 
551 	channel = cmd->u.tx_acknowledge_header.channel;
552 	tid = cmd->u.tx_acknowledge_header.tid;
553 
554 	if (channel >= dev->nchannels) {
555 		dev_err(&dev->intf->dev,
556 			"Invalid channel number (%d)\n", channel);
557 		return;
558 	}
559 
560 	priv = dev->nets[channel];
561 
562 	if (!netif_device_present(priv->netdev))
563 		return;
564 
565 	stats = &priv->netdev->stats;
566 
567 	context = &priv->tx_contexts[tid % dev->max_tx_urbs];
568 
569 	/* Sometimes the state change doesn't come after a bus-off event */
570 	if (priv->can.restart_ms && priv->can.state >= CAN_STATE_BUS_OFF) {
571 		struct sk_buff *skb;
572 		struct can_frame *cf;
573 
574 		skb = alloc_can_err_skb(priv->netdev, &cf);
575 		if (skb) {
576 			cf->can_id |= CAN_ERR_RESTARTED;
577 
578 			stats->rx_packets++;
579 			stats->rx_bytes += cf->can_dlc;
580 			netif_rx(skb);
581 		} else {
582 			netdev_err(priv->netdev,
583 				   "No memory left for err_skb\n");
584 		}
585 
586 		priv->can.can_stats.restarts++;
587 		netif_carrier_on(priv->netdev);
588 
589 		priv->can.state = CAN_STATE_ERROR_ACTIVE;
590 	}
591 
592 	stats->tx_packets++;
593 	stats->tx_bytes += context->dlc;
594 
595 	spin_lock_irqsave(&priv->tx_contexts_lock, flags);
596 
597 	can_get_echo_skb(priv->netdev, context->echo_index);
598 	context->echo_index = dev->max_tx_urbs;
599 	--priv->active_tx_contexts;
600 	netif_wake_queue(priv->netdev);
601 
602 	spin_unlock_irqrestore(&priv->tx_contexts_lock, flags);
603 }
604 
605 static int kvaser_usb_leaf_simple_cmd_async(struct kvaser_usb_net_priv *priv,
606 					    u8 cmd_id)
607 {
608 	struct kvaser_cmd *cmd;
609 	int err;
610 
611 	cmd = kzalloc(sizeof(*cmd), GFP_ATOMIC);
612 	if (!cmd)
613 		return -ENOMEM;
614 
615 	cmd->len = CMD_HEADER_LEN + sizeof(struct kvaser_cmd_simple);
616 	cmd->id = cmd_id;
617 	cmd->u.simple.channel = priv->channel;
618 
619 	err = kvaser_usb_send_cmd_async(priv, cmd, cmd->len);
620 	if (err)
621 		kfree(cmd);
622 
623 	return err;
624 }
625 
626 static void
627 kvaser_usb_leaf_rx_error_update_can_state(struct kvaser_usb_net_priv *priv,
628 					const struct kvaser_usb_err_summary *es,
629 					struct can_frame *cf)
630 {
631 	struct kvaser_usb *dev = priv->dev;
632 	struct net_device_stats *stats = &priv->netdev->stats;
633 	enum can_state cur_state, new_state, tx_state, rx_state;
634 
635 	netdev_dbg(priv->netdev, "Error status: 0x%02x\n", es->status);
636 
637 	new_state = priv->can.state;
638 	cur_state = priv->can.state;
639 
640 	if (es->status & (M16C_STATE_BUS_OFF | M16C_STATE_BUS_RESET)) {
641 		new_state = CAN_STATE_BUS_OFF;
642 	} else if (es->status & M16C_STATE_BUS_PASSIVE) {
643 		new_state = CAN_STATE_ERROR_PASSIVE;
644 	} else if (es->status & M16C_STATE_BUS_ERROR) {
645 		/* Guard against spurious error events after a busoff */
646 		if (cur_state < CAN_STATE_BUS_OFF) {
647 			if (es->txerr >= 128 || es->rxerr >= 128)
648 				new_state = CAN_STATE_ERROR_PASSIVE;
649 			else if (es->txerr >= 96 || es->rxerr >= 96)
650 				new_state = CAN_STATE_ERROR_WARNING;
651 			else if (cur_state > CAN_STATE_ERROR_ACTIVE)
652 				new_state = CAN_STATE_ERROR_ACTIVE;
653 		}
654 	}
655 
656 	if (!es->status)
657 		new_state = CAN_STATE_ERROR_ACTIVE;
658 
659 	if (new_state != cur_state) {
660 		tx_state = (es->txerr >= es->rxerr) ? new_state : 0;
661 		rx_state = (es->txerr <= es->rxerr) ? new_state : 0;
662 
663 		can_change_state(priv->netdev, cf, tx_state, rx_state);
664 	}
665 
666 	if (priv->can.restart_ms &&
667 	    cur_state >= CAN_STATE_BUS_OFF &&
668 	    new_state < CAN_STATE_BUS_OFF)
669 		priv->can.can_stats.restarts++;
670 
671 	switch (dev->card_data.leaf.family) {
672 	case KVASER_LEAF:
673 		if (es->leaf.error_factor) {
674 			priv->can.can_stats.bus_error++;
675 			stats->rx_errors++;
676 		}
677 		break;
678 	case KVASER_USBCAN:
679 		if (es->usbcan.error_state & USBCAN_ERROR_STATE_TX_ERROR)
680 			stats->tx_errors++;
681 		if (es->usbcan.error_state & USBCAN_ERROR_STATE_RX_ERROR)
682 			stats->rx_errors++;
683 		if (es->usbcan.error_state & USBCAN_ERROR_STATE_BUSERROR)
684 			priv->can.can_stats.bus_error++;
685 		break;
686 	}
687 
688 	priv->bec.txerr = es->txerr;
689 	priv->bec.rxerr = es->rxerr;
690 }
691 
692 static void kvaser_usb_leaf_rx_error(const struct kvaser_usb *dev,
693 				     const struct kvaser_usb_err_summary *es)
694 {
695 	struct can_frame *cf;
696 	struct can_frame tmp_cf = { .can_id = CAN_ERR_FLAG,
697 				    .can_dlc = CAN_ERR_DLC };
698 	struct sk_buff *skb;
699 	struct net_device_stats *stats;
700 	struct kvaser_usb_net_priv *priv;
701 	enum can_state old_state, new_state;
702 
703 	if (es->channel >= dev->nchannels) {
704 		dev_err(&dev->intf->dev,
705 			"Invalid channel number (%d)\n", es->channel);
706 		return;
707 	}
708 
709 	priv = dev->nets[es->channel];
710 	stats = &priv->netdev->stats;
711 
712 	/* Update all of the CAN interface's state and error counters before
713 	 * trying any memory allocation that can actually fail with -ENOMEM.
714 	 *
715 	 * We send a temporary stack-allocated error CAN frame to
716 	 * can_change_state() for the very same reason.
717 	 *
718 	 * TODO: Split can_change_state() responsibility between updating the
719 	 * CAN interface's state and counters, and the setting up of CAN error
720 	 * frame ID and data to userspace. Remove stack allocation afterwards.
721 	 */
722 	old_state = priv->can.state;
723 	kvaser_usb_leaf_rx_error_update_can_state(priv, es, &tmp_cf);
724 	new_state = priv->can.state;
725 
726 	skb = alloc_can_err_skb(priv->netdev, &cf);
727 	if (!skb) {
728 		stats->rx_dropped++;
729 		return;
730 	}
731 	memcpy(cf, &tmp_cf, sizeof(*cf));
732 
733 	if (new_state != old_state) {
734 		if (es->status &
735 		    (M16C_STATE_BUS_OFF | M16C_STATE_BUS_RESET)) {
736 			if (!priv->can.restart_ms)
737 				kvaser_usb_leaf_simple_cmd_async(priv,
738 								 CMD_STOP_CHIP);
739 			netif_carrier_off(priv->netdev);
740 		}
741 
742 		if (priv->can.restart_ms &&
743 		    old_state >= CAN_STATE_BUS_OFF &&
744 		    new_state < CAN_STATE_BUS_OFF) {
745 			cf->can_id |= CAN_ERR_RESTARTED;
746 			netif_carrier_on(priv->netdev);
747 		}
748 	}
749 
750 	switch (dev->card_data.leaf.family) {
751 	case KVASER_LEAF:
752 		if (es->leaf.error_factor) {
753 			cf->can_id |= CAN_ERR_BUSERROR | CAN_ERR_PROT;
754 
755 			if (es->leaf.error_factor & M16C_EF_ACKE)
756 				cf->data[3] = CAN_ERR_PROT_LOC_ACK;
757 			if (es->leaf.error_factor & M16C_EF_CRCE)
758 				cf->data[3] = CAN_ERR_PROT_LOC_CRC_SEQ;
759 			if (es->leaf.error_factor & M16C_EF_FORME)
760 				cf->data[2] |= CAN_ERR_PROT_FORM;
761 			if (es->leaf.error_factor & M16C_EF_STFE)
762 				cf->data[2] |= CAN_ERR_PROT_STUFF;
763 			if (es->leaf.error_factor & M16C_EF_BITE0)
764 				cf->data[2] |= CAN_ERR_PROT_BIT0;
765 			if (es->leaf.error_factor & M16C_EF_BITE1)
766 				cf->data[2] |= CAN_ERR_PROT_BIT1;
767 			if (es->leaf.error_factor & M16C_EF_TRE)
768 				cf->data[2] |= CAN_ERR_PROT_TX;
769 		}
770 		break;
771 	case KVASER_USBCAN:
772 		if (es->usbcan.error_state & USBCAN_ERROR_STATE_BUSERROR)
773 			cf->can_id |= CAN_ERR_BUSERROR;
774 		break;
775 	}
776 
777 	cf->data[6] = es->txerr;
778 	cf->data[7] = es->rxerr;
779 
780 	stats->rx_packets++;
781 	stats->rx_bytes += cf->can_dlc;
782 	netif_rx(skb);
783 }
784 
785 /* For USBCAN, report error to userspace if the channels's errors counter
786  * has changed, or we're the only channel seeing a bus error state.
787  */
788 static void
789 kvaser_usb_leaf_usbcan_conditionally_rx_error(const struct kvaser_usb *dev,
790 					      struct kvaser_usb_err_summary *es)
791 {
792 	struct kvaser_usb_net_priv *priv;
793 	unsigned int channel;
794 	bool report_error;
795 
796 	channel = es->channel;
797 	if (channel >= dev->nchannels) {
798 		dev_err(&dev->intf->dev,
799 			"Invalid channel number (%d)\n", channel);
800 		return;
801 	}
802 
803 	priv = dev->nets[channel];
804 	report_error = false;
805 
806 	if (es->txerr != priv->bec.txerr) {
807 		es->usbcan.error_state |= USBCAN_ERROR_STATE_TX_ERROR;
808 		report_error = true;
809 	}
810 	if (es->rxerr != priv->bec.rxerr) {
811 		es->usbcan.error_state |= USBCAN_ERROR_STATE_RX_ERROR;
812 		report_error = true;
813 	}
814 	if ((es->status & M16C_STATE_BUS_ERROR) &&
815 	    !(es->usbcan.other_ch_status & M16C_STATE_BUS_ERROR)) {
816 		es->usbcan.error_state |= USBCAN_ERROR_STATE_BUSERROR;
817 		report_error = true;
818 	}
819 
820 	if (report_error)
821 		kvaser_usb_leaf_rx_error(dev, es);
822 }
823 
824 static void kvaser_usb_leaf_usbcan_rx_error(const struct kvaser_usb *dev,
825 					    const struct kvaser_cmd *cmd)
826 {
827 	struct kvaser_usb_err_summary es = { };
828 
829 	switch (cmd->id) {
830 	/* Sometimes errors are sent as unsolicited chip state events */
831 	case CMD_CHIP_STATE_EVENT:
832 		es.channel = cmd->u.usbcan.chip_state_event.channel;
833 		es.status = cmd->u.usbcan.chip_state_event.status;
834 		es.txerr = cmd->u.usbcan.chip_state_event.tx_errors_count;
835 		es.rxerr = cmd->u.usbcan.chip_state_event.rx_errors_count;
836 		kvaser_usb_leaf_usbcan_conditionally_rx_error(dev, &es);
837 		break;
838 
839 	case CMD_CAN_ERROR_EVENT:
840 		es.channel = 0;
841 		es.status = cmd->u.usbcan.error_event.status_ch0;
842 		es.txerr = cmd->u.usbcan.error_event.tx_errors_count_ch0;
843 		es.rxerr = cmd->u.usbcan.error_event.rx_errors_count_ch0;
844 		es.usbcan.other_ch_status =
845 			cmd->u.usbcan.error_event.status_ch1;
846 		kvaser_usb_leaf_usbcan_conditionally_rx_error(dev, &es);
847 
848 		/* The USBCAN firmware supports up to 2 channels.
849 		 * Now that ch0 was checked, check if ch1 has any errors.
850 		 */
851 		if (dev->nchannels == MAX_USBCAN_NET_DEVICES) {
852 			es.channel = 1;
853 			es.status = cmd->u.usbcan.error_event.status_ch1;
854 			es.txerr =
855 				cmd->u.usbcan.error_event.tx_errors_count_ch1;
856 			es.rxerr =
857 				cmd->u.usbcan.error_event.rx_errors_count_ch1;
858 			es.usbcan.other_ch_status =
859 				cmd->u.usbcan.error_event.status_ch0;
860 			kvaser_usb_leaf_usbcan_conditionally_rx_error(dev, &es);
861 		}
862 		break;
863 
864 	default:
865 		dev_err(&dev->intf->dev, "Invalid cmd id (%d)\n", cmd->id);
866 	}
867 }
868 
869 static void kvaser_usb_leaf_leaf_rx_error(const struct kvaser_usb *dev,
870 					  const struct kvaser_cmd *cmd)
871 {
872 	struct kvaser_usb_err_summary es = { };
873 
874 	switch (cmd->id) {
875 	case CMD_CAN_ERROR_EVENT:
876 		es.channel = cmd->u.leaf.error_event.channel;
877 		es.status = cmd->u.leaf.error_event.status;
878 		es.txerr = cmd->u.leaf.error_event.tx_errors_count;
879 		es.rxerr = cmd->u.leaf.error_event.rx_errors_count;
880 		es.leaf.error_factor = cmd->u.leaf.error_event.error_factor;
881 		break;
882 	case CMD_LEAF_LOG_MESSAGE:
883 		es.channel = cmd->u.leaf.log_message.channel;
884 		es.status = cmd->u.leaf.log_message.data[0];
885 		es.txerr = cmd->u.leaf.log_message.data[2];
886 		es.rxerr = cmd->u.leaf.log_message.data[3];
887 		es.leaf.error_factor = cmd->u.leaf.log_message.data[1];
888 		break;
889 	case CMD_CHIP_STATE_EVENT:
890 		es.channel = cmd->u.leaf.chip_state_event.channel;
891 		es.status = cmd->u.leaf.chip_state_event.status;
892 		es.txerr = cmd->u.leaf.chip_state_event.tx_errors_count;
893 		es.rxerr = cmd->u.leaf.chip_state_event.rx_errors_count;
894 		es.leaf.error_factor = 0;
895 		break;
896 	default:
897 		dev_err(&dev->intf->dev, "Invalid cmd id (%d)\n", cmd->id);
898 		return;
899 	}
900 
901 	kvaser_usb_leaf_rx_error(dev, &es);
902 }
903 
904 static void kvaser_usb_leaf_rx_can_err(const struct kvaser_usb_net_priv *priv,
905 				       const struct kvaser_cmd *cmd)
906 {
907 	if (cmd->u.rx_can_header.flag & (MSG_FLAG_ERROR_FRAME |
908 					 MSG_FLAG_NERR)) {
909 		struct net_device_stats *stats = &priv->netdev->stats;
910 
911 		netdev_err(priv->netdev, "Unknown error (flags: 0x%02x)\n",
912 			   cmd->u.rx_can_header.flag);
913 
914 		stats->rx_errors++;
915 		return;
916 	}
917 
918 	if (cmd->u.rx_can_header.flag & MSG_FLAG_OVERRUN)
919 		kvaser_usb_can_rx_over_error(priv->netdev);
920 }
921 
922 static void kvaser_usb_leaf_rx_can_msg(const struct kvaser_usb *dev,
923 				       const struct kvaser_cmd *cmd)
924 {
925 	struct kvaser_usb_net_priv *priv;
926 	struct can_frame *cf;
927 	struct sk_buff *skb;
928 	struct net_device_stats *stats;
929 	u8 channel = cmd->u.rx_can_header.channel;
930 	const u8 *rx_data = NULL;	/* GCC */
931 
932 	if (channel >= dev->nchannels) {
933 		dev_err(&dev->intf->dev,
934 			"Invalid channel number (%d)\n", channel);
935 		return;
936 	}
937 
938 	priv = dev->nets[channel];
939 	stats = &priv->netdev->stats;
940 
941 	if ((cmd->u.rx_can_header.flag & MSG_FLAG_ERROR_FRAME) &&
942 	    (dev->card_data.leaf.family == KVASER_LEAF &&
943 	     cmd->id == CMD_LEAF_LOG_MESSAGE)) {
944 		kvaser_usb_leaf_leaf_rx_error(dev, cmd);
945 		return;
946 	} else if (cmd->u.rx_can_header.flag & (MSG_FLAG_ERROR_FRAME |
947 						MSG_FLAG_NERR |
948 						MSG_FLAG_OVERRUN)) {
949 		kvaser_usb_leaf_rx_can_err(priv, cmd);
950 		return;
951 	} else if (cmd->u.rx_can_header.flag & ~MSG_FLAG_REMOTE_FRAME) {
952 		netdev_warn(priv->netdev,
953 			    "Unhandled frame (flags: 0x%02x)\n",
954 			    cmd->u.rx_can_header.flag);
955 		return;
956 	}
957 
958 	switch (dev->card_data.leaf.family) {
959 	case KVASER_LEAF:
960 		rx_data = cmd->u.leaf.rx_can.data;
961 		break;
962 	case KVASER_USBCAN:
963 		rx_data = cmd->u.usbcan.rx_can.data;
964 		break;
965 	}
966 
967 	skb = alloc_can_skb(priv->netdev, &cf);
968 	if (!skb) {
969 		stats->rx_dropped++;
970 		return;
971 	}
972 
973 	if (dev->card_data.leaf.family == KVASER_LEAF && cmd->id ==
974 	    CMD_LEAF_LOG_MESSAGE) {
975 		cf->can_id = le32_to_cpu(cmd->u.leaf.log_message.id);
976 		if (cf->can_id & KVASER_EXTENDED_FRAME)
977 			cf->can_id &= CAN_EFF_MASK | CAN_EFF_FLAG;
978 		else
979 			cf->can_id &= CAN_SFF_MASK;
980 
981 		cf->can_dlc = get_can_dlc(cmd->u.leaf.log_message.dlc);
982 
983 		if (cmd->u.leaf.log_message.flags & MSG_FLAG_REMOTE_FRAME)
984 			cf->can_id |= CAN_RTR_FLAG;
985 		else
986 			memcpy(cf->data, &cmd->u.leaf.log_message.data,
987 			       cf->can_dlc);
988 	} else {
989 		cf->can_id = ((rx_data[0] & 0x1f) << 6) | (rx_data[1] & 0x3f);
990 
991 		if (cmd->id == CMD_RX_EXT_MESSAGE) {
992 			cf->can_id <<= 18;
993 			cf->can_id |= ((rx_data[2] & 0x0f) << 14) |
994 				      ((rx_data[3] & 0xff) << 6) |
995 				      (rx_data[4] & 0x3f);
996 			cf->can_id |= CAN_EFF_FLAG;
997 		}
998 
999 		cf->can_dlc = get_can_dlc(rx_data[5]);
1000 
1001 		if (cmd->u.rx_can_header.flag & MSG_FLAG_REMOTE_FRAME)
1002 			cf->can_id |= CAN_RTR_FLAG;
1003 		else
1004 			memcpy(cf->data, &rx_data[6], cf->can_dlc);
1005 	}
1006 
1007 	stats->rx_packets++;
1008 	stats->rx_bytes += cf->can_dlc;
1009 	netif_rx(skb);
1010 }
1011 
1012 static void kvaser_usb_leaf_start_chip_reply(const struct kvaser_usb *dev,
1013 					     const struct kvaser_cmd *cmd)
1014 {
1015 	struct kvaser_usb_net_priv *priv;
1016 	u8 channel = cmd->u.simple.channel;
1017 
1018 	if (channel >= dev->nchannels) {
1019 		dev_err(&dev->intf->dev,
1020 			"Invalid channel number (%d)\n", channel);
1021 		return;
1022 	}
1023 
1024 	priv = dev->nets[channel];
1025 
1026 	if (completion_done(&priv->start_comp) &&
1027 	    netif_queue_stopped(priv->netdev)) {
1028 		netif_wake_queue(priv->netdev);
1029 	} else {
1030 		netif_start_queue(priv->netdev);
1031 		complete(&priv->start_comp);
1032 	}
1033 }
1034 
1035 static void kvaser_usb_leaf_stop_chip_reply(const struct kvaser_usb *dev,
1036 					    const struct kvaser_cmd *cmd)
1037 {
1038 	struct kvaser_usb_net_priv *priv;
1039 	u8 channel = cmd->u.simple.channel;
1040 
1041 	if (channel >= dev->nchannels) {
1042 		dev_err(&dev->intf->dev,
1043 			"Invalid channel number (%d)\n", channel);
1044 		return;
1045 	}
1046 
1047 	priv = dev->nets[channel];
1048 
1049 	complete(&priv->stop_comp);
1050 }
1051 
1052 static void kvaser_usb_leaf_handle_command(const struct kvaser_usb *dev,
1053 					   const struct kvaser_cmd *cmd)
1054 {
1055 	switch (cmd->id) {
1056 	case CMD_START_CHIP_REPLY:
1057 		kvaser_usb_leaf_start_chip_reply(dev, cmd);
1058 		break;
1059 
1060 	case CMD_STOP_CHIP_REPLY:
1061 		kvaser_usb_leaf_stop_chip_reply(dev, cmd);
1062 		break;
1063 
1064 	case CMD_RX_STD_MESSAGE:
1065 	case CMD_RX_EXT_MESSAGE:
1066 		kvaser_usb_leaf_rx_can_msg(dev, cmd);
1067 		break;
1068 
1069 	case CMD_LEAF_LOG_MESSAGE:
1070 		if (dev->card_data.leaf.family != KVASER_LEAF)
1071 			goto warn;
1072 		kvaser_usb_leaf_rx_can_msg(dev, cmd);
1073 		break;
1074 
1075 	case CMD_CHIP_STATE_EVENT:
1076 	case CMD_CAN_ERROR_EVENT:
1077 		if (dev->card_data.leaf.family == KVASER_LEAF)
1078 			kvaser_usb_leaf_leaf_rx_error(dev, cmd);
1079 		else
1080 			kvaser_usb_leaf_usbcan_rx_error(dev, cmd);
1081 		break;
1082 
1083 	case CMD_TX_ACKNOWLEDGE:
1084 		kvaser_usb_leaf_tx_acknowledge(dev, cmd);
1085 		break;
1086 
1087 	/* Ignored commands */
1088 	case CMD_USBCAN_CLOCK_OVERFLOW_EVENT:
1089 		if (dev->card_data.leaf.family != KVASER_USBCAN)
1090 			goto warn;
1091 		break;
1092 
1093 	case CMD_FLUSH_QUEUE_REPLY:
1094 		if (dev->card_data.leaf.family != KVASER_LEAF)
1095 			goto warn;
1096 		break;
1097 
1098 	default:
1099 warn:		dev_warn(&dev->intf->dev, "Unhandled command (%d)\n", cmd->id);
1100 		break;
1101 	}
1102 }
1103 
1104 static void kvaser_usb_leaf_read_bulk_callback(struct kvaser_usb *dev,
1105 					       void *buf, int len)
1106 {
1107 	struct kvaser_cmd *cmd;
1108 	int pos = 0;
1109 
1110 	while (pos <= len - CMD_HEADER_LEN) {
1111 		cmd = buf + pos;
1112 
1113 		/* The Kvaser firmware can only read and write commands that
1114 		 * does not cross the USB's endpoint wMaxPacketSize boundary.
1115 		 * If a follow-up command crosses such boundary, firmware puts
1116 		 * a placeholder zero-length command in its place then aligns
1117 		 * the real command to the next max packet size.
1118 		 *
1119 		 * Handle such cases or we're going to miss a significant
1120 		 * number of events in case of a heavy rx load on the bus.
1121 		 */
1122 		if (cmd->len == 0) {
1123 			pos = round_up(pos, le16_to_cpu
1124 						(dev->bulk_in->wMaxPacketSize));
1125 			continue;
1126 		}
1127 
1128 		if (pos + cmd->len > len) {
1129 			dev_err_ratelimited(&dev->intf->dev, "Format error\n");
1130 			break;
1131 		}
1132 
1133 		kvaser_usb_leaf_handle_command(dev, cmd);
1134 		pos += cmd->len;
1135 	}
1136 }
1137 
1138 static int kvaser_usb_leaf_set_opt_mode(const struct kvaser_usb_net_priv *priv)
1139 {
1140 	struct kvaser_cmd *cmd;
1141 	int rc;
1142 
1143 	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
1144 	if (!cmd)
1145 		return -ENOMEM;
1146 
1147 	cmd->id = CMD_SET_CTRL_MODE;
1148 	cmd->len = CMD_HEADER_LEN + sizeof(struct kvaser_cmd_ctrl_mode);
1149 	cmd->u.ctrl_mode.tid = 0xff;
1150 	cmd->u.ctrl_mode.channel = priv->channel;
1151 
1152 	if (priv->can.ctrlmode & CAN_CTRLMODE_LISTENONLY)
1153 		cmd->u.ctrl_mode.ctrl_mode = KVASER_CTRL_MODE_SILENT;
1154 	else
1155 		cmd->u.ctrl_mode.ctrl_mode = KVASER_CTRL_MODE_NORMAL;
1156 
1157 	rc = kvaser_usb_send_cmd(priv->dev, cmd, cmd->len);
1158 
1159 	kfree(cmd);
1160 	return rc;
1161 }
1162 
1163 static int kvaser_usb_leaf_start_chip(struct kvaser_usb_net_priv *priv)
1164 {
1165 	int err;
1166 
1167 	init_completion(&priv->start_comp);
1168 
1169 	err = kvaser_usb_leaf_send_simple_cmd(priv->dev, CMD_START_CHIP,
1170 					      priv->channel);
1171 	if (err)
1172 		return err;
1173 
1174 	if (!wait_for_completion_timeout(&priv->start_comp,
1175 					 msecs_to_jiffies(KVASER_USB_TIMEOUT)))
1176 		return -ETIMEDOUT;
1177 
1178 	return 0;
1179 }
1180 
1181 static int kvaser_usb_leaf_stop_chip(struct kvaser_usb_net_priv *priv)
1182 {
1183 	int err;
1184 
1185 	init_completion(&priv->stop_comp);
1186 
1187 	err = kvaser_usb_leaf_send_simple_cmd(priv->dev, CMD_STOP_CHIP,
1188 					      priv->channel);
1189 	if (err)
1190 		return err;
1191 
1192 	if (!wait_for_completion_timeout(&priv->stop_comp,
1193 					 msecs_to_jiffies(KVASER_USB_TIMEOUT)))
1194 		return -ETIMEDOUT;
1195 
1196 	return 0;
1197 }
1198 
1199 static int kvaser_usb_leaf_reset_chip(struct kvaser_usb *dev, int channel)
1200 {
1201 	return kvaser_usb_leaf_send_simple_cmd(dev, CMD_RESET_CHIP, channel);
1202 }
1203 
1204 static int kvaser_usb_leaf_flush_queue(struct kvaser_usb_net_priv *priv)
1205 {
1206 	struct kvaser_cmd *cmd;
1207 	int rc;
1208 
1209 	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
1210 	if (!cmd)
1211 		return -ENOMEM;
1212 
1213 	cmd->id = CMD_FLUSH_QUEUE;
1214 	cmd->len = CMD_HEADER_LEN + sizeof(struct kvaser_cmd_flush_queue);
1215 	cmd->u.flush_queue.channel = priv->channel;
1216 	cmd->u.flush_queue.flags = 0x00;
1217 
1218 	rc = kvaser_usb_send_cmd(priv->dev, cmd, cmd->len);
1219 
1220 	kfree(cmd);
1221 	return rc;
1222 }
1223 
1224 static int kvaser_usb_leaf_init_card(struct kvaser_usb *dev)
1225 {
1226 	struct kvaser_usb_dev_card_data *card_data = &dev->card_data;
1227 
1228 	dev->cfg = &kvaser_usb_leaf_dev_cfg;
1229 	card_data->ctrlmode_supported |= CAN_CTRLMODE_3_SAMPLES;
1230 
1231 	return 0;
1232 }
1233 
1234 static const struct can_bittiming_const kvaser_usb_leaf_bittiming_const = {
1235 	.name = "kvaser_usb",
1236 	.tseg1_min = KVASER_USB_TSEG1_MIN,
1237 	.tseg1_max = KVASER_USB_TSEG1_MAX,
1238 	.tseg2_min = KVASER_USB_TSEG2_MIN,
1239 	.tseg2_max = KVASER_USB_TSEG2_MAX,
1240 	.sjw_max = KVASER_USB_SJW_MAX,
1241 	.brp_min = KVASER_USB_BRP_MIN,
1242 	.brp_max = KVASER_USB_BRP_MAX,
1243 	.brp_inc = KVASER_USB_BRP_INC,
1244 };
1245 
1246 static int kvaser_usb_leaf_set_bittiming(struct net_device *netdev)
1247 {
1248 	struct kvaser_usb_net_priv *priv = netdev_priv(netdev);
1249 	struct can_bittiming *bt = &priv->can.bittiming;
1250 	struct kvaser_usb *dev = priv->dev;
1251 	struct kvaser_cmd *cmd;
1252 	int rc;
1253 
1254 	cmd = kmalloc(sizeof(*cmd), GFP_KERNEL);
1255 	if (!cmd)
1256 		return -ENOMEM;
1257 
1258 	cmd->id = CMD_SET_BUS_PARAMS;
1259 	cmd->len = CMD_HEADER_LEN + sizeof(struct kvaser_cmd_busparams);
1260 	cmd->u.busparams.channel = priv->channel;
1261 	cmd->u.busparams.tid = 0xff;
1262 	cmd->u.busparams.bitrate = cpu_to_le32(bt->bitrate);
1263 	cmd->u.busparams.sjw = bt->sjw;
1264 	cmd->u.busparams.tseg1 = bt->prop_seg + bt->phase_seg1;
1265 	cmd->u.busparams.tseg2 = bt->phase_seg2;
1266 
1267 	if (priv->can.ctrlmode & CAN_CTRLMODE_3_SAMPLES)
1268 		cmd->u.busparams.no_samp = 3;
1269 	else
1270 		cmd->u.busparams.no_samp = 1;
1271 
1272 	rc = kvaser_usb_send_cmd(dev, cmd, cmd->len);
1273 
1274 	kfree(cmd);
1275 	return rc;
1276 }
1277 
1278 static int kvaser_usb_leaf_set_mode(struct net_device *netdev,
1279 				    enum can_mode mode)
1280 {
1281 	struct kvaser_usb_net_priv *priv = netdev_priv(netdev);
1282 	int err;
1283 
1284 	switch (mode) {
1285 	case CAN_MODE_START:
1286 		err = kvaser_usb_leaf_simple_cmd_async(priv, CMD_START_CHIP);
1287 		if (err)
1288 			return err;
1289 		break;
1290 	default:
1291 		return -EOPNOTSUPP;
1292 	}
1293 
1294 	return 0;
1295 }
1296 
1297 static int kvaser_usb_leaf_get_berr_counter(const struct net_device *netdev,
1298 					    struct can_berr_counter *bec)
1299 {
1300 	struct kvaser_usb_net_priv *priv = netdev_priv(netdev);
1301 
1302 	*bec = priv->bec;
1303 
1304 	return 0;
1305 }
1306 
1307 static int kvaser_usb_leaf_setup_endpoints(struct kvaser_usb *dev)
1308 {
1309 	const struct usb_host_interface *iface_desc;
1310 	struct usb_endpoint_descriptor *endpoint;
1311 	int i;
1312 
1313 	iface_desc = dev->intf->cur_altsetting;
1314 
1315 	for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
1316 		endpoint = &iface_desc->endpoint[i].desc;
1317 
1318 		if (!dev->bulk_in && usb_endpoint_is_bulk_in(endpoint))
1319 			dev->bulk_in = endpoint;
1320 
1321 		if (!dev->bulk_out && usb_endpoint_is_bulk_out(endpoint))
1322 			dev->bulk_out = endpoint;
1323 
1324 		/* use first bulk endpoint for in and out */
1325 		if (dev->bulk_in && dev->bulk_out)
1326 			return 0;
1327 	}
1328 
1329 	return -ENODEV;
1330 }
1331 
1332 const struct kvaser_usb_dev_ops kvaser_usb_leaf_dev_ops = {
1333 	.dev_set_mode = kvaser_usb_leaf_set_mode,
1334 	.dev_set_bittiming = kvaser_usb_leaf_set_bittiming,
1335 	.dev_set_data_bittiming = NULL,
1336 	.dev_get_berr_counter = kvaser_usb_leaf_get_berr_counter,
1337 	.dev_setup_endpoints = kvaser_usb_leaf_setup_endpoints,
1338 	.dev_init_card = kvaser_usb_leaf_init_card,
1339 	.dev_get_software_info = kvaser_usb_leaf_get_software_info,
1340 	.dev_get_software_details = NULL,
1341 	.dev_get_card_info = kvaser_usb_leaf_get_card_info,
1342 	.dev_get_capabilities = NULL,
1343 	.dev_set_opt_mode = kvaser_usb_leaf_set_opt_mode,
1344 	.dev_start_chip = kvaser_usb_leaf_start_chip,
1345 	.dev_stop_chip = kvaser_usb_leaf_stop_chip,
1346 	.dev_reset_chip = kvaser_usb_leaf_reset_chip,
1347 	.dev_flush_queue = kvaser_usb_leaf_flush_queue,
1348 	.dev_read_bulk_callback = kvaser_usb_leaf_read_bulk_callback,
1349 	.dev_frame_to_cmd = kvaser_usb_leaf_frame_to_cmd,
1350 };
1351 
1352 static const struct kvaser_usb_dev_cfg kvaser_usb_leaf_dev_cfg = {
1353 	.clock = {
1354 		.freq = CAN_USB_CLOCK,
1355 	},
1356 	.timestamp_freq = 1,
1357 	.bittiming_const = &kvaser_usb_leaf_bittiming_const,
1358 };
1359