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