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 <linux/uaccess.h>
50 #include <linux/bitops.h>
51 #include <linux/string.h>
52 #include <linux/tty.h>
53 #include <linux/errno.h>
54 #include <linux/netdevice.h>
55 #include <linux/skbuff.h>
56 #include <linux/rtnetlink.h>
57 #include <linux/if_arp.h>
58 #include <linux/if_ether.h>
59 #include <linux/sched.h>
60 #include <linux/delay.h>
61 #include <linux/init.h>
62 #include <linux/can.h>
63 #include <linux/kthread.h>
64 #include <linux/hrtimer.h>
65 #include "linux/lin_bus.h"
67 /* Should be in include/linux/tty.h */
69 /* -------------------------------- */
71 static __initdata const char banner[] =
72 KERN_INFO "sllin: serial line LIN interface driver\n";
74 MODULE_ALIAS_LDISC(N_SLLIN);
75 MODULE_DESCRIPTION("serial line LIN interface");
76 MODULE_LICENSE("GPL");
77 MODULE_AUTHOR("Pavel Pisa <pisa@cmp.felk.cvut.cz>");
79 #define SLLIN_MAGIC 0x53CA
80 /* #define BREAK_BY_BAUD */
82 static bool master = true;
83 static int baudrate; /* Use LIN_DEFAULT_BAUDRATE when not set */
85 module_param(master, bool, 0);
86 MODULE_PARM_DESC(master, "LIN interface is Master device");
87 module_param(baudrate, int, 0);
88 MODULE_PARM_DESC(baudrate, "Baudrate of LIN interface");
90 static int maxdev = 10; /* MAX number of SLLIN channels;
91 This can be overridden with
92 insmod sllin.ko maxdev=nnn */
93 module_param(maxdev, int, 0);
94 MODULE_PARM_DESC(maxdev, "Maximum number of sllin interfaces");
96 /* maximum buffer len to store whole LIN message*/
97 #define SLLIN_DATA_MAX 8
98 #define SLLIN_BUFF_LEN (1 /*break*/ + 1 /*sync*/ + 1 /*ID*/ + \
99 SLLIN_DATA_MAX + 1 /*checksum*/)
100 #define SLLIN_BUFF_BREAK 0
101 #define SLLIN_BUFF_SYNC 1
102 #define SLLIN_BUFF_ID 2
103 #define SLLIN_BUFF_DATA 3
105 #define SLLIN_SAMPLES_PER_CHAR 10
106 #define SLLIN_CHARS_TO_TIMEOUT 24
112 SLSTATE_RESPONSE_WAIT, /* Wait for response */
113 SLSTATE_RESPONSE_WAIT_BUS, /* Wait for response from LIN bus
114 only (CAN frames from network stack
115 are not processed in this moment) */
116 SLSTATE_RESPONSE_SENT,
119 struct sllin_conf_entry {
120 int dlc; /* Length of data in LIN frame */
121 canid_t frame_fl; /* LIN frame flags. Passed from userspace as
123 u8 data[8]; /* LIN frame data payload */
129 /* Various fields. */
130 struct tty_struct *tty; /* ptr to TTY structure */
131 struct net_device *dev; /* easy for intr handling */
134 /* LIN message buffer and actual processed data counts */
135 unsigned char rx_buff[SLLIN_BUFF_LEN]; /* LIN Rx buffer */
136 unsigned char tx_buff[SLLIN_BUFF_LEN]; /* LIN Tx buffer */
137 int rx_expect; /* expected number of Rx chars */
138 int rx_lim; /* maximum Rx chars for current frame */
139 int rx_cnt; /* message buffer Rx fill level */
140 int tx_lim; /* actual limit of bytes to Tx */
141 int tx_cnt; /* number of already Tx bytes */
142 char lin_master; /* node is a master node */
143 int lin_baud; /* LIN baudrate */
144 int lin_state; /* state */
145 char id_to_send; /* there is ID to be sent */
146 char data_to_send; /* there are data to be sent */
147 char resp_len_known; /* Length of the response is known */
148 char header_received;/* In Slave mode, set when header was already
150 char rx_len_unknown; /* We are not sure how much data will be sent to us --
151 we just guess the length */
153 unsigned long flags; /* Flag values/ mode etc */
154 #define SLF_INUSE 0 /* Channel in use */
155 #define SLF_ERROR 1 /* Parity, etc. error */
156 #define SLF_RXEVENT 2 /* Rx wake event */
157 #define SLF_TXEVENT 3 /* Tx wake event */
158 #define SLF_MSGEVENT 4 /* CAN message to sent */
159 #define SLF_TMOUTEVENT 5 /* Timeout on received data */
160 #define SLF_TXBUFF_RQ 6 /* Req. to send buffer to UART*/
161 #define SLF_TXBUFF_INPR 7 /* Above request in progress */
164 struct task_struct *kwthread;
165 wait_queue_head_t kwt_wq; /* Wait queue used by kwthread */
166 struct hrtimer rx_timer; /* RX timeout timer */
167 ktime_t rx_timer_timeout; /* RX timeout timer value */
168 struct sk_buff *tx_req_skb; /* Socket buffer with CAN frame
169 received from network stack*/
171 /* List with configurations for each of 0 to LIN_ID_MAX LIN IDs */
172 struct sllin_conf_entry linfr_cache[LIN_ID_MAX + 1];
173 spinlock_t linfr_lock; /* frame cache and buffers lock */
176 static struct net_device **sllin_devs;
177 static int sllin_configure_frame_cache(struct sllin *sl, struct can_frame *cf);
178 static void sllin_slave_receive_buf(struct tty_struct *tty,
179 const unsigned char *cp, char *fp, int count);
180 static void sllin_master_receive_buf(struct tty_struct *tty,
181 const unsigned char *cp, char *fp, int count);
184 /* Values of two parity bits in LIN Protected
185 Identifier for each particular LIN ID */
186 const unsigned char sllin_id_parity_table[] = {
187 0x80, 0xc0, 0x40, 0x00, 0xc0, 0x80, 0x00, 0x40,
188 0x00, 0x40, 0xc0, 0x80, 0x40, 0x00, 0x80, 0xc0,
189 0x40, 0x00, 0x80, 0xc0, 0x00, 0x40, 0xc0, 0x80,
190 0xc0, 0x80, 0x00, 0x40, 0x80, 0xc0, 0x40, 0x00,
191 0x00, 0x40, 0xc0, 0x80, 0x40, 0x00, 0x80, 0xc0,
192 0x80, 0xc0, 0x40, 0x00, 0xc0, 0x80, 0x00, 0x40,
193 0xc0, 0x80, 0x00, 0x40, 0x80, 0xc0, 0x40, 0x00,
194 0x40, 0x00, 0x80, 0xc0, 0x00, 0x40, 0xc0, 0x80
198 * sltty_change_speed() -- Change baudrate of Serial device belonging
201 * @tty: Pointer to TTY to change speed for.
202 * @speed: Integer value of new speed. It is possible to
203 * assign non-standard values, i.e. those which
204 * are not defined in termbits.h.
206 static int sltty_change_speed(struct tty_struct *tty, unsigned speed)
208 struct ktermios old_termios;
211 mutex_lock(&tty->termios_mutex);
213 old_termios = *(tty->termios);
215 cflag = CS8 | CREAD | CLOCAL | HUPCL;
216 cflag &= ~(CBAUD | CIBAUD);
218 tty->termios->c_cflag = cflag;
219 tty->termios->c_oflag = 0;
220 tty->termios->c_lflag = 0;
222 /* Enable interrupt when UART-Break or Framing error received */
223 tty->termios->c_iflag = BRKINT | INPCK;
225 tty_encode_baud_rate(tty, speed, speed);
227 if (tty->ops->set_termios)
228 tty->ops->set_termios(tty, &old_termios);
230 mutex_unlock(&tty->termios_mutex);
235 /* Send one can_frame to the network layer */
236 static void sllin_send_canfr(struct sllin *sl, canid_t id, char *data, int len)
244 memcpy(&cf.data, data, cf.can_dlc);
246 skb = dev_alloc_skb(sizeof(struct can_frame));
251 skb->protocol = htons(ETH_P_CAN);
252 skb->pkt_type = PACKET_BROADCAST;
253 skb->ip_summed = CHECKSUM_UNNECESSARY;
254 memcpy(skb_put(skb, sizeof(struct can_frame)),
255 &cf, sizeof(struct can_frame));
258 sl->dev->stats.rx_packets++;
259 sl->dev->stats.rx_bytes += cf.can_dlc;
263 * sll_bump() -- Send data of received LIN frame (existing in sl->rx_buff)
268 static void sll_bump(struct sllin *sl)
270 int len = sl->rx_cnt - SLLIN_BUFF_DATA - 1; /* without checksum */
271 len = (len < 0) ? 0 : len;
273 sllin_send_canfr(sl, sl->rx_buff[SLLIN_BUFF_ID] & LIN_ID_MASK,
274 sl->rx_buff + SLLIN_BUFF_DATA, len);
277 static void sll_send_rtr(struct sllin *sl)
279 sllin_send_canfr(sl, (sl->rx_buff[SLLIN_BUFF_ID] & LIN_ID_MASK) |
280 CAN_RTR_FLAG, NULL, 0);
284 * Called by the driver when there's room for more data. If we have
285 * more packets to send, we send them here.
287 static void sllin_write_wakeup(struct tty_struct *tty)
291 struct sllin *sl = (struct sllin *) tty->disc_data;
293 /* First make sure we're connected. */
294 if (!sl || sl->magic != SLLIN_MAGIC || !netif_running(sl->dev))
297 set_bit(SLF_TXBUFF_RQ, &sl->flags);
299 if (unlikely(test_and_set_bit(SLF_TXBUFF_INPR, &sl->flags)))
300 return; /* ongoing concurrent processing */
302 clear_bit(SLF_TXBUFF_RQ, &sl->flags);
303 smp_mb__after_clear_bit();
305 if (sl->lin_state != SLSTATE_BREAK_SENT)
306 remains = sl->tx_lim - sl->tx_cnt;
308 remains = SLLIN_BUFF_BREAK + 1 - sl->tx_cnt;
311 actual = tty->ops->write(tty, sl->tx_buff + sl->tx_cnt,
312 sl->tx_cnt - sl->tx_lim);
313 sl->tx_cnt += actual;
316 clear_bit(SLF_TXBUFF_INPR, &sl->flags);
317 smp_mb__after_clear_bit();
319 } while (unlikely(test_bit(SLF_TXBUFF_RQ, &sl->flags)));
321 if ((remains > 0) && (actual >= 0)) {
322 netdev_dbg(sl->dev, "sllin_write_wakeup sent %d, remains %d, waiting\n",
323 sl->tx_cnt, sl->tx_lim - sl->tx_cnt);
327 clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
328 set_bit(SLF_TXEVENT, &sl->flags);
329 wake_up(&sl->kwt_wq);
331 netdev_dbg(sl->dev, "sllin_write_wakeup sent %d, wakeup\n", sl->tx_cnt);
335 * sll_xmit() -- Send a can_frame to a TTY queue.
337 * @skb: Pointer to Socket buffer to be sent.
338 * @dev: Network device where @skb will be sent.
340 static netdev_tx_t sll_xmit(struct sk_buff *skb, struct net_device *dev)
342 struct sllin *sl = netdev_priv(dev);
343 struct can_frame *cf;
345 if (skb->len != sizeof(struct can_frame))
348 spin_lock(&sl->lock);
349 if (!netif_running(dev)) {
350 netdev_warn(sl->dev, "xmit: iface is down\n");
353 if (sl->tty == NULL) {
354 netdev_warn(sl->dev, "xmit: no tty device connected\n");
358 cf = (struct can_frame *) skb->data;
359 if (cf->can_id & LIN_CTRL_FRAME) {
360 sllin_configure_frame_cache(sl, cf);
361 goto free_out_unlock;
364 netif_stop_queue(sl->dev);
366 sl->tx_req_skb = skb;
367 set_bit(SLF_MSGEVENT, &sl->flags);
368 wake_up(&sl->kwt_wq);
369 spin_unlock(&sl->lock);
374 spin_unlock(&sl->lock);
381 /******************************************
382 * Routines looking at netdevice side.
383 ******************************************/
385 /* Netdevice UP -> DOWN routine */
386 static int sll_close(struct net_device *dev)
388 struct sllin *sl = netdev_priv(dev);
390 spin_lock_bh(&sl->lock);
392 /* TTY discipline is running. */
393 clear_bit(TTY_DO_WRITE_WAKEUP, &sl->tty->flags);
395 netif_stop_queue(dev);
398 spin_unlock_bh(&sl->lock);
403 /* Netdevice DOWN -> UP routine */
404 static int sll_open(struct net_device *dev)
406 struct sllin *sl = netdev_priv(dev);
408 netdev_dbg(sl->dev, "%s() invoked\n", __func__);
413 sl->flags &= (1 << SLF_INUSE);
414 netif_start_queue(dev);
418 /* Hook the destructor so we can free sllin devs at the right point in time */
419 static void sll_free_netdev(struct net_device *dev)
421 int i = dev->base_addr;
423 sllin_devs[i] = NULL;
426 static const struct net_device_ops sll_netdev_ops = {
427 .ndo_open = sll_open,
428 .ndo_stop = sll_close,
429 .ndo_start_xmit = sll_xmit,
432 static void sll_setup(struct net_device *dev)
434 dev->netdev_ops = &sll_netdev_ops;
435 dev->destructor = sll_free_netdev;
437 dev->hard_header_len = 0;
439 dev->tx_queue_len = 10;
441 dev->mtu = sizeof(struct can_frame);
442 dev->type = ARPHRD_CAN;
444 /* New-style flags. */
445 dev->flags = IFF_NOARP;
446 dev->features = NETIF_F_HW_CSUM; /* NETIF_F_NO_CSUM;*/
449 /******************************************
450 Routines looking at TTY side.
451 ******************************************/
452 static void sllin_master_receive_buf(struct tty_struct *tty,
453 const unsigned char *cp, char *fp, int count)
455 struct sllin *sl = (struct sllin *) tty->disc_data;
457 /* Read the characters out of the buffer */
460 netdev_dbg(sl->dev, "sllin_master_receive_buf char 0x%02x ignored "
461 "due marker 0x%02x, flags 0x%lx\n",
462 *cp, *(fp-1), sl->flags);
464 /* i.e. Real error -- not Break */
465 if (sl->rx_cnt > SLLIN_BUFF_BREAK) {
466 set_bit(SLF_ERROR, &sl->flags);
467 wake_up(&sl->kwt_wq);
472 #ifndef BREAK_BY_BAUD
473 /* We didn't receive Break character -- fake it! */
474 if ((sl->rx_cnt == SLLIN_BUFF_BREAK) && (*cp == 0x55)) {
475 netdev_dbg(sl->dev, "LIN_RX[%d]: 0x00\n", sl->rx_cnt);
476 sl->rx_buff[sl->rx_cnt++] = 0x00;
478 #endif /* BREAK_BY_BAUD */
480 if (sl->rx_cnt < SLLIN_BUFF_LEN) {
481 netdev_dbg(sl->dev, "LIN_RX[%d]: 0x%02x\n", sl->rx_cnt, *cp);
482 sl->rx_buff[sl->rx_cnt++] = *cp++;
487 if (sl->rx_cnt >= sl->rx_expect) {
488 set_bit(SLF_RXEVENT, &sl->flags);
489 wake_up(&sl->kwt_wq);
490 netdev_dbg(sl->dev, "sllin_receive_buf count %d, wakeup\n", sl->rx_cnt);
492 netdev_dbg(sl->dev, "sllin_receive_buf count %d, waiting\n", sl->rx_cnt);
497 /*****************************************
498 * sllin message helper routines
499 *****************************************/
501 * sllin_report_error() -- Report an error by sending CAN frame
502 * with particular error flag set in can_id
505 * @err: Error flag to be sent.
507 static void sllin_report_error(struct sllin *sl, int err)
510 case LIN_ERR_CHECKSUM:
511 sl->dev->stats.rx_crc_errors++;
514 case LIN_ERR_RX_TIMEOUT:
515 sl->dev->stats.rx_errors++;
518 case LIN_ERR_FRAMING:
519 sl->dev->stats.rx_frame_errors++;
523 sllin_send_canfr(sl, 0 | CAN_EFF_FLAG |
524 (err & ~LIN_ID_MASK), NULL, 0);
528 * sllin_configure_frame_cache() -- Configure particular entry in linfr_cache
531 * @cf: Pointer to CAN frame sent to this driver
532 * holding configuration information
534 static int sllin_configure_frame_cache(struct sllin *sl, struct can_frame *cf)
537 struct sllin_conf_entry *sce;
539 if (!(cf->can_id & LIN_CTRL_FRAME))
542 sce = &sl->linfr_cache[cf->can_id & LIN_ID_MASK];
543 netdev_dbg(sl->dev, "Setting frame cache with EFF CAN frame. LIN ID = %d\n",
544 cf->can_id & LIN_ID_MASK);
546 spin_lock_irqsave(&sl->linfr_lock, flags);
548 sce->dlc = cf->can_dlc;
549 if (sce->dlc > SLLIN_DATA_MAX)
550 sce->dlc = SLLIN_DATA_MAX;
552 sce->frame_fl = (cf->can_id & ~LIN_ID_MASK) & CAN_EFF_MASK;
553 memcpy(sce->data, cf->data, cf->can_dlc);
555 spin_unlock_irqrestore(&sl->linfr_lock, flags);
561 * sllin_checksum() -- Count checksum for particular data
563 * @data: Pointer to the buffer containing whole LIN
564 * frame (i.e. including break and sync bytes).
565 * @length: Length of the buffer.
566 * @enhanced_fl: Flag determining whether Enhanced or Classic
567 * checksum should be counted.
569 static inline unsigned sllin_checksum(unsigned char *data, int length, int enhanced_fl)
579 for (; i < length; i++) {
588 #define SLLIN_STPMSG_RESPONLY (1) /* Message will be LIN Response only */
589 #define SLLIN_STPMSG_CHCKSUM_CLS (1 << 1)
590 #define SLLIN_STPMSG_CHCKSUM_ENH (1 << 2)
592 static int sllin_setup_msg(struct sllin *sl, int mode, int id,
593 unsigned char *data, int len)
595 if (id > LIN_ID_MASK)
598 if (!(mode & SLLIN_STPMSG_RESPONLY)) {
602 sl->rx_lim = SLLIN_BUFF_LEN;
605 sl->tx_buff[SLLIN_BUFF_BREAK] = 0;
606 sl->tx_buff[SLLIN_BUFF_SYNC] = 0x55;
607 sl->tx_buff[SLLIN_BUFF_ID] = id | sllin_id_parity_table[id];
608 sl->tx_lim = SLLIN_BUFF_DATA;
610 if ((data != NULL) && len) {
612 memcpy(sl->tx_buff + SLLIN_BUFF_DATA, data, len);
613 sl->tx_buff[sl->tx_lim] = sllin_checksum(sl->tx_buff,
614 sl->tx_lim, mode & SLLIN_STPMSG_CHCKSUM_ENH);
618 sl->rx_lim = SLLIN_BUFF_DATA + len + 1;
623 static void sllin_reset_buffs(struct sllin *sl)
627 sl->rx_lim = sl->lin_master ? 0 : SLLIN_BUFF_LEN;
630 sl->id_to_send = false;
631 sl->data_to_send = false;
635 * sllin_rx_validate() -- Validate received frame, i,e. check checksum
639 static int sllin_rx_validate(struct sllin *sl)
645 unsigned char rec_chcksm = sl->rx_buff[sl->rx_cnt - 1];
646 struct sllin_conf_entry *sce;
648 actual_id = sl->rx_buff[SLLIN_BUFF_ID] & LIN_ID_MASK;
649 sce = &sl->linfr_cache[actual_id];
651 spin_lock_irqsave(&sl->linfr_lock, flags);
653 ext_chcks_fl = sce->frame_fl & LIN_CHECKSUM_EXTENDED;
654 spin_unlock_irqrestore(&sl->linfr_lock, flags);
656 if (sllin_checksum(sl->rx_buff, sl->rx_cnt - 1, ext_chcks_fl) !=
659 /* Type of checksum is configured for particular frame */
663 if (sllin_checksum(sl->rx_buff, sl->rx_cnt - 1,
664 !ext_chcks_fl) != rec_chcksm) {
673 static void sllin_slave_finish_rx_msg(struct sllin *sl)
675 if (sllin_rx_validate(sl) == -1) {
676 netdev_dbg(sl->dev, "sllin: RX validation failed.\n");
677 sllin_report_error(sl, LIN_ERR_CHECKSUM);
679 /* Send CAN non-RTR frame with data */
680 netdev_dbg(sl->dev, "sllin: sending NON-RTR CAN frame with LIN payload.");
681 sll_bump(sl); /* send packet to the network layer */
683 /* Prepare for reception of new header */
685 sl->rx_expect = SLLIN_BUFF_ID + 1;
686 sl->rx_len_unknown = false; /* We do know exact length of the header */
687 sl->header_received = false;
690 static void sllin_slave_receive_buf(struct tty_struct *tty,
691 const unsigned char *cp, char *fp, int count)
693 struct sllin *sl = (struct sllin *) tty->disc_data;
695 struct sllin_conf_entry *sce;
698 /* Read the characters out of the buffer */
702 * If we don't know the length of the current message
703 * we received the break of the next message.
704 * Evaluate the previous one before continuing
706 if (sl->rx_len_unknown == true)
708 hrtimer_cancel(&sl->rx_timer);
709 sllin_slave_finish_rx_msg(sl);
711 set_bit(SLF_RXEVENT, &sl->flags);
712 wake_up(&sl->kwt_wq);
715 netdev_dbg(sl->dev, "sllin_slave_receive_buf char 0x%02x ignored "
716 "due marker 0x%02x, flags 0x%lx\n",
717 *cp, *(fp-1), sl->flags);
721 sl->rx_expect = SLLIN_BUFF_ID + 1;
722 sl->rx_len_unknown = false; /* We do know exact length of the header */
723 sl->header_received = false;
726 if (sl->rx_cnt < SLLIN_BUFF_LEN) {
727 netdev_dbg(sl->dev, "LIN_RX[%d]: 0x%02x\n", sl->rx_cnt, *cp);
729 /* We did not receive break (0x00) character */
730 if ((sl->rx_cnt == SLLIN_BUFF_BREAK) && (*cp == 0x55)) {
731 sl->rx_buff[sl->rx_cnt++] = 0x00;
734 if (sl->rx_cnt == SLLIN_BUFF_SYNC) {
735 /* 'Duplicated' break character -- ignore */
741 /* Wrong sync character */
746 sl->rx_buff[sl->rx_cnt++] = *cp++;
749 /* Header received */
750 if ((sl->header_received == false) && (sl->rx_cnt >= (SLLIN_BUFF_ID + 1))) {
753 lin_id = sl->rx_buff[SLLIN_BUFF_ID] & LIN_ID_MASK;
754 sce = &sl->linfr_cache[lin_id];
756 spin_lock_irqsave(&sl->linfr_lock, flags);
758 /* Is the length of data set in frame cache? */
759 if (sce->frame_fl & LIN_CACHE_RESPONSE) {
760 sl->rx_expect += sce->dlc + 1; /* + checksum */
761 sl->rx_len_unknown = false;
763 sl->rx_expect += SLLIN_DATA_MAX + 1; /* + checksum */
764 sl->rx_len_unknown = true;
766 spin_unlock_irqrestore(&sl->linfr_lock, flags);
768 sl->header_received = true;
770 hrtimer_start(&sl->rx_timer,
771 ktime_add(ktime_get(), sl->rx_timer_timeout),
777 /* Response received */
778 if ((sl->header_received == true) &&
779 ((sl->rx_cnt >= sl->rx_expect))) {
781 hrtimer_cancel(&sl->rx_timer);
782 netdev_dbg(sl->dev, "Received LIN header & LIN response. "
783 "rx_cnt = %u, rx_expect = %u\n", sl->rx_cnt,
785 sllin_slave_finish_rx_msg(sl);
791 static void sllin_receive_buf(struct tty_struct *tty,
792 const unsigned char *cp, char *fp, int count)
794 struct sllin *sl = (struct sllin *) tty->disc_data;
795 netdev_dbg(sl->dev, "sllin_receive_buf invoked, count = %u\n", count);
797 if (!sl || sl->magic != SLLIN_MAGIC || !netif_running(sl->dev))
801 sllin_master_receive_buf(tty, cp, fp, count);
803 sllin_slave_receive_buf(tty, cp, fp, count);
807 static int sllin_send_tx_buff(struct sllin *sl)
809 struct tty_struct *tty = sl->tty;
813 set_bit(SLF_TXBUFF_RQ, &sl->flags);
815 if (unlikely(test_and_set_bit(SLF_TXBUFF_INPR, &sl->flags)))
816 return 0; /* ongoing concurrent processing */
818 clear_bit(SLF_TXBUFF_RQ, &sl->flags);
819 smp_mb__after_clear_bit();
822 if (sl->lin_state != SLSTATE_BREAK_SENT)
823 remains = sl->tx_lim - sl->tx_cnt;
827 remains = sl->tx_lim - sl->tx_cnt;
830 res = tty->ops->write(tty, sl->tx_buff + sl->tx_cnt, remains);
838 set_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
839 res = tty->ops->write(tty, sl->tx_buff + sl->tx_cnt, remains);
841 clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
849 netdev_dbg(sl->dev, "sllin_send_tx_buff sent %d, remains %d\n",
850 sl->tx_cnt, remains);
852 clear_bit(SLF_TXBUFF_INPR, &sl->flags);
853 smp_mb__after_clear_bit();
855 } while (unlikely(test_bit(SLF_TXBUFF_RQ, &sl->flags)));
860 clear_bit(SLF_TXBUFF_INPR, &sl->flags);
866 static int sllin_send_break(struct sllin *sl)
868 struct tty_struct *tty = sl->tty;
869 unsigned long break_baud;
872 break_baud = ((sl->lin_baud * 2) / 3);
873 sltty_change_speed(tty, break_baud);
875 tty->ops->flush_buffer(tty);
876 sl->rx_cnt = SLLIN_BUFF_BREAK;
878 sl->rx_expect = SLLIN_BUFF_BREAK + 1;
879 sl->lin_state = SLSTATE_BREAK_SENT;
881 res = sllin_send_tx_buff(sl);
883 sl->lin_state = SLSTATE_IDLE;
889 #else /* BREAK_BY_BAUD */
891 static int sllin_send_break(struct sllin *sl)
893 struct tty_struct *tty = sl->tty;
895 unsigned long break_baud;
896 unsigned long usleep_range_min;
897 unsigned long usleep_range_max;
899 break_baud = ((sl->lin_baud * 2) / 3);
900 sl->rx_cnt = SLLIN_BUFF_BREAK;
901 sl->rx_expect = SLLIN_BUFF_BREAK + 1;
902 sl->lin_state = SLSTATE_BREAK_SENT;
904 /* Do the break ourselves; Inspired by
905 http://lxr.linux.no/#linux+v3.1.2/drivers/tty/tty_io.c#L2452 */
906 retval = tty->ops->break_ctl(tty, -1);
911 usleep_range_min = (1000000l * SLLIN_SAMPLES_PER_CHAR) / break_baud;
912 usleep_range_max = usleep_range_min + 50;
913 usleep_range(usleep_range_min, usleep_range_max);
915 retval = tty->ops->break_ctl(tty, 0);
916 usleep_range_min = (1000000l * 1 /* 1 bit */) / break_baud;
917 usleep_range_max = usleep_range_min + 30;
918 usleep_range(usleep_range_min, usleep_range_max);
920 tty->ops->flush_buffer(tty);
922 sl->tx_cnt = SLLIN_BUFF_SYNC;
924 netdev_dbg(sl->dev, "Break sent.\n");
925 set_bit(SLF_RXEVENT, &sl->flags);
926 wake_up(&sl->kwt_wq);
930 #endif /* BREAK_BY_BAUD */
933 static enum hrtimer_restart sllin_rx_timeout_handler(struct hrtimer *hrtimer)
935 struct sllin *sl = container_of(hrtimer, struct sllin, rx_timer);
937 if (sl->lin_master) {
938 sllin_report_error(sl, LIN_ERR_RX_TIMEOUT);
939 set_bit(SLF_TMOUTEVENT, &sl->flags);
941 sllin_slave_finish_rx_msg(sl);
942 set_bit(SLF_RXEVENT, &sl->flags);
944 wake_up(&sl->kwt_wq);
946 return HRTIMER_NORESTART;
949 /*****************************************
950 * sllin_kwthread - kernel worker thread
951 *****************************************/
953 static int sllin_kwthread(void *ptr)
955 struct sllin *sl = (struct sllin *)ptr;
956 struct tty_struct *tty = sl->tty;
957 struct sched_param schparam = { .sched_priority = 40 };
958 int tx_bytes = 0; /* Used for Network statistics */
961 netdev_dbg(sl->dev, "sllin_kwthread started.\n");
962 sched_setscheduler(current, SCHED_FIFO, &schparam);
964 clear_bit(SLF_ERROR, &sl->flags);
965 sltty_change_speed(tty, sl->lin_baud);
967 while (!kthread_should_stop()) {
968 struct can_frame *cf;
971 u8 lin_data_buff[SLLIN_DATA_MAX];
974 if ((sl->lin_state == SLSTATE_IDLE) && sl->lin_master &&
976 if (sllin_send_break(sl) < 0) {
977 /* error processing */
981 wait_event_killable(sl->kwt_wq, kthread_should_stop() ||
982 test_bit(SLF_RXEVENT, &sl->flags) ||
983 test_bit(SLF_TXEVENT, &sl->flags) ||
984 test_bit(SLF_TMOUTEVENT, &sl->flags) ||
985 test_bit(SLF_ERROR, &sl->flags) ||
986 (((sl->lin_state == SLSTATE_IDLE) ||
987 (sl->lin_state == SLSTATE_RESPONSE_WAIT))
988 && test_bit(SLF_MSGEVENT, &sl->flags)));
990 if (test_and_clear_bit(SLF_RXEVENT, &sl->flags)) {
991 netdev_dbg(sl->dev, "sllin_kthread RXEVENT\n");
994 if (test_and_clear_bit(SLF_ERROR, &sl->flags)) {
995 unsigned long usleep_range_min;
996 unsigned long usleep_range_max;
997 hrtimer_cancel(&sl->rx_timer);
998 netdev_dbg(sl->dev, "sllin_kthread ERROR\n");
1000 if (sl->lin_state != SLSTATE_IDLE)
1001 sllin_report_error(sl, LIN_ERR_FRAMING);
1003 usleep_range_min = (1000000l * SLLIN_SAMPLES_PER_CHAR * 10) /
1005 usleep_range_max = usleep_range_min + 50;
1006 usleep_range(usleep_range_min, usleep_range_max);
1007 sllin_reset_buffs(sl);
1008 sl->lin_state = SLSTATE_IDLE;
1011 if (test_and_clear_bit(SLF_TXEVENT, &sl->flags)) {
1012 netdev_dbg(sl->dev, "sllin_kthread TXEVENT\n");
1015 if (test_and_clear_bit(SLF_TMOUTEVENT, &sl->flags)) {
1016 netdev_dbg(sl->dev, "sllin_kthread TMOUTEVENT\n");
1017 sllin_reset_buffs(sl);
1019 sl->lin_state = SLSTATE_IDLE;
1022 switch (sl->lin_state) {
1024 if (!test_bit(SLF_MSGEVENT, &sl->flags))
1027 cf = (struct can_frame *)sl->tx_req_skb->data;
1029 /* SFF RTR CAN frame -> LIN header */
1030 if (cf->can_id & CAN_RTR_FLAG) {
1031 unsigned long flags;
1032 struct sllin_conf_entry *sce;
1034 netdev_dbg(sl->dev, "%s: RTR SFF CAN frame, ID = %x\n",
1035 __func__, cf->can_id & LIN_ID_MASK);
1037 sce = &sl->linfr_cache[cf->can_id & LIN_ID_MASK];
1038 spin_lock_irqsave(&sl->linfr_lock, flags);
1040 /* Is there Slave response in linfr_cache to be sent? */
1041 if ((sce->frame_fl & LIN_CACHE_RESPONSE)
1042 && (sce->dlc > 0)) {
1044 netdev_dbg(sl->dev, "Sending LIN response from linfr_cache\n");
1046 lin_data = sce->data;
1048 if (lin_dlc > SLLIN_DATA_MAX)
1049 lin_dlc = SLLIN_DATA_MAX;
1050 memcpy(lin_data_buff, lin_data, lin_dlc);
1051 lin_data = lin_data_buff;
1056 spin_unlock_irqrestore(&sl->linfr_lock, flags);
1058 } else { /* SFF NON-RTR CAN frame -> LIN header + LIN response */
1059 netdev_dbg(sl->dev, "%s: NON-RTR SFF CAN frame, ID = %x\n",
1060 __func__, (int)cf->can_id & LIN_ID_MASK);
1062 lin_data = cf->data;
1063 lin_dlc = cf->can_dlc;
1064 if (lin_dlc > SLLIN_DATA_MAX)
1065 lin_dlc = SLLIN_DATA_MAX;
1069 if (sllin_setup_msg(sl, 0, cf->can_id & LIN_ID_MASK,
1070 lin_data, lin_dlc) != -1) {
1072 sl->id_to_send = true;
1073 sl->data_to_send = (lin_data != NULL) ? true : false;
1074 sl->resp_len_known = (lin_dlc > 0) ? true : false;
1075 sl->dev->stats.tx_packets++;
1076 sl->dev->stats.tx_bytes += tx_bytes;
1079 clear_bit(SLF_MSGEVENT, &sl->flags);
1080 kfree_skb(sl->tx_req_skb);
1081 netif_wake_queue(sl->dev);
1082 hrtimer_start(&sl->rx_timer,
1083 ktime_add(ktime_get(), sl->rx_timer_timeout),
1087 case SLSTATE_BREAK_SENT:
1088 #ifdef BREAK_BY_BAUD
1089 if (sl->rx_cnt <= SLLIN_BUFF_BREAK)
1092 res = sltty_change_speed(tty, sl->lin_baud);
1095 sl->lin_state = SLSTATE_ID_SENT;
1096 sllin_send_tx_buff(sl);
1099 case SLSTATE_ID_SENT:
1100 hrtimer_cancel(&sl->rx_timer);
1101 sl->id_to_send = false;
1102 if (sl->data_to_send) {
1103 sllin_send_tx_buff(sl);
1104 sl->lin_state = SLSTATE_RESPONSE_SENT;
1105 sl->rx_expect = sl->tx_lim;
1106 goto slstate_response_sent;
1108 if (sl->resp_len_known) {
1109 sl->rx_expect = sl->rx_lim;
1111 sl->rx_expect = SLLIN_BUFF_DATA + 2;
1113 sl->lin_state = SLSTATE_RESPONSE_WAIT;
1114 /* If we don't receive anything, timer will "unblock" us */
1115 hrtimer_start(&sl->rx_timer,
1116 ktime_add(ktime_get(), sl->rx_timer_timeout),
1118 goto slstate_response_wait;
1122 case SLSTATE_RESPONSE_WAIT:
1123 slstate_response_wait:
1124 if (test_bit(SLF_MSGEVENT, &sl->flags)) {
1125 unsigned char *lin_buff;
1126 cf = (struct can_frame *)sl->tx_req_skb->data;
1128 lin_buff = (sl->lin_master) ? sl->tx_buff : sl->rx_buff;
1129 if (cf->can_id == (lin_buff[SLLIN_BUFF_ID] & LIN_ID_MASK)) {
1130 hrtimer_cancel(&sl->rx_timer);
1131 netdev_dbg(sl->dev, "received LIN response in a CAN frame.\n");
1132 if (sllin_setup_msg(sl, SLLIN_STPMSG_RESPONLY,
1133 cf->can_id & LIN_ID_MASK,
1134 cf->data, cf->can_dlc) != -1) {
1136 sl->rx_expect = sl->tx_lim;
1137 sl->data_to_send = true;
1138 sl->dev->stats.tx_packets++;
1139 sl->dev->stats.tx_bytes += tx_bytes;
1141 if (!sl->lin_master) {
1142 sl->tx_cnt = SLLIN_BUFF_DATA;
1145 sllin_send_tx_buff(sl);
1146 clear_bit(SLF_MSGEVENT, &sl->flags);
1147 kfree_skb(sl->tx_req_skb);
1148 netif_wake_queue(sl->dev);
1150 sl->lin_state = SLSTATE_RESPONSE_SENT;
1151 goto slstate_response_sent;
1154 sl->lin_state = SLSTATE_RESPONSE_WAIT_BUS;
1158 /* Be aware, no BREAK here */
1159 case SLSTATE_RESPONSE_WAIT_BUS:
1160 if (sl->rx_cnt < sl->rx_expect)
1163 hrtimer_cancel(&sl->rx_timer);
1164 netdev_dbg(sl->dev, "response received ID %d len %d\n",
1165 sl->rx_buff[SLLIN_BUFF_ID], sl->rx_cnt - SLLIN_BUFF_DATA - 1);
1167 if (sllin_rx_validate(sl) == -1) {
1168 netdev_dbg(sl->dev, "RX validation failed.\n");
1169 sllin_report_error(sl, LIN_ERR_CHECKSUM);
1171 /* Send CAN non-RTR frame with data */
1172 netdev_dbg(sl->dev, "sending NON-RTR CAN frame with LIN payload.");
1173 sll_bump(sl); /* send packet to the network layer */
1176 sl->id_to_send = false;
1177 sl->lin_state = SLSTATE_IDLE;
1180 case SLSTATE_RESPONSE_SENT:
1181 slstate_response_sent:
1182 if (sl->rx_cnt < sl->tx_lim)
1185 hrtimer_cancel(&sl->rx_timer);
1186 sll_bump(sl); /* send packet to the network layer */
1187 netdev_dbg(sl->dev, "response sent ID %d len %d\n",
1188 sl->rx_buff[SLLIN_BUFF_ID], sl->rx_cnt - SLLIN_BUFF_DATA - 1);
1190 sl->id_to_send = false;
1191 sl->lin_state = SLSTATE_IDLE;
1196 hrtimer_cancel(&sl->rx_timer);
1197 netdev_dbg(sl->dev, "sllin_kwthread stopped.\n");
1203 /************************************
1204 * sllin_open helper routines.
1205 ************************************/
1207 /* Collect hanged up channels */
1208 static void sll_sync(void)
1211 struct net_device *dev;
1214 for (i = 0; i < maxdev; i++) {
1215 dev = sllin_devs[i];
1219 sl = netdev_priv(dev);
1222 if (dev->flags & IFF_UP)
1227 /* Find a free SLLIN channel, and link in this `tty' line. */
1228 static struct sllin *sll_alloc(dev_t line)
1231 struct net_device *dev = NULL;
1234 if (sllin_devs == NULL)
1235 return NULL; /* Master array missing ! */
1237 for (i = 0; i < maxdev; i++) {
1238 dev = sllin_devs[i];
1244 /* Sorry, too many, all slots in use */
1249 sl = netdev_priv(dev);
1250 if (test_bit(SLF_INUSE, &sl->flags)) {
1251 unregister_netdevice(dev);
1253 sllin_devs[i] = NULL;
1258 char name[IFNAMSIZ];
1259 sprintf(name, "sllin%d", i);
1261 dev = alloc_netdev(sizeof(*sl), name, sll_setup);
1267 sl = netdev_priv(dev);
1268 /* Initialize channel control data */
1269 sl->magic = SLLIN_MAGIC;
1271 spin_lock_init(&sl->lock);
1272 spin_lock_init(&sl->linfr_lock);
1273 sllin_devs[i] = dev;
1279 * Open the high-level part of the SLLIN channel.
1280 * This function is called by the TTY module when the
1281 * SLLIN line discipline is called for. Because we are
1282 * sure the tty line exists, we only have to link it to
1283 * a free SLLIN channel...
1285 * Called in process context serialized from other ldisc calls.
1288 static int sllin_open(struct tty_struct *tty)
1293 pr_debug("sllin: %s() invoked\n", __func__);
1295 if (!capable(CAP_NET_ADMIN))
1298 if (tty->ops->write == NULL)
1301 /* RTnetlink lock is misused here to serialize concurrent
1302 opens of sllin channels. There are better ways, but it is
1307 /* Collect hanged up channels. */
1310 sl = tty->disc_data;
1313 /* First make sure we're not already connected. */
1314 if (sl && sl->magic == SLLIN_MAGIC)
1317 /* OK. Find a free SLLIN channel to use. */
1319 sl = sll_alloc(tty_devnum(tty));
1324 tty->disc_data = sl;
1325 sl->line = tty_devnum(tty);
1327 if (!test_bit(SLF_INUSE, &sl->flags)) {
1328 /* Perform the low-level SLLIN initialization. */
1329 sl->lin_master = master;
1331 pr_debug("sllin: Configured as MASTER\n");
1333 pr_debug("sllin: Configured as SLAVE\n");
1335 sllin_reset_buffs(sl);
1337 sl->lin_baud = (baudrate == 0) ? LIN_DEFAULT_BAUDRATE : baudrate;
1338 pr_debug("sllin: Baudrate set to %u\n", sl->lin_baud);
1340 sl->lin_state = SLSTATE_IDLE;
1342 hrtimer_init(&sl->rx_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
1343 sl->rx_timer.function = sllin_rx_timeout_handler;
1344 /* timeval_to_ktime(msg_head->ival1); */
1345 sl->rx_timer_timeout = ns_to_ktime(
1346 (1000000000l / sl->lin_baud) *
1347 SLLIN_SAMPLES_PER_CHAR * SLLIN_CHARS_TO_TIMEOUT);
1349 set_bit(SLF_INUSE, &sl->flags);
1351 init_waitqueue_head(&sl->kwt_wq);
1352 sl->kwthread = kthread_run(sllin_kwthread, sl, "sllin");
1353 if (sl->kwthread == NULL)
1356 err = register_netdevice(sl->dev);
1358 goto err_free_chan_and_thread;
1361 /* Done. We have linked the TTY line to a channel. */
1363 tty->receive_room = SLLIN_BUFF_LEN * 40; /* We don't flow control */
1365 /* TTY layer expects 0 on success */
1368 err_free_chan_and_thread:
1369 kthread_stop(sl->kwthread);
1370 sl->kwthread = NULL;
1374 tty->disc_data = NULL;
1375 clear_bit(SLF_INUSE, &sl->flags);
1380 /* Count references from TTY module */
1385 * Close down a SLLIN channel.
1386 * This means flushing out any pending queues, and then returning. This
1387 * call is serialized against other ldisc functions.
1389 * We also use this method for a hangup event.
1392 static void sllin_close(struct tty_struct *tty)
1394 struct sllin *sl = (struct sllin *) tty->disc_data;
1396 /* First make sure we're connected. */
1397 if (!sl || sl->magic != SLLIN_MAGIC || sl->tty != tty)
1400 kthread_stop(sl->kwthread);
1401 sl->kwthread = NULL;
1403 tty->disc_data = NULL;
1406 /* Flush network side */
1407 unregister_netdev(sl->dev);
1408 /* This will complete via sl_free_netdev */
1411 static int sllin_hangup(struct tty_struct *tty)
1417 /* Perform I/O control on an active SLLIN channel. */
1418 static int sllin_ioctl(struct tty_struct *tty, struct file *file,
1419 unsigned int cmd, unsigned long arg)
1421 struct sllin *sl = (struct sllin *) tty->disc_data;
1424 /* First make sure we're connected. */
1425 if (!sl || sl->magic != SLLIN_MAGIC)
1430 tmp = strlen(sl->dev->name) + 1;
1431 if (copy_to_user((void __user *)arg, sl->dev->name, tmp))
1439 return tty_mode_ioctl(tty, file, cmd, arg);
1443 static struct tty_ldisc_ops sll_ldisc = {
1444 .owner = THIS_MODULE,
1445 .magic = TTY_LDISC_MAGIC,
1448 .close = sllin_close,
1449 .hangup = sllin_hangup,
1450 .ioctl = sllin_ioctl,
1451 .receive_buf = sllin_receive_buf,
1452 .write_wakeup = sllin_write_wakeup,
1455 static int __init sllin_init(void)
1460 maxdev = 4; /* Sanity */
1463 pr_debug("sllin: %d dynamic interface channels.\n", maxdev);
1465 sllin_devs = kzalloc(sizeof(struct net_device *)*maxdev, GFP_KERNEL);
1467 pr_err("sllin: can't allocate sllin device array!\n");
1471 /* Fill in our line protocol discipline, and register it */
1472 status = tty_register_ldisc(N_SLLIN, &sll_ldisc);
1474 pr_err("sllin: can't register line discipline\n");
1478 #ifdef BREAK_BY_BAUD
1479 pr_debug("sllin: Break is generated by baud-rate change.");
1481 pr_debug("sllin: Break is generated manually with tiny sleep.");
1487 static void __exit sllin_exit(void)
1490 struct net_device *dev;
1492 unsigned long timeout = jiffies + HZ;
1495 if (sllin_devs == NULL)
1498 /* First of all: check for active disciplines and hangup them.
1502 msleep_interruptible(100);
1505 for (i = 0; i < maxdev; i++) {
1506 dev = sllin_devs[i];
1509 sl = netdev_priv(dev);
1510 spin_lock_bh(&sl->lock);
1513 tty_hangup(sl->tty);
1515 spin_unlock_bh(&sl->lock);
1517 } while (busy && time_before(jiffies, timeout));
1519 /* FIXME: hangup is async so we should wait when doing this second
1522 for (i = 0; i < maxdev; i++) {
1523 dev = sllin_devs[i];
1526 sllin_devs[i] = NULL;
1528 sl = netdev_priv(dev);
1530 netdev_dbg(sl->dev, "tty discipline still running\n");
1531 /* Intentionally leak the control block. */
1532 dev->destructor = NULL;
1535 unregister_netdev(dev);
1541 i = tty_unregister_ldisc(N_SLLIN);
1543 pr_err("sllin: can't unregister ldisc (err %d)\n", i);
1546 module_init(sllin_init);
1547 module_exit(sllin_exit);