]> rtime.felk.cvut.cz Git - socketcan-devel.git/blob - kernel/2.6/drivers/net/can/dev.c
Move can-dev.ko CAN driver library to drivers/net/can/*
[socketcan-devel.git] / kernel / 2.6 / drivers / net / can / dev.c
1 /*
2  * $Id$
3  *
4  * Copyright (C) 2005 Marc Kleine-Budde, Pengutronix
5  * Copyright (C) 2006 Andrey Volkov, Varma Electronics
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the version 2 of the GNU General Public License
9  * as published by the Free Software Foundation
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  */
20
21 #include <linux/module.h>
22 #include <linux/netdevice.h>
23 #include <linux/if_arp.h>
24 #include <linux/rtnetlink.h>
25 #include <linux/can.h>
26 #include <linux/can/dev.h>
27
28 #include "sysfs.h"
29
30 MODULE_DESCRIPTION("CAN netdevice library");
31 MODULE_LICENSE("GPL v2");
32 MODULE_AUTHOR("Marc Kleine-Budde <mkl@pengutronix.de>, "
33               "Andrey Volkov <avolkov@varma-el.com>");
34
35 static int restart_ms = 0;
36
37 module_param(restart_ms, int, S_IRUGO | S_IWUSR);
38
39 MODULE_PARM_DESC(restart_ms, "Restart time after bus-off in ms (default 0)");
40
41
42 /*
43  * Abstract:
44  *   Bit rate calculated with next formula:
45  *   bitrate = frq/(brp*(1 + prop_seg+ phase_seg1 + phase_seg2))
46  *
47  *   This calc function based on work of Florian Hartwich and Armin Bassemi
48  *   "The Configuration of the CAN Bit Timing"
49  *   (http://www.semiconductors.bosch.de/pdf/CiA99Paper.pdf)
50  *
51  *  Parameters:
52  *  [in]
53  *    bittime_nsec - expected bit time in nanosecs
54  *
55  *  [out]
56  *    bittime      - calculated time segments, for meaning of
57  *                   each field read CAN standard.
58  */
59
60 #define DEFAULT_MAX_BRP 64U
61 #define DEFAULT_MAX_SJW 4U
62
63 /* All below values in tq units */
64 #define MAX_BITTIME     25U
65 #define MIN_BITTIME     8U
66 #define MAX_PROP_SEG    8U
67 #define MAX_PHASE_SEG1  8U
68 #define MAX_PHASE_SEG2  8U
69
70 int can_calc_bittime(struct can_priv *can, u32 bitrate,
71                      struct can_bittime_std *bittime)
72 {
73         int best_error = -1;    /* Ariphmetic error */
74         int df, best_df = -1;   /* oscillator's tolerance range,
75                                    greater is better */
76         u32 quanta;             /* in tq units */
77         u32 brp, phase_seg1, phase_seg2, sjw, prop_seg;
78         u32 brp_min, brp_max, brp_expected;
79         u64 tmp;
80
81         /* bitrate range [1baud,1MiB/s] */
82         if (bitrate == 0 || bitrate > 1000000UL)
83                 return -EINVAL;
84
85         tmp = (u64) can->can_sys_clock * 1000;
86         do_div(tmp, bitrate);
87         brp_expected = (u32) tmp;
88
89         brp_min = brp_expected / (1000 * MAX_BITTIME);
90         if (brp_min == 0)
91                 brp_min = 1;
92         if (brp_min > can->max_brp)
93                 return -ERANGE;
94
95         brp_max = (brp_expected + 500 * MIN_BITTIME) / (1000 * MIN_BITTIME);
96         if (brp_max == 0)
97                 brp_max = 1;
98         if (brp_max > can->max_brp)
99                 brp_max = can->max_brp;
100
101         for (brp = brp_min; brp <= brp_max; brp++) {
102                 quanta = brp_expected / (brp * 1000);
103                 if (quanta < MAX_BITTIME
104                     && quanta * brp * 1000 != brp_expected)
105                         quanta++;
106                 if (quanta < MIN_BITTIME || quanta > MAX_BITTIME)
107                         continue;
108
109                 phase_seg2 = min((quanta - 3) / 2, MAX_PHASE_SEG2);
110                 for (sjw = can->max_sjw; sjw > 0; sjw--) {
111                         for (; phase_seg2 > sjw; phase_seg2--) {
112                                 u32 err1, err2;
113                                 phase_seg1 =
114                                     phase_seg2 % 2 ? phase_seg2 -
115                                     1 : phase_seg2;
116                                 prop_seg = quanta - 1 - phase_seg2 - phase_seg1;
117                                 /*
118                                  * FIXME: support of longer lines (i.e. bigger
119                                  * prop_seg) is more prefered than support of
120                                  * cheap oscillators (i.e. bigger
121                                  * df/phase_seg1/phase_seg2)
122                                  */
123                                 if (prop_seg < phase_seg1)
124                                         continue;
125                                 if (prop_seg > MAX_PROP_SEG)
126                                         goto next_brp;
127
128                                 err1 = phase_seg1 * brp * 500 * 1000 /
129                                     (13 * brp_expected -
130                                      phase_seg2 * brp * 1000);
131                                 err2 = sjw * brp * 50 * 1000 / brp_expected;
132
133                                 df = min(err1, err2);
134                                 if (df >= best_df) {
135                                         unsigned error =
136                                                 abs(brp_expected * 10 /
137                                                     (brp * (1 + prop_seg +
138                                                             phase_seg1 +
139                                                             phase_seg2)) -
140                                                     10000);
141
142                                         if (error > 10 || error > best_error)
143                                                 continue;
144
145                                         if (error == best_error
146                                             && prop_seg < bittime->prop_seg)
147                                                 continue;
148
149                                         best_error = error;
150                                         best_df = df;
151                                         bittime->brp = brp;
152                                         bittime->prop_seg = prop_seg;
153                                         bittime->phase_seg1 = phase_seg1;
154                                         bittime->phase_seg2 = phase_seg2;
155                                         bittime->sjw = sjw;
156                                         bittime->sam =
157                                                 (bittime->phase_seg1 > 3);
158                                 }
159                         }
160                 }
161               next_brp:;
162         }
163
164         if (best_error < 0)
165                 return -EDOM;
166         return 0;
167 }
168
169 int can_set_bitrate(struct net_device *dev, u32 bitrate)
170 {
171         struct can_priv *priv = netdev_priv(dev);
172         int err = -ENOTSUPP;
173
174         if (priv->state != CAN_STATE_STOPPED)
175                 return -EBUSY;
176
177         if (priv->do_set_bittime) {
178                 if (priv->do_set_bittime) {
179                         struct can_bittime bittime;
180                         err = can_calc_bittime(priv, bitrate, &bittime.std);
181                         if (err)
182                                 goto out;
183                         bittime.type = CAN_BITTIME_STD;
184                         err = priv->do_set_bittime(dev, &bittime);
185                         if (!err) {
186                                 priv->bitrate = bitrate;
187                                 priv->bittime = bittime;
188                         }
189                 }
190         }
191 out:
192         return err;
193 }
194 EXPORT_SYMBOL(can_set_bitrate);
195
196 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23)
197 static struct net_device_stats *can_get_stats(struct net_device *dev)
198 {
199         struct can_priv *priv = netdev_priv(dev);
200
201         return &priv->net_stats;
202 }
203 #endif
204
205 static void can_setup(struct net_device *dev)
206 {
207         dev->type = ARPHRD_CAN;
208         dev->mtu = sizeof(struct can_frame);
209         dev->hard_header_len = 0;
210         dev->addr_len = 0;
211         dev->tx_queue_len = 10;
212
213         /* New-style flags. */
214         dev->flags = IFF_NOARP;
215         dev->features = NETIF_F_NO_CSUM;
216 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23)
217         dev->get_stats = can_get_stats;
218 #endif
219 }
220
221 /*
222  * Function  alloc_candev
223  *      Allocates and sets up an CAN device
224  */
225 struct net_device *alloc_candev(int sizeof_priv)
226 {
227         struct net_device *dev;
228         struct can_priv *priv;
229
230         dev = alloc_netdev(sizeof_priv, "can%d", can_setup);
231         if (!dev)
232                 return NULL;
233
234         priv = netdev_priv(dev);
235
236         /* Default values can be overwritten by the device driver */
237         priv->restart_ms = restart_ms;
238         priv->bitrate = CAN_BITRATE_UNCONFIGURED;
239         priv->state = CAN_STATE_STOPPED;
240         priv->max_brp = DEFAULT_MAX_BRP;
241         priv->max_sjw = DEFAULT_MAX_SJW;
242         spin_lock_init(&priv->irq_lock);
243
244         init_timer(&priv->timer);
245         priv->timer.expires = 0;
246
247         return dev;
248 }
249
250 EXPORT_SYMBOL(alloc_candev);
251
252 void free_candev(struct net_device *dev)
253 {
254         free_netdev(dev);
255 }
256
257 EXPORT_SYMBOL(free_candev);
258
259 /*
260  * Local echo of CAN messages
261  *
262  * CAN network devices *should* support a local echo functionality
263  * (see Documentation/networking/can.txt). To test the handling of CAN
264  * interfaces that do not support the local echo both driver types are
265  * implemented. In the case that the driver does not support the echo
266  * the IFF_ECHO remains clear in dev->flags. This causes the PF_CAN core
267  * to perform the echo as a fallback solution.
268  */
269
270 void can_flush_echo_skb(struct net_device *dev)
271 {
272         struct can_priv *priv = netdev_priv(dev);
273 #ifdef FIXME
274         struct net_device_stats *stats = dev->get_stats(dev);
275 #endif
276         int i;
277
278         for (i = 0; i < CAN_ECHO_SKB_MAX; i++) {
279                 if (priv->echo_skb[i]) {
280                         kfree_skb(priv->echo_skb[i]);
281                         priv->echo_skb[i] = NULL;
282 #ifdef FIXME
283                         stats->tx_dropped++;
284                         stats->tx_aborted_errors++;
285 #endif
286                 }
287         }
288 }
289
290 void can_put_echo_skb(struct sk_buff *skb, struct net_device *dev, int idx)
291 {
292         struct can_priv *priv = netdev_priv(dev);
293
294         /* set flag whether this packet has to be looped back */
295         if (!(dev->flags & IFF_ECHO) || skb->pkt_type != PACKET_LOOPBACK) {
296                 kfree_skb(skb);
297                 return;
298         }
299
300         if (!priv->echo_skb[idx]) {
301                 struct sock *srcsk = skb->sk;
302
303                 if (atomic_read(&skb->users) != 1) {
304                         struct sk_buff *old_skb = skb;
305
306                         skb = skb_clone(old_skb, GFP_ATOMIC);
307                         kfree_skb(old_skb);
308                         if (!skb) {
309                                 return;
310                         }
311                 } else
312                         skb_orphan(skb);
313
314                 skb->sk = srcsk;
315
316                 /* make settings for echo to reduce code in irq context */
317                 skb->protocol = htons(ETH_P_CAN);
318                 skb->pkt_type = PACKET_BROADCAST;
319                 skb->ip_summed = CHECKSUM_UNNECESSARY;
320                 skb->dev = dev;
321
322                 /* save this skb for tx interrupt echo handling */
323                 priv->echo_skb[idx] = skb;
324         } else {
325                 /* locking problem with netif_stop_queue() ?? */
326                 printk(KERN_ERR "%s: %s: BUG! echo_skb is occupied!\n",
327                        dev->name, __FUNCTION__);
328                 kfree_skb(skb);
329         }
330 }
331 EXPORT_SYMBOL(can_put_echo_skb);
332
333 void can_get_echo_skb(struct net_device *dev, int idx)
334 {
335         struct can_priv *priv = netdev_priv(dev);
336
337         if ((dev->flags & IFF_ECHO) && priv->echo_skb[idx]) {
338                 netif_rx(priv->echo_skb[idx]);
339                 priv->echo_skb[idx] = NULL;
340         }
341 }
342 EXPORT_SYMBOL(can_get_echo_skb);
343
344 /*
345  * CAN bus-off handling
346  * FIXME: we need some synchronization
347  */
348 int can_restart_now(struct net_device *dev)
349 {
350         struct can_priv *priv = netdev_priv(dev);
351         struct net_device_stats *stats = dev->get_stats(dev);
352         struct sk_buff *skb;
353         struct can_frame *cf;
354         int err;
355
356         if (netif_carrier_ok(dev))
357                 netif_carrier_off(dev);
358
359         /* Cancel restart in progress */
360         if (priv->timer.expires) {
361                 del_timer(&priv->timer);
362                 priv->timer.expires = 0; /* mark inactive timer */
363         }
364
365         can_flush_echo_skb(dev);
366
367         if ((err = priv->do_set_mode(dev, CAN_MODE_START)))
368                 return err;
369
370         netif_carrier_on(dev);
371
372         priv->can_stats.restarts++;
373
374         /* send restart message upstream */
375         skb = dev_alloc_skb(sizeof(struct can_frame));
376         if (skb == NULL)
377                 return -ENOMEM;
378         skb->dev = dev;
379         skb->protocol = htons(ETH_P_CAN);
380         cf = (struct can_frame *)skb_put(skb, sizeof(struct can_frame));
381         memset(cf, 0, sizeof(struct can_frame));
382         cf->can_id = CAN_ERR_FLAG | CAN_ERR_RESTARTED;
383         cf->can_dlc = CAN_ERR_DLC;
384
385         netif_rx(skb);
386
387         dev->last_rx = jiffies;
388         stats->rx_packets++;
389         stats->rx_bytes += cf->can_dlc;
390
391         return 0;
392 }
393
394 static void can_restart_after(unsigned long data)
395 {
396         struct net_device *dev = (struct net_device *)data;
397         struct can_priv *priv = netdev_priv(dev);
398
399         priv->timer.expires = 0; /* mark inactive timer */
400         can_restart_now(dev);
401 }
402
403 void can_bus_off(struct net_device *dev)
404 {
405         struct can_priv *priv = netdev_priv(dev);
406
407         netif_carrier_off(dev);
408
409         if (priv->restart_ms > 0 && !priv->timer.expires) {
410
411                 priv->timer.function = can_restart_after;
412                 priv->timer.data = (unsigned long)dev;
413                 priv->timer.expires =
414                         jiffies + (priv->restart_ms * HZ) / 1000;
415                 add_timer(&priv->timer);
416         }
417 }
418 EXPORT_SYMBOL(can_bus_off);
419
420 void can_close_cleanup(struct net_device *dev)
421 {
422         struct can_priv *priv = netdev_priv(dev);
423
424         if (priv->timer.expires) {
425                 del_timer(&priv->timer);
426                 priv->timer.expires = 0;
427         }
428
429         can_flush_echo_skb(dev);
430 }
431 EXPORT_SYMBOL(can_close_cleanup);
432
433 static int can_netdev_notifier_call(struct notifier_block *nb,
434                                     unsigned long state,
435                                     void *ndev)
436 {
437         struct net_device *dev = ndev;
438         struct can_priv *priv;
439
440         if (dev->type != ARPHRD_CAN)
441                 return 0;
442
443         priv = netdev_priv(dev);
444
445         /* software CAN devices like 'vcan' do not have private data */
446         if (!priv)
447                 return 0;
448
449         switch (state) {
450         case NETDEV_REGISTER:
451                 /* set default bit timing */
452                 if (priv->do_set_bittime &&
453                     priv->bitrate == CAN_BITRATE_UNCONFIGURED) {
454                         if (can_set_bitrate(dev, CAN_BITRATE_DEFAULT))
455                                 dev_err(ND2D(dev), "failed to set bitrate\n");
456                 }
457 #ifdef CONFIG_SYSFS
458                 can_create_sysfs(dev);
459 #endif
460                 break;
461         case NETDEV_UNREGISTER:
462 #ifdef CONFIG_SYSFS
463                 can_remove_sysfs(dev);
464 #endif
465                 break;
466         }
467         return 0;
468 }
469
470 static struct notifier_block can_netdev_notifier = {
471         .notifier_call = can_netdev_notifier_call,
472 };
473
474 static __init int can_dev_init(void)
475 {
476         return register_netdevice_notifier(&can_netdev_notifier);
477 }
478 module_init(can_dev_init);
479
480 static __exit void can_dev_exit(void)
481 {
482         unregister_netdevice_notifier(&can_netdev_notifier);
483 }
484 module_exit(can_dev_exit);