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