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
10 * The USB Device uses three Endpoints:
12 * CONTROL Endpoint: Is used the setup the device (start, stop,
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.
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
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
65 * offset(m[n+1]) := offset(m[n]) + (m[n].len + 3) & 3
68 * offset(m[n]) % 4 <=> 0
71 /* Device Global Commands */
73 UCAN_DEVICE_GET_FW_STRING
= 0,
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
92 /* clear or disable hardware filter - subcmd defines which of the two */
93 UCAN_COMMAND_FILTER
= 6,
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.
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 */
113 UCAN_COMMAND_GET_INFO
= 0,
114 UCAN_COMMAND_GET_PROTOCOL_VERSION
= 1,
117 /* UCAN_COMMAND_FILTER subcommands */
119 UCAN_FILTER_CLEAR
= 0,
120 UCAN_FILTER_DISABLE
= 1,
121 UCAN_FILTER_ENABLE
= 2,
124 /* OUT endpoint message types */
126 UCAN_OUT_TX
= 2, /* transmit a CAN frame */
129 /* IN endpoint message types */
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_* */
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 */
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... */
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 */
165 struct ucan_ctl_cmd_get_protocol_version
{
169 union ucan_ctl_payload
{
171 * bmRequest == UCAN_COMMAND_START
173 struct ucan_ctl_cmd_start cmd_start
;
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
;
192 UCAN_TX_COMPLETE_SUCCESS
= BIT(0),
195 /* Transmission Complete within ucan_message_in */
196 struct ucan_tx_complete_entry_t
{
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)
211 u8 data
[CAN_MAX_DLEN
]; /* Data of CAN frames */
212 u8 dlc
; /* RTR dlc */
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 */
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
;
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 */
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
;
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))
259 /* Context Information for transmission URBs */
260 struct ucan_urb_context
{
261 struct ucan_priv
*up
;
266 /* Information reported by the USB device */
267 struct ucan_device_info
{
268 struct can_bittiming_const bittiming_const
;
272 /* Driver private data */
274 /* must be the first member */
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 */
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
);
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
)
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
)
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
),
336 if (!up
->context_array
) {
337 netdev_err(up
->netdev
,
338 "Not enough memory to allocate tx contexts\n");
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
;
353 static struct ucan_urb_context
*ucan_alloc_context(struct ucan_priv
*up
)
357 struct ucan_urb_context
*ret
= NULL
;
359 if (WARN_ON_ONCE(!up
->context_array
))
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
) {
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
);
380 spin_unlock_irqrestore(&up
->context_lock
, flags
);
384 static bool ucan_release_context(struct ucan_priv
*up
,
385 struct ucan_urb_context
*ctx
)
390 if (WARN_ON_ONCE(!up
->context_array
))
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
++;
408 spin_unlock_irqrestore(&up
->context_lock
, flags
);
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),
418 USB_DIR_OUT
| USB_TYPE_VENDOR
|
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),
433 USB_DIR_IN
| USB_TYPE_VENDOR
| USB_RECIP_DEVICE
,
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
;
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
,
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
++;
528 net_stats
->rx_errors
++;
531 /* no state change - we are done */
532 if (up
->can
.state
== new_state
)
535 /* we switched into a better state */
536 if (up
->can
.state
> new_state
) {
537 up
->can
.state
= new_state
;
541 /* we switched into a worse state */
542 up
->can
.state
= new_state
;
544 case CAN_STATE_BUS_OFF
:
545 can_stats
->bus_off
++;
546 can_bus_off(up
->netdev
);
548 case CAN_STATE_ERROR_PASSIVE
:
549 can_stats
->error_passive
++;
551 case CAN_STATE_ERROR_WARNING
:
552 can_stats
->error_warning
++;
560 /* Callback on reception of a can frame via the IN endpoint
562 * This function allocates an skb and transferres it to the Linux
565 static void ucan_rx_can_msg(struct ucan_priv
*up
, struct ucan_message_in
*m
)
569 struct can_frame
*cf
;
571 struct net_device_stats
*stats
= &up
->netdev
->stats
;
573 /* get the contents of the length field */
574 len
= le16_to_cpu(m
->len
);
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
);
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
) &&
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
;
598 canid_mask
|= CAN_SFF_MASK
;
600 if (canid
& ~canid_mask
)
601 netdev_warn(up
->netdev
,
602 "unexpected bits set (canid %x, mask %x)",
609 skb
= alloc_can_skb(up
->netdev
, &cf
);
613 /* fill the can frame */
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 */
625 stats
->rx_bytes
+= cf
->can_dlc
;
627 /* pass it to Linux */
631 /* callback indicating completed transmission */
632 static void ucan_tx_complete_msg(struct ucan_priv
*up
,
633 struct ucan_message_in
*m
)
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");
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",
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
))
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
);
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
)
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
,
699 urb
->transfer_buffer
,
704 /* check URB status */
705 switch (urb
->status
) {
713 /* urb is not resubmitted -> free dma data */
714 usb_free_coherent(up
->udev
,
716 urb
->transfer_buffer
,
718 netdev_dbg(up
->netdev
, "not resubmitting urb; status: %d\n",
726 if (!netif_device_present(netdev
))
729 /* iterate over input */
731 while (pos
< urb
->actual_length
) {
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",
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",
752 print_hex_dump(KERN_WARNING
,
757 urb
->transfer_buffer
,
766 ucan_rx_can_msg(up
, m
);
768 case UCAN_IN_TX_COMPLETE
:
769 ucan_tx_complete_msg(up
, m
);
772 netdev_warn(up
->netdev
,
773 "invalid message (type; t:%d)\n",
778 /* proceed to next message */
780 /* align to 4 byte boundary */
781 pos
= round_up(pos
, 4);
785 /* resubmit urb when done */
786 usb_fill_bulk_urb(urb
, up
->udev
,
787 usb_rcvbulkpipe(up
->udev
,
789 urb
->transfer_buffer
,
791 ucan_read_bulk_callback
,
794 usb_anchor_urb(urb
, &up
->rx_urbs
);
795 ret
= usb_submit_urb(urb
, GFP_ATOMIC
);
798 netdev_err(up
->netdev
,
799 "failed resubmitting read bulk urb: %d\n",
802 usb_unanchor_urb(urb
);
803 usb_free_coherent(up
->udev
,
805 urb
->transfer_buffer
,
809 netif_device_detach(netdev
);
813 /* callback after transmission of a USB message */
814 static void ucan_write_bulk_callback(struct urb
*urb
)
817 struct ucan_priv
*up
;
818 struct ucan_urb_context
*context
= urb
->context
;
820 /* get the urb context */
821 if (WARN_ON_ONCE(!context
))
824 /* free up our allocated buffer */
825 usb_free_coherent(urb
->dev
,
826 sizeof(struct ucan_message_out
),
827 urb
->transfer_buffer
,
831 if (WARN_ON_ONCE(!up
))
835 if (!netif_device_present(up
->netdev
))
838 /* transmission failed (USB - the device will not send a TX complete) */
840 netdev_warn(up
->netdev
,
841 "failed to transmit USB message to device: %d\n",
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
)
862 for (i
= 0; i
< UCAN_MAX_RX_URBS
; i
++) {
864 usb_unanchor_urb(urbs
[i
]);
865 usb_free_coherent(up
->udev
,
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
,
881 memset(urbs
, 0, sizeof(*urbs
) * UCAN_MAX_RX_URBS
);
883 for (i
= 0; i
< UCAN_MAX_RX_URBS
; i
++) {
886 urbs
[i
] = usb_alloc_urb(0, GFP_KERNEL
);
890 buf
= usb_alloc_coherent(up
->udev
,
892 GFP_KERNEL
, &urbs
[i
]->transfer_dma
);
894 /* cleanup this urb */
895 usb_free_urb(urbs
[i
]);
900 usb_fill_bulk_urb(urbs
[i
], up
->udev
,
901 usb_rcvbulkpipe(up
->udev
,
905 ucan_read_bulk_callback
,
908 urbs
[i
]->transfer_flags
|= URB_NO_TRANSFER_DMA_MAP
;
910 usb_anchor_urb(urbs
[i
], &up
->rx_urbs
);
915 /* cleanup other unsubmitted urbs */
916 ucan_cleanup_rx_urbs(up
, urbs
);
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
)
929 /* Iterate over all urbs to submit. On success remove the urb
932 for (i
= 0; i
< UCAN_MAX_RX_URBS
; i
++) {
933 ret
= usb_submit_urb(urbs
[i
], GFP_KERNEL
);
935 netdev_err(up
->netdev
,
936 "could not submit urb; code: %d\n",
941 /* Anchor URB and drop reference, USB core will take
944 usb_free_urb(urbs
[i
]);
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
);
959 /* Open the network device */
960 static int ucan_open(struct net_device
*netdev
)
962 int ret
, ret_cleanup
;
964 struct urb
*urbs
[UCAN_MAX_RX_URBS
];
965 struct ucan_priv
*up
= netdev_priv(netdev
);
967 ret
= ucan_alloc_context_array(up
);
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
);
978 /* Check the control mode */
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
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);
998 netdev_err(up
->netdev
,
999 "could not start device, code: %d\n",
1004 /* Call CAN layer open */
1005 ret
= open_candev(netdev
);
1009 /* Driver is ready to receive data. Submit RX URBS */
1010 ret
= ucan_submit_rx_urbs(up
, urbs
);
1014 up
->can
.state
= CAN_STATE_ERROR_ACTIVE
;
1016 /* Start the network queue */
1017 netif_start_queue(netdev
);
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",
1030 /* The device might have received data, reset it for
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",
1039 /* clean up unsubmitted urbs */
1040 ucan_cleanup_rx_urbs(up
, urbs
);
1043 ucan_release_context_array(up
);
1047 static struct urb
*ucan_prepare_tx_urb(struct ucan_priv
*up
,
1048 struct ucan_urb_context
*context
,
1049 struct can_frame
*cf
,
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
);
1059 netdev_err(up
->netdev
, "no memory left for URBs\n");
1063 m
= usb_alloc_coherent(up
->udev
,
1064 sizeof(struct ucan_message_out
),
1066 &urb
->transfer_dma
);
1068 netdev_err(up
->netdev
, "no memory left for USB buffer\n");
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
;
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
;
1094 usb_fill_bulk_urb(urb
, up
->udev
,
1095 usb_sndbulkpipe(up
->udev
,
1097 m
, mlen
, ucan_write_bulk_callback
, context
);
1098 urb
->transfer_flags
|= URB_NO_TRANSFER_DMA_MAP
;
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
);
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
;
1118 struct ucan_urb_context
*context
;
1119 struct ucan_priv
*up
= netdev_priv(netdev
);
1120 struct can_frame
*cf
= (struct can_frame
*)skb
->data
;
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
);
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
);
1144 usb_anchor_urb(urb
, &up
->tx_urbs
);
1145 ret
= usb_submit_urb(urb
, GFP_ATOMIC
);
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
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
);
1166 netdev_warn(up
->netdev
,
1167 "xmit err: failed to submit urb %d\n",
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 */
1179 return NETDEV_TX_OK
;
1182 if (!ucan_release_context(up
, context
))
1183 netdev_err(up
->netdev
,
1184 "xmit drop: failed to release context\n");
1186 up
->netdev
->stats
.tx_dropped
++;
1188 return NETDEV_TX_OK
;
1193 * Clean up used resources
1195 static int ucan_close(struct net_device
*netdev
)
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);
1211 netdev_err(up
->netdev
,
1212 "could not stop device, code: %d\n",
1215 ret
= ucan_ctrl_command_out(up
, UCAN_COMMAND_RESET
, 0, 0);
1217 netdev_err(up
->netdev
,
1218 "could not reset device, code: %d\n",
1221 netif_stop_queue(netdev
);
1223 ucan_release_context_array(up
);
1225 close_candev(up
->netdev
);
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
1242 static int ucan_set_bittiming(struct net_device
*netdev
)
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
)
1269 unsigned long flags
;
1270 struct ucan_priv
*up
= netdev_priv(netdev
);
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
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
);
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
)
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
;
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
;
1329 dev_info(&udev
->dev
,
1330 "%s: probing device on interface #%d\n",
1332 iface_desc
->desc
.bInterfaceNumber
);
1334 /* interface sanity check */
1335 if (iface_desc
->desc
.bNumEndpoints
!= 2) {
1337 "%s: invalid EP count (%d)",
1338 UCAN_DRIVER_NAME
, iface_desc
->desc
.bNumEndpoints
);
1339 goto err_firmware_needs_update
;
1342 /* check interface endpoints */
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
)) {
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
) ==
1359 ((ep
->bmAttributes
& USB_ENDPOINT_XFERTYPE_MASK
) ==
1360 USB_ENDPOINT_XFER_BULK
)) {
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",
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",
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",
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
),
1400 if (!ctl_msg_buffer
) {
1402 "%s: failed to allocate control pipe memory\n",
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),
1415 USB_DIR_IN
| USB_TYPE_VENDOR
|
1416 USB_RECIP_INTERFACE
,
1417 UCAN_COMMAND_GET_PROTOCOL_VERSION
,
1418 iface_desc
->desc
.bInterfaceNumber
,
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
1428 "%s: could not read protocol version, ret=%d\n",
1429 UCAN_DRIVER_NAME
, ret
);
1432 goto err_firmware_needs_update
;
1435 /* this driver currently supports protocol version 3 only */
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
) {
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),
1454 USB_DIR_IN
| USB_TYPE_VENDOR
|
1455 USB_RECIP_INTERFACE
,
1456 UCAN_COMMAND_GET_INFO
,
1457 iface_desc
->desc
.bInterfaceNumber
,
1459 sizeof(ctl_msg_buffer
->cmd_get_device_info
),
1460 UCAN_USB_CTL_PIPE_TIMEOUT
);
1463 dev_err(&udev
->dev
, "%s: failed to retrieve device info\n",
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",
1470 goto err_firmware_needs_update
;
1472 if (ctl_msg_buffer
->cmd_get_device_info
.tx_fifo
== 0) {
1474 "%s: device reported invalid tx-fifo size\n",
1476 goto err_firmware_needs_update
;
1479 /* Stage 3 - Driver Initialisation
1480 * -------------------------------
1482 * Register device to Linux, prepare private structures and
1486 /* allocate driver resources */
1487 netdev
= alloc_candev(sizeof(struct ucan_priv
),
1488 ctl_msg_buffer
->cmd_get_device_info
.tx_fifo
);
1491 "%s: cannot allocate candev\n", UCAN_DRIVER_NAME
);
1495 up
= netdev_priv(netdev
);
1497 /* initialze data */
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
));
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';
1535 strcpy(firmware_str
, "unknown");
1538 /* device is compatible, reset it */
1539 ret
= ucan_ctrl_command_out(up
, UCAN_COMMAND_RESET
, 0, 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
);
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
);
1561 free_candev(netdev
);
1564 err_firmware_needs_update
:
1566 "%s: probe failed; try to update the device firmware\n",
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
);
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");