1 /* SPDX-License-Identifier: GPL-2.0 */
2 /* Parts of this driver are based on the following:
3 * - Kvaser linux leaf driver (version 4.78)
4 * - CAN driver for esd CAN-USB/2
5 * - Kvaser linux usbcanII driver (version 5.3)
6 * - Kvaser linux mhydra driver (version 5.24)
8 * Copyright (C) 2002-2018 KVASER AB, Sweden. All rights reserved.
9 * Copyright (C) 2010 Matthias Fuchs <matthias.fuchs@esd.eu>, esd gmbh
10 * Copyright (C) 2012 Olivier Sobrie <olivier@sobrie.be>
11 * Copyright (C) 2015 Valeo S.A.
17 /* Kvaser USB CAN dongles are divided into three major platforms:
18 * - Hydra: Running firmware labeled as 'mhydra'
19 * - Leaf: Based on Renesas M32C or Freescale i.MX28, running firmware labeled
21 * - UsbcanII: Based on Renesas M16C, running firmware labeled as 'helios'
24 #include <linux/completion.h>
25 #include <linux/spinlock.h>
26 #include <linux/types.h>
27 #include <linux/usb.h>
29 #include <linux/can.h>
30 #include <linux/can/dev.h>
32 #define KVASER_USB_MAX_RX_URBS 4
33 #define KVASER_USB_MAX_TX_URBS 128
34 #define KVASER_USB_TIMEOUT 1000 /* msecs */
35 #define KVASER_USB_RX_BUFFER_SIZE 3072
36 #define KVASER_USB_MAX_NET_DEVICES 5
38 /* USB devices features */
39 #define KVASER_USB_HAS_SILENT_MODE BIT(0)
40 #define KVASER_USB_HAS_TXRX_ERRORS BIT(1)
42 /* Device capabilities */
43 #define KVASER_USB_CAP_BERR_CAP 0x01
44 #define KVASER_USB_CAP_EXT_CAP 0x02
45 #define KVASER_USB_HYDRA_CAP_EXT_CMD 0x04
47 struct kvaser_usb_dev_cfg
;
49 enum kvaser_usb_leaf_family
{
54 #define KVASER_USB_HYDRA_MAX_CMD_LEN 128
55 struct kvaser_usb_dev_card_data_hydra
{
56 u8 channel_to_he
[KVASER_USB_MAX_NET_DEVICES
];
58 spinlock_t transid_lock
; /* lock for transid */
60 /* lock for usb_rx_leftover and usb_rx_leftover_len */
61 spinlock_t usb_rx_leftover_lock
;
62 u8 usb_rx_leftover
[KVASER_USB_HYDRA_MAX_CMD_LEN
];
63 u8 usb_rx_leftover_len
;
65 struct kvaser_usb_dev_card_data
{
66 u32 ctrlmode_supported
;
70 enum kvaser_usb_leaf_family family
;
72 struct kvaser_usb_dev_card_data_hydra hydra
;
76 /* Context for an outstanding, not yet ACKed, transmission */
77 struct kvaser_usb_tx_urb_context
{
78 struct kvaser_usb_net_priv
*priv
;
84 struct usb_device
*udev
;
85 struct usb_interface
*intf
;
86 struct kvaser_usb_net_priv
*nets
[KVASER_USB_MAX_NET_DEVICES
];
87 const struct kvaser_usb_dev_ops
*ops
;
88 const struct kvaser_usb_dev_cfg
*cfg
;
90 struct usb_endpoint_descriptor
*bulk_in
, *bulk_out
;
91 struct usb_anchor rx_submitted
;
93 /* @max_tx_urbs: Firmware-reported maximum number of outstanding,
94 * not yet ACKed, transmissions on this device. This value is
95 * also used as a sentinel for marking free tx contexts.
98 unsigned int nchannels
;
99 unsigned int max_tx_urbs
;
100 struct kvaser_usb_dev_card_data card_data
;
103 void *rxbuf
[KVASER_USB_MAX_RX_URBS
];
104 dma_addr_t rxbuf_dma
[KVASER_USB_MAX_RX_URBS
];
107 struct kvaser_usb_net_priv
{
109 struct can_berr_counter bec
;
111 struct kvaser_usb
*dev
;
112 struct net_device
*netdev
;
115 struct completion start_comp
, stop_comp
, flush_comp
;
116 struct usb_anchor tx_submitted
;
118 spinlock_t tx_contexts_lock
; /* lock for active_tx_contexts */
119 int active_tx_contexts
;
120 struct kvaser_usb_tx_urb_context tx_contexts
[];
124 * struct kvaser_usb_dev_ops - Device specific functions
125 * @dev_set_mode: used for can.do_set_mode
126 * @dev_set_bittiming: used for can.do_set_bittiming
127 * @dev_set_data_bittiming: used for can.do_set_data_bittiming
128 * @dev_get_berr_counter: used for can.do_get_berr_counter
130 * @dev_setup_endpoints: setup USB in and out endpoints
131 * @dev_init_card: initialize card
132 * @dev_get_software_info: get software info
133 * @dev_get_software_details: get software details
134 * @dev_get_card_info: get card info
135 * @dev_get_capabilities: discover device capabilities
137 * @dev_set_opt_mode: set ctrlmod
138 * @dev_start_chip: start the CAN controller
139 * @dev_stop_chip: stop the CAN controller
140 * @dev_reset_chip: reset the CAN controller
141 * @dev_flush_queue: flush outstanding CAN messages
142 * @dev_read_bulk_callback: handle incoming commands
143 * @dev_frame_to_cmd: translate struct can_frame into device command
145 struct kvaser_usb_dev_ops
{
146 int (*dev_set_mode
)(struct net_device
*netdev
, enum can_mode mode
);
147 int (*dev_set_bittiming
)(struct net_device
*netdev
);
148 int (*dev_set_data_bittiming
)(struct net_device
*netdev
);
149 int (*dev_get_berr_counter
)(const struct net_device
*netdev
,
150 struct can_berr_counter
*bec
);
151 int (*dev_setup_endpoints
)(struct kvaser_usb
*dev
);
152 int (*dev_init_card
)(struct kvaser_usb
*dev
);
153 int (*dev_get_software_info
)(struct kvaser_usb
*dev
);
154 int (*dev_get_software_details
)(struct kvaser_usb
*dev
);
155 int (*dev_get_card_info
)(struct kvaser_usb
*dev
);
156 int (*dev_get_capabilities
)(struct kvaser_usb
*dev
);
157 int (*dev_set_opt_mode
)(const struct kvaser_usb_net_priv
*priv
);
158 int (*dev_start_chip
)(struct kvaser_usb_net_priv
*priv
);
159 int (*dev_stop_chip
)(struct kvaser_usb_net_priv
*priv
);
160 int (*dev_reset_chip
)(struct kvaser_usb
*dev
, int channel
);
161 int (*dev_flush_queue
)(struct kvaser_usb_net_priv
*priv
);
162 void (*dev_read_bulk_callback
)(struct kvaser_usb
*dev
, void *buf
,
164 void *(*dev_frame_to_cmd
)(const struct kvaser_usb_net_priv
*priv
,
165 const struct sk_buff
*skb
, int *frame_len
,
166 int *cmd_len
, u16 transid
);
169 struct kvaser_usb_dev_cfg
{
170 const struct can_clock clock
;
171 const unsigned int timestamp_freq
;
172 const struct can_bittiming_const
* const bittiming_const
;
173 const struct can_bittiming_const
* const data_bittiming_const
;
176 extern const struct kvaser_usb_dev_ops kvaser_usb_hydra_dev_ops
;
177 extern const struct kvaser_usb_dev_ops kvaser_usb_leaf_dev_ops
;
179 int kvaser_usb_recv_cmd(const struct kvaser_usb
*dev
, void *cmd
, int len
,
182 int kvaser_usb_send_cmd(const struct kvaser_usb
*dev
, void *cmd
, int len
);
184 int kvaser_usb_send_cmd_async(struct kvaser_usb_net_priv
*priv
, void *cmd
,
187 int kvaser_usb_can_rx_over_error(struct net_device
*netdev
);
188 #endif /* KVASER_USB_H */