GNU Linux-libre 4.14.290-gnu1
[releases.git] / drivers / net / can / usb / kvaser_usb.c
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License as
4  * published by the Free Software Foundation version 2.
5  *
6  * Parts of this driver are based on the following:
7  *  - Kvaser linux leaf driver (version 4.78)
8  *  - CAN driver for esd CAN-USB/2
9  *  - Kvaser linux usbcanII driver (version 5.3)
10  *
11  * Copyright (C) 2002-2006 KVASER AB, Sweden. All rights reserved.
12  * Copyright (C) 2010 Matthias Fuchs <matthias.fuchs@esd.eu>, esd gmbh
13  * Copyright (C) 2012 Olivier Sobrie <olivier@sobrie.be>
14  * Copyright (C) 2015 Valeo S.A.
15  */
16
17 #include <linux/spinlock.h>
18 #include <linux/kernel.h>
19 #include <linux/completion.h>
20 #include <linux/module.h>
21 #include <linux/netdevice.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
28 #define MAX_RX_URBS                     4
29 #define START_TIMEOUT                   1000 /* msecs */
30 #define STOP_TIMEOUT                    1000 /* msecs */
31 #define USB_SEND_TIMEOUT                1000 /* msecs */
32 #define USB_RECV_TIMEOUT                1000 /* msecs */
33 #define RX_BUFFER_SIZE                  3072
34 #define KVASER_USB_CAN_CLOCK_8MHZ       8000000
35 #define KVASER_USB_CAN_CLOCK_16MHZ      16000000
36 #define KVASER_USB_CAN_CLOCK_24MHZ      24000000
37 #define KVASER_USB_CAN_CLOCK_32MHZ      32000000
38 #define MAX_NET_DEVICES                 3
39 #define MAX_USBCAN_NET_DEVICES          2
40
41 /* Kvaser Leaf USB devices */
42 #define KVASER_VENDOR_ID                0x0bfd
43 #define USB_LEAF_DEVEL_PRODUCT_ID       10
44 #define USB_LEAF_LITE_PRODUCT_ID        11
45 #define USB_LEAF_PRO_PRODUCT_ID         12
46 #define USB_LEAF_SPRO_PRODUCT_ID        14
47 #define USB_LEAF_PRO_LS_PRODUCT_ID      15
48 #define USB_LEAF_PRO_SWC_PRODUCT_ID     16
49 #define USB_LEAF_PRO_LIN_PRODUCT_ID     17
50 #define USB_LEAF_SPRO_LS_PRODUCT_ID     18
51 #define USB_LEAF_SPRO_SWC_PRODUCT_ID    19
52 #define USB_MEMO2_DEVEL_PRODUCT_ID      22
53 #define USB_MEMO2_HSHS_PRODUCT_ID       23
54 #define USB_UPRO_HSHS_PRODUCT_ID        24
55 #define USB_LEAF_LITE_GI_PRODUCT_ID     25
56 #define USB_LEAF_PRO_OBDII_PRODUCT_ID   26
57 #define USB_MEMO2_HSLS_PRODUCT_ID       27
58 #define USB_LEAF_LITE_CH_PRODUCT_ID     28
59 #define USB_BLACKBIRD_SPRO_PRODUCT_ID   29
60 #define USB_OEM_MERCURY_PRODUCT_ID      34
61 #define USB_OEM_LEAF_PRODUCT_ID         35
62 #define USB_CAN_R_PRODUCT_ID            39
63 #define USB_LEAF_LITE_V2_PRODUCT_ID     288
64 #define USB_MINI_PCIE_HS_PRODUCT_ID     289
65 #define USB_LEAF_LIGHT_HS_V2_OEM_PRODUCT_ID 290
66 #define USB_USBCAN_LIGHT_2HS_PRODUCT_ID 291
67 #define USB_MINI_PCIE_2HS_PRODUCT_ID    292
68
69 static inline bool kvaser_is_leaf(const struct usb_device_id *id)
70 {
71         return id->idProduct >= USB_LEAF_DEVEL_PRODUCT_ID &&
72                id->idProduct <= USB_MINI_PCIE_2HS_PRODUCT_ID;
73 }
74
75 /* Kvaser USBCan-II devices */
76 #define USB_USBCAN_REVB_PRODUCT_ID      2
77 #define USB_VCI2_PRODUCT_ID             3
78 #define USB_USBCAN2_PRODUCT_ID          4
79 #define USB_MEMORATOR_PRODUCT_ID        5
80
81 static inline bool kvaser_is_usbcan(const struct usb_device_id *id)
82 {
83         return id->idProduct >= USB_USBCAN_REVB_PRODUCT_ID &&
84                id->idProduct <= USB_MEMORATOR_PRODUCT_ID;
85 }
86
87 /* USB devices features */
88 #define KVASER_HAS_SILENT_MODE          BIT(0)
89 #define KVASER_HAS_TXRX_ERRORS          BIT(1)
90
91 /* Message header size */
92 #define MSG_HEADER_LEN                  2
93
94 /* Can message flags */
95 #define MSG_FLAG_ERROR_FRAME            BIT(0)
96 #define MSG_FLAG_OVERRUN                BIT(1)
97 #define MSG_FLAG_NERR                   BIT(2)
98 #define MSG_FLAG_WAKEUP                 BIT(3)
99 #define MSG_FLAG_REMOTE_FRAME           BIT(4)
100 #define MSG_FLAG_RESERVED               BIT(5)
101 #define MSG_FLAG_TX_ACK                 BIT(6)
102 #define MSG_FLAG_TX_REQUEST             BIT(7)
103
104 /* Can states (M16C CxSTRH register) */
105 #define M16C_STATE_BUS_RESET            BIT(0)
106 #define M16C_STATE_BUS_ERROR            BIT(4)
107 #define M16C_STATE_BUS_PASSIVE          BIT(5)
108 #define M16C_STATE_BUS_OFF              BIT(6)
109
110 /* Can msg ids */
111 #define CMD_RX_STD_MESSAGE              12
112 #define CMD_TX_STD_MESSAGE              13
113 #define CMD_RX_EXT_MESSAGE              14
114 #define CMD_TX_EXT_MESSAGE              15
115 #define CMD_SET_BUS_PARAMS              16
116 #define CMD_GET_BUS_PARAMS              17
117 #define CMD_GET_BUS_PARAMS_REPLY        18
118 #define CMD_GET_CHIP_STATE              19
119 #define CMD_CHIP_STATE_EVENT            20
120 #define CMD_SET_CTRL_MODE               21
121 #define CMD_GET_CTRL_MODE               22
122 #define CMD_GET_CTRL_MODE_REPLY         23
123 #define CMD_RESET_CHIP                  24
124 #define CMD_RESET_CARD                  25
125 #define CMD_START_CHIP                  26
126 #define CMD_START_CHIP_REPLY            27
127 #define CMD_STOP_CHIP                   28
128 #define CMD_STOP_CHIP_REPLY             29
129
130 #define CMD_LEAF_GET_CARD_INFO2         32
131 #define CMD_USBCAN_RESET_CLOCK          32
132 #define CMD_USBCAN_CLOCK_OVERFLOW_EVENT 33
133
134 #define CMD_GET_CARD_INFO               34
135 #define CMD_GET_CARD_INFO_REPLY         35
136 #define CMD_GET_SOFTWARE_INFO           38
137 #define CMD_GET_SOFTWARE_INFO_REPLY     39
138 #define CMD_ERROR_EVENT                 45
139 #define CMD_FLUSH_QUEUE                 48
140 #define CMD_RESET_ERROR_COUNTER         49
141 #define CMD_TX_ACKNOWLEDGE              50
142 #define CMD_CAN_ERROR_EVENT             51
143 #define CMD_FLUSH_QUEUE_REPLY           68
144
145 #define CMD_LEAF_USB_THROTTLE           77
146 #define CMD_LEAF_LOG_MESSAGE            106
147
148 /* Leaf frequency options */
149 #define KVASER_USB_LEAF_SWOPTION_FREQ_MASK 0x60
150 #define KVASER_USB_LEAF_SWOPTION_FREQ_16_MHZ_CLK 0
151 #define KVASER_USB_LEAF_SWOPTION_FREQ_32_MHZ_CLK BIT(5)
152 #define KVASER_USB_LEAF_SWOPTION_FREQ_24_MHZ_CLK BIT(6)
153
154 /* error factors */
155 #define M16C_EF_ACKE                    BIT(0)
156 #define M16C_EF_CRCE                    BIT(1)
157 #define M16C_EF_FORME                   BIT(2)
158 #define M16C_EF_STFE                    BIT(3)
159 #define M16C_EF_BITE0                   BIT(4)
160 #define M16C_EF_BITE1                   BIT(5)
161 #define M16C_EF_RCVE                    BIT(6)
162 #define M16C_EF_TRE                     BIT(7)
163
164 /* Only Leaf-based devices can report M16C error factors,
165  * thus define our own error status flags for USBCANII
166  */
167 #define USBCAN_ERROR_STATE_NONE         0
168 #define USBCAN_ERROR_STATE_TX_ERROR     BIT(0)
169 #define USBCAN_ERROR_STATE_RX_ERROR     BIT(1)
170 #define USBCAN_ERROR_STATE_BUSERROR     BIT(2)
171
172 /* bittiming parameters */
173 #define KVASER_USB_TSEG1_MIN            1
174 #define KVASER_USB_TSEG1_MAX            16
175 #define KVASER_USB_TSEG2_MIN            1
176 #define KVASER_USB_TSEG2_MAX            8
177 #define KVASER_USB_SJW_MAX              4
178 #define KVASER_USB_BRP_MIN              1
179 #define KVASER_USB_BRP_MAX              64
180 #define KVASER_USB_BRP_INC              1
181
182 /* ctrl modes */
183 #define KVASER_CTRL_MODE_NORMAL         1
184 #define KVASER_CTRL_MODE_SILENT         2
185 #define KVASER_CTRL_MODE_SELFRECEPTION  3
186 #define KVASER_CTRL_MODE_OFF            4
187
188 /* Extended CAN identifier flag */
189 #define KVASER_EXTENDED_FRAME           BIT(31)
190
191 /* Kvaser USB CAN dongles are divided into two major families:
192  * - Leaf: Based on Renesas M32C, running firmware labeled as 'filo'
193  * - UsbcanII: Based on Renesas M16C, running firmware labeled as 'helios'
194  */
195 enum kvaser_usb_family {
196         KVASER_LEAF,
197         KVASER_USBCAN,
198 };
199
200 struct kvaser_msg_simple {
201         u8 tid;
202         u8 channel;
203 } __packed;
204
205 struct kvaser_msg_cardinfo {
206         u8 tid;
207         u8 nchannels;
208         union {
209                 struct {
210                         __le32 serial_number;
211                         __le32 padding;
212                 } __packed leaf0;
213                 struct {
214                         __le32 serial_number_low;
215                         __le32 serial_number_high;
216                 } __packed usbcan0;
217         } __packed;
218         __le32 clock_resolution;
219         __le32 mfgdate;
220         u8 ean[8];
221         u8 hw_revision;
222         union {
223                 struct {
224                         u8 usb_hs_mode;
225                 } __packed leaf1;
226                 struct {
227                         u8 padding;
228                 } __packed usbcan1;
229         } __packed;
230         __le16 padding;
231 } __packed;
232
233 struct kvaser_msg_cardinfo2 {
234         u8 tid;
235         u8 reserved;
236         u8 pcb_id[24];
237         __le32 oem_unlock_code;
238 } __packed;
239
240 struct leaf_msg_softinfo {
241         u8 tid;
242         u8 padding0;
243         __le32 sw_options;
244         __le32 fw_version;
245         __le16 max_outstanding_tx;
246         __le16 padding1[9];
247 } __packed;
248
249 struct usbcan_msg_softinfo {
250         u8 tid;
251         u8 fw_name[5];
252         __le16 max_outstanding_tx;
253         u8 padding[6];
254         __le32 fw_version;
255         __le16 checksum;
256         __le16 sw_options;
257 } __packed;
258
259 struct kvaser_msg_busparams {
260         u8 tid;
261         u8 channel;
262         __le32 bitrate;
263         u8 tseg1;
264         u8 tseg2;
265         u8 sjw;
266         u8 no_samp;
267 } __packed;
268
269 struct kvaser_msg_tx_can {
270         u8 channel;
271         u8 tid;
272         u8 msg[14];
273         union {
274                 struct {
275                         u8 padding;
276                         u8 flags;
277                 } __packed leaf;
278                 struct {
279                         u8 flags;
280                         u8 padding;
281                 } __packed usbcan;
282         } __packed;
283 } __packed;
284
285 struct kvaser_msg_rx_can_header {
286         u8 channel;
287         u8 flag;
288 } __packed;
289
290 struct leaf_msg_rx_can {
291         u8 channel;
292         u8 flag;
293
294         __le16 time[3];
295         u8 msg[14];
296 } __packed;
297
298 struct usbcan_msg_rx_can {
299         u8 channel;
300         u8 flag;
301
302         u8 msg[14];
303         __le16 time;
304 } __packed;
305
306 struct leaf_msg_chip_state_event {
307         u8 tid;
308         u8 channel;
309
310         __le16 time[3];
311         u8 tx_errors_count;
312         u8 rx_errors_count;
313
314         u8 status;
315         u8 padding[3];
316 } __packed;
317
318 struct usbcan_msg_chip_state_event {
319         u8 tid;
320         u8 channel;
321
322         u8 tx_errors_count;
323         u8 rx_errors_count;
324         __le16 time;
325
326         u8 status;
327         u8 padding[3];
328 } __packed;
329
330 struct kvaser_msg_tx_acknowledge_header {
331         u8 channel;
332         u8 tid;
333 } __packed;
334
335 struct leaf_msg_tx_acknowledge {
336         u8 channel;
337         u8 tid;
338
339         __le16 time[3];
340         u8 flags;
341         u8 time_offset;
342 } __packed;
343
344 struct usbcan_msg_tx_acknowledge {
345         u8 channel;
346         u8 tid;
347
348         __le16 time;
349         __le16 padding;
350 } __packed;
351
352 struct leaf_msg_error_event {
353         u8 tid;
354         u8 flags;
355         __le16 time[3];
356         u8 channel;
357         u8 padding;
358         u8 tx_errors_count;
359         u8 rx_errors_count;
360         u8 status;
361         u8 error_factor;
362 } __packed;
363
364 struct usbcan_msg_error_event {
365         u8 tid;
366         u8 padding;
367         u8 tx_errors_count_ch0;
368         u8 rx_errors_count_ch0;
369         u8 tx_errors_count_ch1;
370         u8 rx_errors_count_ch1;
371         u8 status_ch0;
372         u8 status_ch1;
373         __le16 time;
374 } __packed;
375
376 struct kvaser_msg_ctrl_mode {
377         u8 tid;
378         u8 channel;
379         u8 ctrl_mode;
380         u8 padding[3];
381 } __packed;
382
383 struct kvaser_msg_flush_queue {
384         u8 tid;
385         u8 channel;
386         u8 flags;
387         u8 padding[3];
388 } __packed;
389
390 struct leaf_msg_log_message {
391         u8 channel;
392         u8 flags;
393         __le16 time[3];
394         u8 dlc;
395         u8 time_offset;
396         __le32 id;
397         u8 data[8];
398 } __packed;
399
400 struct kvaser_msg {
401         u8 len;
402         u8 id;
403         union   {
404                 struct kvaser_msg_simple simple;
405                 struct kvaser_msg_cardinfo cardinfo;
406                 struct kvaser_msg_cardinfo2 cardinfo2;
407                 struct kvaser_msg_busparams busparams;
408
409                 struct kvaser_msg_rx_can_header rx_can_header;
410                 struct kvaser_msg_tx_acknowledge_header tx_acknowledge_header;
411
412                 union {
413                         struct leaf_msg_softinfo softinfo;
414                         struct leaf_msg_rx_can rx_can;
415                         struct leaf_msg_chip_state_event chip_state_event;
416                         struct leaf_msg_tx_acknowledge tx_acknowledge;
417                         struct leaf_msg_error_event error_event;
418                         struct leaf_msg_log_message log_message;
419                 } __packed leaf;
420
421                 union {
422                         struct usbcan_msg_softinfo softinfo;
423                         struct usbcan_msg_rx_can rx_can;
424                         struct usbcan_msg_chip_state_event chip_state_event;
425                         struct usbcan_msg_tx_acknowledge tx_acknowledge;
426                         struct usbcan_msg_error_event error_event;
427                 } __packed usbcan;
428
429                 struct kvaser_msg_tx_can tx_can;
430                 struct kvaser_msg_ctrl_mode ctrl_mode;
431                 struct kvaser_msg_flush_queue flush_queue;
432         } u;
433 } __packed;
434
435 /* Summary of a kvaser error event, for a unified Leaf/Usbcan error
436  * handling. Some discrepancies between the two families exist:
437  *
438  * - USBCAN firmware does not report M16C "error factors"
439  * - USBCAN controllers has difficulties reporting if the raised error
440  *   event is for ch0 or ch1. They leave such arbitration to the OS
441  *   driver by letting it compare error counters with previous values
442  *   and decide the error event's channel. Thus for USBCAN, the channel
443  *   field is only advisory.
444  */
445 struct kvaser_usb_error_summary {
446         u8 channel, status, txerr, rxerr;
447         union {
448                 struct {
449                         u8 error_factor;
450                 } leaf;
451                 struct {
452                         u8 other_ch_status;
453                         u8 error_state;
454                 } usbcan;
455         };
456 };
457
458 /* Context for an outstanding, not yet ACKed, transmission */
459 struct kvaser_usb_tx_urb_context {
460         struct kvaser_usb_net_priv *priv;
461         u32 echo_index;
462         int dlc;
463 };
464
465 struct kvaser_usb {
466         struct usb_device *udev;
467         struct kvaser_usb_net_priv *nets[MAX_NET_DEVICES];
468
469         struct usb_endpoint_descriptor *bulk_in, *bulk_out;
470         struct usb_anchor rx_submitted;
471
472         /* @max_tx_urbs: Firmware-reported maximum number of outstanding,
473          * not yet ACKed, transmissions on this device. This value is
474          * also used as a sentinel for marking free tx contexts.
475          */
476         u32 fw_version;
477         unsigned int nchannels;
478         unsigned int max_tx_urbs;
479         enum kvaser_usb_family family;
480
481         bool rxinitdone;
482         void *rxbuf[MAX_RX_URBS];
483         dma_addr_t rxbuf_dma[MAX_RX_URBS];
484
485         struct can_clock clock;
486 };
487
488 struct kvaser_usb_net_priv {
489         struct can_priv can;
490         struct can_berr_counter bec;
491
492         struct kvaser_usb *dev;
493         struct net_device *netdev;
494         int channel;
495
496         struct completion start_comp, stop_comp;
497         struct usb_anchor tx_submitted;
498
499         spinlock_t tx_contexts_lock;
500         int active_tx_contexts;
501         struct kvaser_usb_tx_urb_context tx_contexts[];
502 };
503
504 static const struct usb_device_id kvaser_usb_table[] = {
505         /* Leaf family IDs */
506         { USB_DEVICE(KVASER_VENDOR_ID, USB_LEAF_DEVEL_PRODUCT_ID) },
507         { USB_DEVICE(KVASER_VENDOR_ID, USB_LEAF_LITE_PRODUCT_ID) },
508         { USB_DEVICE(KVASER_VENDOR_ID, USB_LEAF_PRO_PRODUCT_ID),
509                 .driver_info = KVASER_HAS_TXRX_ERRORS |
510                                KVASER_HAS_SILENT_MODE },
511         { USB_DEVICE(KVASER_VENDOR_ID, USB_LEAF_SPRO_PRODUCT_ID),
512                 .driver_info = KVASER_HAS_TXRX_ERRORS |
513                                KVASER_HAS_SILENT_MODE },
514         { USB_DEVICE(KVASER_VENDOR_ID, USB_LEAF_PRO_LS_PRODUCT_ID),
515                 .driver_info = KVASER_HAS_TXRX_ERRORS |
516                                KVASER_HAS_SILENT_MODE },
517         { USB_DEVICE(KVASER_VENDOR_ID, USB_LEAF_PRO_SWC_PRODUCT_ID),
518                 .driver_info = KVASER_HAS_TXRX_ERRORS |
519                                KVASER_HAS_SILENT_MODE },
520         { USB_DEVICE(KVASER_VENDOR_ID, USB_LEAF_PRO_LIN_PRODUCT_ID),
521                 .driver_info = KVASER_HAS_TXRX_ERRORS |
522                                KVASER_HAS_SILENT_MODE },
523         { USB_DEVICE(KVASER_VENDOR_ID, USB_LEAF_SPRO_LS_PRODUCT_ID),
524                 .driver_info = KVASER_HAS_TXRX_ERRORS |
525                                KVASER_HAS_SILENT_MODE },
526         { USB_DEVICE(KVASER_VENDOR_ID, USB_LEAF_SPRO_SWC_PRODUCT_ID),
527                 .driver_info = KVASER_HAS_TXRX_ERRORS |
528                                KVASER_HAS_SILENT_MODE },
529         { USB_DEVICE(KVASER_VENDOR_ID, USB_MEMO2_DEVEL_PRODUCT_ID),
530                 .driver_info = KVASER_HAS_TXRX_ERRORS |
531                                KVASER_HAS_SILENT_MODE },
532         { USB_DEVICE(KVASER_VENDOR_ID, USB_MEMO2_HSHS_PRODUCT_ID),
533                 .driver_info = KVASER_HAS_TXRX_ERRORS |
534                                KVASER_HAS_SILENT_MODE },
535         { USB_DEVICE(KVASER_VENDOR_ID, USB_UPRO_HSHS_PRODUCT_ID),
536                 .driver_info = KVASER_HAS_TXRX_ERRORS },
537         { USB_DEVICE(KVASER_VENDOR_ID, USB_LEAF_LITE_GI_PRODUCT_ID) },
538         { USB_DEVICE(KVASER_VENDOR_ID, USB_LEAF_PRO_OBDII_PRODUCT_ID),
539                 .driver_info = KVASER_HAS_TXRX_ERRORS |
540                                KVASER_HAS_SILENT_MODE },
541         { USB_DEVICE(KVASER_VENDOR_ID, USB_MEMO2_HSLS_PRODUCT_ID),
542                 .driver_info = KVASER_HAS_TXRX_ERRORS },
543         { USB_DEVICE(KVASER_VENDOR_ID, USB_LEAF_LITE_CH_PRODUCT_ID),
544                 .driver_info = KVASER_HAS_TXRX_ERRORS },
545         { USB_DEVICE(KVASER_VENDOR_ID, USB_BLACKBIRD_SPRO_PRODUCT_ID),
546                 .driver_info = KVASER_HAS_TXRX_ERRORS },
547         { USB_DEVICE(KVASER_VENDOR_ID, USB_OEM_MERCURY_PRODUCT_ID),
548                 .driver_info = KVASER_HAS_TXRX_ERRORS },
549         { USB_DEVICE(KVASER_VENDOR_ID, USB_OEM_LEAF_PRODUCT_ID),
550                 .driver_info = KVASER_HAS_TXRX_ERRORS },
551         { USB_DEVICE(KVASER_VENDOR_ID, USB_CAN_R_PRODUCT_ID),
552                 .driver_info = KVASER_HAS_TXRX_ERRORS },
553         { USB_DEVICE(KVASER_VENDOR_ID, USB_LEAF_LITE_V2_PRODUCT_ID) },
554         { USB_DEVICE(KVASER_VENDOR_ID, USB_MINI_PCIE_HS_PRODUCT_ID) },
555         { USB_DEVICE(KVASER_VENDOR_ID, USB_LEAF_LIGHT_HS_V2_OEM_PRODUCT_ID) },
556         { USB_DEVICE(KVASER_VENDOR_ID, USB_USBCAN_LIGHT_2HS_PRODUCT_ID) },
557         { USB_DEVICE(KVASER_VENDOR_ID, USB_MINI_PCIE_2HS_PRODUCT_ID) },
558
559         /* USBCANII family IDs */
560         { USB_DEVICE(KVASER_VENDOR_ID, USB_USBCAN2_PRODUCT_ID),
561                 .driver_info = KVASER_HAS_TXRX_ERRORS },
562         { USB_DEVICE(KVASER_VENDOR_ID, USB_USBCAN_REVB_PRODUCT_ID),
563                 .driver_info = KVASER_HAS_TXRX_ERRORS },
564         { USB_DEVICE(KVASER_VENDOR_ID, USB_MEMORATOR_PRODUCT_ID),
565                 .driver_info = KVASER_HAS_TXRX_ERRORS },
566         { USB_DEVICE(KVASER_VENDOR_ID, USB_VCI2_PRODUCT_ID),
567                 .driver_info = KVASER_HAS_TXRX_ERRORS },
568
569         { }
570 };
571 MODULE_DEVICE_TABLE(usb, kvaser_usb_table);
572
573 static inline int kvaser_usb_send_msg(const struct kvaser_usb *dev,
574                                       struct kvaser_msg *msg)
575 {
576         int actual_len;
577
578         return usb_bulk_msg(dev->udev,
579                             usb_sndbulkpipe(dev->udev,
580                                         dev->bulk_out->bEndpointAddress),
581                             msg, msg->len, &actual_len,
582                             USB_SEND_TIMEOUT);
583 }
584
585 static int kvaser_usb_wait_msg(const struct kvaser_usb *dev, u8 id,
586                                struct kvaser_msg *msg)
587 {
588         struct kvaser_msg *tmp;
589         void *buf;
590         int actual_len;
591         int err;
592         int pos;
593         unsigned long to = jiffies + msecs_to_jiffies(USB_RECV_TIMEOUT);
594
595         buf = kzalloc(RX_BUFFER_SIZE, GFP_KERNEL);
596         if (!buf)
597                 return -ENOMEM;
598
599         do {
600                 err = usb_bulk_msg(dev->udev,
601                                    usb_rcvbulkpipe(dev->udev,
602                                         dev->bulk_in->bEndpointAddress),
603                                    buf, RX_BUFFER_SIZE, &actual_len,
604                                    USB_RECV_TIMEOUT);
605                 if (err < 0)
606                         goto end;
607
608                 pos = 0;
609                 while (pos <= actual_len - MSG_HEADER_LEN) {
610                         tmp = buf + pos;
611
612                         /* Handle messages crossing the USB endpoint max packet
613                          * size boundary. Check kvaser_usb_read_bulk_callback()
614                          * for further details.
615                          */
616                         if (tmp->len == 0) {
617                                 pos = round_up(pos, le16_to_cpu(dev->bulk_in->
618                                                                 wMaxPacketSize));
619                                 continue;
620                         }
621
622                         if (pos + tmp->len > actual_len) {
623                                 dev_err_ratelimited(dev->udev->dev.parent,
624                                                     "Format error\n");
625                                 break;
626                         }
627
628                         if (tmp->id == id) {
629                                 memcpy(msg, tmp, tmp->len);
630                                 goto end;
631                         }
632
633                         pos += tmp->len;
634                 }
635         } while (time_before(jiffies, to));
636
637         err = -EINVAL;
638
639 end:
640         kfree(buf);
641
642         return err;
643 }
644
645 static int kvaser_usb_send_simple_msg(const struct kvaser_usb *dev,
646                                       u8 msg_id, int channel)
647 {
648         struct kvaser_msg *msg;
649         int rc;
650
651         msg = kmalloc(sizeof(*msg), GFP_KERNEL);
652         if (!msg)
653                 return -ENOMEM;
654
655         msg->id = msg_id;
656         msg->len = MSG_HEADER_LEN + sizeof(struct kvaser_msg_simple);
657         msg->u.simple.channel = channel;
658         msg->u.simple.tid = 0xff;
659
660         rc = kvaser_usb_send_msg(dev, msg);
661
662         kfree(msg);
663         return rc;
664 }
665
666 static void kvaser_usb_get_software_info_leaf(struct kvaser_usb *dev,
667                                               const struct leaf_msg_softinfo *softinfo)
668 {
669         u32 sw_options = le32_to_cpu(softinfo->sw_options);
670
671         dev->fw_version = le32_to_cpu(softinfo->fw_version);
672         dev->max_tx_urbs = le16_to_cpu(softinfo->max_outstanding_tx);
673
674         switch (sw_options & KVASER_USB_LEAF_SWOPTION_FREQ_MASK) {
675         case KVASER_USB_LEAF_SWOPTION_FREQ_16_MHZ_CLK:
676                 dev->clock.freq = KVASER_USB_CAN_CLOCK_16MHZ;
677                 break;
678         case KVASER_USB_LEAF_SWOPTION_FREQ_24_MHZ_CLK:
679                 dev->clock.freq = KVASER_USB_CAN_CLOCK_24MHZ;
680                 break;
681         case KVASER_USB_LEAF_SWOPTION_FREQ_32_MHZ_CLK:
682                 dev->clock.freq = KVASER_USB_CAN_CLOCK_32MHZ;
683                 break;
684         }
685 }
686
687 static int kvaser_usb_get_software_info(struct kvaser_usb *dev)
688 {
689         struct kvaser_msg msg;
690         int err;
691
692         err = kvaser_usb_send_simple_msg(dev, CMD_GET_SOFTWARE_INFO, 0);
693         if (err)
694                 return err;
695
696         err = kvaser_usb_wait_msg(dev, CMD_GET_SOFTWARE_INFO_REPLY, &msg);
697         if (err)
698                 return err;
699
700         switch (dev->family) {
701         case KVASER_LEAF:
702                 kvaser_usb_get_software_info_leaf(dev, &msg.u.leaf.softinfo);
703                 break;
704         case KVASER_USBCAN:
705                 dev->fw_version = le32_to_cpu(msg.u.usbcan.softinfo.fw_version);
706                 dev->max_tx_urbs =
707                         le16_to_cpu(msg.u.usbcan.softinfo.max_outstanding_tx);
708                 dev->clock.freq = KVASER_USB_CAN_CLOCK_8MHZ;
709                 break;
710         }
711
712         return 0;
713 }
714
715 static int kvaser_usb_get_card_info(struct kvaser_usb *dev)
716 {
717         struct kvaser_msg msg;
718         int err;
719
720         err = kvaser_usb_send_simple_msg(dev, CMD_GET_CARD_INFO, 0);
721         if (err)
722                 return err;
723
724         err = kvaser_usb_wait_msg(dev, CMD_GET_CARD_INFO_REPLY, &msg);
725         if (err)
726                 return err;
727
728         dev->nchannels = msg.u.cardinfo.nchannels;
729         if ((dev->nchannels > MAX_NET_DEVICES) ||
730             (dev->family == KVASER_USBCAN &&
731              dev->nchannels > MAX_USBCAN_NET_DEVICES))
732                 return -EINVAL;
733
734         return 0;
735 }
736
737 static void kvaser_usb_tx_acknowledge(const struct kvaser_usb *dev,
738                                       const struct kvaser_msg *msg)
739 {
740         struct net_device_stats *stats;
741         struct kvaser_usb_tx_urb_context *context;
742         struct kvaser_usb_net_priv *priv;
743         struct sk_buff *skb;
744         struct can_frame *cf;
745         unsigned long flags;
746         u8 channel, tid;
747
748         channel = msg->u.tx_acknowledge_header.channel;
749         tid = msg->u.tx_acknowledge_header.tid;
750
751         if (channel >= dev->nchannels) {
752                 dev_err(dev->udev->dev.parent,
753                         "Invalid channel number (%d)\n", channel);
754                 return;
755         }
756
757         priv = dev->nets[channel];
758
759         if (!netif_device_present(priv->netdev))
760                 return;
761
762         stats = &priv->netdev->stats;
763
764         context = &priv->tx_contexts[tid % dev->max_tx_urbs];
765
766         /* Sometimes the state change doesn't come after a bus-off event */
767         if (priv->can.restart_ms &&
768             (priv->can.state >= CAN_STATE_BUS_OFF)) {
769                 skb = alloc_can_err_skb(priv->netdev, &cf);
770                 if (skb) {
771                         cf->can_id |= CAN_ERR_RESTARTED;
772
773                         stats->rx_packets++;
774                         stats->rx_bytes += cf->can_dlc;
775                         netif_rx(skb);
776                 } else {
777                         netdev_err(priv->netdev,
778                                    "No memory left for err_skb\n");
779                 }
780
781                 priv->can.can_stats.restarts++;
782                 netif_carrier_on(priv->netdev);
783
784                 priv->can.state = CAN_STATE_ERROR_ACTIVE;
785         }
786
787         stats->tx_packets++;
788         stats->tx_bytes += context->dlc;
789
790         spin_lock_irqsave(&priv->tx_contexts_lock, flags);
791
792         can_get_echo_skb(priv->netdev, context->echo_index);
793         context->echo_index = dev->max_tx_urbs;
794         --priv->active_tx_contexts;
795         netif_wake_queue(priv->netdev);
796
797         spin_unlock_irqrestore(&priv->tx_contexts_lock, flags);
798 }
799
800 static void kvaser_usb_simple_msg_callback(struct urb *urb)
801 {
802         struct net_device *netdev = urb->context;
803
804         kfree(urb->transfer_buffer);
805
806         if (urb->status)
807                 netdev_warn(netdev, "urb status received: %d\n",
808                             urb->status);
809 }
810
811 static int kvaser_usb_simple_msg_async(struct kvaser_usb_net_priv *priv,
812                                        u8 msg_id)
813 {
814         struct kvaser_usb *dev = priv->dev;
815         struct net_device *netdev = priv->netdev;
816         struct kvaser_msg *msg;
817         struct urb *urb;
818         void *buf;
819         int err;
820
821         urb = usb_alloc_urb(0, GFP_ATOMIC);
822         if (!urb)
823                 return -ENOMEM;
824
825         buf = kzalloc(sizeof(struct kvaser_msg), GFP_ATOMIC);
826         if (!buf) {
827                 usb_free_urb(urb);
828                 return -ENOMEM;
829         }
830
831         msg = (struct kvaser_msg *)buf;
832         msg->len = MSG_HEADER_LEN + sizeof(struct kvaser_msg_simple);
833         msg->id = msg_id;
834         msg->u.simple.channel = priv->channel;
835
836         usb_fill_bulk_urb(urb, dev->udev,
837                           usb_sndbulkpipe(dev->udev,
838                                           dev->bulk_out->bEndpointAddress),
839                           buf, msg->len,
840                           kvaser_usb_simple_msg_callback, netdev);
841         usb_anchor_urb(urb, &priv->tx_submitted);
842
843         err = usb_submit_urb(urb, GFP_ATOMIC);
844         if (err) {
845                 netdev_err(netdev, "Error transmitting URB\n");
846                 usb_unanchor_urb(urb);
847                 kfree(buf);
848                 usb_free_urb(urb);
849                 return err;
850         }
851
852         usb_free_urb(urb);
853
854         return 0;
855 }
856
857 static void kvaser_usb_rx_error_update_can_state(struct kvaser_usb_net_priv *priv,
858                                                  const struct kvaser_usb_error_summary *es,
859                                                  struct can_frame *cf)
860 {
861         struct kvaser_usb *dev = priv->dev;
862         struct net_device_stats *stats = &priv->netdev->stats;
863         enum can_state cur_state, new_state, tx_state, rx_state;
864
865         netdev_dbg(priv->netdev, "Error status: 0x%02x\n", es->status);
866
867         new_state = cur_state = priv->can.state;
868
869         if (es->status & (M16C_STATE_BUS_OFF | M16C_STATE_BUS_RESET))
870                 new_state = CAN_STATE_BUS_OFF;
871         else if (es->status & M16C_STATE_BUS_PASSIVE)
872                 new_state = CAN_STATE_ERROR_PASSIVE;
873         else if (es->status & M16C_STATE_BUS_ERROR) {
874                 /* Guard against spurious error events after a busoff */
875                 if (cur_state < CAN_STATE_BUS_OFF) {
876                         if ((es->txerr >= 128) || (es->rxerr >= 128))
877                                 new_state = CAN_STATE_ERROR_PASSIVE;
878                         else if ((es->txerr >= 96) || (es->rxerr >= 96))
879                                 new_state = CAN_STATE_ERROR_WARNING;
880                         else if (cur_state > CAN_STATE_ERROR_ACTIVE)
881                                 new_state = CAN_STATE_ERROR_ACTIVE;
882                 }
883         }
884
885         if (!es->status)
886                 new_state = CAN_STATE_ERROR_ACTIVE;
887
888         if (new_state != cur_state) {
889                 tx_state = (es->txerr >= es->rxerr) ? new_state : 0;
890                 rx_state = (es->txerr <= es->rxerr) ? new_state : 0;
891
892                 can_change_state(priv->netdev, cf, tx_state, rx_state);
893         }
894
895         if (priv->can.restart_ms &&
896             (cur_state >= CAN_STATE_BUS_OFF) &&
897             (new_state < CAN_STATE_BUS_OFF)) {
898                 priv->can.can_stats.restarts++;
899         }
900
901         switch (dev->family) {
902         case KVASER_LEAF:
903                 if (es->leaf.error_factor) {
904                         priv->can.can_stats.bus_error++;
905                         stats->rx_errors++;
906                 }
907                 break;
908         case KVASER_USBCAN:
909                 if (es->usbcan.error_state & USBCAN_ERROR_STATE_TX_ERROR)
910                         stats->tx_errors++;
911                 if (es->usbcan.error_state & USBCAN_ERROR_STATE_RX_ERROR)
912                         stats->rx_errors++;
913                 if (es->usbcan.error_state & USBCAN_ERROR_STATE_BUSERROR) {
914                         priv->can.can_stats.bus_error++;
915                 }
916                 break;
917         }
918
919         priv->bec.txerr = es->txerr;
920         priv->bec.rxerr = es->rxerr;
921 }
922
923 static void kvaser_usb_rx_error(const struct kvaser_usb *dev,
924                                 const struct kvaser_usb_error_summary *es)
925 {
926         struct can_frame *cf, tmp_cf = { .can_id = CAN_ERR_FLAG, .can_dlc = CAN_ERR_DLC };
927         struct sk_buff *skb;
928         struct net_device_stats *stats;
929         struct kvaser_usb_net_priv *priv;
930         enum can_state old_state, new_state;
931
932         if (es->channel >= dev->nchannels) {
933                 dev_err(dev->udev->dev.parent,
934                         "Invalid channel number (%d)\n", es->channel);
935                 return;
936         }
937
938         priv = dev->nets[es->channel];
939         stats = &priv->netdev->stats;
940
941         /* Update all of the can interface's state and error counters before
942          * trying any memory allocation that can actually fail with -ENOMEM.
943          *
944          * We send a temporary stack-allocated error can frame to
945          * can_change_state() for the very same reason.
946          *
947          * TODO: Split can_change_state() responsibility between updating the
948          * can interface's state and counters, and the setting up of can error
949          * frame ID and data to userspace. Remove stack allocation afterwards.
950          */
951         old_state = priv->can.state;
952         kvaser_usb_rx_error_update_can_state(priv, es, &tmp_cf);
953         new_state = priv->can.state;
954
955         skb = alloc_can_err_skb(priv->netdev, &cf);
956         if (!skb) {
957                 stats->rx_dropped++;
958                 return;
959         }
960         memcpy(cf, &tmp_cf, sizeof(*cf));
961
962         if (new_state != old_state) {
963                 if (es->status &
964                     (M16C_STATE_BUS_OFF | M16C_STATE_BUS_RESET)) {
965                         if (!priv->can.restart_ms)
966                                 kvaser_usb_simple_msg_async(priv, CMD_STOP_CHIP);
967                         netif_carrier_off(priv->netdev);
968                 }
969
970                 if (priv->can.restart_ms &&
971                     (old_state >= CAN_STATE_BUS_OFF) &&
972                     (new_state < CAN_STATE_BUS_OFF)) {
973                         cf->can_id |= CAN_ERR_RESTARTED;
974                         netif_carrier_on(priv->netdev);
975                 }
976         }
977
978         switch (dev->family) {
979         case KVASER_LEAF:
980                 if (es->leaf.error_factor) {
981                         cf->can_id |= CAN_ERR_BUSERROR | CAN_ERR_PROT;
982
983                         if (es->leaf.error_factor & M16C_EF_ACKE)
984                                 cf->data[3] = CAN_ERR_PROT_LOC_ACK;
985                         if (es->leaf.error_factor & M16C_EF_CRCE)
986                                 cf->data[3] = CAN_ERR_PROT_LOC_CRC_SEQ;
987                         if (es->leaf.error_factor & M16C_EF_FORME)
988                                 cf->data[2] |= CAN_ERR_PROT_FORM;
989                         if (es->leaf.error_factor & M16C_EF_STFE)
990                                 cf->data[2] |= CAN_ERR_PROT_STUFF;
991                         if (es->leaf.error_factor & M16C_EF_BITE0)
992                                 cf->data[2] |= CAN_ERR_PROT_BIT0;
993                         if (es->leaf.error_factor & M16C_EF_BITE1)
994                                 cf->data[2] |= CAN_ERR_PROT_BIT1;
995                         if (es->leaf.error_factor & M16C_EF_TRE)
996                                 cf->data[2] |= CAN_ERR_PROT_TX;
997                 }
998                 break;
999         case KVASER_USBCAN:
1000                 if (es->usbcan.error_state & USBCAN_ERROR_STATE_BUSERROR) {
1001                         cf->can_id |= CAN_ERR_BUSERROR;
1002                 }
1003                 break;
1004         }
1005
1006         cf->data[6] = es->txerr;
1007         cf->data[7] = es->rxerr;
1008
1009         stats->rx_packets++;
1010         stats->rx_bytes += cf->can_dlc;
1011         netif_rx(skb);
1012 }
1013
1014 /* For USBCAN, report error to userspace iff the channels's errors counter
1015  * has changed, or we're the only channel seeing a bus error state.
1016  */
1017 static void kvaser_usbcan_conditionally_rx_error(const struct kvaser_usb *dev,
1018                                                  struct kvaser_usb_error_summary *es)
1019 {
1020         struct kvaser_usb_net_priv *priv;
1021         int channel;
1022         bool report_error;
1023
1024         channel = es->channel;
1025         if (channel >= dev->nchannels) {
1026                 dev_err(dev->udev->dev.parent,
1027                         "Invalid channel number (%d)\n", channel);
1028                 return;
1029         }
1030
1031         priv = dev->nets[channel];
1032         report_error = false;
1033
1034         if (es->txerr != priv->bec.txerr) {
1035                 es->usbcan.error_state |= USBCAN_ERROR_STATE_TX_ERROR;
1036                 report_error = true;
1037         }
1038         if (es->rxerr != priv->bec.rxerr) {
1039                 es->usbcan.error_state |= USBCAN_ERROR_STATE_RX_ERROR;
1040                 report_error = true;
1041         }
1042         if ((es->status & M16C_STATE_BUS_ERROR) &&
1043             !(es->usbcan.other_ch_status & M16C_STATE_BUS_ERROR)) {
1044                 es->usbcan.error_state |= USBCAN_ERROR_STATE_BUSERROR;
1045                 report_error = true;
1046         }
1047
1048         if (report_error)
1049                 kvaser_usb_rx_error(dev, es);
1050 }
1051
1052 static void kvaser_usbcan_rx_error(const struct kvaser_usb *dev,
1053                                    const struct kvaser_msg *msg)
1054 {
1055         struct kvaser_usb_error_summary es = { };
1056
1057         switch (msg->id) {
1058         /* Sometimes errors are sent as unsolicited chip state events */
1059         case CMD_CHIP_STATE_EVENT:
1060                 es.channel = msg->u.usbcan.chip_state_event.channel;
1061                 es.status =  msg->u.usbcan.chip_state_event.status;
1062                 es.txerr = msg->u.usbcan.chip_state_event.tx_errors_count;
1063                 es.rxerr = msg->u.usbcan.chip_state_event.rx_errors_count;
1064                 kvaser_usbcan_conditionally_rx_error(dev, &es);
1065                 break;
1066
1067         case CMD_CAN_ERROR_EVENT:
1068                 es.channel = 0;
1069                 es.status = msg->u.usbcan.error_event.status_ch0;
1070                 es.txerr = msg->u.usbcan.error_event.tx_errors_count_ch0;
1071                 es.rxerr = msg->u.usbcan.error_event.rx_errors_count_ch0;
1072                 es.usbcan.other_ch_status =
1073                         msg->u.usbcan.error_event.status_ch1;
1074                 kvaser_usbcan_conditionally_rx_error(dev, &es);
1075
1076                 /* The USBCAN firmware supports up to 2 channels.
1077                  * Now that ch0 was checked, check if ch1 has any errors.
1078                  */
1079                 if (dev->nchannels == MAX_USBCAN_NET_DEVICES) {
1080                         es.channel = 1;
1081                         es.status = msg->u.usbcan.error_event.status_ch1;
1082                         es.txerr = msg->u.usbcan.error_event.tx_errors_count_ch1;
1083                         es.rxerr = msg->u.usbcan.error_event.rx_errors_count_ch1;
1084                         es.usbcan.other_ch_status =
1085                                 msg->u.usbcan.error_event.status_ch0;
1086                         kvaser_usbcan_conditionally_rx_error(dev, &es);
1087                 }
1088                 break;
1089
1090         default:
1091                 dev_err(dev->udev->dev.parent, "Invalid msg id (%d)\n",
1092                         msg->id);
1093         }
1094 }
1095
1096 static void kvaser_leaf_rx_error(const struct kvaser_usb *dev,
1097                                  const struct kvaser_msg *msg)
1098 {
1099         struct kvaser_usb_error_summary es = { };
1100
1101         switch (msg->id) {
1102         case CMD_CAN_ERROR_EVENT:
1103                 es.channel = msg->u.leaf.error_event.channel;
1104                 es.status =  msg->u.leaf.error_event.status;
1105                 es.txerr = msg->u.leaf.error_event.tx_errors_count;
1106                 es.rxerr = msg->u.leaf.error_event.rx_errors_count;
1107                 es.leaf.error_factor = msg->u.leaf.error_event.error_factor;
1108                 break;
1109         case CMD_LEAF_LOG_MESSAGE:
1110                 es.channel = msg->u.leaf.log_message.channel;
1111                 es.status = msg->u.leaf.log_message.data[0];
1112                 es.txerr = msg->u.leaf.log_message.data[2];
1113                 es.rxerr = msg->u.leaf.log_message.data[3];
1114                 es.leaf.error_factor = msg->u.leaf.log_message.data[1];
1115                 break;
1116         case CMD_CHIP_STATE_EVENT:
1117                 es.channel = msg->u.leaf.chip_state_event.channel;
1118                 es.status =  msg->u.leaf.chip_state_event.status;
1119                 es.txerr = msg->u.leaf.chip_state_event.tx_errors_count;
1120                 es.rxerr = msg->u.leaf.chip_state_event.rx_errors_count;
1121                 es.leaf.error_factor = 0;
1122                 break;
1123         default:
1124                 dev_err(dev->udev->dev.parent, "Invalid msg id (%d)\n",
1125                         msg->id);
1126                 return;
1127         }
1128
1129         kvaser_usb_rx_error(dev, &es);
1130 }
1131
1132 static void kvaser_usb_rx_can_err(const struct kvaser_usb_net_priv *priv,
1133                                   const struct kvaser_msg *msg)
1134 {
1135         struct can_frame *cf;
1136         struct sk_buff *skb;
1137         struct net_device_stats *stats = &priv->netdev->stats;
1138
1139         if (msg->u.rx_can_header.flag & (MSG_FLAG_ERROR_FRAME |
1140                                          MSG_FLAG_NERR)) {
1141                 netdev_err(priv->netdev, "Unknown error (flags: 0x%02x)\n",
1142                            msg->u.rx_can_header.flag);
1143
1144                 stats->rx_errors++;
1145                 return;
1146         }
1147
1148         if (msg->u.rx_can_header.flag & MSG_FLAG_OVERRUN) {
1149                 stats->rx_over_errors++;
1150                 stats->rx_errors++;
1151
1152                 skb = alloc_can_err_skb(priv->netdev, &cf);
1153                 if (!skb) {
1154                         stats->rx_dropped++;
1155                         return;
1156                 }
1157
1158                 cf->can_id |= CAN_ERR_CRTL;
1159                 cf->data[1] = CAN_ERR_CRTL_RX_OVERFLOW;
1160
1161                 stats->rx_packets++;
1162                 stats->rx_bytes += cf->can_dlc;
1163                 netif_rx(skb);
1164         }
1165 }
1166
1167 static void kvaser_usb_rx_can_msg(const struct kvaser_usb *dev,
1168                                   const struct kvaser_msg *msg)
1169 {
1170         struct kvaser_usb_net_priv *priv;
1171         struct can_frame *cf;
1172         struct sk_buff *skb;
1173         struct net_device_stats *stats;
1174         u8 channel = msg->u.rx_can_header.channel;
1175         const u8 *rx_msg = NULL;        /* GCC */
1176
1177         if (channel >= dev->nchannels) {
1178                 dev_err(dev->udev->dev.parent,
1179                         "Invalid channel number (%d)\n", channel);
1180                 return;
1181         }
1182
1183         priv = dev->nets[channel];
1184         stats = &priv->netdev->stats;
1185
1186         if ((msg->u.rx_can_header.flag & MSG_FLAG_ERROR_FRAME) &&
1187             (dev->family == KVASER_LEAF && msg->id == CMD_LEAF_LOG_MESSAGE)) {
1188                 kvaser_leaf_rx_error(dev, msg);
1189                 return;
1190         } else if (msg->u.rx_can_header.flag & (MSG_FLAG_ERROR_FRAME |
1191                                                 MSG_FLAG_NERR |
1192                                                 MSG_FLAG_OVERRUN)) {
1193                 kvaser_usb_rx_can_err(priv, msg);
1194                 return;
1195         } else if (msg->u.rx_can_header.flag & ~MSG_FLAG_REMOTE_FRAME) {
1196                 netdev_warn(priv->netdev,
1197                             "Unhandled frame (flags: 0x%02x)",
1198                             msg->u.rx_can_header.flag);
1199                 return;
1200         }
1201
1202         switch (dev->family) {
1203         case KVASER_LEAF:
1204                 rx_msg = msg->u.leaf.rx_can.msg;
1205                 break;
1206         case KVASER_USBCAN:
1207                 rx_msg = msg->u.usbcan.rx_can.msg;
1208                 break;
1209         }
1210
1211         skb = alloc_can_skb(priv->netdev, &cf);
1212         if (!skb) {
1213                 stats->rx_dropped++;
1214                 return;
1215         }
1216
1217         if (dev->family == KVASER_LEAF && msg->id == CMD_LEAF_LOG_MESSAGE) {
1218                 cf->can_id = le32_to_cpu(msg->u.leaf.log_message.id);
1219                 if (cf->can_id & KVASER_EXTENDED_FRAME)
1220                         cf->can_id &= CAN_EFF_MASK | CAN_EFF_FLAG;
1221                 else
1222                         cf->can_id &= CAN_SFF_MASK;
1223
1224                 cf->can_dlc = get_can_dlc(msg->u.leaf.log_message.dlc);
1225
1226                 if (msg->u.leaf.log_message.flags & MSG_FLAG_REMOTE_FRAME)
1227                         cf->can_id |= CAN_RTR_FLAG;
1228                 else
1229                         memcpy(cf->data, &msg->u.leaf.log_message.data,
1230                                cf->can_dlc);
1231         } else {
1232                 cf->can_id = ((rx_msg[0] & 0x1f) << 6) | (rx_msg[1] & 0x3f);
1233
1234                 if (msg->id == CMD_RX_EXT_MESSAGE) {
1235                         cf->can_id <<= 18;
1236                         cf->can_id |= ((rx_msg[2] & 0x0f) << 14) |
1237                                       ((rx_msg[3] & 0xff) << 6) |
1238                                       (rx_msg[4] & 0x3f);
1239                         cf->can_id |= CAN_EFF_FLAG;
1240                 }
1241
1242                 cf->can_dlc = get_can_dlc(rx_msg[5]);
1243
1244                 if (msg->u.rx_can_header.flag & MSG_FLAG_REMOTE_FRAME)
1245                         cf->can_id |= CAN_RTR_FLAG;
1246                 else
1247                         memcpy(cf->data, &rx_msg[6],
1248                                cf->can_dlc);
1249         }
1250
1251         stats->rx_packets++;
1252         stats->rx_bytes += cf->can_dlc;
1253         netif_rx(skb);
1254 }
1255
1256 static void kvaser_usb_start_chip_reply(const struct kvaser_usb *dev,
1257                                         const struct kvaser_msg *msg)
1258 {
1259         struct kvaser_usb_net_priv *priv;
1260         u8 channel = msg->u.simple.channel;
1261
1262         if (channel >= dev->nchannels) {
1263                 dev_err(dev->udev->dev.parent,
1264                         "Invalid channel number (%d)\n", channel);
1265                 return;
1266         }
1267
1268         priv = dev->nets[channel];
1269
1270         if (completion_done(&priv->start_comp) &&
1271             netif_queue_stopped(priv->netdev)) {
1272                 netif_wake_queue(priv->netdev);
1273         } else {
1274                 netif_start_queue(priv->netdev);
1275                 complete(&priv->start_comp);
1276         }
1277 }
1278
1279 static void kvaser_usb_stop_chip_reply(const struct kvaser_usb *dev,
1280                                        const struct kvaser_msg *msg)
1281 {
1282         struct kvaser_usb_net_priv *priv;
1283         u8 channel = msg->u.simple.channel;
1284
1285         if (channel >= dev->nchannels) {
1286                 dev_err(dev->udev->dev.parent,
1287                         "Invalid channel number (%d)\n", channel);
1288                 return;
1289         }
1290
1291         priv = dev->nets[channel];
1292
1293         complete(&priv->stop_comp);
1294 }
1295
1296 static void kvaser_usb_handle_message(const struct kvaser_usb *dev,
1297                                       const struct kvaser_msg *msg)
1298 {
1299         switch (msg->id) {
1300         case CMD_START_CHIP_REPLY:
1301                 kvaser_usb_start_chip_reply(dev, msg);
1302                 break;
1303
1304         case CMD_STOP_CHIP_REPLY:
1305                 kvaser_usb_stop_chip_reply(dev, msg);
1306                 break;
1307
1308         case CMD_RX_STD_MESSAGE:
1309         case CMD_RX_EXT_MESSAGE:
1310                 kvaser_usb_rx_can_msg(dev, msg);
1311                 break;
1312
1313         case CMD_LEAF_LOG_MESSAGE:
1314                 if (dev->family != KVASER_LEAF)
1315                         goto warn;
1316                 kvaser_usb_rx_can_msg(dev, msg);
1317                 break;
1318
1319         case CMD_CHIP_STATE_EVENT:
1320         case CMD_CAN_ERROR_EVENT:
1321                 if (dev->family == KVASER_LEAF)
1322                         kvaser_leaf_rx_error(dev, msg);
1323                 else
1324                         kvaser_usbcan_rx_error(dev, msg);
1325                 break;
1326
1327         case CMD_TX_ACKNOWLEDGE:
1328                 kvaser_usb_tx_acknowledge(dev, msg);
1329                 break;
1330
1331         /* Ignored messages */
1332         case CMD_USBCAN_CLOCK_OVERFLOW_EVENT:
1333                 if (dev->family != KVASER_USBCAN)
1334                         goto warn;
1335                 break;
1336
1337         case CMD_FLUSH_QUEUE_REPLY:
1338                 if (dev->family != KVASER_LEAF)
1339                         goto warn;
1340                 break;
1341
1342         default:
1343 warn:           dev_warn(dev->udev->dev.parent,
1344                          "Unhandled message (%d)\n", msg->id);
1345                 break;
1346         }
1347 }
1348
1349 static void kvaser_usb_read_bulk_callback(struct urb *urb)
1350 {
1351         struct kvaser_usb *dev = urb->context;
1352         struct kvaser_msg *msg;
1353         int pos = 0;
1354         int err, i;
1355
1356         switch (urb->status) {
1357         case 0:
1358                 break;
1359         case -ENOENT:
1360         case -EPIPE:
1361         case -EPROTO:
1362         case -ESHUTDOWN:
1363                 return;
1364         default:
1365                 dev_info(dev->udev->dev.parent, "Rx URB aborted (%d)\n",
1366                          urb->status);
1367                 goto resubmit_urb;
1368         }
1369
1370         while (pos <= (int)(urb->actual_length - MSG_HEADER_LEN)) {
1371                 msg = urb->transfer_buffer + pos;
1372
1373                 /* The Kvaser firmware can only read and write messages that
1374                  * does not cross the USB's endpoint wMaxPacketSize boundary.
1375                  * If a follow-up command crosses such boundary, firmware puts
1376                  * a placeholder zero-length command in its place then aligns
1377                  * the real command to the next max packet size.
1378                  *
1379                  * Handle such cases or we're going to miss a significant
1380                  * number of events in case of a heavy rx load on the bus.
1381                  */
1382                 if (msg->len == 0) {
1383                         pos = round_up(pos, le16_to_cpu(dev->bulk_in->
1384                                                         wMaxPacketSize));
1385                         continue;
1386                 }
1387
1388                 if (pos + msg->len > urb->actual_length) {
1389                         dev_err_ratelimited(dev->udev->dev.parent,
1390                                             "Format error\n");
1391                         break;
1392                 }
1393
1394                 kvaser_usb_handle_message(dev, msg);
1395                 pos += msg->len;
1396         }
1397
1398 resubmit_urb:
1399         usb_fill_bulk_urb(urb, dev->udev,
1400                           usb_rcvbulkpipe(dev->udev,
1401                                           dev->bulk_in->bEndpointAddress),
1402                           urb->transfer_buffer, RX_BUFFER_SIZE,
1403                           kvaser_usb_read_bulk_callback, dev);
1404
1405         err = usb_submit_urb(urb, GFP_ATOMIC);
1406         if (err == -ENODEV) {
1407                 for (i = 0; i < dev->nchannels; i++) {
1408                         if (!dev->nets[i])
1409                                 continue;
1410
1411                         netif_device_detach(dev->nets[i]->netdev);
1412                 }
1413         } else if (err) {
1414                 dev_err(dev->udev->dev.parent,
1415                         "Failed resubmitting read bulk urb: %d\n", err);
1416         }
1417
1418         return;
1419 }
1420
1421 static int kvaser_usb_setup_rx_urbs(struct kvaser_usb *dev)
1422 {
1423         int i, err = 0;
1424
1425         if (dev->rxinitdone)
1426                 return 0;
1427
1428         for (i = 0; i < MAX_RX_URBS; i++) {
1429                 struct urb *urb = NULL;
1430                 u8 *buf = NULL;
1431                 dma_addr_t buf_dma;
1432
1433                 urb = usb_alloc_urb(0, GFP_KERNEL);
1434                 if (!urb) {
1435                         err = -ENOMEM;
1436                         break;
1437                 }
1438
1439                 buf = usb_alloc_coherent(dev->udev, RX_BUFFER_SIZE,
1440                                          GFP_KERNEL, &buf_dma);
1441                 if (!buf) {
1442                         dev_warn(dev->udev->dev.parent,
1443                                  "No memory left for USB buffer\n");
1444                         usb_free_urb(urb);
1445                         err = -ENOMEM;
1446                         break;
1447                 }
1448
1449                 usb_fill_bulk_urb(urb, dev->udev,
1450                                   usb_rcvbulkpipe(dev->udev,
1451                                           dev->bulk_in->bEndpointAddress),
1452                                   buf, RX_BUFFER_SIZE,
1453                                   kvaser_usb_read_bulk_callback,
1454                                   dev);
1455                 urb->transfer_dma = buf_dma;
1456                 urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1457                 usb_anchor_urb(urb, &dev->rx_submitted);
1458
1459                 err = usb_submit_urb(urb, GFP_KERNEL);
1460                 if (err) {
1461                         usb_unanchor_urb(urb);
1462                         usb_free_coherent(dev->udev, RX_BUFFER_SIZE, buf,
1463                                           buf_dma);
1464                         usb_free_urb(urb);
1465                         break;
1466                 }
1467
1468                 dev->rxbuf[i] = buf;
1469                 dev->rxbuf_dma[i] = buf_dma;
1470
1471                 usb_free_urb(urb);
1472         }
1473
1474         if (i == 0) {
1475                 dev_warn(dev->udev->dev.parent,
1476                          "Cannot setup read URBs, error %d\n", err);
1477                 return err;
1478         } else if (i < MAX_RX_URBS) {
1479                 dev_warn(dev->udev->dev.parent,
1480                          "RX performances may be slow\n");
1481         }
1482
1483         dev->rxinitdone = true;
1484
1485         return 0;
1486 }
1487
1488 static int kvaser_usb_set_opt_mode(const struct kvaser_usb_net_priv *priv)
1489 {
1490         struct kvaser_msg *msg;
1491         int rc;
1492
1493         msg = kzalloc(sizeof(*msg), GFP_KERNEL);
1494         if (!msg)
1495                 return -ENOMEM;
1496
1497         msg->id = CMD_SET_CTRL_MODE;
1498         msg->len = MSG_HEADER_LEN + sizeof(struct kvaser_msg_ctrl_mode);
1499         msg->u.ctrl_mode.tid = 0xff;
1500         msg->u.ctrl_mode.channel = priv->channel;
1501
1502         if (priv->can.ctrlmode & CAN_CTRLMODE_LISTENONLY)
1503                 msg->u.ctrl_mode.ctrl_mode = KVASER_CTRL_MODE_SILENT;
1504         else
1505                 msg->u.ctrl_mode.ctrl_mode = KVASER_CTRL_MODE_NORMAL;
1506
1507         rc = kvaser_usb_send_msg(priv->dev, msg);
1508
1509         kfree(msg);
1510         return rc;
1511 }
1512
1513 static int kvaser_usb_start_chip(struct kvaser_usb_net_priv *priv)
1514 {
1515         int err;
1516
1517         init_completion(&priv->start_comp);
1518
1519         err = kvaser_usb_send_simple_msg(priv->dev, CMD_START_CHIP,
1520                                          priv->channel);
1521         if (err)
1522                 return err;
1523
1524         if (!wait_for_completion_timeout(&priv->start_comp,
1525                                          msecs_to_jiffies(START_TIMEOUT)))
1526                 return -ETIMEDOUT;
1527
1528         return 0;
1529 }
1530
1531 static int kvaser_usb_open(struct net_device *netdev)
1532 {
1533         struct kvaser_usb_net_priv *priv = netdev_priv(netdev);
1534         struct kvaser_usb *dev = priv->dev;
1535         int err;
1536
1537         err = open_candev(netdev);
1538         if (err)
1539                 return err;
1540
1541         err = kvaser_usb_setup_rx_urbs(dev);
1542         if (err)
1543                 goto error;
1544
1545         err = kvaser_usb_set_opt_mode(priv);
1546         if (err)
1547                 goto error;
1548
1549         err = kvaser_usb_start_chip(priv);
1550         if (err) {
1551                 netdev_warn(netdev, "Cannot start device, error %d\n", err);
1552                 goto error;
1553         }
1554
1555         priv->can.state = CAN_STATE_ERROR_ACTIVE;
1556
1557         return 0;
1558
1559 error:
1560         close_candev(netdev);
1561         return err;
1562 }
1563
1564 static void kvaser_usb_reset_tx_urb_contexts(struct kvaser_usb_net_priv *priv)
1565 {
1566         int i, max_tx_urbs;
1567
1568         max_tx_urbs = priv->dev->max_tx_urbs;
1569
1570         priv->active_tx_contexts = 0;
1571         for (i = 0; i < max_tx_urbs; i++)
1572                 priv->tx_contexts[i].echo_index = max_tx_urbs;
1573 }
1574
1575 /* This method might sleep. Do not call it in the atomic context
1576  * of URB completions.
1577  */
1578 static void kvaser_usb_unlink_tx_urbs(struct kvaser_usb_net_priv *priv)
1579 {
1580         usb_kill_anchored_urbs(&priv->tx_submitted);
1581         kvaser_usb_reset_tx_urb_contexts(priv);
1582 }
1583
1584 static void kvaser_usb_unlink_all_urbs(struct kvaser_usb *dev)
1585 {
1586         int i;
1587
1588         usb_kill_anchored_urbs(&dev->rx_submitted);
1589
1590         for (i = 0; i < MAX_RX_URBS; i++)
1591                 usb_free_coherent(dev->udev, RX_BUFFER_SIZE,
1592                                   dev->rxbuf[i],
1593                                   dev->rxbuf_dma[i]);
1594
1595         for (i = 0; i < dev->nchannels; i++) {
1596                 struct kvaser_usb_net_priv *priv = dev->nets[i];
1597
1598                 if (priv)
1599                         kvaser_usb_unlink_tx_urbs(priv);
1600         }
1601 }
1602
1603 static int kvaser_usb_stop_chip(struct kvaser_usb_net_priv *priv)
1604 {
1605         int err;
1606
1607         init_completion(&priv->stop_comp);
1608
1609         err = kvaser_usb_send_simple_msg(priv->dev, CMD_STOP_CHIP,
1610                                          priv->channel);
1611         if (err)
1612                 return err;
1613
1614         if (!wait_for_completion_timeout(&priv->stop_comp,
1615                                          msecs_to_jiffies(STOP_TIMEOUT)))
1616                 return -ETIMEDOUT;
1617
1618         return 0;
1619 }
1620
1621 static int kvaser_usb_flush_queue(struct kvaser_usb_net_priv *priv)
1622 {
1623         struct kvaser_msg *msg;
1624         int rc;
1625
1626         msg = kzalloc(sizeof(*msg), GFP_KERNEL);
1627         if (!msg)
1628                 return -ENOMEM;
1629
1630         msg->id = CMD_FLUSH_QUEUE;
1631         msg->len = MSG_HEADER_LEN + sizeof(struct kvaser_msg_flush_queue);
1632         msg->u.flush_queue.channel = priv->channel;
1633         msg->u.flush_queue.flags = 0x00;
1634
1635         rc = kvaser_usb_send_msg(priv->dev, msg);
1636
1637         kfree(msg);
1638         return rc;
1639 }
1640
1641 static int kvaser_usb_close(struct net_device *netdev)
1642 {
1643         struct kvaser_usb_net_priv *priv = netdev_priv(netdev);
1644         struct kvaser_usb *dev = priv->dev;
1645         int err;
1646
1647         netif_stop_queue(netdev);
1648
1649         err = kvaser_usb_flush_queue(priv);
1650         if (err)
1651                 netdev_warn(netdev, "Cannot flush queue, error %d\n", err);
1652
1653         err = kvaser_usb_send_simple_msg(dev, CMD_RESET_CHIP, priv->channel);
1654         if (err)
1655                 netdev_warn(netdev, "Cannot reset card, error %d\n", err);
1656
1657         err = kvaser_usb_stop_chip(priv);
1658         if (err)
1659                 netdev_warn(netdev, "Cannot stop device, error %d\n", err);
1660
1661         /* reset tx contexts */
1662         kvaser_usb_unlink_tx_urbs(priv);
1663
1664         priv->can.state = CAN_STATE_STOPPED;
1665         close_candev(priv->netdev);
1666
1667         return 0;
1668 }
1669
1670 static void kvaser_usb_write_bulk_callback(struct urb *urb)
1671 {
1672         struct kvaser_usb_tx_urb_context *context = urb->context;
1673         struct kvaser_usb_net_priv *priv;
1674         struct net_device *netdev;
1675
1676         if (WARN_ON(!context))
1677                 return;
1678
1679         priv = context->priv;
1680         netdev = priv->netdev;
1681
1682         kfree(urb->transfer_buffer);
1683
1684         if (!netif_device_present(netdev))
1685                 return;
1686
1687         if (urb->status)
1688                 netdev_info(netdev, "Tx URB aborted (%d)\n", urb->status);
1689 }
1690
1691 static netdev_tx_t kvaser_usb_start_xmit(struct sk_buff *skb,
1692                                          struct net_device *netdev)
1693 {
1694         struct kvaser_usb_net_priv *priv = netdev_priv(netdev);
1695         struct kvaser_usb *dev = priv->dev;
1696         struct net_device_stats *stats = &netdev->stats;
1697         struct can_frame *cf = (struct can_frame *)skb->data;
1698         struct kvaser_usb_tx_urb_context *context = NULL;
1699         struct urb *urb;
1700         void *buf;
1701         struct kvaser_msg *msg;
1702         int i, err, ret = NETDEV_TX_OK;
1703         u8 *msg_tx_can_flags = NULL;            /* GCC */
1704         unsigned long flags;
1705
1706         if (can_dropped_invalid_skb(netdev, skb))
1707                 return NETDEV_TX_OK;
1708
1709         urb = usb_alloc_urb(0, GFP_ATOMIC);
1710         if (!urb) {
1711                 stats->tx_dropped++;
1712                 dev_kfree_skb(skb);
1713                 return NETDEV_TX_OK;
1714         }
1715
1716         buf = kmalloc(sizeof(struct kvaser_msg), GFP_ATOMIC);
1717         if (!buf) {
1718                 stats->tx_dropped++;
1719                 dev_kfree_skb(skb);
1720                 goto freeurb;
1721         }
1722
1723         msg = buf;
1724         msg->len = MSG_HEADER_LEN + sizeof(struct kvaser_msg_tx_can);
1725         msg->u.tx_can.channel = priv->channel;
1726
1727         switch (dev->family) {
1728         case KVASER_LEAF:
1729                 msg_tx_can_flags = &msg->u.tx_can.leaf.flags;
1730                 break;
1731         case KVASER_USBCAN:
1732                 msg_tx_can_flags = &msg->u.tx_can.usbcan.flags;
1733                 break;
1734         }
1735
1736         *msg_tx_can_flags = 0;
1737
1738         if (cf->can_id & CAN_EFF_FLAG) {
1739                 msg->id = CMD_TX_EXT_MESSAGE;
1740                 msg->u.tx_can.msg[0] = (cf->can_id >> 24) & 0x1f;
1741                 msg->u.tx_can.msg[1] = (cf->can_id >> 18) & 0x3f;
1742                 msg->u.tx_can.msg[2] = (cf->can_id >> 14) & 0x0f;
1743                 msg->u.tx_can.msg[3] = (cf->can_id >> 6) & 0xff;
1744                 msg->u.tx_can.msg[4] = cf->can_id & 0x3f;
1745         } else {
1746                 msg->id = CMD_TX_STD_MESSAGE;
1747                 msg->u.tx_can.msg[0] = (cf->can_id >> 6) & 0x1f;
1748                 msg->u.tx_can.msg[1] = cf->can_id & 0x3f;
1749         }
1750
1751         msg->u.tx_can.msg[5] = cf->can_dlc;
1752         memcpy(&msg->u.tx_can.msg[6], cf->data, cf->can_dlc);
1753
1754         if (cf->can_id & CAN_RTR_FLAG)
1755                 *msg_tx_can_flags |= MSG_FLAG_REMOTE_FRAME;
1756
1757         spin_lock_irqsave(&priv->tx_contexts_lock, flags);
1758         for (i = 0; i < dev->max_tx_urbs; i++) {
1759                 if (priv->tx_contexts[i].echo_index == dev->max_tx_urbs) {
1760                         context = &priv->tx_contexts[i];
1761
1762                         context->echo_index = i;
1763                         can_put_echo_skb(skb, netdev, context->echo_index);
1764                         ++priv->active_tx_contexts;
1765                         if (priv->active_tx_contexts >= dev->max_tx_urbs)
1766                                 netif_stop_queue(netdev);
1767
1768                         break;
1769                 }
1770         }
1771         spin_unlock_irqrestore(&priv->tx_contexts_lock, flags);
1772
1773         /* This should never happen; it implies a flow control bug */
1774         if (!context) {
1775                 netdev_warn(netdev, "cannot find free context\n");
1776
1777                 kfree(buf);
1778                 ret =  NETDEV_TX_BUSY;
1779                 goto freeurb;
1780         }
1781
1782         context->priv = priv;
1783         context->dlc = cf->can_dlc;
1784
1785         msg->u.tx_can.tid = context->echo_index;
1786
1787         usb_fill_bulk_urb(urb, dev->udev,
1788                           usb_sndbulkpipe(dev->udev,
1789                                           dev->bulk_out->bEndpointAddress),
1790                           buf, msg->len,
1791                           kvaser_usb_write_bulk_callback, context);
1792         usb_anchor_urb(urb, &priv->tx_submitted);
1793
1794         err = usb_submit_urb(urb, GFP_ATOMIC);
1795         if (unlikely(err)) {
1796                 spin_lock_irqsave(&priv->tx_contexts_lock, flags);
1797
1798                 can_free_echo_skb(netdev, context->echo_index);
1799                 context->echo_index = dev->max_tx_urbs;
1800                 --priv->active_tx_contexts;
1801                 netif_wake_queue(netdev);
1802
1803                 spin_unlock_irqrestore(&priv->tx_contexts_lock, flags);
1804
1805                 usb_unanchor_urb(urb);
1806                 kfree(buf);
1807
1808                 stats->tx_dropped++;
1809
1810                 if (err == -ENODEV)
1811                         netif_device_detach(netdev);
1812                 else
1813                         netdev_warn(netdev, "Failed tx_urb %d\n", err);
1814
1815                 goto freeurb;
1816         }
1817
1818         ret = NETDEV_TX_OK;
1819
1820 freeurb:
1821         usb_free_urb(urb);
1822         return ret;
1823 }
1824
1825 static const struct net_device_ops kvaser_usb_netdev_ops = {
1826         .ndo_open = kvaser_usb_open,
1827         .ndo_stop = kvaser_usb_close,
1828         .ndo_start_xmit = kvaser_usb_start_xmit,
1829         .ndo_change_mtu = can_change_mtu,
1830 };
1831
1832 static const struct can_bittiming_const kvaser_usb_bittiming_const = {
1833         .name = "kvaser_usb",
1834         .tseg1_min = KVASER_USB_TSEG1_MIN,
1835         .tseg1_max = KVASER_USB_TSEG1_MAX,
1836         .tseg2_min = KVASER_USB_TSEG2_MIN,
1837         .tseg2_max = KVASER_USB_TSEG2_MAX,
1838         .sjw_max = KVASER_USB_SJW_MAX,
1839         .brp_min = KVASER_USB_BRP_MIN,
1840         .brp_max = KVASER_USB_BRP_MAX,
1841         .brp_inc = KVASER_USB_BRP_INC,
1842 };
1843
1844 static int kvaser_usb_set_bittiming(struct net_device *netdev)
1845 {
1846         struct kvaser_usb_net_priv *priv = netdev_priv(netdev);
1847         struct can_bittiming *bt = &priv->can.bittiming;
1848         struct kvaser_usb *dev = priv->dev;
1849         struct kvaser_msg *msg;
1850         int rc;
1851
1852         msg = kmalloc(sizeof(*msg), GFP_KERNEL);
1853         if (!msg)
1854                 return -ENOMEM;
1855
1856         msg->id = CMD_SET_BUS_PARAMS;
1857         msg->len = MSG_HEADER_LEN + sizeof(struct kvaser_msg_busparams);
1858         msg->u.busparams.channel = priv->channel;
1859         msg->u.busparams.tid = 0xff;
1860         msg->u.busparams.bitrate = cpu_to_le32(bt->bitrate);
1861         msg->u.busparams.sjw = bt->sjw;
1862         msg->u.busparams.tseg1 = bt->prop_seg + bt->phase_seg1;
1863         msg->u.busparams.tseg2 = bt->phase_seg2;
1864
1865         if (priv->can.ctrlmode & CAN_CTRLMODE_3_SAMPLES)
1866                 msg->u.busparams.no_samp = 3;
1867         else
1868                 msg->u.busparams.no_samp = 1;
1869
1870         rc = kvaser_usb_send_msg(dev, msg);
1871
1872         kfree(msg);
1873         return rc;
1874 }
1875
1876 static int kvaser_usb_set_mode(struct net_device *netdev,
1877                                enum can_mode mode)
1878 {
1879         struct kvaser_usb_net_priv *priv = netdev_priv(netdev);
1880         int err;
1881
1882         switch (mode) {
1883         case CAN_MODE_START:
1884                 err = kvaser_usb_simple_msg_async(priv, CMD_START_CHIP);
1885                 if (err)
1886                         return err;
1887                 break;
1888         default:
1889                 return -EOPNOTSUPP;
1890         }
1891
1892         return 0;
1893 }
1894
1895 static int kvaser_usb_get_berr_counter(const struct net_device *netdev,
1896                                        struct can_berr_counter *bec)
1897 {
1898         struct kvaser_usb_net_priv *priv = netdev_priv(netdev);
1899
1900         *bec = priv->bec;
1901
1902         return 0;
1903 }
1904
1905 static void kvaser_usb_remove_interfaces(struct kvaser_usb *dev)
1906 {
1907         int i;
1908
1909         for (i = 0; i < dev->nchannels; i++) {
1910                 if (!dev->nets[i])
1911                         continue;
1912
1913                 unregister_candev(dev->nets[i]->netdev);
1914         }
1915
1916         kvaser_usb_unlink_all_urbs(dev);
1917
1918         for (i = 0; i < dev->nchannels; i++) {
1919                 if (!dev->nets[i])
1920                         continue;
1921
1922                 free_candev(dev->nets[i]->netdev);
1923         }
1924 }
1925
1926 static int kvaser_usb_init_one(struct usb_interface *intf,
1927                                const struct usb_device_id *id, int channel)
1928 {
1929         struct kvaser_usb *dev = usb_get_intfdata(intf);
1930         struct net_device *netdev;
1931         struct kvaser_usb_net_priv *priv;
1932         int err;
1933
1934         err = kvaser_usb_send_simple_msg(dev, CMD_RESET_CHIP, channel);
1935         if (err)
1936                 return err;
1937
1938         netdev = alloc_candev(sizeof(*priv) +
1939                               dev->max_tx_urbs * sizeof(*priv->tx_contexts),
1940                               dev->max_tx_urbs);
1941         if (!netdev) {
1942                 dev_err(&intf->dev, "Cannot alloc candev\n");
1943                 return -ENOMEM;
1944         }
1945
1946         priv = netdev_priv(netdev);
1947
1948         init_usb_anchor(&priv->tx_submitted);
1949         init_completion(&priv->start_comp);
1950         init_completion(&priv->stop_comp);
1951
1952         priv->dev = dev;
1953         priv->netdev = netdev;
1954         priv->channel = channel;
1955
1956         spin_lock_init(&priv->tx_contexts_lock);
1957         kvaser_usb_reset_tx_urb_contexts(priv);
1958
1959         priv->can.state = CAN_STATE_STOPPED;
1960         priv->can.clock.freq = dev->clock.freq;
1961         priv->can.bittiming_const = &kvaser_usb_bittiming_const;
1962         priv->can.do_set_bittiming = kvaser_usb_set_bittiming;
1963         priv->can.do_set_mode = kvaser_usb_set_mode;
1964         if (id->driver_info & KVASER_HAS_TXRX_ERRORS)
1965                 priv->can.do_get_berr_counter = kvaser_usb_get_berr_counter;
1966         priv->can.ctrlmode_supported = CAN_CTRLMODE_3_SAMPLES;
1967         if (id->driver_info & KVASER_HAS_SILENT_MODE)
1968                 priv->can.ctrlmode_supported |= CAN_CTRLMODE_LISTENONLY;
1969
1970         netdev->flags |= IFF_ECHO;
1971
1972         netdev->netdev_ops = &kvaser_usb_netdev_ops;
1973
1974         SET_NETDEV_DEV(netdev, &intf->dev);
1975         netdev->dev_id = channel;
1976
1977         dev->nets[channel] = priv;
1978
1979         err = register_candev(netdev);
1980         if (err) {
1981                 dev_err(&intf->dev, "Failed to register can device\n");
1982                 free_candev(netdev);
1983                 dev->nets[channel] = NULL;
1984                 return err;
1985         }
1986
1987         netdev_dbg(netdev, "device registered\n");
1988
1989         return 0;
1990 }
1991
1992 static int kvaser_usb_get_endpoints(const struct usb_interface *intf,
1993                                     struct usb_endpoint_descriptor **in,
1994                                     struct usb_endpoint_descriptor **out)
1995 {
1996         const struct usb_host_interface *iface_desc;
1997         struct usb_endpoint_descriptor *endpoint;
1998         int i;
1999
2000         iface_desc = &intf->altsetting[0];
2001
2002         for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
2003                 endpoint = &iface_desc->endpoint[i].desc;
2004
2005                 if (!*in && usb_endpoint_is_bulk_in(endpoint))
2006                         *in = endpoint;
2007
2008                 if (!*out && usb_endpoint_is_bulk_out(endpoint))
2009                         *out = endpoint;
2010
2011                 /* use first bulk endpoint for in and out */
2012                 if (*in && *out)
2013                         return 0;
2014         }
2015
2016         return -ENODEV;
2017 }
2018
2019 static int kvaser_usb_probe(struct usb_interface *intf,
2020                             const struct usb_device_id *id)
2021 {
2022         struct kvaser_usb *dev;
2023         int err = -ENOMEM;
2024         int i, retry = 3;
2025
2026         dev = devm_kzalloc(&intf->dev, sizeof(*dev), GFP_KERNEL);
2027         if (!dev)
2028                 return -ENOMEM;
2029
2030         if (kvaser_is_leaf(id)) {
2031                 dev->family = KVASER_LEAF;
2032         } else if (kvaser_is_usbcan(id)) {
2033                 dev->family = KVASER_USBCAN;
2034         } else {
2035                 dev_err(&intf->dev,
2036                         "Product ID (%d) does not belong to any known Kvaser USB family",
2037                         id->idProduct);
2038                 return -ENODEV;
2039         }
2040
2041         err = kvaser_usb_get_endpoints(intf, &dev->bulk_in, &dev->bulk_out);
2042         if (err) {
2043                 dev_err(&intf->dev, "Cannot get usb endpoint(s)");
2044                 return err;
2045         }
2046
2047         dev->udev = interface_to_usbdev(intf);
2048
2049         init_usb_anchor(&dev->rx_submitted);
2050
2051         usb_set_intfdata(intf, dev);
2052
2053         /* On some x86 laptops, plugging a Kvaser device again after
2054          * an unplug makes the firmware always ignore the very first
2055          * command. For such a case, provide some room for retries
2056          * instead of completely exiting the driver.
2057          */
2058         do {
2059                 err = kvaser_usb_get_software_info(dev);
2060         } while (--retry && err == -ETIMEDOUT);
2061
2062         if (err) {
2063                 dev_err(&intf->dev,
2064                         "Cannot get software infos, error %d\n", err);
2065                 return err;
2066         }
2067
2068         dev_dbg(&intf->dev, "Firmware version: %d.%d.%d\n",
2069                 ((dev->fw_version >> 24) & 0xff),
2070                 ((dev->fw_version >> 16) & 0xff),
2071                 (dev->fw_version & 0xffff));
2072
2073         dev_dbg(&intf->dev, "Max outstanding tx = %d URBs\n", dev->max_tx_urbs);
2074
2075         err = kvaser_usb_get_card_info(dev);
2076         if (err) {
2077                 dev_err(&intf->dev,
2078                         "Cannot get card infos, error %d\n", err);
2079                 return err;
2080         }
2081
2082         for (i = 0; i < dev->nchannels; i++) {
2083                 err = kvaser_usb_init_one(intf, id, i);
2084                 if (err) {
2085                         kvaser_usb_remove_interfaces(dev);
2086                         return err;
2087                 }
2088         }
2089
2090         return 0;
2091 }
2092
2093 static void kvaser_usb_disconnect(struct usb_interface *intf)
2094 {
2095         struct kvaser_usb *dev = usb_get_intfdata(intf);
2096
2097         usb_set_intfdata(intf, NULL);
2098
2099         if (!dev)
2100                 return;
2101
2102         kvaser_usb_remove_interfaces(dev);
2103 }
2104
2105 static struct usb_driver kvaser_usb_driver = {
2106         .name = "kvaser_usb",
2107         .probe = kvaser_usb_probe,
2108         .disconnect = kvaser_usb_disconnect,
2109         .id_table = kvaser_usb_table,
2110 };
2111
2112 module_usb_driver(kvaser_usb_driver);
2113
2114 MODULE_AUTHOR("Olivier Sobrie <olivier@sobrie.be>");
2115 MODULE_DESCRIPTION("CAN driver for Kvaser CAN/USB devices");
2116 MODULE_LICENSE("GPL v2");