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);
181 /* Values of two parity bits in LIN Protected
182 Identifier for each particular LIN ID */
183 const unsigned char sllin_id_parity_table[] = {
184 0x80, 0xc0, 0x40, 0x00, 0xc0, 0x80, 0x00, 0x40,
185 0x00, 0x40, 0xc0, 0x80, 0x40, 0x00, 0x80, 0xc0,
186 0x40, 0x00, 0x80, 0xc0, 0x00, 0x40, 0xc0, 0x80,
187 0xc0, 0x80, 0x00, 0x40, 0x80, 0xc0, 0x40, 0x00,
188 0x00, 0x40, 0xc0, 0x80, 0x40, 0x00, 0x80, 0xc0,
189 0x80, 0xc0, 0x40, 0x00, 0xc0, 0x80, 0x00, 0x40,
190 0xc0, 0x80, 0x00, 0x40, 0x80, 0xc0, 0x40, 0x00,
191 0x40, 0x00, 0x80, 0xc0, 0x00, 0x40, 0xc0, 0x80
195 * sltty_change_speed() -- Change baudrate of Serial device belonging
198 * @tty: Pointer to TTY to change speed for.
199 * @speed: Integer value of new speed. It is possible to
200 * assign non-standard values, i.e. those which
201 * are not defined in termbits.h.
203 static int sltty_change_speed(struct tty_struct *tty, unsigned speed)
205 struct ktermios old_termios;
208 mutex_lock(&tty->termios_mutex);
210 old_termios = *(tty->termios);
212 cflag = CS8 | CREAD | CLOCAL | HUPCL;
213 cflag &= ~(CBAUD | CIBAUD);
215 tty->termios->c_cflag = cflag;
216 tty->termios->c_oflag = 0;
217 tty->termios->c_lflag = 0;
219 /* Enable interrupt when UART-Break or Framing error received */
220 tty->termios->c_iflag = BRKINT | INPCK;
222 tty_encode_baud_rate(tty, speed, speed);
224 if (tty->ops->set_termios)
225 tty->ops->set_termios(tty, &old_termios);
227 mutex_unlock(&tty->termios_mutex);
232 /* Send one can_frame to the network layer */
233 static void sllin_send_canfr(struct sllin *sl, canid_t id, char *data, int len)
241 memcpy(&cf.data, data, cf.can_dlc);
243 skb = dev_alloc_skb(sizeof(struct can_frame));
248 skb->protocol = htons(ETH_P_CAN);
249 skb->pkt_type = PACKET_BROADCAST;
250 skb->ip_summed = CHECKSUM_UNNECESSARY;
251 memcpy(skb_put(skb, sizeof(struct can_frame)),
252 &cf, sizeof(struct can_frame));
255 sl->dev->stats.rx_packets++;
256 sl->dev->stats.rx_bytes += cf.can_dlc;
260 * sll_bump() -- Send data of received LIN frame (existing in sl->rx_buff)
265 static void sll_bump(struct sllin *sl)
267 int len = sl->rx_cnt - SLLIN_BUFF_DATA - 1; /* without checksum */
268 len = (len < 0) ? 0 : len;
270 sllin_send_canfr(sl, sl->rx_buff[SLLIN_BUFF_ID] & LIN_ID_MASK,
271 sl->rx_buff + SLLIN_BUFF_DATA, len);
274 static void sll_send_rtr(struct sllin *sl)
276 sllin_send_canfr(sl, (sl->rx_buff[SLLIN_BUFF_ID] & LIN_ID_MASK) |
277 CAN_RTR_FLAG, NULL, 0);
281 * Called by the driver when there's room for more data. If we have
282 * more packets to send, we send them here.
284 static void sllin_write_wakeup(struct tty_struct *tty)
288 struct sllin *sl = (struct sllin *) tty->disc_data;
290 /* First make sure we're connected. */
291 if (!sl || sl->magic != SLLIN_MAGIC || !netif_running(sl->dev))
294 set_bit(SLF_TXBUFF_RQ, &sl->flags);
296 if (unlikely(test_and_set_bit(SLF_TXBUFF_INPR, &sl->flags)))
297 return; /* ongoing concurrent processing */
299 clear_bit(SLF_TXBUFF_RQ, &sl->flags);
300 smp_mb__after_clear_bit();
302 if (sl->lin_state != SLSTATE_BREAK_SENT)
303 remains = sl->tx_lim - sl->tx_cnt;
305 remains = SLLIN_BUFF_BREAK + 1 - sl->tx_cnt;
308 actual = tty->ops->write(tty, sl->tx_buff + sl->tx_cnt,
309 sl->tx_cnt - sl->tx_lim);
310 sl->tx_cnt += actual;
313 clear_bit(SLF_TXBUFF_INPR, &sl->flags);
314 smp_mb__after_clear_bit();
316 } while (unlikely(test_bit(SLF_TXBUFF_RQ, &sl->flags)));
318 if ((remains > 0) && (actual >= 0)) {
319 pr_debug("sllin: sllin_write_wakeup sent %d, "
320 "remains %d, waiting\n",
321 sl->tx_cnt, sl->tx_lim - sl->tx_cnt);
325 clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
326 set_bit(SLF_TXEVENT, &sl->flags);
327 wake_up(&sl->kwt_wq);
329 pr_debug("sllin: sllin_write_wakeup sent %d, wakeup\n", sl->tx_cnt);
333 * sll_xmit() -- Send a can_frame to a TTY queue.
335 * @skb: Pointer to Socket buffer to be sent.
336 * @dev: Network device where @skb will be sent.
338 static netdev_tx_t sll_xmit(struct sk_buff *skb, struct net_device *dev)
340 struct sllin *sl = netdev_priv(dev);
341 struct can_frame *cf;
343 if (skb->len != sizeof(struct can_frame))
346 spin_lock(&sl->lock);
347 if (!netif_running(dev)) {
348 printk(KERN_WARNING "%s: xmit: iface is down\n", dev->name);
351 if (sl->tty == NULL) {
352 printk(KERN_WARNING "%s: xmit: no tty device connected\n", dev->name);
356 cf = (struct can_frame *) skb->data;
357 if (cf->can_id & LIN_CTRL_FRAME) {
358 sllin_configure_frame_cache(sl, cf);
359 goto free_out_unlock;
362 netif_stop_queue(sl->dev);
364 sl->tx_req_skb = skb;
365 set_bit(SLF_MSGEVENT, &sl->flags);
366 wake_up(&sl->kwt_wq);
367 spin_unlock(&sl->lock);
372 spin_unlock(&sl->lock);
379 /******************************************
380 * Routines looking at netdevice side.
381 ******************************************/
383 /* Netdevice UP -> DOWN routine */
384 static int sll_close(struct net_device *dev)
386 struct sllin *sl = netdev_priv(dev);
388 spin_lock_bh(&sl->lock);
390 /* TTY discipline is running. */
391 clear_bit(TTY_DO_WRITE_WAKEUP, &sl->tty->flags);
393 netif_stop_queue(dev);
396 spin_unlock_bh(&sl->lock);
401 /* Netdevice DOWN -> UP routine */
402 static int sll_open(struct net_device *dev)
404 struct sllin *sl = netdev_priv(dev);
406 pr_debug("sllin: %s() invoked\n", __func__);
411 sl->flags &= (1 << SLF_INUSE);
412 netif_start_queue(dev);
416 /* Hook the destructor so we can free sllin devs at the right point in time */
417 static void sll_free_netdev(struct net_device *dev)
419 int i = dev->base_addr;
421 sllin_devs[i] = NULL;
424 static const struct net_device_ops sll_netdev_ops = {
425 .ndo_open = sll_open,
426 .ndo_stop = sll_close,
427 .ndo_start_xmit = sll_xmit,
430 static void sll_setup(struct net_device *dev)
432 dev->netdev_ops = &sll_netdev_ops;
433 dev->destructor = sll_free_netdev;
435 dev->hard_header_len = 0;
437 dev->tx_queue_len = 10;
439 dev->mtu = sizeof(struct can_frame);
440 dev->type = ARPHRD_CAN;
442 /* New-style flags. */
443 dev->flags = IFF_NOARP;
444 dev->features = NETIF_F_NO_CSUM;
447 /******************************************
448 Routines looking at TTY side.
449 ******************************************/
450 #define SLL_RESPONSE_RECEIVED ((sl->header_received == true) && \
451 ((sl->rx_cnt >= sl->rx_expect) || \
452 ((sl->rx_len_unknown == true) && (count == 0))))
454 #define SLL_HEADER_RECEIVED ((sl->header_received == false) && \
455 (sl->rx_cnt >= (SLLIN_BUFF_ID + 1)))
457 static void sllin_receive_buf(struct tty_struct *tty,
458 const unsigned char *cp, char *fp, int count)
460 struct sllin *sl = (struct sllin *) tty->disc_data;
461 pr_debug("sllin: sllin_receive_buf invoked, count = %u\n", count);
463 if (!sl || sl->magic != SLLIN_MAGIC || !netif_running(sl->dev))
466 /* Read the characters out of the buffer */
469 pr_debug("sllin: sllin_receive_buf char 0x%02x ignored "
470 "due marker 0x%02x, flags 0x%lx\n",
471 *cp, *(fp-1), sl->flags);
473 if (sl->lin_master == true) { /* Report error */
474 set_bit(SLF_ERROR, &sl->flags);
475 wake_up(&sl->kwt_wq);
477 } else { /* Received Break */
479 sl->rx_expect = SLLIN_BUFF_ID + 1;
480 sl->rx_len_unknown = false; /* We do know exact length of the header */
481 sl->header_received = false;
485 #ifndef BREAK_BY_BAUD
486 /* We didn't receive Break character -- fake it! */
487 if ((sl->rx_cnt == SLLIN_BUFF_BREAK) && (*cp == 0x55)) {
488 pr_debug("sllin: LIN_RX[%d]: 0x00\n", sl->rx_cnt);
489 sl->rx_buff[sl->rx_cnt++] = 0x00;
492 if (sl->rx_cnt < SLLIN_BUFF_LEN) {
493 pr_debug("sllin: LIN_RX[%d]: 0x%02x\n", sl->rx_cnt, *cp);
494 sl->rx_buff[sl->rx_cnt++] = *cp++;
497 if (sl->lin_master == true) {
498 if (SLL_RESPONSE_RECEIVED) {
499 set_bit(SLF_RXEVENT, &sl->flags);
500 wake_up(&sl->kwt_wq);
501 pr_debug("sllin: sllin_receive_buf count %d, wakeup\n", sl->rx_cnt);
503 pr_debug("sllin: sllin_receive_buf count %d, waiting\n", sl->rx_cnt);
505 } else { /* LIN slave */
507 struct sllin_conf_entry *sce;
509 pr_debug("sllin: rx_cnt = %u; header_received = %u\n",
510 sl->rx_cnt, sl->header_received);
512 if (SLL_HEADER_RECEIVED) {
515 lin_id = sl->rx_buff[SLLIN_BUFF_ID] & LIN_ID_MASK;
516 sce = &sl->linfr_cache[lin_id];
518 spin_lock_irqsave(&sl->linfr_lock, flags);
519 /* Is the length of data set in frame cache? */
520 if (sce->frame_fl & LIN_LOC_SLAVE_CACHE) {
521 sl->rx_expect += sce->dlc;
522 sl->rx_len_unknown = false;
524 sl->rx_expect += SLLIN_DATA_MAX + 1; /* + checksum */
525 sl->rx_len_unknown = true;
527 spin_unlock_irqrestore(&sl->linfr_lock, flags);
529 sl->header_received = true;
534 if (SLL_RESPONSE_RECEIVED) {
536 pr_debug("sllin: Received LIN header & LIN response. "
537 "rx_cnt = %u, rx_expect = %u\n", sl->rx_cnt,
540 /* Prepare for reception of new header */
542 sl->rx_expect = SLLIN_BUFF_ID + 1;
543 sl->rx_len_unknown = false; /* We do know exact length of the header */
544 sl->header_received = false;
550 /*****************************************
551 * sllin message helper routines
552 *****************************************/
554 * sllin_report_error() -- Report an error by sending CAN frame
555 * with particular error flag set in can_id
558 * @err: Error flag to be sent.
560 void sllin_report_error(struct sllin *sl, int err)
563 case LIN_ERR_CHECKSUM:
564 sl->dev->stats.rx_crc_errors++;
567 case LIN_ERR_RX_TIMEOUT:
568 sl->dev->stats.rx_errors++;
571 case LIN_ERR_FRAMING:
572 sl->dev->stats.rx_frame_errors++;
576 sllin_send_canfr(sl, 0 | CAN_EFF_FLAG |
577 (err & ~LIN_ID_MASK), NULL, 0);
581 * sllin_configure_frame_cache() -- Configure particular entry in linfr_cache
584 * @cf: Pointer to CAN frame sent to this driver
585 * holding configuration information
587 static int sllin_configure_frame_cache(struct sllin *sl, struct can_frame *cf)
590 struct sllin_conf_entry *sce;
592 if (!(cf->can_id & LIN_ID_CONF))
595 sce = &sl->linfr_cache[cf->can_id & LIN_ID_MASK];
596 pr_debug("sllin: Setting frame cache with EFF CAN frame. "
597 "LIN ID = %d\n", cf->can_id & LIN_ID_MASK);
599 spin_lock_irqsave(&sl->linfr_lock, flags);
601 sce->dlc = cf->can_dlc;
602 if (sce->dlc > SLLIN_DATA_MAX)
603 sce->dlc = SLLIN_DATA_MAX;
605 sce->frame_fl = (cf->can_id & ~LIN_ID_MASK) & CAN_EFF_MASK;
606 memcpy(sce->data, cf->data, cf->can_dlc);
608 spin_unlock_irqrestore(&sl->linfr_lock, flags);
614 * sllin_checksum() -- Count checksum for particular data
616 * @data: Pointer to the buffer containing whole LIN
617 * frame (i.e. including break and sync bytes).
618 * @length: Length of the buffer.
619 * @enhanced_fl: Flag determining whether Enhanced or Classic
620 * checksum should be counted.
622 static inline unsigned sllin_checksum(unsigned char *data, int length, int enhanced_fl)
632 for (; i < length; i++) {
641 #define SLLIN_STPMSG_RESPONLY (1) /* Message will be LIN Response only */
642 #define SLLIN_STPMSG_CHCKSUM_CLS (1 << 1)
643 #define SLLIN_STPMSG_CHCKSUM_ENH (1 << 2)
645 int sllin_setup_msg(struct sllin *sl, int mode, int id,
646 unsigned char *data, int len)
648 if (id > LIN_ID_MASK)
651 if (!(mode & SLLIN_STPMSG_RESPONLY)) {
655 sl->rx_lim = SLLIN_BUFF_LEN;
658 sl->tx_buff[SLLIN_BUFF_BREAK] = 0;
659 sl->tx_buff[SLLIN_BUFF_SYNC] = 0x55;
660 sl->tx_buff[SLLIN_BUFF_ID] = id | sllin_id_parity_table[id];
661 sl->tx_lim = SLLIN_BUFF_DATA;
663 if ((data != NULL) && len) {
665 memcpy(sl->tx_buff + SLLIN_BUFF_DATA, data, len);
666 sl->tx_buff[sl->tx_lim++] = sllin_checksum(sl->tx_buff,
667 sl->tx_lim, mode & SLLIN_STPMSG_CHCKSUM_ENH);
670 sl->rx_lim = SLLIN_BUFF_DATA + len + 1;
675 static void sllin_reset_buffs(struct sllin *sl)
679 sl->rx_lim = sl->lin_master ? 0 : SLLIN_BUFF_LEN;
682 sl->id_to_send = false;
683 sl->data_to_send = false;
686 int sllin_send_tx_buff(struct sllin *sl)
688 struct tty_struct *tty = sl->tty;
692 set_bit(SLF_TXBUFF_RQ, &sl->flags);
694 if (unlikely(test_and_set_bit(SLF_TXBUFF_INPR, &sl->flags)))
695 return 0; /* ongoing concurrent processing */
697 clear_bit(SLF_TXBUFF_RQ, &sl->flags);
698 smp_mb__after_clear_bit();
701 if (sl->lin_state != SLSTATE_BREAK_SENT)
702 remains = sl->tx_lim - sl->tx_cnt;
706 remains = sl->tx_lim - sl->tx_cnt;
709 res = tty->ops->write(tty, sl->tx_buff + sl->tx_cnt, remains);
717 set_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
718 res = tty->ops->write(tty, sl->tx_buff + sl->tx_cnt, remains);
720 clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
728 pr_debug("sllin: sllin_send_tx_buff sent %d, remains %d\n",
729 sl->tx_cnt, remains);
731 clear_bit(SLF_TXBUFF_INPR, &sl->flags);
732 smp_mb__after_clear_bit();
734 } while (unlikely(test_bit(SLF_TXBUFF_RQ, &sl->flags)));
739 clear_bit(SLF_TXBUFF_INPR, &sl->flags);
745 int sllin_send_break(struct sllin *sl)
747 struct tty_struct *tty = sl->tty;
748 unsigned long break_baud;
751 break_baud = ((sl->lin_baud * 2) / 3);
752 sltty_change_speed(tty, break_baud);
754 tty->ops->flush_buffer(tty);
755 sl->rx_cnt = SLLIN_BUFF_BREAK;
757 sl->rx_expect = SLLIN_BUFF_BREAK + 1;
758 sl->lin_state = SLSTATE_BREAK_SENT;
760 res = sllin_send_tx_buff(sl);
762 sl->lin_state = SLSTATE_IDLE;
768 #else /* BREAK_BY_BAUD */
770 int sllin_send_break(struct sllin *sl)
772 struct tty_struct *tty = sl->tty;
774 unsigned long break_baud;
775 unsigned long usleep_range_min;
776 unsigned long usleep_range_max;
778 break_baud = ((sl->lin_baud * 2) / 3);
779 sl->rx_cnt = SLLIN_BUFF_BREAK;
780 sl->rx_expect = SLLIN_BUFF_BREAK + 1;
781 sl->lin_state = SLSTATE_BREAK_SENT;
783 /* Do the break ourselves; Inspired by
784 http://lxr.linux.no/#linux+v3.1.2/drivers/tty/tty_io.c#L2452 */
785 retval = tty->ops->break_ctl(tty, -1);
790 usleep_range_min = (1000000l * SLLIN_SAMPLES_PER_CHAR) / break_baud;
791 usleep_range_max = usleep_range_min + 50;
792 usleep_range(usleep_range_min, usleep_range_max);
794 retval = tty->ops->break_ctl(tty, 0);
795 usleep_range_min = (1000000l * 1 /* 1 bit */) / break_baud;
796 usleep_range_max = usleep_range_min + 30;
797 usleep_range(usleep_range_min, usleep_range_max);
799 tty->ops->flush_buffer(tty);
801 sl->tx_cnt = SLLIN_BUFF_SYNC;
803 pr_debug("sllin: Break sent.\n");
804 set_bit(SLF_RXEVENT, &sl->flags);
805 wake_up(&sl->kwt_wq);
809 #endif /* BREAK_BY_BAUD */
812 static enum hrtimer_restart sllin_rx_timeout_handler(struct hrtimer *hrtimer)
814 struct sllin *sl = container_of(hrtimer, struct sllin, rx_timer);
816 sllin_report_error(sl, LIN_ERR_RX_TIMEOUT);
817 set_bit(SLF_TMOUTEVENT, &sl->flags);
818 wake_up(&sl->kwt_wq);
820 return HRTIMER_NORESTART;
824 * sllin_rx_validate() -- Validate received frame, i,e. check checksum
828 static int sllin_rx_validate(struct sllin *sl)
834 unsigned char rec_chcksm = sl->rx_buff[sl->rx_cnt - 1];
835 struct sllin_conf_entry *sce;
837 actual_id = sl->rx_buff[SLLIN_BUFF_ID] & LIN_ID_MASK;
838 sce = &sl->linfr_cache[actual_id];
840 spin_lock_irqsave(&sl->linfr_lock, flags);
842 ext_chcks_fl = sce->frame_fl & LIN_CHECKSUM_EXTENDED;
843 spin_unlock_irqrestore(&sl->linfr_lock, flags);
845 if (sllin_checksum(sl->rx_buff, sl->rx_cnt - 1, ext_chcks_fl) !=
848 /* Type of checksum is configured for particular frame */
852 if (sllin_checksum(sl->rx_buff, sl->rx_cnt - 1,
853 !ext_chcks_fl) != rec_chcksm) {
862 /*****************************************
863 * sllin_kwthread - kernel worker thread
864 *****************************************/
866 int sllin_kwthread(void *ptr)
868 struct sllin *sl = (struct sllin *)ptr;
869 struct tty_struct *tty = sl->tty;
870 struct sched_param schparam = { .sched_priority = 40 };
871 int tx_bytes = 0; /* Used for Network statistics */
874 pr_debug("sllin: sllin_kwthread started.\n");
875 sched_setscheduler(current, SCHED_FIFO, &schparam);
877 clear_bit(SLF_ERROR, &sl->flags);
878 sltty_change_speed(tty, sl->lin_baud);
880 while (!kthread_should_stop()) {
881 struct can_frame *cf;
884 u8 lin_data_buff[SLLIN_DATA_MAX];
887 if ((sl->lin_state == SLSTATE_IDLE) && sl->lin_master &&
889 if (sllin_send_break(sl) < 0) {
890 /* error processing */
894 wait_event_killable(sl->kwt_wq, kthread_should_stop() ||
895 test_bit(SLF_RXEVENT, &sl->flags) ||
896 test_bit(SLF_TXEVENT, &sl->flags) ||
897 test_bit(SLF_TMOUTEVENT, &sl->flags) ||
898 test_bit(SLF_ERROR, &sl->flags) ||
899 (((sl->lin_state == SLSTATE_IDLE) ||
900 (sl->lin_state == SLSTATE_RESPONSE_WAIT))
901 && test_bit(SLF_MSGEVENT, &sl->flags)));
903 if (test_and_clear_bit(SLF_RXEVENT, &sl->flags)) {
904 pr_debug("sllin: sllin_kthread RXEVENT\n");
907 if (test_and_clear_bit(SLF_ERROR, &sl->flags)) {
908 unsigned long usleep_range_min;
909 unsigned long usleep_range_max;
910 hrtimer_cancel(&sl->rx_timer);
911 pr_debug("sllin: sllin_kthread ERROR\n");
913 if (sl->lin_state != SLSTATE_IDLE)
914 sllin_report_error(sl, LIN_ERR_FRAMING);
916 usleep_range_min = (1000000l * SLLIN_SAMPLES_PER_CHAR * 10) /
918 usleep_range_max = usleep_range_min + 50;
919 usleep_range(usleep_range_min, usleep_range_max);
920 sllin_reset_buffs(sl);
921 sl->lin_state = SLSTATE_IDLE;
924 if (test_and_clear_bit(SLF_TXEVENT, &sl->flags)) {
925 pr_debug("sllin: sllin_kthread TXEVENT\n");
928 if (test_and_clear_bit(SLF_TMOUTEVENT, &sl->flags)) {
929 pr_debug("sllin: sllin_kthread TMOUTEVENT\n");
930 sllin_reset_buffs(sl);
932 sl->lin_state = SLSTATE_IDLE;
935 switch (sl->lin_state) {
937 if (!test_bit(SLF_MSGEVENT, &sl->flags))
940 cf = (struct can_frame *)sl->tx_req_skb->data;
942 /* SFF RTR CAN frame -> LIN header */
943 if (cf->can_id & CAN_RTR_FLAG) {
945 struct sllin_conf_entry *sce;
947 pr_debug("sllin: %s: RTR SFF CAN frame, ID = %x\n",
948 __func__, cf->can_id & LIN_ID_MASK);
950 sce = &sl->linfr_cache[cf->can_id & LIN_ID_MASK];
951 spin_lock_irqsave(&sl->linfr_lock, flags);
953 /* Is there Slave response in linfr_cache to be sent? */
954 if ((sce->frame_fl & LIN_LOC_SLAVE_CACHE)
957 pr_debug("sllin: Sending LIN response from linfr_cache\n");
959 lin_data = sce->data;
961 if (lin_dlc > SLLIN_DATA_MAX)
962 lin_dlc = SLLIN_DATA_MAX;
963 memcpy(lin_data_buff, lin_data, lin_dlc);
964 lin_data = lin_data_buff;
969 spin_unlock_irqrestore(&sl->linfr_lock, flags);
971 } else { /* SFF NON-RTR CAN frame -> LIN header + LIN response */
972 pr_debug("sllin: %s: NON-RTR SFF CAN frame, ID = %x\n",
973 __func__, (int)cf->can_id & LIN_ID_MASK);
976 lin_dlc = cf->can_dlc;
977 if (lin_dlc > SLLIN_DATA_MAX)
978 lin_dlc = SLLIN_DATA_MAX;
982 if (sllin_setup_msg(sl, 0, cf->can_id & LIN_ID_MASK,
983 lin_data, lin_dlc) != -1) {
985 sl->id_to_send = true;
986 sl->data_to_send = (lin_data != NULL) ? true : false;
987 sl->resp_len_known = (lin_dlc > 0) ? true : false;
988 sl->dev->stats.tx_packets++;
989 sl->dev->stats.tx_bytes += tx_bytes;
992 clear_bit(SLF_MSGEVENT, &sl->flags);
993 kfree_skb(sl->tx_req_skb);
994 netif_wake_queue(sl->dev);
995 hrtimer_start(&sl->rx_timer,
996 ktime_add(ktime_get(), sl->rx_timer_timeout),
1000 case SLSTATE_BREAK_SENT:
1001 #ifdef BREAK_BY_BAUD
1002 if (sl->rx_cnt <= SLLIN_BUFF_BREAK)
1005 res = sltty_change_speed(tty, sl->lin_baud);
1008 sl->lin_state = SLSTATE_ID_SENT;
1009 sllin_send_tx_buff(sl);
1012 case SLSTATE_ID_SENT:
1013 hrtimer_cancel(&sl->rx_timer);
1014 sl->id_to_send = false;
1015 if (sl->data_to_send) {
1016 sllin_send_tx_buff(sl);
1017 sl->lin_state = SLSTATE_RESPONSE_SENT;
1018 sl->rx_expect = sl->tx_lim;
1019 goto slstate_response_sent;
1021 if (sl->resp_len_known) {
1022 sl->rx_expect = sl->rx_lim;
1024 sl->rx_expect = SLLIN_BUFF_DATA + 2;
1026 sl->lin_state = SLSTATE_RESPONSE_WAIT;
1027 /* If we don't receive anything, timer will "unblock" us */
1028 hrtimer_start(&sl->rx_timer,
1029 ktime_add(ktime_get(), sl->rx_timer_timeout),
1031 goto slstate_response_wait;
1035 case SLSTATE_RESPONSE_WAIT:
1036 slstate_response_wait:
1037 if (test_bit(SLF_MSGEVENT, &sl->flags)) {
1038 unsigned char *lin_buff;
1039 cf = (struct can_frame *)sl->tx_req_skb->data;
1041 lin_buff = (sl->lin_master) ? sl->tx_buff : sl->rx_buff;
1042 if (cf->can_id == (lin_buff[SLLIN_BUFF_ID] & LIN_ID_MASK)) {
1043 hrtimer_cancel(&sl->rx_timer);
1044 pr_debug("sllin: received LIN response in a CAN frame.\n");
1045 if (sllin_setup_msg(sl, SLLIN_STPMSG_RESPONLY,
1046 cf->can_id & LIN_ID_MASK,
1047 cf->data, cf->can_dlc) != -1) {
1049 sl->rx_expect = sl->tx_lim;
1050 sl->data_to_send = true;
1051 sl->dev->stats.tx_packets++;
1052 sl->dev->stats.tx_bytes += tx_bytes;
1054 if (!sl->lin_master) {
1055 sl->tx_cnt = SLLIN_BUFF_DATA;
1058 sllin_send_tx_buff(sl);
1059 clear_bit(SLF_MSGEVENT, &sl->flags);
1060 kfree_skb(sl->tx_req_skb);
1061 netif_wake_queue(sl->dev);
1063 sl->lin_state = SLSTATE_RESPONSE_SENT;
1064 goto slstate_response_sent;
1067 sl->lin_state = SLSTATE_RESPONSE_WAIT_BUS;
1071 /* Be aware, no BREAK here */
1072 case SLSTATE_RESPONSE_WAIT_BUS:
1073 if (sl->rx_cnt < sl->rx_expect)
1076 hrtimer_cancel(&sl->rx_timer);
1077 pr_debug("sllin: response received ID %d len %d\n",
1078 sl->rx_buff[SLLIN_BUFF_ID], sl->rx_cnt - SLLIN_BUFF_DATA - 1);
1080 if (sllin_rx_validate(sl) == -1) {
1081 pr_debug("sllin: RX validation failed.\n");
1082 sllin_report_error(sl, LIN_ERR_CHECKSUM);
1084 /* Send CAN non-RTR frame with data */
1085 pr_debug("sllin: sending NON-RTR CAN"
1086 "frame with LIN payload.");
1087 sll_bump(sl); /* send packet to the network layer */
1090 sl->id_to_send = false;
1091 sl->lin_state = SLSTATE_IDLE;
1094 case SLSTATE_RESPONSE_SENT:
1095 slstate_response_sent:
1096 if (sl->rx_cnt < sl->tx_lim)
1099 hrtimer_cancel(&sl->rx_timer);
1100 sll_bump(sl); /* send packet to the network layer */
1101 pr_debug("sllin: response sent ID %d len %d\n",
1102 sl->rx_buff[SLLIN_BUFF_ID], sl->rx_cnt - SLLIN_BUFF_DATA - 1);
1104 sl->id_to_send = false;
1105 sl->lin_state = SLSTATE_IDLE;
1110 hrtimer_cancel(&sl->rx_timer);
1111 pr_debug("sllin: sllin_kwthread stopped.\n");
1117 /************************************
1118 * sllin_open helper routines.
1119 ************************************/
1121 /* Collect hanged up channels */
1122 static void sll_sync(void)
1125 struct net_device *dev;
1128 for (i = 0; i < maxdev; i++) {
1129 dev = sllin_devs[i];
1133 sl = netdev_priv(dev);
1136 if (dev->flags & IFF_UP)
1141 /* Find a free SLLIN channel, and link in this `tty' line. */
1142 static struct sllin *sll_alloc(dev_t line)
1145 struct net_device *dev = NULL;
1148 if (sllin_devs == NULL)
1149 return NULL; /* Master array missing ! */
1151 for (i = 0; i < maxdev; i++) {
1152 dev = sllin_devs[i];
1158 /* Sorry, too many, all slots in use */
1163 sl = netdev_priv(dev);
1164 if (test_bit(SLF_INUSE, &sl->flags)) {
1165 unregister_netdevice(dev);
1167 sllin_devs[i] = NULL;
1172 char name[IFNAMSIZ];
1173 sprintf(name, "sllin%d", i);
1175 dev = alloc_netdev(sizeof(*sl), name, sll_setup);
1181 sl = netdev_priv(dev);
1182 /* Initialize channel control data */
1183 sl->magic = SLLIN_MAGIC;
1185 spin_lock_init(&sl->lock);
1186 spin_lock_init(&sl->linfr_lock);
1187 sllin_devs[i] = dev;
1193 * Open the high-level part of the SLLIN channel.
1194 * This function is called by the TTY module when the
1195 * SLLIN line discipline is called for. Because we are
1196 * sure the tty line exists, we only have to link it to
1197 * a free SLLIN channel...
1199 * Called in process context serialized from other ldisc calls.
1202 static int sllin_open(struct tty_struct *tty)
1206 pr_debug("sllin: %s() invoked\n", __func__);
1208 if (!capable(CAP_NET_ADMIN))
1211 if (tty->ops->write == NULL)
1214 /* RTnetlink lock is misused here to serialize concurrent
1215 opens of sllin channels. There are better ways, but it is
1220 /* Collect hanged up channels. */
1223 sl = tty->disc_data;
1226 /* First make sure we're not already connected. */
1227 if (sl && sl->magic == SLLIN_MAGIC)
1230 /* OK. Find a free SLLIN channel to use. */
1232 sl = sll_alloc(tty_devnum(tty));
1237 tty->disc_data = sl;
1238 sl->line = tty_devnum(tty);
1240 if (!test_bit(SLF_INUSE, &sl->flags)) {
1241 /* Perform the low-level SLLIN initialization. */
1242 sl->lin_master = master;
1245 pr_debug("sllin: Configured as MASTER\n");
1247 pr_debug("sllin: Configured as SLAVE\n");
1250 sllin_reset_buffs(sl);
1252 sl->lin_baud = (baudrate == 0) ? LIN_DEFAULT_BAUDRATE : baudrate;
1253 pr_debug("sllin: Baudrate set to %u\n", sl->lin_baud);
1255 sl->lin_state = SLSTATE_IDLE;
1257 hrtimer_init(&sl->rx_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
1258 sl->rx_timer.function = sllin_rx_timeout_handler;
1259 /* timeval_to_ktime(msg_head->ival1); */
1260 sl->rx_timer_timeout = ns_to_ktime(
1261 (1000000000l / sl->lin_baud) *
1262 SLLIN_SAMPLES_PER_CHAR * SLLIN_CHARS_TO_TIMEOUT);
1264 set_bit(SLF_INUSE, &sl->flags);
1266 init_waitqueue_head(&sl->kwt_wq);
1267 sl->kwthread = kthread_run(sllin_kwthread, sl, "sllin");
1268 if (sl->kwthread == NULL)
1271 err = register_netdevice(sl->dev);
1273 goto err_free_chan_and_thread;
1276 /* Done. We have linked the TTY line to a channel. */
1278 tty->receive_room = SLLIN_BUFF_LEN * 40; /* We don't flow control */
1280 /* TTY layer expects 0 on success */
1283 err_free_chan_and_thread:
1284 kthread_stop(sl->kwthread);
1285 sl->kwthread = NULL;
1289 tty->disc_data = NULL;
1290 clear_bit(SLF_INUSE, &sl->flags);
1295 /* Count references from TTY module */
1300 * Close down a SLLIN channel.
1301 * This means flushing out any pending queues, and then returning. This
1302 * call is serialized against other ldisc functions.
1304 * We also use this method for a hangup event.
1307 static void sllin_close(struct tty_struct *tty)
1309 struct sllin *sl = (struct sllin *) tty->disc_data;
1311 /* First make sure we're connected. */
1312 if (!sl || sl->magic != SLLIN_MAGIC || sl->tty != tty)
1315 kthread_stop(sl->kwthread);
1316 sl->kwthread = NULL;
1318 tty->disc_data = NULL;
1321 /* Flush network side */
1322 unregister_netdev(sl->dev);
1323 /* This will complete via sl_free_netdev */
1326 static int sllin_hangup(struct tty_struct *tty)
1332 /* Perform I/O control on an active SLLIN channel. */
1333 static int sllin_ioctl(struct tty_struct *tty, struct file *file,
1334 unsigned int cmd, unsigned long arg)
1336 struct sllin *sl = (struct sllin *) tty->disc_data;
1339 /* First make sure we're connected. */
1340 if (!sl || sl->magic != SLLIN_MAGIC)
1345 tmp = strlen(sl->dev->name) + 1;
1346 if (copy_to_user((void __user *)arg, sl->dev->name, tmp))
1354 return tty_mode_ioctl(tty, file, cmd, arg);
1358 static struct tty_ldisc_ops sll_ldisc = {
1359 .owner = THIS_MODULE,
1360 .magic = TTY_LDISC_MAGIC,
1363 .close = sllin_close,
1364 .hangup = sllin_hangup,
1365 .ioctl = sllin_ioctl,
1366 .receive_buf = sllin_receive_buf,
1367 .write_wakeup = sllin_write_wakeup,
1370 static int __init sllin_init(void)
1375 maxdev = 4; /* Sanity */
1378 pr_debug("sllin: %d dynamic interface channels.\n", maxdev);
1380 sllin_devs = kzalloc(sizeof(struct net_device *)*maxdev, GFP_KERNEL);
1382 printk(KERN_ERR "sllin: can't allocate sllin device array!\n");
1386 /* Fill in our line protocol discipline, and register it */
1387 status = tty_register_ldisc(N_SLLIN, &sll_ldisc);
1389 printk(KERN_ERR "sllin: can't register line discipline\n");
1393 #ifdef BREAK_BY_BAUD
1394 pr_debug("sllin: Break is generated by baud-rate change.");
1396 pr_debug("sllin: Break is generated manually with tiny sleep.");
1402 static void __exit sllin_exit(void)
1405 struct net_device *dev;
1407 unsigned long timeout = jiffies + HZ;
1410 if (sllin_devs == NULL)
1413 /* First of all: check for active disciplines and hangup them.
1417 msleep_interruptible(100);
1420 for (i = 0; i < maxdev; i++) {
1421 dev = sllin_devs[i];
1424 sl = netdev_priv(dev);
1425 spin_lock_bh(&sl->lock);
1428 tty_hangup(sl->tty);
1430 spin_unlock_bh(&sl->lock);
1432 } while (busy && time_before(jiffies, timeout));
1434 /* FIXME: hangup is async so we should wait when doing this second
1437 for (i = 0; i < maxdev; i++) {
1438 dev = sllin_devs[i];
1441 sllin_devs[i] = NULL;
1443 sl = netdev_priv(dev);
1445 printk(KERN_ERR "%s: tty discipline still running\n",
1447 /* Intentionally leak the control block. */
1448 dev->destructor = NULL;
1451 unregister_netdev(dev);
1457 i = tty_unregister_ldisc(N_SLLIN);
1459 printk(KERN_ERR "sllin: can't unregister ldisc (err %d)\n", i);
1462 module_init(sllin_init);
1463 module_exit(sllin_exit);