xref: /linux/drivers/net/can/usb/peak_usb/pcan_usb_fd.c (revision fab183d632628381b466a41479489541ac0e29a0)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * CAN driver for PEAK System PCAN-USB FD / PCAN-USB Pro FD adapter
4  *
5  * Copyright (C) 2013-2025 PEAK System-Technik GmbH
6  * Author: Stéphane Grosjean <s.grosjean@peak-system.fr>
7  */
8 #include <linux/ethtool.h>
9 #include <linux/module.h>
10 #include <linux/netdevice.h>
11 #include <linux/usb.h>
12 
13 #include <linux/can.h>
14 #include <linux/can/dev.h>
15 #include <linux/can/error.h>
16 #include <linux/can/dev/peak_canfd.h>
17 
18 #include "pcan_usb_core.h"
19 #include "pcan_usb_pro.h"
20 
21 #define PCAN_USBPROFD_CHANNEL_COUNT	2
22 #define PCAN_USBFD_CHANNEL_COUNT	1
23 
24 /* PCAN-USB Pro FD adapter internal clock (Hz) */
25 #define PCAN_UFD_CRYSTAL_HZ		80000000
26 
27 #define PCAN_UFD_CMD_BUFFER_SIZE	512
28 #define PCAN_UFD_LOSPD_PKT_SIZE		64
29 
30 /* PCAN-USB Pro FD command timeout (ms.) */
31 #define PCAN_UFD_CMD_TIMEOUT_MS		1000
32 
33 /* PCAN-USB Pro FD rx/tx buffers size */
34 #define PCAN_UFD_RX_BUFFER_SIZE		2048
35 #define PCAN_UFD_TX_BUFFER_SIZE		512
36 
37 /* struct pcan_ufd_fw_info::type */
38 #define PCAN_USBFD_TYPE_STD		1
39 #define PCAN_USBFD_TYPE_EXT		2	/* includes EP numbers */
40 
41 /* read some versions info from the hw device */
42 struct __packed pcan_ufd_fw_info {
43 	__le16	size_of;	/* sizeof this */
44 	__le16	type;		/* type of this structure */
45 	u8	hw_type;	/* Type of hardware (HW_TYPE_xxx) */
46 	u8	bl_version[3];	/* Bootloader version */
47 	u8	hw_version;	/* Hardware version (PCB) */
48 	u8	fw_version[3];	/* Firmware version */
49 	__le32	dev_id[2];	/* "device id" per CAN */
50 	__le32	ser_no;		/* S/N */
51 	__le32	flags;		/* special functions */
52 
53 	/* extended data when type >= PCAN_USBFD_TYPE_EXT */
54 	u8	cmd_out_ep;	/* ep for cmd */
55 	u8	cmd_in_ep;	/* ep for replies */
56 	u8	data_out_ep[2];	/* ep for CANx TX */
57 	u8	data_in_ep;	/* ep for CAN RX */
58 	u8	dummy[3];
59 };
60 
61 /* handle device specific info used by the netdevices */
62 struct pcan_usb_fd_if {
63 	struct peak_usb_device	*dev[PCAN_USB_MAX_CHANNEL];
64 	struct pcan_ufd_fw_info	fw_info;
65 	struct peak_time_ref	time_ref;
66 	int			cm_ignore_count;
67 	int			dev_opened_count;
68 };
69 
70 /* device information */
71 struct pcan_usb_fd_device {
72 	struct peak_usb_device	dev;
73 	struct can_berr_counter	bec;
74 	struct pcan_usb_fd_if	*usb_if;
75 	u8			*cmd_buffer_addr;
76 };
77 
78 /* Extended USB commands (non uCAN commands) */
79 
80 /* Clock Modes command */
81 #define PCAN_UFD_CMD_CLK_SET		0x80
82 
83 #define PCAN_UFD_CLK_80MHZ		0x0
84 #define PCAN_UFD_CLK_60MHZ		0x1
85 #define PCAN_UFD_CLK_40MHZ		0x2
86 #define PCAN_UFD_CLK_30MHZ		0x3
87 #define PCAN_UFD_CLK_24MHZ		0x4
88 #define PCAN_UFD_CLK_20MHZ		0x5
89 #define PCAN_UFD_CLK_DEF		PCAN_UFD_CLK_80MHZ
90 
91 struct __packed pcan_ufd_clock {
92 	__le16	opcode_channel;
93 
94 	u8	mode;
95 	u8	unused[5];
96 };
97 
98 /* LED control command */
99 #define PCAN_UFD_CMD_LED_SET		0x86
100 
101 #define PCAN_UFD_LED_DEV		0x00
102 #define PCAN_UFD_LED_FAST		0x01
103 #define PCAN_UFD_LED_SLOW		0x02
104 #define PCAN_UFD_LED_ON			0x03
105 #define PCAN_UFD_LED_OFF		0x04
106 #define PCAN_UFD_LED_DEF		PCAN_UFD_LED_DEV
107 
108 struct __packed pcan_ufd_led {
109 	__le16	opcode_channel;
110 
111 	u8	mode;
112 	u8	unused[5];
113 };
114 
115 /* Extended usage of uCAN commands CMD_xxx_xx_OPTION for PCAN-USB Pro FD */
116 #define PCAN_UFD_FLTEXT_CALIBRATION	0x8000
117 
118 struct __packed pcan_ufd_options {
119 	__le16	opcode_channel;
120 
121 	__le16	ucan_mask;
122 	u16	unused;
123 	__le16	usb_mask;
124 };
125 
126 /* Extended usage of uCAN messages for PCAN-USB Pro FD */
127 #define PCAN_UFD_MSG_CALIBRATION	0x100
128 
129 struct __packed pcan_ufd_ts_msg {
130 	__le16	size;
131 	__le16	type;
132 	__le32	ts_low;
133 	__le32	ts_high;
134 	__le16	usb_frame_index;
135 	u16	unused;
136 };
137 
138 #define PCAN_UFD_MSG_OVERRUN		0x101
139 
140 #define PCAN_UFD_OVMSG_CHANNEL(o)	((o)->channel & 0xf)
141 
142 struct __packed pcan_ufd_ovr_msg {
143 	__le16	size;
144 	__le16	type;
145 	__le32	ts_low;
146 	__le32	ts_high;
147 	u8	channel;
148 	u8	unused[3];
149 };
150 
151 #define PCAN_UFD_CMD_DEVID_SET		0x81
152 
153 struct __packed pcan_ufd_device_id {
154 	__le16	opcode_channel;
155 
156 	u16	unused;
157 	__le32	device_id;
158 };
159 
pufd_omsg_get_channel(struct pcan_ufd_ovr_msg * om)160 static inline int pufd_omsg_get_channel(struct pcan_ufd_ovr_msg *om)
161 {
162 	return om->channel & 0xf;
163 }
164 
165 /* Clock mode frequency values */
166 static const u32 pcan_usb_fd_clk_freq[6] = {
167 	[PCAN_UFD_CLK_80MHZ] = 80000000,
168 	[PCAN_UFD_CLK_60MHZ] = 60000000,
169 	[PCAN_UFD_CLK_40MHZ] = 40000000,
170 	[PCAN_UFD_CLK_30MHZ] = 30000000,
171 	[PCAN_UFD_CLK_24MHZ] = 24000000,
172 	[PCAN_UFD_CLK_20MHZ] = 20000000
173 };
174 
175 /* return a device USB interface */
176 static inline
pcan_usb_fd_dev_if(struct peak_usb_device * dev)177 struct pcan_usb_fd_if *pcan_usb_fd_dev_if(struct peak_usb_device *dev)
178 {
179 	struct pcan_usb_fd_device *pdev =
180 			container_of(dev, struct pcan_usb_fd_device, dev);
181 	return pdev->usb_if;
182 }
183 
184 /* return a device USB commands buffer */
pcan_usb_fd_cmd_buffer(struct peak_usb_device * dev)185 static inline void *pcan_usb_fd_cmd_buffer(struct peak_usb_device *dev)
186 {
187 	struct pcan_usb_fd_device *pdev =
188 			container_of(dev, struct pcan_usb_fd_device, dev);
189 	return pdev->cmd_buffer_addr;
190 }
191 
192 /* send PCAN-USB Pro FD commands synchronously */
pcan_usb_fd_send_cmd(struct peak_usb_device * dev,void * cmd_tail)193 static int pcan_usb_fd_send_cmd(struct peak_usb_device *dev, void *cmd_tail)
194 {
195 	struct pcan_usb_fd_device *pdev =
196 		container_of(dev, struct pcan_usb_fd_device, dev);
197 	struct pcan_ufd_fw_info *fw_info = &pdev->usb_if->fw_info;
198 	void *cmd_head = pcan_usb_fd_cmd_buffer(dev);
199 	int err = 0;
200 	u8 *packet_ptr;
201 	int packet_len;
202 	ptrdiff_t cmd_len;
203 
204 	/* usb device unregistered? */
205 	if (!(dev->state & PCAN_USB_STATE_CONNECTED))
206 		return 0;
207 
208 	/* if a packet is not filled completely by commands, the command list
209 	 * is terminated with an "end of collection" record.
210 	 */
211 	cmd_len = cmd_tail - cmd_head;
212 	if (cmd_len <= (PCAN_UFD_CMD_BUFFER_SIZE - sizeof(u64))) {
213 		memset(cmd_tail, 0xff, sizeof(u64));
214 		cmd_len += sizeof(u64);
215 	}
216 
217 	packet_ptr = cmd_head;
218 	packet_len = cmd_len;
219 
220 	/* firmware is not able to re-assemble 512 bytes buffer in full-speed */
221 	if (unlikely(dev->udev->speed != USB_SPEED_HIGH))
222 		packet_len = min(packet_len, PCAN_UFD_LOSPD_PKT_SIZE);
223 
224 	do {
225 		err = usb_bulk_msg(dev->udev,
226 				   usb_sndbulkpipe(dev->udev,
227 						   fw_info->cmd_out_ep),
228 				   packet_ptr, packet_len,
229 				   NULL, PCAN_UFD_CMD_TIMEOUT_MS);
230 		if (err) {
231 			netdev_err(dev->netdev,
232 				   "sending command failure: %d\n", err);
233 			break;
234 		}
235 
236 		packet_ptr += packet_len;
237 		cmd_len -= packet_len;
238 
239 		if (cmd_len < PCAN_UFD_LOSPD_PKT_SIZE)
240 			packet_len = cmd_len;
241 
242 	} while (packet_len > 0);
243 
244 	return err;
245 }
246 
pcan_usb_fd_read_fwinfo(struct peak_usb_device * dev,struct pcan_ufd_fw_info * fw_info)247 static int pcan_usb_fd_read_fwinfo(struct peak_usb_device *dev,
248 				   struct pcan_ufd_fw_info *fw_info)
249 {
250 	return pcan_usb_pro_send_req(dev, PCAN_USBPRO_REQ_INFO,
251 				     PCAN_USBPRO_INFO_FW,
252 				     fw_info,
253 				     sizeof(*fw_info));
254 }
255 
256 /* build the commands list in the given buffer, to enter operational mode */
pcan_usb_fd_build_restart_cmd(struct peak_usb_device * dev,u8 * buf)257 static int pcan_usb_fd_build_restart_cmd(struct peak_usb_device *dev, u8 *buf)
258 {
259 	struct pucan_wr_err_cnt *prc;
260 	struct pucan_command *cmd;
261 	u8 *pc = buf;
262 
263 	/* 1st, reset error counters: */
264 	prc = (struct pucan_wr_err_cnt *)pc;
265 	prc->opcode_channel = pucan_cmd_opcode_channel(dev->ctrl_idx,
266 						       PUCAN_CMD_WR_ERR_CNT);
267 
268 	/* select both counters */
269 	prc->sel_mask = cpu_to_le16(PUCAN_WRERRCNT_TE|PUCAN_WRERRCNT_RE);
270 
271 	/* and reset their values */
272 	prc->tx_counter = 0;
273 	prc->rx_counter = 0;
274 
275 	/* moves the pointer forward */
276 	pc += sizeof(struct pucan_wr_err_cnt);
277 
278 	/* add command to switch from ISO to non-ISO mode, if fw allows it */
279 	if (dev->can.ctrlmode_supported & CAN_CTRLMODE_FD_NON_ISO) {
280 		struct pucan_options *puo = (struct pucan_options *)pc;
281 
282 		puo->opcode_channel =
283 			(dev->can.ctrlmode & CAN_CTRLMODE_FD_NON_ISO) ?
284 			pucan_cmd_opcode_channel(dev->ctrl_idx,
285 						 PUCAN_CMD_CLR_DIS_OPTION) :
286 			pucan_cmd_opcode_channel(dev->ctrl_idx,
287 						 PUCAN_CMD_SET_EN_OPTION);
288 
289 		puo->options = cpu_to_le16(PUCAN_OPTION_CANDFDISO);
290 
291 		/* to be sure that no other extended bits will be taken into
292 		 * account
293 		 */
294 		puo->unused = 0;
295 
296 		/* moves the pointer forward */
297 		pc += sizeof(struct pucan_options);
298 	}
299 
300 	/* next, go back to operational mode */
301 	cmd = (struct pucan_command *)pc;
302 	cmd->opcode_channel = pucan_cmd_opcode_channel(dev->ctrl_idx,
303 				(dev->can.ctrlmode & CAN_CTRLMODE_LISTENONLY) ?
304 						PUCAN_CMD_LISTEN_ONLY_MODE :
305 						PUCAN_CMD_NORMAL_MODE);
306 	pc += sizeof(struct pucan_command);
307 
308 	return pc - buf;
309 }
310 
311 /* set CAN bus on/off */
pcan_usb_fd_set_bus(struct peak_usb_device * dev,u8 onoff)312 static int pcan_usb_fd_set_bus(struct peak_usb_device *dev, u8 onoff)
313 {
314 	u8 *pc = pcan_usb_fd_cmd_buffer(dev);
315 	int l;
316 
317 	if (onoff) {
318 		/* build the cmds list to enter operational mode */
319 		l = pcan_usb_fd_build_restart_cmd(dev, pc);
320 	} else {
321 		struct pucan_command *cmd = (struct pucan_command *)pc;
322 
323 		/* build cmd to go back to reset mode */
324 		cmd->opcode_channel = pucan_cmd_opcode_channel(dev->ctrl_idx,
325 							PUCAN_CMD_RESET_MODE);
326 		l = sizeof(struct pucan_command);
327 	}
328 
329 	/* send the command */
330 	return pcan_usb_fd_send_cmd(dev, pc + l);
331 }
332 
333 /* set filtering masks:
334  *
335  *	idx  in range [0..63] selects a row #idx, all rows otherwise
336  *	mask in range [0..0xffffffff] defines up to 32 CANIDs in the row(s)
337  *
338  *	Each bit of this 64 x 32 bits array defines a CANID value:
339  *
340  *	bit[i,j] = 1 implies that CANID=(i x 32)+j will be received, while
341  *	bit[i,j] = 0 implies that CANID=(i x 32)+j will be discarded.
342  */
pcan_usb_fd_set_filter_std(struct peak_usb_device * dev,int idx,u32 mask)343 static int pcan_usb_fd_set_filter_std(struct peak_usb_device *dev, int idx,
344 				      u32 mask)
345 {
346 	struct pucan_filter_std *cmd = pcan_usb_fd_cmd_buffer(dev);
347 	int i, n;
348 
349 	/* select all rows when idx is out of range [0..63] */
350 	if ((idx < 0) || (idx >= (1 << PUCAN_FLTSTD_ROW_IDX_BITS))) {
351 		n = 1 << PUCAN_FLTSTD_ROW_IDX_BITS;
352 		idx = 0;
353 
354 	/* select the row (and only the row) otherwise */
355 	} else {
356 		n = idx + 1;
357 	}
358 
359 	for (i = idx; i < n; i++, cmd++) {
360 		cmd->opcode_channel = pucan_cmd_opcode_channel(dev->ctrl_idx,
361 							PUCAN_CMD_FILTER_STD);
362 		cmd->idx = cpu_to_le16(i);
363 		cmd->mask = cpu_to_le32(mask);
364 	}
365 
366 	/* send the command */
367 	return pcan_usb_fd_send_cmd(dev, cmd);
368 }
369 
370 /* set/unset options
371  *
372  *	onoff	set(1)/unset(0) options
373  *	mask	each bit defines a kind of options to set/unset
374  */
pcan_usb_fd_set_options(struct peak_usb_device * dev,bool onoff,u16 ucan_mask,u16 usb_mask)375 static int pcan_usb_fd_set_options(struct peak_usb_device *dev,
376 				   bool onoff, u16 ucan_mask, u16 usb_mask)
377 {
378 	struct pcan_ufd_options *cmd = pcan_usb_fd_cmd_buffer(dev);
379 
380 	cmd->opcode_channel = pucan_cmd_opcode_channel(dev->ctrl_idx,
381 					(onoff) ? PUCAN_CMD_SET_EN_OPTION :
382 						  PUCAN_CMD_CLR_DIS_OPTION);
383 
384 	cmd->ucan_mask = cpu_to_le16(ucan_mask);
385 	cmd->usb_mask = cpu_to_le16(usb_mask);
386 
387 	/* send the command */
388 	return pcan_usb_fd_send_cmd(dev, ++cmd);
389 }
390 
391 /* setup LED control */
pcan_usb_fd_set_can_led(struct peak_usb_device * dev,u8 led_mode)392 static int pcan_usb_fd_set_can_led(struct peak_usb_device *dev, u8 led_mode)
393 {
394 	struct pcan_ufd_led *cmd = pcan_usb_fd_cmd_buffer(dev);
395 
396 	cmd->opcode_channel = pucan_cmd_opcode_channel(dev->ctrl_idx,
397 						       PCAN_UFD_CMD_LED_SET);
398 	cmd->mode = led_mode;
399 
400 	/* send the command */
401 	return pcan_usb_fd_send_cmd(dev, ++cmd);
402 }
403 
404 /* set CAN clock domain */
pcan_usb_fd_set_clock_domain(struct peak_usb_device * dev,u8 clk_mode)405 static int pcan_usb_fd_set_clock_domain(struct peak_usb_device *dev,
406 					u8 clk_mode)
407 {
408 	struct pcan_ufd_clock *cmd = pcan_usb_fd_cmd_buffer(dev);
409 
410 	cmd->opcode_channel = pucan_cmd_opcode_channel(dev->ctrl_idx,
411 						       PCAN_UFD_CMD_CLK_SET);
412 	cmd->mode = clk_mode;
413 
414 	/* send the command */
415 	return pcan_usb_fd_send_cmd(dev, ++cmd);
416 }
417 
418 /* set bittiming for CAN and CAN-FD header */
pcan_usb_fd_set_bittiming_slow(struct peak_usb_device * dev,struct can_bittiming * bt)419 static int pcan_usb_fd_set_bittiming_slow(struct peak_usb_device *dev,
420 					  struct can_bittiming *bt)
421 {
422 	struct pucan_timing_slow *cmd = pcan_usb_fd_cmd_buffer(dev);
423 
424 	cmd->opcode_channel = pucan_cmd_opcode_channel(dev->ctrl_idx,
425 						       PUCAN_CMD_TIMING_SLOW);
426 	cmd->sjw_t = PUCAN_TSLOW_SJW_T(bt->sjw - 1,
427 				dev->can.ctrlmode & CAN_CTRLMODE_3_SAMPLES);
428 
429 	cmd->tseg2 = PUCAN_TSLOW_TSEG2(bt->phase_seg2 - 1);
430 	cmd->tseg1 = PUCAN_TSLOW_TSEG1(bt->prop_seg + bt->phase_seg1 - 1);
431 	cmd->brp = cpu_to_le16(PUCAN_TSLOW_BRP(bt->brp - 1));
432 
433 	cmd->ewl = 96;	/* default */
434 
435 	/* send the command */
436 	return pcan_usb_fd_send_cmd(dev, ++cmd);
437 }
438 
439 /* set CAN-FD bittiming for data */
pcan_usb_fd_set_bittiming_fast(struct peak_usb_device * dev,struct can_bittiming * bt)440 static int pcan_usb_fd_set_bittiming_fast(struct peak_usb_device *dev,
441 					  struct can_bittiming *bt)
442 {
443 	struct pucan_timing_fast *cmd = pcan_usb_fd_cmd_buffer(dev);
444 
445 	cmd->opcode_channel = pucan_cmd_opcode_channel(dev->ctrl_idx,
446 						       PUCAN_CMD_TIMING_FAST);
447 	cmd->sjw = PUCAN_TFAST_SJW(bt->sjw - 1);
448 	cmd->tseg2 = PUCAN_TFAST_TSEG2(bt->phase_seg2 - 1);
449 	cmd->tseg1 = PUCAN_TFAST_TSEG1(bt->prop_seg + bt->phase_seg1 - 1);
450 	cmd->brp = cpu_to_le16(PUCAN_TFAST_BRP(bt->brp - 1));
451 
452 	/* send the command */
453 	return pcan_usb_fd_send_cmd(dev, ++cmd);
454 }
455 
456 /* read user CAN channel id from device */
pcan_usb_fd_get_can_channel_id(struct peak_usb_device * dev,u32 * can_ch_id)457 static int pcan_usb_fd_get_can_channel_id(struct peak_usb_device *dev,
458 					  u32 *can_ch_id)
459 {
460 	int err;
461 	struct pcan_usb_fd_if *usb_if = pcan_usb_fd_dev_if(dev);
462 
463 	err = pcan_usb_fd_read_fwinfo(dev, &usb_if->fw_info);
464 	if (err)
465 		return err;
466 
467 	*can_ch_id = le32_to_cpu(usb_if->fw_info.dev_id[dev->ctrl_idx]);
468 	return err;
469 }
470 
471 /* set a new CAN channel id in the flash memory of the device */
pcan_usb_fd_set_can_channel_id(struct peak_usb_device * dev,u32 can_ch_id)472 static int pcan_usb_fd_set_can_channel_id(struct peak_usb_device *dev, u32 can_ch_id)
473 {
474 	struct pcan_ufd_device_id *cmd = pcan_usb_fd_cmd_buffer(dev);
475 
476 	cmd->opcode_channel = pucan_cmd_opcode_channel(dev->ctrl_idx,
477 						       PCAN_UFD_CMD_DEVID_SET);
478 	cmd->device_id = cpu_to_le32(can_ch_id);
479 
480 	/* send the command */
481 	return pcan_usb_fd_send_cmd(dev, ++cmd);
482 }
483 
484 /* handle restart but in asynchronously way
485  * (uses PCAN-USB Pro code to complete asynchronous request)
486  */
pcan_usb_fd_restart_async(struct peak_usb_device * dev,struct urb * urb,u8 * buf)487 static int pcan_usb_fd_restart_async(struct peak_usb_device *dev,
488 				     struct urb *urb, u8 *buf)
489 {
490 	struct pcan_usb_fd_device *pdev =
491 		container_of(dev, struct pcan_usb_fd_device, dev);
492 	struct pcan_ufd_fw_info *fw_info = &pdev->usb_if->fw_info;
493 	u8 *pc = buf;
494 
495 	/* build the entire cmds list in the provided buffer, to go back into
496 	 * operational mode.
497 	 */
498 	pc += pcan_usb_fd_build_restart_cmd(dev, pc);
499 
500 	/* add EOC */
501 	memset(pc, 0xff, sizeof(struct pucan_command));
502 	pc += sizeof(struct pucan_command);
503 
504 	/* complete the URB */
505 	usb_fill_bulk_urb(urb, dev->udev,
506 			  usb_sndbulkpipe(dev->udev, fw_info->cmd_out_ep),
507 			  buf, pc - buf,
508 			  pcan_usb_pro_restart_complete, dev);
509 
510 	/* and submit it. */
511 	return usb_submit_urb(urb, GFP_ATOMIC);
512 }
513 
pcan_usb_fd_drv_loaded(struct peak_usb_device * dev,bool loaded)514 static int pcan_usb_fd_drv_loaded(struct peak_usb_device *dev, bool loaded)
515 {
516 	struct pcan_usb_fd_device *pdev =
517 			container_of(dev, struct pcan_usb_fd_device, dev);
518 
519 	pdev->cmd_buffer_addr[0] = 0;
520 	pdev->cmd_buffer_addr[1] = !!loaded;
521 
522 	return pcan_usb_pro_send_req(dev,
523 				PCAN_USBPRO_REQ_FCT,
524 				PCAN_USBPRO_FCT_DRVLD,
525 				pdev->cmd_buffer_addr,
526 				PCAN_USBPRO_FCT_DRVLD_REQ_LEN);
527 }
528 
pcan_usb_fd_decode_canmsg(struct pcan_usb_fd_if * usb_if,struct pucan_msg * rx_msg)529 static int pcan_usb_fd_decode_canmsg(struct pcan_usb_fd_if *usb_if,
530 				     struct pucan_msg *rx_msg)
531 {
532 	struct pucan_rx_msg *rm = (struct pucan_rx_msg *)rx_msg;
533 	struct peak_usb_device *dev;
534 	struct net_device *netdev;
535 	struct canfd_frame *cfd;
536 	struct sk_buff *skb;
537 	const u16 rx_msg_flags = le16_to_cpu(rm->flags);
538 
539 	if (pucan_msg_get_channel(rm) >= ARRAY_SIZE(usb_if->dev))
540 		return -ENOMEM;
541 
542 	dev = usb_if->dev[pucan_msg_get_channel(rm)];
543 	netdev = dev->netdev;
544 
545 	if (rx_msg_flags & PUCAN_MSG_EXT_DATA_LEN) {
546 		/* CANFD frame case */
547 		skb = alloc_canfd_skb(netdev, &cfd);
548 		if (!skb)
549 			return -ENOMEM;
550 
551 		if (rx_msg_flags & PUCAN_MSG_BITRATE_SWITCH)
552 			cfd->flags |= CANFD_BRS;
553 
554 		if (rx_msg_flags & PUCAN_MSG_ERROR_STATE_IND)
555 			cfd->flags |= CANFD_ESI;
556 
557 		cfd->len = can_fd_dlc2len(pucan_msg_get_dlc(rm));
558 	} else {
559 		/* CAN 2.0 frame case */
560 		skb = alloc_can_skb(netdev, (struct can_frame **)&cfd);
561 		if (!skb)
562 			return -ENOMEM;
563 
564 		can_frame_set_cc_len((struct can_frame *)cfd,
565 				     pucan_msg_get_dlc(rm),
566 				     dev->can.ctrlmode);
567 	}
568 
569 	if (!(rx_msg_flags & PUCAN_MSG_RTR) &&
570 	    le16_to_cpu(rx_msg->size) - offsetof(struct pucan_rx_msg, d) <
571 	    cfd->len) {
572 		kfree_skb(skb);
573 		return -EBADMSG;
574 	}
575 
576 	cfd->can_id = le32_to_cpu(rm->can_id);
577 
578 	if (rx_msg_flags & PUCAN_MSG_EXT_ID)
579 		cfd->can_id |= CAN_EFF_FLAG;
580 
581 	if (rx_msg_flags & PUCAN_MSG_RTR) {
582 		cfd->can_id |= CAN_RTR_FLAG;
583 	} else {
584 		memcpy(cfd->data, rm->d, cfd->len);
585 		netdev->stats.rx_bytes += cfd->len;
586 	}
587 	netdev->stats.rx_packets++;
588 
589 	peak_usb_netif_rx_64(skb, le32_to_cpu(rm->ts_low),
590 			     le32_to_cpu(rm->ts_high));
591 
592 	return 0;
593 }
594 
595 /* handle uCAN status message */
pcan_usb_fd_decode_status(struct pcan_usb_fd_if * usb_if,struct pucan_msg * rx_msg)596 static int pcan_usb_fd_decode_status(struct pcan_usb_fd_if *usb_if,
597 				     struct pucan_msg *rx_msg)
598 {
599 	struct pucan_status_msg *sm = (struct pucan_status_msg *)rx_msg;
600 	struct pcan_usb_fd_device *pdev;
601 	enum can_state new_state = CAN_STATE_ERROR_ACTIVE;
602 	enum can_state rx_state, tx_state;
603 	struct peak_usb_device *dev;
604 	struct net_device *netdev;
605 	struct can_frame *cf;
606 	struct sk_buff *skb;
607 
608 	if (pucan_stmsg_get_channel(sm) >= ARRAY_SIZE(usb_if->dev))
609 		return -ENOMEM;
610 
611 	dev = usb_if->dev[pucan_stmsg_get_channel(sm)];
612 	pdev = container_of(dev, struct pcan_usb_fd_device, dev);
613 	netdev = dev->netdev;
614 
615 	/* nothing should be sent while in BUS_OFF state */
616 	if (dev->can.state == CAN_STATE_BUS_OFF)
617 		return 0;
618 
619 	if (sm->channel_p_w_b & PUCAN_BUS_BUSOFF) {
620 		new_state = CAN_STATE_BUS_OFF;
621 	} else if (sm->channel_p_w_b & PUCAN_BUS_PASSIVE) {
622 		new_state = CAN_STATE_ERROR_PASSIVE;
623 	} else if (sm->channel_p_w_b & PUCAN_BUS_WARNING) {
624 		new_state = CAN_STATE_ERROR_WARNING;
625 	} else {
626 		/* back to (or still in) ERROR_ACTIVE state */
627 		new_state = CAN_STATE_ERROR_ACTIVE;
628 		pdev->bec.txerr = 0;
629 		pdev->bec.rxerr = 0;
630 	}
631 
632 	/* state hasn't changed */
633 	if (new_state == dev->can.state)
634 		return 0;
635 
636 	/* handle bus state change */
637 	tx_state = (pdev->bec.txerr >= pdev->bec.rxerr) ? new_state : 0;
638 	rx_state = (pdev->bec.txerr <= pdev->bec.rxerr) ? new_state : 0;
639 
640 	/* allocate an skb to store the error frame */
641 	skb = alloc_can_err_skb(netdev, &cf);
642 	can_change_state(netdev, cf, tx_state, rx_state);
643 
644 	/* things must be done even in case of OOM */
645 	if (new_state == CAN_STATE_BUS_OFF)
646 		can_bus_off(netdev);
647 
648 	if (!skb)
649 		return -ENOMEM;
650 
651 	peak_usb_netif_rx_64(skb, le32_to_cpu(sm->ts_low),
652 			     le32_to_cpu(sm->ts_high));
653 
654 	return 0;
655 }
656 
657 /* handle uCAN error message */
pcan_usb_fd_decode_error(struct pcan_usb_fd_if * usb_if,struct pucan_msg * rx_msg)658 static int pcan_usb_fd_decode_error(struct pcan_usb_fd_if *usb_if,
659 				    struct pucan_msg *rx_msg)
660 {
661 	struct pucan_error_msg *er = (struct pucan_error_msg *)rx_msg;
662 	struct pcan_usb_fd_device *pdev;
663 	struct peak_usb_device *dev;
664 
665 	if (pucan_ermsg_get_channel(er) >= ARRAY_SIZE(usb_if->dev))
666 		return -EINVAL;
667 
668 	dev = usb_if->dev[pucan_ermsg_get_channel(er)];
669 	pdev = container_of(dev, struct pcan_usb_fd_device, dev);
670 
671 	/* keep a trace of tx and rx error counters for later use */
672 	pdev->bec.txerr = er->tx_err_cnt;
673 	pdev->bec.rxerr = er->rx_err_cnt;
674 
675 	return 0;
676 }
677 
678 /* handle uCAN overrun message */
pcan_usb_fd_decode_overrun(struct pcan_usb_fd_if * usb_if,struct pucan_msg * rx_msg)679 static int pcan_usb_fd_decode_overrun(struct pcan_usb_fd_if *usb_if,
680 				      struct pucan_msg *rx_msg)
681 {
682 	struct pcan_ufd_ovr_msg *ov = (struct pcan_ufd_ovr_msg *)rx_msg;
683 	struct peak_usb_device *dev;
684 	struct net_device *netdev;
685 	struct can_frame *cf;
686 	struct sk_buff *skb;
687 
688 	if (pufd_omsg_get_channel(ov) >= ARRAY_SIZE(usb_if->dev))
689 		return -EINVAL;
690 
691 	dev = usb_if->dev[pufd_omsg_get_channel(ov)];
692 	netdev = dev->netdev;
693 
694 	/* allocate an skb to store the error frame */
695 	skb = alloc_can_err_skb(netdev, &cf);
696 	if (!skb)
697 		return -ENOMEM;
698 
699 	cf->can_id |= CAN_ERR_CRTL;
700 	cf->data[1] |= CAN_ERR_CRTL_RX_OVERFLOW;
701 
702 	peak_usb_netif_rx_64(skb, le32_to_cpu(ov->ts_low),
703 			     le32_to_cpu(ov->ts_high));
704 
705 	netdev->stats.rx_over_errors++;
706 	netdev->stats.rx_errors++;
707 
708 	return 0;
709 }
710 
711 /* handle USB calibration message */
pcan_usb_fd_decode_ts(struct pcan_usb_fd_if * usb_if,struct pucan_msg * rx_msg)712 static void pcan_usb_fd_decode_ts(struct pcan_usb_fd_if *usb_if,
713 				  struct pucan_msg *rx_msg)
714 {
715 	struct pcan_ufd_ts_msg *ts = (struct pcan_ufd_ts_msg *)rx_msg;
716 
717 	/* should wait until clock is stabilized */
718 	if (usb_if->cm_ignore_count > 0)
719 		usb_if->cm_ignore_count--;
720 	else
721 		peak_usb_set_ts_now(&usb_if->time_ref, le32_to_cpu(ts->ts_low));
722 }
723 
pcan_usb_fd_rx_msg_min_size(u16 rx_msg_type)724 static size_t pcan_usb_fd_rx_msg_min_size(u16 rx_msg_type)
725 {
726 	switch (rx_msg_type) {
727 	case PUCAN_MSG_CAN_RX:
728 		return offsetof(struct pucan_rx_msg, d);
729 	case PCAN_UFD_MSG_CALIBRATION:
730 		return sizeof(struct pcan_ufd_ts_msg);
731 	case PUCAN_MSG_ERROR:
732 		return sizeof(struct pucan_error_msg);
733 	case PUCAN_MSG_STATUS:
734 		return sizeof(struct pucan_status_msg);
735 	case PCAN_UFD_MSG_OVERRUN:
736 		return sizeof(struct pcan_ufd_ovr_msg);
737 	default:
738 		return sizeof(struct pucan_msg);
739 	}
740 }
741 
742 /* callback for bulk IN urb */
pcan_usb_fd_decode_buf(struct peak_usb_device * dev,struct urb * urb)743 static int pcan_usb_fd_decode_buf(struct peak_usb_device *dev, struct urb *urb)
744 {
745 	struct pcan_usb_fd_if *usb_if = pcan_usb_fd_dev_if(dev);
746 	struct net_device *netdev = dev->netdev;
747 	struct pucan_msg *rx_msg;
748 	u8 *msg_ptr, *msg_end;
749 	int err = 0;
750 
751 	/* loop reading all the records from the incoming message */
752 	msg_ptr = urb->transfer_buffer;
753 	msg_end = urb->transfer_buffer + urb->actual_length;
754 	for (; msg_ptr < msg_end;) {
755 		u16 rx_msg_type, rx_msg_size;
756 		size_t rx_msg_min_size;
757 
758 		if (msg_end - msg_ptr < sizeof(*rx_msg)) {
759 			err = -EBADMSG;
760 			break;
761 		}
762 
763 		rx_msg = (struct pucan_msg *)msg_ptr;
764 		if (!rx_msg->size) {
765 			/* null packet found: end of list */
766 			break;
767 		}
768 
769 		rx_msg_size = le16_to_cpu(rx_msg->size);
770 		rx_msg_type = le16_to_cpu(rx_msg->type);
771 
772 		/* check if the record goes out of current packet */
773 		if (rx_msg_size > msg_end - msg_ptr) {
774 			netdev_err(netdev,
775 				   "got frag rec: should inc usb rx buf sze\n");
776 			err = -EBADMSG;
777 			break;
778 		}
779 
780 		rx_msg_min_size = pcan_usb_fd_rx_msg_min_size(rx_msg_type);
781 		if (rx_msg_size < rx_msg_min_size) {
782 			netdev_err(netdev, "got short rec\n");
783 			err = -EBADMSG;
784 			break;
785 		}
786 
787 		switch (rx_msg_type) {
788 		case PUCAN_MSG_CAN_RX:
789 			err = pcan_usb_fd_decode_canmsg(usb_if, rx_msg);
790 			if (err < 0)
791 				goto fail;
792 			break;
793 
794 		case PCAN_UFD_MSG_CALIBRATION:
795 			pcan_usb_fd_decode_ts(usb_if, rx_msg);
796 			break;
797 
798 		case PUCAN_MSG_ERROR:
799 			err = pcan_usb_fd_decode_error(usb_if, rx_msg);
800 			if (err < 0)
801 				goto fail;
802 			break;
803 
804 		case PUCAN_MSG_STATUS:
805 			err = pcan_usb_fd_decode_status(usb_if, rx_msg);
806 			if (err < 0)
807 				goto fail;
808 			break;
809 
810 		case PCAN_UFD_MSG_OVERRUN:
811 			err = pcan_usb_fd_decode_overrun(usb_if, rx_msg);
812 			if (err < 0)
813 				goto fail;
814 			break;
815 
816 		default:
817 			netdev_err(netdev,
818 				   "unhandled msg type 0x%02x (%d): ignored\n",
819 				   rx_msg_type, rx_msg_type);
820 			break;
821 		}
822 
823 		msg_ptr += rx_msg_size;
824 	}
825 
826 fail:
827 	if (err)
828 		pcan_dump_mem("received msg",
829 			      urb->transfer_buffer, urb->actual_length);
830 	return err;
831 }
832 
833 /* CAN/CANFD frames encoding callback */
pcan_usb_fd_encode_msg(struct peak_usb_device * dev,struct sk_buff * skb,u8 * obuf,size_t * size)834 static int pcan_usb_fd_encode_msg(struct peak_usb_device *dev,
835 				  struct sk_buff *skb, u8 *obuf, size_t *size)
836 {
837 	struct pucan_tx_msg *tx_msg = (struct pucan_tx_msg *)obuf;
838 	struct canfd_frame *cfd = (struct canfd_frame *)skb->data;
839 	u16 tx_msg_size, tx_msg_flags;
840 	u8 dlc;
841 
842 	if (cfd->len > CANFD_MAX_DLEN)
843 		return -EINVAL;
844 
845 	tx_msg_size = ALIGN(sizeof(struct pucan_tx_msg) + cfd->len, 4);
846 	tx_msg->size = cpu_to_le16(tx_msg_size);
847 	tx_msg->type = cpu_to_le16(PUCAN_MSG_CAN_TX);
848 
849 	tx_msg_flags = 0;
850 	if (cfd->can_id & CAN_EFF_FLAG) {
851 		tx_msg_flags |= PUCAN_MSG_EXT_ID;
852 		tx_msg->can_id = cpu_to_le32(cfd->can_id & CAN_EFF_MASK);
853 	} else {
854 		tx_msg->can_id = cpu_to_le32(cfd->can_id & CAN_SFF_MASK);
855 	}
856 
857 	if (can_is_canfd_skb(skb)) {
858 		/* considering a CANFD frame */
859 		dlc = can_fd_len2dlc(cfd->len);
860 
861 		tx_msg_flags |= PUCAN_MSG_EXT_DATA_LEN;
862 
863 		if (cfd->flags & CANFD_BRS)
864 			tx_msg_flags |= PUCAN_MSG_BITRATE_SWITCH;
865 
866 		if (cfd->flags & CANFD_ESI)
867 			tx_msg_flags |= PUCAN_MSG_ERROR_STATE_IND;
868 	} else {
869 		/* CAND 2.0 frames */
870 		dlc = can_get_cc_dlc((struct can_frame *)cfd,
871 				     dev->can.ctrlmode);
872 
873 		if (cfd->can_id & CAN_RTR_FLAG)
874 			tx_msg_flags |= PUCAN_MSG_RTR;
875 	}
876 
877 	/* Single-Shot frame */
878 	if (dev->can.ctrlmode & CAN_CTRLMODE_ONE_SHOT)
879 		tx_msg_flags |= PUCAN_MSG_SINGLE_SHOT;
880 
881 	tx_msg->flags = cpu_to_le16(tx_msg_flags);
882 	tx_msg->channel_dlc = PUCAN_MSG_CHANNEL_DLC(dev->ctrl_idx, dlc);
883 	memcpy(tx_msg->d, cfd->data, cfd->len);
884 
885 	/* add null size message to tag the end (messages are 32-bits aligned)
886 	 */
887 	tx_msg = (struct pucan_tx_msg *)(obuf + tx_msg_size);
888 
889 	tx_msg->size = 0;
890 
891 	/* set the whole size of the USB packet to send */
892 	*size = tx_msg_size + sizeof(u32);
893 
894 	return 0;
895 }
896 
897 /* start the interface (last chance before set bus on) */
pcan_usb_fd_start(struct peak_usb_device * dev)898 static int pcan_usb_fd_start(struct peak_usb_device *dev)
899 {
900 	struct pcan_usb_fd_device *pdev =
901 			container_of(dev, struct pcan_usb_fd_device, dev);
902 	int err;
903 
904 	/* set filter mode: all acceptance */
905 	err = pcan_usb_fd_set_filter_std(dev, -1, 0xffffffff);
906 	if (err)
907 		return err;
908 
909 	/* opening first device: */
910 	if (pdev->usb_if->dev_opened_count == 0) {
911 		/* reset time_ref */
912 		peak_usb_init_time_ref(&pdev->usb_if->time_ref,
913 				       &pcan_usb_pro_fd);
914 
915 		/* enable USB calibration messages */
916 		err = pcan_usb_fd_set_options(dev, 1,
917 					      PUCAN_OPTION_ERROR,
918 					      PCAN_UFD_FLTEXT_CALIBRATION);
919 	}
920 
921 	pdev->usb_if->dev_opened_count++;
922 
923 	/* reset cached error counters */
924 	pdev->bec.txerr = 0;
925 	pdev->bec.rxerr = 0;
926 
927 	return err;
928 }
929 
930 /* socket callback used to copy berr counters values received through USB */
pcan_usb_fd_get_berr_counter(const struct net_device * netdev,struct can_berr_counter * bec)931 static int pcan_usb_fd_get_berr_counter(const struct net_device *netdev,
932 					struct can_berr_counter *bec)
933 {
934 	struct peak_usb_device *dev = netdev_priv(netdev);
935 	struct pcan_usb_fd_device *pdev =
936 			container_of(dev, struct pcan_usb_fd_device, dev);
937 
938 	*bec = pdev->bec;
939 
940 	/* must return 0 */
941 	return 0;
942 }
943 
944 /* probe function for all PCAN-USB FD family usb interfaces */
pcan_usb_fd_probe(struct usb_interface * intf)945 static int pcan_usb_fd_probe(struct usb_interface *intf)
946 {
947 	struct usb_host_interface *iface_desc = &intf->altsetting[0];
948 
949 	/* CAN interface is always interface #0 */
950 	return iface_desc->desc.bInterfaceNumber;
951 }
952 
953 /* stop interface (last chance before set bus off) */
pcan_usb_fd_stop(struct peak_usb_device * dev)954 static int pcan_usb_fd_stop(struct peak_usb_device *dev)
955 {
956 	struct pcan_usb_fd_device *pdev =
957 			container_of(dev, struct pcan_usb_fd_device, dev);
958 
959 	/* turn off special msgs for that interface if no other dev opened */
960 	if (pdev->usb_if->dev_opened_count == 1)
961 		pcan_usb_fd_set_options(dev, 0,
962 					PUCAN_OPTION_ERROR,
963 					PCAN_UFD_FLTEXT_CALIBRATION);
964 	pdev->usb_if->dev_opened_count--;
965 
966 	return 0;
967 }
968 
969 /* called when probing, to initialize a device object */
pcan_usb_fd_init(struct peak_usb_device * dev)970 static int pcan_usb_fd_init(struct peak_usb_device *dev)
971 {
972 	struct pcan_usb_fd_device *pdev =
973 			container_of(dev, struct pcan_usb_fd_device, dev);
974 	struct pcan_ufd_fw_info *fw_info;
975 	int i, err = -ENOMEM;
976 
977 	/* do this for 1st channel only */
978 	if (!dev->prev_siblings) {
979 		/* allocate netdevices common structure attached to first one */
980 		pdev->usb_if = kzalloc_obj(*pdev->usb_if);
981 		if (!pdev->usb_if)
982 			goto err_out;
983 
984 		/* allocate command buffer once for all for the interface */
985 		pdev->cmd_buffer_addr = kzalloc(PCAN_UFD_CMD_BUFFER_SIZE,
986 						GFP_KERNEL);
987 		if (!pdev->cmd_buffer_addr)
988 			goto err_out_1;
989 
990 		/* number of ts msgs to ignore before taking one into account */
991 		pdev->usb_if->cm_ignore_count = 5;
992 
993 		fw_info = &pdev->usb_if->fw_info;
994 
995 		err = pcan_usb_fd_read_fwinfo(dev, fw_info);
996 		if (err) {
997 			dev_err(dev->netdev->dev.parent,
998 				"unable to read %s firmware info (err %d)\n",
999 				dev->adapter->name, err);
1000 			goto err_out_2;
1001 		}
1002 
1003 		/* explicit use of dev_xxx() instead of netdev_xxx() here:
1004 		 * information displayed are related to the device itself, not
1005 		 * to the canx (channel) device.
1006 		 */
1007 		dev_info(dev->netdev->dev.parent,
1008 			 "PEAK-System %s v%u fw v%u.%u.%u (%u channels)\n",
1009 			 dev->adapter->name, fw_info->hw_version,
1010 			 fw_info->fw_version[0],
1011 			 fw_info->fw_version[1],
1012 			 fw_info->fw_version[2],
1013 			 dev->adapter->ctrl_count);
1014 
1015 		/* check for ability to switch between ISO/non-ISO modes */
1016 		if (fw_info->fw_version[0] >= 2) {
1017 			/* firmware >= 2.x supports ISO/non-ISO switching */
1018 			dev->can.ctrlmode_supported |= CAN_CTRLMODE_FD_NON_ISO;
1019 		} else {
1020 			/* firmware < 2.x only supports fixed(!) non-ISO */
1021 			dev->can.ctrlmode |= CAN_CTRLMODE_FD_NON_ISO;
1022 		}
1023 
1024 		/* if vendor rsp type is greater than or equal to 2, then it
1025 		 * contains EP numbers to use for cmds pipes. If not, then
1026 		 * default EP should be used.
1027 		 */
1028 		if (le16_to_cpu(fw_info->type) < PCAN_USBFD_TYPE_EXT) {
1029 			fw_info->cmd_out_ep = PCAN_USBPRO_EP_CMDOUT;
1030 			fw_info->cmd_in_ep = PCAN_USBPRO_EP_CMDIN;
1031 		}
1032 
1033 		/* tell the hardware the can driver is running */
1034 		err = pcan_usb_fd_drv_loaded(dev, 1);
1035 		if (err) {
1036 			dev_err(dev->netdev->dev.parent,
1037 				"unable to tell %s driver is loaded (err %d)\n",
1038 				dev->adapter->name, err);
1039 			goto err_out_2;
1040 		}
1041 	} else {
1042 		/* otherwise, simply copy previous sibling's values */
1043 		struct pcan_usb_fd_device *ppdev =
1044 			container_of(dev->prev_siblings,
1045 				     struct pcan_usb_fd_device, dev);
1046 
1047 		pdev->usb_if = ppdev->usb_if;
1048 		pdev->cmd_buffer_addr = ppdev->cmd_buffer_addr;
1049 
1050 		/* do a copy of the ctrlmode[_supported] too */
1051 		dev->can.ctrlmode = ppdev->dev.can.ctrlmode;
1052 		dev->can.ctrlmode_supported = ppdev->dev.can.ctrlmode_supported;
1053 
1054 		fw_info = &pdev->usb_if->fw_info;
1055 	}
1056 
1057 	pdev->usb_if->dev[dev->ctrl_idx] = dev;
1058 	dev->can_channel_id =
1059 		le32_to_cpu(pdev->usb_if->fw_info.dev_id[dev->ctrl_idx]);
1060 
1061 	/* if vendor rsp type is greater than or equal to 2, then it contains EP
1062 	 * numbers to use for data pipes. If not, then statically defined EP are
1063 	 * used (see peak_usb_create_dev()).
1064 	 */
1065 	if (le16_to_cpu(fw_info->type) >= PCAN_USBFD_TYPE_EXT) {
1066 		dev->ep_msg_in = fw_info->data_in_ep;
1067 		dev->ep_msg_out = fw_info->data_out_ep[dev->ctrl_idx];
1068 	}
1069 
1070 	/* set clock domain */
1071 	for (i = 0; i < ARRAY_SIZE(pcan_usb_fd_clk_freq); i++)
1072 		if (dev->adapter->clock.freq == pcan_usb_fd_clk_freq[i])
1073 			break;
1074 
1075 	if (i >= ARRAY_SIZE(pcan_usb_fd_clk_freq)) {
1076 		dev_warn(dev->netdev->dev.parent,
1077 			 "incompatible clock frequencies\n");
1078 		err = -EINVAL;
1079 		goto err_out_2;
1080 	}
1081 
1082 	pcan_usb_fd_set_clock_domain(dev, i);
1083 
1084 	/* set LED in default state (end of init phase) */
1085 	pcan_usb_fd_set_can_led(dev, PCAN_UFD_LED_DEF);
1086 
1087 	return 0;
1088 
1089 err_out_2:
1090 	kfree(pdev->cmd_buffer_addr);
1091 err_out_1:
1092 	kfree(pdev->usb_if);
1093 err_out:
1094 	return err;
1095 }
1096 
1097 /* called when driver module is being unloaded */
pcan_usb_fd_exit(struct peak_usb_device * dev)1098 static void pcan_usb_fd_exit(struct peak_usb_device *dev)
1099 {
1100 	struct pcan_usb_fd_device *pdev =
1101 			container_of(dev, struct pcan_usb_fd_device, dev);
1102 
1103 	/* when rmmod called before unplug and if down, should reset things
1104 	 * before leaving
1105 	 */
1106 	if (dev->can.state != CAN_STATE_STOPPED) {
1107 		/* set bus off on the corresponding channel */
1108 		pcan_usb_fd_set_bus(dev, 0);
1109 	}
1110 
1111 	/* switch off corresponding CAN LEDs */
1112 	pcan_usb_fd_set_can_led(dev, PCAN_UFD_LED_OFF);
1113 
1114 	/* if channel #0 (only) */
1115 	if (dev->ctrl_idx == 0) {
1116 		/* turn off calibration message if any device were opened */
1117 		if (pdev->usb_if->dev_opened_count > 0)
1118 			pcan_usb_fd_set_options(dev, 0,
1119 						PUCAN_OPTION_ERROR,
1120 						PCAN_UFD_FLTEXT_CALIBRATION);
1121 
1122 		/* tell USB adapter that the driver is being unloaded */
1123 		pcan_usb_fd_drv_loaded(dev, 0);
1124 	}
1125 }
1126 
1127 /* called when the USB adapter is unplugged */
pcan_usb_fd_free(struct peak_usb_device * dev)1128 static void pcan_usb_fd_free(struct peak_usb_device *dev)
1129 {
1130 	/* last device: can free shared objects now */
1131 	if (!dev->prev_siblings && !dev->next_siblings) {
1132 		struct pcan_usb_fd_device *pdev =
1133 			container_of(dev, struct pcan_usb_fd_device, dev);
1134 
1135 		/* free commands buffer */
1136 		kfree(pdev->cmd_buffer_addr);
1137 
1138 		/* free usb interface object */
1139 		kfree(pdev->usb_if);
1140 	}
1141 }
1142 
1143 /* blink LED's */
pcan_usb_fd_set_phys_id(struct net_device * netdev,enum ethtool_phys_id_state state)1144 static int pcan_usb_fd_set_phys_id(struct net_device *netdev,
1145 				   enum ethtool_phys_id_state state)
1146 {
1147 	struct peak_usb_device *dev = netdev_priv(netdev);
1148 	int err = 0;
1149 
1150 	switch (state) {
1151 	case ETHTOOL_ID_ACTIVE:
1152 		err = pcan_usb_fd_set_can_led(dev, PCAN_UFD_LED_FAST);
1153 		break;
1154 	case ETHTOOL_ID_INACTIVE:
1155 		err = pcan_usb_fd_set_can_led(dev, PCAN_UFD_LED_DEF);
1156 		break;
1157 	default:
1158 		break;
1159 	}
1160 
1161 	return err;
1162 }
1163 
1164 static const struct ethtool_ops pcan_usb_fd_ethtool_ops = {
1165 	.set_phys_id = pcan_usb_fd_set_phys_id,
1166 	.get_ts_info = pcan_get_ts_info,
1167 	.get_eeprom_len	= peak_usb_get_eeprom_len,
1168 	.get_eeprom = peak_usb_get_eeprom,
1169 	.set_eeprom = peak_usb_set_eeprom,
1170 };
1171 
1172 /* describes the PCAN-USB FD adapter */
1173 static const struct can_bittiming_const pcan_usb_fd_const = {
1174 	.name = "pcan_usb_fd",
1175 	.tseg1_min = 1,
1176 	.tseg1_max = (1 << PUCAN_TSLOW_TSGEG1_BITS),
1177 	.tseg2_min = 1,
1178 	.tseg2_max = (1 << PUCAN_TSLOW_TSGEG2_BITS),
1179 	.sjw_max = (1 << PUCAN_TSLOW_SJW_BITS),
1180 	.brp_min = 1,
1181 	.brp_max = (1 << PUCAN_TSLOW_BRP_BITS),
1182 	.brp_inc = 1,
1183 };
1184 
1185 static const struct can_bittiming_const pcan_usb_fd_data_const = {
1186 	.name = "pcan_usb_fd",
1187 	.tseg1_min = 1,
1188 	.tseg1_max = (1 << PUCAN_TFAST_TSGEG1_BITS),
1189 	.tseg2_min = 1,
1190 	.tseg2_max = (1 << PUCAN_TFAST_TSGEG2_BITS),
1191 	.sjw_max = (1 << PUCAN_TFAST_SJW_BITS),
1192 	.brp_min = 1,
1193 	.brp_max = (1 << PUCAN_TFAST_BRP_BITS),
1194 	.brp_inc = 1,
1195 };
1196 
1197 const struct peak_usb_adapter pcan_usb_fd = {
1198 	.name = "PCAN-USB FD",
1199 	.device_id = PCAN_USBFD_PRODUCT_ID,
1200 	.ctrl_count = PCAN_USBFD_CHANNEL_COUNT,
1201 	.ctrlmode_supported = CAN_CTRLMODE_FD |
1202 			CAN_CTRLMODE_3_SAMPLES | CAN_CTRLMODE_LISTENONLY |
1203 			CAN_CTRLMODE_ONE_SHOT | CAN_CTRLMODE_CC_LEN8_DLC,
1204 	.clock = {
1205 		.freq = PCAN_UFD_CRYSTAL_HZ,
1206 	},
1207 	.bittiming_const = &pcan_usb_fd_const,
1208 	.data_bittiming_const = &pcan_usb_fd_data_const,
1209 
1210 	/* size of device private data */
1211 	.sizeof_dev_private = sizeof(struct pcan_usb_fd_device),
1212 
1213 	.ethtool_ops = &pcan_usb_fd_ethtool_ops,
1214 
1215 	/* timestamps usage */
1216 	.ts_used_bits = 32,
1217 	.us_per_ts_scale = 1, /* us = (ts * scale) >> shift */
1218 	.us_per_ts_shift = 0,
1219 
1220 	/* give here messages in/out endpoints */
1221 	.ep_msg_in = PCAN_USBPRO_EP_MSGIN,
1222 	.ep_msg_out = {PCAN_USBPRO_EP_MSGOUT_0},
1223 
1224 	/* size of rx/tx usb buffers */
1225 	.rx_buffer_size = PCAN_UFD_RX_BUFFER_SIZE,
1226 	.tx_buffer_size = PCAN_UFD_TX_BUFFER_SIZE,
1227 
1228 	/* device callbacks */
1229 	.intf_probe = pcan_usb_fd_probe,
1230 	.dev_init = pcan_usb_fd_init,
1231 
1232 	.dev_exit = pcan_usb_fd_exit,
1233 	.dev_free = pcan_usb_fd_free,
1234 	.dev_set_bus = pcan_usb_fd_set_bus,
1235 	.dev_set_bittiming = pcan_usb_fd_set_bittiming_slow,
1236 	.dev_set_data_bittiming = pcan_usb_fd_set_bittiming_fast,
1237 	.dev_get_can_channel_id = pcan_usb_fd_get_can_channel_id,
1238 	.dev_set_can_channel_id = pcan_usb_fd_set_can_channel_id,
1239 	.dev_decode_buf = pcan_usb_fd_decode_buf,
1240 	.dev_start = pcan_usb_fd_start,
1241 	.dev_stop = pcan_usb_fd_stop,
1242 	.dev_restart_async = pcan_usb_fd_restart_async,
1243 	.dev_encode_msg = pcan_usb_fd_encode_msg,
1244 
1245 	.do_get_berr_counter = pcan_usb_fd_get_berr_counter,
1246 };
1247 
1248 /* describes the PCAN-CHIP USB */
1249 static const struct can_bittiming_const pcan_usb_chip_const = {
1250 	.name = "pcan_chip_usb",
1251 	.tseg1_min = 1,
1252 	.tseg1_max = (1 << PUCAN_TSLOW_TSGEG1_BITS),
1253 	.tseg2_min = 1,
1254 	.tseg2_max = (1 << PUCAN_TSLOW_TSGEG2_BITS),
1255 	.sjw_max = (1 << PUCAN_TSLOW_SJW_BITS),
1256 	.brp_min = 1,
1257 	.brp_max = (1 << PUCAN_TSLOW_BRP_BITS),
1258 	.brp_inc = 1,
1259 };
1260 
1261 static const struct can_bittiming_const pcan_usb_chip_data_const = {
1262 	.name = "pcan_chip_usb",
1263 	.tseg1_min = 1,
1264 	.tseg1_max = (1 << PUCAN_TFAST_TSGEG1_BITS),
1265 	.tseg2_min = 1,
1266 	.tseg2_max = (1 << PUCAN_TFAST_TSGEG2_BITS),
1267 	.sjw_max = (1 << PUCAN_TFAST_SJW_BITS),
1268 	.brp_min = 1,
1269 	.brp_max = (1 << PUCAN_TFAST_BRP_BITS),
1270 	.brp_inc = 1,
1271 };
1272 
1273 const struct peak_usb_adapter pcan_usb_chip = {
1274 	.name = "PCAN-Chip USB",
1275 	.device_id = PCAN_USBCHIP_PRODUCT_ID,
1276 	.ctrl_count = PCAN_USBFD_CHANNEL_COUNT,
1277 	.ctrlmode_supported = CAN_CTRLMODE_FD |
1278 		CAN_CTRLMODE_3_SAMPLES | CAN_CTRLMODE_LISTENONLY |
1279 		CAN_CTRLMODE_ONE_SHOT | CAN_CTRLMODE_CC_LEN8_DLC,
1280 	.clock = {
1281 		.freq = PCAN_UFD_CRYSTAL_HZ,
1282 	},
1283 	.bittiming_const = &pcan_usb_chip_const,
1284 	.data_bittiming_const = &pcan_usb_chip_data_const,
1285 
1286 	/* size of device private data */
1287 	.sizeof_dev_private = sizeof(struct pcan_usb_fd_device),
1288 
1289 	.ethtool_ops = &pcan_usb_fd_ethtool_ops,
1290 
1291 	/* timestamps usage */
1292 	.ts_used_bits = 32,
1293 	.us_per_ts_scale = 1, /* us = (ts * scale) >> shift */
1294 	.us_per_ts_shift = 0,
1295 
1296 	/* give here messages in/out endpoints */
1297 	.ep_msg_in = PCAN_USBPRO_EP_MSGIN,
1298 	.ep_msg_out = {PCAN_USBPRO_EP_MSGOUT_0},
1299 
1300 	/* size of rx/tx usb buffers */
1301 	.rx_buffer_size = PCAN_UFD_RX_BUFFER_SIZE,
1302 	.tx_buffer_size = PCAN_UFD_TX_BUFFER_SIZE,
1303 
1304 	/* device callbacks */
1305 	.intf_probe = pcan_usb_pro_probe,	/* same as PCAN-USB Pro */
1306 	.dev_init = pcan_usb_fd_init,
1307 
1308 	.dev_exit = pcan_usb_fd_exit,
1309 	.dev_free = pcan_usb_fd_free,
1310 	.dev_set_bus = pcan_usb_fd_set_bus,
1311 	.dev_set_bittiming = pcan_usb_fd_set_bittiming_slow,
1312 	.dev_set_data_bittiming = pcan_usb_fd_set_bittiming_fast,
1313 	.dev_get_can_channel_id = pcan_usb_fd_get_can_channel_id,
1314 	.dev_set_can_channel_id = pcan_usb_fd_set_can_channel_id,
1315 	.dev_decode_buf = pcan_usb_fd_decode_buf,
1316 	.dev_start = pcan_usb_fd_start,
1317 	.dev_stop = pcan_usb_fd_stop,
1318 	.dev_restart_async = pcan_usb_fd_restart_async,
1319 	.dev_encode_msg = pcan_usb_fd_encode_msg,
1320 
1321 	.do_get_berr_counter = pcan_usb_fd_get_berr_counter,
1322 };
1323 
1324 /* describes the PCAN-USB Pro FD adapter */
1325 static const struct can_bittiming_const pcan_usb_pro_fd_const = {
1326 	.name = "pcan_usb_pro_fd",
1327 	.tseg1_min = 1,
1328 	.tseg1_max = (1 << PUCAN_TSLOW_TSGEG1_BITS),
1329 	.tseg2_min = 1,
1330 	.tseg2_max = (1 << PUCAN_TSLOW_TSGEG2_BITS),
1331 	.sjw_max = (1 << PUCAN_TSLOW_SJW_BITS),
1332 	.brp_min = 1,
1333 	.brp_max = (1 << PUCAN_TSLOW_BRP_BITS),
1334 	.brp_inc = 1,
1335 };
1336 
1337 static const struct can_bittiming_const pcan_usb_pro_fd_data_const = {
1338 	.name = "pcan_usb_pro_fd",
1339 	.tseg1_min = 1,
1340 	.tseg1_max = (1 << PUCAN_TFAST_TSGEG1_BITS),
1341 	.tseg2_min = 1,
1342 	.tseg2_max = (1 << PUCAN_TFAST_TSGEG2_BITS),
1343 	.sjw_max = (1 << PUCAN_TFAST_SJW_BITS),
1344 	.brp_min = 1,
1345 	.brp_max = (1 << PUCAN_TFAST_BRP_BITS),
1346 	.brp_inc = 1,
1347 };
1348 
1349 const struct peak_usb_adapter pcan_usb_pro_fd = {
1350 	.name = "PCAN-USB Pro FD",
1351 	.device_id = PCAN_USBPROFD_PRODUCT_ID,
1352 	.ctrl_count = PCAN_USBPROFD_CHANNEL_COUNT,
1353 	.ctrlmode_supported = CAN_CTRLMODE_FD |
1354 			CAN_CTRLMODE_3_SAMPLES | CAN_CTRLMODE_LISTENONLY |
1355 			CAN_CTRLMODE_ONE_SHOT | CAN_CTRLMODE_CC_LEN8_DLC,
1356 	.clock = {
1357 		.freq = PCAN_UFD_CRYSTAL_HZ,
1358 	},
1359 	.bittiming_const = &pcan_usb_pro_fd_const,
1360 	.data_bittiming_const = &pcan_usb_pro_fd_data_const,
1361 
1362 	/* size of device private data */
1363 	.sizeof_dev_private = sizeof(struct pcan_usb_fd_device),
1364 
1365 	.ethtool_ops = &pcan_usb_fd_ethtool_ops,
1366 
1367 	/* timestamps usage */
1368 	.ts_used_bits = 32,
1369 	.us_per_ts_scale = 1, /* us = (ts * scale) >> shift */
1370 	.us_per_ts_shift = 0,
1371 
1372 	/* give here messages in/out endpoints */
1373 	.ep_msg_in = PCAN_USBPRO_EP_MSGIN,
1374 	.ep_msg_out = {PCAN_USBPRO_EP_MSGOUT_0, PCAN_USBPRO_EP_MSGOUT_1},
1375 
1376 	/* size of rx/tx usb buffers */
1377 	.rx_buffer_size = PCAN_UFD_RX_BUFFER_SIZE,
1378 	.tx_buffer_size = PCAN_UFD_TX_BUFFER_SIZE,
1379 
1380 	/* device callbacks */
1381 	.intf_probe = pcan_usb_pro_probe,	/* same as PCAN-USB Pro */
1382 	.dev_init = pcan_usb_fd_init,
1383 
1384 	.dev_exit = pcan_usb_fd_exit,
1385 	.dev_free = pcan_usb_fd_free,
1386 	.dev_set_bus = pcan_usb_fd_set_bus,
1387 	.dev_set_bittiming = pcan_usb_fd_set_bittiming_slow,
1388 	.dev_set_data_bittiming = pcan_usb_fd_set_bittiming_fast,
1389 	.dev_get_can_channel_id = pcan_usb_fd_get_can_channel_id,
1390 	.dev_set_can_channel_id = pcan_usb_fd_set_can_channel_id,
1391 	.dev_decode_buf = pcan_usb_fd_decode_buf,
1392 	.dev_start = pcan_usb_fd_start,
1393 	.dev_stop = pcan_usb_fd_stop,
1394 	.dev_restart_async = pcan_usb_fd_restart_async,
1395 	.dev_encode_msg = pcan_usb_fd_encode_msg,
1396 
1397 	.do_get_berr_counter = pcan_usb_fd_get_berr_counter,
1398 };
1399 
1400 /* describes the PCAN-USB X6 adapter */
1401 static const struct can_bittiming_const pcan_usb_x6_const = {
1402 	.name = "pcan_usb_x6",
1403 	.tseg1_min = 1,
1404 	.tseg1_max = (1 << PUCAN_TSLOW_TSGEG1_BITS),
1405 	.tseg2_min = 1,
1406 	.tseg2_max = (1 << PUCAN_TSLOW_TSGEG2_BITS),
1407 	.sjw_max = (1 << PUCAN_TSLOW_SJW_BITS),
1408 	.brp_min = 1,
1409 	.brp_max = (1 << PUCAN_TSLOW_BRP_BITS),
1410 	.brp_inc = 1,
1411 };
1412 
1413 static const struct can_bittiming_const pcan_usb_x6_data_const = {
1414 	.name = "pcan_usb_x6",
1415 	.tseg1_min = 1,
1416 	.tseg1_max = (1 << PUCAN_TFAST_TSGEG1_BITS),
1417 	.tseg2_min = 1,
1418 	.tseg2_max = (1 << PUCAN_TFAST_TSGEG2_BITS),
1419 	.sjw_max = (1 << PUCAN_TFAST_SJW_BITS),
1420 	.brp_min = 1,
1421 	.brp_max = (1 << PUCAN_TFAST_BRP_BITS),
1422 	.brp_inc = 1,
1423 };
1424 
1425 const struct peak_usb_adapter pcan_usb_x6 = {
1426 	.name = "PCAN-USB X6",
1427 	.device_id = PCAN_USBX6_PRODUCT_ID,
1428 	.ctrl_count = PCAN_USBPROFD_CHANNEL_COUNT,
1429 	.ctrlmode_supported = CAN_CTRLMODE_FD |
1430 			CAN_CTRLMODE_3_SAMPLES | CAN_CTRLMODE_LISTENONLY |
1431 			CAN_CTRLMODE_ONE_SHOT | CAN_CTRLMODE_CC_LEN8_DLC,
1432 	.clock = {
1433 		.freq = PCAN_UFD_CRYSTAL_HZ,
1434 	},
1435 	.bittiming_const = &pcan_usb_x6_const,
1436 	.data_bittiming_const = &pcan_usb_x6_data_const,
1437 
1438 	/* size of device private data */
1439 	.sizeof_dev_private = sizeof(struct pcan_usb_fd_device),
1440 
1441 	.ethtool_ops = &pcan_usb_fd_ethtool_ops,
1442 
1443 	/* timestamps usage */
1444 	.ts_used_bits = 32,
1445 	.us_per_ts_scale = 1, /* us = (ts * scale) >> shift */
1446 	.us_per_ts_shift = 0,
1447 
1448 	/* give here messages in/out endpoints */
1449 	.ep_msg_in = PCAN_USBPRO_EP_MSGIN,
1450 	.ep_msg_out = {PCAN_USBPRO_EP_MSGOUT_0, PCAN_USBPRO_EP_MSGOUT_1},
1451 
1452 	/* size of rx/tx usb buffers */
1453 	.rx_buffer_size = PCAN_UFD_RX_BUFFER_SIZE,
1454 	.tx_buffer_size = PCAN_UFD_TX_BUFFER_SIZE,
1455 
1456 	/* device callbacks */
1457 	.intf_probe = pcan_usb_pro_probe,	/* same as PCAN-USB Pro */
1458 	.dev_init = pcan_usb_fd_init,
1459 
1460 	.dev_exit = pcan_usb_fd_exit,
1461 	.dev_free = pcan_usb_fd_free,
1462 	.dev_set_bus = pcan_usb_fd_set_bus,
1463 	.dev_set_bittiming = pcan_usb_fd_set_bittiming_slow,
1464 	.dev_set_data_bittiming = pcan_usb_fd_set_bittiming_fast,
1465 	.dev_get_can_channel_id = pcan_usb_fd_get_can_channel_id,
1466 	.dev_set_can_channel_id = pcan_usb_fd_set_can_channel_id,
1467 	.dev_decode_buf = pcan_usb_fd_decode_buf,
1468 	.dev_start = pcan_usb_fd_start,
1469 	.dev_stop = pcan_usb_fd_stop,
1470 	.dev_restart_async = pcan_usb_fd_restart_async,
1471 	.dev_encode_msg = pcan_usb_fd_encode_msg,
1472 
1473 	.do_get_berr_counter = pcan_usb_fd_get_berr_counter,
1474 };
1475