]> rtime.felk.cvut.cz Git - socketcan-devel.git/blob - kernel/2.6/drivers/net/can/dev.c
Device interface coding style cleanup (dev.c, dev.h)
[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;
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 EXPORT_SYMBOL(alloc_candev);
250
251 void free_candev(struct net_device *dev)
252 {
253         free_netdev(dev);
254 }
255 EXPORT_SYMBOL(free_candev);
256
257 /*
258  * Local echo of CAN messages
259  *
260  * CAN network devices *should* support a local echo functionality
261  * (see Documentation/networking/can.txt). To test the handling of CAN
262  * interfaces that do not support the local echo both driver types are
263  * implemented. In the case that the driver does not support the echo
264  * the IFF_ECHO remains clear in dev->flags. This causes the PF_CAN core
265  * to perform the echo as a fallback solution.
266  */
267
268 void can_flush_echo_skb(struct net_device *dev)
269 {
270         struct can_priv *priv = netdev_priv(dev);
271 #ifdef FIXME
272         struct net_device_stats *stats = dev->get_stats(dev);
273 #endif
274         int i;
275
276         for (i = 0; i < CAN_ECHO_SKB_MAX; i++) {
277                 if (priv->echo_skb[i]) {
278                         kfree_skb(priv->echo_skb[i]);
279                         priv->echo_skb[i] = NULL;
280 #ifdef FIXME
281                         stats->tx_dropped++;
282                         stats->tx_aborted_errors++;
283 #endif
284                 }
285         }
286 }
287
288 void can_put_echo_skb(struct sk_buff *skb, struct net_device *dev, int idx)
289 {
290         struct can_priv *priv = netdev_priv(dev);
291
292         /* set flag whether this packet has to be looped back */
293         if (!(dev->flags & IFF_ECHO) || skb->pkt_type != PACKET_LOOPBACK) {
294                 kfree_skb(skb);
295                 return;
296         }
297
298         if (!priv->echo_skb[idx]) {
299                 struct sock *srcsk = skb->sk;
300
301                 if (atomic_read(&skb->users) != 1) {
302                         struct sk_buff *old_skb = skb;
303
304                         skb = skb_clone(old_skb, GFP_ATOMIC);
305                         kfree_skb(old_skb);
306                         if (!skb)
307                                 return;
308                 } else
309                         skb_orphan(skb);
310
311                 skb->sk = srcsk;
312
313                 /* make settings for echo to reduce code in irq context */
314                 skb->protocol = htons(ETH_P_CAN);
315                 skb->pkt_type = PACKET_BROADCAST;
316                 skb->ip_summed = CHECKSUM_UNNECESSARY;
317                 skb->dev = dev;
318
319                 /* save this skb for tx interrupt echo handling */
320                 priv->echo_skb[idx] = skb;
321         } else {
322                 /* locking problem with netif_stop_queue() ?? */
323                 printk(KERN_ERR "%s: %s: BUG! echo_skb is occupied!\n",
324                        dev->name, __func__);
325                 kfree_skb(skb);
326         }
327 }
328 EXPORT_SYMBOL(can_put_echo_skb);
329
330 void can_get_echo_skb(struct net_device *dev, int idx)
331 {
332         struct can_priv *priv = netdev_priv(dev);
333
334         if ((dev->flags & IFF_ECHO) && priv->echo_skb[idx]) {
335                 netif_rx(priv->echo_skb[idx]);
336                 priv->echo_skb[idx] = NULL;
337         }
338 }
339 EXPORT_SYMBOL(can_get_echo_skb);
340
341 /*
342  * CAN bus-off handling
343  * FIXME: we need some synchronization
344  */
345 int can_restart_now(struct net_device *dev)
346 {
347         struct can_priv *priv = netdev_priv(dev);
348         struct net_device_stats *stats = dev->get_stats(dev);
349         struct sk_buff *skb;
350         struct can_frame *cf;
351         int err;
352
353         if (netif_carrier_ok(dev))
354                 netif_carrier_off(dev);
355
356         /* Cancel restart in progress */
357         if (priv->timer.expires) {
358                 del_timer(&priv->timer);
359                 priv->timer.expires = 0; /* mark inactive timer */
360         }
361
362         can_flush_echo_skb(dev);
363
364         err = priv->do_set_mode(dev, CAN_MODE_START);
365         if (err)
366                 return err;
367
368         netif_carrier_on(dev);
369
370         priv->can_stats.restarts++;
371
372         /* send restart message upstream */
373         skb = dev_alloc_skb(sizeof(struct can_frame));
374         if (skb == NULL)
375                 return -ENOMEM;
376         skb->dev = dev;
377         skb->protocol = htons(ETH_P_CAN);
378         cf = (struct can_frame *)skb_put(skb, sizeof(struct can_frame));
379         memset(cf, 0, sizeof(struct can_frame));
380         cf->can_id = CAN_ERR_FLAG | CAN_ERR_RESTARTED;
381         cf->can_dlc = CAN_ERR_DLC;
382
383         netif_rx(skb);
384
385         dev->last_rx = jiffies;
386         stats->rx_packets++;
387         stats->rx_bytes += cf->can_dlc;
388
389         return 0;
390 }
391
392 static void can_restart_after(unsigned long data)
393 {
394         struct net_device *dev = (struct net_device *)data;
395         struct can_priv *priv = netdev_priv(dev);
396
397         priv->timer.expires = 0; /* mark inactive timer */
398         can_restart_now(dev);
399 }
400
401 void can_bus_off(struct net_device *dev)
402 {
403         struct can_priv *priv = netdev_priv(dev);
404
405         netif_carrier_off(dev);
406
407         if (priv->restart_ms > 0 && !priv->timer.expires) {
408
409                 priv->timer.function = can_restart_after;
410                 priv->timer.data = (unsigned long)dev;
411                 priv->timer.expires =
412                         jiffies + (priv->restart_ms * HZ) / 1000;
413                 add_timer(&priv->timer);
414         }
415 }
416 EXPORT_SYMBOL(can_bus_off);
417
418 void can_close_cleanup(struct net_device *dev)
419 {
420         struct can_priv *priv = netdev_priv(dev);
421
422         if (priv->timer.expires) {
423                 del_timer(&priv->timer);
424                 priv->timer.expires = 0;
425         }
426
427         can_flush_echo_skb(dev);
428 }
429 EXPORT_SYMBOL(can_close_cleanup);
430
431 static int can_netdev_notifier_call(struct notifier_block *nb,
432                                     unsigned long state,
433                                     void *ndev)
434 {
435         struct net_device *dev = ndev;
436         struct can_priv *priv;
437
438         if (dev->type != ARPHRD_CAN)
439                 return 0;
440
441         priv = netdev_priv(dev);
442
443         /* software CAN devices like 'vcan' do not have private data */
444         if (!priv)
445                 return 0;
446
447         switch (state) {
448         case NETDEV_REGISTER:
449                 /* set default bit timing */
450                 if (priv->do_set_bittime &&
451                     priv->bitrate == CAN_BITRATE_UNCONFIGURED) {
452                         if (can_set_bitrate(dev, CAN_BITRATE_DEFAULT))
453                                 dev_err(ND2D(dev), "failed to set bitrate\n");
454                 }
455 #ifdef CONFIG_SYSFS
456                 can_create_sysfs(dev);
457 #endif
458                 break;
459         case NETDEV_UNREGISTER:
460 #ifdef CONFIG_SYSFS
461                 can_remove_sysfs(dev);
462 #endif
463                 break;
464         }
465         return 0;
466 }
467
468 static struct notifier_block can_netdev_notifier = {
469         .notifier_call = can_netdev_notifier_call,
470 };
471
472 static __init int can_dev_init(void)
473 {
474         return register_netdevice_notifier(&can_netdev_notifier);
475 }
476 module_init(can_dev_init);
477
478 static __exit void can_dev_exit(void)
479 {
480         unregister_netdevice_notifier(&can_netdev_notifier);
481 }
482 module_exit(can_dev_exit);