1 /*
2  * Copyright (C) 2005 Marc Kleine-Budde, Pengutronix
3  * Copyright (C) 2006 Andrey Volkov, Varma Electronics
4  * Copyright (C) 2008-2009 Wolfgang Grandegger <wg@grandegger.com>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the version 2 of the GNU General Public License
8  * as published by the Free Software Foundation
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, see <http://www.gnu.org/licenses/>.
17  */
18 
19 #include <linux/module.h>
20 #include <linux/kernel.h>
21 #include <linux/slab.h>
22 #include <linux/netdevice.h>
23 #include <linux/if_arp.h>
24 #include <linux/can.h>
25 #include <linux/can/dev.h>
26 #include <linux/can/skb.h>
27 #include <linux/can/netlink.h>
28 #include <linux/can/led.h>
29 #include <net/rtnetlink.h>
30 
31 #define MOD_DESC "CAN device driver interface"
32 
33 MODULE_DESCRIPTION(MOD_DESC);
34 MODULE_LICENSE("GPL v2");
35 MODULE_AUTHOR("Wolfgang Grandegger <wg@grandegger.com>");
36 
37 /* CAN DLC to real data length conversion helpers */
38 
39 static const u8 dlc2len[] = {0, 1, 2, 3, 4, 5, 6, 7,
40 			     8, 12, 16, 20, 24, 32, 48, 64};
41 
42 /* get data length from can_dlc with sanitized can_dlc */
can_dlc2len(u8 can_dlc)43 u8 can_dlc2len(u8 can_dlc)
44 {
45 	return dlc2len[can_dlc & 0x0F];
46 }
47 EXPORT_SYMBOL_GPL(can_dlc2len);
48 
49 static const u8 len2dlc[] = {0, 1, 2, 3, 4, 5, 6, 7, 8,		/* 0 - 8 */
50 			     9, 9, 9, 9,			/* 9 - 12 */
51 			     10, 10, 10, 10,			/* 13 - 16 */
52 			     11, 11, 11, 11,			/* 17 - 20 */
53 			     12, 12, 12, 12,			/* 21 - 24 */
54 			     13, 13, 13, 13, 13, 13, 13, 13,	/* 25 - 32 */
55 			     14, 14, 14, 14, 14, 14, 14, 14,	/* 33 - 40 */
56 			     14, 14, 14, 14, 14, 14, 14, 14,	/* 41 - 48 */
57 			     15, 15, 15, 15, 15, 15, 15, 15,	/* 49 - 56 */
58 			     15, 15, 15, 15, 15, 15, 15, 15};	/* 57 - 64 */
59 
60 /* map the sanitized data length to an appropriate data length code */
can_len2dlc(u8 len)61 u8 can_len2dlc(u8 len)
62 {
63 	if (unlikely(len > 64))
64 		return 0xF;
65 
66 	return len2dlc[len];
67 }
68 EXPORT_SYMBOL_GPL(can_len2dlc);
69 
70 #ifdef CONFIG_CAN_CALC_BITTIMING
71 #define CAN_CALC_MAX_ERROR 50 /* in one-tenth of a percent */
72 
73 /*
74  * Bit-timing calculation derived from:
75  *
76  * Code based on LinCAN sources and H8S2638 project
77  * Copyright 2004-2006 Pavel Pisa - DCE FELK CVUT cz
78  * Copyright 2005      Stanislav Marek
79  * email: pisa@cmp.felk.cvut.cz
80  *
81  * Calculates proper bit-timing parameters for a specified bit-rate
82  * and sample-point, which can then be used to set the bit-timing
83  * registers of the CAN controller. You can find more information
84  * in the header file linux/can/netlink.h.
85  */
can_update_spt(const struct can_bittiming_const * btc,int sampl_pt,int tseg,int * tseg1,int * tseg2)86 static int can_update_spt(const struct can_bittiming_const *btc,
87 			  int sampl_pt, int tseg, int *tseg1, int *tseg2)
88 {
89 	*tseg2 = tseg + 1 - (sampl_pt * (tseg + 1)) / 1000;
90 	if (*tseg2 < btc->tseg2_min)
91 		*tseg2 = btc->tseg2_min;
92 	if (*tseg2 > btc->tseg2_max)
93 		*tseg2 = btc->tseg2_max;
94 	*tseg1 = tseg - *tseg2;
95 	if (*tseg1 > btc->tseg1_max) {
96 		*tseg1 = btc->tseg1_max;
97 		*tseg2 = tseg - *tseg1;
98 	}
99 	return 1000 * (tseg + 1 - *tseg2) / (tseg + 1);
100 }
101 
can_calc_bittiming(struct net_device * dev,struct can_bittiming * bt,const struct can_bittiming_const * btc)102 static int can_calc_bittiming(struct net_device *dev, struct can_bittiming *bt,
103 			      const struct can_bittiming_const *btc)
104 {
105 	struct can_priv *priv = netdev_priv(dev);
106 	long best_error = 1000000000, error = 0;
107 	int best_tseg = 0, best_brp = 0, brp = 0;
108 	int tsegall, tseg = 0, tseg1 = 0, tseg2 = 0;
109 	int spt_error = 1000, spt = 0, sampl_pt;
110 	long rate;
111 	u64 v64;
112 
113 	/* Use CiA recommended sample points */
114 	if (bt->sample_point) {
115 		sampl_pt = bt->sample_point;
116 	} else {
117 		if (bt->bitrate > 800000)
118 			sampl_pt = 750;
119 		else if (bt->bitrate > 500000)
120 			sampl_pt = 800;
121 		else
122 			sampl_pt = 875;
123 	}
124 
125 	/* tseg even = round down, odd = round up */
126 	for (tseg = (btc->tseg1_max + btc->tseg2_max) * 2 + 1;
127 	     tseg >= (btc->tseg1_min + btc->tseg2_min) * 2; tseg--) {
128 		tsegall = 1 + tseg / 2;
129 		/* Compute all possible tseg choices (tseg=tseg1+tseg2) */
130 		brp = priv->clock.freq / (tsegall * bt->bitrate) + tseg % 2;
131 		/* chose brp step which is possible in system */
132 		brp = (brp / btc->brp_inc) * btc->brp_inc;
133 		if ((brp < btc->brp_min) || (brp > btc->brp_max))
134 			continue;
135 		rate = priv->clock.freq / (brp * tsegall);
136 		error = bt->bitrate - rate;
137 		/* tseg brp biterror */
138 		if (error < 0)
139 			error = -error;
140 		if (error > best_error)
141 			continue;
142 		best_error = error;
143 		if (error == 0) {
144 			spt = can_update_spt(btc, sampl_pt, tseg / 2,
145 					     &tseg1, &tseg2);
146 			error = sampl_pt - spt;
147 			if (error < 0)
148 				error = -error;
149 			if (error > spt_error)
150 				continue;
151 			spt_error = error;
152 		}
153 		best_tseg = tseg / 2;
154 		best_brp = brp;
155 		if (error == 0)
156 			break;
157 	}
158 
159 	if (best_error) {
160 		/* Error in one-tenth of a percent */
161 		error = (best_error * 1000) / bt->bitrate;
162 		if (error > CAN_CALC_MAX_ERROR) {
163 			netdev_err(dev,
164 				   "bitrate error %ld.%ld%% too high\n",
165 				   error / 10, error % 10);
166 			return -EDOM;
167 		} else {
168 			netdev_warn(dev, "bitrate error %ld.%ld%%\n",
169 				    error / 10, error % 10);
170 		}
171 	}
172 
173 	/* real sample point */
174 	bt->sample_point = can_update_spt(btc, sampl_pt, best_tseg,
175 					  &tseg1, &tseg2);
176 
177 	v64 = (u64)best_brp * 1000000000UL;
178 	do_div(v64, priv->clock.freq);
179 	bt->tq = (u32)v64;
180 	bt->prop_seg = tseg1 / 2;
181 	bt->phase_seg1 = tseg1 - bt->prop_seg;
182 	bt->phase_seg2 = tseg2;
183 
184 	/* check for sjw user settings */
185 	if (!bt->sjw || !btc->sjw_max)
186 		bt->sjw = 1;
187 	else {
188 		/* bt->sjw is at least 1 -> sanitize upper bound to sjw_max */
189 		if (bt->sjw > btc->sjw_max)
190 			bt->sjw = btc->sjw_max;
191 		/* bt->sjw must not be higher than tseg2 */
192 		if (tseg2 < bt->sjw)
193 			bt->sjw = tseg2;
194 	}
195 
196 	bt->brp = best_brp;
197 	/* real bit-rate */
198 	bt->bitrate = priv->clock.freq / (bt->brp * (tseg1 + tseg2 + 1));
199 
200 	return 0;
201 }
202 #else /* !CONFIG_CAN_CALC_BITTIMING */
can_calc_bittiming(struct net_device * dev,struct can_bittiming * bt,const struct can_bittiming_const * btc)203 static int can_calc_bittiming(struct net_device *dev, struct can_bittiming *bt,
204 			      const struct can_bittiming_const *btc)
205 {
206 	netdev_err(dev, "bit-timing calculation not available\n");
207 	return -EINVAL;
208 }
209 #endif /* CONFIG_CAN_CALC_BITTIMING */
210 
211 /*
212  * Checks the validity of the specified bit-timing parameters prop_seg,
213  * phase_seg1, phase_seg2 and sjw and tries to determine the bitrate
214  * prescaler value brp. You can find more information in the header
215  * file linux/can/netlink.h.
216  */
can_fixup_bittiming(struct net_device * dev,struct can_bittiming * bt,const struct can_bittiming_const * btc)217 static int can_fixup_bittiming(struct net_device *dev, struct can_bittiming *bt,
218 			       const struct can_bittiming_const *btc)
219 {
220 	struct can_priv *priv = netdev_priv(dev);
221 	int tseg1, alltseg;
222 	u64 brp64;
223 
224 	tseg1 = bt->prop_seg + bt->phase_seg1;
225 	if (!bt->sjw)
226 		bt->sjw = 1;
227 	if (bt->sjw > btc->sjw_max ||
228 	    tseg1 < btc->tseg1_min || tseg1 > btc->tseg1_max ||
229 	    bt->phase_seg2 < btc->tseg2_min || bt->phase_seg2 > btc->tseg2_max)
230 		return -ERANGE;
231 
232 	brp64 = (u64)priv->clock.freq * (u64)bt->tq;
233 	if (btc->brp_inc > 1)
234 		do_div(brp64, btc->brp_inc);
235 	brp64 += 500000000UL - 1;
236 	do_div(brp64, 1000000000UL); /* the practicable BRP */
237 	if (btc->brp_inc > 1)
238 		brp64 *= btc->brp_inc;
239 	bt->brp = (u32)brp64;
240 
241 	if (bt->brp < btc->brp_min || bt->brp > btc->brp_max)
242 		return -EINVAL;
243 
244 	alltseg = bt->prop_seg + bt->phase_seg1 + bt->phase_seg2 + 1;
245 	bt->bitrate = priv->clock.freq / (bt->brp * alltseg);
246 	bt->sample_point = ((tseg1 + 1) * 1000) / alltseg;
247 
248 	return 0;
249 }
250 
can_get_bittiming(struct net_device * dev,struct can_bittiming * bt,const struct can_bittiming_const * btc)251 static int can_get_bittiming(struct net_device *dev, struct can_bittiming *bt,
252 			     const struct can_bittiming_const *btc)
253 {
254 	int err;
255 
256 	/* Check if the CAN device has bit-timing parameters */
257 	if (!btc)
258 		return -EOPNOTSUPP;
259 
260 	/*
261 	 * Depending on the given can_bittiming parameter structure the CAN
262 	 * timing parameters are calculated based on the provided bitrate OR
263 	 * alternatively the CAN timing parameters (tq, prop_seg, etc.) are
264 	 * provided directly which are then checked and fixed up.
265 	 */
266 	if (!bt->tq && bt->bitrate)
267 		err = can_calc_bittiming(dev, bt, btc);
268 	else if (bt->tq && !bt->bitrate)
269 		err = can_fixup_bittiming(dev, bt, btc);
270 	else
271 		err = -EINVAL;
272 
273 	return err;
274 }
275 
can_update_state_error_stats(struct net_device * dev,enum can_state new_state)276 static void can_update_state_error_stats(struct net_device *dev,
277 					 enum can_state new_state)
278 {
279 	struct can_priv *priv = netdev_priv(dev);
280 
281 	if (new_state <= priv->state)
282 		return;
283 
284 	switch (new_state) {
285 	case CAN_STATE_ERROR_WARNING:
286 		priv->can_stats.error_warning++;
287 		break;
288 	case CAN_STATE_ERROR_PASSIVE:
289 		priv->can_stats.error_passive++;
290 		break;
291 	case CAN_STATE_BUS_OFF:
292 		priv->can_stats.bus_off++;
293 		break;
294 	default:
295 		break;
296 	}
297 }
298 
can_tx_state_to_frame(struct net_device * dev,enum can_state state)299 static int can_tx_state_to_frame(struct net_device *dev, enum can_state state)
300 {
301 	switch (state) {
302 	case CAN_STATE_ERROR_ACTIVE:
303 		return CAN_ERR_CRTL_ACTIVE;
304 	case CAN_STATE_ERROR_WARNING:
305 		return CAN_ERR_CRTL_TX_WARNING;
306 	case CAN_STATE_ERROR_PASSIVE:
307 		return CAN_ERR_CRTL_TX_PASSIVE;
308 	default:
309 		return 0;
310 	}
311 }
312 
can_rx_state_to_frame(struct net_device * dev,enum can_state state)313 static int can_rx_state_to_frame(struct net_device *dev, enum can_state state)
314 {
315 	switch (state) {
316 	case CAN_STATE_ERROR_ACTIVE:
317 		return CAN_ERR_CRTL_ACTIVE;
318 	case CAN_STATE_ERROR_WARNING:
319 		return CAN_ERR_CRTL_RX_WARNING;
320 	case CAN_STATE_ERROR_PASSIVE:
321 		return CAN_ERR_CRTL_RX_PASSIVE;
322 	default:
323 		return 0;
324 	}
325 }
326 
can_change_state(struct net_device * dev,struct can_frame * cf,enum can_state tx_state,enum can_state rx_state)327 void can_change_state(struct net_device *dev, struct can_frame *cf,
328 		      enum can_state tx_state, enum can_state rx_state)
329 {
330 	struct can_priv *priv = netdev_priv(dev);
331 	enum can_state new_state = max(tx_state, rx_state);
332 
333 	if (unlikely(new_state == priv->state)) {
334 		netdev_warn(dev, "%s: oops, state did not change", __func__);
335 		return;
336 	}
337 
338 	netdev_dbg(dev, "New error state: %d\n", new_state);
339 
340 	can_update_state_error_stats(dev, new_state);
341 	priv->state = new_state;
342 
343 	if (unlikely(new_state == CAN_STATE_BUS_OFF)) {
344 		cf->can_id |= CAN_ERR_BUSOFF;
345 		return;
346 	}
347 
348 	cf->can_id |= CAN_ERR_CRTL;
349 	cf->data[1] |= tx_state >= rx_state ?
350 		       can_tx_state_to_frame(dev, tx_state) : 0;
351 	cf->data[1] |= tx_state <= rx_state ?
352 		       can_rx_state_to_frame(dev, rx_state) : 0;
353 }
354 EXPORT_SYMBOL_GPL(can_change_state);
355 
356 /*
357  * Local echo of CAN messages
358  *
359  * CAN network devices *should* support a local echo functionality
360  * (see Documentation/networking/can.txt). To test the handling of CAN
361  * interfaces that do not support the local echo both driver types are
362  * implemented. In the case that the driver does not support the echo
363  * the IFF_ECHO remains clear in dev->flags. This causes the PF_CAN core
364  * to perform the echo as a fallback solution.
365  */
can_flush_echo_skb(struct net_device * dev)366 static void can_flush_echo_skb(struct net_device *dev)
367 {
368 	struct can_priv *priv = netdev_priv(dev);
369 	struct net_device_stats *stats = &dev->stats;
370 	int i;
371 
372 	for (i = 0; i < priv->echo_skb_max; i++) {
373 		if (priv->echo_skb[i]) {
374 			kfree_skb(priv->echo_skb[i]);
375 			priv->echo_skb[i] = NULL;
376 			stats->tx_dropped++;
377 			stats->tx_aborted_errors++;
378 		}
379 	}
380 }
381 
382 /*
383  * Put the skb on the stack to be looped backed locally lateron
384  *
385  * The function is typically called in the start_xmit function
386  * of the device driver. The driver must protect access to
387  * priv->echo_skb, if necessary.
388  */
can_put_echo_skb(struct sk_buff * skb,struct net_device * dev,unsigned int idx)389 void can_put_echo_skb(struct sk_buff *skb, struct net_device *dev,
390 		      unsigned int idx)
391 {
392 	struct can_priv *priv = netdev_priv(dev);
393 
394 	BUG_ON(idx >= priv->echo_skb_max);
395 
396 	/* check flag whether this packet has to be looped back */
397 	if (!(dev->flags & IFF_ECHO) || skb->pkt_type != PACKET_LOOPBACK ||
398 	    (skb->protocol != htons(ETH_P_CAN) &&
399 	     skb->protocol != htons(ETH_P_CANFD))) {
400 		kfree_skb(skb);
401 		return;
402 	}
403 
404 	if (!priv->echo_skb[idx]) {
405 
406 		skb = can_create_echo_skb(skb);
407 		if (!skb)
408 			return;
409 
410 		/* make settings for echo to reduce code in irq context */
411 		skb->pkt_type = PACKET_BROADCAST;
412 		skb->ip_summed = CHECKSUM_UNNECESSARY;
413 		skb->dev = dev;
414 
415 		/* save this skb for tx interrupt echo handling */
416 		priv->echo_skb[idx] = skb;
417 	} else {
418 		/* locking problem with netif_stop_queue() ?? */
419 		netdev_err(dev, "%s: BUG! echo_skb is occupied!\n", __func__);
420 		kfree_skb(skb);
421 	}
422 }
423 EXPORT_SYMBOL_GPL(can_put_echo_skb);
424 
425 /*
426  * Get the skb from the stack and loop it back locally
427  *
428  * The function is typically called when the TX done interrupt
429  * is handled in the device driver. The driver must protect
430  * access to priv->echo_skb, if necessary.
431  */
can_get_echo_skb(struct net_device * dev,unsigned int idx)432 unsigned int can_get_echo_skb(struct net_device *dev, unsigned int idx)
433 {
434 	struct can_priv *priv = netdev_priv(dev);
435 
436 	BUG_ON(idx >= priv->echo_skb_max);
437 
438 	if (priv->echo_skb[idx]) {
439 		struct sk_buff *skb = priv->echo_skb[idx];
440 		struct can_frame *cf = (struct can_frame *)skb->data;
441 		u8 dlc = cf->can_dlc;
442 
443 		netif_rx(priv->echo_skb[idx]);
444 		priv->echo_skb[idx] = NULL;
445 
446 		return dlc;
447 	}
448 
449 	return 0;
450 }
451 EXPORT_SYMBOL_GPL(can_get_echo_skb);
452 
453 /*
454   * Remove the skb from the stack and free it.
455   *
456   * The function is typically called when TX failed.
457   */
can_free_echo_skb(struct net_device * dev,unsigned int idx)458 void can_free_echo_skb(struct net_device *dev, unsigned int idx)
459 {
460 	struct can_priv *priv = netdev_priv(dev);
461 
462 	BUG_ON(idx >= priv->echo_skb_max);
463 
464 	if (priv->echo_skb[idx]) {
465 		dev_kfree_skb_any(priv->echo_skb[idx]);
466 		priv->echo_skb[idx] = NULL;
467 	}
468 }
469 EXPORT_SYMBOL_GPL(can_free_echo_skb);
470 
471 /*
472  * CAN device restart for bus-off recovery
473  */
can_restart(unsigned long data)474 static void can_restart(unsigned long data)
475 {
476 	struct net_device *dev = (struct net_device *)data;
477 	struct can_priv *priv = netdev_priv(dev);
478 	struct net_device_stats *stats = &dev->stats;
479 	struct sk_buff *skb;
480 	struct can_frame *cf;
481 	int err;
482 
483 	BUG_ON(netif_carrier_ok(dev));
484 
485 	/*
486 	 * No synchronization needed because the device is bus-off and
487 	 * no messages can come in or go out.
488 	 */
489 	can_flush_echo_skb(dev);
490 
491 	/* send restart message upstream */
492 	skb = alloc_can_err_skb(dev, &cf);
493 	if (skb == NULL) {
494 		err = -ENOMEM;
495 		goto restart;
496 	}
497 	cf->can_id |= CAN_ERR_RESTARTED;
498 
499 	netif_rx(skb);
500 
501 	stats->rx_packets++;
502 	stats->rx_bytes += cf->can_dlc;
503 
504 restart:
505 	netdev_dbg(dev, "restarted\n");
506 	priv->can_stats.restarts++;
507 
508 	/* Now restart the device */
509 	err = priv->do_set_mode(dev, CAN_MODE_START);
510 
511 	netif_carrier_on(dev);
512 	if (err)
513 		netdev_err(dev, "Error %d during restart", err);
514 }
515 
can_restart_now(struct net_device * dev)516 int can_restart_now(struct net_device *dev)
517 {
518 	struct can_priv *priv = netdev_priv(dev);
519 
520 	/*
521 	 * A manual restart is only permitted if automatic restart is
522 	 * disabled and the device is in the bus-off state
523 	 */
524 	if (priv->restart_ms)
525 		return -EINVAL;
526 	if (priv->state != CAN_STATE_BUS_OFF)
527 		return -EBUSY;
528 
529 	/* Runs as soon as possible in the timer context */
530 	mod_timer(&priv->restart_timer, jiffies);
531 
532 	return 0;
533 }
534 
535 /*
536  * CAN bus-off
537  *
538  * This functions should be called when the device goes bus-off to
539  * tell the netif layer that no more packets can be sent or received.
540  * If enabled, a timer is started to trigger bus-off recovery.
541  */
can_bus_off(struct net_device * dev)542 void can_bus_off(struct net_device *dev)
543 {
544 	struct can_priv *priv = netdev_priv(dev);
545 
546 	netdev_dbg(dev, "bus-off\n");
547 
548 	netif_carrier_off(dev);
549 
550 	if (priv->restart_ms)
551 		mod_timer(&priv->restart_timer,
552 			  jiffies + (priv->restart_ms * HZ) / 1000);
553 }
554 EXPORT_SYMBOL_GPL(can_bus_off);
555 
can_setup(struct net_device * dev)556 static void can_setup(struct net_device *dev)
557 {
558 	dev->type = ARPHRD_CAN;
559 	dev->mtu = CAN_MTU;
560 	dev->hard_header_len = 0;
561 	dev->addr_len = 0;
562 	dev->tx_queue_len = 10;
563 
564 	/* New-style flags. */
565 	dev->flags = IFF_NOARP;
566 	dev->features = NETIF_F_HW_CSUM;
567 }
568 
alloc_can_skb(struct net_device * dev,struct can_frame ** cf)569 struct sk_buff *alloc_can_skb(struct net_device *dev, struct can_frame **cf)
570 {
571 	struct sk_buff *skb;
572 
573 	skb = netdev_alloc_skb(dev, sizeof(struct can_skb_priv) +
574 			       sizeof(struct can_frame));
575 	if (unlikely(!skb))
576 		return NULL;
577 
578 	skb->protocol = htons(ETH_P_CAN);
579 	skb->pkt_type = PACKET_BROADCAST;
580 	skb->ip_summed = CHECKSUM_UNNECESSARY;
581 
582 	skb_reset_mac_header(skb);
583 	skb_reset_network_header(skb);
584 	skb_reset_transport_header(skb);
585 
586 	can_skb_reserve(skb);
587 	can_skb_prv(skb)->ifindex = dev->ifindex;
588 	can_skb_prv(skb)->skbcnt = 0;
589 
590 	*cf = (struct can_frame *)skb_put(skb, sizeof(struct can_frame));
591 	memset(*cf, 0, sizeof(struct can_frame));
592 
593 	return skb;
594 }
595 EXPORT_SYMBOL_GPL(alloc_can_skb);
596 
alloc_canfd_skb(struct net_device * dev,struct canfd_frame ** cfd)597 struct sk_buff *alloc_canfd_skb(struct net_device *dev,
598 				struct canfd_frame **cfd)
599 {
600 	struct sk_buff *skb;
601 
602 	skb = netdev_alloc_skb(dev, sizeof(struct can_skb_priv) +
603 			       sizeof(struct canfd_frame));
604 	if (unlikely(!skb))
605 		return NULL;
606 
607 	skb->protocol = htons(ETH_P_CANFD);
608 	skb->pkt_type = PACKET_BROADCAST;
609 	skb->ip_summed = CHECKSUM_UNNECESSARY;
610 
611 	skb_reset_mac_header(skb);
612 	skb_reset_network_header(skb);
613 	skb_reset_transport_header(skb);
614 
615 	can_skb_reserve(skb);
616 	can_skb_prv(skb)->ifindex = dev->ifindex;
617 	can_skb_prv(skb)->skbcnt = 0;
618 
619 	*cfd = (struct canfd_frame *)skb_put(skb, sizeof(struct canfd_frame));
620 	memset(*cfd, 0, sizeof(struct canfd_frame));
621 
622 	return skb;
623 }
624 EXPORT_SYMBOL_GPL(alloc_canfd_skb);
625 
alloc_can_err_skb(struct net_device * dev,struct can_frame ** cf)626 struct sk_buff *alloc_can_err_skb(struct net_device *dev, struct can_frame **cf)
627 {
628 	struct sk_buff *skb;
629 
630 	skb = alloc_can_skb(dev, cf);
631 	if (unlikely(!skb))
632 		return NULL;
633 
634 	(*cf)->can_id = CAN_ERR_FLAG;
635 	(*cf)->can_dlc = CAN_ERR_DLC;
636 
637 	return skb;
638 }
639 EXPORT_SYMBOL_GPL(alloc_can_err_skb);
640 
641 /*
642  * Allocate and setup space for the CAN network device
643  */
alloc_candev(int sizeof_priv,unsigned int echo_skb_max)644 struct net_device *alloc_candev(int sizeof_priv, unsigned int echo_skb_max)
645 {
646 	struct net_device *dev;
647 	struct can_priv *priv;
648 	int size;
649 
650 	if (echo_skb_max)
651 		size = ALIGN(sizeof_priv, sizeof(struct sk_buff *)) +
652 			echo_skb_max * sizeof(struct sk_buff *);
653 	else
654 		size = sizeof_priv;
655 
656 	dev = alloc_netdev(size, "can%d", NET_NAME_UNKNOWN, can_setup);
657 	if (!dev)
658 		return NULL;
659 
660 	priv = netdev_priv(dev);
661 
662 	if (echo_skb_max) {
663 		priv->echo_skb_max = echo_skb_max;
664 		priv->echo_skb = (void *)priv +
665 			ALIGN(sizeof_priv, sizeof(struct sk_buff *));
666 	}
667 
668 	priv->state = CAN_STATE_STOPPED;
669 
670 	init_timer(&priv->restart_timer);
671 
672 	return dev;
673 }
674 EXPORT_SYMBOL_GPL(alloc_candev);
675 
676 /*
677  * Free space of the CAN network device
678  */
free_candev(struct net_device * dev)679 void free_candev(struct net_device *dev)
680 {
681 	free_netdev(dev);
682 }
683 EXPORT_SYMBOL_GPL(free_candev);
684 
685 /*
686  * changing MTU and control mode for CAN/CANFD devices
687  */
can_change_mtu(struct net_device * dev,int new_mtu)688 int can_change_mtu(struct net_device *dev, int new_mtu)
689 {
690 	struct can_priv *priv = netdev_priv(dev);
691 
692 	/* Do not allow changing the MTU while running */
693 	if (dev->flags & IFF_UP)
694 		return -EBUSY;
695 
696 	/* allow change of MTU according to the CANFD ability of the device */
697 	switch (new_mtu) {
698 	case CAN_MTU:
699 		/* 'CANFD-only' controllers can not switch to CAN_MTU */
700 		if (priv->ctrlmode_static & CAN_CTRLMODE_FD)
701 			return -EINVAL;
702 
703 		priv->ctrlmode &= ~CAN_CTRLMODE_FD;
704 		break;
705 
706 	case CANFD_MTU:
707 		/* check for potential CANFD ability */
708 		if (!(priv->ctrlmode_supported & CAN_CTRLMODE_FD) &&
709 		    !(priv->ctrlmode_static & CAN_CTRLMODE_FD))
710 			return -EINVAL;
711 
712 		priv->ctrlmode |= CAN_CTRLMODE_FD;
713 		break;
714 
715 	default:
716 		return -EINVAL;
717 	}
718 
719 	dev->mtu = new_mtu;
720 	return 0;
721 }
722 EXPORT_SYMBOL_GPL(can_change_mtu);
723 
724 /*
725  * Common open function when the device gets opened.
726  *
727  * This function should be called in the open function of the device
728  * driver.
729  */
open_candev(struct net_device * dev)730 int open_candev(struct net_device *dev)
731 {
732 	struct can_priv *priv = netdev_priv(dev);
733 
734 	if (!priv->bittiming.bitrate) {
735 		netdev_err(dev, "bit-timing not yet defined\n");
736 		return -EINVAL;
737 	}
738 
739 	/* For CAN FD the data bitrate has to be >= the arbitration bitrate */
740 	if ((priv->ctrlmode & CAN_CTRLMODE_FD) &&
741 	    (!priv->data_bittiming.bitrate ||
742 	     (priv->data_bittiming.bitrate < priv->bittiming.bitrate))) {
743 		netdev_err(dev, "incorrect/missing data bit-timing\n");
744 		return -EINVAL;
745 	}
746 
747 	/* Switch carrier on if device was stopped while in bus-off state */
748 	if (!netif_carrier_ok(dev))
749 		netif_carrier_on(dev);
750 
751 	setup_timer(&priv->restart_timer, can_restart, (unsigned long)dev);
752 
753 	return 0;
754 }
755 EXPORT_SYMBOL_GPL(open_candev);
756 
757 /*
758  * Common close function for cleanup before the device gets closed.
759  *
760  * This function should be called in the close function of the device
761  * driver.
762  */
close_candev(struct net_device * dev)763 void close_candev(struct net_device *dev)
764 {
765 	struct can_priv *priv = netdev_priv(dev);
766 
767 	del_timer_sync(&priv->restart_timer);
768 	can_flush_echo_skb(dev);
769 }
770 EXPORT_SYMBOL_GPL(close_candev);
771 
772 /*
773  * CAN netlink interface
774  */
775 static const struct nla_policy can_policy[IFLA_CAN_MAX + 1] = {
776 	[IFLA_CAN_STATE]	= { .type = NLA_U32 },
777 	[IFLA_CAN_CTRLMODE]	= { .len = sizeof(struct can_ctrlmode) },
778 	[IFLA_CAN_RESTART_MS]	= { .type = NLA_U32 },
779 	[IFLA_CAN_RESTART]	= { .type = NLA_U32 },
780 	[IFLA_CAN_BITTIMING]	= { .len = sizeof(struct can_bittiming) },
781 	[IFLA_CAN_BITTIMING_CONST]
782 				= { .len = sizeof(struct can_bittiming_const) },
783 	[IFLA_CAN_CLOCK]	= { .len = sizeof(struct can_clock) },
784 	[IFLA_CAN_BERR_COUNTER]	= { .len = sizeof(struct can_berr_counter) },
785 	[IFLA_CAN_DATA_BITTIMING]
786 				= { .len = sizeof(struct can_bittiming) },
787 	[IFLA_CAN_DATA_BITTIMING_CONST]
788 				= { .len = sizeof(struct can_bittiming_const) },
789 };
790 
can_validate(struct nlattr * tb[],struct nlattr * data[])791 static int can_validate(struct nlattr *tb[], struct nlattr *data[])
792 {
793 	bool is_can_fd = false;
794 
795 	/* Make sure that valid CAN FD configurations always consist of
796 	 * - nominal/arbitration bittiming
797 	 * - data bittiming
798 	 * - control mode with CAN_CTRLMODE_FD set
799 	 */
800 
801 	if (data[IFLA_CAN_CTRLMODE]) {
802 		struct can_ctrlmode *cm = nla_data(data[IFLA_CAN_CTRLMODE]);
803 
804 		is_can_fd = cm->flags & cm->mask & CAN_CTRLMODE_FD;
805 	}
806 
807 	if (is_can_fd) {
808 		if (!data[IFLA_CAN_BITTIMING] || !data[IFLA_CAN_DATA_BITTIMING])
809 			return -EOPNOTSUPP;
810 	}
811 
812 	if (data[IFLA_CAN_DATA_BITTIMING]) {
813 		if (!is_can_fd || !data[IFLA_CAN_BITTIMING])
814 			return -EOPNOTSUPP;
815 	}
816 
817 	return 0;
818 }
819 
can_changelink(struct net_device * dev,struct nlattr * tb[],struct nlattr * data[])820 static int can_changelink(struct net_device *dev,
821 			  struct nlattr *tb[], struct nlattr *data[])
822 {
823 	struct can_priv *priv = netdev_priv(dev);
824 	int err;
825 
826 	/* We need synchronization with dev->stop() */
827 	ASSERT_RTNL();
828 
829 	if (data[IFLA_CAN_BITTIMING]) {
830 		struct can_bittiming bt;
831 
832 		/* Do not allow changing bittiming while running */
833 		if (dev->flags & IFF_UP)
834 			return -EBUSY;
835 		memcpy(&bt, nla_data(data[IFLA_CAN_BITTIMING]), sizeof(bt));
836 		err = can_get_bittiming(dev, &bt, priv->bittiming_const);
837 		if (err)
838 			return err;
839 		memcpy(&priv->bittiming, &bt, sizeof(bt));
840 
841 		if (priv->do_set_bittiming) {
842 			/* Finally, set the bit-timing registers */
843 			err = priv->do_set_bittiming(dev);
844 			if (err)
845 				return err;
846 		}
847 	}
848 
849 	if (data[IFLA_CAN_CTRLMODE]) {
850 		struct can_ctrlmode *cm;
851 		u32 ctrlstatic;
852 		u32 maskedflags;
853 
854 		/* Do not allow changing controller mode while running */
855 		if (dev->flags & IFF_UP)
856 			return -EBUSY;
857 		cm = nla_data(data[IFLA_CAN_CTRLMODE]);
858 		ctrlstatic = priv->ctrlmode_static;
859 		maskedflags = cm->flags & cm->mask;
860 
861 		/* check whether provided bits are allowed to be passed */
862 		if (cm->mask & ~(priv->ctrlmode_supported | ctrlstatic))
863 			return -EOPNOTSUPP;
864 
865 		/* do not check for static fd-non-iso if 'fd' is disabled */
866 		if (!(maskedflags & CAN_CTRLMODE_FD))
867 			ctrlstatic &= ~CAN_CTRLMODE_FD_NON_ISO;
868 
869 		/* make sure static options are provided by configuration */
870 		if ((maskedflags & ctrlstatic) != ctrlstatic)
871 			return -EOPNOTSUPP;
872 
873 		/* clear bits to be modified and copy the flag values */
874 		priv->ctrlmode &= ~cm->mask;
875 		priv->ctrlmode |= maskedflags;
876 
877 		/* CAN_CTRLMODE_FD can only be set when driver supports FD */
878 		if (priv->ctrlmode & CAN_CTRLMODE_FD)
879 			dev->mtu = CANFD_MTU;
880 		else
881 			dev->mtu = CAN_MTU;
882 	}
883 
884 	if (data[IFLA_CAN_RESTART_MS]) {
885 		/* Do not allow changing restart delay while running */
886 		if (dev->flags & IFF_UP)
887 			return -EBUSY;
888 		priv->restart_ms = nla_get_u32(data[IFLA_CAN_RESTART_MS]);
889 	}
890 
891 	if (data[IFLA_CAN_RESTART]) {
892 		/* Do not allow a restart while not running */
893 		if (!(dev->flags & IFF_UP))
894 			return -EINVAL;
895 		err = can_restart_now(dev);
896 		if (err)
897 			return err;
898 	}
899 
900 	if (data[IFLA_CAN_DATA_BITTIMING]) {
901 		struct can_bittiming dbt;
902 
903 		/* Do not allow changing bittiming while running */
904 		if (dev->flags & IFF_UP)
905 			return -EBUSY;
906 		memcpy(&dbt, nla_data(data[IFLA_CAN_DATA_BITTIMING]),
907 		       sizeof(dbt));
908 		err = can_get_bittiming(dev, &dbt, priv->data_bittiming_const);
909 		if (err)
910 			return err;
911 		memcpy(&priv->data_bittiming, &dbt, sizeof(dbt));
912 
913 		if (priv->do_set_data_bittiming) {
914 			/* Finally, set the bit-timing registers */
915 			err = priv->do_set_data_bittiming(dev);
916 			if (err)
917 				return err;
918 		}
919 	}
920 
921 	return 0;
922 }
923 
can_get_size(const struct net_device * dev)924 static size_t can_get_size(const struct net_device *dev)
925 {
926 	struct can_priv *priv = netdev_priv(dev);
927 	size_t size = 0;
928 
929 	if (priv->bittiming.bitrate)				/* IFLA_CAN_BITTIMING */
930 		size += nla_total_size(sizeof(struct can_bittiming));
931 	if (priv->bittiming_const)				/* IFLA_CAN_BITTIMING_CONST */
932 		size += nla_total_size(sizeof(struct can_bittiming_const));
933 	size += nla_total_size(sizeof(struct can_clock));	/* IFLA_CAN_CLOCK */
934 	size += nla_total_size(sizeof(u32));			/* IFLA_CAN_STATE */
935 	size += nla_total_size(sizeof(struct can_ctrlmode));	/* IFLA_CAN_CTRLMODE */
936 	size += nla_total_size(sizeof(u32));			/* IFLA_CAN_RESTART_MS */
937 	if (priv->do_get_berr_counter)				/* IFLA_CAN_BERR_COUNTER */
938 		size += nla_total_size(sizeof(struct can_berr_counter));
939 	if (priv->data_bittiming.bitrate)			/* IFLA_CAN_DATA_BITTIMING */
940 		size += nla_total_size(sizeof(struct can_bittiming));
941 	if (priv->data_bittiming_const)				/* IFLA_CAN_DATA_BITTIMING_CONST */
942 		size += nla_total_size(sizeof(struct can_bittiming_const));
943 
944 	return size;
945 }
946 
can_fill_info(struct sk_buff * skb,const struct net_device * dev)947 static int can_fill_info(struct sk_buff *skb, const struct net_device *dev)
948 {
949 	struct can_priv *priv = netdev_priv(dev);
950 	struct can_ctrlmode cm = {.flags = priv->ctrlmode};
951 	struct can_berr_counter bec;
952 	enum can_state state = priv->state;
953 
954 	if (priv->do_get_state)
955 		priv->do_get_state(dev, &state);
956 
957 	if ((priv->bittiming.bitrate &&
958 	     nla_put(skb, IFLA_CAN_BITTIMING,
959 		     sizeof(priv->bittiming), &priv->bittiming)) ||
960 
961 	    (priv->bittiming_const &&
962 	     nla_put(skb, IFLA_CAN_BITTIMING_CONST,
963 		     sizeof(*priv->bittiming_const), priv->bittiming_const)) ||
964 
965 	    nla_put(skb, IFLA_CAN_CLOCK, sizeof(priv->clock), &priv->clock) ||
966 	    nla_put_u32(skb, IFLA_CAN_STATE, state) ||
967 	    nla_put(skb, IFLA_CAN_CTRLMODE, sizeof(cm), &cm) ||
968 	    nla_put_u32(skb, IFLA_CAN_RESTART_MS, priv->restart_ms) ||
969 
970 	    (priv->do_get_berr_counter &&
971 	     !priv->do_get_berr_counter(dev, &bec) &&
972 	     nla_put(skb, IFLA_CAN_BERR_COUNTER, sizeof(bec), &bec)) ||
973 
974 	    (priv->data_bittiming.bitrate &&
975 	     nla_put(skb, IFLA_CAN_DATA_BITTIMING,
976 		     sizeof(priv->data_bittiming), &priv->data_bittiming)) ||
977 
978 	    (priv->data_bittiming_const &&
979 	     nla_put(skb, IFLA_CAN_DATA_BITTIMING_CONST,
980 		     sizeof(*priv->data_bittiming_const),
981 		     priv->data_bittiming_const)))
982 		return -EMSGSIZE;
983 
984 	return 0;
985 }
986 
can_get_xstats_size(const struct net_device * dev)987 static size_t can_get_xstats_size(const struct net_device *dev)
988 {
989 	return sizeof(struct can_device_stats);
990 }
991 
can_fill_xstats(struct sk_buff * skb,const struct net_device * dev)992 static int can_fill_xstats(struct sk_buff *skb, const struct net_device *dev)
993 {
994 	struct can_priv *priv = netdev_priv(dev);
995 
996 	if (nla_put(skb, IFLA_INFO_XSTATS,
997 		    sizeof(priv->can_stats), &priv->can_stats))
998 		goto nla_put_failure;
999 	return 0;
1000 
1001 nla_put_failure:
1002 	return -EMSGSIZE;
1003 }
1004 
can_newlink(struct net * src_net,struct net_device * dev,struct nlattr * tb[],struct nlattr * data[])1005 static int can_newlink(struct net *src_net, struct net_device *dev,
1006 		       struct nlattr *tb[], struct nlattr *data[])
1007 {
1008 	return -EOPNOTSUPP;
1009 }
1010 
1011 static struct rtnl_link_ops can_link_ops __read_mostly = {
1012 	.kind		= "can",
1013 	.maxtype	= IFLA_CAN_MAX,
1014 	.policy		= can_policy,
1015 	.setup		= can_setup,
1016 	.validate	= can_validate,
1017 	.newlink	= can_newlink,
1018 	.changelink	= can_changelink,
1019 	.get_size	= can_get_size,
1020 	.fill_info	= can_fill_info,
1021 	.get_xstats_size = can_get_xstats_size,
1022 	.fill_xstats	= can_fill_xstats,
1023 };
1024 
1025 /*
1026  * Register the CAN network device
1027  */
register_candev(struct net_device * dev)1028 int register_candev(struct net_device *dev)
1029 {
1030 	dev->rtnl_link_ops = &can_link_ops;
1031 	return register_netdev(dev);
1032 }
1033 EXPORT_SYMBOL_GPL(register_candev);
1034 
1035 /*
1036  * Unregister the CAN network device
1037  */
unregister_candev(struct net_device * dev)1038 void unregister_candev(struct net_device *dev)
1039 {
1040 	unregister_netdev(dev);
1041 }
1042 EXPORT_SYMBOL_GPL(unregister_candev);
1043 
1044 /*
1045  * Test if a network device is a candev based device
1046  * and return the can_priv* if so.
1047  */
safe_candev_priv(struct net_device * dev)1048 struct can_priv *safe_candev_priv(struct net_device *dev)
1049 {
1050 	if ((dev->type != ARPHRD_CAN) || (dev->rtnl_link_ops != &can_link_ops))
1051 		return NULL;
1052 
1053 	return netdev_priv(dev);
1054 }
1055 EXPORT_SYMBOL_GPL(safe_candev_priv);
1056 
can_dev_init(void)1057 static __init int can_dev_init(void)
1058 {
1059 	int err;
1060 
1061 	can_led_notifier_init();
1062 
1063 	err = rtnl_link_register(&can_link_ops);
1064 	if (!err)
1065 		printk(KERN_INFO MOD_DESC "\n");
1066 
1067 	return err;
1068 }
1069 module_init(can_dev_init);
1070 
can_dev_exit(void)1071 static __exit void can_dev_exit(void)
1072 {
1073 	rtnl_link_unregister(&can_link_ops);
1074 
1075 	can_led_notifier_exit();
1076 }
1077 module_exit(can_dev_exit);
1078 
1079 MODULE_ALIAS_RTNL_LINK("can");
1080