GNU Linux-libre 4.19.245-gnu1
[releases.git] / drivers / net / can / usb / ucan.c
1 // SPDX-License-Identifier: GPL-2.0
2
3 /* Driver for Theobroma Systems UCAN devices, Protocol Version 3
4  *
5  * Copyright (C) 2018 Theobroma Systems Design und Consulting GmbH
6  *
7  *
8  * General Description:
9  *
10  * The USB Device uses three Endpoints:
11  *
12  *   CONTROL Endpoint: Is used the setup the device (start, stop,
13  *   info, configure).
14  *
15  *   IN Endpoint: The device sends CAN Frame Messages and Device
16  *   Information using the IN endpoint.
17  *
18  *   OUT Endpoint: The driver sends configuration requests, and CAN
19  *   Frames on the out endpoint.
20  *
21  * Error Handling:
22  *
23  *   If error reporting is turned on the device encodes error into CAN
24  *   error frames (see uapi/linux/can/error.h) and sends it using the
25  *   IN Endpoint. The driver updates statistics and forward it.
26  */
27
28 #include <linux/can.h>
29 #include <linux/can/dev.h>
30 #include <linux/can/error.h>
31 #include <linux/module.h>
32 #include <linux/netdevice.h>
33 #include <linux/signal.h>
34 #include <linux/skbuff.h>
35 #include <linux/slab.h>
36 #include <linux/usb.h>
37
38 #include <linux/can.h>
39 #include <linux/can/dev.h>
40 #include <linux/can/error.h>
41
42 #define UCAN_DRIVER_NAME "ucan"
43 #define UCAN_MAX_RX_URBS 8
44 /* the CAN controller needs a while to enable/disable the bus */
45 #define UCAN_USB_CTL_PIPE_TIMEOUT 1000
46 /* this driver currently supports protocol version 3 only */
47 #define UCAN_PROTOCOL_VERSION_MIN 3
48 #define UCAN_PROTOCOL_VERSION_MAX 3
49
50 /* UCAN Message Definitions
51  * ------------------------
52  *
53  *  ucan_message_out_t and ucan_message_in_t define the messages
54  *  transmitted on the OUT and IN endpoint.
55  *
56  *  Multibyte fields are transmitted with little endianness
57  *
58  *  INTR Endpoint: a single uint32_t storing the current space in the fifo
59  *
60  *  OUT Endpoint: single message of type ucan_message_out_t is
61  *    transmitted on the out endpoint
62  *
63  *  IN Endpoint: multiple messages ucan_message_in_t concateted in
64  *    the following way:
65  *
66  *      m[n].len <=> the length if message n(including the header in bytes)
67  *      m[n] is is aligned to a 4 byte boundary, hence
68  *        offset(m[0])   := 0;
69  *        offset(m[n+1]) := offset(m[n]) + (m[n].len + 3) & 3
70  *
71  *      this implies that
72  *        offset(m[n]) % 4 <=> 0
73  */
74
75 /* Device Global Commands */
76 enum {
77         UCAN_DEVICE_GET_FW_STRING = 0,
78 };
79
80 /* UCAN Commands */
81 enum {
82         /* start the can transceiver - val defines the operation mode */
83         UCAN_COMMAND_START = 0,
84         /* cancel pending transmissions and stop the can transceiver */
85         UCAN_COMMAND_STOP = 1,
86         /* send can transceiver into low-power sleep mode */
87         UCAN_COMMAND_SLEEP = 2,
88         /* wake up can transceiver from low-power sleep mode */
89         UCAN_COMMAND_WAKEUP = 3,
90         /* reset the can transceiver */
91         UCAN_COMMAND_RESET = 4,
92         /* get piece of info from the can transceiver - subcmd defines what
93          * piece
94          */
95         UCAN_COMMAND_GET = 5,
96         /* clear or disable hardware filter - subcmd defines which of the two */
97         UCAN_COMMAND_FILTER = 6,
98         /* Setup bittiming */
99         UCAN_COMMAND_SET_BITTIMING = 7,
100         /* recover from bus-off state */
101         UCAN_COMMAND_RESTART = 8,
102 };
103
104 /* UCAN_COMMAND_START and UCAN_COMMAND_GET_INFO operation modes (bitmap).
105  * Undefined bits must be set to 0.
106  */
107 enum {
108         UCAN_MODE_LOOPBACK = BIT(0),
109         UCAN_MODE_SILENT = BIT(1),
110         UCAN_MODE_3_SAMPLES = BIT(2),
111         UCAN_MODE_ONE_SHOT = BIT(3),
112         UCAN_MODE_BERR_REPORT = BIT(4),
113 };
114
115 /* UCAN_COMMAND_GET subcommands */
116 enum {
117         UCAN_COMMAND_GET_INFO = 0,
118         UCAN_COMMAND_GET_PROTOCOL_VERSION = 1,
119 };
120
121 /* UCAN_COMMAND_FILTER subcommands */
122 enum {
123         UCAN_FILTER_CLEAR = 0,
124         UCAN_FILTER_DISABLE = 1,
125         UCAN_FILTER_ENABLE = 2,
126 };
127
128 /* OUT endpoint message types */
129 enum {
130         UCAN_OUT_TX = 2,     /* transmit a CAN frame */
131 };
132
133 /* IN endpoint message types */
134 enum {
135         UCAN_IN_TX_COMPLETE = 1,  /* CAN frame transmission completed */
136         UCAN_IN_RX = 2,           /* CAN frame received */
137 };
138
139 struct ucan_ctl_cmd_start {
140         __le16 mode;         /* OR-ing any of UCAN_MODE_* */
141 } __packed;
142
143 struct ucan_ctl_cmd_set_bittiming {
144         __le32 tq;           /* Time quanta (TQ) in nanoseconds */
145         __le16 brp;          /* TQ Prescaler */
146         __le16 sample_point; /* Samplepoint on tenth percent */
147         u8 prop_seg;         /* Propagation segment in TQs */
148         u8 phase_seg1;       /* Phase buffer segment 1 in TQs */
149         u8 phase_seg2;       /* Phase buffer segment 2 in TQs */
150         u8 sjw;              /* Synchronisation jump width in TQs */
151 } __packed;
152
153 struct ucan_ctl_cmd_device_info {
154         __le32 freq;         /* Clock Frequency for tq generation */
155         u8 tx_fifo;          /* Size of the transmission fifo */
156         u8 sjw_max;          /* can_bittiming fields... */
157         u8 tseg1_min;
158         u8 tseg1_max;
159         u8 tseg2_min;
160         u8 tseg2_max;
161         __le16 brp_inc;
162         __le32 brp_min;
163         __le32 brp_max;      /* ...can_bittiming fields */
164         __le16 ctrlmodes;    /* supported control modes */
165         __le16 hwfilter;     /* Number of HW filter banks */
166         __le16 rxmboxes;     /* Number of receive Mailboxes */
167 } __packed;
168
169 struct ucan_ctl_cmd_get_protocol_version {
170         __le32 version;
171 } __packed;
172
173 union ucan_ctl_payload {
174         /* Setup Bittiming
175          * bmRequest == UCAN_COMMAND_START
176          */
177         struct ucan_ctl_cmd_start cmd_start;
178         /* Setup Bittiming
179          * bmRequest == UCAN_COMMAND_SET_BITTIMING
180          */
181         struct ucan_ctl_cmd_set_bittiming cmd_set_bittiming;
182         /* Get Device Information
183          * bmRequest == UCAN_COMMAND_GET; wValue = UCAN_COMMAND_GET_INFO
184          */
185         struct ucan_ctl_cmd_device_info cmd_get_device_info;
186         /* Get Protocol Version
187          * bmRequest == UCAN_COMMAND_GET;
188          * wValue = UCAN_COMMAND_GET_PROTOCOL_VERSION
189          */
190         struct ucan_ctl_cmd_get_protocol_version cmd_get_protocol_version;
191
192         u8 raw[128];
193 } __packed;
194
195 enum {
196         UCAN_TX_COMPLETE_SUCCESS = BIT(0),
197 };
198
199 /* Transmission Complete within ucan_message_in */
200 struct ucan_tx_complete_entry_t {
201         u8 echo_index;
202         u8 flags;
203 } __packed __aligned(0x2);
204
205 /* CAN Data message format within ucan_message_in/out */
206 struct ucan_can_msg {
207         /* note DLC is computed by
208          *    msg.len - sizeof (msg.len)
209          *            - sizeof (msg.type)
210          *            - sizeof (msg.can_msg.id)
211          */
212         __le32 id;
213
214         union {
215                 u8 data[CAN_MAX_DLEN];  /* Data of CAN frames */
216                 u8 dlc;                 /* RTR dlc */
217         };
218 } __packed;
219
220 /* OUT Endpoint, outbound messages */
221 struct ucan_message_out {
222         __le16 len; /* Length of the content include header */
223         u8 type;    /* UCAN_OUT_TX and friends */
224         u8 subtype; /* command sub type */
225
226         union {
227                 /* Transmit CAN frame
228                  * (type == UCAN_TX) && ((msg.can_msg.id & CAN_RTR_FLAG) == 0)
229                  * subtype stores the echo id
230                  */
231                 struct ucan_can_msg can_msg;
232         } msg;
233 } __packed __aligned(0x4);
234
235 /* IN Endpoint, inbound messages */
236 struct ucan_message_in {
237         __le16 len; /* Length of the content include header */
238         u8 type;    /* UCAN_IN_RX and friends */
239         u8 subtype; /* command sub type */
240
241         union {
242                 /* CAN Frame received
243                  * (type == UCAN_IN_RX)
244                  * && ((msg.can_msg.id & CAN_RTR_FLAG) == 0)
245                  */
246                 struct ucan_can_msg can_msg;
247
248                 /* CAN transmission complete
249                  * (type == UCAN_IN_TX_COMPLETE)
250                  */
251                 struct ucan_tx_complete_entry_t can_tx_complete_msg[0];
252         } __aligned(0x4) msg;
253 } __packed;
254
255 /* Macros to calculate message lengths */
256 #define UCAN_OUT_HDR_SIZE offsetof(struct ucan_message_out, msg)
257
258 #define UCAN_IN_HDR_SIZE offsetof(struct ucan_message_in, msg)
259 #define UCAN_IN_LEN(member) (UCAN_OUT_HDR_SIZE + sizeof(member))
260
261 struct ucan_priv;
262
263 /* Context Information for transmission URBs */
264 struct ucan_urb_context {
265         struct ucan_priv *up;
266         u8 dlc;
267         bool allocated;
268 };
269
270 /* Information reported by the USB device */
271 struct ucan_device_info {
272         struct can_bittiming_const bittiming_const;
273         u8 tx_fifo;
274 };
275
276 /* Driver private data */
277 struct ucan_priv {
278         /* must be the first member */
279         struct can_priv can;
280
281         /* linux USB device structures */
282         struct usb_device *udev;
283         struct usb_interface *intf;
284         struct net_device *netdev;
285
286         /* lock for can->echo_skb (used around
287          * can_put/get/free_echo_skb
288          */
289         spinlock_t echo_skb_lock;
290
291         /* usb device information information */
292         u8 intf_index;
293         u8 in_ep_addr;
294         u8 out_ep_addr;
295         u16 in_ep_size;
296
297         /* transmission and reception buffers */
298         struct usb_anchor rx_urbs;
299         struct usb_anchor tx_urbs;
300
301         union ucan_ctl_payload *ctl_msg_buffer;
302         struct ucan_device_info device_info;
303
304         /* transmission control information and locks */
305         spinlock_t context_lock;
306         unsigned int available_tx_urbs;
307         struct ucan_urb_context *context_array;
308 };
309
310 static u8 ucan_get_can_dlc(struct ucan_can_msg *msg, u16 len)
311 {
312         if (le32_to_cpu(msg->id) & CAN_RTR_FLAG)
313                 return get_can_dlc(msg->dlc);
314         else
315                 return get_can_dlc(len - (UCAN_IN_HDR_SIZE + sizeof(msg->id)));
316 }
317
318 static void ucan_release_context_array(struct ucan_priv *up)
319 {
320         if (!up->context_array)
321                 return;
322
323         /* lock is not needed because, driver is currently opening or closing */
324         up->available_tx_urbs = 0;
325
326         kfree(up->context_array);
327         up->context_array = NULL;
328 }
329
330 static int ucan_alloc_context_array(struct ucan_priv *up)
331 {
332         int i;
333
334         /* release contexts if any */
335         ucan_release_context_array(up);
336
337         up->context_array = kcalloc(up->device_info.tx_fifo,
338                                     sizeof(*up->context_array),
339                                     GFP_KERNEL);
340         if (!up->context_array) {
341                 netdev_err(up->netdev,
342                            "Not enough memory to allocate tx contexts\n");
343                 return -ENOMEM;
344         }
345
346         for (i = 0; i < up->device_info.tx_fifo; i++) {
347                 up->context_array[i].allocated = false;
348                 up->context_array[i].up = up;
349         }
350
351         /* lock is not needed because, driver is currently opening */
352         up->available_tx_urbs = up->device_info.tx_fifo;
353
354         return 0;
355 }
356
357 static struct ucan_urb_context *ucan_alloc_context(struct ucan_priv *up)
358 {
359         int i;
360         unsigned long flags;
361         struct ucan_urb_context *ret = NULL;
362
363         if (WARN_ON_ONCE(!up->context_array))
364                 return NULL;
365
366         /* execute context operation atomically */
367         spin_lock_irqsave(&up->context_lock, flags);
368
369         for (i = 0; i < up->device_info.tx_fifo; i++) {
370                 if (!up->context_array[i].allocated) {
371                         /* update context */
372                         ret = &up->context_array[i];
373                         up->context_array[i].allocated = true;
374
375                         /* stop queue if necessary */
376                         up->available_tx_urbs--;
377                         if (!up->available_tx_urbs)
378                                 netif_stop_queue(up->netdev);
379
380                         break;
381                 }
382         }
383
384         spin_unlock_irqrestore(&up->context_lock, flags);
385         return ret;
386 }
387
388 static bool ucan_release_context(struct ucan_priv *up,
389                                  struct ucan_urb_context *ctx)
390 {
391         unsigned long flags;
392         bool ret = false;
393
394         if (WARN_ON_ONCE(!up->context_array))
395                 return false;
396
397         /* execute context operation atomically */
398         spin_lock_irqsave(&up->context_lock, flags);
399
400         /* context was not allocated, maybe the device sent garbage */
401         if (ctx->allocated) {
402                 ctx->allocated = false;
403
404                 /* check if the queue needs to be woken */
405                 if (!up->available_tx_urbs)
406                         netif_wake_queue(up->netdev);
407                 up->available_tx_urbs++;
408
409                 ret = true;
410         }
411
412         spin_unlock_irqrestore(&up->context_lock, flags);
413         return ret;
414 }
415
416 static int ucan_ctrl_command_out(struct ucan_priv *up,
417                                  u8 cmd, u16 subcmd, u16 datalen)
418 {
419         return usb_control_msg(up->udev,
420                                usb_sndctrlpipe(up->udev, 0),
421                                cmd,
422                                USB_DIR_OUT | USB_TYPE_VENDOR |
423                                                 USB_RECIP_INTERFACE,
424                                subcmd,
425                                up->intf_index,
426                                up->ctl_msg_buffer,
427                                datalen,
428                                UCAN_USB_CTL_PIPE_TIMEOUT);
429 }
430
431 static int ucan_device_request_in(struct ucan_priv *up,
432                                   u8 cmd, u16 subcmd, u16 datalen)
433 {
434         return usb_control_msg(up->udev,
435                                usb_rcvctrlpipe(up->udev, 0),
436                                cmd,
437                                USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
438                                subcmd,
439                                0,
440                                up->ctl_msg_buffer,
441                                datalen,
442                                UCAN_USB_CTL_PIPE_TIMEOUT);
443 }
444
445 /* Parse the device information structure reported by the device and
446  * setup private variables accordingly
447  */
448 static void ucan_parse_device_info(struct ucan_priv *up,
449                                    struct ucan_ctl_cmd_device_info *device_info)
450 {
451         struct can_bittiming_const *bittiming =
452                 &up->device_info.bittiming_const;
453         u16 ctrlmodes;
454
455         /* store the data */
456         up->can.clock.freq = le32_to_cpu(device_info->freq);
457         up->device_info.tx_fifo = device_info->tx_fifo;
458         strcpy(bittiming->name, "ucan");
459         bittiming->tseg1_min = device_info->tseg1_min;
460         bittiming->tseg1_max = device_info->tseg1_max;
461         bittiming->tseg2_min = device_info->tseg2_min;
462         bittiming->tseg2_max = device_info->tseg2_max;
463         bittiming->sjw_max = device_info->sjw_max;
464         bittiming->brp_min = le32_to_cpu(device_info->brp_min);
465         bittiming->brp_max = le32_to_cpu(device_info->brp_max);
466         bittiming->brp_inc = le16_to_cpu(device_info->brp_inc);
467
468         ctrlmodes = le16_to_cpu(device_info->ctrlmodes);
469
470         up->can.ctrlmode_supported = 0;
471
472         if (ctrlmodes & UCAN_MODE_LOOPBACK)
473                 up->can.ctrlmode_supported |= CAN_CTRLMODE_LOOPBACK;
474         if (ctrlmodes & UCAN_MODE_SILENT)
475                 up->can.ctrlmode_supported |= CAN_CTRLMODE_LISTENONLY;
476         if (ctrlmodes & UCAN_MODE_3_SAMPLES)
477                 up->can.ctrlmode_supported |= CAN_CTRLMODE_3_SAMPLES;
478         if (ctrlmodes & UCAN_MODE_ONE_SHOT)
479                 up->can.ctrlmode_supported |= CAN_CTRLMODE_ONE_SHOT;
480         if (ctrlmodes & UCAN_MODE_BERR_REPORT)
481                 up->can.ctrlmode_supported |= CAN_CTRLMODE_BERR_REPORTING;
482 }
483
484 /* Handle a CAN error frame that we have received from the device.
485  * Returns true if the can state has changed.
486  */
487 static bool ucan_handle_error_frame(struct ucan_priv *up,
488                                     struct ucan_message_in *m,
489                                     canid_t canid)
490 {
491         enum can_state new_state = up->can.state;
492         struct net_device_stats *net_stats = &up->netdev->stats;
493         struct can_device_stats *can_stats = &up->can.can_stats;
494
495         if (canid & CAN_ERR_LOSTARB)
496                 can_stats->arbitration_lost++;
497
498         if (canid & CAN_ERR_BUSERROR)
499                 can_stats->bus_error++;
500
501         if (canid & CAN_ERR_ACK)
502                 net_stats->tx_errors++;
503
504         if (canid & CAN_ERR_BUSOFF)
505                 new_state = CAN_STATE_BUS_OFF;
506
507         /* controller problems, details in data[1] */
508         if (canid & CAN_ERR_CRTL) {
509                 u8 d1 = m->msg.can_msg.data[1];
510
511                 if (d1 & CAN_ERR_CRTL_RX_OVERFLOW)
512                         net_stats->rx_over_errors++;
513
514                 /* controller state bits: if multiple are set the worst wins */
515                 if (d1 & CAN_ERR_CRTL_ACTIVE)
516                         new_state = CAN_STATE_ERROR_ACTIVE;
517
518                 if (d1 & (CAN_ERR_CRTL_RX_WARNING | CAN_ERR_CRTL_TX_WARNING))
519                         new_state = CAN_STATE_ERROR_WARNING;
520
521                 if (d1 & (CAN_ERR_CRTL_RX_PASSIVE | CAN_ERR_CRTL_TX_PASSIVE))
522                         new_state = CAN_STATE_ERROR_PASSIVE;
523         }
524
525         /* protocol error, details in data[2] */
526         if (canid & CAN_ERR_PROT) {
527                 u8 d2 = m->msg.can_msg.data[2];
528
529                 if (d2 & CAN_ERR_PROT_TX)
530                         net_stats->tx_errors++;
531                 else
532                         net_stats->rx_errors++;
533         }
534
535         /* no state change - we are done */
536         if (up->can.state == new_state)
537                 return false;
538
539         /* we switched into a better state */
540         if (up->can.state > new_state) {
541                 up->can.state = new_state;
542                 return true;
543         }
544
545         /* we switched into a worse state */
546         up->can.state = new_state;
547         switch (new_state) {
548         case CAN_STATE_BUS_OFF:
549                 can_stats->bus_off++;
550                 can_bus_off(up->netdev);
551                 break;
552         case CAN_STATE_ERROR_PASSIVE:
553                 can_stats->error_passive++;
554                 break;
555         case CAN_STATE_ERROR_WARNING:
556                 can_stats->error_warning++;
557                 break;
558         default:
559                 break;
560         }
561         return true;
562 }
563
564 /* Callback on reception of a can frame via the IN endpoint
565  *
566  * This function allocates an skb and transferres it to the Linux
567  * network stack
568  */
569 static void ucan_rx_can_msg(struct ucan_priv *up, struct ucan_message_in *m)
570 {
571         int len;
572         canid_t canid;
573         struct can_frame *cf;
574         struct sk_buff *skb;
575         struct net_device_stats *stats = &up->netdev->stats;
576
577         /* get the contents of the length field */
578         len = le16_to_cpu(m->len);
579
580         /* check sanity */
581         if (len < UCAN_IN_HDR_SIZE + sizeof(m->msg.can_msg.id)) {
582                 netdev_warn(up->netdev, "invalid input message len: %d\n", len);
583                 return;
584         }
585
586         /* handle error frames */
587         canid = le32_to_cpu(m->msg.can_msg.id);
588         if (canid & CAN_ERR_FLAG) {
589                 bool busstate_changed = ucan_handle_error_frame(up, m, canid);
590
591                 /* if berr-reporting is off only state changes get through */
592                 if (!(up->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING) &&
593                     !busstate_changed)
594                         return;
595         } else {
596                 canid_t canid_mask;
597                 /* compute the mask for canid */
598                 canid_mask = CAN_RTR_FLAG;
599                 if (canid & CAN_EFF_FLAG)
600                         canid_mask |= CAN_EFF_MASK | CAN_EFF_FLAG;
601                 else
602                         canid_mask |= CAN_SFF_MASK;
603
604                 if (canid & ~canid_mask)
605                         netdev_warn(up->netdev,
606                                     "unexpected bits set (canid %x, mask %x)",
607                                     canid, canid_mask);
608
609                 canid &= canid_mask;
610         }
611
612         /* allocate skb */
613         skb = alloc_can_skb(up->netdev, &cf);
614         if (!skb)
615                 return;
616
617         /* fill the can frame */
618         cf->can_id = canid;
619
620         /* compute DLC taking RTR_FLAG into account */
621         cf->can_dlc = ucan_get_can_dlc(&m->msg.can_msg, len);
622
623         /* copy the payload of non RTR frames */
624         if (!(cf->can_id & CAN_RTR_FLAG) || (cf->can_id & CAN_ERR_FLAG))
625                 memcpy(cf->data, m->msg.can_msg.data, cf->can_dlc);
626
627         /* don't count error frames as real packets */
628         stats->rx_packets++;
629         stats->rx_bytes += cf->can_dlc;
630
631         /* pass it to Linux */
632         netif_rx(skb);
633 }
634
635 /* callback indicating completed transmission */
636 static void ucan_tx_complete_msg(struct ucan_priv *up,
637                                  struct ucan_message_in *m)
638 {
639         unsigned long flags;
640         u16 count, i;
641         u8 echo_index, dlc;
642         u16 len = le16_to_cpu(m->len);
643
644         struct ucan_urb_context *context;
645
646         if (len < UCAN_IN_HDR_SIZE || (len % 2 != 0)) {
647                 netdev_err(up->netdev, "invalid tx complete length\n");
648                 return;
649         }
650
651         count = (len - UCAN_IN_HDR_SIZE) / 2;
652         for (i = 0; i < count; i++) {
653                 /* we did not submit such echo ids */
654                 echo_index = m->msg.can_tx_complete_msg[i].echo_index;
655                 if (echo_index >= up->device_info.tx_fifo) {
656                         up->netdev->stats.tx_errors++;
657                         netdev_err(up->netdev,
658                                    "invalid echo_index %d received\n",
659                                    echo_index);
660                         continue;
661                 }
662
663                 /* gather information from the context */
664                 context = &up->context_array[echo_index];
665                 dlc = READ_ONCE(context->dlc);
666
667                 /* Release context and restart queue if necessary.
668                  * Also check if the context was allocated
669                  */
670                 if (!ucan_release_context(up, context))
671                         continue;
672
673                 spin_lock_irqsave(&up->echo_skb_lock, flags);
674                 if (m->msg.can_tx_complete_msg[i].flags &
675                     UCAN_TX_COMPLETE_SUCCESS) {
676                         /* update statistics */
677                         up->netdev->stats.tx_packets++;
678                         up->netdev->stats.tx_bytes += dlc;
679                         can_get_echo_skb(up->netdev, echo_index);
680                 } else {
681                         up->netdev->stats.tx_dropped++;
682                         can_free_echo_skb(up->netdev, echo_index);
683                 }
684                 spin_unlock_irqrestore(&up->echo_skb_lock, flags);
685         }
686 }
687
688 /* callback on reception of a USB message */
689 static void ucan_read_bulk_callback(struct urb *urb)
690 {
691         int ret;
692         int pos;
693         struct ucan_priv *up = urb->context;
694         struct net_device *netdev = up->netdev;
695         struct ucan_message_in *m;
696
697         /* the device is not up and the driver should not receive any
698          * data on the bulk in pipe
699          */
700         if (WARN_ON(!up->context_array)) {
701                 usb_free_coherent(up->udev,
702                                   up->in_ep_size,
703                                   urb->transfer_buffer,
704                                   urb->transfer_dma);
705                 return;
706         }
707
708         /* check URB status */
709         switch (urb->status) {
710         case 0:
711                 break;
712         case -ENOENT:
713         case -EPIPE:
714         case -EPROTO:
715         case -ESHUTDOWN:
716         case -ETIME:
717                 /* urb is not resubmitted -> free dma data */
718                 usb_free_coherent(up->udev,
719                                   up->in_ep_size,
720                                   urb->transfer_buffer,
721                                   urb->transfer_dma);
722                 netdev_dbg(up->netdev, "not resumbmitting urb; status: %d\n",
723                            urb->status);
724                 return;
725         default:
726                 goto resubmit;
727         }
728
729         /* sanity check */
730         if (!netif_device_present(netdev))
731                 return;
732
733         /* iterate over input */
734         pos = 0;
735         while (pos < urb->actual_length) {
736                 int len;
737
738                 /* check sanity (length of header) */
739                 if ((urb->actual_length - pos) < UCAN_IN_HDR_SIZE) {
740                         netdev_warn(up->netdev,
741                                     "invalid message (short; no hdr; l:%d)\n",
742                                     urb->actual_length);
743                         goto resubmit;
744                 }
745
746                 /* setup the message address */
747                 m = (struct ucan_message_in *)
748                         ((u8 *)urb->transfer_buffer + pos);
749                 len = le16_to_cpu(m->len);
750
751                 /* check sanity (length of content) */
752                 if (urb->actual_length - pos < len) {
753                         netdev_warn(up->netdev,
754                                     "invalid message (short; no data; l:%d)\n",
755                                     urb->actual_length);
756                         print_hex_dump(KERN_WARNING,
757                                        "raw data: ",
758                                        DUMP_PREFIX_ADDRESS,
759                                        16,
760                                        1,
761                                        urb->transfer_buffer,
762                                        urb->actual_length,
763                                        true);
764
765                         goto resubmit;
766                 }
767
768                 switch (m->type) {
769                 case UCAN_IN_RX:
770                         ucan_rx_can_msg(up, m);
771                         break;
772                 case UCAN_IN_TX_COMPLETE:
773                         ucan_tx_complete_msg(up, m);
774                         break;
775                 default:
776                         netdev_warn(up->netdev,
777                                     "invalid message (type; t:%d)\n",
778                                     m->type);
779                         break;
780                 }
781
782                 /* proceed to next message */
783                 pos += len;
784                 /* align to 4 byte boundary */
785                 pos = round_up(pos, 4);
786         }
787
788 resubmit:
789         /* resubmit urb when done */
790         usb_fill_bulk_urb(urb, up->udev,
791                           usb_rcvbulkpipe(up->udev,
792                                           up->in_ep_addr),
793                           urb->transfer_buffer,
794                           up->in_ep_size,
795                           ucan_read_bulk_callback,
796                           up);
797
798         usb_anchor_urb(urb, &up->rx_urbs);
799         ret = usb_submit_urb(urb, GFP_ATOMIC);
800
801         if (ret < 0) {
802                 netdev_err(up->netdev,
803                            "failed resubmitting read bulk urb: %d\n",
804                            ret);
805
806                 usb_unanchor_urb(urb);
807                 usb_free_coherent(up->udev,
808                                   up->in_ep_size,
809                                   urb->transfer_buffer,
810                                   urb->transfer_dma);
811
812                 if (ret == -ENODEV)
813                         netif_device_detach(netdev);
814         }
815 }
816
817 /* callback after transmission of a USB message */
818 static void ucan_write_bulk_callback(struct urb *urb)
819 {
820         unsigned long flags;
821         struct ucan_priv *up;
822         struct ucan_urb_context *context = urb->context;
823
824         /* get the urb context */
825         if (WARN_ON_ONCE(!context))
826                 return;
827
828         /* free up our allocated buffer */
829         usb_free_coherent(urb->dev,
830                           sizeof(struct ucan_message_out),
831                           urb->transfer_buffer,
832                           urb->transfer_dma);
833
834         up = context->up;
835         if (WARN_ON_ONCE(!up))
836                 return;
837
838         /* sanity check */
839         if (!netif_device_present(up->netdev))
840                 return;
841
842         /* transmission failed (USB - the device will not send a TX complete) */
843         if (urb->status) {
844                 netdev_warn(up->netdev,
845                             "failed to transmit USB message to device: %d\n",
846                              urb->status);
847
848                 /* update counters an cleanup */
849                 spin_lock_irqsave(&up->echo_skb_lock, flags);
850                 can_free_echo_skb(up->netdev, context - up->context_array);
851                 spin_unlock_irqrestore(&up->echo_skb_lock, flags);
852
853                 up->netdev->stats.tx_dropped++;
854
855                 /* release context and restart the queue if necessary */
856                 if (!ucan_release_context(up, context))
857                         netdev_err(up->netdev,
858                                    "urb failed, failed to release context\n");
859         }
860 }
861
862 static void ucan_cleanup_rx_urbs(struct ucan_priv *up, struct urb **urbs)
863 {
864         int i;
865
866         for (i = 0; i < UCAN_MAX_RX_URBS; i++) {
867                 if (urbs[i]) {
868                         usb_unanchor_urb(urbs[i]);
869                         usb_free_coherent(up->udev,
870                                           up->in_ep_size,
871                                           urbs[i]->transfer_buffer,
872                                           urbs[i]->transfer_dma);
873                         usb_free_urb(urbs[i]);
874                 }
875         }
876
877         memset(urbs, 0, sizeof(*urbs) * UCAN_MAX_RX_URBS);
878 }
879
880 static int ucan_prepare_and_anchor_rx_urbs(struct ucan_priv *up,
881                                            struct urb **urbs)
882 {
883         int i;
884
885         memset(urbs, 0, sizeof(*urbs) * UCAN_MAX_RX_URBS);
886
887         for (i = 0; i < UCAN_MAX_RX_URBS; i++) {
888                 void *buf;
889
890                 urbs[i] = usb_alloc_urb(0, GFP_KERNEL);
891                 if (!urbs[i])
892                         goto err;
893
894                 buf = usb_alloc_coherent(up->udev,
895                                          up->in_ep_size,
896                                          GFP_KERNEL, &urbs[i]->transfer_dma);
897                 if (!buf) {
898                         /* cleanup this urb */
899                         usb_free_urb(urbs[i]);
900                         urbs[i] = NULL;
901                         goto err;
902                 }
903
904                 usb_fill_bulk_urb(urbs[i], up->udev,
905                                   usb_rcvbulkpipe(up->udev,
906                                                   up->in_ep_addr),
907                                   buf,
908                                   up->in_ep_size,
909                                   ucan_read_bulk_callback,
910                                   up);
911
912                 urbs[i]->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
913
914                 usb_anchor_urb(urbs[i], &up->rx_urbs);
915         }
916         return 0;
917
918 err:
919         /* cleanup other unsubmitted urbs */
920         ucan_cleanup_rx_urbs(up, urbs);
921         return -ENOMEM;
922 }
923
924 /* Submits rx urbs with the semantic: Either submit all, or cleanup
925  * everything. I case of errors submitted urbs are killed and all urbs in
926  * the array are freed. I case of no errors every entry in the urb
927  * array is set to NULL.
928  */
929 static int ucan_submit_rx_urbs(struct ucan_priv *up, struct urb **urbs)
930 {
931         int i, ret;
932
933         /* Iterate over all urbs to submit. On success remove the urb
934          * from the list.
935          */
936         for (i = 0; i < UCAN_MAX_RX_URBS; i++) {
937                 ret = usb_submit_urb(urbs[i], GFP_KERNEL);
938                 if (ret) {
939                         netdev_err(up->netdev,
940                                    "could not submit urb; code: %d\n",
941                                    ret);
942                         goto err;
943                 }
944
945                 /* Anchor URB and drop reference, USB core will take
946                  * care of freeing it
947                  */
948                 usb_free_urb(urbs[i]);
949                 urbs[i] = NULL;
950         }
951         return 0;
952
953 err:
954         /* Cleanup unsubmitted urbs */
955         ucan_cleanup_rx_urbs(up, urbs);
956
957         /* Kill urbs that are already submitted */
958         usb_kill_anchored_urbs(&up->rx_urbs);
959
960         return ret;
961 }
962
963 /* Open the network device */
964 static int ucan_open(struct net_device *netdev)
965 {
966         int ret, ret_cleanup;
967         u16 ctrlmode;
968         struct urb *urbs[UCAN_MAX_RX_URBS];
969         struct ucan_priv *up = netdev_priv(netdev);
970
971         ret = ucan_alloc_context_array(up);
972         if (ret)
973                 return ret;
974
975         /* Allocate and prepare IN URBS - allocated and anchored
976          * urbs are stored in urbs[] for clean
977          */
978         ret = ucan_prepare_and_anchor_rx_urbs(up, urbs);
979         if (ret)
980                 goto err_contexts;
981
982         /* Check the control mode */
983         ctrlmode = 0;
984         if (up->can.ctrlmode & CAN_CTRLMODE_LOOPBACK)
985                 ctrlmode |= UCAN_MODE_LOOPBACK;
986         if (up->can.ctrlmode & CAN_CTRLMODE_LISTENONLY)
987                 ctrlmode |= UCAN_MODE_SILENT;
988         if (up->can.ctrlmode & CAN_CTRLMODE_3_SAMPLES)
989                 ctrlmode |= UCAN_MODE_3_SAMPLES;
990         if (up->can.ctrlmode & CAN_CTRLMODE_ONE_SHOT)
991                 ctrlmode |= UCAN_MODE_ONE_SHOT;
992
993         /* Enable this in any case - filtering is down within the
994          * receive path
995          */
996         ctrlmode |= UCAN_MODE_BERR_REPORT;
997         up->ctl_msg_buffer->cmd_start.mode = cpu_to_le16(ctrlmode);
998
999         /* Driver is ready to receive data - start the USB device */
1000         ret = ucan_ctrl_command_out(up, UCAN_COMMAND_START, 0, 2);
1001         if (ret < 0) {
1002                 netdev_err(up->netdev,
1003                            "could not start device, code: %d\n",
1004                            ret);
1005                 goto err_reset;
1006         }
1007
1008         /* Call CAN layer open */
1009         ret = open_candev(netdev);
1010         if (ret)
1011                 goto err_stop;
1012
1013         /* Driver is ready to receive data. Submit RX URBS */
1014         ret = ucan_submit_rx_urbs(up, urbs);
1015         if (ret)
1016                 goto err_stop;
1017
1018         up->can.state = CAN_STATE_ERROR_ACTIVE;
1019
1020         /* Start the network queue */
1021         netif_start_queue(netdev);
1022
1023         return 0;
1024
1025 err_stop:
1026         /* The device have started already stop it */
1027         ret_cleanup = ucan_ctrl_command_out(up, UCAN_COMMAND_STOP, 0, 0);
1028         if (ret_cleanup < 0)
1029                 netdev_err(up->netdev,
1030                            "could not stop device, code: %d\n",
1031                            ret_cleanup);
1032
1033 err_reset:
1034         /* The device might have received data, reset it for
1035          * consistent state
1036          */
1037         ret_cleanup = ucan_ctrl_command_out(up, UCAN_COMMAND_RESET, 0, 0);
1038         if (ret_cleanup < 0)
1039                 netdev_err(up->netdev,
1040                            "could not reset device, code: %d\n",
1041                            ret_cleanup);
1042
1043         /* clean up unsubmitted urbs */
1044         ucan_cleanup_rx_urbs(up, urbs);
1045
1046 err_contexts:
1047         ucan_release_context_array(up);
1048         return ret;
1049 }
1050
1051 static struct urb *ucan_prepare_tx_urb(struct ucan_priv *up,
1052                                        struct ucan_urb_context *context,
1053                                        struct can_frame *cf,
1054                                        u8 echo_index)
1055 {
1056         int mlen;
1057         struct urb *urb;
1058         struct ucan_message_out *m;
1059
1060         /* create a URB, and a buffer for it, and copy the data to the URB */
1061         urb = usb_alloc_urb(0, GFP_ATOMIC);
1062         if (!urb) {
1063                 netdev_err(up->netdev, "no memory left for URBs\n");
1064                 return NULL;
1065         }
1066
1067         m = usb_alloc_coherent(up->udev,
1068                                sizeof(struct ucan_message_out),
1069                                GFP_ATOMIC,
1070                                &urb->transfer_dma);
1071         if (!m) {
1072                 netdev_err(up->netdev, "no memory left for USB buffer\n");
1073                 usb_free_urb(urb);
1074                 return NULL;
1075         }
1076
1077         /* build the USB message */
1078         m->type = UCAN_OUT_TX;
1079         m->msg.can_msg.id = cpu_to_le32(cf->can_id);
1080
1081         if (cf->can_id & CAN_RTR_FLAG) {
1082                 mlen = UCAN_OUT_HDR_SIZE +
1083                         offsetof(struct ucan_can_msg, dlc) +
1084                         sizeof(m->msg.can_msg.dlc);
1085                 m->msg.can_msg.dlc = cf->can_dlc;
1086         } else {
1087                 mlen = UCAN_OUT_HDR_SIZE +
1088                         sizeof(m->msg.can_msg.id) + cf->can_dlc;
1089                 memcpy(m->msg.can_msg.data, cf->data, cf->can_dlc);
1090         }
1091         m->len = cpu_to_le16(mlen);
1092
1093         context->dlc = cf->can_dlc;
1094
1095         m->subtype = echo_index;
1096
1097         /* build the urb */
1098         usb_fill_bulk_urb(urb, up->udev,
1099                           usb_sndbulkpipe(up->udev,
1100                                           up->out_ep_addr),
1101                           m, mlen, ucan_write_bulk_callback, context);
1102         urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1103
1104         return urb;
1105 }
1106
1107 static void ucan_clean_up_tx_urb(struct ucan_priv *up, struct urb *urb)
1108 {
1109         usb_free_coherent(up->udev, sizeof(struct ucan_message_out),
1110                           urb->transfer_buffer, urb->transfer_dma);
1111         usb_free_urb(urb);
1112 }
1113
1114 /* callback when Linux needs to send a can frame */
1115 static netdev_tx_t ucan_start_xmit(struct sk_buff *skb,
1116                                    struct net_device *netdev)
1117 {
1118         unsigned long flags;
1119         int ret;
1120         u8 echo_index;
1121         struct urb *urb;
1122         struct ucan_urb_context *context;
1123         struct ucan_priv *up = netdev_priv(netdev);
1124         struct can_frame *cf = (struct can_frame *)skb->data;
1125
1126         /* check skb */
1127         if (can_dropped_invalid_skb(netdev, skb))
1128                 return NETDEV_TX_OK;
1129
1130         /* allocate a context and slow down tx path, if fifo state is low */
1131         context = ucan_alloc_context(up);
1132         echo_index = context - up->context_array;
1133
1134         if (WARN_ON_ONCE(!context))
1135                 return NETDEV_TX_BUSY;
1136
1137         /* prepare urb for transmission */
1138         urb = ucan_prepare_tx_urb(up, context, cf, echo_index);
1139         if (!urb)
1140                 goto drop;
1141
1142         /* put the skb on can loopback stack */
1143         spin_lock_irqsave(&up->echo_skb_lock, flags);
1144         can_put_echo_skb(skb, up->netdev, echo_index);
1145         spin_unlock_irqrestore(&up->echo_skb_lock, flags);
1146
1147         /* transmit it */
1148         usb_anchor_urb(urb, &up->tx_urbs);
1149         ret = usb_submit_urb(urb, GFP_ATOMIC);
1150
1151         /* cleanup urb */
1152         if (ret) {
1153                 /* on error, clean up */
1154                 usb_unanchor_urb(urb);
1155                 ucan_clean_up_tx_urb(up, urb);
1156                 if (!ucan_release_context(up, context))
1157                         netdev_err(up->netdev,
1158                                    "xmit err: failed to release context\n");
1159
1160                 /* remove the skb from the echo stack - this also
1161                  * frees the skb
1162                  */
1163                 spin_lock_irqsave(&up->echo_skb_lock, flags);
1164                 can_free_echo_skb(up->netdev, echo_index);
1165                 spin_unlock_irqrestore(&up->echo_skb_lock, flags);
1166
1167                 if (ret == -ENODEV) {
1168                         netif_device_detach(up->netdev);
1169                 } else {
1170                         netdev_warn(up->netdev,
1171                                     "xmit err: failed to submit urb %d\n",
1172                                     ret);
1173                         up->netdev->stats.tx_dropped++;
1174                 }
1175                 return NETDEV_TX_OK;
1176         }
1177
1178         netif_trans_update(netdev);
1179
1180         /* release ref, as we do not need the urb anymore */
1181         usb_free_urb(urb);
1182
1183         return NETDEV_TX_OK;
1184
1185 drop:
1186         if (!ucan_release_context(up, context))
1187                 netdev_err(up->netdev,
1188                            "xmit drop: failed to release context\n");
1189         dev_kfree_skb(skb);
1190         up->netdev->stats.tx_dropped++;
1191
1192         return NETDEV_TX_OK;
1193 }
1194
1195 /* Device goes down
1196  *
1197  * Clean up used resources
1198  */
1199 static int ucan_close(struct net_device *netdev)
1200 {
1201         int ret;
1202         struct ucan_priv *up = netdev_priv(netdev);
1203
1204         up->can.state = CAN_STATE_STOPPED;
1205
1206         /* stop sending data */
1207         usb_kill_anchored_urbs(&up->tx_urbs);
1208
1209         /* stop receiving data */
1210         usb_kill_anchored_urbs(&up->rx_urbs);
1211
1212         /* stop and reset can device */
1213         ret = ucan_ctrl_command_out(up, UCAN_COMMAND_STOP, 0, 0);
1214         if (ret < 0)
1215                 netdev_err(up->netdev,
1216                            "could not stop device, code: %d\n",
1217                            ret);
1218
1219         ret = ucan_ctrl_command_out(up, UCAN_COMMAND_RESET, 0, 0);
1220         if (ret < 0)
1221                 netdev_err(up->netdev,
1222                            "could not reset device, code: %d\n",
1223                            ret);
1224
1225         netif_stop_queue(netdev);
1226
1227         ucan_release_context_array(up);
1228
1229         close_candev(up->netdev);
1230         return 0;
1231 }
1232
1233 /* CAN driver callbacks */
1234 static const struct net_device_ops ucan_netdev_ops = {
1235         .ndo_open = ucan_open,
1236         .ndo_stop = ucan_close,
1237         .ndo_start_xmit = ucan_start_xmit,
1238         .ndo_change_mtu = can_change_mtu,
1239 };
1240
1241 /* Request to set bittiming
1242  *
1243  * This function generates an USB set bittiming message and transmits
1244  * it to the device
1245  */
1246 static int ucan_set_bittiming(struct net_device *netdev)
1247 {
1248         int ret;
1249         struct ucan_priv *up = netdev_priv(netdev);
1250         struct ucan_ctl_cmd_set_bittiming *cmd_set_bittiming;
1251
1252         cmd_set_bittiming = &up->ctl_msg_buffer->cmd_set_bittiming;
1253         cmd_set_bittiming->tq = cpu_to_le32(up->can.bittiming.tq);
1254         cmd_set_bittiming->brp = cpu_to_le16(up->can.bittiming.brp);
1255         cmd_set_bittiming->sample_point =
1256             cpu_to_le16(up->can.bittiming.sample_point);
1257         cmd_set_bittiming->prop_seg = up->can.bittiming.prop_seg;
1258         cmd_set_bittiming->phase_seg1 = up->can.bittiming.phase_seg1;
1259         cmd_set_bittiming->phase_seg2 = up->can.bittiming.phase_seg2;
1260         cmd_set_bittiming->sjw = up->can.bittiming.sjw;
1261
1262         ret = ucan_ctrl_command_out(up, UCAN_COMMAND_SET_BITTIMING, 0,
1263                                     sizeof(*cmd_set_bittiming));
1264         return (ret < 0) ? ret : 0;
1265 }
1266
1267 /* Restart the device to get it out of BUS-OFF state.
1268  * Called when the user runs "ip link set can1 type can restart".
1269  */
1270 static int ucan_set_mode(struct net_device *netdev, enum can_mode mode)
1271 {
1272         int ret;
1273         unsigned long flags;
1274         struct ucan_priv *up = netdev_priv(netdev);
1275
1276         switch (mode) {
1277         case CAN_MODE_START:
1278                 netdev_dbg(up->netdev, "restarting device\n");
1279
1280                 ret = ucan_ctrl_command_out(up, UCAN_COMMAND_RESTART, 0, 0);
1281                 up->can.state = CAN_STATE_ERROR_ACTIVE;
1282
1283                 /* check if queue can be restarted,
1284                  * up->available_tx_urbs must be protected by the
1285                  * lock
1286                  */
1287                 spin_lock_irqsave(&up->context_lock, flags);
1288
1289                 if (up->available_tx_urbs > 0)
1290                         netif_wake_queue(up->netdev);
1291
1292                 spin_unlock_irqrestore(&up->context_lock, flags);
1293
1294                 return ret;
1295         default:
1296                 return -EOPNOTSUPP;
1297         }
1298 }
1299
1300 /* Probe the device, reset it and gather general device information */
1301 static int ucan_probe(struct usb_interface *intf,
1302                       const struct usb_device_id *id)
1303 {
1304         int ret;
1305         int i;
1306         u32 protocol_version;
1307         struct usb_device *udev;
1308         struct net_device *netdev;
1309         struct usb_host_interface *iface_desc;
1310         struct ucan_priv *up;
1311         struct usb_endpoint_descriptor *ep;
1312         u16 in_ep_size;
1313         u16 out_ep_size;
1314         u8 in_ep_addr;
1315         u8 out_ep_addr;
1316         union ucan_ctl_payload *ctl_msg_buffer;
1317         char firmware_str[sizeof(union ucan_ctl_payload) + 1];
1318
1319         udev = interface_to_usbdev(intf);
1320
1321         /* Stage 1 - Interface Parsing
1322          * ---------------------------
1323          *
1324          * Identifie the device USB interface descriptor and its
1325          * endpoints. Probing is aborted on errors.
1326          */
1327
1328         /* check if the interface is sane */
1329         iface_desc = intf->cur_altsetting;
1330         if (!iface_desc)
1331                 return -ENODEV;
1332
1333         dev_info(&udev->dev,
1334                  "%s: probing device on interface #%d\n",
1335                  UCAN_DRIVER_NAME,
1336                  iface_desc->desc.bInterfaceNumber);
1337
1338         /* interface sanity check */
1339         if (iface_desc->desc.bNumEndpoints != 2) {
1340                 dev_err(&udev->dev,
1341                         "%s: invalid EP count (%d)",
1342                         UCAN_DRIVER_NAME, iface_desc->desc.bNumEndpoints);
1343                 goto err_firmware_needs_update;
1344         }
1345
1346         /* check interface endpoints */
1347         in_ep_addr = 0;
1348         out_ep_addr = 0;
1349         in_ep_size = 0;
1350         out_ep_size = 0;
1351         for (i = 0; i < iface_desc->desc.bNumEndpoints; i++) {
1352                 ep = &iface_desc->endpoint[i].desc;
1353
1354                 if (((ep->bEndpointAddress & USB_ENDPOINT_DIR_MASK) != 0) &&
1355                     ((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
1356                      USB_ENDPOINT_XFER_BULK)) {
1357                         /* In Endpoint */
1358                         in_ep_addr = ep->bEndpointAddress;
1359                         in_ep_addr &= USB_ENDPOINT_NUMBER_MASK;
1360                         in_ep_size = le16_to_cpu(ep->wMaxPacketSize);
1361                 } else if (((ep->bEndpointAddress & USB_ENDPOINT_DIR_MASK) ==
1362                             0) &&
1363                            ((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
1364                             USB_ENDPOINT_XFER_BULK)) {
1365                         /* Out Endpoint */
1366                         out_ep_addr = ep->bEndpointAddress;
1367                         out_ep_addr &= USB_ENDPOINT_NUMBER_MASK;
1368                         out_ep_size = le16_to_cpu(ep->wMaxPacketSize);
1369                 }
1370         }
1371
1372         /* check if interface is sane */
1373         if (!in_ep_addr || !out_ep_addr) {
1374                 dev_err(&udev->dev, "%s: invalid endpoint configuration\n",
1375                         UCAN_DRIVER_NAME);
1376                 goto err_firmware_needs_update;
1377         }
1378         if (in_ep_size < sizeof(struct ucan_message_in)) {
1379                 dev_err(&udev->dev, "%s: invalid in_ep MaxPacketSize\n",
1380                         UCAN_DRIVER_NAME);
1381                 goto err_firmware_needs_update;
1382         }
1383         if (out_ep_size < sizeof(struct ucan_message_out)) {
1384                 dev_err(&udev->dev, "%s: invalid out_ep MaxPacketSize\n",
1385                         UCAN_DRIVER_NAME);
1386                 goto err_firmware_needs_update;
1387         }
1388
1389         /* Stage 2 - Device Identification
1390          * -------------------------------
1391          *
1392          * The device interface seems to be a ucan device. Do further
1393          * compatibility checks. On error probing is aborted, on
1394          * success this stage leaves the ctl_msg_buffer with the
1395          * reported contents of a GET_INFO command (supported
1396          * bittimings, tx_fifo depth). This information is used in
1397          * Stage 3 for the final driver initialisation.
1398          */
1399
1400         /* Prepare Memory for control transferes */
1401         ctl_msg_buffer = devm_kzalloc(&udev->dev,
1402                                       sizeof(union ucan_ctl_payload),
1403                                       GFP_KERNEL);
1404         if (!ctl_msg_buffer) {
1405                 dev_err(&udev->dev,
1406                         "%s: failed to allocate control pipe memory\n",
1407                         UCAN_DRIVER_NAME);
1408                 return -ENOMEM;
1409         }
1410
1411         /* get protocol version
1412          *
1413          * note: ucan_ctrl_command_* wrappers cannot be used yet
1414          * because `up` is initialised in Stage 3
1415          */
1416         ret = usb_control_msg(udev,
1417                               usb_rcvctrlpipe(udev, 0),
1418                               UCAN_COMMAND_GET,
1419                               USB_DIR_IN | USB_TYPE_VENDOR |
1420                                         USB_RECIP_INTERFACE,
1421                               UCAN_COMMAND_GET_PROTOCOL_VERSION,
1422                               iface_desc->desc.bInterfaceNumber,
1423                               ctl_msg_buffer,
1424                               sizeof(union ucan_ctl_payload),
1425                               UCAN_USB_CTL_PIPE_TIMEOUT);
1426
1427         /* older firmware version do not support this command - those
1428          * are not supported by this drive
1429          */
1430         if (ret != 4) {
1431                 dev_err(&udev->dev,
1432                         "%s: could not read protocol version, ret=%d\n",
1433                         UCAN_DRIVER_NAME, ret);
1434                 if (ret >= 0)
1435                         ret = -EINVAL;
1436                 goto err_firmware_needs_update;
1437         }
1438
1439         /* this driver currently supports protocol version 3 only */
1440         protocol_version =
1441                 le32_to_cpu(ctl_msg_buffer->cmd_get_protocol_version.version);
1442         if (protocol_version < UCAN_PROTOCOL_VERSION_MIN ||
1443             protocol_version > UCAN_PROTOCOL_VERSION_MAX) {
1444                 dev_err(&udev->dev,
1445                         "%s: device protocol version %d is not supported\n",
1446                         UCAN_DRIVER_NAME, protocol_version);
1447                 goto err_firmware_needs_update;
1448         }
1449
1450         /* request the device information and store it in ctl_msg_buffer
1451          *
1452          * note: ucan_ctrl_command_* wrappers connot be used yet
1453          * because `up` is initialised in Stage 3
1454          */
1455         ret = usb_control_msg(udev,
1456                               usb_rcvctrlpipe(udev, 0),
1457                               UCAN_COMMAND_GET,
1458                               USB_DIR_IN | USB_TYPE_VENDOR |
1459                                         USB_RECIP_INTERFACE,
1460                               UCAN_COMMAND_GET_INFO,
1461                               iface_desc->desc.bInterfaceNumber,
1462                               ctl_msg_buffer,
1463                               sizeof(ctl_msg_buffer->cmd_get_device_info),
1464                               UCAN_USB_CTL_PIPE_TIMEOUT);
1465
1466         if (ret < 0) {
1467                 dev_err(&udev->dev, "%s: failed to retrieve device info\n",
1468                         UCAN_DRIVER_NAME);
1469                 goto err_firmware_needs_update;
1470         }
1471         if (ret < sizeof(ctl_msg_buffer->cmd_get_device_info)) {
1472                 dev_err(&udev->dev, "%s: device reported invalid device info\n",
1473                         UCAN_DRIVER_NAME);
1474                 goto err_firmware_needs_update;
1475         }
1476         if (ctl_msg_buffer->cmd_get_device_info.tx_fifo == 0) {
1477                 dev_err(&udev->dev,
1478                         "%s: device reported invalid tx-fifo size\n",
1479                         UCAN_DRIVER_NAME);
1480                 goto err_firmware_needs_update;
1481         }
1482
1483         /* Stage 3 - Driver Initialisation
1484          * -------------------------------
1485          *
1486          * Register device to Linux, prepare private structures and
1487          * reset the device.
1488          */
1489
1490         /* allocate driver resources */
1491         netdev = alloc_candev(sizeof(struct ucan_priv),
1492                               ctl_msg_buffer->cmd_get_device_info.tx_fifo);
1493         if (!netdev) {
1494                 dev_err(&udev->dev,
1495                         "%s: cannot allocate candev\n", UCAN_DRIVER_NAME);
1496                 return -ENOMEM;
1497         }
1498
1499         up = netdev_priv(netdev);
1500
1501         /* initialze data */
1502         up->udev = udev;
1503         up->intf = intf;
1504         up->netdev = netdev;
1505         up->intf_index = iface_desc->desc.bInterfaceNumber;
1506         up->in_ep_addr = in_ep_addr;
1507         up->out_ep_addr = out_ep_addr;
1508         up->in_ep_size = in_ep_size;
1509         up->ctl_msg_buffer = ctl_msg_buffer;
1510         up->context_array = NULL;
1511         up->available_tx_urbs = 0;
1512
1513         up->can.state = CAN_STATE_STOPPED;
1514         up->can.bittiming_const = &up->device_info.bittiming_const;
1515         up->can.do_set_bittiming = ucan_set_bittiming;
1516         up->can.do_set_mode = &ucan_set_mode;
1517         spin_lock_init(&up->context_lock);
1518         spin_lock_init(&up->echo_skb_lock);
1519         netdev->netdev_ops = &ucan_netdev_ops;
1520
1521         usb_set_intfdata(intf, up);
1522         SET_NETDEV_DEV(netdev, &intf->dev);
1523
1524         /* parse device information
1525          * the data retrieved in Stage 2 is still available in
1526          * up->ctl_msg_buffer
1527          */
1528         ucan_parse_device_info(up, &ctl_msg_buffer->cmd_get_device_info);
1529
1530         /* just print some device information - if available */
1531         ret = ucan_device_request_in(up, UCAN_DEVICE_GET_FW_STRING, 0,
1532                                      sizeof(union ucan_ctl_payload));
1533         if (ret > 0) {
1534                 /* copy string while ensuring zero terminiation */
1535                 strncpy(firmware_str, up->ctl_msg_buffer->raw,
1536                         sizeof(union ucan_ctl_payload));
1537                 firmware_str[sizeof(union ucan_ctl_payload)] = '\0';
1538         } else {
1539                 strcpy(firmware_str, "unknown");
1540         }
1541
1542         /* device is compatible, reset it */
1543         ret = ucan_ctrl_command_out(up, UCAN_COMMAND_RESET, 0, 0);
1544         if (ret < 0)
1545                 goto err_free_candev;
1546
1547         init_usb_anchor(&up->rx_urbs);
1548         init_usb_anchor(&up->tx_urbs);
1549
1550         up->can.state = CAN_STATE_STOPPED;
1551
1552         /* register the device */
1553         ret = register_candev(netdev);
1554         if (ret)
1555                 goto err_free_candev;
1556
1557         /* initialisation complete, log device info */
1558         netdev_info(up->netdev, "registered device\n");
1559         netdev_info(up->netdev, "firmware string: %s\n", firmware_str);
1560
1561         /* success */
1562         return 0;
1563
1564 err_free_candev:
1565         free_candev(netdev);
1566         return ret;
1567
1568 err_firmware_needs_update:
1569         dev_err(&udev->dev,
1570                 "%s: probe failed; try to update the device firmware\n",
1571                 UCAN_DRIVER_NAME);
1572         return -ENODEV;
1573 }
1574
1575 /* disconnect the device */
1576 static void ucan_disconnect(struct usb_interface *intf)
1577 {
1578         struct ucan_priv *up = usb_get_intfdata(intf);
1579
1580         usb_set_intfdata(intf, NULL);
1581
1582         if (up) {
1583                 unregister_netdev(up->netdev);
1584                 free_candev(up->netdev);
1585         }
1586 }
1587
1588 static struct usb_device_id ucan_table[] = {
1589         /* Mule (soldered onto compute modules) */
1590         {USB_DEVICE_INTERFACE_NUMBER(0x2294, 0x425a, 0)},
1591         /* Seal (standalone USB stick) */
1592         {USB_DEVICE_INTERFACE_NUMBER(0x2294, 0x425b, 0)},
1593         {} /* Terminating entry */
1594 };
1595
1596 MODULE_DEVICE_TABLE(usb, ucan_table);
1597 /* driver callbacks */
1598 static struct usb_driver ucan_driver = {
1599         .name = UCAN_DRIVER_NAME,
1600         .probe = ucan_probe,
1601         .disconnect = ucan_disconnect,
1602         .id_table = ucan_table,
1603 };
1604
1605 module_usb_driver(ucan_driver);
1606
1607 MODULE_LICENSE("GPL v2");
1608 MODULE_AUTHOR("Martin Elshuber <martin.elshuber@theobroma-systems.com>");
1609 MODULE_AUTHOR("Jakob Unterwurzacher <jakob.unterwurzacher@theobroma-systems.com>");
1610 MODULE_DESCRIPTION("Driver for Theobroma Systems UCAN devices");