Loading...
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)
7 *
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.
12 */
13
14#ifndef KVASER_USB_H
15#define KVASER_USB_H
16
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
20 * as 'filo'
21 * - UsbcanII: Based on Renesas M16C, running firmware labeled as 'helios'
22 */
23
24#include <linux/completion.h>
25#include <linux/spinlock.h>
26#include <linux/types.h>
27#include <linux/usb.h>
28
29#include <linux/can.h>
30#include <linux/can/dev.h>
31
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
37
38/* Kvaser USB device quirks */
39#define KVASER_USB_QUIRK_HAS_SILENT_MODE BIT(0)
40#define KVASER_USB_QUIRK_HAS_TXRX_ERRORS BIT(1)
41#define KVASER_USB_QUIRK_IGNORE_CLK_FREQ BIT(2)
42#define KVASER_USB_QUIRK_HAS_HARDWARE_TIMESTAMP BIT(3)
43
44/* Device capabilities */
45#define KVASER_USB_CAP_BERR_CAP 0x01
46#define KVASER_USB_CAP_EXT_CAP 0x02
47#define KVASER_USB_HYDRA_CAP_EXT_CMD 0x04
48
49struct kvaser_usb_dev_cfg;
50
51enum kvaser_usb_leaf_family {
52 KVASER_LEAF,
53 KVASER_USBCAN,
54};
55
56#define KVASER_USB_HYDRA_MAX_CMD_LEN 128
57struct kvaser_usb_dev_card_data_hydra {
58 u8 channel_to_he[KVASER_USB_MAX_NET_DEVICES];
59 u8 sysdbg_he;
60 spinlock_t transid_lock; /* lock for transid */
61 u16 transid;
62 /* lock for usb_rx_leftover and usb_rx_leftover_len */
63 spinlock_t usb_rx_leftover_lock;
64 u8 usb_rx_leftover[KVASER_USB_HYDRA_MAX_CMD_LEN];
65 u8 usb_rx_leftover_len;
66};
67struct kvaser_usb_dev_card_data {
68 u32 ctrlmode_supported;
69 u32 capabilities;
70 struct kvaser_usb_dev_card_data_hydra hydra;
71};
72
73/* Context for an outstanding, not yet ACKed, transmission */
74struct kvaser_usb_tx_urb_context {
75 struct kvaser_usb_net_priv *priv;
76 u32 echo_index;
77};
78
79struct kvaser_usb_busparams {
80 __le32 bitrate;
81 u8 tseg1;
82 u8 tseg2;
83 u8 sjw;
84 u8 nsamples;
85} __packed;
86
87struct kvaser_usb {
88 struct usb_device *udev;
89 struct usb_interface *intf;
90 struct kvaser_usb_net_priv *nets[KVASER_USB_MAX_NET_DEVICES];
91 const struct kvaser_usb_driver_info *driver_info;
92 const struct kvaser_usb_dev_cfg *cfg;
93
94 struct usb_endpoint_descriptor *bulk_in, *bulk_out;
95 struct usb_anchor rx_submitted;
96
97 /* @max_tx_urbs: Firmware-reported maximum number of outstanding,
98 * not yet ACKed, transmissions on this device. This value is
99 * also used as a sentinel for marking free tx contexts.
100 */
101 u32 fw_version;
102 unsigned int nchannels;
103 unsigned int max_tx_urbs;
104 struct kvaser_usb_dev_card_data card_data;
105
106 bool rxinitdone;
107 void *rxbuf[KVASER_USB_MAX_RX_URBS];
108 dma_addr_t rxbuf_dma[KVASER_USB_MAX_RX_URBS];
109};
110
111struct kvaser_usb_net_priv {
112 struct can_priv can;
113 struct can_berr_counter bec;
114
115 /* subdriver-specific data */
116 void *sub_priv;
117
118 struct kvaser_usb *dev;
119 struct net_device *netdev;
120 int channel;
121
122 struct completion start_comp, stop_comp, flush_comp,
123 get_busparams_comp;
124 struct usb_anchor tx_submitted;
125
126 struct kvaser_usb_busparams busparams_nominal, busparams_data;
127
128 spinlock_t tx_contexts_lock; /* lock for active_tx_contexts */
129 int active_tx_contexts;
130 struct kvaser_usb_tx_urb_context tx_contexts[];
131};
132
133/**
134 * struct kvaser_usb_dev_ops - Device specific functions
135 * @dev_set_mode: used for can.do_set_mode
136 * @dev_set_bittiming: used for can.do_set_bittiming
137 * @dev_get_busparams: readback arbitration busparams
138 * @dev_set_data_bittiming: used for can.do_set_data_bittiming
139 * @dev_get_data_busparams: readback data busparams
140 * @dev_get_berr_counter: used for can.do_get_berr_counter
141 *
142 * @dev_setup_endpoints: setup USB in and out endpoints
143 * @dev_init_card: initialize card
144 * @dev_init_channel: initialize channel
145 * @dev_remove_channel: uninitialize channel
146 * @dev_get_software_info: get software info
147 * @dev_get_software_details: get software details
148 * @dev_get_card_info: get card info
149 * @dev_get_capabilities: discover device capabilities
150 *
151 * @dev_set_opt_mode: set ctrlmod
152 * @dev_start_chip: start the CAN controller
153 * @dev_stop_chip: stop the CAN controller
154 * @dev_reset_chip: reset the CAN controller
155 * @dev_flush_queue: flush outstanding CAN messages
156 * @dev_read_bulk_callback: handle incoming commands
157 * @dev_frame_to_cmd: translate struct can_frame into device command
158 */
159struct kvaser_usb_dev_ops {
160 int (*dev_set_mode)(struct net_device *netdev, enum can_mode mode);
161 int (*dev_set_bittiming)(const struct net_device *netdev,
162 const struct kvaser_usb_busparams *busparams);
163 int (*dev_get_busparams)(struct kvaser_usb_net_priv *priv);
164 int (*dev_set_data_bittiming)(const struct net_device *netdev,
165 const struct kvaser_usb_busparams *busparams);
166 int (*dev_get_data_busparams)(struct kvaser_usb_net_priv *priv);
167 int (*dev_get_berr_counter)(const struct net_device *netdev,
168 struct can_berr_counter *bec);
169 int (*dev_setup_endpoints)(struct kvaser_usb *dev);
170 int (*dev_init_card)(struct kvaser_usb *dev);
171 int (*dev_init_channel)(struct kvaser_usb_net_priv *priv);
172 void (*dev_remove_channel)(struct kvaser_usb_net_priv *priv);
173 int (*dev_get_software_info)(struct kvaser_usb *dev);
174 int (*dev_get_software_details)(struct kvaser_usb *dev);
175 int (*dev_get_card_info)(struct kvaser_usb *dev);
176 int (*dev_get_capabilities)(struct kvaser_usb *dev);
177 int (*dev_set_opt_mode)(const struct kvaser_usb_net_priv *priv);
178 int (*dev_start_chip)(struct kvaser_usb_net_priv *priv);
179 int (*dev_stop_chip)(struct kvaser_usb_net_priv *priv);
180 int (*dev_reset_chip)(struct kvaser_usb *dev, int channel);
181 int (*dev_flush_queue)(struct kvaser_usb_net_priv *priv);
182 void (*dev_read_bulk_callback)(struct kvaser_usb *dev, void *buf,
183 int len);
184 void *(*dev_frame_to_cmd)(const struct kvaser_usb_net_priv *priv,
185 const struct sk_buff *skb, int *cmd_len,
186 u16 transid);
187};
188
189struct kvaser_usb_driver_info {
190 u32 quirks;
191 enum kvaser_usb_leaf_family family;
192 const struct kvaser_usb_dev_ops *ops;
193};
194
195struct kvaser_usb_dev_cfg {
196 const struct can_clock clock;
197 const unsigned int timestamp_freq;
198 const struct can_bittiming_const * const bittiming_const;
199 const struct can_bittiming_const * const data_bittiming_const;
200};
201
202extern const struct kvaser_usb_dev_ops kvaser_usb_hydra_dev_ops;
203extern const struct kvaser_usb_dev_ops kvaser_usb_leaf_dev_ops;
204
205void kvaser_usb_unlink_tx_urbs(struct kvaser_usb_net_priv *priv);
206
207int kvaser_usb_recv_cmd(const struct kvaser_usb *dev, void *cmd, int len,
208 int *actual_len);
209
210int kvaser_usb_send_cmd(const struct kvaser_usb *dev, void *cmd, int len);
211
212int kvaser_usb_send_cmd_async(struct kvaser_usb_net_priv *priv, void *cmd,
213 int len);
214
215int kvaser_usb_can_rx_over_error(struct net_device *netdev);
216
217extern const struct can_bittiming_const kvaser_usb_flexc_bittiming_const;
218
219#endif /* KVASER_USB_H */