2 * sllin.c - serial line LIN interface driver (using tty line discipline)
4 * This file is derived from drivers/net/can/slcan.c
5 * slcan.c Author: Oliver Hartkopp <socketcan@hartkopp.net>
7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the
9 * Free Software Foundation; either version 2 of the License, or (at your
10 * option) any later version.
12 * This program is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * General Public License for more details.
17 * You should have received a copy of the GNU General Public License along
18 * with this program; if not, write to the Free Software Foundation, Inc.,
19 * 59 Temple Place, Suite 330, Boston, MA 02111-1307. You can also get it
20 * at http://www.gnu.org/licenses/gpl.html
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
28 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
35 * Idea: Oliver Hartkopp <oliver.hartkopp@volkswagen.de>
36 * Copyright: (c) 2011 Czech Technical University in Prague
37 * (c) 2011 Volkswagen Group Research
38 * Authors: Pavel Pisa <pisa@cmp.felk.cvut.cz>
39 * Rostislav Lisovy <lisovy@kormus.cz>
40 * Michal Sojka <sojkam1@fel.cvut.cz>
41 * Funded by: Volkswagen Group Research
44 #define DEBUG 1 /* Enables pr_debug() printouts */
46 #include <linux/module.h>
47 #include <linux/moduleparam.h>
49 #include <asm/system.h>
50 #include <linux/uaccess.h>
51 #include <linux/bitops.h>
52 #include <linux/string.h>
53 #include <linux/tty.h>
54 #include <linux/errno.h>
55 #include <linux/netdevice.h>
56 #include <linux/skbuff.h>
57 #include <linux/rtnetlink.h>
58 #include <linux/if_arp.h>
59 #include <linux/if_ether.h>
60 #include <linux/sched.h>
61 #include <linux/delay.h>
62 #include <linux/init.h>
63 #include <linux/can.h>
64 #include <linux/kthread.h>
65 #include <linux/hrtimer.h>
66 #include "linux/lin_bus.h"
68 /* Should be in include/linux/tty.h */
70 /* -------------------------------- */
72 static __initdata const char banner[] =
73 KERN_INFO "sllin: serial line LIN interface driver\n";
75 MODULE_ALIAS_LDISC(N_SLLIN);
76 MODULE_DESCRIPTION("serial line LIN interface");
77 MODULE_LICENSE("GPL");
78 MODULE_AUTHOR("Pavel Pisa <pisa@cmp.felk.cvut.cz>");
80 #define SLLIN_MAGIC 0x53CA
81 /* #define BREAK_BY_BAUD */
83 static int master = true;
84 static int baudrate; /* Use LIN_DEFAULT_BAUDRATE when not set */
86 module_param(master, bool, 0);
87 MODULE_PARM_DESC(master, "LIN interface is Master device");
88 module_param(baudrate, int, 0);
89 MODULE_PARM_DESC(baudrate, "Baudrate of LIN interface");
91 static int maxdev = 10; /* MAX number of SLLIN channels;
92 This can be overridden with
93 insmod sllin.ko maxdev=nnn */
94 module_param(maxdev, int, 0);
95 MODULE_PARM_DESC(maxdev, "Maximum number of sllin interfaces");
97 /* maximum buffer len to store whole LIN message*/
98 #define SLLIN_DATA_MAX 8
99 #define SLLIN_BUFF_LEN (1 /*break*/ + 1 /*sync*/ + 1 /*ID*/ + \
100 SLLIN_DATA_MAX + 1 /*checksum*/)
101 #define SLLIN_BUFF_BREAK 0
102 #define SLLIN_BUFF_SYNC 1
103 #define SLLIN_BUFF_ID 2
104 #define SLLIN_BUFF_DATA 3
106 #define SLLIN_SAMPLES_PER_CHAR 10
107 #define SLLIN_CHARS_TO_TIMEOUT 24
113 SLSTATE_RESPONSE_WAIT, /* Wait for response */
114 SLSTATE_RESPONSE_WAIT_BUS, /* Wait for response from LIN bus
115 only (CAN frames from network stack
116 are not processed in this moment) */
117 SLSTATE_RESPONSE_SENT,
120 struct sllin_conf_entry {
121 int dlc; /* Length of data in LIN frame */
122 canid_t frame_fl; /* LIN frame flags. Passed from userspace as
124 u8 data[8]; /* LIN frame data payload */
130 /* Various fields. */
131 struct tty_struct *tty; /* ptr to TTY structure */
132 struct net_device *dev; /* easy for intr handling */
135 /* LIN message buffer and actual processed data counts */
136 unsigned char rx_buff[SLLIN_BUFF_LEN]; /* LIN Rx buffer */
137 unsigned char tx_buff[SLLIN_BUFF_LEN]; /* LIN Tx buffer */
138 int rx_expect; /* expected number of Rx chars */
139 int rx_lim; /* maximum Rx chars for current frame */
140 int rx_cnt; /* message buffer Rx fill level */
141 int tx_lim; /* actual limit of bytes to Tx */
142 int tx_cnt; /* number of already Tx bytes */
143 char lin_master; /* node is a master node */
144 int lin_baud; /* LIN baudrate */
145 int lin_state; /* state */
146 char id_to_send; /* there is ID to be sent */
147 char data_to_send; /* there are data to be sent */
148 char resp_len_known; /* Length of the response is known */
149 char header_received;/* In Slave mode, set when header was already
151 char rx_len_unknown; /* We are not sure how much data will be sent to us --
152 we just guess the length */
154 unsigned long flags; /* Flag values/ mode etc */
155 #define SLF_INUSE 0 /* Channel in use */
156 #define SLF_ERROR 1 /* Parity, etc. error */
157 #define SLF_RXEVENT 2 /* Rx wake event */
158 #define SLF_TXEVENT 3 /* Tx wake event */
159 #define SLF_MSGEVENT 4 /* CAN message to sent */
160 #define SLF_TMOUTEVENT 5 /* Timeout on received data */
161 #define SLF_TXBUFF_RQ 6 /* Req. to send buffer to UART*/
162 #define SLF_TXBUFF_INPR 7 /* Above request in progress */
165 struct task_struct *kwthread;
166 wait_queue_head_t kwt_wq; /* Wait queue used by kwthread */
167 struct hrtimer rx_timer; /* RX timeout timer */
168 ktime_t rx_timer_timeout; /* RX timeout timer value */
169 struct sk_buff *tx_req_skb; /* Socket buffer with CAN frame
170 received from network stack*/
172 /* List with configurations for each of 0 to LIN_ID_MAX LIN IDs */
173 struct sllin_conf_entry linfr_cache[LIN_ID_MAX + 1];
174 spinlock_t linfr_lock; /* frame cache and buffers lock */
177 static struct net_device **sllin_devs;
178 static int sllin_configure_frame_cache(struct sllin *sl, struct can_frame *cf);
179 static void sllin_slave_receive_buf(struct tty_struct *tty,
180 const unsigned char *cp, char *fp, int count);
181 static void sllin_master_receive_buf(struct tty_struct *tty,
182 const unsigned char *cp, char *fp, int count);
185 /* Values of two parity bits in LIN Protected
186 Identifier for each particular LIN ID */
187 const unsigned char sllin_id_parity_table[] = {
188 0x80, 0xc0, 0x40, 0x00, 0xc0, 0x80, 0x00, 0x40,
189 0x00, 0x40, 0xc0, 0x80, 0x40, 0x00, 0x80, 0xc0,
190 0x40, 0x00, 0x80, 0xc0, 0x00, 0x40, 0xc0, 0x80,
191 0xc0, 0x80, 0x00, 0x40, 0x80, 0xc0, 0x40, 0x00,
192 0x00, 0x40, 0xc0, 0x80, 0x40, 0x00, 0x80, 0xc0,
193 0x80, 0xc0, 0x40, 0x00, 0xc0, 0x80, 0x00, 0x40,
194 0xc0, 0x80, 0x00, 0x40, 0x80, 0xc0, 0x40, 0x00,
195 0x40, 0x00, 0x80, 0xc0, 0x00, 0x40, 0xc0, 0x80
199 * sltty_change_speed() -- Change baudrate of Serial device belonging
202 * @tty: Pointer to TTY to change speed for.
203 * @speed: Integer value of new speed. It is possible to
204 * assign non-standard values, i.e. those which
205 * are not defined in termbits.h.
207 static int sltty_change_speed(struct tty_struct *tty, unsigned speed)
209 struct ktermios old_termios;
212 mutex_lock(&tty->termios_mutex);
214 old_termios = *(tty->termios);
216 cflag = CS8 | CREAD | CLOCAL | HUPCL;
217 cflag &= ~(CBAUD | CIBAUD);
219 tty->termios->c_cflag = cflag;
220 tty->termios->c_oflag = 0;
221 tty->termios->c_lflag = 0;
223 /* Enable interrupt when UART-Break or Framing error received */
224 tty->termios->c_iflag = BRKINT | INPCK;
226 tty_encode_baud_rate(tty, speed, speed);
228 if (tty->ops->set_termios)
229 tty->ops->set_termios(tty, &old_termios);
231 mutex_unlock(&tty->termios_mutex);
236 /* Send one can_frame to the network layer */
237 static void sllin_send_canfr(struct sllin *sl, canid_t id, char *data, int len)
245 memcpy(&cf.data, data, cf.can_dlc);
247 skb = dev_alloc_skb(sizeof(struct can_frame));
252 skb->protocol = htons(ETH_P_CAN);
253 skb->pkt_type = PACKET_BROADCAST;
254 skb->ip_summed = CHECKSUM_UNNECESSARY;
255 memcpy(skb_put(skb, sizeof(struct can_frame)),
256 &cf, sizeof(struct can_frame));
259 sl->dev->stats.rx_packets++;
260 sl->dev->stats.rx_bytes += cf.can_dlc;
264 * sll_bump() -- Send data of received LIN frame (existing in sl->rx_buff)
269 static void sll_bump(struct sllin *sl)
271 int len = sl->rx_cnt - SLLIN_BUFF_DATA - 1; /* without checksum */
272 len = (len < 0) ? 0 : len;
274 sllin_send_canfr(sl, sl->rx_buff[SLLIN_BUFF_ID] & LIN_ID_MASK,
275 sl->rx_buff + SLLIN_BUFF_DATA, len);
278 static void sll_send_rtr(struct sllin *sl)
280 sllin_send_canfr(sl, (sl->rx_buff[SLLIN_BUFF_ID] & LIN_ID_MASK) |
281 CAN_RTR_FLAG, NULL, 0);
285 * Called by the driver when there's room for more data. If we have
286 * more packets to send, we send them here.
288 static void sllin_write_wakeup(struct tty_struct *tty)
292 struct sllin *sl = (struct sllin *) tty->disc_data;
294 /* First make sure we're connected. */
295 if (!sl || sl->magic != SLLIN_MAGIC || !netif_running(sl->dev))
298 set_bit(SLF_TXBUFF_RQ, &sl->flags);
300 if (unlikely(test_and_set_bit(SLF_TXBUFF_INPR, &sl->flags)))
301 return; /* ongoing concurrent processing */
303 clear_bit(SLF_TXBUFF_RQ, &sl->flags);
304 smp_mb__after_clear_bit();
306 if (sl->lin_state != SLSTATE_BREAK_SENT)
307 remains = sl->tx_lim - sl->tx_cnt;
309 remains = SLLIN_BUFF_BREAK + 1 - sl->tx_cnt;
312 actual = tty->ops->write(tty, sl->tx_buff + sl->tx_cnt,
313 sl->tx_cnt - sl->tx_lim);
314 sl->tx_cnt += actual;
317 clear_bit(SLF_TXBUFF_INPR, &sl->flags);
318 smp_mb__after_clear_bit();
320 } while (unlikely(test_bit(SLF_TXBUFF_RQ, &sl->flags)));
322 if ((remains > 0) && (actual >= 0)) {
323 pr_debug("sllin: sllin_write_wakeup sent %d, "
324 "remains %d, waiting\n",
325 sl->tx_cnt, sl->tx_lim - sl->tx_cnt);
329 clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
330 set_bit(SLF_TXEVENT, &sl->flags);
331 wake_up(&sl->kwt_wq);
333 pr_debug("sllin: sllin_write_wakeup sent %d, wakeup\n", sl->tx_cnt);
337 * sll_xmit() -- Send a can_frame to a TTY queue.
339 * @skb: Pointer to Socket buffer to be sent.
340 * @dev: Network device where @skb will be sent.
342 static netdev_tx_t sll_xmit(struct sk_buff *skb, struct net_device *dev)
344 struct sllin *sl = netdev_priv(dev);
345 struct can_frame *cf;
347 if (skb->len != sizeof(struct can_frame))
350 spin_lock(&sl->lock);
351 if (!netif_running(dev)) {
352 printk(KERN_WARNING "%s: xmit: iface is down\n", dev->name);
355 if (sl->tty == NULL) {
356 printk(KERN_WARNING "%s: xmit: no tty device connected\n", dev->name);
360 cf = (struct can_frame *) skb->data;
361 if (cf->can_id & LIN_CTRL_FRAME) {
362 sllin_configure_frame_cache(sl, cf);
363 goto free_out_unlock;
366 netif_stop_queue(sl->dev);
368 sl->tx_req_skb = skb;
369 set_bit(SLF_MSGEVENT, &sl->flags);
370 wake_up(&sl->kwt_wq);
371 spin_unlock(&sl->lock);
376 spin_unlock(&sl->lock);
383 /******************************************
384 * Routines looking at netdevice side.
385 ******************************************/
387 /* Netdevice UP -> DOWN routine */
388 static int sll_close(struct net_device *dev)
390 struct sllin *sl = netdev_priv(dev);
392 spin_lock_bh(&sl->lock);
394 /* TTY discipline is running. */
395 clear_bit(TTY_DO_WRITE_WAKEUP, &sl->tty->flags);
397 netif_stop_queue(dev);
400 spin_unlock_bh(&sl->lock);
405 /* Netdevice DOWN -> UP routine */
406 static int sll_open(struct net_device *dev)
408 struct sllin *sl = netdev_priv(dev);
410 pr_debug("sllin: %s() invoked\n", __func__);
415 sl->flags &= (1 << SLF_INUSE);
416 netif_start_queue(dev);
420 /* Hook the destructor so we can free sllin devs at the right point in time */
421 static void sll_free_netdev(struct net_device *dev)
423 int i = dev->base_addr;
425 sllin_devs[i] = NULL;
428 static const struct net_device_ops sll_netdev_ops = {
429 .ndo_open = sll_open,
430 .ndo_stop = sll_close,
431 .ndo_start_xmit = sll_xmit,
434 static void sll_setup(struct net_device *dev)
436 dev->netdev_ops = &sll_netdev_ops;
437 dev->destructor = sll_free_netdev;
439 dev->hard_header_len = 0;
441 dev->tx_queue_len = 10;
443 dev->mtu = sizeof(struct can_frame);
444 dev->type = ARPHRD_CAN;
446 /* New-style flags. */
447 dev->flags = IFF_NOARP;
448 dev->features = NETIF_F_NO_CSUM;
451 /******************************************
452 Routines looking at TTY side.
453 ******************************************/
454 static void sllin_master_receive_buf(struct tty_struct *tty,
455 const unsigned char *cp, char *fp, int count)
457 struct sllin *sl = (struct sllin *) tty->disc_data;
459 /* Read the characters out of the buffer */
462 pr_debug("sllin: sllin_receive_buf char 0x%02x ignored "
463 "due marker 0x%02x, flags 0x%lx\n",
464 *cp, *(fp-1), sl->flags);
466 /* i.e. Real error -- not Break */
467 if (sl->rx_cnt > SLLIN_BUFF_BREAK) {
468 set_bit(SLF_ERROR, &sl->flags);
469 wake_up(&sl->kwt_wq);
474 #ifndef BREAK_BY_BAUD
475 /* We didn't receive Break character -- fake it! */
476 if ((sl->rx_cnt == SLLIN_BUFF_BREAK) && (*cp == 0x55)) {
477 pr_debug("sllin: LIN_RX[%d]: 0x00\n", sl->rx_cnt);
478 sl->rx_buff[sl->rx_cnt++] = 0x00;
480 #endif /* BREAK_BY_BAUD */
482 if (sl->rx_cnt < SLLIN_BUFF_LEN) {
483 pr_debug("sllin: LIN_RX[%d]: 0x%02x\n", sl->rx_cnt, *cp);
484 sl->rx_buff[sl->rx_cnt++] = *cp++;
489 if (sl->rx_cnt >= sl->rx_expect) {
490 set_bit(SLF_RXEVENT, &sl->flags);
491 wake_up(&sl->kwt_wq);
492 pr_debug("sllin: sllin_receive_buf count %d, wakeup\n", sl->rx_cnt);
494 pr_debug("sllin: sllin_receive_buf count %d, waiting\n", sl->rx_cnt);
499 static void sllin_slave_receive_buf(struct tty_struct *tty,
500 const unsigned char *cp, char *fp, int count)
502 struct sllin *sl = (struct sllin *) tty->disc_data;
504 struct sllin_conf_entry *sce;
507 /* Read the characters out of the buffer */
510 pr_debug("sllin: sllin_receive_buf char 0x%02x ignored "
511 "due marker 0x%02x, flags 0x%lx\n",
512 *cp, *(fp-1), sl->flags);
516 sl->rx_expect = SLLIN_BUFF_ID + 1;
517 sl->rx_len_unknown = false; /* We do know exact length of the header */
518 sl->header_received = false;
521 if (sl->rx_cnt < SLLIN_BUFF_LEN) {
522 pr_debug("sllin: LIN_RX[%d]: 0x%02x\n", sl->rx_cnt, *cp);
524 /* We did not receive break (0x00) character */
525 if ((sl->rx_cnt == SLLIN_BUFF_BREAK) && (*cp == 0x55)) {
526 sl->rx_buff[sl->rx_cnt++] = 0x00;
527 sl->rx_buff[sl->rx_cnt++] = 0x55;
531 if (sl->rx_cnt == SLLIN_BUFF_SYNC) {
532 /* 'Duplicated' break character -- ignore */
533 if ((*cp == 0x00) && (*(cp + 1) == 0x55)) {
538 /* Wrong sync character */
543 sl->rx_buff[sl->rx_cnt++] = *cp++;
546 /* Header received */
547 if ((sl->header_received == false) && (sl->rx_cnt >= (SLLIN_BUFF_ID + 1))) {
550 lin_id = sl->rx_buff[SLLIN_BUFF_ID] & LIN_ID_MASK;
551 sce = &sl->linfr_cache[lin_id];
553 spin_lock_irqsave(&sl->linfr_lock, flags);
554 /* Is the length of data set in frame cache? */
555 if (sce->frame_fl & LIN_LOC_SLAVE_CACHE) {
556 sl->rx_expect += sce->dlc;
557 sl->rx_len_unknown = false;
559 sl->rx_expect += SLLIN_DATA_MAX + 1; /* + checksum */
560 sl->rx_len_unknown = true;
562 spin_unlock_irqrestore(&sl->linfr_lock, flags);
564 sl->header_received = true;
569 /* Response received */
570 if ((sl->header_received == true) &&
571 ((sl->rx_cnt >= sl->rx_expect) ||
572 ((sl->rx_len_unknown == true) && (count == 0)))) {
575 pr_debug("sllin: Received LIN header & LIN response. "
576 "rx_cnt = %u, rx_expect = %u\n", sl->rx_cnt,
579 /* Prepare for reception of new header */
581 sl->rx_expect = SLLIN_BUFF_ID + 1;
582 sl->rx_len_unknown = false; /* We do know exact length of the header */
583 sl->header_received = false;
588 static void sllin_receive_buf(struct tty_struct *tty,
589 const unsigned char *cp, char *fp, int count)
591 struct sllin *sl = (struct sllin *) tty->disc_data;
592 pr_debug("sllin: sllin_receive_buf invoked, count = %u\n", count);
594 if (!sl || sl->magic != SLLIN_MAGIC || !netif_running(sl->dev))
598 sllin_master_receive_buf(tty, cp, fp, count);
600 sllin_slave_receive_buf(tty, cp, fp, count);
604 /*****************************************
605 * sllin message helper routines
606 *****************************************/
608 * sllin_report_error() -- Report an error by sending CAN frame
609 * with particular error flag set in can_id
612 * @err: Error flag to be sent.
614 void sllin_report_error(struct sllin *sl, int err)
617 case LIN_ERR_CHECKSUM:
618 sl->dev->stats.rx_crc_errors++;
621 case LIN_ERR_RX_TIMEOUT:
622 sl->dev->stats.rx_errors++;
625 case LIN_ERR_FRAMING:
626 sl->dev->stats.rx_frame_errors++;
630 sllin_send_canfr(sl, 0 | CAN_EFF_FLAG |
631 (err & ~LIN_ID_MASK), NULL, 0);
635 * sllin_configure_frame_cache() -- Configure particular entry in linfr_cache
638 * @cf: Pointer to CAN frame sent to this driver
639 * holding configuration information
641 static int sllin_configure_frame_cache(struct sllin *sl, struct can_frame *cf)
644 struct sllin_conf_entry *sce;
646 if (!(cf->can_id & LIN_ID_CONF))
649 sce = &sl->linfr_cache[cf->can_id & LIN_ID_MASK];
650 pr_debug("sllin: Setting frame cache with EFF CAN frame. "
651 "LIN ID = %d\n", cf->can_id & LIN_ID_MASK);
653 spin_lock_irqsave(&sl->linfr_lock, flags);
655 sce->dlc = cf->can_dlc;
656 if (sce->dlc > SLLIN_DATA_MAX)
657 sce->dlc = SLLIN_DATA_MAX;
659 sce->frame_fl = (cf->can_id & ~LIN_ID_MASK) & CAN_EFF_MASK;
660 memcpy(sce->data, cf->data, cf->can_dlc);
662 spin_unlock_irqrestore(&sl->linfr_lock, flags);
668 * sllin_checksum() -- Count checksum for particular data
670 * @data: Pointer to the buffer containing whole LIN
671 * frame (i.e. including break and sync bytes).
672 * @length: Length of the buffer.
673 * @enhanced_fl: Flag determining whether Enhanced or Classic
674 * checksum should be counted.
676 static inline unsigned sllin_checksum(unsigned char *data, int length, int enhanced_fl)
686 for (; i < length; i++) {
695 #define SLLIN_STPMSG_RESPONLY (1) /* Message will be LIN Response only */
696 #define SLLIN_STPMSG_CHCKSUM_CLS (1 << 1)
697 #define SLLIN_STPMSG_CHCKSUM_ENH (1 << 2)
699 int sllin_setup_msg(struct sllin *sl, int mode, int id,
700 unsigned char *data, int len)
702 if (id > LIN_ID_MASK)
705 if (!(mode & SLLIN_STPMSG_RESPONLY)) {
709 sl->rx_lim = SLLIN_BUFF_LEN;
712 sl->tx_buff[SLLIN_BUFF_BREAK] = 0;
713 sl->tx_buff[SLLIN_BUFF_SYNC] = 0x55;
714 sl->tx_buff[SLLIN_BUFF_ID] = id | sllin_id_parity_table[id];
715 sl->tx_lim = SLLIN_BUFF_DATA;
717 if ((data != NULL) && len) {
719 memcpy(sl->tx_buff + SLLIN_BUFF_DATA, data, len);
720 sl->tx_buff[sl->tx_lim++] = sllin_checksum(sl->tx_buff,
721 sl->tx_lim, mode & SLLIN_STPMSG_CHCKSUM_ENH);
724 sl->rx_lim = SLLIN_BUFF_DATA + len + 1;
729 static void sllin_reset_buffs(struct sllin *sl)
733 sl->rx_lim = sl->lin_master ? 0 : SLLIN_BUFF_LEN;
736 sl->id_to_send = false;
737 sl->data_to_send = false;
740 int sllin_send_tx_buff(struct sllin *sl)
742 struct tty_struct *tty = sl->tty;
746 set_bit(SLF_TXBUFF_RQ, &sl->flags);
748 if (unlikely(test_and_set_bit(SLF_TXBUFF_INPR, &sl->flags)))
749 return 0; /* ongoing concurrent processing */
751 clear_bit(SLF_TXBUFF_RQ, &sl->flags);
752 smp_mb__after_clear_bit();
755 if (sl->lin_state != SLSTATE_BREAK_SENT)
756 remains = sl->tx_lim - sl->tx_cnt;
760 remains = sl->tx_lim - sl->tx_cnt;
763 res = tty->ops->write(tty, sl->tx_buff + sl->tx_cnt, remains);
771 set_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
772 res = tty->ops->write(tty, sl->tx_buff + sl->tx_cnt, remains);
774 clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
782 pr_debug("sllin: sllin_send_tx_buff sent %d, remains %d\n",
783 sl->tx_cnt, remains);
785 clear_bit(SLF_TXBUFF_INPR, &sl->flags);
786 smp_mb__after_clear_bit();
788 } while (unlikely(test_bit(SLF_TXBUFF_RQ, &sl->flags)));
793 clear_bit(SLF_TXBUFF_INPR, &sl->flags);
799 int sllin_send_break(struct sllin *sl)
801 struct tty_struct *tty = sl->tty;
802 unsigned long break_baud;
805 break_baud = ((sl->lin_baud * 2) / 3);
806 sltty_change_speed(tty, break_baud);
808 tty->ops->flush_buffer(tty);
809 sl->rx_cnt = SLLIN_BUFF_BREAK;
811 sl->rx_expect = SLLIN_BUFF_BREAK + 1;
812 sl->lin_state = SLSTATE_BREAK_SENT;
814 res = sllin_send_tx_buff(sl);
816 sl->lin_state = SLSTATE_IDLE;
822 #else /* BREAK_BY_BAUD */
824 int sllin_send_break(struct sllin *sl)
826 struct tty_struct *tty = sl->tty;
828 unsigned long break_baud;
829 unsigned long usleep_range_min;
830 unsigned long usleep_range_max;
832 break_baud = ((sl->lin_baud * 2) / 3);
833 sl->rx_cnt = SLLIN_BUFF_BREAK;
834 sl->rx_expect = SLLIN_BUFF_BREAK + 1;
835 sl->lin_state = SLSTATE_BREAK_SENT;
837 /* Do the break ourselves; Inspired by
838 http://lxr.linux.no/#linux+v3.1.2/drivers/tty/tty_io.c#L2452 */
839 retval = tty->ops->break_ctl(tty, -1);
844 usleep_range_min = (1000000l * SLLIN_SAMPLES_PER_CHAR) / break_baud;
845 usleep_range_max = usleep_range_min + 50;
846 usleep_range(usleep_range_min, usleep_range_max);
848 retval = tty->ops->break_ctl(tty, 0);
849 usleep_range_min = (1000000l * 1 /* 1 bit */) / break_baud;
850 usleep_range_max = usleep_range_min + 30;
851 usleep_range(usleep_range_min, usleep_range_max);
853 tty->ops->flush_buffer(tty);
855 sl->tx_cnt = SLLIN_BUFF_SYNC;
857 pr_debug("sllin: Break sent.\n");
858 set_bit(SLF_RXEVENT, &sl->flags);
859 wake_up(&sl->kwt_wq);
863 #endif /* BREAK_BY_BAUD */
866 static enum hrtimer_restart sllin_rx_timeout_handler(struct hrtimer *hrtimer)
868 struct sllin *sl = container_of(hrtimer, struct sllin, rx_timer);
870 sllin_report_error(sl, LIN_ERR_RX_TIMEOUT);
871 set_bit(SLF_TMOUTEVENT, &sl->flags);
872 wake_up(&sl->kwt_wq);
874 return HRTIMER_NORESTART;
878 * sllin_rx_validate() -- Validate received frame, i,e. check checksum
882 static int sllin_rx_validate(struct sllin *sl)
888 unsigned char rec_chcksm = sl->rx_buff[sl->rx_cnt - 1];
889 struct sllin_conf_entry *sce;
891 actual_id = sl->rx_buff[SLLIN_BUFF_ID] & LIN_ID_MASK;
892 sce = &sl->linfr_cache[actual_id];
894 spin_lock_irqsave(&sl->linfr_lock, flags);
896 ext_chcks_fl = sce->frame_fl & LIN_CHECKSUM_EXTENDED;
897 spin_unlock_irqrestore(&sl->linfr_lock, flags);
899 if (sllin_checksum(sl->rx_buff, sl->rx_cnt - 1, ext_chcks_fl) !=
902 /* Type of checksum is configured for particular frame */
906 if (sllin_checksum(sl->rx_buff, sl->rx_cnt - 1,
907 !ext_chcks_fl) != rec_chcksm) {
916 /*****************************************
917 * sllin_kwthread - kernel worker thread
918 *****************************************/
920 int sllin_kwthread(void *ptr)
922 struct sllin *sl = (struct sllin *)ptr;
923 struct tty_struct *tty = sl->tty;
924 struct sched_param schparam = { .sched_priority = 40 };
925 int tx_bytes = 0; /* Used for Network statistics */
928 pr_debug("sllin: sllin_kwthread started.\n");
929 sched_setscheduler(current, SCHED_FIFO, &schparam);
931 clear_bit(SLF_ERROR, &sl->flags);
932 sltty_change_speed(tty, sl->lin_baud);
934 while (!kthread_should_stop()) {
935 struct can_frame *cf;
938 u8 lin_data_buff[SLLIN_DATA_MAX];
941 if ((sl->lin_state == SLSTATE_IDLE) && sl->lin_master &&
943 if (sllin_send_break(sl) < 0) {
944 /* error processing */
948 wait_event_killable(sl->kwt_wq, kthread_should_stop() ||
949 test_bit(SLF_RXEVENT, &sl->flags) ||
950 test_bit(SLF_TXEVENT, &sl->flags) ||
951 test_bit(SLF_TMOUTEVENT, &sl->flags) ||
952 test_bit(SLF_ERROR, &sl->flags) ||
953 (((sl->lin_state == SLSTATE_IDLE) ||
954 (sl->lin_state == SLSTATE_RESPONSE_WAIT))
955 && test_bit(SLF_MSGEVENT, &sl->flags)));
957 if (test_and_clear_bit(SLF_RXEVENT, &sl->flags)) {
958 pr_debug("sllin: sllin_kthread RXEVENT\n");
961 if (test_and_clear_bit(SLF_ERROR, &sl->flags)) {
962 unsigned long usleep_range_min;
963 unsigned long usleep_range_max;
964 hrtimer_cancel(&sl->rx_timer);
965 pr_debug("sllin: sllin_kthread ERROR\n");
967 if (sl->lin_state != SLSTATE_IDLE)
968 sllin_report_error(sl, LIN_ERR_FRAMING);
970 usleep_range_min = (1000000l * SLLIN_SAMPLES_PER_CHAR * 10) /
972 usleep_range_max = usleep_range_min + 50;
973 usleep_range(usleep_range_min, usleep_range_max);
974 sllin_reset_buffs(sl);
975 sl->lin_state = SLSTATE_IDLE;
978 if (test_and_clear_bit(SLF_TXEVENT, &sl->flags)) {
979 pr_debug("sllin: sllin_kthread TXEVENT\n");
982 if (test_and_clear_bit(SLF_TMOUTEVENT, &sl->flags)) {
983 pr_debug("sllin: sllin_kthread TMOUTEVENT\n");
984 sllin_reset_buffs(sl);
986 sl->lin_state = SLSTATE_IDLE;
989 switch (sl->lin_state) {
991 if (!test_bit(SLF_MSGEVENT, &sl->flags))
994 cf = (struct can_frame *)sl->tx_req_skb->data;
996 /* SFF RTR CAN frame -> LIN header */
997 if (cf->can_id & CAN_RTR_FLAG) {
999 struct sllin_conf_entry *sce;
1001 pr_debug("sllin: %s: RTR SFF CAN frame, ID = %x\n",
1002 __func__, cf->can_id & LIN_ID_MASK);
1004 sce = &sl->linfr_cache[cf->can_id & LIN_ID_MASK];
1005 spin_lock_irqsave(&sl->linfr_lock, flags);
1007 /* Is there Slave response in linfr_cache to be sent? */
1008 if ((sce->frame_fl & LIN_LOC_SLAVE_CACHE)
1009 && (sce->dlc > 0)) {
1011 pr_debug("sllin: Sending LIN response from linfr_cache\n");
1013 lin_data = sce->data;
1015 if (lin_dlc > SLLIN_DATA_MAX)
1016 lin_dlc = SLLIN_DATA_MAX;
1017 memcpy(lin_data_buff, lin_data, lin_dlc);
1018 lin_data = lin_data_buff;
1023 spin_unlock_irqrestore(&sl->linfr_lock, flags);
1025 } else { /* SFF NON-RTR CAN frame -> LIN header + LIN response */
1026 pr_debug("sllin: %s: NON-RTR SFF CAN frame, ID = %x\n",
1027 __func__, (int)cf->can_id & LIN_ID_MASK);
1029 lin_data = cf->data;
1030 lin_dlc = cf->can_dlc;
1031 if (lin_dlc > SLLIN_DATA_MAX)
1032 lin_dlc = SLLIN_DATA_MAX;
1036 if (sllin_setup_msg(sl, 0, cf->can_id & LIN_ID_MASK,
1037 lin_data, lin_dlc) != -1) {
1039 sl->id_to_send = true;
1040 sl->data_to_send = (lin_data != NULL) ? true : false;
1041 sl->resp_len_known = (lin_dlc > 0) ? true : false;
1042 sl->dev->stats.tx_packets++;
1043 sl->dev->stats.tx_bytes += tx_bytes;
1046 clear_bit(SLF_MSGEVENT, &sl->flags);
1047 kfree_skb(sl->tx_req_skb);
1048 netif_wake_queue(sl->dev);
1049 hrtimer_start(&sl->rx_timer,
1050 ktime_add(ktime_get(), sl->rx_timer_timeout),
1054 case SLSTATE_BREAK_SENT:
1055 #ifdef BREAK_BY_BAUD
1056 if (sl->rx_cnt <= SLLIN_BUFF_BREAK)
1059 res = sltty_change_speed(tty, sl->lin_baud);
1062 sl->lin_state = SLSTATE_ID_SENT;
1063 sllin_send_tx_buff(sl);
1066 case SLSTATE_ID_SENT:
1067 hrtimer_cancel(&sl->rx_timer);
1068 sl->id_to_send = false;
1069 if (sl->data_to_send) {
1070 sllin_send_tx_buff(sl);
1071 sl->lin_state = SLSTATE_RESPONSE_SENT;
1072 sl->rx_expect = sl->tx_lim;
1073 goto slstate_response_sent;
1075 if (sl->resp_len_known) {
1076 sl->rx_expect = sl->rx_lim;
1078 sl->rx_expect = SLLIN_BUFF_DATA + 2;
1080 sl->lin_state = SLSTATE_RESPONSE_WAIT;
1081 /* If we don't receive anything, timer will "unblock" us */
1082 hrtimer_start(&sl->rx_timer,
1083 ktime_add(ktime_get(), sl->rx_timer_timeout),
1085 goto slstate_response_wait;
1089 case SLSTATE_RESPONSE_WAIT:
1090 slstate_response_wait:
1091 if (test_bit(SLF_MSGEVENT, &sl->flags)) {
1092 unsigned char *lin_buff;
1093 cf = (struct can_frame *)sl->tx_req_skb->data;
1095 lin_buff = (sl->lin_master) ? sl->tx_buff : sl->rx_buff;
1096 if (cf->can_id == (lin_buff[SLLIN_BUFF_ID] & LIN_ID_MASK)) {
1097 hrtimer_cancel(&sl->rx_timer);
1098 pr_debug("sllin: received LIN response in a CAN frame.\n");
1099 if (sllin_setup_msg(sl, SLLIN_STPMSG_RESPONLY,
1100 cf->can_id & LIN_ID_MASK,
1101 cf->data, cf->can_dlc) != -1) {
1103 sl->rx_expect = sl->tx_lim;
1104 sl->data_to_send = true;
1105 sl->dev->stats.tx_packets++;
1106 sl->dev->stats.tx_bytes += tx_bytes;
1108 if (!sl->lin_master) {
1109 sl->tx_cnt = SLLIN_BUFF_DATA;
1112 sllin_send_tx_buff(sl);
1113 clear_bit(SLF_MSGEVENT, &sl->flags);
1114 kfree_skb(sl->tx_req_skb);
1115 netif_wake_queue(sl->dev);
1117 sl->lin_state = SLSTATE_RESPONSE_SENT;
1118 goto slstate_response_sent;
1121 sl->lin_state = SLSTATE_RESPONSE_WAIT_BUS;
1125 /* Be aware, no BREAK here */
1126 case SLSTATE_RESPONSE_WAIT_BUS:
1127 if (sl->rx_cnt < sl->rx_expect)
1130 hrtimer_cancel(&sl->rx_timer);
1131 pr_debug("sllin: response received ID %d len %d\n",
1132 sl->rx_buff[SLLIN_BUFF_ID], sl->rx_cnt - SLLIN_BUFF_DATA - 1);
1134 if (sllin_rx_validate(sl) == -1) {
1135 pr_debug("sllin: RX validation failed.\n");
1136 sllin_report_error(sl, LIN_ERR_CHECKSUM);
1138 /* Send CAN non-RTR frame with data */
1139 pr_debug("sllin: sending NON-RTR CAN"
1140 "frame with LIN payload.");
1141 sll_bump(sl); /* send packet to the network layer */
1144 sl->id_to_send = false;
1145 sl->lin_state = SLSTATE_IDLE;
1148 case SLSTATE_RESPONSE_SENT:
1149 slstate_response_sent:
1150 if (sl->rx_cnt < sl->tx_lim)
1153 hrtimer_cancel(&sl->rx_timer);
1154 sll_bump(sl); /* send packet to the network layer */
1155 pr_debug("sllin: response sent ID %d len %d\n",
1156 sl->rx_buff[SLLIN_BUFF_ID], sl->rx_cnt - SLLIN_BUFF_DATA - 1);
1158 sl->id_to_send = false;
1159 sl->lin_state = SLSTATE_IDLE;
1164 hrtimer_cancel(&sl->rx_timer);
1165 pr_debug("sllin: sllin_kwthread stopped.\n");
1171 /************************************
1172 * sllin_open helper routines.
1173 ************************************/
1175 /* Collect hanged up channels */
1176 static void sll_sync(void)
1179 struct net_device *dev;
1182 for (i = 0; i < maxdev; i++) {
1183 dev = sllin_devs[i];
1187 sl = netdev_priv(dev);
1190 if (dev->flags & IFF_UP)
1195 /* Find a free SLLIN channel, and link in this `tty' line. */
1196 static struct sllin *sll_alloc(dev_t line)
1199 struct net_device *dev = NULL;
1202 if (sllin_devs == NULL)
1203 return NULL; /* Master array missing ! */
1205 for (i = 0; i < maxdev; i++) {
1206 dev = sllin_devs[i];
1212 /* Sorry, too many, all slots in use */
1217 sl = netdev_priv(dev);
1218 if (test_bit(SLF_INUSE, &sl->flags)) {
1219 unregister_netdevice(dev);
1221 sllin_devs[i] = NULL;
1226 char name[IFNAMSIZ];
1227 sprintf(name, "sllin%d", i);
1229 dev = alloc_netdev(sizeof(*sl), name, sll_setup);
1235 sl = netdev_priv(dev);
1236 /* Initialize channel control data */
1237 sl->magic = SLLIN_MAGIC;
1239 spin_lock_init(&sl->lock);
1240 spin_lock_init(&sl->linfr_lock);
1241 sllin_devs[i] = dev;
1247 * Open the high-level part of the SLLIN channel.
1248 * This function is called by the TTY module when the
1249 * SLLIN line discipline is called for. Because we are
1250 * sure the tty line exists, we only have to link it to
1251 * a free SLLIN channel...
1253 * Called in process context serialized from other ldisc calls.
1256 static int sllin_open(struct tty_struct *tty)
1260 pr_debug("sllin: %s() invoked\n", __func__);
1262 if (!capable(CAP_NET_ADMIN))
1265 if (tty->ops->write == NULL)
1268 /* RTnetlink lock is misused here to serialize concurrent
1269 opens of sllin channels. There are better ways, but it is
1274 /* Collect hanged up channels. */
1277 sl = tty->disc_data;
1280 /* First make sure we're not already connected. */
1281 if (sl && sl->magic == SLLIN_MAGIC)
1284 /* OK. Find a free SLLIN channel to use. */
1286 sl = sll_alloc(tty_devnum(tty));
1291 tty->disc_data = sl;
1292 sl->line = tty_devnum(tty);
1294 if (!test_bit(SLF_INUSE, &sl->flags)) {
1295 /* Perform the low-level SLLIN initialization. */
1296 sl->lin_master = master;
1299 pr_debug("sllin: Configured as MASTER\n");
1301 pr_debug("sllin: Configured as SLAVE\n");
1304 sllin_reset_buffs(sl);
1306 sl->lin_baud = (baudrate == 0) ? LIN_DEFAULT_BAUDRATE : baudrate;
1307 pr_debug("sllin: Baudrate set to %u\n", sl->lin_baud);
1309 sl->lin_state = SLSTATE_IDLE;
1311 hrtimer_init(&sl->rx_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
1312 sl->rx_timer.function = sllin_rx_timeout_handler;
1313 /* timeval_to_ktime(msg_head->ival1); */
1314 sl->rx_timer_timeout = ns_to_ktime(
1315 (1000000000l / sl->lin_baud) *
1316 SLLIN_SAMPLES_PER_CHAR * SLLIN_CHARS_TO_TIMEOUT);
1318 set_bit(SLF_INUSE, &sl->flags);
1320 init_waitqueue_head(&sl->kwt_wq);
1321 sl->kwthread = kthread_run(sllin_kwthread, sl, "sllin");
1322 if (sl->kwthread == NULL)
1325 err = register_netdevice(sl->dev);
1327 goto err_free_chan_and_thread;
1330 /* Done. We have linked the TTY line to a channel. */
1332 tty->receive_room = SLLIN_BUFF_LEN * 40; /* We don't flow control */
1334 /* TTY layer expects 0 on success */
1337 err_free_chan_and_thread:
1338 kthread_stop(sl->kwthread);
1339 sl->kwthread = NULL;
1343 tty->disc_data = NULL;
1344 clear_bit(SLF_INUSE, &sl->flags);
1349 /* Count references from TTY module */
1354 * Close down a SLLIN channel.
1355 * This means flushing out any pending queues, and then returning. This
1356 * call is serialized against other ldisc functions.
1358 * We also use this method for a hangup event.
1361 static void sllin_close(struct tty_struct *tty)
1363 struct sllin *sl = (struct sllin *) tty->disc_data;
1365 /* First make sure we're connected. */
1366 if (!sl || sl->magic != SLLIN_MAGIC || sl->tty != tty)
1369 kthread_stop(sl->kwthread);
1370 sl->kwthread = NULL;
1372 tty->disc_data = NULL;
1375 /* Flush network side */
1376 unregister_netdev(sl->dev);
1377 /* This will complete via sl_free_netdev */
1380 static int sllin_hangup(struct tty_struct *tty)
1386 /* Perform I/O control on an active SLLIN channel. */
1387 static int sllin_ioctl(struct tty_struct *tty, struct file *file,
1388 unsigned int cmd, unsigned long arg)
1390 struct sllin *sl = (struct sllin *) tty->disc_data;
1393 /* First make sure we're connected. */
1394 if (!sl || sl->magic != SLLIN_MAGIC)
1399 tmp = strlen(sl->dev->name) + 1;
1400 if (copy_to_user((void __user *)arg, sl->dev->name, tmp))
1408 return tty_mode_ioctl(tty, file, cmd, arg);
1412 static struct tty_ldisc_ops sll_ldisc = {
1413 .owner = THIS_MODULE,
1414 .magic = TTY_LDISC_MAGIC,
1417 .close = sllin_close,
1418 .hangup = sllin_hangup,
1419 .ioctl = sllin_ioctl,
1420 .receive_buf = sllin_receive_buf,
1421 .write_wakeup = sllin_write_wakeup,
1424 static int __init sllin_init(void)
1429 maxdev = 4; /* Sanity */
1432 pr_debug("sllin: %d dynamic interface channels.\n", maxdev);
1434 sllin_devs = kzalloc(sizeof(struct net_device *)*maxdev, GFP_KERNEL);
1436 printk(KERN_ERR "sllin: can't allocate sllin device array!\n");
1440 /* Fill in our line protocol discipline, and register it */
1441 status = tty_register_ldisc(N_SLLIN, &sll_ldisc);
1443 printk(KERN_ERR "sllin: can't register line discipline\n");
1447 #ifdef BREAK_BY_BAUD
1448 pr_debug("sllin: Break is generated by baud-rate change.");
1450 pr_debug("sllin: Break is generated manually with tiny sleep.");
1456 static void __exit sllin_exit(void)
1459 struct net_device *dev;
1461 unsigned long timeout = jiffies + HZ;
1464 if (sllin_devs == NULL)
1467 /* First of all: check for active disciplines and hangup them.
1471 msleep_interruptible(100);
1474 for (i = 0; i < maxdev; i++) {
1475 dev = sllin_devs[i];
1478 sl = netdev_priv(dev);
1479 spin_lock_bh(&sl->lock);
1482 tty_hangup(sl->tty);
1484 spin_unlock_bh(&sl->lock);
1486 } while (busy && time_before(jiffies, timeout));
1488 /* FIXME: hangup is async so we should wait when doing this second
1491 for (i = 0; i < maxdev; i++) {
1492 dev = sllin_devs[i];
1495 sllin_devs[i] = NULL;
1497 sl = netdev_priv(dev);
1499 printk(KERN_ERR "%s: tty discipline still running\n",
1501 /* Intentionally leak the control block. */
1502 dev->destructor = NULL;
1505 unregister_netdev(dev);
1511 i = tty_unregister_ldisc(N_SLLIN);
1513 printk(KERN_ERR "sllin: can't unregister ldisc (err %d)\n", i);
1516 module_init(sllin_init);
1517 module_exit(sllin_exit);