]> rtime.felk.cvut.cz Git - socketcan-devel.git/blob - kernel/2.6/drivers/net/can/dev.c
Removed module revision dates due to discussion on socketcan-sore ML.
[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 #define MOD_DESC "CAN netdevice library"
31
32 MODULE_DESCRIPTION(MOD_DESC);
33 MODULE_LICENSE("GPL v2");
34 MODULE_AUTHOR("Marc Kleine-Budde <mkl@pengutronix.de>, "
35               "Andrey Volkov <avolkov@varma-el.com>");
36
37 static int restart_ms;
38
39 module_param(restart_ms, int, S_IRUGO | S_IWUSR);
40
41 MODULE_PARM_DESC(restart_ms, "Restart time after bus-off in ms (default 0)");
42
43
44 /*
45  * Abstract:
46  *   Bit rate calculated with next formula:
47  *   bitrate = frq/(brp*(1 + prop_seg+ phase_seg1 + phase_seg2))
48  *
49  *   This calc function based on work of Florian Hartwich and Armin Bassemi
50  *   "The Configuration of the CAN Bit Timing"
51  *   (http://www.semiconductors.bosch.de/pdf/CiA99Paper.pdf)
52  *
53  *  Parameters:
54  *  [in]
55  *    bittime_nsec - expected bit time in nanosecs
56  *
57  *  [out]
58  *    bittime      - calculated time segments, for meaning of
59  *                   each field read CAN standard.
60  */
61
62 #define DEFAULT_MAX_BRP 64U
63 #define DEFAULT_MAX_SJW 4U
64
65 /* All below values in tq units */
66 #define MAX_BITTIME     25U
67 #define MIN_BITTIME     8U
68 #define MAX_PROP_SEG    8U
69 #define MAX_PHASE_SEG1  8U
70 #define MAX_PHASE_SEG2  8U
71
72 int can_calc_bittime(struct can_priv *can, u32 bitrate,
73                      struct can_bittime_std *bittime)
74 {
75         int best_error = -1;    /* Ariphmetic error */
76         int df, best_df = -1;   /* oscillator's tolerance range,
77                                    greater is better */
78         u32 quanta;             /* in tq units */
79         u32 brp, phase_seg1, phase_seg2, sjw, prop_seg;
80         u32 brp_min, brp_max, brp_expected;
81         u64 tmp;
82
83         /* bitrate range [1baud,1MiB/s] */
84         if (bitrate == 0 || bitrate > 1000000UL)
85                 return -EINVAL;
86
87         tmp = (u64) can->can_sys_clock * 1000;
88         do_div(tmp, bitrate);
89         brp_expected = (u32) tmp;
90
91         brp_min = brp_expected / (1000 * MAX_BITTIME);
92         if (brp_min == 0)
93                 brp_min = 1;
94         if (brp_min > can->max_brp)
95                 return -ERANGE;
96
97         brp_max = (brp_expected + 500 * MIN_BITTIME) / (1000 * MIN_BITTIME);
98         if (brp_max == 0)
99                 brp_max = 1;
100         if (brp_max > can->max_brp)
101                 brp_max = can->max_brp;
102
103         for (brp = brp_min; brp <= brp_max; brp++) {
104                 quanta = brp_expected / (brp * 1000);
105                 if (quanta < MAX_BITTIME
106                     && quanta * brp * 1000 != brp_expected)
107                         quanta++;
108                 if (quanta < MIN_BITTIME || quanta > MAX_BITTIME)
109                         continue;
110
111                 phase_seg2 = min((quanta - 3) / 2, MAX_PHASE_SEG2);
112                 for (sjw = can->max_sjw; sjw > 0; sjw--) {
113                         for (; phase_seg2 > sjw; phase_seg2--) {
114                                 u32 err1, err2;
115                                 phase_seg1 =
116                                     phase_seg2 % 2 ? phase_seg2 -
117                                     1 : phase_seg2;
118                                 prop_seg = quanta - 1 - phase_seg2 - phase_seg1;
119                                 /*
120                                  * FIXME: support of longer lines (i.e. bigger
121                                  * prop_seg) is more prefered than support of
122                                  * cheap oscillators (i.e. bigger
123                                  * df/phase_seg1/phase_seg2)
124                                  */
125                                 if (prop_seg < phase_seg1)
126                                         continue;
127                                 if (prop_seg > MAX_PROP_SEG)
128                                         goto next_brp;
129
130                                 err1 = phase_seg1 * brp * 500 * 1000 /
131                                     (13 * brp_expected -
132                                      phase_seg2 * brp * 1000);
133                                 err2 = sjw * brp * 50 * 1000 / brp_expected;
134
135                                 df = min(err1, err2);
136                                 if (df >= best_df) {
137                                         unsigned error =
138                                                 abs(brp_expected * 10 /
139                                                     (brp * (1 + prop_seg +
140                                                             phase_seg1 +
141                                                             phase_seg2)) -
142                                                     10000);
143
144                                         if (error > 10 || error > best_error)
145                                                 continue;
146
147                                         if (error == best_error
148                                             && prop_seg < bittime->prop_seg)
149                                                 continue;
150
151                                         best_error = error;
152                                         best_df = df;
153                                         bittime->brp = brp;
154                                         bittime->prop_seg = prop_seg;
155                                         bittime->phase_seg1 = phase_seg1;
156                                         bittime->phase_seg2 = phase_seg2;
157                                         bittime->sjw = sjw;
158                                         bittime->sam =
159                                                 (bittime->phase_seg1 > 3);
160                                 }
161                         }
162                 }
163 next_brp:;
164         }
165
166         if (best_error < 0)
167                 return -EDOM;
168         return 0;
169 }
170
171 int can_set_bitrate(struct net_device *dev, u32 bitrate)
172 {
173         struct can_priv *priv = netdev_priv(dev);
174         int err = -ENOTSUPP;
175
176         if (priv->state != CAN_STATE_STOPPED)
177                 return -EBUSY;
178
179         if (priv->do_set_bittime) {
180                 if (priv->do_set_bittime) {
181                         struct can_bittime bittime;
182                         err = can_calc_bittime(priv, bitrate, &bittime.std);
183                         if (err)
184                                 goto out;
185                         bittime.type = CAN_BITTIME_STD;
186                         err = priv->do_set_bittime(dev, &bittime);
187                         if (!err) {
188                                 priv->bitrate = bitrate;
189                                 priv->bittime = bittime;
190                         }
191                 }
192         }
193 out:
194         return err;
195 }
196 EXPORT_SYMBOL(can_set_bitrate);
197
198 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23)
199 static struct net_device_stats *can_get_stats(struct net_device *dev)
200 {
201         struct can_priv *priv = netdev_priv(dev);
202
203         return &priv->net_stats;
204 }
205 #endif
206
207 static void can_setup(struct net_device *dev)
208 {
209         dev->type = ARPHRD_CAN;
210         dev->mtu = sizeof(struct can_frame);
211         dev->hard_header_len = 0;
212         dev->addr_len = 0;
213         dev->tx_queue_len = 10;
214
215         /* New-style flags. */
216         dev->flags = IFF_NOARP;
217         dev->features = NETIF_F_NO_CSUM;
218 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23)
219         dev->get_stats = can_get_stats;
220 #endif
221 }
222
223 /*
224  * Function  alloc_candev
225  *      Allocates and sets up an CAN device
226  */
227 struct net_device *alloc_candev(int sizeof_priv)
228 {
229         struct net_device *dev;
230         struct can_priv *priv;
231
232         dev = alloc_netdev(sizeof_priv, "can%d", can_setup);
233         if (!dev)
234                 return NULL;
235
236         priv = netdev_priv(dev);
237
238         /* Default values can be overwritten by the device driver */
239         priv->restart_ms = restart_ms;
240         priv->bitrate = CAN_BITRATE_UNCONFIGURED;
241         priv->state = CAN_STATE_STOPPED;
242         priv->max_brp = DEFAULT_MAX_BRP;
243         priv->max_sjw = DEFAULT_MAX_SJW;
244         spin_lock_init(&priv->irq_lock);
245
246         init_timer(&priv->timer);
247         priv->timer.expires = 0;
248
249         return dev;
250 }
251 EXPORT_SYMBOL(alloc_candev);
252
253 void free_candev(struct net_device *dev)
254 {
255         free_netdev(dev);
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                 } else
311                         skb_orphan(skb);
312
313                 skb->sk = srcsk;
314
315                 /* make settings for echo to reduce code in irq context */
316                 skb->protocol = htons(ETH_P_CAN);
317                 skb->pkt_type = PACKET_BROADCAST;
318                 skb->ip_summed = CHECKSUM_UNNECESSARY;
319                 skb->dev = dev;
320
321                 /* save this skb for tx interrupt echo handling */
322                 priv->echo_skb[idx] = skb;
323         } else {
324                 /* locking problem with netif_stop_queue() ?? */
325                 printk(KERN_ERR "%s: %s: BUG! echo_skb is occupied!\n",
326                        dev->name, __func__);
327                 kfree_skb(skb);
328         }
329 }
330 EXPORT_SYMBOL(can_put_echo_skb);
331
332 void can_get_echo_skb(struct net_device *dev, int idx)
333 {
334         struct can_priv *priv = netdev_priv(dev);
335
336         if ((dev->flags & IFF_ECHO) && priv->echo_skb[idx]) {
337                 netif_rx(priv->echo_skb[idx]);
338                 priv->echo_skb[idx] = NULL;
339         }
340 }
341 EXPORT_SYMBOL(can_get_echo_skb);
342
343 /*
344  * CAN bus-off handling
345  * FIXME: we need some synchronization
346  */
347 int can_restart_now(struct net_device *dev)
348 {
349         struct can_priv *priv = netdev_priv(dev);
350         struct net_device_stats *stats = dev->get_stats(dev);
351         struct sk_buff *skb;
352         struct can_frame *cf;
353         int err;
354
355         if (netif_carrier_ok(dev))
356                 netif_carrier_off(dev);
357
358         /* Cancel restart in progress */
359         if (priv->timer.expires) {
360                 del_timer(&priv->timer);
361                 priv->timer.expires = 0; /* mark inactive timer */
362         }
363
364         can_flush_echo_skb(dev);
365
366         err = priv->do_set_mode(dev, CAN_MODE_START);
367         if (err)
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         printk(KERN_INFO MOD_DESC "\n");
477
478         return register_netdevice_notifier(&can_netdev_notifier);
479 }
480 module_init(can_dev_init);
481
482 static __exit void can_dev_exit(void)
483 {
484         unregister_netdevice_notifier(&can_netdev_notifier);
485 }
486 module_exit(can_dev_exit);