2 * slcan.c - serial line CAN interface driver (using tty line discipline)
4 * Copyright (c) 2007 Volkswagen Group Electronic Research
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions, the following disclaimer and
12 * the referenced file 'COPYING'.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 * 3. Neither the name of Volkswagen nor the names of its contributors
17 * may be used to endorse or promote products derived from this software
18 * without specific prior written permission.
20 * Alternatively, provided that this notice is retained in full, this
21 * software may be distributed under the terms of the GNU General
22 * Public License ("GPL") version 2 as distributed in the 'COPYING'
23 * file from the main directory of the linux kernel source.
25 * The provided data structures and external interfaces from this code
26 * are not restricted to be used by modules with a GPL compatible license.
28 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
29 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
30 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
31 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
32 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
33 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
34 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
35 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
36 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
37 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
38 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
41 * Send feedback to <socketcan-users@lists.berlios.de>
46 * This file is derived from linux/drivers/net/slip.c
48 * Therefore it has the same (strange?) behaviour not to unregister the
49 * netdevice when detaching the tty. Is there any better solution?
51 * Do not try to attach, detach and re-attach a tty for this reason ...
53 * slip.c Authors: Laurence Culhane, <loz@holmes.demon.co.uk>
54 * Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
57 #include <linux/module.h>
58 #include <linux/moduleparam.h>
60 #include <asm/system.h>
61 #include <asm/uaccess.h>
62 #include <linux/bitops.h>
63 #include <linux/string.h>
65 #include <linux/interrupt.h>
67 #include <linux/tty.h>
68 #include <linux/errno.h>
69 #include <linux/netdevice.h>
70 #include <linux/etherdevice.h>
71 #include <linux/skbuff.h>
72 #include <linux/rtnetlink.h>
73 #include <linux/if_arp.h>
74 #include <linux/if_ether.h>
75 #include <linux/if_slip.h>
76 #include <linux/delay.h>
77 #include <linux/init.h>
79 #include <linux/can.h>
81 #include <linux/can/version.h> /* for RCSID. Removed by mkpatch script */
84 static __initdata const char banner[] =
85 KERN_INFO "slcan: serial line CAN interface driver\n";
87 MODULE_ALIAS_LDISC(N_SLCAN);
88 MODULE_DESCRIPTION("serial line CAN interface");
89 MODULE_LICENSE("Dual BSD/GPL");
90 MODULE_AUTHOR("Oliver Hartkopp <oliver.hartkopp@volkswagen.de>");
92 #ifdef CONFIG_CAN_DEBUG_DEVICES
94 module_param(debug, int, S_IRUGO);
95 #define DBG(args...) (debug & 1 ? \
96 (printk(KERN_DEBUG "slcan %s: ", __func__), \
103 #error Your kernel does not support tty line discipline N_SLCAN
106 * As there is currently no line discipline N_SLCAN in the mainstream kernel
107 * you will have to modify two kernel includes & recompile the kernel.
109 * Add this in include/asm/termios.h after the definition of N_HCI:
112 * Increment NR_LDICS in include/linux/tty.h from 16 to 17
114 * NEW: Since Kernel 2.6.21 you only have to change include/linux/tty.h
118 #define SLC_CHECK_TRANSMIT
119 #define SLCAN_MAGIC 0x53CA
121 static int maxdev = 10; /* MAX number of SLCAN channels;
122 This can be overridden with
123 insmod slcan.ko maxdev=nnn */
124 module_param(maxdev, int, 0);
125 MODULE_PARM_DESC(maxdev, "Maximum number of slcan interfaces");
127 /* maximum rx buffer len: extended CAN frame with timestamp */
128 #define SLC_MTU (sizeof("T1111222281122334455667788EA5F\r")+1)
133 /* Various fields. */
134 struct tty_struct *tty; /* ptr to TTY structure */
135 struct net_device *dev; /* easy for intr handling */
138 /* These are pointers to the malloc()ed frame buffers. */
139 unsigned char rbuff[SLC_MTU]; /* receiver buffer */
140 int rcount; /* received chars counter */
141 unsigned char xbuff[SLC_MTU]; /* transmitter buffer */
142 unsigned char *xhead; /* pointer to next XMIT byte */
143 int xleft; /* bytes left in XMIT queue */
145 /* SLCAN interface statistics. */
146 struct net_device_stats stats;
148 unsigned long flags; /* Flag values/ mode etc */
149 #define SLF_INUSE 0 /* Channel in use */
150 #define SLF_ERROR 1 /* Parity, etc. error */
152 unsigned char leased;
157 static struct net_device **slcan_devs;
159 /************************************************************************
160 * SLCAN ENCAPSULATION FORMAT *
161 ************************************************************************/
164 * A CAN frame has a can_id (11 bit standard frame format OR 29 bit extended
165 * frame format) a data length code (can_dlc) which can be from 0 to 8
166 * and up to <can_dlc> data bytes as payload.
167 * Additionally a CAN frame may become a remote transmission frame if the
168 * RTR-bit is set. This causes another ECU to send a CAN frame with the
171 * The SLCAN ASCII representation of these different frame types is:
172 * <type> <id> <dlc> <data>*
174 * Extended frames (29 bit) are defined by capital characters in the type.
175 * RTR frames are defined as 'r' types - normal frames have 't' type:
176 * t => 11 bit data frame
177 * r => 11 bit RTR frame
178 * T => 29 bit data frame
179 * R => 29 bit RTR frame
181 * The <id> is 3 (standard) or 8 (extended) bytes in ASCII Hex (base64).
182 * The <dlc> is a one byte ASCII number ('0' - '8')
183 * The <data> section has at much ASCII Hex bytes as defined by the <dlc>
187 * t1230 : can_id 0x123, can_dlc 0, no data
188 * t4563112233 : can_id 0x456, can_dlc 3, data 0x11 0x22 0x33
189 * T12ABCDEF2AA55 : extended can_id 0x12ABCDEF, can_dlc 2, data 0xAA 0x55
190 * r1230 : can_id 0x123, can_dlc 0, no data, remote transmission request
194 /************************************************************************
195 * STANDARD SLCAN DECAPSULATION *
196 ************************************************************************/
198 static int asc2nibble(char c) {
200 if ((c >= '0') && (c <= '9'))
203 if ((c >= 'A') && (c <= 'F'))
206 if ((c >= 'a') && (c <= 'f'))
209 return 16; /* error */
212 /* Send one completely decapsulated can_frame to the network layer */
213 static void slc_bump(struct slcan *sl)
218 char cmd = sl->rbuff[0];
220 if ((cmd != 't') && (cmd != 'T') && (cmd != 'r') && (cmd != 'R'))
223 if (cmd & 0x20) /* tiny chars 'r' 't' => standard frame format */
224 dlc_pos = 4; /* dlc position tiiid */
226 dlc_pos = 9; /* dlc position Tiiiiiiiid */
228 if (!((sl->rbuff[dlc_pos] >= '0') && (sl->rbuff[dlc_pos] < '9')))
231 cf.can_dlc = sl->rbuff[dlc_pos] & 0x0F; /* get can_dlc */
233 sl->rbuff[dlc_pos] = 0; /* terminate can_id string */
234 cf.can_id = simple_strtoul(sl->rbuff+1, NULL, 16);
236 if (!(cmd & 0x20)) /* NO tiny chars => extended frame format */
237 cf.can_id |= CAN_EFF_FLAG;
239 if ((cmd | 0x20) == 'r') /* RTR frame */
240 cf.can_id |= CAN_RTR_FLAG;
242 *(u64 *) (&cf.data) = 0; /* clear payload */
244 for (i = 0, dlc_pos++; i < cf.can_dlc; i++){
246 if ((tmp = asc2nibble(sl->rbuff[dlc_pos++])) > 0x0F)
248 cf.data[i] = (tmp << 4);
249 if ((tmp = asc2nibble(sl->rbuff[dlc_pos++])) > 0x0F)
255 skb = dev_alloc_skb(sizeof(struct can_frame));
260 skb->protocol = htons(ETH_P_CAN);
261 skb->pkt_type = PACKET_BROADCAST;
262 skb->ip_summed = CHECKSUM_UNNECESSARY;
263 memcpy(skb_put(skb, sizeof(struct can_frame)),
264 &cf, sizeof(struct can_frame));
267 sl->dev->last_rx = jiffies;
268 sl->stats.rx_packets++;
269 sl->stats.rx_bytes += cf.can_dlc;
272 /* parse tty input stream */
273 static void slcan_unesc(struct slcan *sl, unsigned char s)
275 if ((s == '\r') || (s == '\a')) { /* CR or BEL ends the pdu */
276 if (!test_and_clear_bit(SLF_ERROR, &sl->flags) &&
282 if (!test_bit(SLF_ERROR, &sl->flags)) {
283 if (sl->rcount < SLC_MTU) {
284 sl->rbuff[sl->rcount++] = s;
287 sl->stats.rx_over_errors++;
288 set_bit(SLF_ERROR, &sl->flags);
294 /************************************************************************
295 * STANDARD SLCAN ENCAPSULATION *
296 ************************************************************************/
298 /* Encapsulate one can_frame and stuff into a TTY queue. */
299 static void slc_encaps(struct slcan *sl, struct can_frame *cf)
304 if (cf->can_id & CAN_RTR_FLAG)
305 cmd = 'R'; /* becomes 'r' in standard frame format */
307 cmd = 'T'; /* becomes 't' in standard frame format */
309 if (cf->can_id & CAN_EFF_FLAG)
310 sprintf(sl->xbuff, "%c%08X%d", cmd,
311 cf->can_id & CAN_EFF_MASK, cf->can_dlc);
313 sprintf(sl->xbuff, "%c%03X%d", cmd | 0x20,
314 cf->can_id & CAN_SFF_MASK, cf->can_dlc);
316 idx = strlen(sl->xbuff);
318 for (i = 0; i < cf->can_dlc; i++)
319 sprintf(&sl->xbuff[idx + 2*i], "%02X", cf->data[i]);
321 DBG("ASCII frame = '%s'\n", sl->xbuff);
323 strcat(sl->xbuff, "\r"); /* add terminating character */
325 /* Order of next two lines is *very* important.
326 * When we are sending a little amount of data,
327 * the transfer may be completed inside driver.write()
328 * routine, because it's running with interrupts enabled.
329 * In this case we *never* got WRITE_WAKEUP event,
330 * if we did not request it before write operation.
331 * 14 Oct 1994 Dmitry Gorodchanin.
333 sl->tty->flags |= (1 << TTY_DO_WRITE_WAKEUP);
334 actual = sl->tty->driver->write(sl->tty, sl->xbuff, strlen(sl->xbuff));
335 #ifdef SLC_CHECK_TRANSMIT
336 sl->dev->trans_start = jiffies;
338 sl->xleft = strlen(sl->xbuff) - actual;
339 sl->xhead = sl->xbuff + actual;
340 sl->stats.tx_bytes += cf->can_dlc;
344 * Called by the driver when there's room for more data. If we have
345 * more packets to send, we send them here.
347 static void slcan_write_wakeup(struct tty_struct *tty)
350 struct slcan *sl = (struct slcan *) tty->disc_data;
352 /* First make sure we're connected. */
353 if (!sl || sl->magic != SLCAN_MAGIC || !netif_running(sl->dev)) {
356 if (sl->xleft <= 0) {
357 /* Now serial buffer is almost free & we can start
358 * transmission of another packet */
359 sl->stats.tx_packets++;
360 tty->flags &= ~(1 << TTY_DO_WRITE_WAKEUP);
361 netif_wake_queue(sl->dev);
365 actual = tty->driver->write(tty, sl->xhead, sl->xleft);
370 static void slc_tx_timeout(struct net_device *dev)
372 struct slcan *sl = netdev_priv(dev);
374 spin_lock(&sl->lock);
376 if (netif_queue_stopped(dev)) {
377 if (!netif_running(dev))
380 /* May be we must check transmitter timeout here ?
381 * 14 Oct 1994 Dmitry Gorodchanin.
383 #ifdef SLC_CHECK_TRANSMIT
384 if (time_before(jiffies, dev->trans_start + 20 * HZ)) {
385 /* 20 sec timeout not reached */
388 printk(KERN_WARNING "%s: transmit timed out, %s?\n", dev->name,
389 (sl->tty->driver->chars_in_buffer(sl->tty) || sl->xleft)
390 ? "bad line quality" : "driver error");
392 sl->tty->flags &= ~(1 << TTY_DO_WRITE_WAKEUP);
393 netif_wake_queue(sl->dev);
397 spin_unlock(&sl->lock);
401 /******************************************
402 * Routines looking at netdevice side.
403 ******************************************/
405 /* Send a can_frame to a TTY queue. */
406 static int slc_xmit(struct sk_buff *skb, struct net_device *dev)
408 struct slcan *sl = netdev_priv(dev);
410 if (skb->len != sizeof(struct can_frame))
413 spin_lock(&sl->lock);
414 if (!netif_running(dev)) {
415 spin_unlock(&sl->lock);
416 printk(KERN_WARNING "%s: xmit: iface is down\n", dev->name);
420 if (sl->tty == NULL) {
421 spin_unlock(&sl->lock);
425 netif_stop_queue(sl->dev);
426 slc_encaps(sl, (struct can_frame *) skb->data); /* encaps & send */
427 spin_unlock(&sl->lock);
435 /* Netdevice UP -> DOWN routine */
436 static int slc_close(struct net_device *dev)
438 struct slcan *sl = netdev_priv(dev);
440 spin_lock_bh(&sl->lock);
442 /* TTY discipline is running. */
443 sl->tty->flags &= ~(1 << TTY_DO_WRITE_WAKEUP);
445 netif_stop_queue(dev);
448 spin_unlock_bh(&sl->lock);
453 /* Netdevice DOWN -> UP routine */
454 static int slc_open(struct net_device *dev)
456 struct slcan *sl = netdev_priv(dev);
461 sl->flags &= (1 << SLF_INUSE);
462 netif_start_queue(dev);
466 /* Netdevice get statistics request */
467 static struct net_device_stats *slc_get_stats(struct net_device *dev)
469 struct slcan *sl = netdev_priv(dev);
474 /* Netdevice register callback */
475 static void slc_setup(struct net_device *dev)
477 dev->open = slc_open;
478 dev->destructor = free_netdev;
479 dev->stop = slc_close;
480 dev->get_stats = slc_get_stats;
481 dev->hard_start_xmit = slc_xmit;
483 dev->hard_header_len = 0;
485 dev->tx_queue_len = 10;
487 SET_MODULE_OWNER(dev);
489 dev->mtu = sizeof(struct can_frame);
490 dev->type = ARPHRD_CAN;
491 #ifdef SLC_CHECK_TRANSMIT
492 dev->tx_timeout = slc_tx_timeout;
493 dev->watchdog_timeo = 20*HZ;
496 /* New-style flags. */
497 dev->flags = IFF_NOARP;
498 dev->features = NETIF_F_NO_CSUM;
501 /******************************************
502 * Routines looking at TTY side.
503 ******************************************/
505 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,16)
506 static int slcan_receive_room(struct tty_struct *tty)
508 return 65536; /* We can handle an infinite amount of data. :-) */
513 * Handle the 'receiver data ready' interrupt.
514 * This function is called by the 'tty_io' module in the kernel when
515 * a block of SLCAN data has been received, which can now be decapsulated
516 * and sent on to some IP layer for further processing. This will not
517 * be re-entered while running but other ldisc functions may be called
521 static void slcan_receive_buf(struct tty_struct *tty,
522 const unsigned char *cp, char *fp, int count)
524 struct slcan *sl = (struct slcan *) tty->disc_data;
526 if (!sl || sl->magic != SLCAN_MAGIC ||
527 !netif_running(sl->dev))
530 /* Read the characters out of the buffer */
533 if (!test_and_set_bit(SLF_ERROR, &sl->flags)) {
534 sl->stats.rx_errors++;
539 slcan_unesc(sl, *cp++);
543 /************************************
544 * slcan_open helper routines.
545 ************************************/
547 /* Collect hanged up channels */
549 static void slc_sync(void)
552 struct net_device *dev;
555 for (i = 0; i < maxdev; i++) {
556 if ((dev = slcan_devs[i]) == NULL)
559 sl = netdev_priv(dev);
560 if (sl->tty || sl->leased)
562 if (dev->flags&IFF_UP)
568 /* Find a free SLCAN channel, and link in this `tty' line. */
569 static struct slcan *slc_alloc(dev_t line)
574 struct net_device *dev = NULL;
577 if (slcan_devs == NULL)
578 return NULL; /* Master array missing ! */
580 for (i = 0; i < maxdev; i++) {
585 sl = netdev_priv(dev);
587 if (sl->line != line)
592 /* Clear ESCAPE & ERROR flags */
593 sl->flags &= (1 << SLF_INUSE);
600 if (current->pid == sl->pid) {
601 if (sl->line == line && score < 3) {
612 if (sl->line == line && score < 1) {
627 sl = netdev_priv(dev);
628 sl->flags &= (1 << SLF_INUSE);
633 /* Sorry, too many, all slots in use */
638 sl = netdev_priv(dev);
639 if (test_bit(SLF_INUSE, &sl->flags)) {
640 unregister_netdevice(dev);
641 free_netdev(dev); /* new in slcan.c */
643 slcan_devs[i] = NULL;
649 sprintf(name, "slc%d", i);
651 dev = alloc_netdev(sizeof(*sl), name, slc_setup);
657 sl = netdev_priv(dev);
659 /* Initialize channel control data */
660 sl->magic = SLCAN_MAGIC;
662 spin_lock_init(&sl->lock);
669 * Open the high-level part of the SLCAN channel.
670 * This function is called by the TTY module when the
671 * SLCAN line discipline is called for. Because we are
672 * sure the tty line exists, we only have to link it to
673 * a free SLCAN channel...
675 * Called in process context serialized from other ldisc calls.
678 static int slcan_open(struct tty_struct *tty)
683 if(!capable(CAP_NET_ADMIN))
686 /* RTnetlink lock is misused here to serialize concurrent
687 opens of slcan channels. There are better ways, but it is
692 /* Collect hanged up channels. */
695 sl = (struct slcan *) tty->disc_data;
698 /* First make sure we're not already connected. */
699 if (sl && sl->magic == SLCAN_MAGIC)
702 /* OK. Find a free SLCAN channel to use. */
704 if ((sl = slc_alloc(tty_devnum(tty))) == NULL)
709 sl->line = tty_devnum(tty);
710 sl->pid = current->pid;
712 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,16)
713 /* FIXME: already done before we were called - seems this can go */
714 if (tty->driver->flush_buffer)
715 tty->driver->flush_buffer(tty);
718 if (!test_bit(SLF_INUSE, &sl->flags)) {
719 /* Perform the low-level SLCAN initialization. */
723 set_bit(SLF_INUSE, &sl->flags);
725 if ((err = register_netdevice(sl->dev)))
729 /* Done. We have linked the TTY line to a channel. */
732 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
733 tty->receive_room = 65536; /* We don't flow control */
736 return sl->dev->base_addr;
740 tty->disc_data = NULL;
741 clear_bit(SLF_INUSE, &sl->flags);
746 /* Count references from TTY module */
752 FIXME: 1,2 are fixed 3 was never true anyway.
754 Let me to blame a bit.
755 1. TTY module calls this funstion on soft interrupt.
756 2. TTY module calls this function WITH MASKED INTERRUPTS!
757 3. TTY module does not notify us about line discipline
760 Seems, now it is clean. The solution is to consider netdevice and
761 line discipline sides as two independent threads.
763 By-product (not desired): slc? does not feel hangups and remains open.
764 It is supposed, that user level program (dip, diald, slattach...)
765 will catch SIGHUP and make the rest of work.
767 I see no way to make more with current tty code. --ANK
771 * Close down a SLCAN channel.
772 * This means flushing out any pending queues, and then returning. This
773 * call is serialized against other ldisc functions.
775 static void slcan_close(struct tty_struct *tty)
777 struct slcan *sl = (struct slcan *) tty->disc_data;
779 /* First make sure we're connected. */
780 if (!sl || sl->magic != SLCAN_MAGIC || sl->tty != tty)
783 tty->disc_data = NULL;
788 /* Count references from TTY module */
791 /* Perform I/O control on an active SLCAN channel. */
792 static int slcan_ioctl(struct tty_struct *tty, struct file *file,
793 unsigned int cmd, unsigned long arg)
795 struct slcan *sl = (struct slcan *) tty->disc_data;
798 /* First make sure we're connected. */
799 if (!sl || sl->magic != SLCAN_MAGIC) {
805 tmp = strlen(sl->dev->name) + 1;
806 if (copy_to_user((void __user *)arg, sl->dev->name, tmp))
814 /* Allow stty to read, but not set, the serial port */
817 return n_tty_ioctl(tty, file, cmd, arg);
824 static struct tty_ldisc slc_ldisc = {
825 .owner = THIS_MODULE,
826 .magic = TTY_LDISC_MAGIC,
829 .close = slcan_close,
830 .ioctl = slcan_ioctl,
831 .receive_buf = slcan_receive_buf,
832 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,16)
833 .receive_room = slcan_receive_room,
835 .write_wakeup = slcan_write_wakeup,
838 /************************************
839 * general slcan module init/exit
840 ************************************/
842 static int __init slcan_init(void)
847 maxdev = 4; /* Sanity */
850 printk(KERN_INFO "slcan: %d dynamic interface channels.\n", maxdev );
852 slcan_devs = kmalloc(sizeof(struct net_device *)*maxdev, GFP_KERNEL);
854 printk(KERN_ERR "slcan: can't allocate slcan device array!\n");
858 /* Clear the pointer array, we allocate devices when we need them */
859 memset(slcan_devs, 0, sizeof(struct net_device *)*maxdev);
861 /* Fill in our line protocol discipline, and register it */
862 if ((status = tty_register_ldisc(N_SLCAN, &slc_ldisc)) != 0) {
863 printk(KERN_ERR "slcan: can't register line discipline\n");
869 static void __exit slcan_exit(void)
872 struct net_device *dev;
874 unsigned long timeout = jiffies + HZ;
877 if (slcan_devs == NULL)
880 /* First of all: check for active disciplines and hangup them.
884 msleep_interruptible(100);
887 for (i = 0; i < maxdev; i++) {
891 sl = netdev_priv(dev);
892 spin_lock_bh(&sl->lock);
897 spin_unlock_bh(&sl->lock);
899 } while (busy && time_before(jiffies, timeout));
902 for (i = 0; i < maxdev; i++) {
906 slcan_devs[i] = NULL;
908 sl = netdev_priv(dev);
910 printk(KERN_ERR "%s: tty discipline still running\n",
912 /* Intentionally leak the control block. */
913 dev->destructor = NULL;
916 unregister_netdev(dev);
922 if ((i = tty_unregister_ldisc(N_SLCAN)))
924 printk(KERN_ERR "slcan: can't unregister ldisc (err %d)\n", i);
928 module_init(slcan_init);
929 module_exit(slcan_exit);