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 */
163 struct task_struct *kwthread;
164 wait_queue_head_t kwt_wq; /* Wait queue used by kwthread */
165 struct hrtimer rx_timer; /* RX timeout timer */
166 ktime_t rx_timer_timeout; /* RX timeout timer value */
167 struct sk_buff *tx_req_skb; /* Socket buffer with CAN frame
168 received from network stack*/
170 /* List with configurations for each of 0 to LIN_ID_MAX LIN IDs */
171 struct sllin_conf_entry linfr_cache[LIN_ID_MAX + 1];
172 spinlock_t linfr_lock; /* frame cache and buffers lock */
175 static struct net_device **sllin_devs;
176 static int sllin_configure_frame_cache(struct sllin *sl, struct can_frame *cf);
179 /* Values of two parity bits in LIN Protected
180 Identifier for each particular LIN ID */
181 const unsigned char sllin_id_parity_table[] = {
182 0x80, 0xc0, 0x40, 0x00, 0xc0, 0x80, 0x00, 0x40,
183 0x00, 0x40, 0xc0, 0x80, 0x40, 0x00, 0x80, 0xc0,
184 0x40, 0x00, 0x80, 0xc0, 0x00, 0x40, 0xc0, 0x80,
185 0xc0, 0x80, 0x00, 0x40, 0x80, 0xc0, 0x40, 0x00,
186 0x00, 0x40, 0xc0, 0x80, 0x40, 0x00, 0x80, 0xc0,
187 0x80, 0xc0, 0x40, 0x00, 0xc0, 0x80, 0x00, 0x40,
188 0xc0, 0x80, 0x00, 0x40, 0x80, 0xc0, 0x40, 0x00,
189 0x40, 0x00, 0x80, 0xc0, 0x00, 0x40, 0xc0, 0x80
193 * sltty_change_speed() -- Change baudrate of Serial device belonging
196 * @tty: Pointer to TTY to change speed for.
197 * @speed: Integer value of new speed. It is possible to
198 * assign non-standard values, i.e. those which
199 * are not defined in termbits.h.
201 static int sltty_change_speed(struct tty_struct *tty, unsigned speed)
203 struct ktermios old_termios;
206 mutex_lock(&tty->termios_mutex);
208 old_termios = *(tty->termios);
210 cflag = CS8 | CREAD | CLOCAL | HUPCL;
211 cflag &= ~(CBAUD | CIBAUD);
213 tty->termios->c_cflag = cflag;
214 tty->termios->c_oflag = 0;
215 tty->termios->c_lflag = 0;
217 /* Enable interrupt when UART-Break or Framing error received */
218 tty->termios->c_iflag = BRKINT | INPCK;
220 tty_encode_baud_rate(tty, speed, speed);
222 if (tty->ops->set_termios)
223 tty->ops->set_termios(tty, &old_termios);
225 mutex_unlock(&tty->termios_mutex);
230 /* Send one can_frame to the network layer */
231 static void sllin_send_canfr(struct sllin *sl, canid_t id, char *data, int len)
238 if (cf.can_dlc > 0) {
239 memcpy(&cf.data, data, cf.can_dlc);
242 skb = dev_alloc_skb(sizeof(struct can_frame));
247 skb->protocol = htons(ETH_P_CAN);
248 skb->pkt_type = PACKET_BROADCAST;
249 skb->ip_summed = CHECKSUM_UNNECESSARY;
250 memcpy(skb_put(skb, sizeof(struct can_frame)),
251 &cf, sizeof(struct can_frame));
254 sl->dev->stats.rx_packets++;
255 sl->dev->stats.rx_bytes += cf.can_dlc;
259 * sll_bump() -- Send data of received LIN frame (existing in sl->rx_buff)
264 static void sll_bump(struct sllin *sl)
266 int len = sl->rx_cnt - SLLIN_BUFF_DATA - 1; /* without checksum */
267 len = (len < 0) ? 0 : len;
269 sllin_send_canfr(sl, sl->rx_buff[SLLIN_BUFF_ID] & LIN_ID_MASK,
270 sl->rx_buff + SLLIN_BUFF_DATA, len);
273 static void sll_send_rtr(struct sllin *sl)
275 sllin_send_canfr(sl, (sl->rx_buff[SLLIN_BUFF_ID] & LIN_ID_MASK) |
276 CAN_RTR_FLAG, NULL, 0);
280 * Called by the driver when there's room for more data. If we have
281 * more packets to send, we send them here.
283 static void sllin_write_wakeup(struct tty_struct *tty)
287 struct sllin *sl = (struct sllin *) tty->disc_data;
289 /* First make sure we're connected. */
290 if (!sl || sl->magic != SLLIN_MAGIC || !netif_running(sl->dev))
293 if (sl->lin_state != SLSTATE_BREAK_SENT)
294 remains = sl->tx_lim - sl->tx_cnt;
296 remains = SLLIN_BUFF_BREAK + 1 - sl->tx_cnt;
299 actual = tty->ops->write(tty, sl->tx_buff + sl->tx_cnt,
300 sl->tx_cnt - sl->tx_lim);
301 sl->tx_cnt += actual;
303 if (sl->tx_cnt < sl->tx_lim) {
304 pr_debug("sllin: sllin_write_wakeup sent %d, "
305 "remains %d, waiting\n",
306 sl->tx_cnt, sl->tx_lim - sl->tx_cnt);
311 clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
312 set_bit(SLF_TXEVENT, &sl->flags);
313 wake_up(&sl->kwt_wq);
315 pr_debug("sllin: sllin_write_wakeup sent %d, wakeup\n", sl->tx_cnt);
319 * sll_xmit() -- Send a can_frame to a TTY queue.
321 * @skb: Pointer to Socket buffer to be sent.
322 * @dev: Network device where @skb will be sent.
324 static netdev_tx_t sll_xmit(struct sk_buff *skb, struct net_device *dev)
326 struct sllin *sl = netdev_priv(dev);
327 struct can_frame *cf;
329 if (skb->len != sizeof(struct can_frame))
332 spin_lock(&sl->lock);
333 if (!netif_running(dev)) {
334 printk(KERN_WARNING "%s: xmit: iface is down\n", dev->name);
337 if (sl->tty == NULL) {
341 cf = (struct can_frame *) skb->data;
342 if (cf->can_id & LIN_CTRL_FRAME) {
343 sllin_configure_frame_cache(sl, cf);
344 goto free_out_unlock;
347 netif_stop_queue(sl->dev);
349 sl->tx_req_skb = skb;
350 set_bit(SLF_MSGEVENT, &sl->flags);
351 wake_up(&sl->kwt_wq);
352 spin_unlock(&sl->lock);
357 spin_unlock(&sl->lock);
364 /******************************************
365 * Routines looking at netdevice side.
366 ******************************************/
368 /* Netdevice UP -> DOWN routine */
369 static int sll_close(struct net_device *dev)
371 struct sllin *sl = netdev_priv(dev);
373 spin_lock_bh(&sl->lock);
375 /* TTY discipline is running. */
376 clear_bit(TTY_DO_WRITE_WAKEUP, &sl->tty->flags);
378 netif_stop_queue(dev);
381 spin_unlock_bh(&sl->lock);
386 /* Netdevice DOWN -> UP routine */
387 static int sll_open(struct net_device *dev)
389 struct sllin *sl = netdev_priv(dev);
391 pr_debug("sllin: %s() invoked\n", __FUNCTION__);
396 sl->flags &= (1 << SLF_INUSE);
397 netif_start_queue(dev);
401 /* Hook the destructor so we can free sllin devs at the right point in time */
402 static void sll_free_netdev(struct net_device *dev)
404 int i = dev->base_addr;
406 sllin_devs[i] = NULL;
409 static const struct net_device_ops sll_netdev_ops = {
410 .ndo_open = sll_open,
411 .ndo_stop = sll_close,
412 .ndo_start_xmit = sll_xmit,
415 static void sll_setup(struct net_device *dev)
417 dev->netdev_ops = &sll_netdev_ops;
418 dev->destructor = sll_free_netdev;
420 dev->hard_header_len = 0;
422 dev->tx_queue_len = 10;
424 dev->mtu = sizeof(struct can_frame);
425 dev->type = ARPHRD_CAN;
427 /* New-style flags. */
428 dev->flags = IFF_NOARP;
429 dev->features = NETIF_F_NO_CSUM;
432 /******************************************
433 Routines looking at TTY side.
434 ******************************************/
435 #define SLL_RESPONSE_RECEIVED ((sl->header_received == true) && \
436 ((sl->rx_cnt >= sl->rx_expect) || \
437 ((sl->rx_len_unknown == true) && (count == 0))))
439 #define SLL_HEADER_RECEIVED ((sl->header_received == false) && \
440 (sl->rx_cnt >= (SLLIN_BUFF_ID + 1)))
442 static void sllin_receive_buf(struct tty_struct *tty,
443 const unsigned char *cp, char *fp, int count)
445 struct sllin *sl = (struct sllin *) tty->disc_data;
446 pr_debug("sllin: sllin_receive_buf invoked, count = %u\n", count);
448 if (!sl || sl->magic != SLLIN_MAGIC || !netif_running(sl->dev))
451 /* Read the characters out of the buffer */
454 pr_debug("sllin: sllin_receive_buf char 0x%02x ignored "
455 "due marker 0x%02x, flags 0x%lx\n",
456 *cp, *(fp-1), sl->flags);
458 if (sl->lin_master == true) { /* Report error */
459 set_bit(SLF_ERROR, &sl->flags);
460 wake_up(&sl->kwt_wq);
462 } else { /* Received Break */
464 sl->rx_expect = SLLIN_BUFF_ID + 1;
465 sl->rx_len_unknown = false; /* We do know exact length of the header */
466 sl->header_received = false;
470 #ifndef BREAK_BY_BAUD
471 /* We didn't receive Break character -- fake it! */
472 if ((sl->rx_cnt == SLLIN_BUFF_BREAK) && (*cp == 0x55)) {
473 pr_debug("sllin: LIN_RX[%d]: 0x00\n", sl->rx_cnt);
474 sl->rx_buff[sl->rx_cnt++] = 0x00;
477 if (sl->rx_cnt < SLLIN_BUFF_LEN) {
478 pr_debug("sllin: LIN_RX[%d]: 0x%02x\n", sl->rx_cnt, *cp);
479 sl->rx_buff[sl->rx_cnt++] = *cp++;
482 if (sl->lin_master == true) {
483 if (SLL_RESPONSE_RECEIVED) {
484 set_bit(SLF_RXEVENT, &sl->flags);
485 wake_up(&sl->kwt_wq);
486 pr_debug("sllin: sllin_receive_buf count %d, wakeup\n", sl->rx_cnt);
488 pr_debug("sllin: sllin_receive_buf count %d, waiting\n", sl->rx_cnt);
490 } else { /* LIN slave */
492 struct sllin_conf_entry *sce;
494 pr_debug("sllin: rx_cnt = %u; header_received = %u\n",
495 sl->rx_cnt, sl->header_received);
497 if (SLL_HEADER_RECEIVED) {
500 lin_id = sl->rx_buff[SLLIN_BUFF_ID] & LIN_ID_MASK;
501 sce = &sl->linfr_cache[lin_id];
503 spin_lock_irqsave(&sl->linfr_lock, flags);
504 /* Is the length of data set in frame cache? */
505 if (sce->frame_fl & LIN_LOC_SLAVE_CACHE) {
506 sl->rx_expect += sce->dlc;
507 sl->rx_len_unknown = false;
509 sl->rx_expect += SLLIN_DATA_MAX + 1; /* + checksum */
510 sl->rx_len_unknown = true;
512 spin_unlock_irqrestore(&sl->linfr_lock, flags);
514 sl->header_received = true;
519 if (SLL_RESPONSE_RECEIVED) {
521 pr_debug("sllin: Received LIN header & LIN response. "
522 "rx_cnt = %u, rx_expect = %u\n", sl->rx_cnt,
525 /* Prepare for reception of new header */
527 sl->rx_expect = SLLIN_BUFF_ID + 1;
528 sl->rx_len_unknown = false; /* We do know exact length of the header */
529 sl->header_received = false;
535 /*****************************************
536 * sllin message helper routines
537 *****************************************/
539 * sllin_report_error() -- Report an error by sending CAN frame
540 * with particular error flag set in can_id
543 * @err: Error flag to be sent.
545 void sllin_report_error(struct sllin *sl, int err)
548 case LIN_ERR_CHECKSUM:
549 sl->dev->stats.rx_crc_errors++;
552 case LIN_ERR_RX_TIMEOUT:
553 sl->dev->stats.rx_errors++;
556 case LIN_ERR_FRAMING:
557 sl->dev->stats.rx_frame_errors++;
561 sllin_send_canfr(sl, 0 | CAN_EFF_FLAG |
562 (err & ~LIN_ID_MASK), NULL, 0);
566 * sllin_configure_frame_cache() -- Configure particular entry in linfr_cache
569 * @cf: Pointer to CAN frame sent to this driver
570 * holding configuration information
572 static int sllin_configure_frame_cache(struct sllin *sl, struct can_frame *cf)
575 struct sllin_conf_entry *sce;
577 if (!(cf->can_id & LIN_ID_CONF))
580 sce = &sl->linfr_cache[cf->can_id & LIN_ID_MASK];
581 pr_debug("sllin: Setting frame cache with EFF CAN frame. "
582 "LIN ID = %d\n", cf->can_id & LIN_ID_MASK);
584 spin_lock_irqsave(&sl->linfr_lock, flags);
586 sce->dlc = cf->can_dlc;
587 if (sce->dlc > SLLIN_DATA_MAX)
588 sce->dlc = SLLIN_DATA_MAX;
590 sce->frame_fl = (cf->can_id & ~LIN_ID_MASK) & CAN_EFF_MASK;
591 memcpy(sce->data, cf->data, cf->can_dlc);
593 spin_unlock_irqrestore(&sl->linfr_lock, flags);
599 * sllin_checksum() -- Count checksum for particular data
601 * @data: Pointer to the buffer containing whole LIN
602 * frame (i.e. including break and sync bytes).
603 * @length: Length of the buffer.
604 * @enhanced_fl: Flag determining whether Enhanced or Classic
605 * checksum should be counted.
607 static inline unsigned sllin_checksum(unsigned char *data, int length, int enhanced_fl)
618 for (; i < length; i++) {
627 #define SLLIN_STPMSG_RESPONLY (1) /* Message will be LIN Response only */
628 #define SLLIN_STPMSG_CHCKSUM_CLS (1 << 1)
629 #define SLLIN_STPMSG_CHCKSUM_ENH (1 << 2)
631 int sllin_setup_msg(struct sllin *sl, int mode, int id,
632 unsigned char *data, int len)
634 if (id > LIN_ID_MASK)
637 if (!(mode & SLLIN_STPMSG_RESPONLY)) {
641 sl->rx_lim = SLLIN_BUFF_LEN;
644 sl->tx_buff[SLLIN_BUFF_BREAK] = 0;
645 sl->tx_buff[SLLIN_BUFF_SYNC] = 0x55;
646 sl->tx_buff[SLLIN_BUFF_ID] = id | sllin_id_parity_table[id];
647 sl->tx_lim = SLLIN_BUFF_DATA;
649 if ((data != NULL) && len) {
651 memcpy(sl->tx_buff + SLLIN_BUFF_DATA, data, len);
652 sl->tx_buff[sl->tx_lim++] = sllin_checksum(sl->tx_buff,
653 sl->tx_lim, mode & SLLIN_STPMSG_CHCKSUM_ENH);
656 sl->rx_lim = SLLIN_BUFF_DATA + len + 1;
661 static void sllin_reset_buffs(struct sllin *sl)
665 sl->rx_lim = sl->lin_master ? 0 : SLLIN_BUFF_LEN;
668 sl->id_to_send = false;
669 sl->data_to_send = false;
672 int sllin_send_tx_buff(struct sllin *sl)
674 struct tty_struct *tty = sl->tty;
679 if (sl->lin_state != SLSTATE_BREAK_SENT)
680 remains = sl->tx_lim - sl->tx_cnt;
684 remains = sl->tx_lim - sl->tx_cnt;
687 res = tty->ops->write(tty, sl->tx_buff + sl->tx_cnt, remains);
695 set_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
696 res = tty->ops->write(tty, sl->tx_buff + sl->tx_cnt, remains);
698 clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
706 pr_debug("sllin: sllin_send_tx_buff sent %d, remains %d\n",
707 sl->tx_cnt, remains);
713 int sllin_send_break(struct sllin *sl)
715 struct tty_struct *tty = sl->tty;
716 unsigned long break_baud;
719 break_baud = ((sl->lin_baud * 2) / 3);
720 sltty_change_speed(tty, break_baud);
722 tty->ops->flush_buffer(tty);
723 sl->rx_cnt = SLLIN_BUFF_BREAK;
725 sl->rx_expect = SLLIN_BUFF_BREAK + 1;
726 sl->lin_state = SLSTATE_BREAK_SENT;
728 res = sllin_send_tx_buff(sl);
730 sl->lin_state = SLSTATE_IDLE;
736 #else /* BREAK_BY_BAUD */
738 int sllin_send_break(struct sllin *sl)
740 struct tty_struct *tty = sl->tty;
742 unsigned long break_baud;
743 unsigned long usleep_range_min;
744 unsigned long usleep_range_max;
746 break_baud = ((sl->lin_baud * 2) / 3);
747 sl->rx_cnt = SLLIN_BUFF_BREAK;
748 sl->rx_expect = SLLIN_BUFF_BREAK + 1;
749 sl->lin_state = SLSTATE_BREAK_SENT;
751 /* Do the break ourselves; Inspired by
752 http://lxr.linux.no/#linux+v3.1.2/drivers/tty/tty_io.c#L2452 */
753 retval = tty->ops->break_ctl(tty, -1);
758 usleep_range_min = (1000000l * SLLIN_SAMPLES_PER_CHAR) / break_baud;
759 usleep_range_max = usleep_range_min + 50;
760 usleep_range(usleep_range_min, usleep_range_max);
762 retval = tty->ops->break_ctl(tty, 0);
763 usleep_range_min = (1000000l * 1 /* 1 bit */) / break_baud;
764 usleep_range_max = usleep_range_min + 30;
765 usleep_range(usleep_range_min, usleep_range_max);
767 tty->ops->flush_buffer(tty);
769 sl->tx_cnt = SLLIN_BUFF_SYNC;
771 pr_debug("sllin: Break sent.\n");
772 set_bit(SLF_RXEVENT, &sl->flags);
773 wake_up(&sl->kwt_wq);
777 #endif /* BREAK_BY_BAUD */
780 static enum hrtimer_restart sllin_rx_timeout_handler(struct hrtimer *hrtimer)
782 struct sllin *sl = container_of(hrtimer, struct sllin, rx_timer);
784 sllin_report_error(sl, LIN_ERR_RX_TIMEOUT);
785 set_bit(SLF_TMOUTEVENT, &sl->flags);
786 wake_up(&sl->kwt_wq);
788 return HRTIMER_NORESTART;
792 * sllin_rx_validate() -- Validate received frame, i,e. check checksum
796 static int sllin_rx_validate(struct sllin *sl)
802 unsigned char rec_chcksm = sl->rx_buff[sl->rx_cnt - 1];
803 struct sllin_conf_entry *sce;
805 actual_id = sl->rx_buff[SLLIN_BUFF_ID] & LIN_ID_MASK;
806 sce = &sl->linfr_cache[actual_id];
808 spin_lock_irqsave(&sl->linfr_lock, flags);
810 ext_chcks_fl = sce->frame_fl & LIN_CHECKSUM_EXTENDED;
811 spin_unlock_irqrestore(&sl->linfr_lock, flags);
813 if (sllin_checksum(sl->rx_buff, sl->rx_cnt - 1, ext_chcks_fl) !=
816 /* Type of checksum is configured for particular frame */
820 if (sllin_checksum(sl->rx_buff, sl->rx_cnt - 1,
821 !ext_chcks_fl) != rec_chcksm) {
830 /*****************************************
831 * sllin_kwthread - kernel worker thread
832 *****************************************/
834 int sllin_kwthread(void *ptr)
836 struct sllin *sl = (struct sllin *)ptr;
837 struct tty_struct *tty = sl->tty;
838 struct sched_param schparam = { .sched_priority = 40 };
839 int tx_bytes = 0; /* Used for Network statistics */
842 pr_debug("sllin: sllin_kwthread started.\n");
843 sched_setscheduler(current, SCHED_FIFO, &schparam);
845 clear_bit(SLF_ERROR, &sl->flags);
846 sltty_change_speed(tty, sl->lin_baud);
848 while (!kthread_should_stop()) {
849 struct can_frame *cf;
852 u8 lin_data_buff[SLLIN_DATA_MAX];
855 if ((sl->lin_state == SLSTATE_IDLE) && sl->lin_master &&
857 if (sllin_send_break(sl) < 0) {
858 /* error processing */
862 wait_event_killable(sl->kwt_wq, kthread_should_stop() ||
863 test_bit(SLF_RXEVENT, &sl->flags) ||
864 test_bit(SLF_TXEVENT, &sl->flags) ||
865 test_bit(SLF_TMOUTEVENT, &sl->flags) ||
866 test_bit(SLF_ERROR, &sl->flags) ||
867 (((sl->lin_state == SLSTATE_IDLE) ||
868 (sl->lin_state == SLSTATE_RESPONSE_WAIT))
869 && test_bit(SLF_MSGEVENT, &sl->flags)));
871 if (test_and_clear_bit(SLF_RXEVENT, &sl->flags)) {
872 pr_debug("sllin: sllin_kthread RXEVENT\n");
875 if (test_and_clear_bit(SLF_ERROR, &sl->flags)) {
876 unsigned long usleep_range_min;
877 unsigned long usleep_range_max;
878 hrtimer_cancel(&sl->rx_timer);
879 pr_debug("sllin: sllin_kthread ERROR\n");
881 if (sl->lin_state != SLSTATE_IDLE)
882 sllin_report_error(sl, LIN_ERR_FRAMING);
884 usleep_range_min = (1000000l * SLLIN_SAMPLES_PER_CHAR * 10) /
886 usleep_range_max = usleep_range_min + 50;
887 usleep_range(usleep_range_min, usleep_range_max);
888 sllin_reset_buffs(sl);
889 sl->lin_state = SLSTATE_IDLE;
892 if (test_and_clear_bit(SLF_TXEVENT, &sl->flags)) {
893 pr_debug("sllin: sllin_kthread TXEVENT\n");
896 if (test_and_clear_bit(SLF_TMOUTEVENT, &sl->flags)) {
897 pr_debug("sllin: sllin_kthread TMOUTEVENT\n");
898 sllin_reset_buffs(sl);
900 sl->lin_state = SLSTATE_IDLE;
903 switch (sl->lin_state) {
905 if (!test_bit(SLF_MSGEVENT, &sl->flags))
908 cf = (struct can_frame *)sl->tx_req_skb->data;
910 /* SFF RTR CAN frame -> LIN header */
911 if (cf->can_id & CAN_RTR_FLAG) {
913 struct sllin_conf_entry *sce;
915 pr_debug("sllin: %s: RTR SFF CAN frame, ID = %x\n",
916 __FUNCTION__, cf->can_id & LIN_ID_MASK);
918 sce = &sl->linfr_cache[cf->can_id & LIN_ID_MASK];
919 spin_lock_irqsave(&sl->linfr_lock, flags);
921 /* Is there Slave response in linfr_cache to be sent? */
922 if ((sce->frame_fl & LIN_LOC_SLAVE_CACHE)
925 pr_debug("sllin: Sending LIN response from linfr_cache\n");
927 lin_data = sce->data;
929 if (lin_dlc > SLLIN_DATA_MAX)
930 lin_dlc = SLLIN_DATA_MAX;
931 memcpy(lin_data_buff, lin_data, lin_dlc);
932 lin_data = lin_data_buff;
937 spin_unlock_irqrestore(&sl->linfr_lock, flags);
939 } else { /* SFF NON-RTR CAN frame -> LIN header + LIN response */
940 pr_debug("sllin: %s: NON-RTR SFF CAN frame, ID = %x\n",
941 __FUNCTION__, (int)cf->can_id & LIN_ID_MASK);
944 lin_dlc = cf->can_dlc;
945 if (lin_dlc > SLLIN_DATA_MAX)
946 lin_dlc = SLLIN_DATA_MAX;
950 if (sllin_setup_msg(sl, 0, cf->can_id & LIN_ID_MASK,
951 lin_data, lin_dlc) != -1) {
953 sl->id_to_send = true;
954 sl->data_to_send = (lin_data != NULL) ? true : false;
955 sl->resp_len_known = (lin_dlc > 0) ? true : false;
956 sl->dev->stats.tx_packets++;
957 sl->dev->stats.tx_bytes += tx_bytes;
960 clear_bit(SLF_MSGEVENT, &sl->flags);
961 kfree_skb(sl->tx_req_skb);
962 netif_wake_queue(sl->dev);
963 hrtimer_start(&sl->rx_timer,
964 ktime_add(ktime_get(), sl->rx_timer_timeout),
968 case SLSTATE_BREAK_SENT:
970 if (sl->rx_cnt <= SLLIN_BUFF_BREAK)
973 res = sltty_change_speed(tty, sl->lin_baud);
976 sl->lin_state = SLSTATE_ID_SENT;
977 sllin_send_tx_buff(sl);
980 case SLSTATE_ID_SENT:
981 hrtimer_cancel(&sl->rx_timer);
982 sl->id_to_send = false;
983 if (sl->data_to_send) {
984 sllin_send_tx_buff(sl);
985 sl->lin_state = SLSTATE_RESPONSE_SENT;
986 sl->rx_expect = sl->tx_lim;
987 goto slstate_response_sent;
989 if (sl->resp_len_known) {
990 sl->rx_expect = sl->rx_lim;
992 sl->rx_expect = SLLIN_BUFF_DATA + 2;
994 sl->lin_state = SLSTATE_RESPONSE_WAIT;
995 /* If we don't receive anything, timer will "unblock" us */
996 hrtimer_start(&sl->rx_timer,
997 ktime_add(ktime_get(), sl->rx_timer_timeout),
999 goto slstate_response_wait;
1003 case SLSTATE_RESPONSE_WAIT:
1004 slstate_response_wait:
1005 if (test_bit(SLF_MSGEVENT, &sl->flags)) {
1006 unsigned char *lin_buff;
1007 cf = (struct can_frame *)sl->tx_req_skb->data;
1009 lin_buff = (sl->lin_master) ? sl->tx_buff : sl->rx_buff;
1010 if (cf->can_id == (lin_buff[SLLIN_BUFF_ID] & LIN_ID_MASK)) {
1011 hrtimer_cancel(&sl->rx_timer);
1012 pr_debug("sllin: received LIN response in a CAN frame.\n");
1013 if (sllin_setup_msg(sl, SLLIN_STPMSG_RESPONLY,
1014 cf->can_id & LIN_ID_MASK,
1015 cf->data, cf->can_dlc) != -1) {
1017 sl->rx_expect = sl->tx_lim;
1018 sl->data_to_send = true;
1019 sl->dev->stats.tx_packets++;
1020 sl->dev->stats.tx_bytes += tx_bytes;
1022 if (!sl->lin_master) {
1023 sl->tx_cnt = SLLIN_BUFF_DATA;
1026 sllin_send_tx_buff(sl);
1027 clear_bit(SLF_MSGEVENT, &sl->flags);
1028 kfree_skb(sl->tx_req_skb);
1029 netif_wake_queue(sl->dev);
1031 sl->lin_state = SLSTATE_RESPONSE_SENT;
1032 goto slstate_response_sent;
1035 sl->lin_state = SLSTATE_RESPONSE_WAIT_BUS;
1039 /* Be aware, no BREAK here */
1040 case SLSTATE_RESPONSE_WAIT_BUS:
1041 if (sl->rx_cnt < sl->rx_expect)
1044 hrtimer_cancel(&sl->rx_timer);
1045 pr_debug("sllin: response received ID %d len %d\n",
1046 sl->rx_buff[SLLIN_BUFF_ID], sl->rx_cnt - SLLIN_BUFF_DATA - 1);
1048 if (sllin_rx_validate(sl) == -1) {
1049 pr_debug("sllin: RX validation failed.\n");
1050 sllin_report_error(sl, LIN_ERR_CHECKSUM);
1052 /* Send CAN non-RTR frame with data */
1053 pr_debug("sllin: sending NON-RTR CAN"
1054 "frame with LIN payload.");
1055 sll_bump(sl); /* send packet to the network layer */
1058 sl->id_to_send = false;
1059 sl->lin_state = SLSTATE_IDLE;
1062 case SLSTATE_RESPONSE_SENT:
1063 slstate_response_sent:
1064 if (sl->rx_cnt < sl->tx_lim)
1067 hrtimer_cancel(&sl->rx_timer);
1068 sll_bump(sl); /* send packet to the network layer */
1069 pr_debug("sllin: response sent ID %d len %d\n",
1070 sl->rx_buff[SLLIN_BUFF_ID], sl->rx_cnt - SLLIN_BUFF_DATA - 1);
1072 sl->id_to_send = false;
1073 sl->lin_state = SLSTATE_IDLE;
1078 hrtimer_cancel(&sl->rx_timer);
1079 pr_debug("sllin: sllin_kwthread stopped.\n");
1085 /************************************
1086 * sllin_open helper routines.
1087 ************************************/
1089 /* Collect hanged up channels */
1090 static void sll_sync(void)
1093 struct net_device *dev;
1096 for (i = 0; i < maxdev; i++) {
1097 dev = sllin_devs[i];
1101 sl = netdev_priv(dev);
1104 if (dev->flags & IFF_UP)
1109 /* Find a free SLLIN channel, and link in this `tty' line. */
1110 static struct sllin *sll_alloc(dev_t line)
1113 struct net_device *dev = NULL;
1116 if (sllin_devs == NULL)
1117 return NULL; /* Master array missing ! */
1119 for (i = 0; i < maxdev; i++) {
1120 dev = sllin_devs[i];
1126 /* Sorry, too many, all slots in use */
1131 sl = netdev_priv(dev);
1132 if (test_bit(SLF_INUSE, &sl->flags)) {
1133 unregister_netdevice(dev);
1135 sllin_devs[i] = NULL;
1140 char name[IFNAMSIZ];
1141 sprintf(name, "sllin%d", i);
1143 dev = alloc_netdev(sizeof(*sl), name, sll_setup);
1149 sl = netdev_priv(dev);
1150 /* Initialize channel control data */
1151 sl->magic = SLLIN_MAGIC;
1153 spin_lock_init(&sl->lock);
1154 spin_lock_init(&sl->linfr_lock);
1155 sllin_devs[i] = dev;
1161 * Open the high-level part of the SLLIN channel.
1162 * This function is called by the TTY module when the
1163 * SLLIN line discipline is called for. Because we are
1164 * sure the tty line exists, we only have to link it to
1165 * a free SLLIN channel...
1167 * Called in process context serialized from other ldisc calls.
1170 static int sllin_open(struct tty_struct *tty)
1174 pr_debug("sllin: %s() invoked\n", __FUNCTION__);
1176 if (!capable(CAP_NET_ADMIN))
1179 if (tty->ops->write == NULL)
1182 /* RTnetlink lock is misused here to serialize concurrent
1183 opens of sllin channels. There are better ways, but it is
1188 /* Collect hanged up channels. */
1191 sl = tty->disc_data;
1194 /* First make sure we're not already connected. */
1195 if (sl && sl->magic == SLLIN_MAGIC)
1198 /* OK. Find a free SLLIN channel to use. */
1200 sl = sll_alloc(tty_devnum(tty));
1205 tty->disc_data = sl;
1206 sl->line = tty_devnum(tty);
1208 if (!test_bit(SLF_INUSE, &sl->flags)) {
1209 /* Perform the low-level SLLIN initialization. */
1210 sl->lin_master = master;
1213 pr_debug("sllin: Configured as MASTER\n");
1215 pr_debug("sllin: Configured as SLAVE\n");
1218 sllin_reset_buffs(sl);
1220 sl->lin_baud = (baudrate == 0) ? LIN_DEFAULT_BAUDRATE : baudrate;
1221 pr_debug("sllin: Baudrate set to %u\n", sl->lin_baud);
1223 sl->lin_state = SLSTATE_IDLE;
1225 hrtimer_init(&sl->rx_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
1226 sl->rx_timer.function = sllin_rx_timeout_handler;
1227 /* timeval_to_ktime(msg_head->ival1); */
1228 sl->rx_timer_timeout = ns_to_ktime(
1229 (1000000000l / sl->lin_baud) *
1230 SLLIN_SAMPLES_PER_CHAR * SLLIN_CHARS_TO_TIMEOUT);
1232 set_bit(SLF_INUSE, &sl->flags);
1234 init_waitqueue_head(&sl->kwt_wq);
1235 sl->kwthread = kthread_run(sllin_kwthread, sl, "sllin");
1236 if (sl->kwthread == NULL)
1239 err = register_netdevice(sl->dev);
1241 goto err_free_chan_and_thread;
1244 /* Done. We have linked the TTY line to a channel. */
1246 tty->receive_room = SLLIN_BUFF_LEN * 40; /* We don't flow control */
1248 /* TTY layer expects 0 on success */
1251 err_free_chan_and_thread:
1252 kthread_stop(sl->kwthread);
1253 sl->kwthread = NULL;
1257 tty->disc_data = NULL;
1258 clear_bit(SLF_INUSE, &sl->flags);
1263 /* Count references from TTY module */
1268 * Close down a SLLIN channel.
1269 * This means flushing out any pending queues, and then returning. This
1270 * call is serialized against other ldisc functions.
1272 * We also use this method for a hangup event.
1275 static void sllin_close(struct tty_struct *tty)
1277 struct sllin *sl = (struct sllin *) tty->disc_data;
1279 /* First make sure we're connected. */
1280 if (!sl || sl->magic != SLLIN_MAGIC || sl->tty != tty)
1283 kthread_stop(sl->kwthread);
1284 sl->kwthread = NULL;
1286 tty->disc_data = NULL;
1289 /* Flush network side */
1290 unregister_netdev(sl->dev);
1291 /* This will complete via sl_free_netdev */
1294 static int sllin_hangup(struct tty_struct *tty)
1300 /* Perform I/O control on an active SLLIN channel. */
1301 static int sllin_ioctl(struct tty_struct *tty, struct file *file,
1302 unsigned int cmd, unsigned long arg)
1304 struct sllin *sl = (struct sllin *) tty->disc_data;
1307 /* First make sure we're connected. */
1308 if (!sl || sl->magic != SLLIN_MAGIC)
1313 tmp = strlen(sl->dev->name) + 1;
1314 if (copy_to_user((void __user *)arg, sl->dev->name, tmp))
1322 return tty_mode_ioctl(tty, file, cmd, arg);
1326 static struct tty_ldisc_ops sll_ldisc = {
1327 .owner = THIS_MODULE,
1328 .magic = TTY_LDISC_MAGIC,
1331 .close = sllin_close,
1332 .hangup = sllin_hangup,
1333 .ioctl = sllin_ioctl,
1334 .receive_buf = sllin_receive_buf,
1335 .write_wakeup = sllin_write_wakeup,
1338 static int __init sllin_init(void)
1343 maxdev = 4; /* Sanity */
1346 pr_debug("sllin: %d dynamic interface channels.\n", maxdev);
1348 sllin_devs = kzalloc(sizeof(struct net_device *)*maxdev, GFP_KERNEL);
1350 printk(KERN_ERR "sllin: can't allocate sllin device array!\n");
1354 /* Fill in our line protocol discipline, and register it */
1355 status = tty_register_ldisc(N_SLLIN, &sll_ldisc);
1357 printk(KERN_ERR "sllin: can't register line discipline\n");
1361 #ifdef BREAK_BY_BAUD
1362 pr_debug("sllin: Break is generated by baud-rate change.");
1364 pr_debug("sllin: Break is generated manually with tiny sleep.");
1370 static void __exit sllin_exit(void)
1373 struct net_device *dev;
1375 unsigned long timeout = jiffies + HZ;
1378 if (sllin_devs == NULL)
1381 /* First of all: check for active disciplines and hangup them.
1385 msleep_interruptible(100);
1388 for (i = 0; i < maxdev; i++) {
1389 dev = sllin_devs[i];
1392 sl = netdev_priv(dev);
1393 spin_lock_bh(&sl->lock);
1396 tty_hangup(sl->tty);
1398 spin_unlock_bh(&sl->lock);
1400 } while (busy && time_before(jiffies, timeout));
1402 /* FIXME: hangup is async so we should wait when doing this second
1405 for (i = 0; i < maxdev; i++) {
1406 dev = sllin_devs[i];
1409 sllin_devs[i] = NULL;
1411 sl = netdev_priv(dev);
1413 printk(KERN_ERR "%s: tty discipline still running\n",
1415 /* Intentionally leak the control block. */
1416 dev->destructor = NULL;
1419 unregister_netdev(dev);
1425 i = tty_unregister_ldisc(N_SLLIN);
1427 printk(KERN_ERR "sllin: can't unregister ldisc (err %d)\n", i);
1430 module_init(sllin_init);
1431 module_exit(sllin_exit);